Commit cf41347cb37ae14e8a30436246d8065661fb274c
1 parent
debf5687
trade:支付订单成功时,记录订单日志
Showing
5 changed files
with
37 additions
and
14 deletions
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)); | ... | ... |