Commit 3395a3d86bd4e3795b4fbcc48bad2ef6bf744d0f

Authored by YunaiV
1 parent 03e510ad

feat:【MALL】商城订单取消时,额外校验支付单的状态,进一步兜底回调情况

yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/order/TradeOrderUpdateServiceImpl.java
@@ -545,6 +545,14 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService { @@ -545,6 +545,14 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
545 if (ObjectUtil.notEqual(order.getStatus(), TradeOrderStatusEnum.UNPAID.getStatus())) { 545 if (ObjectUtil.notEqual(order.getStatus(), TradeOrderStatusEnum.UNPAID.getStatus())) {
546 throw exception(ORDER_CANCEL_FAIL_STATUS_NOT_UNPAID); 546 throw exception(ORDER_CANCEL_FAIL_STATUS_NOT_UNPAID);
547 } 547 }
  548 + // 1.3 校验是否支持延迟(不允许取消)
  549 + if (TradeOrderStatusEnum.isUnpaid(order.getStatus())) {
  550 + PayOrderRespDTO payOrder = payOrderApi.getOrder(order.getPayOrderId());
  551 + if (payOrder != null && PayOrderStatusEnum.isSuccess(payOrder.getStatus())) {
  552 + log.warn("[cancelOrderByMember][order({}) 支付单已支付(支付回调延迟),不支持取消]", order.getId());
  553 + throw exception(ORDER_CANCEL_FAIL_STATUS_NOT_UNPAID);
  554 + }
  555 + }
548 556
549 // 2. 取消订单 557 // 2. 取消订单
550 cancelOrder0(order, TradeOrderCancelTypeEnum.MEMBER_CANCEL); 558 cancelOrder0(order, TradeOrderCancelTypeEnum.MEMBER_CANCEL);
@@ -581,6 +589,15 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService { @@ -581,6 +589,15 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
581 @Transactional(rollbackFor = Exception.class) 589 @Transactional(rollbackFor = Exception.class)
582 @TradeOrderLog(operateType = TradeOrderOperateTypeEnum.SYSTEM_CANCEL) 590 @TradeOrderLog(operateType = TradeOrderOperateTypeEnum.SYSTEM_CANCEL)
583 public void cancelOrderBySystem(TradeOrderDO order) { 591 public void cancelOrderBySystem(TradeOrderDO order) {
  592 + // 校验是否支持延迟(不允许取消)
  593 + if (TradeOrderStatusEnum.isUnpaid(order.getStatus())) {
  594 + PayOrderRespDTO payOrder = payOrderApi.getOrder(order.getPayOrderId());
  595 + if (payOrder != null && PayOrderStatusEnum.isSuccess(payOrder.getStatus())) {
  596 + log.warn("[cancelOrderBySystem][order({}) 支付单已支付(支付回调延迟),不支持取消]", order.getId());
  597 + return;
  598 + }
  599 + }
  600 +
584 cancelOrder0(order, TradeOrderCancelTypeEnum.PAY_TIMEOUT); 601 cancelOrder0(order, TradeOrderCancelTypeEnum.PAY_TIMEOUT);
585 } 602 }
586 603
@@ -895,12 +912,11 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService { @@ -895,12 +912,11 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
895 if (order == null) { 912 if (order == null) {
896 throw exception(ORDER_NOT_FOUND); 913 throw exception(ORDER_NOT_FOUND);
897 } 914 }
898 -  
899 // 1.3 校验订单是否支付 915 // 1.3 校验订单是否支付
900 if (!order.getPayStatus()) { 916 if (!order.getPayStatus()) {
901 throw exception(ORDER_CANCEL_PAID_FAIL, "已支付"); 917 throw exception(ORDER_CANCEL_PAID_FAIL, "已支付");
902 } 918 }
903 - // 1.3 校验订单是否未退款 919 + // 1.4 校验订单是否未退款
904 if (ObjUtil.notEqual(TradeOrderRefundStatusEnum.NONE.getStatus(), order.getRefundStatus())) { 920 if (ObjUtil.notEqual(TradeOrderRefundStatusEnum.NONE.getStatus(), order.getRefundStatus())) {
905 throw exception(ORDER_CANCEL_PAID_FAIL, "未退款"); 921 throw exception(ORDER_CANCEL_PAID_FAIL, "未退款");
906 } 922 }