基于JAVA+SSM+VUE+微信小程序的前后端分离的生活日用品交易平台的设计与实现

✌全网粉丝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 添加时间

五、功能模块:

登录注册:登录注册

系统首页:用户在首页页面可看到商品轮播图、精选主题、最近新品等信息

公告信息:关键字搜索公告,查看公告详情

商品信息:查看商品详情,加入购物车,立即订购,添加地址信息,手动输入,地图选点,立即支付

我的:我的信息可以修改个人信息,查看公告信息,查看商品信息,给账户进行充值,与客服进行聊天,查看购物车和订单信息

管理端个人信息管理:

公告信息管理:

商品分类管理:

商品信息管理:

会员信息管理:

轮播图信息管理:

新闻咨询管理:

订单信息管理:

六、代码示例:

java 复制代码
购物车相关业务逻辑
/**
     * 查询
     */
    @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的普及,以及微信官方对其不断升级,相信小程序会代替大多数中小型软件。该小程序解决了客户在网络上购物的问题,它在日后的发展过程中会逐渐变为一个综合性服务平台,这样才能让你的微信小程序开发工作更加明确。

九、源码获取:

大家点赞、收藏、关注、评论 啦 、查看 👇🏻👇🏻👇🏻获取项目下载链接,博主联系方式👇🏻👇🏻👇🏻

链接点击直达:下载链接

相关推荐
草莓base3 分钟前
【手写一个spring】spring源码的简单实现--bean对象的创建
java·spring·rpc
疯狂的沙粒12 分钟前
如何在Vue项目中应用TypeScript?应该注意那些点?
前端·vue.js·typescript
drebander27 分钟前
使用 Java Stream 优雅实现List 转化为Map<key,Map<key,value>>
java·python·list
小镇程序员28 分钟前
vue2 src_Todolist全局总线事件版本
前端·javascript·vue.js
乌啼霜满天24931 分钟前
Spring 与 Spring MVC 与 Spring Boot三者之间的区别与联系
java·spring boot·spring·mvc
tangliang_cn36 分钟前
java入门 自定义springboot starter
java·开发语言·spring boot
程序猿阿伟37 分钟前
《智能指针频繁创建销毁:程序性能的“隐形杀手”》
java·开发语言·前端
Grey_fantasy1 小时前
高级编程之结构化代码
java·spring boot·spring cloud
弗锐土豆1 小时前
工业生产安全-安全帽第二篇-用java语言看看opencv实现的目标检测使用过程
java·opencv·安全·检测·面部
Elaine2023911 小时前
零碎04 MybatisPlus自定义模版生成代码
java·spring·mybatis