1. 地址簿功能
查询地址列表
属于常规方案
新增地址
属于常规方案
修改地址
删除地址
设置默认地址
2. 用户下单业务
数据库分析
订单表和订单明细表的关系:一对多
代码开发
controller 层
service 层
异常处理(收货地址为空、超出配送范围、购物车为空)
创建订单对象,对象属性赋值,添加前端传入以外的对象属性
向订单表中插入一条数据
向订单明细表插入 n 条数据
清空当前用户的购物车
封装数据返回
3. 订单业务
微信支付
微信小程序支付时序图
流程简化(个人原因)
这里因为需要申请对应的 微信支付商户号,对该流程进行简化
在用户提交订单 -> 返回订单号 -> 用户点击支付 -> 后端直接进行支付完成的处理
缺点:支付后无法看到页面跳转
这个时候就可以在数据看到数据的变动
用户端订单业务
查询历史订单
通过分页查询实现
查询订单详情
取消订单
根据 order id 查询订单,处理异常
在订单处于 待接单 状态的时候 需要完成退款,否则直接修改订单状态
再来一单
将订单详情里的内容,转为购物车对象
管理端订单业务
只在文档里展示 server 层的代码,具体查看源码
订单搜索
各个状态订单的统计
查询订单详情
接单
就是修改订单的状态
拒单
只有订单状态为 2 (待接单)的情况下才可以进行拒单
取消订单
与拒单业务类似,查看代码
派送订单,完成订单
要注意对订单进行校验
4. 定时任务
Spring Task
Spring Task 是Spring框架提供的任务调度工具,可以按照约定的时间自动执行某个代码逻辑
corn表达式
cron表达式其实就是一个字符串,通过cron表达式可以定义任务触发的时间
构成规则:分为6或7个域,由空格分隔开,每个域代表一个含义
每个域的含义分别为:秒、分钟、小时、日、月、周、年(可选)
可以考虑直接在线生成
cron表达式在线生成器:在线Cron表达式生成器
使用流程
- 导入maven坐标 spring-context(已存在)
- 启动类添加注解 @EnableScheduling 开启任务调度
- 自定义定时任务类
订单状态定时处理
处理超时未支付的订单
每 15 分钟运行一次
处理派送时间异常订单
凌晨一点处理还处于派送中的订单,就修改为 完成
5. WebSocket
WebSocket 是基于 TCP 的一种新的网络协议。它实现了浏览器与服务器全双工通信——浏览器和服务器只需要完成一次握手,两者之间就可以创建持久性的连接, 并进行双向数据传输
应用场景:
缺点:
- 服务器长期维护长连接需要一定的成本
- 各个浏览器支持程度不一
- WebSocket 是长连接,受网络限制比较大,需要处理好重连
使用流程
- 直接使用websocket.html页面作为WebSocket客户端
- 导入WebSocket的maven坐标
- 导入WebSocket服务端组件WebSocketServer,用于和客户端通信
- 导入配置类WebSocketConfiguration,注册WebSocket的服务端组件
- 导入定时任务类WebSocketTask,定时向客户端推送数据
来单提醒
在用户支付成功的时候进行调用