Commit 2e5cc0537b8002e174a695bc0e2d79bbebda8aba

Authored by YunaiV
1 parent 7b727d5c

重构:将订单的分支流程,抽到 TradeOrderHandler 实现类中

Showing 10 changed files with 355 additions and 232 deletions
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/order/TradeOrderUpdateServiceImpl.java
... ... @@ -14,23 +14,12 @@ import cn.iocoder.yudao.framework.common.util.json.JsonUtils;
14 14 import cn.iocoder.yudao.framework.common.util.number.MoneyUtils;
15 15 import cn.iocoder.yudao.module.member.api.address.AddressApi;
16 16 import cn.iocoder.yudao.module.member.api.address.dto.AddressRespDTO;
17   -import cn.iocoder.yudao.module.member.api.level.MemberLevelApi;
18   -import cn.iocoder.yudao.module.member.api.point.MemberPointApi;
19   -import cn.iocoder.yudao.module.member.api.user.MemberUserApi;
20   -import cn.iocoder.yudao.module.member.api.user.dto.MemberUserRespDTO;
21   -import cn.iocoder.yudao.module.member.enums.MemberExperienceBizTypeEnum;
22   -import cn.iocoder.yudao.module.member.enums.point.MemberPointBizTypeEnum;
23 17 import cn.iocoder.yudao.module.pay.api.order.PayOrderApi;
24 18 import cn.iocoder.yudao.module.pay.api.order.dto.PayOrderCreateReqDTO;
25 19 import cn.iocoder.yudao.module.pay.api.order.dto.PayOrderRespDTO;
26 20 import cn.iocoder.yudao.module.pay.enums.order.PayOrderStatusEnum;
27 21 import cn.iocoder.yudao.module.product.api.comment.ProductCommentApi;
28 22 import cn.iocoder.yudao.module.product.api.comment.dto.ProductCommentCreateReqDTO;
29   -import cn.iocoder.yudao.module.product.api.sku.ProductSkuApi;
30   -import cn.iocoder.yudao.module.product.api.spu.ProductSpuApi;
31   -import cn.iocoder.yudao.module.promotion.api.combination.CombinationRecordApi;
32   -import cn.iocoder.yudao.module.promotion.api.coupon.CouponApi;
33   -import cn.iocoder.yudao.module.promotion.api.coupon.dto.CouponUseReqDTO;
34 23 import cn.iocoder.yudao.module.trade.controller.admin.order.vo.TradeOrderDeliveryReqVO;
35 24 import cn.iocoder.yudao.module.trade.controller.admin.order.vo.TradeOrderRemarkReqVO;
36 25 import cn.iocoder.yudao.module.trade.controller.admin.order.vo.TradeOrderUpdateAddressReqVO;
... ... @@ -40,7 +29,6 @@ import cn.iocoder.yudao.module.trade.controller.app.order.vo.AppTradeOrderSettle
40 29 import cn.iocoder.yudao.module.trade.controller.app.order.vo.AppTradeOrderSettlementRespVO;
41 30 import cn.iocoder.yudao.module.trade.controller.app.order.vo.item.AppTradeOrderItemCommentCreateReqVO;
42 31 import cn.iocoder.yudao.module.trade.convert.order.TradeOrderConvert;
43   -import cn.iocoder.yudao.module.trade.dal.dataobject.brokerage.BrokerageUserDO;
44 32 import cn.iocoder.yudao.module.trade.dal.dataobject.cart.CartDO;
45 33 import cn.iocoder.yudao.module.trade.dal.dataobject.delivery.DeliveryExpressDO;
46 34 import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderDO;
... ... @@ -48,15 +36,11 @@ import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderItemDO;
48 36 import cn.iocoder.yudao.module.trade.dal.mysql.order.TradeOrderItemMapper;
49 37 import cn.iocoder.yudao.module.trade.dal.mysql.order.TradeOrderMapper;
50 38 import cn.iocoder.yudao.module.trade.dal.redis.no.TradeNoRedisDAO;
51   -import cn.iocoder.yudao.module.trade.enums.brokerage.BrokerageRecordBizTypeEnum;
52 39 import cn.iocoder.yudao.module.trade.enums.delivery.DeliveryTypeEnum;
53 40 import cn.iocoder.yudao.module.trade.enums.order.*;
54 41 import cn.iocoder.yudao.module.trade.framework.order.config.TradeOrderProperties;
55 42 import cn.iocoder.yudao.module.trade.framework.order.core.annotations.TradeOrderLog;
56 43 import cn.iocoder.yudao.module.trade.framework.order.core.utils.TradeOrderLogUtils;
57   -import cn.iocoder.yudao.module.trade.service.brokerage.BrokerageRecordService;
58   -import cn.iocoder.yudao.module.trade.service.brokerage.BrokerageUserService;
59   -import cn.iocoder.yudao.module.trade.service.brokerage.bo.BrokerageAddReqBO;
60 44 import cn.iocoder.yudao.module.trade.service.cart.CartService;
61 45 import cn.iocoder.yudao.module.trade.service.delivery.DeliveryExpressService;
62 46 import cn.iocoder.yudao.module.trade.service.message.TradeMessageService;
... ... @@ -68,13 +52,15 @@ import cn.iocoder.yudao.module.trade.service.price.bo.TradePriceCalculateRespBO;
68 52 import cn.iocoder.yudao.module.trade.service.price.calculator.TradePriceCalculatorHelper;
69 53 import lombok.extern.slf4j.Slf4j;
70 54 import org.jetbrains.annotations.NotNull;
71   -import org.springframework.scheduling.annotation.Async;
72 55 import org.springframework.stereotype.Service;
73 56 import org.springframework.transaction.annotation.Transactional;
74 57  
75 58 import javax.annotation.Resource;
76 59 import java.time.LocalDateTime;
77   -import java.util.*;
  60 +import java.util.ArrayList;
  61 +import java.util.List;
  62 +import java.util.Objects;
  63 +import java.util.Set;
