From 0d14c6214ef7afc4be02723326229a48b3b7d64f Mon Sep 17 00:00:00 2001
From: yeg <1347747024@qq.com>
Date: 星期四, 17 九月 2026 13:02:05 +0800
Subject: [PATCH] refactor(merchant): 自查接口补冷却剩余秒数,refreshed 改为单点返回

---
 talent-card-server/src/main/java/com/talentcard/server/business/merchant/MerchantOnboardingProgressService.java |   16 +++++++++-------
 1 files changed, 9 insertions(+), 7 deletions(-)

diff --git a/talent-card-server/src/main/java/com/talentcard/server/business/merchant/MerchantOnboardingProgressService.java b/talent-card-server/src/main/java/com/talentcard/server/business/merchant/MerchantOnboardingProgressService.java
index b00c6e0..6fa75a4 100644
--- a/talent-card-server/src/main/java/com/talentcard/server/business/merchant/MerchantOnboardingProgressService.java
+++ b/talent-card-server/src/main/java/com/talentcard/server/business/merchant/MerchantOnboardingProgressService.java
@@ -68,8 +68,9 @@
                     if (capabilities.containsKey("mer_stat")) {
                         stages.put("merchantNormal", "NORMAL".equals(text(capabilities.get("mer_stat"))));
                         // 原始值一起存下来,只是为了在完成判定里说清「状态异常(CLOSED)」这种话。
-                        // 它不属于六项阶段,不会进 stages 列表。
-                        stages.put("merchantStatus", text(capabilities.get("mer_stat")));
+                        // 与 realnameQr 一样,它是对应布尔项的**证据**,不是第七个阶段:stages 列表由
+                        // LABELS 生成,非 LABELS 的键不会进列表,完成判定也只认 LABELS 的六个键。
+                        stages.put("merchantStat", text(capabilities.get("mer_stat")));
                     }
                     if ("S".equals(text(response.get("bind_card_status"))) && capabilities.containsKey("qry_cash_card_info_list") && capabilities.containsKey("qry_settle_config_list")) {
                         stages.put("bank", confirmOriginalCard(application,capabilities,owner));
@@ -275,7 +276,8 @@
      * 其余六项必须是字符串 {@code "confirmed"},加进去会让进件永远无法 approved。
      */
     private static List<Map<String,Object>> completionChecks(Map<String,Object> stages, Map<String,Object> application) {
-        String merchantStatus = text(stages.get("merchantStatus"));
+        // 证据优先取刷新那一刻存下来的通道原值;老记录里没有这个键时回落到申请行上的快照列。
+        String merchantStatus = text(stages.get("merchantStat"));
         if (merchantStatus.isBlank()) merchantStatus = text(application.get("merchantStat"));
         List<Map<String,Object>> checks=new ArrayList<>();
         checks.add(completionCheck("bank","结算银行卡核实",stages.get("bank"),
@@ -303,10 +305,10 @@
     private static String incompleteReason(List<Map<String,Object>> progress, List<Map<String,Object>> checks) {
         boolean stagesAllConfirmed = progress.stream().allMatch(stage -> "confirmed".equals(stage.get("status")));
         if (!stagesAllConfirmed) return "请刷新进度核实各项能力,并按待办理项补齐缺失能力";
-        String failed = checks.stream().filter(check -> !"confirmed".equals(check.get("status")))
-                .map(check -> String.valueOf(check.get("label"))).collect(java.util.stream.Collectors.joining("、"));
-        return failed.isBlank() ? "请刷新进度核实各项能力,并按待办理项补齐缺失能力"
-                : "进件阶段已全部确认,但" + failed + "未通过核实,见下方核实结果";
+        List<String> failed = checks.stream().filter(check -> !"confirmed".equals(check.get("status")))
+                .map(check -> String.valueOf(check.get("label"))).toList();
+        return failed.isEmpty() ? "请刷新进度核实各项能力,并按待办理项补齐缺失能力"
+                : "进件阶段已全部确认,但" + String.join("、", failed) + "未通过核实,见下方核实结果";
     }
 
     /** Called only after the existing HTTP callback boundary has verified Huifu's signature. */

--
Gitblit v1.7.1