Commit 89b240c1f946d7b6035fa66a5ad70be43a43d3e4
1 parent
c485c6e0
订单:介入 TradeOrderHandler#cancelOrder
Showing
6 changed files
with
57 additions
and
15 deletions
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 | } | ... | ... |