78 64  
79 65 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
80 66 import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.*;
... ... @@ -109,30 +95,12 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
109 95 private DeliveryExpressService deliveryExpressService;
110 96 @Resource
111 97 private TradeMessageService tradeMessageService;
112   - @Resource
113   - private BrokerageUserService brokerageUserService;
114   - @Resource
115   - private BrokerageRecordService brokerageRecordService;
116 98  
117 99 @Resource
118   - private ProductSpuApi productSpuApi;
119   - @Resource
120   - private ProductSkuApi productSkuApi;
121   - @Resource
122 100 private PayOrderApi payOrderApi;
123 101 @Resource
124 102 private AddressApi addressApi;
125 103 @Resource
126   - private CouponApi couponApi;
127   - @Resource
128   - private CombinationRecordApi combinationRecordApi;
129   - @Resource
130   - private MemberUserApi memberUserApi;
131   - @Resource
132   - private MemberLevelApi memberLevelApi;
133   - @Resource
134   - private MemberPointApi memberPointApi;
135   - @Resource
136 104 private ProductCommentApi productCommentApi;
137 105  
138 106 @Resource
... ... @@ -199,7 +167,7 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
199 167 List<TradeOrderItemDO> orderItems = buildTradeOrderItems(order, calculateRespBO);
200 168  
201 169 // 2. 订单创建前的逻辑
202   - beforeCreateTradeOrder(order, orderItems);
  170 + tradeOrderHandlers.forEach(handler -> handler.beforeOrderCreate(order, orderItems));
