博主介绍:✌全网粉丝20W+,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌
🍅文末获取源码联系🍅
👇🏻 精彩专栏推荐订阅👇🏻 不然下次找不到哟
目录
一、前言介绍:
商品销售古老而又历久弥新,人们的生活离不开它,处处可见大大小小的商品销售实体店, 商品销售行业一直是一个必须存在的行业,而互联网的发展为 商品销售行业迎来了一个机遇,将互联网和服装行业结合起来。
随着现代信息技术的迅猛发展,智能手机的普及,微信公众平台在微信应用软件中的应用日益广泛和深入,特别是Internet与智能手机的接轨,为微信的发展提供了丰富有力的条件。目前,微信主要分为个人微信以及微信公众号,微信公众号的开发为企业单位等带来了极大的方便。据我们互联网行业发布的最新报道显示,随着手机的不断更新,和手机价格的降低,智能手机呈快速增长趋势,使用微信的数量不断增加,这使得基于微信平台的商品销售小程序的成了必然。微信的信息交流互动性强,能够及时通过微信与客户进行交流通过微信营销能够大大提高营业额,而且微信口碑相传性极强,这也能够大大的提高商品销售小程序的知名度,因此,开发本基于微信平台的零食商品销售采购小程序是必须的。
二、主要技术:
2.1 Spring Boot框架介绍:
Spring框架是Java平台上的一种开源应用框架,提供具有控制反转特性的容器。尽管Spring框架自身对编程模型没有限制,但其在Java应用中的频繁使用让它备受青睐,以至于后来让它作为EJB(EnterpriseJavaBeans)模型的补充,甚至是替补。Spring框架为开发提供了一系列的解决方案,比如利用控制反转的核心特性,并通过依赖注入实现控制反转来实现管理对象生命周期容器化,利用面向切面编程进行声明式的事务管理,整合多种持久化技术管理数据访问,提供大量优秀的Web框架方便开发等等。Spring框架具有控制反转(IOC)特性,IOC旨在方便项目维护和测试,它提供了一种通过Java的反射机制对Java对象进行统一的配置和管理的方法。Spring框架利用容器管理对象的生命周期,容器可以通过扫描XML文件或类上特定Java注解来配置对象,开发者可以通过依赖查找或依赖注入来获得对象。Spring框架具有面向切面编程(AOP)框架,SpringAOP框架基于代理模式,同时运行时可配置;AOP框架主要针对模块之间的交叉关注点进行模块化。Spring框架的AOP框架仅提供基本的AOP特性,虽无法与AspectJ框架相比,但通过与AspectJ的集成,也可以满足基本需求。Spring框架下的事务管理、远程访问等功能均可以通过使用SpringAOP技术实现。Spring的事务管理框架为Java平台带来了一种抽象机制,使本地和全局事务以及嵌套事务能够与保存点一起工作,并且几乎可以在Java平台的任何环境中工作。
2.2 MYSQL数据库:
MySQL数据库使用的语言是SQL语言。MySQL在保存数据时是根据数据的类型和特征分开保存在不同的表中,这样当用户在需要调用的数据时,就不再需要花费大量时间去寻找数据了,只要找到对应的表,就可以找到需要的数据了。MySQL可以完美的实现对于数据库的基本操作。因为 MySQL 数据库的占用的内存少,运行快,成本低,源代码开放,可移植性强,所以越来越多的数据来源简单的项目的开发都会选择 MySQL作为数据库,而MySQL也变得越来越流行。
2.3 微信开发者工具
在传统web浏览器中,在加载htm15页面时先加载视图层的html和css,后加载逻辑层的java script,然后返回数据并在浏览器中展示页面。而微信开发者工具的系统层是基于Native System的,视图层和逻辑层会同时被加载。微信小程序的这种逻辑方式大大的优化了页面响应速度,减少了页面加载的等待时间,提高了用户体验。微信开发者工具可以实现同步本地文件,开发调试,编译预览,上传,发布等一整套流程。
三、系统设计:
3.1 系统架构设计:
3.2 登录时序图设计:
四、功能截图:
4.1 微信小程序端:
4.1.1登录注册模块:
项目启动后输入账号名或密码进行登录、也可以用户进行注册
4.1 2 首页信息模块:
用户登陆系统后,可以对首页、零食信息、零食咨讯、购物车、我的等内容进行详细操作。
4.1.2 零食商品详情:
4.1.3 零食资讯和购物车:
4.1.4 我的个人模块
在我的页面可以对我的收藏管理、用户充值、在线客服、购物车、我的订单、等详细信息进行操作
4.2 后台管理员端:
4.2.1 管理员登录:
管理员登陆系统后,可以查看首页、个人中心、用户管理、服装分类管理、服装管理、系统管理、订单管理等功能,还能对每个功能逐一进行相应操作
4.2.2 用户信息管理:
在用户管理页面可以对索引、用户账号、用户姓名、照片、性别、联系方式等内容进行详情,修改或删除等操作
4.2.3 零食类型管理:
在零食分类管理页面可以对索引、零食分类等内容进行修改或删除等操作
4.2.4 零食信息管理:
在零食管理页面可以对索引、零食等内容进行修改或删除等操作
4.2.5轮播图管理:
4.2.6 订单模块管理:
在订单管理页面可以对索引、订单等内容进行修改或删除等操作;如图5-14所示
五、代码实现:
-
-
-
/**
-
* 订单
-
* 后端接口
-
* @author
-
* @email
-
* @date 2022-11-19 14:39:44
-
*/
-
@RestController
-
@RequestMapping("/orders")
-
public
class
OrdersController {
-
@Autowired
-
private OrdersService ordersService;
-
-
-
/**
-
* 后端列表
-
*/
-
@RequestMapping("/page")
-
public R
page
(@RequestParam Map<String, Object> params,OrdersEntity orders,
-
HttpServletRequest request){
-
if(!request.getSession().getAttribute(
"role").toString().equals(
"管理员")) {
-
orders.setUserid((Long)request.getSession().getAttribute(
"userId"));
-
}
-
EntityWrapper<OrdersEntity> ew =
new
EntityWrapper<OrdersEntity>();
-
PageUtils
page
= ordersService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, orders), params), params));
-
-
return R.ok().put(
"data", page);
-
}
-
-
/**
-
* 前端列表
-
*/
-
@IgnoreAuth
-
@RequestMapping("/list")
-
public R
list
(@RequestParam Map<String, Object> params,OrdersEntity orders,
-
HttpServletRequest request){
-
EntityWrapper<OrdersEntity> ew =
new
EntityWrapper<OrdersEntity>();
-
PageUtils
page
= ordersService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, orders), params), params));
-
return R.ok().put(
"data", page);
-
}
-
-
/**
-
* 列表
-
*/
-
@RequestMapping("/lists")
-
public R
list
( OrdersEntity orders){
-
EntityWrapper<OrdersEntity> ew =
new
EntityWrapper<OrdersEntity>();
-
ew.allEq(MPUtil.allEQMapPre( orders,
"orders"));
-
return R.ok().put(
"data", ordersService.selectListView(ew));
-
}
-
-
/**
-
* 查询
-
*/
-
@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") Long id){
-
OrdersEntity
orders
= ordersService.selectById(id);
-
return R.ok().put(
"data", orders);
-
}
-
-
/**
-
* 前端详情
-
*/
-
@IgnoreAuth
-
@RequestMapping("/detail/{id}")
-
public R
detail
(@PathVariable("id") Long 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("/value/{xColumnName}/{yColumnName}")
-
public R
value
(@PathVariable("yColumnName") String yColumnName, @PathVariable("xColumnName") String xColumnName,HttpServletRequest request) {
-
Map<String, Object> params =
new
HashMap<String, Object>();
-
params.put(
"xColumn", xColumnName);
-
params.put(
"yColumn", yColumnName);
-
EntityWrapper<OrdersEntity> ew =
new
EntityWrapper<OrdersEntity>();
-
ew.in(
"status",
new
String[]{
"已支付",
"已发货",
"已完成"});
-
List<Map<String, Object>> result = ordersService.selectValue(params, ew);
-
SimpleDateFormat
sdf
=
new
SimpleDateFormat(
"yyyy-MM-dd");
-
for(Map<String, Object> m : result) {
-
for(String k : m.keySet()) {
-
if(m.get(k)
instanceof Date) {
-
m.put(k, sdf.format((Date)m.get(k)));
-
}
-
}
-
}
-
return R.ok().put(
"data", result);
-
}
-
-
/**
-
* (按值统计)时间统计类型
-
*/
-
@RequestMapping("/value/{xColumnName}/{yColumnName}/{timeStatType}")
-
public R
valueDay
(@PathVariable("yColumnName") String yColumnName, @PathVariable("xColumnName") String xColumnName, @PathVariable("timeStatType") String timeStatType,HttpServletRequest request) {
-
Map<String, Object> params =
new
HashMap<String, Object>();
-
params.put(
"xColumn", xColumnName);
-
params.put(
"yColumn", yColumnName);
-
params.put(
"timeStatType", timeStatType);
-
EntityWrapper<OrdersEntity> ew =
new
EntityWrapper<OrdersEntity>();
-
ew.in(
"status",
new
String[]{
"已支付",
"已发货",
"已完成"});
-
List<Map<String, Object>> result = ordersService.selectTimeStatValue(params, ew);
-
SimpleDateFormat
sdf
=
new
SimpleDateFormat(
"yyyy-MM-dd");
-
for(Map<String, Object> m : result) {
-
for(String k : m.keySet()) {
-
if(m.get(k)
instanceof Date) {
-
m.put(k, sdf.format((Date)m.get(k)));
-
}
-
}
-
}
-
return R.ok().put(
"data", result);
-
}
-
-
/**
-
* 分组统计
-
*/
-
@RequestMapping("/group/{columnName}")
-
public R
group
(@PathVariable("columnName") String columnName,HttpServletRequest request) {
-
Map<String, Object> params =
new
HashMap<String, Object>();
-
params.put(
"column", columnName);
-
EntityWrapper<OrdersEntity> ew =
new
EntityWrapper<OrdersEntity>();
-
ew.in(
"status",
new
String[]{
"已支付",
"已发货",
"已完成"});
-
List<Map<String, Object>> result = ordersService.selectGroup(params, ew);
-
SimpleDateFormat
sdf
=
new
SimpleDateFormat(
"yyyy-MM-dd");
-
for(Map<String, Object> m : result) {
-
for(String k : m.keySet()) {
-
if(m.get(k)
instanceof Date) {
-
m.put(k, sdf.format((Date)m.get(k)));
-
}
-
}
-
}
-
return R.ok().put(
"data", result);
-
}
-
-
}
六、结论:
对于本次的系统开发来看,它主要是把我以前所学的知识进行了一次综合的应用。经过这次毕业设计的制作它主要是把我以前所学的理论知识应用到社会实践当中。通过这一次的点餐平台网站的设计与实现它能够有效把计算机知识与实际问题相互应用,通过计算机网络技术来解决用户生活当中的实际问题,从而提高我的编程能力。虽然在这次毕业设计当中我遇到了很多的问题和困难,但是通过不断的调试和老师的帮助让我圆满的完成了这次毕业设计。通过这次毕业设计的制作让我对计算机实际应用得到了很强的锻炼,同时也大大的提高了我的动手动脑能力,让我也感受到了其中的乐趣和喜悦。通过这次毕业设计的撰写把我在大学期间所学到的东西都应用上了,但是我觉得还是微不足道的,因为在这次毕业设计当中让我深深的了解到对于软件开发和学习理论知识它是两个完全不同的概念。但是通过这次软件的开发让我在以后的工作当中打下了良好的基础。
七、源码获取:
大家点赞、收藏、关注、评论啦 、查看👇🏻获取联系方式👇🏻
打卡 文章 更新 308/ 365天
精彩专栏推荐订阅:在下方专栏👇🏻
转载:https://blog.csdn.net/weixin_39709134/article/details/128712275