From 8e503e2e7a28d8aaaa59b47023aad732f97105dd Mon Sep 17 00:00:00 2001
From: yeg <1347747024@qq.com>
Date: 星期五, 18 九月 2026 12:56:22 +0800
Subject: [PATCH] feat(settlement): 结算记录只查通道侧收款能力正常的商户,并支持按商家/电话/类型/状态筛选

---
 talent-card-server/src/main/java/com/talentcard/server/business/merchant/MerchantPaymentReadinessService.java |   19 +++++++++++++++++++
 1 files changed, 19 insertions(+), 0 deletions(-)

diff --git a/talent-card-server/src/main/java/com/talentcard/server/business/merchant/MerchantPaymentReadinessService.java b/talent-card-server/src/main/java/com/talentcard/server/business/merchant/MerchantPaymentReadinessService.java
index b6dcd8a..e65dba8 100644
--- a/talent-card-server/src/main/java/com/talentcard/server/business/merchant/MerchantPaymentReadinessService.java
+++ b/talent-card-server/src/main/java/com/talentcard/server/business/merchant/MerchantPaymentReadinessService.java
@@ -80,6 +80,25 @@
     }
 
     /**
+     * 通道侧收款能力是否已核实且正常:快照核实过、子商户状态正常、取现可用。
+     *
+     * <p>它只回答「通道那边这家商户开通正常吗」,不含 {@link #readiness(Long, Long)} 额外要求的
+     * 微信/实名与绑卡前置(那一条才回答「现在能不能收款」)。只读的监控页面用它决定「该不该去问
+     * 通道」:通道侧没开通或被关停的商户问过去也会被拒(实测被关闭的子商户回「客户与产品关系已关闭」),
+     * 而本地缺进度记录、通道侧却正常且在结算的存量商户不该因此被摘出监控。
+     */
+    @Transactional(readOnly = true)
+    public boolean channelCapabilityNormal(Long applicationId) {
+        List<Map<String, Object>> rows = rows("select * from merchant_onboarding_application where id = ? limit 1", applicationId);
+        if (rows.isEmpty()) return false;
+        Application application = application(rows.get(0));
+        if (!"approved".equals(application.status()) || application.huifuId().isBlank()) return false;
+        // 快照没核实过就不算正常:那意味着「通道侧到底是什么状态」还没有答案。
+        if (clean(application.capabilityVerifiedAt()).isBlank()) return false;
+        return isMerchantNormal(application.merchantStatus()) && isCashAvailable(application.cashSwitchStatus());
+    }
+
+    /**
      * Returns the collecting sub-merchant an order must be bound to, or throws with the first unmet
      * precondition. Callers persist the returned application, store and Huifu id on the order so the
      * payment request cannot drift to another sub-merchant later.

--
Gitblit v1.7.1