✌全网粉丝20W+,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌
🍅文末获取项目下载方式🍅
一、项目背景介绍:
随着互联网的快速发展和智能移动设备的普及,电子商务成为了人们购物的主要方式之一。然而,传统的电子商务平台主要侧重于大型商品和服务的交易,对于生活日用品的交易支持相对较弱。这导致了在日常生活中,人们购买生活日用品时仍然依赖于传统的线下购物方式,面临诸如时间浪费、交通拥堵等问题。
为了解决这一问题,本研究旨在设计和实现一个基于JAVA+SSM+VUE的前后端分离的生活日用品交易平台,并结合微信小程序作为移动端的交互界面。这样的平台将充分利用互联网和移动设备的优势,提供便捷的购物体验和高效的交易服务。
JAVA作为一种强大的编程语言,具有广泛的应用领域和丰富的开发资源,能够提供稳定可靠的后端支持。SSM框架是一种常用的Java Web开发框架,具有良好的扩展性和灵活性,适用于构建中小型的电子商务平台。VUE作为一种流行的JavaScript框架,具有简洁易用的特点,可实现前端页面的快速开发和响应式设计。
通过将前后端进行分离,可以实现前后端的解耦,提高系统的可维护性和扩展性。微信小程序作为一种轻量级的移动应用开发框架,具有广泛的用户基础和良好的用户体验,能够满足用户在移动设备上进行生活日用品交易的需求。
总之,本研究的设计与实现将为人们提供一种便捷、高效的购物方式,改善传统线下购物的不便之处,推动生活日用品交易的数字化和智能化发展。
二、项目技术简介:
微信小程序
微信小程序,是一种普及型高、新型的、不需要安装就可以使用的程序,它通过搜索栏或者是扫描微信二维码,就可以使用户体验到其功能。申请微信小程序的门槛很低,各行各业的用户与组织均可以申请注册。
1、广阔的宣传范围。微信有着巨量的用户基础,为小程序提供了天然的客户基础,提高商家销售的机会,拥有了更多的曝光机会,推动了经济的持续性发展。
2、使用方便。微信小程序不用下载就可以使用,大幅度的降低了研发软件的成本,使用过以后可以在用过的小程序中再次使用,十分简便,容易上手
3、较为完善的程序设计。在进行微信小程序的关键字搜索,可以较为精准的搜索到想要的商家。与APP上的软件功能基本类似,有着完善的售后措施,保证了用户的购物体验。
Java开发工具
对于java工具的使用,有以下几种方法:1.操作系统的记事本软件 2. 集成开发环境Ide 3. 高级记事本软件4.eclipse和MyEclipse的区别:1.Eclipse是一个可扩展的开源ide,eclipse的特点是:免费,用纯java语言编写,无需安装,可扩展性强。2.MyEclipse:添加基于eclipse的功能插件,为web开发提供强大的系统架构平台。
前端开发工具
该系统的首页由hbuliderx开发。Hbuliderx是由中国dcloud公司开发的。它可以大大提高开发效率,为程序员设计出更具人文关怀的用户界面,该工具涵盖了所有语法库以及兼容各个浏览器的数据类型。开发Hbuilder工具的主要原因是为了帮助追求效率的开发者。他拥有最快的开发工具,五个助手极大的提高了代码编写的速率;并且使用软绿色作为主题,能够很好保护开发者的健康。
MYSQL数据库
Mysql现在被Oracle公司收购,虽然Oracle公司一直声称要讲Mysql变为付费软件,但到目前为止,该软件已然是免费状态。
所以,Mysql在市场上非常受欢迎,很大一个原因就是它是免费开源的,这让它成为很多中小型企业的宠儿,除此之外,Mysql相对来说部署较为简单,所需计算机性能不高,使用标准SQL语言进行操作,对软件开发人员来说,上手简单,部署方便。而且市面上有很多数据库可视化操作工具,如Navicat for Mysql,通过这个软件操作数据库,非常的简介,直观且高效。但与Oracle相比,Mysql还是存在一些弊端,首先,在安全性方面,不如Oracle稳定,并且,功能没有Oracle那么多,目前常用的操作是表结构查询,视图查询,事务操作等,而触发过程,存储器等功能远没有Oracle强大。
Tomcat服务器
Tomcat服务器是一般的web应用服务器,它属于免费开源地位轻量级服务器。该服务器通常被应用与广大中小型系统,或者同时接入账户的情况。对于Java学习的初学者来说,通常是把Apache服务器放置在一台主机上,然后去是试验HTML页面的访问请求是否能够响应。事实上,能够进行独立运行的Tomacat服务器只是Apache服务器的一个扩展,因此,Tomacat的运行即是Apache独立进程运行的。
这个轻量级的Tomcat服务是众多开发者的首选。最主要的原因是在对Tomcat服务器进行操作时使用的系统资源少,同时该服务器的扩展性能良好,能够支持邮件功能、负载均衡等系统开发常用功能。对Tomcat感兴趣的程序员可以修改它并在里面添加新特性,这使得Tomcat在不断的更新优化。
三、系统功能模块介绍:
四、数据库设计:
1:‘地址’(address)
字段名 | 类型 | 默认值 | 列注释 |
---|---|---|---|
id | bigint | NULL | 主键id |
userid | bigint | NULL | 用户id |
address | varchar | NULL | 地址 |
name | varchar | NULL | 收货人 |
phone | varchar | NULL | 电话 |
isdefault | varchar | NULL | 是否默认地址[是/否] |
addtime | datetime | NULL |
2:‘购物车表’(cart)
字段名 | 类型 | 默认值 | 列注释 |
---|---|---|---|
id | bigint | NULL | 主键id |
tablename | varchar | NULL | 商品表名 |
userid | bigint | NULL | 用户id |
goodid | bigint | NULL | 商品id |
goodname | varchar | NULL | 商品名称 |
picture | varchar | NULL | 图片 |
buynumber | int | NULL | 购买数量 |
price | float | NULL | 单价 |
discountprice | float | NULL | 会员价 |
addtime | datetime | NULL | 添加时间 |
3:‘客服聊天表’(chat)
字段名 | 类型 | 默认值 | 列注释 |
---|---|---|---|
id | bigint | NULL | 主键id |
userid | bigint | NULL | 用户id |
adminid | bigint | NULL | 管理员id |
ask | varchar | NULL | 提问 |
reply | varchar | NULL | 回复 |
isreply | int | NULL | 是否回复 |
addtime | datetime | NULL | 添加时间 |
4:config(config)
字段名 | 类型 | 默认值 | 列注释 |
---|---|---|---|
id | bigint | NULL | |
name | varchar | NULL | |
value | varchar | NULL |
5:‘公告信息评论表’(discussgonggaoxinxi)
字段名 | 类型 | 默认值 | 列注释 |
---|---|---|---|
id | bigint | NULL | 主键id |
refid | bigint | NULL | 关联表id |
userid | bigint | NULL | 用户id |
nickname | varchar | NULL | 用户名 |
content | text | NULL | 评论内容 |
reply | text | NULL | 回复内容 |
addtime | datetime | NULL | 添加时间 |
6:‘商品信息评论表’(discussshangpinxinxi)
字段名 | 类型 | 默认值 | 列注释 |
---|---|---|---|
id | bigint | NULL | 主键id |
refid | bigint | NULL | 关联表id |
userid | bigint | NULL | 用户id |
nickname | varchar | NULL | 用户名 |
content | text | NULL | 评论内容 |
reply | text | NULL | 回复内容 |
addtime | datetime | NULL | 添加时间 |
7:‘公告信息’(gonggaoxinxi)
字段名 | 类型 | 默认值 | 列注释 |
---|---|---|---|
id | bigint | NULL | 主键id |
gonggaobiaoti | varchar | NULL | 公告标题 |
gonggaoleixing | varchar | NULL | 公告类型 |
tupian | varchar | NULL | 图片 |
neirong | text | NULL | 内容 |
faburiqi | date | NULL | 发布日期 |
addtime | datetime | NULL | 添加时间 |
8:‘会员’(huiyuan)
字段名 | 类型 | 默认值 | 列注释 |
---|---|---|---|
id | bigint | NULL | 主键id |
yonghuming | varchar | NULL | 用户名 |
mima | varchar | NULL | 密码 |
xingming | varchar | NULL | 姓名 |
xingbie | varchar | NULL | 性别 |
touxiang | varchar | NULL | 头像 |
shouji | varchar | NULL | 手机 |
money | float | NULL | 余额 |
addtime | datetime | NULL | 添加时间 |
9:‘新闻资讯’(news)
字段名 | 类型 | 默认值 | 列注释 |
---|---|---|---|
id | bigint | NULL | 主键id |
title | varchar | NULL | 标题 |
introduction | text | NULL | 简介 |
picture | varchar | NULL | 图片 |
content | text | NULL | 内容 |
addtime | datetime | NULL | 添加时间 |
10:‘订单’(orders)
字段名 | 类型 | 默认值 | 列注释 |
---|---|---|---|
id | bigint | NULL | 主键id |
orderid | varchar | NULL | 订单编号 |
tablename | varchar | NULL | 商品表名 |
userid | bigint | NULL | 用户id |
goodid | bigint | NULL | 商品id |
goodname | varchar | NULL | 商品名称 |
picture | varchar | NULL | 商品图片 |
buynumber | int | NULL | 购买数量 |
price | float | NULL | 价格/积分 |
discountprice | float | NULL | 折扣价格 |
total | float | NULL | 总价格/总积分 |
discounttotal | float | NULL | 折扣总价格 |
type | int | NULL | 支付类型 |
status | varchar | NULL | 状态 |
address | varchar | NULL | 地址 |
addtime | datetime | NULL | 添加时间 |
11:‘商品分类’(shangpinfenlei)
字段名 | 类型 | 默认值 | 列注释 |
---|---|---|---|
id | bigint | NULL | 主键id |
fenlei | varchar | NULL | 分类 |
addtime | datetime | NULL | 添加时间 |
12:‘商品信息’(shangpinxinxi)
字段名 | 类型 | 默认值 | 列注释 |
---|---|---|---|
id | bigint | NULL | 主键id |
shangpinmingcheng | varchar | NULL | 商品名称 |
fenlei | varchar | NULL | 分类 |
biaoqian | varchar | NULL | 标签 |
tupian | varchar | NULL | 图片 |
guige | varchar | NULL | 规格 |
pinpai | varchar | NULL | 品牌 |
xiangqing | text | NULL | 详情 |
clicktime | datetime | NULL | 最近点击时间 |
clicknum | int | NULL | 点击次数 |
price | float | NULL | 价格 |
addtime | datetime | NULL | 添加时间 |
13:‘收藏表’(storeup)
字段名 | 类型 | 默认值 | 列注释 |
---|---|---|---|
id | bigint | NULL | 主键id |
userid | bigint | NULL | 用户id |
refid | bigint | NULL | 收藏id |
tablename | varchar | NULL | 表名 |
name | varchar | NULL | 收藏名称 |
picture | varchar | NULL | 收藏图片 |
addtime | datetime | NULL | 添加时间 |
14:‘token表’(token)
字段名 | 类型 | 默认值 | 列注释 |
---|---|---|---|
id | bigint | NULL | 主键id |
userid | bigint | NULL | 用户id |
username | varchar | NULL | 用户名 |
tablename | varchar | NULL | 表名 |
role | varchar | NULL | 角色 |
token | varchar | NULL | token |
expiratedtime | datetime | NULL | 过期时间 |
addtime | datetime | NULL | 新增时间 |
15:‘用户表’(users)
字段名 | 类型 | 默认值 | 列注释 |
---|---|---|---|
id | bigint | NULL | 主键id |
username | varchar | NULL | 用户账号 |
password | varchar | NULL | 密码 |
role | varchar | NULL | 用户类型 |
addtime | datetime | NULL | 添加时间 |
五、功能模块:
登录注册:登录注册
系统首页:用户在首页页面可看到商品轮播图、精选主题、最近新品等信息
公告信息:关键字搜索公告,查看公告详情
商品信息:查看商品详情,加入购物车,立即订购,添加地址信息,手动输入,地图选点,立即支付
我的:我的信息可以修改个人信息,查看公告信息,查看商品信息,给账户进行充值,与客服进行聊天,查看购物车和订单信息
管理端个人信息管理:
公告信息管理:
商品分类管理:
商品信息管理:
会员信息管理:
轮播图信息管理:
新闻咨询管理:
订单信息管理:
六、代码示例:
购物车相关业务逻辑
/**
* 查询
*/
@RequestMapping("/query")
public R query(CartEntity cart){
EntityWrapper< CartEntity> ew = new EntityWrapper< CartEntity>();
ew.allEq(MPUtil.allEQMapPre( cart, "cart"));
CartView cartView = cartService.selectView(ew);
return R.ok("查询购物车表成功").put("data", cartView);
}
/**
* 后端详情
*/
@RequestMapping("/info/{id}")
public R info(@PathVariable("id") String id){
CartEntity cart = cartService.selectById(id);
return R.ok().put("data", cart);
}
/**
* 前端详情
*/
@RequestMapping("/detail/{id}")
public R detail(@PathVariable("id") String id){
CartEntity cart = cartService.selectById(id);
return R.ok().put("data", cart);
}
/**
* 后端保存
*/
@RequestMapping("/save")
public R save(@RequestBody CartEntity cart, HttpServletRequest request){
cart.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
//ValidatorUtils.validateEntity(cart);
cart.setUserid((Long)request.getSession().getAttribute("userId"));
cartService.insert(cart);
return R.ok();
}
/**
* 前端保存
*/
@RequestMapping("/add")
public R add(@RequestBody CartEntity cart, HttpServletRequest request){
cart.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
//ValidatorUtils.validateEntity(cart);
cartService.insert(cart);
return R.ok();
}
/**
* 修改
*/
@RequestMapping("/update")
public R update(@RequestBody CartEntity cart, HttpServletRequest request){
//ValidatorUtils.validateEntity(cart);
cartService.updateById(cart);//全部更新
return R.ok();
}
/**
* 删除
*/
@RequestMapping("/delete")
public R delete(@RequestBody Long[] ids){
cartService.deleteBatchIds(Arrays.asList(ids));
return R.ok();
}
/**
* 提醒接口
*/
@RequestMapping("/remind/{columnName}/{type}")
public R remindCount(@PathVariable("columnName") String columnName, HttpServletRequest request,
@PathVariable("type") String type,@RequestParam Map<String, Object> map) {
map.put("column", columnName);
map.put("type", type);
if(type.equals("2")) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Calendar c = Calendar.getInstance();
Date remindStartDate = null;
Date remindEndDate = null;
if(map.get("remindstart")!=null) {
Integer remindStart = Integer.parseInt(map.get("remindstart").toString());
c.setTime(new Date());
c.add(Calendar.DAY_OF_MONTH,remindStart);
remindStartDate = c.getTime();
map.put("remindstart", sdf.format(remindStartDate));
}
if(map.get("remindend")!=null) {
Integer remindEnd = Integer.parseInt(map.get("remindend").toString());
c.setTime(new Date());
c.add(Calendar.DAY_OF_MONTH,remindEnd);
remindEndDate = c.getTime();
map.put("remindend", sdf.format(remindEndDate));
}
}
Wrapper<CartEntity> wrapper = new EntityWrapper<CartEntity>();
if(map.get("remindstart")!=null) {
wrapper.ge(columnName, map.get("remindstart"));
}
if(map.get("remindend")!=null) {
wrapper.le(columnName, map.get("remindend"));
}
if(!request.getSession().getAttribute("role").toString().equals("管理员")) {
wrapper.eq("userid", (Long)request.getSession().getAttribute("userId"));
}
int count = cartService.selectCount(wrapper);
return R.ok().put("count", count);
}
订单相关业务逻辑
/**
* 查询
*/
@RequestMapping("/query")
public R query(OrdersEntity orders){
EntityWrapper< OrdersEntity> ew = new EntityWrapper< OrdersEntity>();
ew.allEq(MPUtil.allEQMapPre( orders, "orders"));
OrdersView ordersView = ordersService.selectView(ew);
return R.ok("查询订单成功").put("data", ordersView);
}
/**
* 后端详情
*/
@RequestMapping("/info/{id}")
public R info(@PathVariable("id") String id){
OrdersEntity orders = ordersService.selectById(id);
return R.ok().put("data", orders);
}
/**
* 前端详情
*/
@RequestMapping("/detail/{id}")
public R detail(@PathVariable("id") String id){
OrdersEntity orders = ordersService.selectById(id);
return R.ok().put("data", orders);
}
/**
* 后端保存
*/
@RequestMapping("/save")
public R save(@RequestBody OrdersEntity orders, HttpServletRequest request){
orders.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
//ValidatorUtils.validateEntity(orders);
orders.setUserid((Long)request.getSession().getAttribute("userId"));
ordersService.insert(orders);
return R.ok();
}
/**
* 前端保存
*/
@RequestMapping("/add")
public R add(@RequestBody OrdersEntity orders, HttpServletRequest request){
orders.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
//ValidatorUtils.validateEntity(orders);
ordersService.insert(orders);
return R.ok();
}
/**
* 修改
*/
@RequestMapping("/update")
public R update(@RequestBody OrdersEntity orders, HttpServletRequest request){
//ValidatorUtils.validateEntity(orders);
ordersService.updateById(orders);//全部更新
return R.ok();
}
/**
* 删除
*/
@RequestMapping("/delete")
public R delete(@RequestBody Long[] ids){
ordersService.deleteBatchIds(Arrays.asList(ids));
return R.ok();
}
/**
* 提醒接口
*/
@RequestMapping("/remind/{columnName}/{type}")
public R remindCount(@PathVariable("columnName") String columnName, HttpServletRequest request,
@PathVariable("type") String type,@RequestParam Map<String, Object> map) {
map.put("column", columnName);
map.put("type", type);
if(type.equals("2")) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Calendar c = Calendar.getInstance();
Date remindStartDate = null;
Date remindEndDate = null;
if(map.get("remindstart")!=null) {
Integer remindStart = Integer.parseInt(map.get("remindstart").toString());
c.setTime(new Date());
c.add(Calendar.DAY_OF_MONTH,remindStart);
remindStartDate = c.getTime();
map.put("remindstart", sdf.format(remindStartDate));
}
if(map.get("remindend")!=null) {
Integer remindEnd = Integer.parseInt(map.get("remindend").toString());
c.setTime(new Date());
c.add(Calendar.DAY_OF_MONTH,remindEnd);
remindEndDate = c.getTime();
map.put("remindend", sdf.format(remindEndDate));
}
}
Wrapper<OrdersEntity> wrapper = new EntityWrapper<OrdersEntity>();
if(map.get("remindstart")!=null) {
wrapper.ge(columnName, map.get("remindstart"));
}
if(map.get("remindend")!=null) {
wrapper.le(columnName, map.get("remindend"));
}
if(!request.getSession().getAttribute("role").toString().equals("管理员")) {
wrapper.eq("userid", (Long)request.getSession().getAttribute("userId"));
}
int count = ordersService.selectCount(wrapper);
return R.ok().put("count", count);
}
七、论文参考:
论文参考···
八、项目总结:
该平台通过使用SSM框架、微信小程序开发、MYSQL数据库等技术,发掘了该系统的可行性,实现了组建的基于微信小程序的生活日用品商城,通过对此平台的的学习和研究,学习了目前炙手可热的小程序开发技术,通过这次的实践,明确的意识到了常动手操作的重要性,需要在开发过程中深入的探索与认识各功能的作用,认识到每一个步骤的逻辑联系与操作方法,才能最好的去掌握它。
该系统前台是微信小程序,运行在微信服务器上,安全性毋庸置疑,并且可以上传多版本,应用升级迭代很方便,也支持很多UI框架,整体很完善。系统后台使用java编写,使用SSM框架完成,使各个模块松耦合,模块的修改与升级互不影响,维护方便。当然,在此之前必须要熟悉微信框架以及熟练地使用css来调样式。对于CSS,个人觉得比较难调的就是定位和布局了。学习新的框架就是两个过程:熟悉框架和上手项目。当然,当你已经熟悉了框架之后,你就会显得得心应手。
渐渐的微信小程序进入大家的生活,点开即用无需下载的方便大家都有体会,随着5G的普及,以及微信官方对其不断升级,相信小程序会代替大多数中小型软件。该小程序解决了客户在网络上购物的问题,它在日后的发展过程中会逐渐变为一个综合性服务平台,这样才能让你的微信小程序开发工作更加明确。
九、源码获取:
大家点赞、收藏、关注、评论啦 、查看👇🏻👇🏻👇🏻获取项目下载链接,博主联系方式👇🏻👇🏻👇🏻
基于微信小程序的生活日用品商城,通过对此平台的的学习和研究,学习了目前炙手可热的小程序开发技术,通过这次的实践,明确的意识到了常动手操作的重要性,需要在开发过程中深入的探索与认识各功能的作用,认识到每一个步骤的逻辑联系与操作方法,才能最好的去掌握它。
该系统前台是微信小程序,运行在微信服务器上,安全性毋庸置疑,并且可以上传多版本,应用升级迭代很方便,也支持很多UI框架,整体很完善。系统后台使用java编写,使用SSM框架完成,使各个模块松耦合,模块的修改与升级互不影响,维护方便。当然,在此之前必须要熟悉微信框架以及熟练地使用css来调样式。对于CSS,个人觉得比较难调的就是定位和布局了。学习新的框架就是两个过程:熟悉框架和上手项目。当然,当你已经熟悉了框架之后,你就会显得得心应手。
渐渐的微信小程序进入大家的生活,点开即用无需下载的方便大家都有体会,随着5G的普及,以及微信官方对其不断升级,相信小程序会代替大多数中小型软件。该小程序解决了客户在网络上购物的问题,它在日后的发展过程中会逐渐变为一个综合性服务平台,这样才能让你的微信小程序开发工作更加明确。
九、源码获取:
大家点赞、收藏、关注、评论啦 、查看👇🏻👇🏻👇🏻获取项目下载链接,博主联系方式👇🏻👇🏻👇🏻
链接点击直达:下载链接