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 545 if (ObjectUtil.notEqual(order.getStatus(), TradeOrderStatusEnum.UNPAID.getStatus())) {
546 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 557 // 2. 取消订单
550 558 cancelOrder0(order, TradeOrderCancelTypeEnum.MEMBER_CANCEL);
... ... @@ -581,6 +589,15 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
581 589 @Transactional(rollbackFor = Exception.class)
582 590 @TradeOrderLog(operateType = TradeOrderOperateTypeEnum.SYSTEM_CANCEL)
583 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 601 cancelOrder0(order, TradeOrderCancelTypeEnum.PAY_TIMEOUT);
585 602 }
586 603  
... ... @@ -895,12 +912,11 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
895 912 if (order == null) {
896 913 throw exception(ORDER_NOT_FOUND);
897 914 }
898   -
899 915 // 1.3 校验订单是否支付
900 916 if (!order.getPayStatus()) {
901 917 throw exception(ORDER_CANCEL_PAID_FAIL, "已支付");
902 918 }
903   - // 1.3 校验订单是否未退款
  919 + // 1.4 校验订单是否未退款
904 920 if (ObjUtil.notEqual(TradeOrderRefundStatusEnum.NONE.getStatus(), order.getRefundStatus())) {
905 921 throw exception(ORDER_CANCEL_PAID_FAIL, "未退款");
906 922 }
... ...