说明:
(1)本篇博客主要内容:开发【前台:取消订单】接口;
(2)这个接口比较简单,只是别忘了,我们在实际取消前,需要订单检查与权限校验;
目录
一:【前台:取消订单】接口说明;
1.【前台:取消订单】接口,接口文档;?
2.【前台:取消订单】接口,在界面上的表现;?
二:正式开发;
1.在OrderController中,编写处理【前台:取消订单】接口的方法:cancel()方法;
2.在OrderServiceImpl中,编写根据订单号取消订单的业务方法:cancel()方法;
3.在OrderService中,反生生成方法的定义;
三:测试;
?
一:【前台:取消订单】接口说明;
1.【前台:取消订单】接口,接口文档;?
2.【前台:取消订单】接口,在界面上的表现;?
在订单详情页,我们可以点击【取消订单】按钮,去取消订单;
二:正式开发;
1.在OrderController中,编写处理【前台:取消订单】接口的方法:cancel()方法;
/**
* 【前台:取消订单】接口;
* @param orderNo
* @return
*/
@ApiOperation("取消订单")
@PostMapping("/order/cancel")
public ApiRestResponse cancel(@RequestParam("orderNo") String orderNo) {
orderService.cancel(orderNo);
return ApiRestResponse.success();
}
说明:
(1)请求方式、url、参数,要符合接口文档的要求;
(2)我们在Service层,编写了一个根据订单号,取消订单的业务方法:cancel()方法;将在下一部分介绍;
2.在OrderServiceImpl中,编写根据订单号取消订单的业务方法:cancel()方法;
/**
* 根据,orderNum,取消订单
* @param orderNum
*/
@Override
public void cancel(String orderNum) {
//首先,根据传过来的订单号,去查订单;
Order order = orderMapper.selectByOrderNo(orderNum);
//如果没有查到订单,就抛出“订单不存在”异常;
if (order == null) {
throw new ImoocMallException(ImoocMallExceptionEnum.NO_ORDER);
}
//如果订单查到了,但发现该订单不隶属当前的登录用户,就抛出“订单不属于你”异常;
Integer userId = UserFilter.currentUser.getId();
if (!order.getUserId().equals(userId)) {
throw new ImoocMallException(ImoocMallExceptionEnum.NOT_YOUR_ORDER);
}
//这个项目,在这儿,我们做了简化处理:只有订单是未付款时,才能够取消;
// (其实,在实际中,即使付过款了,也还是能取消的,那就涉及到了退货等业务了)
if (order.getOrderStatus().equals(Constant.OrderStatusEnum.NOT_PAY.getCode())) {
//将订单的状态,设为取消;
order.setOrderStatus(Constant.OrderStatusEnum.CANCELED.getCode());
//既然,订单已经被取消,也表示这个订单已经完结了;所以,这儿我们设置下订单的完结时间;
order.setEndTime(new Date());
//然后,更新订单信息;
orderMapper.updateByPrimaryKeySelective(order);
} else {
//否则,即抛出"当前订单状态,不允许取消"异常;
throw new ImoocMallException(ImoocMallExceptionEnum.WRONG_ORDER_STATUS);
}
}
说明:
(1)先根据订单号,去查询订单;然后检查订单是否存在,订单是否隶属于当前登录用户;
(2)然后,本项目,在这儿作了简化处理:只有当订单是未付款状态时,才能够取消;可以看到,这儿对于订单状态信息,使用了前面我们定义的枚举类;
(3)否则,就抛出"当前订单状态,不允许取消"异常;
3.在OrderService中,反生生成方法的定义;
三:测试;
|