203 171  
204 172 // 3. 保存订单
205 173 tradeOrderMapper.insert(order);
... ... @@ -234,11 +202,6 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
234 202 order.setReceiverName(createReqVO.getReceiverName()).setReceiverMobile(createReqVO.getReceiverMobile());
235 203 order.setPickUpVerifyCode(RandomUtil.randomNumbers(8)); // 随机一个核销码,长度为 8 位
236 204 }
237   - // 设置订单推广人
238   - BrokerageUserDO brokerageUser = brokerageUserService.getBrokerageUser(order.getUserId());
239   - if (brokerageUser != null && brokerageUser.getBindUserId() != null) {
240   - order.setBrokerageUserId(brokerageUser.getBindUserId());
241   - }
242 205 return order;
243 206 }
244 207  
... ... @@ -248,21 +211,6 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
248 211 }
249 212  
250 213 /**
251   - * 订单创建前,执行前置逻辑
252   - *
253   - * @param order 订单
254   - * @param orderItems 订单项
255   - */
256   - private void beforeCreateTradeOrder(TradeOrderDO order, List<TradeOrderItemDO> orderItems) {
257   - // 1. 执行订单创建前置处理器
258   - // TODO @puhui999:这里有个纠结点;handler 的定义是只处理指定类型的订单的拓展逻辑;还是通用的 handler,类似可以处理优惠劵等等
259   - tradeOrderHandlers.forEach(handler -> handler.beforeOrderCreate(order, orderItems));
260   -
261   - // 2. 下单时扣减商品库存
262   - productSkuApi.updateSkuStock(TradeOrderConvert.INSTANCE.convertNegative(orderItems));
263   - }
264   -
265   - /**
266 214 * 订单创建后,执行后置逻辑
267 215 * <p>
268 216 * 例如说:优惠劵的扣减、积分的扣减、支付单的创建等等
... ... @@ -276,27 +224,16 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
276 224 // 1. 执行订单创建后置处理器
277 225 tradeOrderHandlers.forEach(handler -> handler.afterOrderCreate(order, orderItems));
278 226  
279   - // 2. 有使用优惠券时更新
280   - // 不在前置扣减的原因,是因为优惠劵要记录使用的订单号
281   - if (order.getCouponId() != null) {
282   - couponApi.useCoupon(new CouponUseReqDTO().setId(order.getCouponId()).setUserId(order.getUserId())
283   - .setOrderId(order.getId()));
284   - }
285   -
286   - // 3. 扣减积分(抵扣)
287   - // 不在前置扣减的原因,是因为积分扣减时,需要记录关联业务
288   - reduceUserPoint(order.getUserId(), order.getUsePoint(), MemberPointBizTypeEnum.ORDER_USE, order.getId());
289   -
290   - // 4. 删除购物车商品
  227 + // 2. 删除购物车商品
291 228 Set<Long> cartIds = convertSet(createReqVO.getItems(), AppTradeOrderSettlementReqVO.Item::getCartId);
292 229 if (CollUtil.isNotEmpty(cartIds)) {
293 230 cartService.deleteCart(order.getUserId(), cartIds);
294 231 }
295 232  
296   - // 5. 生成预支付
  233 + // 3. 生成预支付
297 234 createPayOrder(order, orderItems);
298 235  
299   - // 6. 插入订单日志
  236 + // 4. 插入订单日志
300 237 TradeOrderLogUtils.setOrderInfo(order.getId(), null, order.getStatus());
301 238  
302 239 // TODO @LeeYan9: 是可以思考下, 订单的营销优惠记录, 应该记录在哪里, 微信讨论起来!
... ... @@ -330,18 +267,11 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
330 267 throw exception(ORDER_UPDATE_PAID_STATUS_NOT_UNPAID);
331 268 }
332 269  
333   - // 3、订单支付成功后
  270 + // 3. 执行 TradeOrderHandler 的后置处理
334 271 List<TradeOrderItemDO> orderItems = tradeOrderItemMapper.selectListByOrderId(id);
335 272 tradeOrderHandlers.forEach(handler -> handler.afterPayOrder(order, orderItems));
336 273  
337   - // 4.1 增加用户积分(赠送)
338   - addUserPoint(order.getUserId(), order.getGivePoint(), MemberPointBizTypeEnum.ORDER_GIVE, order.getId());
339   - // 4.2 增加用户经验
340   - getSelf().addUserExperienceAsync(order.getUserId(), order.getPayPrice(), order.getId());
341   - // 4.3 增加用户佣金
342   - getSelf().addBrokerageAsync(order.getUserId(), order.getId());
343   -
344   - // 5. 记录订单日志
  274 + // 4. 记录订单日志
345 275 TradeOrderLogUtils.setOrderInfo(order.getId(), order.getStatus(), TradeOrderStatusEnum.UNDELIVERED.getStatus());
346 276 TradeOrderLogUtils.setUserInfo(order.getUserId(), UserTypeEnum.MEMBER.getValue());
347 277 }
... ... @@ -434,8 +364,8 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
434 364 .put("logisticsNo", express != null ? deliveryReqVO.getLogisticsNo() : "").build());
435 365  
436 366 // 4. 发送站内信
437   - tradeMessageService.sendMessageWhenDeliveryOrder(new TradeOrderMessageWhenDeliveryOrderReqBO().setOrderId(order.getId())
438   - .setUserId(order.getUserId()).setMessage(null));
  367 + tradeMessageService.sendMessageWhenDeliveryOrder(new TradeOrderMessageWhenDeliveryOrderReqBO()
  368 + .setOrderId(order.getId()).setUserId(order.getUserId()).setMessage(null));
439 369 }
440 370  
441 371 /**
... ... @@ -448,18 +378,13 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
448 378 */
449 379 private TradeOrderDO validateOrderDeliverable(Long id) {
450 380 TradeOrderDO order = validateOrderExists(id);
451   - // 校验订单是否退款
  381 + // 1. 校验订单是否未发货
452 382 if (ObjectUtil.notEqual(TradeOrderRefundStatusEnum.NONE.getStatus(), order.getRefundStatus())) {
453 383 throw exception(ORDER_DELIVERY_FAIL_REFUND_STATUS_NOT_NONE);
454 384 }
455   - // 订单类型:拼团
456   - if (Objects.equals(TradeOrderTypeEnum.COMBINATION.getType(), order.getType())) {
457   - // 校验订单拼团是否成功
458   - if (!combinationRecordApi.isCombinationRecordSuccess(order.getUserId(), order.getId())) {
459   - throw exception(ORDER_DELIVERY_FAIL_COMBINATION_RECORD_STATUS_NOT_SUCCESS);
460   - }
461   - }
462 385  
  386 + // 2. 执行 TradeOrderHandler 前置处理
  387 + tradeOrderHandlers.forEach(handler -> handler.beforeDeliveryOrder(order));
463 388 return order;
464 389 }
465 390  
... ... @@ -616,30 +541,19 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
616 541 * @param cancelType 取消类型
617 542 */
618 543 private void cancelOrder0(TradeOrderDO order, TradeOrderCancelTypeEnum cancelType) {
619   - Long id = order.getId();
620 544 // 1. 更新 TradeOrderDO 状态为已取消
621   - int updateCount = tradeOrderMapper.updateByIdAndStatus(id, order.getStatus(),
  545 + int updateCount = tradeOrderMapper.updateByIdAndStatus(order.getId(), order.getStatus(),
622 546 new TradeOrderDO().setStatus(TradeOrderStatusEnum.CANCELED.getStatus())
623 547 .setCancelType(cancelType.getType()).setCancelTime(LocalDateTime.now()));
624 548 if (updateCount == 0) {
625 549 throw exception(ORDER_CANCEL_FAIL_STATUS_NOT_UNPAID);
626 550 }
627 551  
628   - List<TradeOrderItemDO> orderItems = tradeOrderItemMapper.selectListByOrderId(id);
629   - // 3. 回滚库存
630   - productSkuApi.updateSkuStock(TradeOrderConvert.INSTANCE.convert(orderItems));
631   - // 3.1、 活动相关的回滚
632   - tradeOrderHandlers.forEach(handler -> handler.cancelOrder(order, orderItems));
633   -
634   - // 4. 回滚优惠券
635   - if (order.getCouponId() != null && order.getCouponId() > 0) {
636   - couponApi.returnUsedCoupon(order.getCouponId());
637   - }
638   -
639   - // 5. 回滚积分(抵扣的)
640   - addUserPoint(order.getUserId(), order.getUsePoint(), MemberPointBizTypeEnum.ORDER_CANCEL, order.getId());
  552 + // 2. 执行 TradeOrderHandler 的后置处理
  553 + List<TradeOrderItemDO> orderItems = tradeOrderItemMapper.selectListByOrderId(order.getId());
  554 + tradeOrderHandlers.forEach(handler -> handler.afterCancelOrder(order, orderItems));
641 555  
642   - // 6. 增加订单日志
  556 + // 3. 增加订单日志
643 557 TradeOrderLogUtils.setOrderInfo(order.getId(), order.getStatus(), TradeOrderStatusEnum.CANCELED.getStatus());
644 558 }
645 559  
... ... @@ -660,8 +574,9 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
660 574 .setStatus(TradeOrderStatusEnum.CANCELED.getStatus())
661 575 .setCancelType(TradeOrderCancelTypeEnum.AFTER_SALE_CLOSE.getType()).setCancelTime(LocalDateTime.now()));
662 576  
663   - // 2. 退还优惠券
664   - couponApi.returnUsedCoupon(order.getCouponId());
  577 + // 2. 执行 TradeOrderHandler 的后置处理
  578 + List<TradeOrderItemDO> orderItems = tradeOrderItemMapper.selectListByOrderId(order.getId());
  579 + tradeOrderHandlers.forEach(handler -> handler.afterCancelOrder(order, orderItems));
