“再来一单“业务功能开发

文章目录

概要

再来一单"功能常见于餐饮、零售、外卖等行业,主要目的是为了简化用户的重复购买流程,提高用户体验和效率。

需求分析以及接口设计

  • 再来一单就是将原订单中的商品重新加入到购物车中,所以本质上是"增"的操作,则用post请求
  • 前端将订单id提交过来
  • 后端返回一个成功的信号即可

技术细节

1.Controller层:

按照接口设计来编写

java 复制代码
@PostMapping("/repetition/{id}")
    @ApiOperation("再来一单")
    public Result againSubmit(@PathVariable Long id){
        log.info("再来一单,id为:{}", id);
        orderService.againSubmit(id);
        return Result.success();
    }

2.Service层:

  • 利用订单id将订单明细查出来
  • 将订单明细对象转换成购物车,方便插入购物车表
  • 插入购物车表
java 复制代码
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层

XML 复制代码
<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>

效果展示

说明代码没有问题

相关推荐
懒大王爱吃狼42 分钟前
Python教程:python枚举类定义和使用
开发语言·前端·javascript·python·python基础·python编程·python书籍
秃头佛爷2 小时前
Python学习大纲总结及注意事项
开发语言·python·学习
阿伟*rui2 小时前
配置管理,雪崩问题分析,sentinel的使用
java·spring boot·sentinel
待磨的钝刨2 小时前
【格式化查看JSON文件】coco的json文件内容都在一行如何按照json格式查看
开发语言·javascript·json
XiaoLeisj4 小时前
【JavaEE初阶 — 多线程】单例模式 & 指令重排序问题
java·开发语言·java-ee
paopaokaka_luck4 小时前
【360】基于springboot的志愿服务管理系统
java·spring boot·后端·spring·毕业设计
dayouziei4 小时前
java的类加载机制的学习
java·学习
励志成为嵌入式工程师5 小时前
c语言简单编程练习9
c语言·开发语言·算法·vim
捕鲸叉5 小时前
创建线程时传递参数给线程
开发语言·c++·算法
A charmer5 小时前
【C++】vector 类深度解析:探索动态数组的奥秘
开发语言·c++·算法