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/AuditSignMetaDataProbe.java |  138 ++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 138 insertions(+), 0 deletions(-)

diff --git a/jnpf-biz-common/jnpf-biz-common-audit/src/test/java/jnpf/bizcommon/audit/service/sign/AuditSignMetaDataProbe.java b/jnpf-biz-common/jnpf-biz-common-audit/src/test/java/jnpf/bizcommon/audit/service/sign/AuditSignMetaDataProbe.java
new file mode 100644
index 0000000..f5c01f6
--- /dev/null
+++ b/jnpf-biz-common/jnpf-biz-common-audit/src/test/java/jnpf/bizcommon/audit/service/sign/AuditSignMetaDataProbe.java
@@ -0,0 +1,138 @@
+package jnpf.bizcommon.audit.service.sign;
+
+/**
+ * {@link AuditSignMetaData#parse} 鐨勭函 JVM 鏂█鈥斺�旇鐩栫湡瀹炵敓浜ф牱鏈� + 闄嶇骇璺緞銆�
+ *
+ * <p>楠ㄦ灦涓� {@link AuditSignFieldProbe} 鍚屾棌锛坢vn -o + javac + 鐩磋皟 main锛夈��
+ * 鍥涙潯鐪熷疄鏍锋湰鍙栬嚜 {@code lims_sign.meta_data}锛�2026-08-01 鍙鏌ヨ锛屽瓧娈甸『搴忋�佸�煎潎鍘熸牱淇濈暀锛�
+ * 鏈仛浠讳綍绠�鍖栤�斺�攍ine-by-line 涓庡簱閲屽疄闄呭瓨鐨� JSON 涓�鑷达紝瑙� task-6-report.md 鐨勮涓洪獙璇佺珷鑺傦級銆�
+ *
+ * <p>runner锛歿@code tasks/audit-sign-field-checks.sh}
+ */
+public final class AuditSignMetaDataProbe {
+
+    private static int pass;
+    private static int fail;
+
+    /** f_id=853033878464640709锛屽鏍稿姩浣滐紝is_review_button=true銆� */
+    private static final String SAMPLE_REVIEW_1 =
+            "{\"is_review_button\":true,\"biz_button\":\"澶嶆牳\",\"biz_data\":[{\"id\":\"852927614623561029\","
+            + "\"flowId\":\"\",\"bian_hao\":\"1\",\"beizhu\":\"111\",\"tijiao_ren\":\"349057407209541\","
+            + "\"fuhe_ren\":\"817410893825462789\",\"biz_sign\":\"853023946319214277\","
+            + "\"fuhe_sign\":\"852927419957524037\"}],\"biz_form_id\":\"852852941198079301\","
+            + "\"biz_module\":\"\",\"biz_title\":\"\",\"is_biz_form\":true}";
+
+    /** f_id=853030727456011973锛屽悓涓�寮犲崟瀛愮殑绗簩娆″鏍告彁浜わ紝褰㈡�佷笌涓婁竴鏉′竴鑷淬�� */
+    private static final String SAMPLE_REVIEW_2 =
+            "{\"is_review_button\":true,\"biz_button\":\"澶嶆牳\",\"biz_data\":[{\"id\":\"852927614623561029\","
+            + "\"flowId\":\"\",\"bian_hao\":\"1\",\"beizhu\":\"111\",\"tijiao_ren\":\"349057407209541\","
+            + "\"fuhe_ren\":\"817410893825462789\",\"biz_sign\":\"853023946319214277\","
+            + "\"fuhe_sign\":\"852927419957524037\"}],\"biz_form_id\":\"852852941198079301\","
+            + "\"biz_module\":\"\",\"biz_title\":\"\",\"is_biz_form\":true}";
+
+    /** f_id=853027186830096069锛屾壒閲忔寜閽�侀潪澶嶆牳锛宐iz_data 鏄垪琛ㄨ蹇収锛堝涓� *_jnpfId 褰卞瓙瀛楁锛夈�� */
+    private static final String SAMPLE_BATCH_BUTTON =
+            "{\"is_review_button\":false,\"biz_button\":\"鎵归噺鎸夐挳\",\"biz_data\":[{\"bian_hao_jnpfId\":\"1\","
+            + "\"flowTaskId\":\"852927614623561029\",\"tijiao_ren_jnpfId\":\"349057407209541\","
+            + "\"beizhu_jnpfId\":\"111\",\"biz_sign_jnpfId\":null,\"biz_sign\":null,\"bian_hao\":\"1\","
+            + "\"f_flow_task_id\":\"852927614623561029\",\"tijiao_ren\":\"绠$悊鍛�/admin\","
+            + "\"fuhe_ren\":\"wuyong/wuyong\",\"fuhe_ren_jnpfId\":\"817410893825462789\",\"fuhe_sign\":null,"
+            + "\"fuhe_sign_jnpfId\":null,\"f_version\":2,\"beizhu\":\"111\",\"f_id\":\"852927614623561029\","
+            + "\"id\":\"852927614623561029\",\"_id\":null,\"f_flow_id\":null,\"flowId\":null}],"
+            + "\"biz_form_id\":\"852852941198079301\",\"biz_module\":\"\",\"biz_title\":\"\","
+            + "\"is_biz_form\":false}";
+
+    /** f_id=853026858244126405锛屽垪琛ㄦ寜閽�侀潪澶嶆牳鈥斺�斾笌鎵归噺鎸夐挳鏍锋湰浠� biz_button 涓嶅悓锛屽叾浣欏悓鏋勩�� */
+    private static final String SAMPLE_LIST_BUTTON =
+            "{\"is_review_button\":false,\"biz_button\":\"鍒楄〃鎸夐挳\",\"biz_data\":[{\"bian_hao_jnpfId\":\"1\","
+            + "\"flowTaskId\":\"852927614623561029\",\"tijiao_ren_jnpfId\":\"349057407209541\","
+            + "\"beizhu_jnpfId\":\"111\",\"biz_sign_jnpfId\":null,\"biz_sign\":null,\"bian_hao\":\"1\","
+            + "\"f_flow_task_id\":\"852927614623561029\",\"tijiao_ren\":\"绠$悊鍛�/admin\","
+            + "\"fuhe_ren\":\"wuyong/wuyong\",\"fuhe_ren_jnpfId\":\"817410893825462789\",\"fuhe_sign\":null,"
+            + "\"fuhe_sign_jnpfId\":null,\"f_version\":2,\"beizhu\":\"111\",\"f_id\":\"852927614623561029\","
+            + "\"id\":\"852927614623561029\",\"_id\":null,\"f_flow_id\":null,\"flowId\":null}],"
+            + "\"biz_form_id\":\"852852941198079301\",\"biz_module\":\"\",\"biz_title\":\"\","
+            + "\"is_biz_form\":false}";
+
+    public static void main(String[] args) {
+        realReviewSamplesParseCorrectly();
+        realNonReviewSamplesParseCorrectly();
+        nullAndBlankReturnEmpty();
+        malformedJsonNeverThrows();
+        missingKeysDegradeGracefully();
+        blankBizButtonTreatedAsAbsent();
+        System.out.println("=== meta_data 鍔ㄤ綔璇箟鏂█锛�" + pass + " 閫氳繃 / " + fail + " 澶辫触 ===");
+        if (fail > 0) {
+            System.exit(1);
+        }
+    }
+
+    /** M1 鐪熷疄澶嶆牳鏍锋湰锛歜iz_button="澶嶆牳"銆乮s_review_button=true銆乺awBizData 闈炵┖銆� */
+    private static void realReviewSamplesParseCorrectly() {
+        for (String json : new String[] {SAMPLE_REVIEW_1, SAMPLE_REVIEW_2}) {
+            AuditSignMetaData md = AuditSignMetaData.parse(json);
+            check("M1 澶嶆牳鏍锋湰 biz_button=澶嶆牳", "澶嶆牳".equals(md.bizButton()), "瀹為檯 " + md.bizButton());
+            check("M1 澶嶆牳鏍锋湰 isReviewButton=true", md.isReviewButton(), "瀹為檯 " + md.isReviewButton());
+            check("M1 澶嶆牳鏍锋湰 rawBizData 闈炵┖", md.rawBizData() != null, "瀹為檯 null");
+        }
+    }
+
+    /** M2 鐪熷疄闈炲鏍告牱鏈紙鎵归噺鎸夐挳/鍒楄〃鎸夐挳锛夛細is_review_button=false锛屾寜閽悕鍚勮嚜閫忎紶銆� */
+    private static void realNonReviewSamplesParseCorrectly() {
+        AuditSignMetaData batch = AuditSignMetaData.parse(SAMPLE_BATCH_BUTTON);
+        check("M2 鎵归噺鎸夐挳鏍锋湰 biz_button=鎵归噺鎸夐挳", "鎵归噺鎸夐挳".equals(batch.bizButton()), "瀹為檯 " + batch.bizButton());
+        check("M2 鎵归噺鎸夐挳鏍锋湰 isReviewButton=false", !batch.isReviewButton(), "瀹為檯 " + batch.isReviewButton());
+
+        AuditSignMetaData list = AuditSignMetaData.parse(SAMPLE_LIST_BUTTON);
+        check("M2 鍒楄〃鎸夐挳鏍锋湰 biz_button=鍒楄〃鎸夐挳", "鍒楄〃鎸夐挳".equals(list.bizButton()), "瀹為檯 " + list.bizButton());
+        check("M2 鍒楄〃鎸夐挳鏍锋湰 isReviewButton=false", !list.isReviewButton(), "瀹為檯 " + list.isReviewButton());
+    }
+
+    /** M3 null / 绌轰覆 / 绾┖鐧斤細涓�寰嬭繑鍥� EMPTY锛屼笁涓� getter 閮芥槸銆屾嬁涓嶅埌銆嶇殑闆跺�笺�� */
+    private static void nullAndBlankReturnEmpty() {
+        for (String json : new String[] {null, "", "   "}) {
+            AuditSignMetaData md = AuditSignMetaData.parse(json);
+            check("M3 null/绌轰覆/绌虹櫧 鈫� EMPTY", md == AuditSignMetaData.EMPTY, "json=[" + json + "] 瀹為檯鏈繑鍥� EMPTY 瀹炰緥");
+            check("M3 EMPTY.bizButton()==null", md.bizButton() == null, "瀹為檯 " + md.bizButton());
+            check("M3 EMPTY.isReviewButton()==false", !md.isReviewButton(), "瀹為檯 " + md.isReviewButton());
+            check("M3 EMPTY.rawBizData()==null", md.rawBizData() == null, "瀹為檯 " + md.rawBizData());
+        }
+    }
+
+    /** M4 闈� JSON 瀛楃涓诧細瑙f瀽澶辫触蹇呴』闄嶇骇涓� EMPTY锛岀粷涓嶈兘鎶涘紓甯哥偢绌胯皟鐢ㄦ柟锛坆rief 纭害鏉燂級銆� */
+    private static void malformedJsonNeverThrows() {
+        String[] garbage = {"{not json", "not even braces", "{\"a\":}", "[]", "null", "123"};
+        for (String json : garbage) {
+            try {
+                AuditSignMetaData md = AuditSignMetaData.parse(json);
+                check("M4 闈炴硶 JSON 涓嶆姏寮傚父锛岃繑鍥為潪绌哄璞� [" + json + "]", md != null, "瀹為檯 null");
+            } catch (Throwable t) {
+                fail++;
+                System.out.println("  鉂� M4 闈炴硶 JSON 鎶涘嚭寮傚父 [" + json + "] 鈥斺�� " + t);
+            }
+        }
+    }
+
+    /** M5 鍚堟硶 JSON 浣嗘病鏈� biz_button/is_review_button 閿細闄嶇骇涓烘嬁涓嶅埌锛屼笉鏄姏寮傚父涔熶笉鏄瀻鐚溿�� */
+    private static void missingKeysDegradeGracefully() {
+        AuditSignMetaData md = AuditSignMetaData.parse("{\"foo\":\"bar\"}");
+        check("M5 缂洪敭鏃� bizButton()==null", md.bizButton() == null, "瀹為檯 " + md.bizButton());
+        check("M5 缂洪敭鏃� isReviewButton()==false", !md.isReviewButton(), "瀹為檯 " + md.isReviewButton());
+    }
+
+    /** M6 biz_button 涓虹┖涓诧細瑙嗗悓銆屾嬁涓嶅埌銆嶈繑鍥� null锛岃�屼笉鏄妸绌轰覆褰撴垚涓�涓湁鏁堟寜閽悕寰�涓嬩紶銆� */
+    private static void blankBizButtonTreatedAsAbsent() {
+        AuditSignMetaData md = AuditSignMetaData.parse("{\"biz_button\":\"\",\"is_review_button\":false}");
+        check("M6 biz_button 绌轰覆 鈫� bizButton()==null", md.bizButton() == null, "瀹為檯 [" + md.bizButton() + "]");
+    }
+
+    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