Commit 1da14a3f53d8429e3d3028974a9462b4301f5151
1 parent
a9485ad6
trade:删除订单的实现
Showing
5 changed files
with
48 additions
and
16 deletions
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 | * |