665 580 }
666 581  
667 582 @Override
... ... @@ -790,13 +705,15 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
790 705 @Override
791 706 @Transactional(rollbackFor = Exception.class)
792 707 public void updateOrderItemWhenAfterSaleSuccess(Long id, Integer refundPrice) {
793   - // 1. 更新订单项
  708 + // 1.1 更新订单项
794 709 updateOrderItemAfterSaleStatus(id, TradeOrderItemAfterSaleStatusEnum.APPLY.getStatus(),
795 710 TradeOrderItemAfterSaleStatusEnum.SUCCESS.getStatus(), null);
796   -
797   - // 2.1 更新订单的退款金额、积分
  711 + // 1.2 执行 TradeOrderHandler 的后置处理
798 712 TradeOrderItemDO orderItem = tradeOrderItemMapper.selectById(id);
799 713 TradeOrderDO order = tradeOrderMapper.selectById(orderItem.getOrderId());
  714 + tradeOrderHandlers.forEach(handler -> handler.afterCancelOrderItem(order, orderItem));
  715 +
  716 + // 2.1 更新订单的退款金额、积分
800 717 Integer orderRefundPrice = order.getRefundPrice() + refundPrice;
801 718 Integer orderRefundPoint = order.getRefundPoint() + orderItem.getUsePoint();
802 719 Integer refundStatus = isAllOrderItemAfterSaleSuccess(order.getId()) ?
... ... @@ -807,23 +724,6 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
807 724 .setRefundPrice(orderRefundPrice).setRefundPoint(orderRefundPoint));
808 725 // 2.2 如果全部退款,则进行取消订单
809 726 getSelf().cancelOrderByAfterSale(order, orderRefundPrice);
810   -
811   -
812   - // 3. 回滚库存
813   - productSkuApi.updateSkuStock(TradeOrderConvert.INSTANCE.convert(Collections.singletonList(orderItem)));
814   - // 3.1、 活动相关的回滚
815   - tradeOrderHandlers.forEach(handler -> handler.cancelOrder(order, Collections.singletonList(orderItem)));
816   -
817   - // 4.1 回滚积分:扣减用户积分(赠送的)
818   - reduceUserPoint(order.getUserId(), orderItem.getGivePoint(), MemberPointBizTypeEnum.AFTER_SALE_DEDUCT_GIVE, orderItem.getAfterSaleId());
819   - // 4.2 回滚积分:增加用户积分(返还抵扣)
820   - addUserPoint(order.getUserId(), orderItem.getUsePoint(), MemberPointBizTypeEnum.AFTER_SALE_REFUND_USED, orderItem.getAfterSaleId());
821   -
822   - // 5. 回滚经验:扣减用户经验
823   - getSelf().reduceUserExperienceAsync(order.getUserId(), refundPrice, orderItem.getAfterSaleId());
824   -
825   - // 6. 回滚佣金:更新分佣记录为已失效
826   - getSelf().cancelBrokerageAsync(order.getUserId(), id);
827 727 }
828 728  
829 729 @Override
... ... @@ -840,6 +740,7 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
840 740 if (updateCount <= 0) {
841 741 throw exception(ORDER_ITEM_UPDATE_AFTER_SALE_STATUS_FAIL);
842 742 }
  743 +
