up:: SpringBoot电商项目订单模块后台订单发货接口
说明:
(1) 本篇博客的主要内容是开发【前后台通用:订单完结】接口;
(2) 本篇博客的重点是:
● 完结订单的条件,以及我们的处理方式;
一:【前后台通用:订单完结】接口说明;
1.【前后台通用:订单完结】接口,接口文档;
2.【前后台通用:订单完结】接口,在界面上的表现;
待写,项目上线后补充;
二:正式开发;
1.在OrderAdminController中,创建处理【前后台通用:订单完结】接口的方法:finish()方法;
/**
* 前后台通用:订单完结;
* @param orderNo
* @return
*/
@ApiOperation("前后台通用的:完结订单")
@PostMapping("/order/finish")
public ApiRestResponse finish(@RequestParam("orderNo") String orderNo) {
orderService.finish(orderNo);
return ApiRestResponse.success();
}
说明:
(1) 请求方式、url、参数,要符合接口文档的要求;
(2) 我们在Service层,编写了完结订单的逻辑方法finish()方法,这将在下一部分介绍;
2.在OrderServiceImpl中,创建完结订单的逻辑方法,finish()方法;
/**
* 完结订单
* @param orderNo
*/
@Override
public void finish(String orderNo) {
//先根据传入的orderNo,去尝试查询order
Order order = orderMapper.selectByOrderNo(orderNo);
//如果没有找到对应的订单,就抛出“订单不存在异常”
if (order == null) {
throw new ImoocMallException(ImoocMallExceptionEnum.NO_ORDER);
}
//如果当前登录用户是普通用户,且【要发货的订单】不属于当前登录用户:那么就抛出“订单不属于你”异常;
if (!userService.checkAdminRole(UserFilter.currentUser) && !order.getUserId().equals(UserFilter.currentUser.getId())) {
throw new ImoocMallException(ImoocMallExceptionEnum.NOT_YOUR_ORDER);
}
//如果能通过上面的检查,那么:要么【当前登录用户是管理员】,要么【当前登录用户是普通用户;且要操作的订单,属于当前登录用户】;
//而,上面的两种情况,都是允许完结订单的;
//如果,订单状态是已发货,那么我们就可以完结订单;也就是,我们就可以把订单状态改为完结;
if (order.getOrderStatus() == Constant.OrderStatusEnum.DELIVERED.getCode()) {
order.setOrderStatus(Constant.OrderStatusEnum.FINISHED.getCode());//更改订单状态为完结;
order.setEndTime(new Date());//设置一下订单完结时间;
orderMapper.updateByPrimaryKeySelective(order);
} else {
//如果,当前订单状态不是已发货,就抛出“当前订单状态错误”异常;
throw new ImoocMallException(ImoocMallExceptionEnum.WRONG_ORDER_STATUS);
}
}
说明:
(1)首先,要检查订单是否存在; 要根据传过来的订单号去查,看究竟有没有这个订单;
(2)然后:进行权限校验; 如果当前登录用户是普通用户,且【要发货的订单】不属于当前登录用户:那么就抛出“订单不属于你”异常;
除此之外的情况就是:【当前登录用户是管理员用户,订单属于该管理员用户】、【当前登录用户是管理员用户,订单不属于该管理员用户】、【当前登录用户是普通用户,订单属于该普通用户】;这三种情况下,都是有完结订单的权限的;
(3)然后,查看订单是否是已发货状态; 只有当订单已发货时,才能够完结订单;
3.在OrderService中,反向生成finish方法的方法声明;
三:测试;
启动项目;