Commit 89b240c1f946d7b6035fa66a5ad70be43a43d3e4

Authored by puhui999
1 parent c485c6e0

订单:介入 TradeOrderHandler#cancelOrder

yudao-module-mall/yudao-module-trade-api/src/main/java/cn/iocoder/yudao/module/trade/enums/order/TradeOrderTypeEnum.java
1 1 package cn.iocoder.yudao.module.trade.enums.order;
2 2  
  3 +import cn.hutool.core.util.ObjectUtil;
3 4 import cn.iocoder.yudao.framework.common.core.IntArrayValuable;
4 5 import lombok.Getter;
5 6 import lombok.RequiredArgsConstructor;
... ... @@ -37,4 +38,20 @@ public enum TradeOrderTypeEnum implements IntArrayValuable {
37 38 return ARRAYS;
38 39 }
39 40  
  41 + public static boolean isNormal(Integer type) {
  42 + return ObjectUtil.equal(type, NORMAL.getType());
  43 + }
  44 +
  45 + public static boolean isSeckill(Integer type) {
  46 + return ObjectUtil.equal(type, SECKILL.getType());
  47 + }
  48 +
  49 + public static boolean isBargain(Integer type) {
  50 + return ObjectUtil.equal(type, BARGAIN.getType());
  51 + }
  52 +
  53 + public static boolean isCombination(Integer type) {
  54 + return ObjectUtil.equal(type, COMBINATION.getType());
  55 + }
  56 +
40 57 }
... ...
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/order/TradeOrderUpdateServiceImpl.java
... ... @@ -625,12 +625,11 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
625 625 throw exception(ORDER_CANCEL_FAIL_STATUS_NOT_UNPAID);
626 626 }
627 627  
628   - // 2. TODO 活动相关库存回滚需要活动 id,活动 id 怎么获取?app 端能否传过来;回复:从订单里拿呀
629   - tradeOrderHandlers.forEach(handler -> handler.cancelOrder());
630   -
631   - // 3. 回滚库存
632 628 List<TradeOrderItemDO> orderItems = tradeOrderItemMapper.selectListByOrderId(id);
  629 + // 3. 回滚库存
633 630 productSkuApi.updateSkuStock(TradeOrderConvert.INSTANCE.convert(orderItems));
  631 + // 3.1、 活动相关的回滚
  632 + tradeOrderHandlers.forEach(handler -> handler.cancelOrder(order, orderItems));
