Commit 2e5cc0537b8002e174a695bc0e2d79bbebda8aba
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,23 +14,12 @@ import cn.iocoder.yudao.framework.common.util.json.JsonUtils; | ||
| 14 | import cn.iocoder.yudao.framework.common.util.number.MoneyUtils; | 14 | import cn.iocoder.yudao.framework.common.util.number.MoneyUtils; |
| 15 | import cn.iocoder.yudao.module.member.api.address.AddressApi; | 15 | import cn.iocoder.yudao.module.member.api.address.AddressApi; |
| 16 | import cn.iocoder.yudao.module.member.api.address.dto.AddressRespDTO; | 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 | import cn.iocoder.yudao.module.pay.api.order.PayOrderApi; | 17 | import cn.iocoder.yudao.module.pay.api.order.PayOrderApi; |
| 24 | import cn.iocoder.yudao.module.pay.api.order.dto.PayOrderCreateReqDTO; | 18 | import cn.iocoder.yudao.module.pay.api.order.dto.PayOrderCreateReqDTO; |
| 25 | import cn.iocoder.yudao.module.pay.api.order.dto.PayOrderRespDTO; | 19 | import cn.iocoder.yudao.module.pay.api.order.dto.PayOrderRespDTO; |
| 26 | import cn.iocoder.yudao.module.pay.enums.order.PayOrderStatusEnum; | 20 | import cn.iocoder.yudao.module.pay.enums.order.PayOrderStatusEnum; |
| 27 | import cn.iocoder.yudao.module.product.api.comment.ProductCommentApi; | 21 | import cn.iocoder.yudao.module.product.api.comment.ProductCommentApi; |
| 28 | import cn.iocoder.yudao.module.product.api.comment.dto.ProductCommentCreateReqDTO; | 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 | import cn.iocoder.yudao.module.trade.controller.admin.order.vo.TradeOrderDeliveryReqVO; | 23 | import cn.iocoder.yudao.module.trade.controller.admin.order.vo.TradeOrderDeliveryReqVO; |
| 35 | import cn.iocoder.yudao.module.trade.controller.admin.order.vo.TradeOrderRemarkReqVO; | 24 | import cn.iocoder.yudao.module.trade.controller.admin.order.vo.TradeOrderRemarkReqVO; |
| 36 | import cn.iocoder.yudao.module.trade.controller.admin.order.vo.TradeOrderUpdateAddressReqVO; | 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,7 +29,6 @@ import cn.iocoder.yudao.module.trade.controller.app.order.vo.AppTradeOrderSettle | ||
| 40 | import cn.iocoder.yudao.module.trade.controller.app.order.vo.AppTradeOrderSettlementRespVO; | 29 | import cn.iocoder.yudao.module.trade.controller.app.order.vo.AppTradeOrderSettlementRespVO; |
| 41 | import cn.iocoder.yudao.module.trade.controller.app.order.vo.item.AppTradeOrderItemCommentCreateReqVO; | 30 | import cn.iocoder.yudao.module.trade.controller.app.order.vo.item.AppTradeOrderItemCommentCreateReqVO; |
| 42 | import cn.iocoder.yudao.module.trade.convert.order.TradeOrderConvert; | 31 | import cn.iocoder.yudao.module.trade.convert.order.TradeOrderConvert; |
| 43 | -import cn.iocoder.yudao.module.trade.dal.dataobject.brokerage.BrokerageUserDO; | ||
| 44 | import cn.iocoder.yudao.module.trade.dal.dataobject.cart.CartDO; | 32 | import cn.iocoder.yudao.module.trade.dal.dataobject.cart.CartDO; |
| 45 | import cn.iocoder.yudao.module.trade.dal.dataobject.delivery.DeliveryExpressDO; | 33 | import cn.iocoder.yudao.module.trade.dal.dataobject.delivery.DeliveryExpressDO; |
| 46 | import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderDO; | 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,15 +36,11 @@ import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderItemDO; | ||
| 48 | import cn.iocoder.yudao.module.trade.dal.mysql.order.TradeOrderItemMapper; | 36 | import cn.iocoder.yudao.module.trade.dal.mysql.order.TradeOrderItemMapper; |
| 49 | import cn.iocoder.yudao.module.trade.dal.mysql.order.TradeOrderMapper; | 37 | import cn.iocoder.yudao.module.trade.dal.mysql.order.TradeOrderMapper; |
| 50 | import cn.iocoder.yudao.module.trade.dal.redis.no.TradeNoRedisDAO; | 38 | import cn.iocoder.yudao.module.trade.dal.redis.no.TradeNoRedisDAO; |
| 51 | -import cn.iocoder.yudao.module.trade.enums.brokerage.BrokerageRecordBizTypeEnum; | ||
| 52 | import cn.iocoder.yudao.module.trade.enums.delivery.DeliveryTypeEnum; | 39 | import cn.iocoder.yudao.module.trade.enums.delivery.DeliveryTypeEnum; |
| 53 | import cn.iocoder.yudao.module.trade.enums.order.*; | 40 | import cn.iocoder.yudao.module.trade.enums.order.*; |
| 54 | import cn.iocoder.yudao.module.trade.framework.order.config.TradeOrderProperties; | 41 | import cn.iocoder.yudao.module.trade.framework.order.config.TradeOrderProperties; |
| 55 | import cn.iocoder.yudao.module.trade.framework.order.core.annotations.TradeOrderLog; | 42 | import cn.iocoder.yudao.module.trade.framework.order.core.annotations.TradeOrderLog; |
| 56 | import cn.iocoder.yudao.module.trade.framework.order.core.utils.TradeOrderLogUtils; | 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 | import cn.iocoder.yudao.module.trade.service.cart.CartService; | 44 | import cn.iocoder.yudao.module.trade.service.cart.CartService; |
| 61 | import cn.iocoder.yudao.module.trade.service.delivery.DeliveryExpressService; | 45 | import cn.iocoder.yudao.module.trade.service.delivery.DeliveryExpressService; |
| 62 | import cn.iocoder.yudao.module.trade.service.message.TradeMessageService; | 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,13 +52,15 @@ import cn.iocoder.yudao.module.trade.service.price.bo.TradePriceCalculateRespBO; | ||
| 68 | import cn.iocoder.yudao.module.trade.service.price.calculator.TradePriceCalculatorHelper; | 52 | import cn.iocoder.yudao.module.trade.service.price.calculator.TradePriceCalculatorHelper; |
| 69 | import lombok.extern.slf4j.Slf4j; | 53 | import lombok.extern.slf4j.Slf4j; |
| 70 | import org.jetbrains.annotations.NotNull; | 54 | import org.jetbrains.annotations.NotNull; |
| 71 | -import org.springframework.scheduling.annotation.Async; | ||
| 72 | import org.springframework.stereotype.Service; | 55 | import org.springframework.stereotype.Service; |
| 73 | import org.springframework.transaction.annotation.Transactional; | 56 | import org.springframework.transaction.annotation.Transactional; |
| 74 | 57 | ||
| 75 | import javax.annotation.Resource; | 58 | import javax.annotation.Resource; |
| 76 | import java.time.LocalDateTime; | 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 | import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; | 65 | import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; |
| 80 | import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.*; | 66 | import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.*; |
| @@ -109,30 +95,12 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService { | @@ -109,30 +95,12 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService { | ||
| 109 | private DeliveryExpressService deliveryExpressService; | 95 | private DeliveryExpressService deliveryExpressService; |
| 110 | @Resource | 96 | @Resource |
| 111 | private TradeMessageService tradeMessageService; | 97 | private TradeMessageService tradeMessageService; |
| 112 | - @Resource | ||
| 113 | - private BrokerageUserService brokerageUserService; | ||
| 114 | - @Resource | ||
| 115 | - private BrokerageRecordService brokerageRecordService; | ||
| 116 | 98 | ||
| 117 | @Resource | 99 | @Resource |
| 118 | - private ProductSpuApi productSpuApi; | ||
| 119 | - @Resource | ||
| 120 | - private ProductSkuApi productSkuApi; | ||
| 121 | - @Resource | ||
| 122 | private PayOrderApi payOrderApi; | 100 | private PayOrderApi payOrderApi; |
| 123 | @Resource | 101 | @Resource |
| 124 | private AddressApi addressApi; | 102 | private AddressApi addressApi; |
| 125 | @Resource | 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 | private ProductCommentApi productCommentApi; | 104 | private ProductCommentApi productCommentApi; |
| 137 | 105 | ||
| 138 | @Resource | 106 | @Resource |
| @@ -199,7 +167,7 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService { | @@ -199,7 +167,7 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService { | ||
| 199 | List<TradeOrderItemDO> orderItems = buildTradeOrderItems(order, calculateRespBO); | 167 | List<TradeOrderItemDO> orderItems = buildTradeOrderItems(order, calculateRespBO); |
| 200 | 168 | ||
| 201 | // 2. 订单创建前的逻辑 | 169 | // 2. 订单创建前的逻辑 |
| 202 | - beforeCreateTradeOrder(order, orderItems); | 170 | + tradeOrderHandlers.forEach(handler -> handler.beforeOrderCreate(order, orderItems)); |
| 203 | 171 | ||
| 204 | // 3. 保存订单 | 172 | // 3. 保存订单 |
| 205 | tradeOrderMapper.insert(order); | 173 | tradeOrderMapper.insert(order); |
| @@ -234,11 +202,6 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService { | @@ -234,11 +202,6 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService { | ||
| 234 | order.setReceiverName(createReqVO.getReceiverName()).setReceiverMobile(createReqVO.getReceiverMobile()); | 202 | order.setReceiverName(createReqVO.getReceiverName()).setReceiverMobile(createReqVO.getReceiverMobile()); |
| 235 | order.setPickUpVerifyCode(RandomUtil.randomNumbers(8)); // 随机一个核销码,长度为 8 位 | 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 | return order; | 205 | return order; |
| 243 | } | 206 | } |
| 244 | 207 | ||
| @@ -248,21 +211,6 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService { | @@ -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 | * <p> | 215 | * <p> |
| 268 | * 例如说:优惠劵的扣减、积分的扣减、支付单的创建等等 | 216 | * 例如说:优惠劵的扣减、积分的扣减、支付单的创建等等 |
| @@ -276,27 +224,16 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService { | @@ -276,27 +224,16 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService { | ||
| 276 | // 1. 执行订单创建后置处理器 | 224 | // 1. 执行订单创建后置处理器 |
| 277 | tradeOrderHandlers.forEach(handler -> handler.afterOrderCreate(order, orderItems)); | 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 | Set<Long> cartIds = convertSet(createReqVO.getItems(), AppTradeOrderSettlementReqVO.Item::getCartId); | 228 | Set<Long> cartIds = convertSet(createReqVO.getItems(), AppTradeOrderSettlementReqVO.Item::getCartId); |
| 292 | if (CollUtil.isNotEmpty(cartIds)) { | 229 | if (CollUtil.isNotEmpty(cartIds)) { |
| 293 | cartService.deleteCart(order.getUserId(), cartIds); | 230 | cartService.deleteCart(order.getUserId(), cartIds); |
| 294 | } | 231 | } |
| 295 | 232 | ||
| 296 | - // 5. 生成预支付 | 233 | + // 3. 生成预支付 |
| 297 | createPayOrder(order, orderItems); | 234 | createPayOrder(order, orderItems); |
| 298 | 235 | ||
| 299 | - // 6. 插入订单日志 | 236 | + // 4. 插入订单日志 |
| 300 | TradeOrderLogUtils.setOrderInfo(order.getId(), null, order.getStatus()); | 237 | TradeOrderLogUtils.setOrderInfo(order.getId(), null, order.getStatus()); |
| 301 | 238 | ||
| 302 | // TODO @LeeYan9: 是可以思考下, 订单的营销优惠记录, 应该记录在哪里, 微信讨论起来! | 239 | // TODO @LeeYan9: 是可以思考下, 订单的营销优惠记录, 应该记录在哪里, 微信讨论起来! |
| @@ -330,18 +267,11 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService { | @@ -330,18 +267,11 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService { | ||
| 330 | throw exception(ORDER_UPDATE_PAID_STATUS_NOT_UNPAID); | 267 | throw exception(ORDER_UPDATE_PAID_STATUS_NOT_UNPAID); |
| 331 | } | 268 | } |
| 332 | 269 | ||
| 333 | - // 3、订单支付成功后 | 270 | + // 3. 执行 TradeOrderHandler 的后置处理 |
| 334 | List<TradeOrderItemDO> orderItems = tradeOrderItemMapper.selectListByOrderId(id); | 271 | List<TradeOrderItemDO> orderItems = tradeOrderItemMapper.selectListByOrderId(id); |
| 335 | tradeOrderHandlers.forEach(handler -> handler.afterPayOrder(order, orderItems)); | 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 | TradeOrderLogUtils.setOrderInfo(order.getId(), order.getStatus(), TradeOrderStatusEnum.UNDELIVERED.getStatus()); | 275 | TradeOrderLogUtils.setOrderInfo(order.getId(), order.getStatus(), TradeOrderStatusEnum.UNDELIVERED.getStatus()); |
| 346 | TradeOrderLogUtils.setUserInfo(order.getUserId(), UserTypeEnum.MEMBER.getValue()); | 276 | TradeOrderLogUtils.setUserInfo(order.getUserId(), UserTypeEnum.MEMBER.getValue()); |
| 347 | } | 277 | } |
| @@ -434,8 +364,8 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService { | @@ -434,8 +364,8 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService { | ||
| 434 | .put("logisticsNo", express != null ? deliveryReqVO.getLogisticsNo() : "").build()); | 364 | .put("logisticsNo", express != null ? deliveryReqVO.getLogisticsNo() : "").build()); |
| 435 | 365 | ||
| 436 | // 4. 发送站内信 | 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,18 +378,13 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService { | ||
| 448 | */ | 378 | */ |
| 449 | private TradeOrderDO validateOrderDeliverable(Long id) { | 379 | private TradeOrderDO validateOrderDeliverable(Long id) { |
| 450 | TradeOrderDO order = validateOrderExists(id); | 380 | TradeOrderDO order = validateOrderExists(id); |
| 451 | - // 校验订单是否退款 | 381 | + // 1. 校验订单是否未发货 |
| 452 | if (ObjectUtil.notEqual(TradeOrderRefundStatusEnum.NONE.getStatus(), order.getRefundStatus())) { | 382 | if (ObjectUtil.notEqual(TradeOrderRefundStatusEnum.NONE.getStatus(), order.getRefundStatus())) { |
| 453 | throw exception(ORDER_DELIVERY_FAIL_REFUND_STATUS_NOT_NONE); | 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 | return order; | 388 | return order; |
| 464 | } | 389 | } |
| 465 | 390 | ||
| @@ -616,30 +541,19 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService { | @@ -616,30 +541,19 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService { | ||
| 616 | * @param cancelType 取消类型 | 541 | * @param cancelType 取消类型 |
| 617 | */ | 542 | */ |
| 618 | private void cancelOrder0(TradeOrderDO order, TradeOrderCancelTypeEnum cancelType) { | 543 | private void cancelOrder0(TradeOrderDO order, TradeOrderCancelTypeEnum cancelType) { |
| 619 | - Long id = order.getId(); | ||
| 620 | // 1. 更新 TradeOrderDO 状态为已取消 | 544 | // 1. 更新 TradeOrderDO 状态为已取消 |
| 621 | - int updateCount = tradeOrderMapper.updateByIdAndStatus(id, order.getStatus(), | 545 | + int updateCount = tradeOrderMapper.updateByIdAndStatus(order.getId(), order.getStatus(), |
| 622 | new TradeOrderDO().setStatus(TradeOrderStatusEnum.CANCELED.getStatus()) | 546 | new TradeOrderDO().setStatus(TradeOrderStatusEnum.CANCELED.getStatus()) |
| 623 | .setCancelType(cancelType.getType()).setCancelTime(LocalDateTime.now())); | 547 | .setCancelType(cancelType.getType()).setCancelTime(LocalDateTime.now())); |
| 624 | if (updateCount == 0) { | 548 | if (updateCount == 0) { |
| 625 | throw exception(ORDER_CANCEL_FAIL_STATUS_NOT_UNPAID); | 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 | TradeOrderLogUtils.setOrderInfo(order.getId(), order.getStatus(), TradeOrderStatusEnum.CANCELED.getStatus()); | 557 | TradeOrderLogUtils.setOrderInfo(order.getId(), order.getStatus(), TradeOrderStatusEnum.CANCELED.getStatus()); |
| 644 | } | 558 | } |
| 645 | 559 | ||
| @@ -660,8 +574,9 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService { | @@ -660,8 +574,9 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService { | ||
| 660 | .setStatus(TradeOrderStatusEnum.CANCELED.getStatus()) | 574 | .setStatus(TradeOrderStatusEnum.CANCELED.getStatus()) |
| 661 | .setCancelType(TradeOrderCancelTypeEnum.AFTER_SALE_CLOSE.getType()).setCancelTime(LocalDateTime.now())); | 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 | @Override | 582 | @Override |
| @@ -790,13 +705,15 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService { | @@ -790,13 +705,15 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService { | ||
| 790 | @Override | 705 | @Override |
| 791 | @Transactional(rollbackFor = Exception.class) | 706 | @Transactional(rollbackFor = Exception.class) |
| 792 | public void updateOrderItemWhenAfterSaleSuccess(Long id, Integer refundPrice) { | 707 | public void updateOrderItemWhenAfterSaleSuccess(Long id, Integer refundPrice) { |
| 793 | - // 1. 更新订单项 | 708 | + // 1.1 更新订单项 |
| 794 | updateOrderItemAfterSaleStatus(id, TradeOrderItemAfterSaleStatusEnum.APPLY.getStatus(), | 709 | updateOrderItemAfterSaleStatus(id, TradeOrderItemAfterSaleStatusEnum.APPLY.getStatus(), |
| 795 | TradeOrderItemAfterSaleStatusEnum.SUCCESS.getStatus(), null); | 710 | TradeOrderItemAfterSaleStatusEnum.SUCCESS.getStatus(), null); |
| 796 | - | ||
| 797 | - // 2.1 更新订单的退款金额、积分 | 711 | + // 1.2 执行 TradeOrderHandler 的后置处理 |
| 798 | TradeOrderItemDO orderItem = tradeOrderItemMapper.selectById(id); | 712 | TradeOrderItemDO orderItem = tradeOrderItemMapper.selectById(id); |
| 799 | TradeOrderDO order = tradeOrderMapper.selectById(orderItem.getOrderId()); | 713 | TradeOrderDO order = tradeOrderMapper.selectById(orderItem.getOrderId()); |
| 714 | + tradeOrderHandlers.forEach(handler -> handler.afterCancelOrderItem(order, orderItem)); | ||
| 715 | + | ||
| 716 | + // 2.1 更新订单的退款金额、积分 | ||
| 800 | Integer orderRefundPrice = order.getRefundPrice() + refundPrice; | 717 | Integer orderRefundPrice = order.getRefundPrice() + refundPrice; |
| 801 | Integer orderRefundPoint = order.getRefundPoint() + orderItem.getUsePoint(); | 718 | Integer orderRefundPoint = order.getRefundPoint() + orderItem.getUsePoint(); |
| 802 | Integer refundStatus = isAllOrderItemAfterSaleSuccess(order.getId()) ? | 719 | Integer refundStatus = isAllOrderItemAfterSaleSuccess(order.getId()) ? |
| @@ -807,23 +724,6 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService { | @@ -807,23 +724,6 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService { | ||
| 807 | .setRefundPrice(orderRefundPrice).setRefundPoint(orderRefundPoint)); | 724 | .setRefundPrice(orderRefundPrice).setRefundPoint(orderRefundPoint)); |
| 808 | // 2.2 如果全部退款,则进行取消订单 | 725 | // 2.2 如果全部退款,则进行取消订单 |
| 809 | getSelf().cancelOrderByAfterSale(order, orderRefundPrice); | 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 | @Override | 729 | @Override |
| @@ -840,6 +740,7 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService { | @@ -840,6 +740,7 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService { | ||
| 840 | if (updateCount <= 0) { | 740 | if (updateCount <= 0) { |
| 841 | throw exception(ORDER_ITEM_UPDATE_AFTER_SALE_STATUS_FAIL); | 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,7 +841,8 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService { | ||
| 940 | @TradeOrderLog(operateType = TradeOrderOperateTypeEnum.SYSTEM_COMMENT) | 841 | @TradeOrderLog(operateType = TradeOrderOperateTypeEnum.SYSTEM_COMMENT) |
| 941 | public void createOrderItemCommentBySystemBySystem(TradeOrderDO order) { | 842 | public void createOrderItemCommentBySystemBySystem(TradeOrderDO order) { |
| 942 | // 1. 查询未评论的订单项 | 843 | // 1. 查询未评论的订单项 |
| 943 | - List<TradeOrderItemDO> orderItems = tradeOrderItemMapper.selectListByOrderIdAndCommentStatus(order.getId(), Boolean.FALSE); | 844 | + List<TradeOrderItemDO> orderItems = tradeOrderItemMapper.selectListByOrderIdAndCommentStatus( |
| 845 | + order.getId(), Boolean.FALSE); | ||
| 944 | if (CollUtil.isEmpty(orderItems)) { | 846 | if (CollUtil.isEmpty(orderItems)) { |
| 945 | return; | 847 | return; |
| 946 | } | 848 | } |
| @@ -983,73 +885,6 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService { | @@ -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 | * 获得自身的代理对象,解决 AOP 生效问题 | 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,12 +11,12 @@ import javax.annotation.Resource; | ||
| 11 | import java.util.List; | 11 | import java.util.List; |
| 12 | 12 | ||
| 13 | /** | 13 | /** |
| 14 | - * 砍价订单 handler 实现类 | 14 | + * 砍价订单的 {@link TradeOrderHandler} 实现类 |
| 15 | * | 15 | * |
| 16 | * @author HUIHUI | 16 | * @author HUIHUI |
| 17 | */ | 17 | */ |
| 18 | @Component | 18 | @Component |
| 19 | -public class TradeBargainHandler implements TradeOrderHandler { | 19 | +public class TradeBargainOrderHandler implements TradeOrderHandler { |
| 20 | 20 | ||
| 21 | @Resource | 21 | @Resource |
| 22 | private BargainActivityApi bargainActivityApi; | 22 | private BargainActivityApi bargainActivityApi; |
| @@ -25,7 +25,7 @@ public class TradeBargainHandler implements TradeOrderHandler { | @@ -25,7 +25,7 @@ public class TradeBargainHandler implements TradeOrderHandler { | ||
| 25 | 25 | ||
| 26 | @Override | 26 | @Override |
| 27 | public void beforeOrderCreate(TradeOrderDO order, List<TradeOrderItemDO> orderItems) { | 27 | public void beforeOrderCreate(TradeOrderDO order, List<TradeOrderItemDO> orderItems) { |
| 28 | - if (TradeOrderTypeEnum.isBargain(order.getType())) { | 28 | + if (!TradeOrderTypeEnum.isBargain(order.getType())) { |
| 29 | return; | 29 | return; |
| 30 | } | 30 | } |
| 31 | 31 | ||
| @@ -36,7 +36,7 @@ public class TradeBargainHandler implements TradeOrderHandler { | @@ -36,7 +36,7 @@ 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 (TradeOrderTypeEnum.isBargain(order.getType())) { | 39 | + if (!TradeOrderTypeEnum.isBargain(order.getType())) { |
| 40 | return; | 40 | return; |
| 41 | } | 41 | } |
| 42 | 42 | ||
| @@ -44,12 +44,4 @@ public class TradeBargainHandler implements TradeOrderHandler { | @@ -44,12 +44,4 @@ public class TradeBargainHandler implements TradeOrderHandler { | ||
| 44 | bargainRecordApi.updateBargainRecordOrderId(order.getBargainRecordId(), order.getId()); | 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,13 +11,16 @@ import org.springframework.stereotype.Component; | ||
| 11 | import javax.annotation.Resource; | 11 | import javax.annotation.Resource; |
| 12 | import java.util.List; | 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 | * @author HUIHUI | 20 | * @author HUIHUI |
| 18 | */ | 21 | */ |
| 19 | @Component | 22 | @Component |
| 20 | -public class TradeCombinationHandler implements TradeOrderHandler { | 23 | +public class TradeCombinationOrderHandler implements TradeOrderHandler { |
| 21 | 24 | ||
| 22 | @Resource | 25 | @Resource |
| 23 | private CombinationRecordApi combinationRecordApi; | 26 | private CombinationRecordApi combinationRecordApi; |
| @@ -25,7 +28,7 @@ public class TradeCombinationHandler implements TradeOrderHandler { | @@ -25,7 +28,7 @@ public class TradeCombinationHandler implements TradeOrderHandler { | ||
| 25 | @Override | 28 | @Override |
| 26 | public void beforeOrderCreate(TradeOrderDO order, List<TradeOrderItemDO> orderItems) { | 29 | public void beforeOrderCreate(TradeOrderDO order, List<TradeOrderItemDO> orderItems) { |
| 27 | // 如果不是拼团订单则结束 | 30 | // 如果不是拼团订单则结束 |
| 28 | - if (TradeOrderTypeEnum.isCombination(order.getType())) { | 31 | + if (!TradeOrderTypeEnum.isCombination(order.getType())) { |
| 29 | return; | 32 | return; |
| 30 | } | 33 | } |
| 31 | Assert.isTrue(orderItems.size() == 1, "拼团时,只允许选择一个商品"); | 34 | Assert.isTrue(orderItems.size() == 1, "拼团时,只允许选择一个商品"); |
| @@ -40,22 +43,26 @@ public class TradeCombinationHandler implements TradeOrderHandler { | @@ -40,22 +43,26 @@ public class TradeCombinationHandler implements TradeOrderHandler { | ||
| 40 | @Override | 43 | @Override |
| 41 | public void afterPayOrder(TradeOrderDO order, List<TradeOrderItemDO> orderItems) { | 44 | public void afterPayOrder(TradeOrderDO order, List<TradeOrderItemDO> orderItems) { |
| 42 | // 如果不是拼团订单则结束 | 45 | // 如果不是拼团订单则结束 |
| 43 | - if (TradeOrderTypeEnum.isCombination(order.getType())) { | 46 | + if (!TradeOrderTypeEnum.isCombination(order.getType())) { |
| 44 | return; | 47 | return; |
| 45 | } | 48 | } |
| 46 | Assert.isTrue(orderItems.size() == 1, "拼团时,只允许选择一个商品"); | 49 | Assert.isTrue(orderItems.size() == 1, "拼团时,只允许选择一个商品"); |
| 47 | 50 | ||
| 48 | - // 获取商品信息 | ||
| 49 | - TradeOrderItemDO item = orderItems.get(0); | ||
| 50 | // 创建拼团记录 | 51 | // 创建拼团记录 |
| 52 | + TradeOrderItemDO item = orderItems.get(0); | ||
| 51 | combinationRecordApi.createCombinationRecord(TradeOrderConvert.INSTANCE.convert(order, item)); | 53 | combinationRecordApi.createCombinationRecord(TradeOrderConvert.INSTANCE.convert(order, item)); |
| 52 | } | 54 | } |
| 53 | 55 | ||
| 54 | @Override | 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 | return; | 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,16 +35,29 @@ public interface TradeOrderHandler { | ||
| 35 | * @param order 订单 | 35 | * @param order 订单 |
| 36 | * @param orderItems 订单项 | 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 | * @param order 订单 | 43 | * @param order 订单 |
| 45 | * @param orderItems 订单项 | 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,19 +10,19 @@ import javax.annotation.Resource; | ||
| 10 | import java.util.List; | 10 | import java.util.List; |
| 11 | 11 | ||
| 12 | /** | 12 | /** |
| 13 | - * 秒杀订单 handler 实现类 | 13 | + * 秒杀订单的 {@link TradeOrderHandler} 实现类 |
| 14 | * | 14 | * |
| 15 | * @author HUIHUI | 15 | * @author HUIHUI |
| 16 | */ | 16 | */ |
| 17 | @Component | 17 | @Component |
| 18 | -public class TradeSeckillHandler implements TradeOrderHandler { | 18 | +public class TradeSeckillOrderHandler implements TradeOrderHandler { |
| 19 | 19 | ||
| 20 | @Resource | 20 | @Resource |
| 21 | private SeckillActivityApi seckillActivityApi; | 21 | private SeckillActivityApi seckillActivityApi; |
| 22 | 22 | ||
| 23 | @Override | 23 | @Override |
| 24 | public void beforeOrderCreate(TradeOrderDO order, List<TradeOrderItemDO> orderItems) { | 24 | public void beforeOrderCreate(TradeOrderDO order, List<TradeOrderItemDO> orderItems) { |
| 25 | - if (TradeOrderTypeEnum.isSeckill(order.getType())) { | 25 | + if (!TradeOrderTypeEnum.isSeckill(order.getType())) { |
| 26 | return; | 26 | return; |
| 27 | } | 27 | } |
| 28 | 28 | ||
| @@ -31,12 +31,4 @@ public class TradeSeckillHandler implements TradeOrderHandler { | @@ -31,12 +31,4 @@ public class TradeSeckillHandler implements TradeOrderHandler { | ||
| 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 | - | ||
| 42 | } | 34 | } |
yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/api/level/MemberLevelApi.java