843 744 }
844 745  
845 746 /**
... ... @@ -940,7 +841,8 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
940 841 @TradeOrderLog(operateType = TradeOrderOperateTypeEnum.SYSTEM_COMMENT)
941 842 public void createOrderItemCommentBySystemBySystem(TradeOrderDO order) {
942 843 // 1. 查询未评论的订单项
943   - List<TradeOrderItemDO> orderItems = tradeOrderItemMapper.selectListByOrderIdAndCommentStatus(order.getId(), Boolean.FALSE);
  844 + List<TradeOrderItemDO> orderItems = tradeOrderItemMapper.selectListByOrderIdAndCommentStatus(
  845 + order.getId(), Boolean.FALSE);
944 846 if (CollUtil.isEmpty(orderItems)) {
945 847 return;
946 848 }
... ... @@ -983,73 +885,6 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
983 885  
984 886 // =================== 营销相关的操作 ===================
985 887  
986   - @Async
987   - protected void addUserExperienceAsync(Long userId, Integer payPrice, Long orderId) {
988   - int bizType = MemberExperienceBizTypeEnum.ORDER.getType();
989   - memberLevelApi.addExperience(userId, payPrice, bizType, String.valueOf(orderId));
990   - }
991   -
992   - @Async
993   - protected void reduceUserExperienceAsync(Long userId, Integer refundPrice, Long afterSaleId) {
994   - int bizType = MemberExperienceBizTypeEnum.REFUND.getType();
995   - memberLevelApi.addExperience(userId, -refundPrice, bizType, String.valueOf(afterSaleId));
996   - }
997   -
998   - /**
999   - * 添加用户积分
1000   - * <p>
1001   - * 目前是支付成功后,就会创建积分记录。
1002   - * <p>
1003   - * 业内还有两种做法,可以根据自己的业务调整:
1004   - * 1. 确认收货后,才创建积分记录
1005   - * 2. 支付 or 下单成功时,创建积分记录(冻结),确认收货解冻或者 n 天后解冻
1006   - *
1007   - * @param userId 用户编号
1008   - * @param point 增加积分数量
1009   - * @param bizType 业务编号
1010   - * @param bizId 业务编号
1011   - */
1012   - protected void addUserPoint(Long userId, Integer point, MemberPointBizTypeEnum bizType, Long bizId) {
1013   - if (point != null && point > 0) {
1014   - memberPointApi.addPoint(userId, point, bizType.getType(), String.valueOf(bizId));
1015   - }
1016   - }
1017   -
1018   - protected void reduceUserPoint(Long userId, Integer point, MemberPointBizTypeEnum bizType, Long bizId) {
1019   - if (point != null && point > 0) {
1020   - memberPointApi.reducePoint(userId, point, bizType.getType(), String.valueOf(bizId));
1021   - }
1022   - }
1023   -
1024   - /**
1025   - * 创建分销记录
1026   - * <p>
1027   - * 目前是支付成功后,就会创建分销记录。
1028   - * <p>
1029   - * 业内还有两种做法,可以根据自己的业务调整:
1030   - * 1. 确认收货后,才创建分销记录
1031   - * 2. 支付 or 下单成功时,创建分销记录(冻结),确认收货解冻或者 n 天后解冻
1032   - *
1033   - * @param userId 用户编号
1034   - * @param orderId 订单编号
1035   - */
1036   - @Async
1037   - protected void addBrokerageAsync(Long userId, Long orderId) {
1038   - MemberUserRespDTO user = memberUserApi.getUser(userId);
1039   - Assert.notNull(user);
1040   - // 每一个订单项,都会去生成分销记录
1041   - List<TradeOrderItemDO> orderItems = tradeOrderItemMapper.selectListByOrderId(orderId);
1042   - List<BrokerageAddReqBO> addList = convertList(orderItems,
1043   - item -> TradeOrderConvert.INSTANCE.convert(user, item,
1044   - productSpuApi.getSpu(item.getSpuId()), productSkuApi.getSku(item.getSkuId())));
1045   - brokerageRecordService.addBrokerage(userId, BrokerageRecordBizTypeEnum.ORDER, addList);
1046   - }
1047   -
1048   - @Async
1049   - protected void cancelBrokerageAsync(Long userId, Long orderItemId) {
1050   - brokerageRecordService.cancelBrokerage(userId, BrokerageRecordBizTypeEnum.ORDER, String.valueOf(orderItemId));
1051   - }
1052   -
1053 888 /**
1054 889 * 获得自身的代理对象,解决 AOP 生效问题
1055 890 *
... ...
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/order/handler/TradeBargainHandler.java renamed to yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/order/handler/TradeBargainOrderHandler.java
... ... @@ -11,12 +11,12 @@ import javax.annotation.Resource;
11 11 import java.util.List;
12 12  
13 13 /**
14   - * 砍价订单 handler 实现类
  14 + * 砍价订单的 {@link TradeOrderHandler} 实现类
15 15 *
16 16 * @author HUIHUI
17 17 */
18 18 @Component
19   -public class TradeBargainHandler implements TradeOrderHandler {
  19 +public class TradeBargainOrderHandler implements TradeOrderHandler {
20 20  
21 21 @Resource
22 22 private BargainActivityApi bargainActivityApi;
... ... @@ -25,7 +25,7 @@ public class TradeBargainHandler implements TradeOrderHandler {
25 25  
26 26 @Override
27 27 public void beforeOrderCreate(TradeOrderDO order, List<TradeOrderItemDO> orderItems) {
28   - if (TradeOrderTypeEnum.isBargain(order.getType())) {
  28 + if (!TradeOrderTypeEnum.isBargain(order.getType())) {
29 29 return;
30 30 }
31 31  
... ... @@ -36,7 +36,7 @@ public class TradeBargainHandler implements TradeOrderHandler {
36 36  
37 37 @Override
38 38 public void afterOrderCreate(TradeOrderDO order, List<TradeOrderItemDO> orderItems) {
39   - if (TradeOrderTypeEnum.isBargain(order.getType())) {
  39 + if (!TradeOrderTypeEnum.isBargain(order.getType())) {
40 40 return;
41 41 }
42 42  
... ... @@ -44,12 +44,4 @@ public class TradeBargainHandler implements TradeOrderHandler {
44 44 bargainRecordApi.updateBargainRecordOrderId(order.getBargainRecordId(), order.getId());
45 45 }
46 46  
47   - @Override
48   - public void cancelOrder(TradeOrderDO order, List<TradeOrderItemDO> orderItems) {
49   - if (TradeOrderTypeEnum.isBargain(order.getType())) {
50   - return;
51   - }
52   - // TODO 芋艿:取消订单时,需要增加库存
53   - }
54   -
55 47 }
... ...
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/order/handler/TradeBrokerageOrderHandler.java 0 → 100644
  1 +package cn.iocoder.yudao.module.trade.service.order.handler;
  2 +
  3 +import cn.hutool.core.lang.Assert;
  4 +import cn.iocoder.yudao.module.member.api.user.MemberUserApi;
  5 +import cn.iocoder.yudao.module.member.api.user.dto.MemberUserRespDTO;
  6 +import cn.iocoder.yudao.module.product.api.sku.ProductSkuApi;
  7 +import cn.iocoder.yudao.module.product.api.sku.dto.ProductSkuRespDTO;
  8 +import cn.iocoder.yudao.module.product.api.spu.ProductSpuApi;
  9 +import cn.iocoder.yudao.module.product.api.spu.dto.ProductSpuRespDTO;
  10 +import cn.iocoder.yudao.module.trade.convert.order.TradeOrderConvert;
  11 +import cn.iocoder.yudao.module.trade.dal.dataobject.brokerage.BrokerageUserDO;
  12 +import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderDO;
  13 +import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderItemDO;
  14 +import cn.iocoder.yudao.module.trade.enums.brokerage.BrokerageRecordBizTypeEnum;
  15 +import cn.iocoder.yudao.module.trade.service.brokerage.BrokerageRecordService;
  16 +import cn.iocoder.yudao.module.trade.service.brokerage.BrokerageUserService;
  17 +import cn.iocoder.yudao.module.trade.service.brokerage.bo.BrokerageAddReqBO;
  18 +import org.springframework.stereotype.Component;
  19 +
  20 +import javax.annotation.Resource;
  21 +import java.util.List;
  22 +
  23 +import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList;
  24 +
  25 +/**
  26 + * 订单分销的 {@link TradeOrderHandler} 实现类
  27 + *
  28 + * @author 芋道源码
  29 + */
  30 +@Component
  31 +public class TradeBrokerageOrderHandler implements TradeOrderHandler {
  32 +
  33 + @Resource
  34 + private MemberUserApi memberUserApi;
  35 + @Resource
  36 + private ProductSpuApi productSpuApi;
  37 + @Resource
  38 + private ProductSkuApi productSkuApi;
  39 +
  40 + @Resource
  41 + private BrokerageRecordService brokerageRecordService;
  42 + @Resource
  43 + private BrokerageUserService brokerageUserService;
  44 +
  45 + @Override
  46 + public void beforeOrderCreate(TradeOrderDO order, List<TradeOrderItemDO> orderItems) {
  47 + // 设置订单推广人
  48 + BrokerageUserDO brokerageUser = brokerageUserService.getBrokerageUser(order.getUserId());
  49 + if (brokerageUser != null && brokerageUser.getBindUserId() != null) {
  50 + order.setBrokerageUserId(brokerageUser.getBindUserId());
  51 + }
  52 + }
  53 +
  54 + @Override
  55 + public void afterPayOrder(TradeOrderDO order, List<TradeOrderItemDO> orderItems) {
  56 + if (order.getBrokerageUserId() != null) {
  57 + addBrokerage(order.getUserId(), orderItems);
  58 + }
  59 + }
  60 +
  61 + @Override
  62 + public void afterCancelOrder(TradeOrderDO order, List<TradeOrderItemDO> orderItems) {
  63 + // TODO 芋艿:取消支付时,需要处理下;
  64 + }
  65 +
  66 + @Override
  67 + public void afterCancelOrderItem(TradeOrderDO order, TradeOrderItemDO orderItem) {
  68 + if (order.getBrokerageUserId() != null) {
  69 + cancelBrokerage(order.getId(), orderItem.getOrderId());
  70 + }
  71 + }
  72 +
  73 + /**
  74 + * 创建分销记录
  75 + * <p>
  76 + * 目前是支付成功后,就会创建分销记录。
  77 + * <p>
  78 + * 业内还有两种做法,可以根据自己的业务调整:
  79 + * 1. 确认收货后,才创建分销记录
  80 + * 2. 支付 or 下单成功时,创建分销记录(冻结),确认收货解冻或者 n 天后解冻
  81 + *
  82 + * @param userId 用户编号
  83 + * @param orderItems 订单项
  84 + */
  85 + protected void addBrokerage(Long userId, List<TradeOrderItemDO> orderItems) {
  86 + MemberUserRespDTO user = memberUserApi.getUser(userId);
  87 + Assert.notNull(user);
  88 + ProductSpuRespDTO spu = productSpuApi.getSpu(orderItems.get(0).getSpuId());
  89 + Assert.notNull(spu);
  90 + ProductSkuRespDTO sku = productSkuApi.getSku(orderItems.get(0).getSkuId());
  91 +
  92 + // 每一个订单项,都会去生成分销记录
  93 + List<BrokerageAddReqBO> addList = convertList(orderItems,
  94 + item -> TradeOrderConvert.INSTANCE.convert(user, item, spu, sku));
  95 + brokerageRecordService.addBrokerage(userId, BrokerageRecordBizTypeEnum.ORDER, addList);
  96 + }
  97 +
  98 + protected void cancelBrokerage(Long userId, Long orderItemId) {
  99 + brokerageRecordService.cancelBrokerage(userId, BrokerageRecordBizTypeEnum.ORDER, String.valueOf(orderItemId));
  100 + }
  101 +
  102 +}
... ...
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/order/handler/TradeCombinationHandler.java renamed to yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/order/handler/TradeCombinationOrderHandler.java
... ... @@ -11,13 +11,16 @@ import org.springframework.stereotype.Component;
11 11 import javax.annotation.Resource;
12 12 import java.util.List;
13 13  
  14 +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
  15 +import static cn.iocoder.yudao.module.trade.enums.ErrorCodeConstants.ORDER_DELIVERY_FAIL_COMBINATION_RECORD_STATUS_NOT_SUCCESS;
  16 +
14 17 /**
15   - * 拼团订单 handler 接口实现类
  18 + * 拼团订单的 {@link TradeOrderHandler} 实现类
16 19 *
17 20 * @author HUIHUI
18 21 */
19 22 @Component
20   -public class TradeCombinationHandler implements TradeOrderHandler {
  23 +public class TradeCombinationOrderHandler implements TradeOrderHandler {
21 24  
22 25 @Resource
23 26 private CombinationRecordApi combinationRecordApi;
... ... @@ -25,7 +28,7 @@ public class TradeCombinationHandler implements TradeOrderHandler {
25 28 @Override
26 29 public void beforeOrderCreate(TradeOrderDO order, List<TradeOrderItemDO> orderItems) {
27 30 // 如果不是拼团订单则结束
28   - if (TradeOrderTypeEnum.isCombination(order.getType())) {
  31 + if (!TradeOrderTypeEnum.isCombination(order.getType())) {
29 32 return;
30 33 }
31 34 Assert.isTrue(orderItems.size() == 1, "拼团时,只允许选择一个商品");
... ... @@ -40,22 +43,26 @@ public class TradeCombinationHandler implements TradeOrderHandler {
40 43 @Override
41 44 public void afterPayOrder(TradeOrderDO order, List<TradeOrderItemDO> orderItems) {
42 45 // 如果不是拼团订单则结束
43   - if (TradeOrderTypeEnum.isCombination(order.getType())) {
  46 + if (!TradeOrderTypeEnum.isCombination(order.getType())) {
44 47 return;
45 48 }
46 49 Assert.isTrue(orderItems.size() == 1, "拼团时,只允许选择一个商品");
47 50  
48   - // 获取商品信息
49   - TradeOrderItemDO item = orderItems.get(0);
50 51 // 创建拼团记录
  52 + TradeOrderItemDO item = orderItems.get(0);
51 53 combinationRecordApi.createCombinationRecord(TradeOrderConvert.INSTANCE.convert(order, item));
52 54 }
53 55  
54 56 @Override
55   - public void cancelOrder(TradeOrderDO order, List<TradeOrderItemDO> orderItems) {
56   - if (TradeOrderTypeEnum.isCombination(order.getType())) {
  57 + public void beforeDeliveryOrder(TradeOrderDO order) {
  58 + if (!TradeOrderTypeEnum.isCombination(order.getType())) {
57 59 return;
58 60 }
  61 + // 校验订单拼团是否成功
  62 + if (!combinationRecordApi.isCombinationRecordSuccess(order.getUserId(), order.getId())) {
  63 + throw exception(ORDER_DELIVERY_FAIL_COMBINATION_RECORD_STATUS_NOT_SUCCESS);
  64 + }
59 65 }
60 66  
61 67 }
  68 +
... ...
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/order/handler/TradeCouponOrderHandler.java 0 → 100644
  1 +package cn.iocoder.yudao.module.trade.service.order.handler;
  2 +
  3 +import cn.iocoder.yudao.module.promotion.api.coupon.CouponApi;
  4 +import cn.iocoder.yudao.module.promotion.api.coupon.dto.CouponUseReqDTO;
  5 +import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderDO;
  6 +import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderItemDO;
  7 +import org.springframework.stereotype.Component;
  8 +
  9 +import javax.annotation.Resource;
  10 +import java.util.List;
  11 +
  12 +/**
  13 + * 优惠劵的 {@link TradeOrderHandler} 实现类
  14 + *
  15 + * @author 芋道源码
  16 + */
  17 +@Component
  18 +public class TradeCouponOrderHandler implements TradeOrderHandler {
  19 +
  20 + @Resource
  21 + private CouponApi couponApi;
  22 +
  23 + @Override
  24 + public void afterOrderCreate(TradeOrderDO order, List<TradeOrderItemDO> orderItems) {
  25 + if (order.getCouponId() == null || order.getCouponId() <= 0) {
  26 + return;
  27 + }
  28 + // 不在前置扣减的原因,是因为优惠劵要记录使用的订单号
  29 + couponApi.useCoupon(new CouponUseReqDTO().setId(order.getCouponId()).setUserId(order.getUserId())
  30 + .setOrderId(order.getId()));
  31 + }
  32 +
  33 + @Override
  34 + public void afterCancelOrder(TradeOrderDO order, List<TradeOrderItemDO> orderItems) {
  35 + if (order.getCouponId() == null || order.getCouponId() <= 0) {
  36 + return;
  37 + }
  38 + // 退回优惠劵
  39 + couponApi.returnUsedCoupon(order.getCouponId());
  40 + }
  41 +
  42 +}
... ...
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/order/handler/TradeMemberPointOrderHandler.java 0 → 100644
  1 +package cn.iocoder.yudao.module.trade.service.order.handler;
  2 +
  3 +import cn.iocoder.yudao.module.member.api.level.MemberLevelApi;
  4 +import cn.iocoder.yudao.module.member.api.point.MemberPointApi;
  5 +import cn.iocoder.yudao.module.member.enums.MemberExperienceBizTypeEnum;
  6 +import cn.iocoder.yudao.module.member.enums.point.MemberPointBizTypeEnum;
  7 +import cn.iocoder.yudao.module.trade.dal.dataobject.aftersale.AfterSaleDO;
  8 +import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderDO;
  9 +import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderItemDO;
  10 +import cn.iocoder.yudao.module.trade.service.aftersale.AfterSaleService;
  11 +import org.springframework.stereotype.Component;
  12 +
  13 +import javax.annotation.Resource;
  14 +import java.util.List;
  15 +
  16 +/**
  17 + * 会员积分、等级的 {@link TradeOrderHandler} 实现类
  18 + *
  19 + * @author owen
  20 + */
  21 +@Component
  22 +public class TradeMemberPointOrderHandler implements TradeOrderHandler {
  23 +
  24 + @Resource
  25 + private MemberPointApi memberPointApi;
  26 + @Resource
  27 + private MemberLevelApi memberLevelApi;
  28 +
  29 + @Resource
  30 + private AfterSaleService afterSaleService;
  31 +
  32 + @Override
  33 + public void afterOrderCreate(TradeOrderDO order, List<TradeOrderItemDO> orderItems) {
  34 + // 扣减用户积分(订单抵扣)。不在前置扣减的原因,是因为积分扣减时,需要记录关联业务
  35 + reducePoint(order.getUserId(), order.getUsePoint(), MemberPointBizTypeEnum.ORDER_USE, order.getId());
  36 + }
  37 +
  38 + @Override
  39 + public void afterPayOrder(TradeOrderDO order, List<TradeOrderItemDO> orderItems) {
  40 + // 增加用户积分(订单赠送)
  41 + addPoint(order.getUserId(), order.getGivePoint(), MemberPointBizTypeEnum.ORDER_GIVE,
  42 + order.getId());
  43 +
  44 + // 增加用户经验
  45 + memberLevelApi.addExperience(order.getUserId(), order.getPayPrice(), MemberExperienceBizTypeEnum.ORDER.getType(),
  46 + String.valueOf(order.getId()));
  47 + }
  48 +
  49 + @Override
  50 + public void afterCancelOrder(TradeOrderDO order, List<TradeOrderItemDO> orderItems) {
  51 + // 扣减(回滚)用户积分(订单抵扣)
  52 + addPoint(order.getUserId(), order.getUsePoint(), MemberPointBizTypeEnum.ORDER_CANCEL,
  53 + order.getId());
  54 + // TODO 芋艿:需要校验;如果部分子订单已经售后退款,则不进行整单退;因为已经退了一部分积分了
  55 + }
  56 +
  57 + @Override
  58 + public void afterCancelOrderItem(TradeOrderDO order, TradeOrderItemDO orderItem) {
  59 + // 扣减(回滚)积分(订单赠送)
  60 + reducePoint(order.getUserId(), orderItem.getGivePoint(), MemberPointBizTypeEnum.AFTER_SALE_DEDUCT_GIVE,
  61 + orderItem.getAfterSaleId());
  62 + // 扣减(回滚)积分:增加用户积分(返还抵扣)
  63 + addPoint(order.getUserId(), orderItem.getUsePoint(), MemberPointBizTypeEnum.AFTER_SALE_REFUND_USED,
  64 + orderItem.getAfterSaleId());
  65 +
  66 + // 扣减(回滚)用户经验
  67 + AfterSaleDO afterSale = afterSaleService.getAfterSale(orderItem.getAfterSaleId());
  68 + memberLevelApi.addExperience(order.getUserId(), -afterSale.getRefundPrice(), MemberExperienceBizTypeEnum.REFUND.getType(),
  69 + String.valueOf(orderItem.getAfterSaleId()));
  70 + }
  71 +
  72 + /**
  73 + * 添加用户积分
  74 + * <p>
  75 + * 目前是支付成功后,就会创建积分记录。
  76 + * <p>
  77 + * 业内还有两种做法,可以根据自己的业务调整:
  78 + * 1. 确认收货后,才创建积分记录
  79 + * 2. 支付 or 下单成功时,创建积分记录(冻结),确认收货解冻或者 n 天后解冻
  80 + *
  81 + * @param userId 用户编号
  82 + * @param point 增加积分数量
  83 + * @param bizType 业务编号
  84 + * @param bizId 业务编号
  85 + */
  86 + protected void addPoint(Long userId, Integer point, MemberPointBizTypeEnum bizType, Long bizId) {
  87 + if (point != null && point > 0) {
  88 + memberPointApi.addPoint(userId, point, bizType.getType(), String.valueOf(bizId));
  89 + }
  90 + }
  91 +
  92 + protected void reducePoint(Long userId, Integer point, MemberPointBizTypeEnum bizType, Long bizId) {
  93 + if (point != null && point > 0) {
  94 + memberPointApi.reducePoint(userId, point, bizType.getType(), String.valueOf(bizId));
  95 + }
  96 + }
  97 +
  98 +}
... ...
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/order/handler/TradeOrderHandler.java
... ... @@ -35,16 +35,29 @@ public interface TradeOrderHandler {
35 35 * @param order 订单
36 36 * @param orderItems 订单项
37 37 */
38   - default void afterPayOrder(TradeOrderDO order, List<TradeOrderItemDO> orderItems) {
39   - }
  38 + default void afterPayOrder(TradeOrderDO order, List<TradeOrderItemDO> orderItems) {}
40 39  
41 40 /**
42   - * 订单取消
  41 + * 订单取消后
43 42 *
44 43 * @param order 订单
45 44 * @param orderItems 订单项
46 45 */
47   - default void cancelOrder(TradeOrderDO order, List<TradeOrderItemDO> orderItems) {
48   - }
  46 + default void afterCancelOrder(TradeOrderDO order, List<TradeOrderItemDO> orderItems) {}
  47 +
  48 + /**
  49 + * 订单项取消后
  50 + *
  51 + * @param order 订单
  52 + * @param orderItem 订单项
  53 + */
  54 + default void afterCancelOrderItem(TradeOrderDO order, TradeOrderItemDO orderItem) {}
  55 +
  56 + /**
  57 + * 订单发货前
  58 + *
  59 + * @param order 订单
  60 + */
  61 + default void beforeDeliveryOrder(TradeOrderDO order) {}
49 62  
50 63 }
... ...
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/order/handler/TradeProductSkuOrderHandler.java 0 → 100644
  1 +package cn.iocoder.yudao.module.trade.service.order.handler;
  2 +
  3 +import cn.iocoder.yudao.module.product.api.sku.ProductSkuApi;
  4 +import cn.iocoder.yudao.module.trade.convert.order.TradeOrderConvert;
  5 +import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderDO;
  6 +import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderItemDO;
  7 +import org.springframework.stereotype.Component;
  8 +
  9 +import javax.annotation.Resource;
  10 +import java.util.List;
  11 +
  12 +import static java.util.Collections.singletonList;
  13 +
  14 +/**
  15 + * 商品 SKU 库存的 {@link TradeOrderHandler} 实现类
  16 + *
  17 + * @author 芋道源码
  18 + */
  19 +@Component
  20 +public class TradeProductSkuOrderHandler implements TradeOrderHandler {
  21 +
  22 + @Resource
  23 + private ProductSkuApi productSkuApi;
  24 +
  25 + @Override
  26 + public void beforeOrderCreate(TradeOrderDO order, List<TradeOrderItemDO> orderItems) {
  27 + productSkuApi.updateSkuStock(TradeOrderConvert.INSTANCE.convertNegative(orderItems));
  28 + }
  29 +
  30 + @Override
  31 + public void afterCancelOrder(TradeOrderDO order, List<TradeOrderItemDO> orderItems) {
  32 + // TODO 芋艿:如果部分售后,最后导致取消;这里需要过滤下;
  33 + productSkuApi.updateSkuStock(TradeOrderConvert.INSTANCE.convert(orderItems));
  34 + }
  35 +
  36 + @Override
  37 + public void afterCancelOrderItem(TradeOrderDO order, TradeOrderItemDO orderItem) {
  38 + productSkuApi.updateSkuStock(TradeOrderConvert.INSTANCE.convert(singletonList(orderItem)));
  39 + }
  40 +
  41 +}
... ...
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/order/handler/TradeSeckillHandler.java renamed to yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/order/handler/TradeSeckillOrderHandler.java
... ... @@ -10,19 +10,19 @@ import javax.annotation.Resource;
10 10 import java.util.List;
11 11  
12 12 /**
13   - * 秒杀订单 handler 实现类
  13 + * 秒杀订单的 {@link TradeOrderHandler} 实现类
14 14 *
15 15 * @author HUIHUI
16 16 */
17 17 @Component
18   -public class TradeSeckillHandler implements TradeOrderHandler {
  18 +public class TradeSeckillOrderHandler implements TradeOrderHandler {
19 19  
20 20 @Resource
21 21 private SeckillActivityApi seckillActivityApi;
22 22  
23 23 @Override
24 24 public void beforeOrderCreate(TradeOrderDO order, List<TradeOrderItemDO> orderItems) {
25   - if (TradeOrderTypeEnum.isSeckill(order.getType())) {
  25 + if (!TradeOrderTypeEnum.isSeckill(order.getType())) {
26 26 return;
27 27 }
28 28  
... ... @@ -31,12 +31,4 @@ public class TradeSeckillHandler implements TradeOrderHandler {
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   -
42 34 }
... ...
yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/api/level/MemberLevelApi.java
... ... @@ -18,6 +18,7 @@ public interface MemberLevelApi {
18 18 */
19 19 MemberLevelRespDTO getMemberLevel(Long id);
20 20  
  21 + // TODO 芋艿:后续增加一个减少接口;
21 22 /**
22 23 * 增加会员经验
23 24 *
... ...