1. 今天做了什么
微信支付流程的了解
- 小程序向后端发起微信支付的请求
- 后端向微信的下单接口发起请求,获取支付交易标示,并为小程序返回支付参数
- 小程序调起微信支付
- 微信调用后端接口,推送支付结果
用户端订单相关接口
- 历史订单(查询用户订单,并逐一查询到每个订单的订单详情,构造OrderVO返回)
- 订单详情
- 取消订单
- 再来一单(根据订单id查询订单详情,使用订单详情构造购物车集合,批量添加到用户的购物车中)
2. 核心知识点
3. 深度思考
4. 踩过的坑
- 关于再来一单
- 我自己开始的思路是
- 查询到订单信息与订单详情
- 更新订单号,支付状态,创建时间等,清空主键id
- 再次插入进订单表与订单详情表
- 问题在于:
- 很多字段,以前的旧订单有,但新订单为空,要么逐个清空,要么使用大量的字段重新构造一个订单对象,十分麻烦
- 使用这种思路详单于点击订单就直接出发了下单
- 实际讲义的实现思路是
- 点击再来一单的效果是清空当前购物车,将该订单的菜品套餐添加到购物车,用户可以按正常下单流程下单
- 优点:
- 实现简单,只需要根据id查询订单详情,转化为购物车对象,插入购物车表即可
- 存在的一些问题
- 项目中简单实现,未考虑历史订单中的菜品,套餐是否发生修改(信息变更,停售,删除等)
- 解决思路 :
- 在将订单详情转购物车的时候,逐项判断该商品,如果更新则查询并更新信息,删除或停售则不加入购物车.
- 如果简单处理可以检查菜品套餐的更新日期,若存在晚于订单日期的,抛异常
- 我自己开始的思路是
5. 遗留问题 / 想不通
.stream().map(x -> { }).collect(Collectors.toList())与.forEach(x->{ })
.forEach(x->{ })- 仅仅是对集合进行遍历,执行某些操作
.stream().map(x -> { }).collect(Collectors.toList())- 要把
List<A>变成List<B> - 无需外部集合,自动生成集合
- 有返回值,返回一个新集合
- 并行流安全(.parallelStream()):Collectors.toList() 内部自动处理多线程合并结果
- 要把
- 将
List<A>变成List<B>的场景应当使用.stream().map().collect() - 示例代码
1 | List<OrderVO> list = null; |