【烘焙坊项目】后端搭建(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方法,提高了代码复用率、降低冗余字段。

相关推荐
管鲍考试学习系统5 小时前
在线考试系统是什么?功能、部署、应用场景全详解(管鲍考试学习系统 V8.0 深度版)
学习·架构·在线考试·考试系统·培训考试·考试练习
han_hanker5 小时前
@Validated @Valid 用法
java·spring boot
小CC吃豆子5 小时前
详细介绍一下静态分析工具 SonarQube
java
CheerWWW5 小时前
深入理解计算机系统——位运算、树状数组
笔记·学习·算法·计算机系统
DevOpenClub5 小时前
全国三甲医院主体信息 API 接口
java·大数据·数据库
言慢行善5 小时前
SpringBoot中的注解介绍
java·spring boot·后端
一勺菠萝丶5 小时前
管理后台使用手册在线预览与首次登录引导弹窗实现
java·前端·数据库
小村儿5 小时前
连载05-Claude Skill 不是抄模板:真正管用的 Skill,都是从实战里提炼出来的
前端·后端·ai编程
无巧不成书02186 小时前
Java包(package)全解:从定义、使用到避坑,新手零基础入门到实战
java·开发语言·package·java包
身如柳絮随风扬6 小时前
SpringMVC 异常处理?Spring 父子容器?
java·spring·mvc