Commit 1da14a3f53d8429e3d3028974a9462b4301f5151

Authored by YunaiV
1 parent a9485ad6

trade:删除订单的实现

yudao-module-mall/yudao-module-trade-api/src/main/java/cn/iocoder/yudao/module/trade/enums/ErrorCodeConstants.java
@@ -31,6 +31,7 @@ public interface ErrorCodeConstants { @@ -31,6 +31,7 @@ public interface ErrorCodeConstants {
31 ErrorCode ORDER_UPDATE_PRICE_FAIL_PAID = new ErrorCode(1011000026, "支付订单调价失败,原因:支付订单已付款,不能调价"); 31 ErrorCode ORDER_UPDATE_PRICE_FAIL_PAID = new ErrorCode(1011000026, "支付订单调价失败,原因:支付订单已付款,不能调价");
32 ErrorCode ORDER_UPDATE_PRICE_FAIL_EQUAL = new ErrorCode(1011000027, "支付订单调价失败,原因:价格没有变化"); 32 ErrorCode ORDER_UPDATE_PRICE_FAIL_EQUAL = new ErrorCode(1011000027, "支付订单调价失败,原因:价格没有变化");
33 ErrorCode ORDER_UPDATE_PRICE_FAIL_NOT_ITEM = new ErrorCode(1011000028, "支付订单调价失败,原因:订单项不存在"); 33 ErrorCode ORDER_UPDATE_PRICE_FAIL_NOT_ITEM = new ErrorCode(1011000028, "支付订单调价失败,原因:订单项不存在");
  34 + ErrorCode ORDER_DELETE_FAIL_STATUS_NOT_CANCEL = new ErrorCode(1011000029, "交易订单删除失败,订单不是【已取消】状态");
34 35
35 // ========== After Sale 模块 1011000100 ========== 36 // ========== After Sale 模块 1011000100 ==========
36 ErrorCode AFTER_SALE_NOT_FOUND = new ErrorCode(1011000100, "售后单不存在"); 37 ErrorCode AFTER_SALE_NOT_FOUND = new ErrorCode(1011000100, "售后单不存在");
yudao-module-mall/yudao-module-trade-api/src/main/java/cn/iocoder/yudao/module/trade/enums/order/TradeOrderOperateTypeEnum.java
@@ -17,6 +17,7 @@ public enum TradeOrderOperateTypeEnum { @@ -17,6 +17,7 @@ public enum TradeOrderOperateTypeEnum {
17 MEMBER_RECEIVE(30, "用户已收货"), 17 MEMBER_RECEIVE(30, "用户已收货"),
18 MEMBER_COMMENT(31, "用户评价"), 18 MEMBER_COMMENT(31, "用户评价"),
19 MEMBER_CANCEL(40, "取消订单"), 19 MEMBER_CANCEL(40, "取消订单"),
  20 + MEMBER_DELETE(41, "删除订单"),
20 ; 21 ;
21 22
22 /** 23 /**
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/order/AppTradeOrderController.java
@@ -156,7 +156,7 @@ public class AppTradeOrderController { @@ -156,7 +156,7 @@ public class AppTradeOrderController {
156 @Operation(summary = "删除交易订单") 156 @Operation(summary = "删除交易订单")
157 @Parameter(name = "id", description = "交易订单编号") 157 @Parameter(name = "id", description = "交易订单编号")
158 public CommonResult<Boolean> deleteOrder(@RequestParam("id") Long id) { 158 public CommonResult<Boolean> deleteOrder(@RequestParam("id") Long id) {
159 - // TODO @芋艿:未实现,mock 用 159 + tradeOrderUpdateService.deleteOrder(getLoginUserId(), id);
160 return success(true); 160 return success(true);
161 } 161 }
162 162
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/order/TradeOrderUpdateService.java
@@ -63,6 +63,22 @@ public interface TradeOrderUpdateService { @@ -63,6 +63,22 @@ public interface TradeOrderUpdateService {
63 void receiveOrder(Long userId, Long id); 63 void receiveOrder(Long userId, Long id);
64 64
65 /** 65 /**
  66 + * 【会员】取消订单
  67 + *
  68 + * @param userId 用户编号
  69 + * @param id 订单编号
  70 + */
  71 + void cancelOrder(Long userId, Long id);
  72 +
  73 + /**
  74 + * 【会员】删除订单
  75 + *
  76 + * @param userId 用户编号
  77 + * @param id 订单编号
  78 + */
  79 + void deleteOrder(Long userId, Long id);
  80 +
  81 + /**
66 * 【管理员】交易订单备注 82 * 【管理员】交易订单备注
67 * 83 *
68 * @param reqVO 请求 84 * @param reqVO 请求
@@ -117,11 +133,4 @@ public interface TradeOrderUpdateService { @@ -117,11 +133,4 @@ public interface TradeOrderUpdateService {
117 */ 133 */
118 Long createOrderItemComment(Long userId, AppTradeOrderItemCommentCreateReqVO createReqVO); 134 Long createOrderItemComment(Long userId, AppTradeOrderItemCommentCreateReqVO createReqVO);
119 135
120 - /**  
121 - * 【会员】取消订单  
122 - *  
123 - * @param userId 用户ID  
124 - * @param id 订单编号  
125 - */  
126 - void cancelOrder(Long userId, Long id);  
127 } 136 }
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/order/TradeOrderUpdateServiceImpl.java
@@ -716,17 +716,17 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService { @@ -716,17 +716,17 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
716 @Transactional(rollbackFor = Exception.class) 716 @Transactional(rollbackFor = Exception.class)
717 @TradeOrderLog(operateType = TradeOrderOperateTypeEnum.MEMBER_CANCEL) 717 @TradeOrderLog(operateType = TradeOrderOperateTypeEnum.MEMBER_CANCEL)
718 public void cancelOrder(Long userId, Long id) { 718 public void cancelOrder(Long userId, Long id) {
719 - // 校验存在 719 + // 1.1 校验存在
720 TradeOrderDO order = tradeOrderMapper.selectOrderByIdAndUserId(id, userId); 720 TradeOrderDO order = tradeOrderMapper.selectOrderByIdAndUserId(id, userId);
721 if (order == null) { 721 if (order == null) {
722 throw exception(ORDER_NOT_FOUND); 722 throw exception(ORDER_NOT_FOUND);
723 } 723 }
724 - // 校验状态 724 + // 1.2 校验状态
725 if (ObjectUtil.notEqual(order.getStatus(), TradeOrderStatusEnum.UNPAID.getStatus())) { 725 if (ObjectUtil.notEqual(order.getStatus(), TradeOrderStatusEnum.UNPAID.getStatus())) {
726 throw exception(ORDER_CANCEL_FAIL_STATUS_NOT_UNPAID); 726 throw exception(ORDER_CANCEL_FAIL_STATUS_NOT_UNPAID);
727 } 727 }
728 728
729 - // 1. 更新 TradeOrderDO 状态为已取消 729 + // 2. 更新 TradeOrderDO 状态为已取消
730 int updateCount = tradeOrderMapper.updateByIdAndStatus(id, order.getStatus(), 730 int updateCount = tradeOrderMapper.updateByIdAndStatus(id, order.getStatus(),
731 new TradeOrderDO().setStatus(TradeOrderStatusEnum.CANCELED.getStatus()) 731 new TradeOrderDO().setStatus(TradeOrderStatusEnum.CANCELED.getStatus())
732 .setCancelTime(LocalDateTime.now()) 732 .setCancelTime(LocalDateTime.now())
@@ -735,25 +735,46 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService { @@ -735,25 +735,46 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
735 throw exception(ORDER_CANCEL_FAIL_STATUS_NOT_UNPAID); 735 throw exception(ORDER_CANCEL_FAIL_STATUS_NOT_UNPAID);
736 } 736 }
737 737
738 - // TODO 活动相关库存回滚需要活动 id,活动 id 怎么获取?app 端能否传过来;回复:从订单里拿呀 738 + // 3. TODO 活动相关库存回滚需要活动 id,活动 id 怎么获取?app 端能否传过来;回复:从订单里拿呀
739 tradeOrderHandlers.forEach(handler -> handler.rollback()); 739 tradeOrderHandlers.forEach(handler -> handler.rollback());
740 740
741 - // 2. 回滚库存 741 + // 4. 回滚库存
742 List<TradeOrderItemDO> orderItems = tradeOrderItemMapper.selectListByOrderId(id); 742 List<TradeOrderItemDO> orderItems = tradeOrderItemMapper.selectListByOrderId(id);
743 productSkuApi.updateSkuStock(TradeOrderConvert.INSTANCE.convert(orderItems)); 743 productSkuApi.updateSkuStock(TradeOrderConvert.INSTANCE.convert(orderItems));
744 744
745 - // 3. 回滚优惠券 745 + // 5. 回滚优惠券
746 if (order.getCouponId() > 0) { 746 if (order.getCouponId() > 0) {
747 couponApi.returnUsedCoupon(order.getCouponId()); 747 couponApi.returnUsedCoupon(order.getCouponId());
748 } 748 }
749 749
750 - // 4. 回滚积分:积分是支付成功后才增加的吧? 回复:每个项目不同,目前看下来,确认收货貌似更合适,我再看看其它项目的业务选择; 750 + // 6. 回滚积分:积分是支付成功后才增加的吧? 回复:每个项目不同,目前看下来,确认收货貌似更合适,我再看看其它项目的业务选择;
751 // TODO @疯狂:有赞是可配置(支付 or 确认收货),我们按照支付好列;然后这里的退积分,指的是下单时的积分抵扣。 751 // TODO @疯狂:有赞是可配置(支付 or 确认收货),我们按照支付好列;然后这里的退积分,指的是下单时的积分抵扣。
752 752
753 - // 5. 增加订单日志 753 + // 7. 增加订单日志
754 TradeOrderLogUtils.setOrderInfo(order.getId(), order.getStatus(), TradeOrderStatusEnum.CANCELED.getStatus()); 754 TradeOrderLogUtils.setOrderInfo(order.getId(), order.getStatus(), TradeOrderStatusEnum.CANCELED.getStatus());
755 } 755 }
756 756
  757 + @Override
  758 + @Transactional(rollbackFor = Exception.class)
  759 + @TradeOrderLog(operateType = TradeOrderOperateTypeEnum.MEMBER_DELETE)
  760 + public void deleteOrder(Long userId, Long id) {
  761 + // 1.1 校验存在
  762 + TradeOrderDO order = tradeOrderMapper.selectOrderByIdAndUserId(id, userId);
  763 + if (order == null) {
  764 + throw exception(ORDER_NOT_FOUND);
  765 + }
  766 + // 1.2 校验状态
  767 + if (ObjectUtil.notEqual(order.getStatus(), TradeOrderStatusEnum.CANCELED.getStatus())) {
  768 + throw exception(ORDER_DELETE_FAIL_STATUS_NOT_CANCEL);
  769 + }
  770 +
  771 + // 2. 删除订单
  772 + tradeOrderMapper.deleteById(id);
  773 +
  774 + // 3. 记录日志
  775 + TradeOrderLogUtils.setOrderInfo(order.getId(), order.getStatus(), order.getStatus());
  776 + }
  777 +
757 /** 778 /**
758 * 判断指定订单的所有订单项,是不是都售后成功 779 * 判断指定订单的所有订单项,是不是都售后成功
759 * 780 *