Commit cf41347cb37ae14e8a30436246d8065661fb274c

Authored by YunaiV
1 parent debf5687

trade:支付订单成功时,记录订单日志

yudao-module-mall/yudao-module-trade-api/src/main/java/cn/iocoder/yudao/module/trade/enums/order/TradeOrderOperateTypeEnum.java
... ... @@ -14,6 +14,7 @@ import lombok.RequiredArgsConstructor;
14 14 public enum TradeOrderOperateTypeEnum {
15 15  
16 16 MEMBER_CREATE(1, "用户下单"),
  17 + MEMBER_PAY(20, "用户付款成功"),
17 18 MEMBER_RECEIVE(30, "用户已收货"),
18 19 SYSTEM_RECEIVE(31, "到期未收货,系统自动确认收货"),
19 20 MEMBER_COMMENT(33, "用户评价"),
... ...
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/framework/order/core/annotations/TradeOrderLog.java
... ... @@ -2,7 +2,10 @@ package cn.iocoder.yudao.module.trade.framework.order.core.annotations;
2 2  
3 3 import cn.iocoder.yudao.module.trade.enums.order.TradeOrderOperateTypeEnum;
4 4  
5   -import java.lang.annotation.*;
  5 +import java.lang.annotation.Documented;
  6 +import java.lang.annotation.Retention;
  7 +import java.lang.annotation.RetentionPolicy;
  8 +import java.lang.annotation.Target;
6 9  
7 10 import static java.lang.annotation.ElementType.ANNOTATION_TYPE;
8 11 import static java.lang.annotation.ElementType.METHOD;
... ...
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/framework/order/core/aop/TradeOrderLogAspect.java
... ... @@ -32,6 +32,16 @@ import static java.util.Collections.emptyMap;
32 32 public class TradeOrderLogAspect {
33 33  
34 34 /**
  35 + * 用户编号
  36 + *
  37 + * 目前的使用场景:支付回调时,需要强制设置下用户编号
  38 + */
  39 + private static final ThreadLocal<Long> USER_ID = new ThreadLocal<>();
  40 + /**
  41 + * 用户类型
  42 + */
  43 + private static final ThreadLocal<Integer> USER_TYPE = new ThreadLocal<>();
  44 + /**
35 45 * 订单编号
36 46 */
37 47 private static final ThreadLocal<Long> ORDER_ID = new ThreadLocal<>();
... ... @@ -112,4 +122,9 @@ public class TradeOrderLogAspect {
112 122 EXTS.set(exts);
113 123 }
114 124  
  125 + public static void setUserInfo(Long userId, Integer userType) {
  126 + USER_ID.set(userId);
  127 + USER_TYPE.set(userType);
  128 + }
  129 +
115 130 }
... ...
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/framework/order/core/utils/TradeOrderLogUtils.java
... ... @@ -20,4 +20,8 @@ public class TradeOrderLogUtils {
20 20 TradeOrderLogAspect.setOrderInfo(id, beforeStatus, afterStatus, exts);
21 21 }
22 22  
  23 + public static void setUserInfo(Long userId, Integer userType) {
  24 + TradeOrderLogAspect.setUserInfo(userId, userType);
  25 + }
  26 +
23 27 }
... ...
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/order/TradeOrderUpdateServiceImpl.java
... ... @@ -8,6 +8,7 @@ import cn.hutool.core.util.StrUtil;
8 8 import cn.hutool.extra.spring.SpringUtil;
9 9 import cn.iocoder.yudao.framework.common.core.KeyValue;
10 10 import cn.iocoder.yudao.framework.common.enums.TerminalEnum;
  11 +import cn.iocoder.yudao.framework.common.enums.UserTypeEnum;
11 12 import cn.iocoder.yudao.framework.common.util.json.JsonUtils;
12 13 import cn.iocoder.yudao.module.member.api.address.AddressApi;
13 14 import cn.iocoder.yudao.module.member.api.address.dto.AddressRespDTO;
... ... @@ -321,38 +322,39 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
321 322  
322 323 @Override
323 324 @Transactional(rollbackFor = Exception.class)
  325 + @TradeOrderLog(operateType = TradeOrderOperateTypeEnum.MEMBER_PAY)
324 326 public void updateOrderPaid(Long id, Long payOrderId) {
325   - // 校验并获得交易订单(可支付)
  327 + // 1. 校验并获得交易订单(可支付)
326 328 KeyValue<TradeOrderDO, PayOrderRespDTO> orderResult = validateOrderPayable(id, payOrderId);
327 329 TradeOrderDO order = orderResult.getKey();
328 330 PayOrderRespDTO payOrder = orderResult.getValue();
329 331  
330   - // 更新 TradeOrderDO 状态为已支付,等待发货
  332 + // 2. 更新 TradeOrderDO 状态为已支付,等待发货
331 333 int updateCount = tradeOrderMapper.updateByIdAndStatus(id, order.getStatus(),
332 334 new TradeOrderDO().setStatus(TradeOrderStatusEnum.UNDELIVERED.getStatus()).setPayStatus(true)
333 335 .setPayTime(LocalDateTime.now()).setPayChannelCode(payOrder.getChannelCode()));
334 336 if (updateCount == 0) {
335 337 throw exception(ORDER_UPDATE_PAID_STATUS_NOT_UNPAID);
336 338 }
337   - // 校验活动
  339 +
  340 + // 3. 校验活动
338 341 // 1、拼团活动
339 342 // TODO @puhui999:这块也抽象到 handler 里
340 343 if (Objects.equals(TradeOrderTypeEnum.COMBINATION.getType(), order.getType())) {
341 344 // 更新拼团状态 TODO puhui999:订单支付失败或订单支付过期删除这条拼团记录
342 345 combinationRecordApi.updateRecordStatusToInProgress(order.getUserId(), order.getId(), LocalDateTime.now());
343 346 }
344   - // TODO 芋艿:发送订单变化的消息
345   -
346   - // TODO 芋艿:发送站内信
347   -
348   - // TODO 芋艿:OrderLog
349 347  
350   - // 增加用户积分(赠送)
  348 + // 4.1 增加用户积分(赠送)
351 349 addUserPoint(order.getUserId(), order.getGivePoint(), MemberPointBizTypeEnum.ORDER_GIVE, order.getId());
352   - // 增加用户经验
  350 + // 4.2 增加用户经验
353 351 getSelf().addUserExperienceAsync(order.getUserId(), order.getPayPrice(), order.getId());
354   - // 增加用户佣金
  352 + // 4.3 增加用户佣金
355 353 getSelf().addBrokerageAsync(order.getUserId(), order.getId());
  354 +
  355 + // 5. 记录订单日志
  356 + TradeOrderLogUtils.setOrderInfo(order.getId(), order.getStatus(), TradeOrderStatusEnum.UNDELIVERED.getStatus());
  357 + TradeOrderLogUtils.setUserInfo(order.getUserId(), UserTypeEnum.MEMBER.getValue());
356 358 }
357 359  
358 360 /**
... ... @@ -435,8 +437,6 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
435 437 throw exception(ORDER_DELIVERY_FAIL_STATUS_NOT_UNDELIVERED);
436 438 }
437 439  
438   - // TODO 芋艿:发送订单变化的消息
439   -
440 440 // 发送站内信
441 441 tradeMessageService.sendMessageWhenDeliveryOrder(new TradeOrderMessageWhenDeliveryOrderReqBO().setOrderId(order.getId())
442 442 .setUserId(order.getUserId()).setMessage(null));
... ...