目录
用户端历史订单
历史订单查询
查询订单详情
取消一单
再来订单
商家端订单管理
各个状态的订单数量统计
订单搜索
从产品原型,我们知道点进历史订单,需要查询订单数据,可以是全部订单 ,也可以选择查询待付款或退款的订单。因此第一接口分页查询历史订单。对每一条订单,我们还可以点击进去查询详细的信息。因此第二个接口查询订单详情。此外,还有再来一单,和取消订单的功能。
因此,我们需要完成:查询历史订单、查询订单详情、取消订单和再来一单,四个功能,我们用四个接口来对应这些功能。
用什么方法请求?传入什么参数?返回什么数据?
该请求使用get方式请求。传入分页相关的数据里面包含页面,页数,以及订单状态(用于查询全部或待付款或已取消的订单)。需要放回订单相关的数据,这些数据用OrderVO封装。
分页查询,我们以往都是用一个DTO对象去接收前端传过来的数据。而这一次前端直接传了int page, int pageSize, Integer status。因此我们在查询的时候需要将这些数据先封装成一个DTO对象后,在进行分页查询。
OrdersPageQueryDTO ordersPageQueryDTO=new OrdersPageQueryDTO();
ordersPageQueryDTO.setStatus(status);
ordersPageQueryDTO.setUserId(BaseContext.getCurrentId());
Page listPage=orderMapper.historyOrder(ordersPageQueryDTO);
查询返回来的结构是Orders,我们需要返回给前端的是OrderVO。创建一个List
List list = new ArrayList();
List result = listPage.getResult();
if(listPage !=null &&total>0){
for (Orders order : result) {
List orderDetails = orderDetailMapper.getByOrderId(order.getId());
OrderVO orderVO=new OrderVO();
orderVO.setOrderDetailList(orderDetails);
BeanUtils.copyProperties(order,orderVO);
list.add(orderVO);
}
}
用什么方法请求?传入什么参数?返回什么数据?
该请求使用get方式请求。传入的是订单id的路径参数。需要将订单状态封装成OrderVO返回给前端。
用什么方法请求?传入什么参数?返回什么数据?
该请求使用put方式。传入的是订单id的路径参数。无额外需要返回的数据。
public void cancel(OrdersCancelDTO ordersCancelDTO) {
Orders order = orderMapper.getById(ordersCancelDTO.getId());
//支付状态
Integer payStatus = order.getPayStatus();
if (payStatus == 1) {
//用户已支付,需要退款
// String refund = weChatPayUtil.refund(
// order.getNumber(),
// order.getNumber(),
// new BigDecimal(0.01),
// new BigDecimal(0.01));
log.info("申请退款");
}
// 管理端取消订单需要退款,根据订单id更新订单状态、取消原因、取消时间
Orders orders = new Orders();
orders.setId(ordersCancelDTO.getId());
orders.setStatus(Orders.CANCELLED);
orders.setCancelReason(ordersCancelDTO.getCancelReason());
orders.setCancelTime(LocalDateTime.now());
orderMapper.update(orders);
}
由于微信的功能不能用,所以直接注释掉。后边直接修改数据库中订单信息即可。
用什么方法请求?传入什么参数?返回什么数据?
该请求使用post方式请求。传入的是订单id的路径参数。无额外需要返回的数据。
一开始我的思路就是,根据订单id查询订单相关的所有信息,直接往数据库添加一份数据。结果,数据添加了,但是前端页面没有变化。所有就知道出问题了。
后来,才知道,需要把订单添加到购物车中才行。
// 查询当前用户id
Long userId = BaseContext.getCurrentId();
// 根据订单id查询当前订单详情
List orderDetailList = orderDetailMapper.getByOrderId(id);
// 将订单详情对象转换为购物车对象
List shoppingCartList = orderDetailList.stream().map(x -> {
ShoppingCart shoppingCart = new ShoppingCart();
// 将原订单详情里面的菜品信息重新复制到购物车对象中
BeanUtils.copyProperties(x, shoppingCart, "id");
shoppingCart.setUserId(userId);
shoppingCart.setCreateTime(LocalDateTime.now());
return shoppingCart;
}).collect(Collectors.toList());
// 将购物车对象批量添加到数据库
shoppingCartMapper.insertBatch(shoppingCartList);
由产品原型得该模块需要完成:订单搜索、各个状态的订单数量统计、接单、拒单、取消订单、派送订单、完成订单。从后边接单开始,其实就是更新数据库中订单状态(只需要注意订单在什么情况下,才能取消、派送、完成、接单、拒单等)这里不冗余再展开说了。
用什么方法请求?传入什么参数?返回什么数据?
该请求使用get方式。不需要传入参数。需要放回包含待派送数量、派送中数量和待接单数量的OrderStatisticsVO。
// 根据状态,分别查询出待接单、待派送、派送中的订单数量
Integer toBeConfirmed = orderMapper.countStatus(Orders.TO_BE_CONFIRMED);
Integer confirmed = orderMapper.countStatus(Orders.CONFIRMED);
Integer deliveryInProgress = orderMapper.countStatus(Orders.DELIVERY_IN_PROGRESS);
OrderStatisticsVO orderStatisticsVO=new OrderStatisticsVO();
orderStatisticsVO.setToBeConfirmed(toBeConfirmed);
orderStatisticsVO.setConfirmed(confirmed);
orderStatisticsVO.setDeliveryInProgress(deliveryInProgress);
return orderStatisticsVO;
//xml
@Select("select count(id) from sky_take_out.orders where status=#{status}")
Integer countStatus(Integer status);
用什么方法请求?传入什么参数?返回什么数据?
该请求使用get方式请求。传入分页相关的数据封装在ordersPageQueryDTO后传入。返回订单信息OrderVO。
封装List
private List getOrderVO(Page page) {
List orderVOList=new ArrayList<>();
List ordersList = page.getResult();
//先判断是否有无订单即集合是否为空
if(!CollectionUtils.isEmpty(ordersList)){
for (Orders orders : ordersList) {
OrderVO orderVO=new OrderVO();
BeanUtils.copyProperties(orders,orderVO);
String orderDishes = getOrderDishesStr(orders);
orderVO.setOrderDishes(orderDishes);
orderVOList.add(orderVO);
}
}
return orderVOList;
}
如果有帮助到你,希望可以点赞收藏转发~