Commit debf5687504e19e3787872656fe6011acef12667

Authored by YunaiV
1 parent ad535e67

code review:增加取消售后的优化建议

yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/order/AppTradeOrderController.java
@@ -140,7 +140,7 @@ public class AppTradeOrderController { @@ -140,7 +140,7 @@ public class AppTradeOrderController {
140 @Operation(summary = "确认交易订单收货") 140 @Operation(summary = "确认交易订单收货")
141 @Parameter(name = "id", description = "交易订单编号") 141 @Parameter(name = "id", description = "交易订单编号")
142 public CommonResult<Boolean> receiveOrder(@RequestParam("id") Long id) { 142 public CommonResult<Boolean> receiveOrder(@RequestParam("id") Long id) {
143 - tradeOrderUpdateService.receiveOrder(getLoginUserId(), id); 143 + tradeOrderUpdateService.receiveOrderByMember(getLoginUserId(), id);
144 return success(true); 144 return success(true);
145 } 145 }
146 146
@@ -148,7 +148,7 @@ public class AppTradeOrderController { @@ -148,7 +148,7 @@ public class AppTradeOrderController {
148 @Operation(summary = "取消交易订单") 148 @Operation(summary = "取消交易订单")
149 @Parameter(name = "id", description = "交易订单编号") 149 @Parameter(name = "id", description = "交易订单编号")
150 public CommonResult<Boolean> cancelOrder(@RequestParam("id") Long id) { 150 public CommonResult<Boolean> cancelOrder(@RequestParam("id") Long id) {
151 - tradeOrderUpdateService.cancelOrder(getLoginUserId(), id); 151 + tradeOrderUpdateService.cancelOrderByMember(getLoginUserId(), id);
152 return success(true); 152 return success(true);
153 } 153 }
154 154
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/job/order/TradeOrderAutoCancelJob.java
@@ -21,7 +21,7 @@ public class TradeOrderAutoCancelJob implements JobHandler { @@ -21,7 +21,7 @@ public class TradeOrderAutoCancelJob implements JobHandler {
21 21
22 @Override 22 @Override
23 public String execute(String param) { 23 public String execute(String param) {
24 - int count = tradeOrderUpdateService.autoCancelOrder(); 24 + int count = tradeOrderUpdateService.cancelOrderBySystem();
25 return String.format("过期订单 %s 个", count); 25 return String.format("过期订单 %s 个", count);
26 } 26 }
27 27
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/job/order/TradeOrderAutoReceiveJob.java
@@ -21,7 +21,7 @@ public class TradeOrderAutoReceiveJob implements JobHandler { @@ -21,7 +21,7 @@ public class TradeOrderAutoReceiveJob implements JobHandler {
21 21
22 @Override 22 @Override
23 public String execute(String param) { 23 public String execute(String param) {
24 - int count = tradeOrderUpdateService.autoReceiveOrder(); 24 + int count = tradeOrderUpdateService.receiveOrderBySystem();
25 return String.format("自动收货 %s 个", count); 25 return String.format("自动收货 %s 个", count);
26 } 26 }
27 27
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/order/TradeOrderUpdateService.java
@@ -60,14 +60,14 @@ public interface TradeOrderUpdateService { @@ -60,14 +60,14 @@ public interface TradeOrderUpdateService {
60 * @param userId 用户编号 60 * @param userId 用户编号
61 * @param id 订单编号 61 * @param id 订单编号
62 */ 62 */
63 - void receiveOrder(Long userId, Long id); 63 + void receiveOrderByMember(Long userId, Long id);
64 64
65 /** 65 /**
66 * 【系统】自动收货交易订单 66 * 【系统】自动收货交易订单
67 * 67 *
68 * @return 收货数量 68 * @return 收货数量
69 */ 69 */
70 - int autoReceiveOrder(); 70 + int receiveOrderBySystem();
71 71
72 /** 72 /**
73 * 【会员】取消交易订单 73 * 【会员】取消交易订单
@@ -75,14 +75,14 @@ public interface TradeOrderUpdateService { @@ -75,14 +75,14 @@ public interface TradeOrderUpdateService {
75 * @param userId 用户编号 75 * @param userId 用户编号
76 * @param id 订单编号 76 * @param id 订单编号
77 */ 77 */
78 - void cancelOrder(Long userId, Long id); 78 + void cancelOrderByMember(Long userId, Long id);
79 79
80 /** 80 /**
81 * 【系统】自动取消订单 81 * 【系统】自动取消订单
82 * 82 *
83 * @return 取消数量 83 * @return 取消数量
84 */ 84 */
85 - int autoCancelOrder(); 85 + int cancelOrderBySystem();
86 86
87 /** 87 /**
88 * 【会员】删除订单 88 * 【会员】删除订单
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/order/TradeOrderUpdateServiceImpl.java
@@ -488,7 +488,7 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService { @@ -488,7 +488,7 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
488 @Override 488 @Override
489 @Transactional(rollbackFor = Exception.class) 489 @Transactional(rollbackFor = Exception.class)
490 @TradeOrderLog(operateType = TradeOrderOperateTypeEnum.MEMBER_RECEIVE) 490 @TradeOrderLog(operateType = TradeOrderOperateTypeEnum.MEMBER_RECEIVE)
491 - public void receiveOrder(Long userId, Long id) { 491 + public void receiveOrderByMember(Long userId, Long id) {
492 // 校验并获得交易订单(可收货) 492 // 校验并获得交易订单(可收货)
493 TradeOrderDO order = validateOrderReceivable(userId, id); 493 TradeOrderDO order = validateOrderReceivable(userId, id);
494 494
@@ -497,7 +497,7 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService { @@ -497,7 +497,7 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
497 } 497 }
498 498
499 @Override 499 @Override
500 - public int autoReceiveOrder() { 500 + public int receiveOrderBySystem() {
501 // 1. 查询过期的待支付订单 501 // 1. 查询过期的待支付订单
502 LocalDateTime expireTime = addTime(tradeOrderProperties.getReceiveExpireTime()); 502 LocalDateTime expireTime = addTime(tradeOrderProperties.getReceiveExpireTime());
503 List<TradeOrderDO> orders = tradeOrderMapper.selectListByStatusAndDeliveryTimeLt( 503 List<TradeOrderDO> orders = tradeOrderMapper.selectListByStatusAndDeliveryTimeLt(
@@ -510,7 +510,7 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService { @@ -510,7 +510,7 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
510 int count = 0; 510 int count = 0;
511 for (TradeOrderDO order : orders) { 511 for (TradeOrderDO order : orders) {
512 try { 512 try {
513 - getSelf().autoReceiveOrder(order); 513 + getSelf().receiveOrderBySystem(order);
514 count ++; 514 count ++;
515 } catch (Throwable e) { 515 } catch (Throwable e) {
516 log.error("[autoReceiveOrder][order({}) 自动收货订单异常]", order.getId(), e); 516 log.error("[autoReceiveOrder][order({}) 自动收货订单异常]", order.getId(), e);
@@ -526,7 +526,7 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService { @@ -526,7 +526,7 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
526 */ 526 */
527 @Transactional(rollbackFor = Exception.class) 527 @Transactional(rollbackFor = Exception.class)
528 @TradeOrderLog(operateType = TradeOrderOperateTypeEnum.SYSTEM_RECEIVE) 528 @TradeOrderLog(operateType = TradeOrderOperateTypeEnum.SYSTEM_RECEIVE)
529 - public void autoReceiveOrder(TradeOrderDO order) { 529 + public void receiveOrderBySystem(TradeOrderDO order) {
530 receiveOrder0(order); 530 receiveOrder0(order);
531 } 531 }
532 532
@@ -572,7 +572,7 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService { @@ -572,7 +572,7 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
572 @Override 572 @Override
573 @Transactional(rollbackFor = Exception.class) 573 @Transactional(rollbackFor = Exception.class)
574 @TradeOrderLog(operateType = TradeOrderOperateTypeEnum.MEMBER_CANCEL) 574 @TradeOrderLog(operateType = TradeOrderOperateTypeEnum.MEMBER_CANCEL)
575 - public void cancelOrder(Long userId, Long id) { 575 + public void cancelOrderByMember(Long userId, Long id) {
576 // 1.1 校验存在 576 // 1.1 校验存在
577 TradeOrderDO order = tradeOrderMapper.selectOrderByIdAndUserId(id, userId); 577 TradeOrderDO order = tradeOrderMapper.selectOrderByIdAndUserId(id, userId);
578 if (order == null) { 578 if (order == null) {
@@ -588,7 +588,7 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService { @@ -588,7 +588,7 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
588 } 588 }
589 589
590 @Override 590 @Override
591 - public int autoCancelOrder() { 591 + public int cancelOrderBySystem() {
592 // 1. 查询过期的待支付订单 592 // 1. 查询过期的待支付订单
593 LocalDateTime expireTime = addTime(tradeOrderProperties.getPayExpireTime()); 593 LocalDateTime expireTime = addTime(tradeOrderProperties.getPayExpireTime());
594 List<TradeOrderDO> orders = tradeOrderMapper.selectListByStatusAndCreateTimeLt( 594 List<TradeOrderDO> orders = tradeOrderMapper.selectListByStatusAndCreateTimeLt(
@@ -601,7 +601,7 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService { @@ -601,7 +601,7 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
601 int count = 0; 601 int count = 0;
602 for (TradeOrderDO order : orders) { 602 for (TradeOrderDO order : orders) {
603 try { 603 try {
604 - getSelf().autoCancelOrder(order); 604 + getSelf().cancelOrderBySystem(order);
605 count ++; 605 count ++;
606 } catch (Throwable e) { 606 } catch (Throwable e) {
607 log.error("[autoCancelOrder][order({}) 过期订单异常]", order.getId(), e); 607 log.error("[autoCancelOrder][order({}) 过期订单异常]", order.getId(), e);
@@ -617,7 +617,7 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService { @@ -617,7 +617,7 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
617 */ 617 */
618 @Transactional(rollbackFor = Exception.class) 618 @Transactional(rollbackFor = Exception.class)
619 @TradeOrderLog(operateType = TradeOrderOperateTypeEnum.SYSTEM_CANCEL) 619 @TradeOrderLog(operateType = TradeOrderOperateTypeEnum.SYSTEM_CANCEL)
620 - public void autoCancelOrder(TradeOrderDO order) { 620 + public void cancelOrderBySystem(TradeOrderDO order) {
621 cancelOrder0(order, TradeOrderCancelTypeEnum.PAY_TIMEOUT); 621 cancelOrder0(order, TradeOrderCancelTypeEnum.PAY_TIMEOUT);
622 } 622 }
623 623
@@ -773,9 +773,11 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService { @@ -773,9 +773,11 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
773 773
774 // =================== Order Item =================== 774 // =================== Order Item ===================
775 775
  776 + // TODO 疯狂:帮我重构下:
  777 + // 1. updateOrderItemAfterSaleStatus 拆分成三个方法:发起;同意;拒绝。原因是,职责更清晰,操作日志也更容易记录;
  778 +
776 @Override 779 @Override
777 @Transactional(rollbackFor = Exception.class) 780 @Transactional(rollbackFor = Exception.class)
778 - // TODO 芋艿:  
779 public void updateOrderItemAfterSaleStatus(Long id, Integer oldAfterSaleStatus, Integer newAfterSaleStatus, 781 public void updateOrderItemAfterSaleStatus(Long id, Integer oldAfterSaleStatus, Integer newAfterSaleStatus,
780 Long afterSaleId, Integer refundPrice) { 782 Long afterSaleId, Integer refundPrice) {
781 // 如果退款成功,则 refundPrice 非空 783 // 如果退款成功,则 refundPrice 非空
@@ -803,6 +805,7 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService { @@ -803,6 +805,7 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
803 TradeOrderItemDO orderItem = tradeOrderItemMapper.selectById(id); 805 TradeOrderItemDO orderItem = tradeOrderItemMapper.selectById(id);
804 TradeOrderDO order = tradeOrderMapper.selectById(orderItem.getOrderId()); 806 TradeOrderDO order = tradeOrderMapper.selectById(orderItem.getOrderId());
805 Integer orderRefundPrice = order.getRefundPrice() + refundPrice; 807 Integer orderRefundPrice = order.getRefundPrice() + refundPrice;
  808 + // TODO @疯狂:809 到 817 改成:cancelOrderByAfterSale:相当于全部售后成功后,就是要取消胆子;
806 if (isAllOrderItemAfterSaleSuccess(order.getId())) { // 如果都售后成功,则需要取消订单 809 if (isAllOrderItemAfterSaleSuccess(order.getId())) { // 如果都售后成功,则需要取消订单
807 tradeOrderMapper.updateById(new TradeOrderDO().setId(order.getId()) 810 tradeOrderMapper.updateById(new TradeOrderDO().setId(order.getId())
808 .setRefundStatus(TradeOrderRefundStatusEnum.ALL.getStatus()).setRefundPrice(orderRefundPrice).setRefundPoint(order.getRefundPoint() + orderItem.getUsePoint()) 811 .setRefundStatus(TradeOrderRefundStatusEnum.ALL.getStatus()).setRefundPrice(orderRefundPrice).setRefundPoint(order.getRefundPoint() + orderItem.getUsePoint())
@@ -812,7 +815,6 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService { @@ -812,7 +815,6 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
812 815
813 // TODO 芋艿:要不要退优惠劵 816 // TODO 芋艿:要不要退优惠劵
814 817
815 - // TODO 芋艿:站内信?  
816 } else { // 如果部分售后,则更新退款金额 818 } else { // 如果部分售后,则更新退款金额
817 tradeOrderMapper.updateById(new TradeOrderDO().setId(order.getId()) 819 tradeOrderMapper.updateById(new TradeOrderDO().setId(order.getId())
818 .setRefundStatus(TradeOrderRefundStatusEnum.PART.getStatus()).setRefundPrice(orderRefundPrice)); 820 .setRefundStatus(TradeOrderRefundStatusEnum.PART.getStatus()).setRefundPrice(orderRefundPrice));
@@ -821,6 +823,7 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService { @@ -821,6 +823,7 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
821 // TODO 芋艿:这块扣减规则,需要在考虑下 823 // TODO 芋艿:这块扣减规则,需要在考虑下
822 // 售后成功后,执行数据回滚逻辑 824 // 售后成功后,执行数据回滚逻辑
823 if (Objects.equals(newAfterSaleStatus, TradeOrderItemAfterSaleStatusEnum.SUCCESS.getStatus())) { 825 if (Objects.equals(newAfterSaleStatus, TradeOrderItemAfterSaleStatusEnum.SUCCESS.getStatus())) {
  826 + // TODO @疯狂:这里库存也要扣减下;
824 // 扣减用户积分(赠送的) 827 // 扣减用户积分(赠送的)
825 reduceUserPoint(order.getUserId(), orderItem.getGivePoint(), MemberPointBizTypeEnum.AFTER_SALE_DEDUCT_GIVE, afterSaleId); 828 reduceUserPoint(order.getUserId(), orderItem.getGivePoint(), MemberPointBizTypeEnum.AFTER_SALE_DEDUCT_GIVE, afterSaleId);
826 // 增加用户积分(返还抵扣) 829 // 增加用户积分(返还抵扣)
@@ -880,6 +883,8 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService { @@ -880,6 +883,8 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
880 TradeOrderItemAfterSaleStatusEnum.SUCCESS.getStatus())); 883 TradeOrderItemAfterSaleStatusEnum.SUCCESS.getStatus()));
881 } 884 }
882 885
  886 + // =================== 营销相关的操作 ===================
  887 +
883 @Async 888 @Async
884 protected void addUserExperienceAsync(Long userId, Integer payPrice, Long orderId) { 889 protected void addUserExperienceAsync(Long userId, Integer payPrice, Long orderId) {
885 int bizType = MemberExperienceBizTypeEnum.ORDER.getType(); 890 int bizType = MemberExperienceBizTypeEnum.ORDER.getType();
yudao-module-mall/yudao-module-trade-biz/src/test/java/cn/iocoder/yudao/module/trade/service/order/TradeOrderUpdateServiceTest.java
@@ -306,7 +306,7 @@ public class TradeOrderUpdateServiceTest extends BaseDbUnitTest { @@ -306,7 +306,7 @@ public class TradeOrderUpdateServiceTest extends BaseDbUnitTest {
306 // mock 方法(支付单) 306 // mock 方法(支付单)
307 307
308 // 调用 308 // 调用
309 - tradeOrderUpdateService.receiveOrder(userId, id); 309 + tradeOrderUpdateService.receiveOrderByMember(userId, id);
310 // 断言 310 // 断言
311 TradeOrderDO dbOrder = tradeOrderMapper.selectById(1L); 311 TradeOrderDO dbOrder = tradeOrderMapper.selectById(1L);
312 assertEquals(dbOrder.getStatus(), TradeOrderStatusEnum.COMPLETED.getStatus()); 312 assertEquals(dbOrder.getStatus(), TradeOrderStatusEnum.COMPLETED.getStatus());