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 package cn.iocoder.yudao.module.trade.enums.order; 1 package cn.iocoder.yudao.module.trade.enums.order;
2 2
  3 +import cn.hutool.core.util.ObjectUtil;
3 import cn.iocoder.yudao.framework.common.core.IntArrayValuable; 4 import cn.iocoder.yudao.framework.common.core.IntArrayValuable;
4 import lombok.Getter; 5 import lombok.Getter;
5 import lombok.RequiredArgsConstructor; 6 import lombok.RequiredArgsConstructor;
@@ -37,4 +38,20 @@ public enum TradeOrderTypeEnum implements IntArrayValuable { @@ -37,4 +38,20 @@ public enum TradeOrderTypeEnum implements IntArrayValuable {
37 return ARRAYS; 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,12 +625,11 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
625 throw exception(ORDER_CANCEL_FAIL_STATUS_NOT_UNPAID); 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 List<TradeOrderItemDO> orderItems = tradeOrderItemMapper.selectListByOrderId(id); 628 List<TradeOrderItemDO> orderItems = tradeOrderItemMapper.selectListByOrderId(id);
  629 + // 3. 回滚库存
633 productSkuApi.updateSkuStock(TradeOrderConvert.INSTANCE.convert(orderItems)); 630 productSkuApi.updateSkuStock(TradeOrderConvert.INSTANCE.convert(orderItems));
  631 + // 3.1、 活动相关的回滚
  632 + tradeOrderHandlers.forEach(handler -> handler.cancelOrder(order, orderItems));
634 633
635 // 4. 回滚优惠券 634 // 4. 回滚优惠券
636 if (order.getCouponId() != null && order.getCouponId() > 0) { 635 if (order.getCouponId() != null && order.getCouponId() > 0) {
@@ -807,10 +806,11 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService { @@ -807,10 +806,11 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
807 // 2.2 如果全部退款,则进行取消订单 806 // 2.2 如果全部退款,则进行取消订单
808 getSelf().cancelOrderByAfterSale(order, orderRefundPrice); 807 getSelf().cancelOrderByAfterSale(order, orderRefundPrice);
809 808
810 - // TODO @puhui999:活动相关的回滚  
811 809
812 // 3. 回滚库存 810 // 3. 回滚库存
813 productSkuApi.updateSkuStock(TradeOrderConvert.INSTANCE.convert(Collections.singletonList(orderItem))); 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 // 4.1 回滚积分:扣减用户积分(赠送的) 815 // 4.1 回滚积分:扣减用户积分(赠送的)
816 reduceUserPoint(order.getUserId(), orderItem.getGivePoint(), MemberPointBizTypeEnum.AFTER_SALE_DEDUCT_GIVE, orderItem.getAfterSaleId()); 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 package cn.iocoder.yudao.module.trade.service.order.handler; 1 package cn.iocoder.yudao.module.trade.service.order.handler;
2 2
3 -import cn.hutool.core.util.ObjectUtil;  
4 import cn.iocoder.yudao.module.promotion.api.bargain.BargainActivityApi; 3 import cn.iocoder.yudao.module.promotion.api.bargain.BargainActivityApi;
5 import cn.iocoder.yudao.module.promotion.api.bargain.BargainRecordApi; 4 import cn.iocoder.yudao.module.promotion.api.bargain.BargainRecordApi;
6 import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderDO; 5 import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderDO;
@@ -26,9 +25,10 @@ public class TradeBargainHandler implements TradeOrderHandler { @@ -26,9 +25,10 @@ public class TradeBargainHandler implements TradeOrderHandler {
26 25
27 @Override 26 @Override
28 public void beforeOrderCreate(TradeOrderDO order, List<TradeOrderItemDO> orderItems) { 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 return; 29 return;
31 } 30 }
  31 +
32 // 扣减砍价活动的库存 32 // 扣减砍价活动的库存
33 bargainActivityApi.updateBargainActivityStock(order.getBargainActivityId(), 33 bargainActivityApi.updateBargainActivityStock(order.getBargainActivityId(),
34 -orderItems.get(0).getCount()); 34 -orderItems.get(0).getCount());
@@ -36,13 +36,20 @@ public class TradeBargainHandler implements TradeOrderHandler { @@ -36,13 +36,20 @@ public class TradeBargainHandler implements TradeOrderHandler {
36 36
37 @Override 37 @Override
38 public void afterOrderCreate(TradeOrderDO order, List<TradeOrderItemDO> orderItems) { 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 return; 40 return;
41 } 41 }
  42 +
42 // 记录砍价记录对应的订单编号 43 // 记录砍价记录对应的订单编号
43 bargainRecordApi.updateBargainRecordOrderId(order.getBargainRecordId(), order.getId()); 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 package cn.iocoder.yudao.module.trade.service.order.handler; 1 package cn.iocoder.yudao.module.trade.service.order.handler;
2 2
3 import cn.hutool.core.lang.Assert; 3 import cn.hutool.core.lang.Assert;
4 -import cn.hutool.core.util.ObjectUtil;  
5 import cn.iocoder.yudao.module.promotion.api.combination.CombinationRecordApi; 4 import cn.iocoder.yudao.module.promotion.api.combination.CombinationRecordApi;
6 import cn.iocoder.yudao.module.trade.convert.order.TradeOrderConvert; 5 import cn.iocoder.yudao.module.trade.convert.order.TradeOrderConvert;
7 import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderDO; 6 import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderDO;
@@ -26,7 +25,7 @@ public class TradeCombinationHandler implements TradeOrderHandler { @@ -26,7 +25,7 @@ public class TradeCombinationHandler implements TradeOrderHandler {
26 @Override 25 @Override
27 public void beforeOrderCreate(TradeOrderDO order, List<TradeOrderItemDO> orderItems) { 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 return; 29 return;
31 } 30 }
32 Assert.isTrue(orderItems.size() == 1, "拼团时,只允许选择一个商品"); 31 Assert.isTrue(orderItems.size() == 1, "拼团时,只允许选择一个商品");
@@ -41,7 +40,7 @@ public class TradeCombinationHandler implements TradeOrderHandler { @@ -41,7 +40,7 @@ public class TradeCombinationHandler implements TradeOrderHandler {
41 @Override 40 @Override
42 public void afterPayOrder(TradeOrderDO order, List<TradeOrderItemDO> orderItems) { 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 return; 44 return;
46 } 45 }
47 46
@@ -53,4 +52,11 @@ public class TradeCombinationHandler implements TradeOrderHandler { @@ -53,4 +52,11 @@ public class TradeCombinationHandler implements TradeOrderHandler {
53 combinationRecordApi.createCombinationRecord(TradeOrderConvert.INSTANCE.convert(order, item)); 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,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 package cn.iocoder.yudao.module.trade.service.order.handler; 1 package cn.iocoder.yudao.module.trade.service.order.handler;
2 2
3 -import cn.hutool.core.util.ObjectUtil;  
4 import cn.iocoder.yudao.module.promotion.api.seckill.SeckillActivityApi; 3 import cn.iocoder.yudao.module.promotion.api.seckill.SeckillActivityApi;
5 import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderDO; 4 import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderDO;
6 import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderItemDO; 5 import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderItemDO;
@@ -23,12 +22,21 @@ public class TradeSeckillHandler implements TradeOrderHandler { @@ -23,12 +22,21 @@ public class TradeSeckillHandler implements TradeOrderHandler {
23 22
24 @Override 23 @Override
25 public void beforeOrderCreate(TradeOrderDO order, List<TradeOrderItemDO> orderItems) { 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 return; 26 return;
28 } 27 }
  28 +
29 // 扣减秒杀活动的库存 29 // 扣减秒杀活动的库存
30 seckillActivityApi.updateSeckillStock(order.getSeckillActivityId(), 30 seckillActivityApi.updateSeckillStock(order.getSeckillActivityId(),
31 orderItems.get(0).getSkuId(), orderItems.get(0).getCount()); 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 }