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-audit-sdk/src/test/java/jnpf/audit/sdk/aspect/AuditLogBatchDiffChecks.java |   78 +++++++++++++++++++++++++++++++++++++++
 1 files changed, 78 insertions(+), 0 deletions(-)

diff --git a/jnpf-biz-common/jnpf-audit-sdk/src/test/java/jnpf/audit/sdk/aspect/AuditLogBatchDiffChecks.java b/jnpf-biz-common/jnpf-audit-sdk/src/test/java/jnpf/audit/sdk/aspect/AuditLogBatchDiffChecks.java
new file mode 100644
index 0000000..768baaa
--- /dev/null
+++ b/jnpf-biz-common/jnpf-audit-sdk/src/test/java/jnpf/audit/sdk/aspect/AuditLogBatchDiffChecks.java
@@ -0,0 +1,78 @@
+package jnpf.audit.sdk.aspect;
+
+import com.alibaba.fastjson.JSON;
+
+import java.io.Serializable;
+import java.util.Arrays;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
+/** AuditLog 鎵归噺涓婚敭褰掍竴鍖栥�侀�愯褰� diff 涓庡揩鐓у绾︽鏌ャ�� */
+public final class AuditLogBatchDiffChecks {
+
+    private static int passed;
+    private static int failed;
+
+    public static void main(String[] args) {
+        List<Serializable> ids = AuditLogAspect.normalizeSerializableIds(
+                Arrays.asList(" row-1 ", "row-2", "", "row-1", null));
+        check("鎵归噺涓婚敭鍘荤┖銆佸幓閲嶅苟淇濇寔椤哄簭",
+                ids.equals(Arrays.asList("row-1", "row-2")));
+        check("閫楀彿鍒嗛殧涓婚敭鍙綊涓�鍖�",
+                AuditLogAspect.normalizeSerializableIds("row-1,row-2")
+                        .equals(Arrays.asList("row-1", "row-2")));
+
+        List<Serializable> tenIds = AuditLogAspect.normalizeSerializableIds(
+                new String[] {"row-1", "row-2", "row-3", "row-4", "row-5",
+                        "row-6", "row-7", "row-8", "row-9", "row-10"});
+        Map<Serializable, Map<String, Object>> before = new LinkedHashMap<>();
+        Map<Serializable, Map<String, Object>> after = new LinkedHashMap<>();
+        for (Serializable id : tenIds) {
+            before.put(id, row("pending"));
+            after.put(id, row("done"));
+        }
+
+        String fieldDiffs = AuditLogAspect.batchFieldDiffs(
+                "lims_task", tenIds, before, after);
+        List<Map> diffs = JSON.parseArray(fieldDiffs, Map.class);
+        check("10鏉¤褰曚慨鏀瑰悓涓�瀛楁淇濈暀10鏉″樊寮�", diffs.size() == 10);
+        check("姣忔潯宸紓鎼哄甫鐗╃悊琛ㄥ拰璁板綍涓婚敭",
+                diffs.stream().allMatch(item -> "lims_task".equals(item.get("targetTable"))
+                        && item.get("targetId") != null));
+        check("鎵归噺宸紓淇濈暀鐪熷疄鍓嶅悗鍊�",
+                diffs.stream().allMatch(item -> "pending".equals(item.get("oldData"))
+                        && "done".equals(item.get("newData"))));
+
+        String snapshot = AuditLogAspect.batchSnapshot(tenIds, after);
+        List<Map> snapshots = JSON.parseArray(snapshot, Map.class);
+        check("鎵归噺鎿嶄綔鍚庡揩鐓т繚鐣�10鏉¤褰�", snapshots.size() == 10);
+        check("姣忔潯蹇収鎸� targetId 鍖呰鏁版嵁",
+                snapshots.stream().allMatch(item -> item.get("targetId") != null
+                        && item.get("data") instanceof Map));
+
+        System.out.println("=== AuditLog 鎵归噺宸紓妫�鏌ワ細" + passed + " 閫氳繃 / " + failed + " 澶辫触 ===");
+        if (failed > 0) {
+            System.exit(1);
+        }
+    }
+
+    private static Map<String, Object> row(String status) {
+        Map<String, Object> row = new LinkedHashMap<>();
+        row.put("status", status);
+        return row;
+    }
+
+    private static void check(String name, boolean ok) {
+        if (ok) {
+            passed++;
+            System.out.println("  [PASS] " + name);
+        } else {
+            failed++;
+            System.out.println("  [FAIL] " + name);
+        }
+    }
+
+    private AuditLogBatchDiffChecks() {
+    }
+}

--
Gitblit v1.8.0