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方法的方法声明;


三:测试;

启动项目;