文章目录
-
- 概要
- 整体架构流程
- 技术细节
- 小结
概要
再来一单”功能常见于餐饮、零售、外卖等行业,主要目的是为了简化用户的重复购买流程,提高用户体验和效率。
需求分析以及接口设计
- 再来一单就是将原订单中的商品重新加入到购物车中,所以本质上是"增"的操作,则用post请求
- 前端将订单id提交过来
- 后端返回一个成功的信号即可
技术细节
1.Controller层:
按照接口设计来编写
@PostMapping("/repetition/{id}")
@ApiOperation("再来一单")
public Result againSubmit(@PathVariable Long id){
log.info("再来一单,id为:{}", id);
orderService.againSubmit(id);
return Result.success();
}
2.Service层:
- 利用订单id将订单明细查出来
- 将订单明细对象转换成购物车,方便插入购物车表
- 插入购物车表
public void againSubmit(Long id) {
//再来一单就是将原订单中的商品重新加入到购物车中
Long userId = BaseContext.getCurrentId();
//根据订单id查询到这个订单明细
List<OrderDetail> orderDetails = orderDetailMapper.selectByOrderId(id);
// 将订单详情对象转换为购物车对象
List<ShoppingCart> shoppingCartList = orderDetails.stream().map(x -> {
ShoppingCart shoppingCart = new ShoppingCart();
// 将原订单详情里面的菜品信息重新复制到购物车对象中
BeanUtils.copyProperties(x, shoppingCart, "id");//id是忽略填充
shoppingCart.setUserId(userId);
shoppingCart.setCreateTime(LocalDateTime.now());
return shoppingCart;
}).collect(Collectors.toList());
//将数据插入至购物车表
shoppingCartMapper.insertBatch(shoppingCartList);
}
3.Mapper层
<insert id="insertBatch">
insert into `sky-take-out`.shopping_cart (id, name, image, user_id, dish_id, setmeal_id, dish_flavor, number, amount, create_time) VALUES
<foreach collection="shoppingCartList" item="shoppingCart" separator=",">
(#{shoppingCart.id},#{shoppingCart.name},#{shoppingCart.image},#{shoppingCart.userId},#{shoppingCart.dishId},#{shoppingCart.setmealId},#{shoppingCart.dishFlavor},#{shoppingCart.number},#{shoppingCart.amount},#{shoppingCart.createTime})
</foreach>
</insert>
效果展示
说明代码没有问题