yeg
2026-09-12 d32e0dee609ab13220908ab28a11390bede07c84
talent-card-server/src/main/java/com/talentcard/server/business/payment/PaymentReconciliationService.java
@@ -1,7 +1,8 @@
package com.talentcard.server.business.payment;
import com.talentcard.server.business.DatabaseRows;
import com.talentcard.server.business.payment.HuifuPaymentPayload.TransStatus;
import com.talentcard.server.business.payment.huifu.HuifuPayload;
import com.talentcard.server.business.payment.huifu.HuifuPayload.TransStatus;
import com.talentcard.server.business.payment.PaymentSettlementService.ProviderPaymentFact;
import com.talentcard.server.business.payment.PaymentSettlementService.SettlementOutcome;
import com.talentcard.server.business.payment.huifu.HuifuMiniProgramPaymentGateway;
@@ -80,7 +81,7 @@
            if (result.success()) {
                // The query was made with the order's sub-merchant, so that number is the expected one.
                SettlementOutcome outcome = settlementService.settle(new ProviderPaymentFact(
                        paymentNo, HuifuPaymentPayload.firstNonBlank(result.huifuId(), huifuId), result.amountInCent(),
                        paymentNo, HuifuPayload.firstNonBlank(result.huifuId(), huifuId), result.amountInCent(),
                        result.providerNo(), result.code(), result.message(), "QUERY"));
                if (outcome.accepted()) {
                    issues.resolve("PAYMENT_PENDING_TIMEOUT", paymentNo, "system");
@@ -141,17 +142,17 @@
                                  String huifuId, Long amountInCent) {
        private static ProviderResult from(Map<String, Object> response) {
            Map<String, Object> data = response.get("data") instanceof Map<?, ?> map ? (Map<String, Object>) map : response;
            String status = HuifuPaymentPayload.value(data, "trans_stat", "transStat");
            String code = HuifuPaymentPayload.code(data);
            String message = HuifuPaymentPayload.message(data);
            String providerNo = HuifuPaymentPayload.value(data, "hf_seq_id", "hfSeqId");
            String huifuId = HuifuPaymentPayload.value(data, "huifu_id", "huifuId");
            TransStatus classification = HuifuPaymentPayload.status(status);
            boolean success = classification == TransStatus.SUCCESS && HuifuPaymentPayload.successCode(code);
            String status = HuifuPayload.value(data, "trans_stat", "transStat");
            String code = HuifuPayload.code(data);
            String message = HuifuPayload.message(data);
            String providerNo = HuifuPayload.value(data, "hf_seq_id", "hfSeqId");
            String huifuId = HuifuPayload.value(data, "huifu_id", "huifuId");
            TransStatus classification = HuifuPayload.status(status);
            boolean success = classification == TransStatus.SUCCESS && HuifuPayload.successCode(code);
            // An unknown or missing status means "cannot confirm yet", not "failed".
            boolean pending = classification == TransStatus.PENDING || classification == TransStatus.UNKNOWN;
            return new ProviderResult(success, !success && !pending, status, code, message, providerNo, huifuId,
                    HuifuPaymentPayload.amountInCent(HuifuPaymentPayload.value(data, "trans_amt", "transAmt")));
                    HuifuPayload.amountInCent(HuifuPayload.value(data, "trans_amt", "transAmt")));
        }
    }
}