634 633  
635 634 // 4. 回滚优惠券
636 635 if (order.getCouponId() != null && order.getCouponId() > 0) {
... ... @@ -807,10 +806,11 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
807 806 // 2.2 如果全部退款,则进行取消订单
808 807 getSelf().cancelOrderByAfterSale(order, orderRefundPrice);
809 808  
810   - // TODO @puhui999:活动相关的回滚
811 809  
812 810 // 3. 回滚库存
813 811 productSkuApi.updateSkuStock(TradeOrderConvert.INSTANCE.convert(Collections.singletonList(orderItem)));
  812 + // 3.1、 活动相关的回滚
  813 + tradeOrderHandlers.forEach(handler -> handler.cancelOrder(order, Collections.singletonList(orderItem)));
814 814  
815 815 // 4.1 回滚积分:扣减用户积分(赠送的)
816 816 reduceUserPoint(order.getUserId(), orderItem.getGivePoint(), MemberPointBizTypeEnum.AFTER_SALE_DEDUCT_GIVE, orderItem.getAfterSaleId());
... ...
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/order/handler/TradeBargainHandler.java
1 1 package cn.iocoder.yudao.module.trade.service.order.handler;
2 2  
3   -import cn.hutool.core.util.ObjectUtil;
4 3 import cn.iocoder.yudao.module.promotion.api.bargain.BargainActivityApi;
5 4 import cn.iocoder.yudao.module.promotion.api.bargain.BargainRecordApi;
6 5 import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderDO;
... ... @@ -26,9 +25,10 @@ public class TradeBargainHandler implements TradeOrderHandler {
26 25  
27 26 @Override
28 27 public void beforeOrderCreate(TradeOrderDO order, List<TradeOrderItemDO> orderItems) {
29   - if (ObjectUtil.notEqual(TradeOrderTypeEnum.BARGAIN.getType(), order.getType())) {
  28 + if (TradeOrderTypeEnum.isBargain(order.getType())) {
30 29 return;
31 30 }
  31 +
32 32 // 扣减砍价活动的库存
33 33 bargainActivityApi.updateBargainActivityStock(order.getBargainActivityId(),
34 34 -orderItems.get(0).getCount());
... ... @@ -36,13 +36,20 @@ public class TradeBargainHandler implements TradeOrderHandler {
36 36  
37 37 @Override
38 38 public void afterOrderCreate(TradeOrderDO order, List<TradeOrderItemDO> orderItems) {
39   - if (ObjectUtil.notEqual(TradeOrderTypeEnum.BARGAIN.getType(), order.getType())) {
  39 + if (TradeOrderTypeEnum.isBargain(order.getType())) {
40 40 return;
41 41 }
  42 +
42 43 // 记录砍价记录对应的订单编号
43 44 bargainRecordApi.updateBargainRecordOrderId(order.getBargainRecordId(), order.getId());
44 45 }
45 46  
46   - // TODO 芋艿:取消订单时,需要增加库存
  47 + @Override
  48 + public void cancelOrder(TradeOrderDO order, List<TradeOrderItemDO> orderItems) {
  49 + if (TradeOrderTypeEnum.isBargain(order.getType())) {
  50 + return;
  51 + }
  52 + // TODO 芋艿:取消订单时,需要增加库存
  53 + }
47 54  
48 55 }
... ...
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/order/handler/TradeCombinationHandler.java
1 1 package cn.iocoder.yudao.module.trade.service.order.handler;
2 2  
3 3 import cn.hutool.core.lang.Assert;
4   -import cn.hutool.core.util.ObjectUtil;
5 4 import cn.iocoder.yudao.module.promotion.api.combination.CombinationRecordApi;
6 5 import cn.iocoder.yudao.module.trade.convert.order.TradeOrderConvert;
7 6 import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderDO;
... ... @@ -26,7 +25,7 @@ public class TradeCombinationHandler implements TradeOrderHandler {
26 25 @Override
27 26 public void beforeOrderCreate(TradeOrderDO order, List<TradeOrderItemDO> orderItems) {
28 27 // 如果不是拼团订单则结束
29   - if (ObjectUtil.notEqual(TradeOrderTypeEnum.COMBINATION.getType(), order.getType())) {
  28 + if (TradeOrderTypeEnum.isCombination(order.getType())) {
30 29 return;
31 30 }
32 31 Assert.isTrue(orderItems.size() == 1, "拼团时,只允许选择一个商品");
... ... @@ -41,7 +40,7 @@ public class TradeCombinationHandler implements TradeOrderHandler {
41 40 @Override
42 41 public void afterPayOrder(TradeOrderDO order, List<TradeOrderItemDO> orderItems) {
43 42 // 如果不是拼团订单则结束
44   - if (ObjectUtil.notEqual(TradeOrderTypeEnum.COMBINATION.getType(), order.getType())) {
  43 + if (TradeOrderTypeEnum.isCombination(order.getType())) {
45 44 return;
46 45 }
47 46  
... ... @@ -53,4 +52,11 @@ public class TradeCombinationHandler implements TradeOrderHandler {
53 52 combinationRecordApi.createCombinationRecord(TradeOrderConvert.INSTANCE.convert(order, item));
54 53 }
55 54  
  55 + @Override
  56 + public void cancelOrder(TradeOrderDO order, List<TradeOrderItemDO> orderItems) {
  57 + if (TradeOrderTypeEnum.isCombination(order.getType())) {
  58 + return;
  59 + }
  60 + }
  61 +
56 62 }
... ...
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/order/handler/TradeOrderHandler.java
... ... @@ -40,7 +40,11 @@ public interface TradeOrderHandler {
40 40  
41 41 /**
42 42 * 订单取消
  43 + *
  44 + * @param order 订单
  45 + * @param orderItems 订单项
43 46 */
44   - default void cancelOrder() {}
  47 + default void cancelOrder(TradeOrderDO order, List<TradeOrderItemDO> orderItems) {
  48 + }
45 49  
46 50 }
... ...
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/order/handler/TradeSeckillHandler.java
1 1 package cn.iocoder.yudao.module.trade.service.order.handler;
2 2  
3   -import cn.hutool.core.util.ObjectUtil;
4 3 import cn.iocoder.yudao.module.promotion.api.seckill.SeckillActivityApi;
5 4 import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderDO;
6 5 import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderItemDO;
... ... @@ -23,12 +22,21 @@ public class TradeSeckillHandler implements TradeOrderHandler {
23 22  
24 23 @Override
25 24 public void beforeOrderCreate(TradeOrderDO order, List<TradeOrderItemDO> orderItems) {
26   - if (ObjectUtil.notEqual(TradeOrderTypeEnum.SECKILL.getType(), order.getType())) {
  25 + if (TradeOrderTypeEnum.isSeckill(order.getType())) {
27 26 return;
28 27 }
  28 +
29 29 // 扣减秒杀活动的库存
30 30 seckillActivityApi.updateSeckillStock(order.getSeckillActivityId(),
31 31 orderItems.get(0).getSkuId(), orderItems.get(0).getCount());
32 32 }
33 33  
  34 + @Override
  35 + public void cancelOrder(TradeOrderDO order, List<TradeOrderItemDO> orderItems) {
  36 + if (TradeOrderTypeEnum.isSeckill(order.getType())) {
  37 + return;
  38 + }
  39 +
  40 + }
  41 +
34 42 }
... ...