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

相关推荐
keep intensify2 小时前
深度解析TCP三次握手四次挥手
网络·c++·后端·网络协议·tcp/ip·golang
吧啦蹦吧2 小时前
idea---------------
java·ide·intellij-idea
头疼的程序员2 小时前
计算机网络:自顶向下方法(第七版)第五章 学习分享(一)
学习·计算机网络
李白的粉2 小时前
基于springboot的教师工作量管理系统
java·spring boot·毕业设计·课程设计·教师工作量管理系统·源代码
武超杰2 小时前
SpringMVC入门指南:从零开始掌握核心用法
java·spring·mvc
小王不爱笑1322 小时前
深入浅出 Docker 核心知识点,解锁容器化技术精髓
java·spring boot·docker
一只大袋鼠2 小时前
并发编程(二十四):单例模式(三):构造方法私有:单例模式的 “第一道防线”
java·单例模式·并发编程
myloveasuka2 小时前
[Java]包装类
java·开发语言
杰杰7982 小时前
一文了解DRF——ModelSerializer
后端·django