【烘焙坊项目】后端搭建(11)- 用户&商家订单板块

用户端历史订单模块

1.查询历史订单

1.1需求分析和设计

查看接口文档

1.2代码实现

controller层

service层

java 复制代码
@Override
    public PageResult pageQuery(int pageNum, int pageSize, Integer status) {
        PageHelper.startPage(pageNum, pageSize);
        OrdersPageQueryDTO ordersPageQueryDTO = new OrdersPageQueryDTO();
        ordersPageQueryDTO.setUserId(BaseContext.getCurrentId());
        ordersPageQueryDTO.setStatus(status);
        //分页查询条件
        Page<Orders> page = orderMapper.pageQuery(ordersPageQueryDTO);
        List<Orders> list = new ArrayList();
        //查询订单明细,并封装OrderVO进行响应
        if (page != null && page.getTotal() > 0) {
            for (Orders orders : page) {
                Long orderId = orders.getId();//订单id
                //查询订单明细
                List<OrderDetail> orderDetails = orderDetailMapper.getByOrderId(orderId);

                OrderVO orderVO = new OrderVO();
                BeanUtils.copyProperties(orders, orderVO);
                orderVO.setOrderDetailList(orderDetails);
                list.add(orderVO);
            }
        }
        return new PageResult(page.getTotal(),list);
    }

dao层

2.查询订单详情

2.1需求分析和设计

查看接口文档

2.2代码实现

controller层

service层

dao层

3.取消订单

3.1需求分析和设计

分析:

待支付和待接单状态下,用户可以直接取消订单

商家已接单或派送中状态下(除待支付待接单),用户取消订单需要电话沟通商家

在带接单状态下取消订单需要直接给用户退款并将订单状态修改为"已取消"

查看接口文档

3.2代码实现

controller层

service层

4.再来一单

4.1需求分析和设计

查看接口文档:

4.2代码实现

controller层

service层

dao层

商户端订单管理模块

1.订单搜索

1.1需求分析与设计

分析:

支持订单号、手机号模糊查询

支持根据订单状态查询

支持根据下单时间进行搜索

搜索内容为空时提示未找到相关订单

搜索结果页展示包含搜索关键词的内容

分页展示搜索到的订单数据

查看接口文档:

1.2代码实现

controller层

service层

java 复制代码
 /**
     * 订单搜索
     * @param ordersPageQueryDTO
     * @return
     */
    @Override
    public PageResult condition(OrdersPageQueryDTO ordersPageQueryDTO) {
        PageHelper.startPage(ordersPageQueryDTO.getPage(), ordersPageQueryDTO.getPageSize());
        Page<Orders> page = orderMapper.pageQuery(ordersPageQueryDTO);
        //部分订单状态,需要额外返回订单菜品信息,将Orders转化为OrderVO
        List<OrderVO> orderVOList = getOrderVOList(page);
        return new PageResult(page.getTotal(), orderVOList);
    }

    private List<OrderVO> getOrderVOList(Page<Orders> page) {
        //需要返回订单菜品信息,自定义OrderVO响应结果
        List<OrderVO> orderVOList = new ArrayList<>();

        List<Orders> ordersList = page.getResult();
        if (!CollectionUtils.isEmpty(ordersList)) {
            for (Orders orders : ordersList) {
                //将共同字段复制给OrderVO
                OrderVO orderVO = new OrderVO();
                BeanUtils.copyProperties(orders, orderVO);
                String orderDishes = getOrderDishesStr(orders);

                //将订单菜品信息封装到orderVO中,并添加到orderVOList
                orderVO.setOrderDishes(orderDishes);
                orderVOList.add(orderVO);
            }
        }
        return orderVOList;
    }

    /**
     * 根据订单id获取菜品信息字符串
     * @param orders
     * @return
     */
    private String getOrderDishesStr(Orders orders) {
        //查询订单菜品详情信息(订单中的菜品和数量)
        List<OrderDetail> orderDetails = orderDetailMapper.getByOrderId(orders.getId());
        //将每一条订单菜品信息拼接为字符串(格式:小蛋糕*3;)
        List<String> orderDishesList = orderDetails.stream().map(x -> {
            String orderDish = x.getName() + "*" + x.getNumber() + ";";
            return orderDish;
        }).collect(Collectors.toList());
        //将该订单对应的所有菜品信息拼接在一起
        return String.join(",", orderDishesList);
    }

2.各个状态的订单数量统计

2.1需求分析与设计

查看接口文档

2.2代码实现 ------包含 已完成 订单数量查询,已对应修改实体类

实体类

controller层

service层

dao层

3.查询订单详情

3.1需求分析与设计

查看接口文档

3.2代码实现

controller层

4.接单

4.1需求分析与设计

4.2代码实现

controller层

service层

5.拒单

5.1需求分析与设计

查看接口文档:

5.2代码实现

controller层

service层

6.取消订单

6.1需求分析与设计

分析:

取消订单需要修改订单状态并写入取消原因

需要给顾客进行退款

查看接口文档:

6.2代码实现

controller层

service层

7.派送订单

7.1需求分析与设计

7.2代码实现

controller层

service层

8.完成订单

8.1需求分析与设计

分析:

只有配送中的订单可以修改此状态

查看接口文档:

8.2代码实现

controller层

service层

小结

在编写"再来一单"时我选择了直接拿到之前的订单复制成新订单,用户只需再次付款,没有考虑到用户的修改需求,较为生硬且扩展性差。经过参考后发现可以直接将商品放回购物车,用户可以做一定的修改在下单,确实更灵活扩展性也更高。

订单搜索模块对我而言还是有一定挑战的,尤其是各类型之间的转换还不是很灵活,导致各方法调用时还会有迷茫的情况发生。但是好在思路并不算太难,多理几遍就ok

接单和拒单以及其他对于订单状态的修改都沿用了之前写好的update方法,提高了代码复用率、降低冗余字段。

相关推荐
天空属于哈夫克38 小时前
企业微信API常见的错误和解决方案
java·数据库·企业微信
TImCheng06098 小时前
职场人AI学习周期评估:不同学习路径的时间成本
人工智能·学习
周末也要写八哥8 小时前
C4D/Cinema 4D 2026超详细下载与安装教程(附资源包)
学习·数学建模
xinzheng新政8 小时前
openclaw dashboard报错 internal server error
学习
摇滚侠8 小时前
VMvare 虚拟机 Oracle19c 安装步骤,远程连接 Oracle19c,百度网盘安装包
java·oracle
梁萌8 小时前
idea报错找不到XX包的解决方法
java·intellij-idea·启动报错·缺少包
Agent产品评测局9 小时前
生产排期与MES/ERP系统打通,实操方法详解 —— 2026企业级智能体自动化选型与实战指南
java·运维·人工智能·ai·chatgpt·自动化
nashane9 小时前
HarmonyOS 6学习:RichEditor宽度“暴力”计算与富文本截图避坑
学习·harmonyos 5
阿丰资源9 小时前
基于Spring Boot的电影城管理系统(直接运行)
java·spring boot·后端
IT_陈寒9 小时前
SpringBoot自动配置的坑差点让我加班到天亮
前端·人工智能·后端