From e3f412c5474311a471345ea508db4875c9ec648e Mon Sep 17 00:00:00 2001
From: yeg <1347747024@qq.com>
Date: 星期四, 17 九月 2026 15:47:59 +0800
Subject: [PATCH] feat(payment): 支付按支付尝试收敛,取消与放弃以关单回执为准

---
 talent-card-server/src/main/java/com/talentcard/server/business/payment/PaymentSettlementService.java |    5 ++++-
 1 files changed, 4 insertions(+), 1 deletions(-)

diff --git a/talent-card-server/src/main/java/com/talentcard/server/business/payment/PaymentSettlementService.java b/talent-card-server/src/main/java/com/talentcard/server/business/payment/PaymentSettlementService.java
index b9ecbb8..0bbbd06 100644
--- a/talent-card-server/src/main/java/com/talentcard/server/business/payment/PaymentSettlementService.java
+++ b/talent-card-server/src/main/java/com/talentcard/server/business/payment/PaymentSettlementService.java
@@ -96,11 +96,14 @@
         }
 
         if (!alreadySucceeded) {
+            // CANCEL_UNCONFIRMED 也在这里:订单取消后用户又把预支付单付了,钱必须落成已支付的事实,
+            // 再让下面的订单状态判断把它记成「取消后才收到钱」的问题记录。CLOSING(关单中)同理:
+            // 它只说明我们发出过关单请求,通道完全可能已经把钱收下了。
             int paymentUpdated = jdbc.update("""
                     update payment_transaction
                     set status = 'SUCCEEDED', provider_transaction_no = coalesce(nullif(?, ''), provider_transaction_no),
                         provider_response_code = ?, provider_response_message = ?, paid_at = coalesce(paid_at, now())
-                    where id = ? and status in ('CREATED', 'CREATE_FAILED', 'PREPAY_CREATED', 'CREATE_UNKNOWN')
+                    where id = ? and status in ('CREATED', 'CREATE_FAILED', 'PREPAY_CREATED', 'CREATE_UNKNOWN', 'CANCEL_UNCONFIRMED', 'CLOSING')
                     """, fact.providerTransactionNo(), fact.responseCode(), fact.responseMessage(), paymentId);
             if (paymentUpdated == 0) return SettlementOutcome.NOT_SETTLEABLE;
         }

--
Gitblit v1.7.1