用户端历史订单模块
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方法,提高了代码复用率、降低冗余字段。
