From 34981c30a78e8bbd7791131059a9210f9928b62c Mon Sep 17 00:00:00 2001
From: 刘光辉 <347230014@qq.com>
Date: 星期四, 17 九月 2026 09:24:09 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master' into master

---
 jnpf-biz-common/jnpf-biz-common-audit/src/test/java/jnpf/bizcommon/audit/service/sign/AuditSignFieldProbe.java |  136 +++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 136 insertions(+), 0 deletions(-)

diff --git a/jnpf-biz-common/jnpf-biz-common-audit/src/test/java/jnpf/bizcommon/audit/service/sign/AuditSignFieldProbe.java b/jnpf-biz-common/jnpf-biz-common-audit/src/test/java/jnpf/bizcommon/audit/service/sign/AuditSignFieldProbe.java
new file mode 100644
index 0000000..b8a3360
--- /dev/null
+++ b/jnpf-biz-common/jnpf-biz-common-audit/src/test/java/jnpf/bizcommon/audit/service/sign/AuditSignFieldProbe.java
@@ -0,0 +1,136 @@
+package jnpf.bizcommon.audit.service.sign;
+
+import jnpf.bizcommon.audit.service.title.AuditTitleSpec;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 绛惧悕瀛楁鍊欓�夋寫閫夌殑绾� JVM 鏂█銆�
+ *
+ * <p><b>鍒ゅ畾瑙勫垯涓轰粈涔堥暱杩欐牱</b>锛歿@code biz_log_enabled} 鍦ㄣ�屾搷浣滆褰曟爣棰樸�嶈澧冮噷鏄�
+ * "杩欎釜瀛楁杩涙爣棰�"锛屽湪銆屽绛惧悕銆嶈澧冮噷鏄�"杩欐槸绛惧悕瀛楁"鈥斺�斿悓涓�涓紑鍏充袱绉嶈涔夛紝
+ * 鍏夌湅寮�鍏冲垎涓嶅嚭鏉ャ�備簬鏄垽瀹氭媶鎴愪笁灞傦細
+ * <ol>
+ *   <li>{@code biz_sign} 鍙婂懡鍚嶈鍒欏懡涓� {@code isCredentialReference} 鐨勫瓧娈碉細<b>鎭�</b>涓虹鍚嶅瓧娈碉紝
+ *       涓嶉渶瑕佸嬀锛堣繖鎵瑰瓧娈垫湰灏卞凡琚己鍒惰劚鏁忥級锛�</li>
+ *   <li>鍏朵綑鍕鹃�夊瓧娈碉細鍊兼嬁鍘绘煡绛惧悕琛紝<b>鍛戒腑鐨�</b>褰撶鍚嶅瓧娈碉紱</li>
+ *   <li>娌″懡涓殑褰撴爣棰樺瓧娈点��</li>
+ * </ol>
+ * 鏈帰閽堝彧瑕嗙洊绗� 1銆�2 灞傜殑<b>鍊欓�夋寫閫�</b>锛堢函閫昏緫锛夛紱"鏌ヨ〃鍛戒腑"閭d竴璺抽渶瑕� DB锛屾斁绔埌绔��
+ *
+ * <p>runner锛歿@code tasks/audit-sign-field-checks.sh}
+ */
+public final class AuditSignFieldProbe {
+
+    private static int pass;
+    private static int fail;
+
+    public static void main(String[] args) {
+        credentialNamesAreAlwaysCandidates();
+        enabledFieldsAreCandidates();
+        emptyValuesAreNotCandidates();
+        unmarkedNonCredentialFieldsAreNotCandidates();
+        candidatesAreDeduplicatedAndStable();
+        configuredFieldsTakePriority();
+        System.out.println("=== 绛惧悕瀛楁鍊欓�夋柇瑷�锛�" + pass + " 閫氳繃 / " + fail + " 澶辫触 ===");
+        if (fail > 0) {
+            System.exit(1);
+        }
+    }
+
+    /** S1 biz_sign 鎭掍负鍊欓�夛紝鍝�曡〃鍗曚竴涓瓧娈甸兘娌″嬀銆� */
+    private static void credentialNamesAreAlwaysCandidates() {
+        Map<String, Object> row = row("biz_sign", "852000000000000001");
+        List<String> c = AuditSignEvidenceReader.candidateFields(
+                row, AuditTitleSpec.EMPTY, Collections.<String>emptyList());
+        check("S1 biz_sign 鎭掍负鍊欓��", c.contains("biz_sign"), "瀹為檯 " + c);
+
+        Map<String, Object> row2 = row("fuhe_sign", "852000000000000002");
+        List<String> c2 = AuditSignEvidenceReader.candidateFields(
+                row2, AuditTitleSpec.EMPTY, Collections.<String>emptyList());
+        check("S1 *_sign 鍛藉悕瑙勫垯鍛戒腑", c2.contains("fuhe_sign"), "瀹為檯 " + c2);
+    }
+
+    /** S2 鍕鹃�夊瓧娈佃繘鍊欓�夛紙鏄笉鏄鍚嶇敱鏌ヨ〃瀹氾紝涓嶇敱鏈柟娉曞畾锛夈�� */
+    private static void enabledFieldsAreCandidates() {
+        Map<String, Object> row = row("pizhun_ren", "852000000000000003");
+        AuditTitleSpec spec = new AuditTitleSpec(
+                Arrays.asList("pizhun_ren"), Collections.<AuditTitleSpec.SubTableSpec>emptyList());
+        List<String> c = AuditSignEvidenceReader.candidateFields(row, spec, Collections.<String>emptyList());
+        check("S2 鍕鹃�夊瓧娈佃繘鍊欓��", c.contains("pizhun_ren"), "瀹為檯 " + c);
+    }
+
+    /** S3 鍊间负绌虹殑涓嶈繘鍊欓�夆�斺�旂┖鍊兼煡绛惧悕琛ㄧ函灞炴氮璐癸紝杩樹細鎶婄┖涓插綋 IN 鍙傛暟銆� */
+    private static void emptyValuesAreNotCandidates() {
+        Map<String, Object> row = new LinkedHashMap<String, Object>();
+        row.put("biz_sign", "");
+        row.put("fuhe_sign", null);
+        row.put("pizhun_ren", "   ");
+        AuditTitleSpec spec = new AuditTitleSpec(
+                Arrays.asList("pizhun_ren"), Collections.<AuditTitleSpec.SubTableSpec>emptyList());
+        List<String> c = AuditSignEvidenceReader.candidateFields(row, spec, Collections.<String>emptyList());
+        check("S3 绌哄�间笉杩涘�欓��", c.isEmpty(), "瀹為檯 " + c);
+    }
+
+    /** S4 鏃㈡病鍕俱�佸悕瀛椾篃涓嶅儚绛惧悕鐨勫瓧娈典笉杩涘�欓�夆�斺�斿惁鍒欐瘡娆′繚瀛橀兘瑕佹嬁涓�鍫嗕笟鍔″�煎幓鎾炵鍚嶈〃銆� */
+    private static void unmarkedNonCredentialFieldsAreNotCandidates() {
+        Map<String, Object> row = row("chanpin_mingcheng", "闈掑博涓�");
+        List<String> c = AuditSignEvidenceReader.candidateFields(
+                row, AuditTitleSpec.EMPTY, Collections.<String>emptyList());
+        check("S4 鏈嬀閫夌殑鏅�氬瓧娈典笉杩涘�欓��", c.isEmpty(), "瀹為檯 " + c);
+    }
+
+    /** S5 鍚屼竴瀛楁涓ゆ潯璺緞閮藉懡涓椂鍙嚭鐜颁竴娆★紝涓旈『搴忕ǔ瀹氾紙骞傜瓑閿闈犲畠绋冲畾锛夈�� */
+    private static void candidatesAreDeduplicatedAndStable() {
+        Map<String, Object> row = new LinkedHashMap<String, Object>();
+        row.put("biz_sign", "852000000000000001");
+        row.put("pizhun_ren", "852000000000000003");
+        AuditTitleSpec spec = new AuditTitleSpec(
+                Arrays.asList("biz_sign", "pizhun_ren"),
+                Collections.<AuditTitleSpec.SubTableSpec>emptyList());
+        List<String> a = AuditSignEvidenceReader.candidateFields(row, spec, Collections.<String>emptyList());
+        List<String> b = AuditSignEvidenceReader.candidateFields(row, spec, Collections.<String>emptyList());
+        check("S5 鍘婚噸", a.size() == 2, "瀹為檯 " + a);
+        check("S5 椤哄簭绋冲畾", a.equals(b), a + " vs " + b);
+    }
+
+    /**
+     * S6锛堣瘎瀹′慨澶嶈疆娆� 1锛孌4锛夛細閰嶇疆鏉ユ簮蹇呴』鎺掑湪鍊欓�夐泦鍚堟渶鍓嶉潰鈥斺�旇繖鏄湰浠诲姟锛圖4锛夋柊鍔犵殑琛屼负锛�
+     * 鍓� 5 鏉℃柇瑷�閮芥槸鏀瑰姩鍓嶅氨鏈夌殑鏃ц鐩栵紝鍏ㄤ紶绌� {@code configuredFields}锛屾祴涓嶅埌杩欐潯銆�
+     *
+     * <p>row 閲屾晠鎰忓厛鏀句竴涓懡鍚嶈鍒欏懡涓殑瀛楁锛坽@code fuhe_sign}锛夛紝鑻ユ病鏈夐厤缃潵婧愬畠鏈簲鎺掓渶鍓嶏紱
+     * 鍐嶆斁涓�涓彧闈犻厤缃潵婧愭墠杩涘�欓�夌殑瀛楁锛坽@code pizhun_ren}锛屼笉鍛戒腑鍛藉悕瑙勫垯銆佹湭鍕鹃�夛級銆�
+     * 鏂█ {@code get(0)} 鏄厤缃瓧娈碉紝鐩存帴鎵ц楠岃瘉浼樺厛绾э紝鑰屼笉鏄儚
+     * {@code tasks/audit-delete-coverage-checks.sh} 閭f牱鍙湅婧愮爜鏂囨湰褰㈢姸鈥斺��
+     * 瀹瑰櫒鎹㈡垚鏃犲簭 Set 杩欑被"鏂囨湰杩樺湪銆佽涓哄凡鍙�"鐨勫洖褰掞紝婧愮爜绾ф柇瑷�鏈繀鑳界ǔ瀹氭姄浣忥紝闈犺繖鏉″厹搴曘��
+     */
+    private static void configuredFieldsTakePriority() {
+        Map<String, Object> row = new LinkedHashMap<String, Object>();
+        row.put("fuhe_sign", "852000000000000010");
+        row.put("pizhun_ren", "852000000000000011");
+        List<String> configured = Arrays.asList("pizhun_ren");
+        List<String> c = AuditSignEvidenceReader.candidateFields(row, AuditTitleSpec.EMPTY, configured);
+        check("S6 閰嶇疆鏉ユ簮鎺掑湪鍊欓�夋渶鍓�", !c.isEmpty() && "pizhun_ren".equals(c.get(0)), "瀹為檯 " + c);
+        check("S6 鍛藉悕瑙勫垯鍛戒腑鐨勫瓧娈典粛鍦ㄥ�欓�夐噷锛堝厹搴曟湭澶辨晥锛�", c.contains("fuhe_sign"), "瀹為檯 " + c);
+    }
+
+    private static Map<String, Object> row(String field, Object value) {
+        Map<String, Object> row = new LinkedHashMap<String, Object>();
+        row.put(field, value);
+        return row;
+    }
+
+    private static void check(String name, boolean ok, String detail) {
+        if (ok) {
+            pass++;
+            System.out.println("  鉁� " + name);
+        } else {
+            fail++;
+            System.out.println("  鉂� " + name + " 鈥斺�� " + detail);
+        }
+    }
+}

--
Gitblit v1.8.0