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/value/LimsQingyandanFieldValueResolverProbe.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/value/LimsQingyandanFieldValueResolverProbe.java b/jnpf-biz-common/jnpf-biz-common-audit/src/test/java/jnpf/bizcommon/audit/service/value/LimsQingyandanFieldValueResolverProbe.java
new file mode 100644
index 0000000..882ec4e
--- /dev/null
+++ b/jnpf-biz-common/jnpf-biz-common-audit/src/test/java/jnpf/bizcommon/audit/service/value/LimsQingyandanFieldValueResolverProbe.java
@@ -0,0 +1,138 @@
+package jnpf.bizcommon.audit.service.value;
+
+import jnpf.bizcommon.audit.entity.model.AuditFieldDiffViewVO;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+/** 璇烽獙鍗曞洓绫诲紩鐢ㄧ殑鎵归噺鏀堕泦銆佸睍绀哄拰鎶�鏈瓧娈垫爣璁版帰閽堛�� */
+public final class LimsQingyandanFieldValueResolverProbe {
+
+    private static int passed;
+    private static int failed;
+
+    public static void main(String[] args) {
+        CountingLookup lookup = new CountingLookup();
+        LimsQingyandanFieldValueResolver resolver = new LimsQingyandanFieldValueResolver(lookup);
+        List<AuditFieldDiffViewVO> fields = Arrays.asList(
+                field("jiance_xiangmu", "", "[\"p1\",\"p2\"]"),
+                field("jianyan_biaozhun", "", "s1"),
+                field("qingyan_ren", "", "u1"),
+                field("chanpin_id", "", "c1"),
+                field("biz_status", "", "created"),
+                field("biz_type", "", "CP"),
+                field("jiance_fangshi", "", "quanjian"));
+        fields.get(0).setValueType("multiEnum");
+        fields.get(1).setComponentType("relationForm");
+
+        resolver.resolve(new AuditFieldValueContext("lims_qingyandan", "tenant-a", null), fields);
+
+        check("妫�娴嬮」鐩暣鎵规煡璇竴娆�", lookup.projectCalls == 1, String.valueOf(lookup.projectCalls));
+        check("妫�楠屾爣鍑嗘暣鎵规煡璇竴娆�", lookup.standardCalls == 1, String.valueOf(lookup.standardCalls));
+        check("浜哄憳鏁存壒鏌ヨ涓�娆�", lookup.userCalls == 1, String.valueOf(lookup.userCalls));
+        check("浜у搧鏁存壒鏌ヨ涓�娆�", lookup.productCalls == 1, String.valueOf(lookup.productCalls));
+        check("绉熸埛杈圭晫閫忎紶鍒板叏閮ㄦ壒閲忔煡璇�", lookup.tenantCalls == 4, String.valueOf(lookup.tenantCalls));
+        check("椤圭洰鍚嶇О淇濇寔璇锋眰椤哄簭涓斿崟椤瑰け璐ュ畨鍏ㄥ洖钀�",
+                "鍚噺娴嬪畾A銆佸悕绉版殏涓嶅彲鐢�".equals(fields.get(0).getNewDisplay()),
+                fields.get(0).getNewDisplay());
+        check("鏍囧噯鏄剧ず缂栧彿鍜屽悕绉�", "GB2 路 闃胯帿瑗挎灄鑳跺泭".equals(fields.get(1).getNewDisplay()),
+                fields.get(1).getNewDisplay());
+        check("浜哄憳鏄剧ず浜嬩欢鐩綍鍚嶇О", "绠$悊鍛�".equals(fields.get(2).getNewDisplay()),
+                fields.get(2).getNewDisplay());
+        check("浜у搧 ID 瑙f瀽鍚庝粛鏍囪 technical", Boolean.TRUE.equals(fields.get(3).getTechnical())
+                && "闃胯帿瑗挎灄鑳跺泭锛圓1锛�".equals(fields.get(3).getNewDisplay()),
+                String.valueOf(fields.get(3).getTechnical()));
+        check("浜嬩欢鍊肩被鍨嬩紭鍏堜簬鏄惧紡瑙f瀽鍣�", "multiEnum".equals(fields.get(0).getValueType()),
+                fields.get(0).getValueType());
+        check("浜嬩欢鎺т欢绫诲瀷浼樺厛浜庢樉寮忚В鏋愬櫒", "relationForm".equals(fields.get(1).getComponentType()),
+                fields.get(1).getComponentType());
+        check("鏄惧紡涓氬姟瑙f瀽鍣ㄨВ鏋� created/CP/quanjian",
+                "宸插垱寤�".equals(fields.get(4).getNewDisplay())
+                        && "鎴愬搧".equals(fields.get(5).getNewDisplay())
+                        && "鍏ㄦ".equals(fields.get(6).getNewDisplay())
+                        && "enum".equals(fields.get(4).getValueType())
+                        && "enum".equals(fields.get(5).getValueType())
+                        && "enum".equals(fields.get(6).getValueType()),
+                fields.get(4).getNewDisplay() + "/" + fields.get(5).getNewDisplay()
+                        + "/" + fields.get(6).getNewDisplay());
+
+        resolver.resolve(new AuditFieldValueContext("lims_qingyandan", "", null),
+                Collections.singletonList(field("qingyan_ren", "", "other-user")));
+        check("绌虹鎴峰紩鐢ㄨВ鏋� fail-closed", lookup.userCalls == 1,
+                String.valueOf(lookup.userCalls));
+
+        System.out.println("=== 璇烽獙鍗曟壒閲忓紩鐢ㄦ柇瑷�锛�" + passed + " 閫氳繃 / " + failed + " 澶辫触 ===");
+        System.exit(failed == 0 ? 0 : 1);
+    }
+
+    private static AuditFieldDiffViewVO field(String name, String oldData, String newData) {
+        AuditFieldDiffViewVO field = new AuditFieldDiffViewVO();
+        field.setField(name);
+        field.setOldData(oldData);
+        field.setNewData(newData);
+        return field;
+    }
+
+    private static final class CountingLookup implements LimsQingyandanFieldValueResolver.ReferenceLookup {
+        private int projectCalls;
+        private int standardCalls;
+        private int userCalls;
+        private int productCalls;
+        private int tenantCalls;
+
+        @Override
+        public Map<String, String> projects(String tenantId, Set<String> ids) {
+            projectCalls++;
+            tenant(tenantId);
+            check("妫�娴嬮」鐩� ID 涓�娆″畬鏁存敹闆�", ids.size() == 2 && ids.contains("p1") && ids.contains("p2"),
+                    ids.toString());
+            return Collections.singletonMap("p1", "鍚噺娴嬪畾A");
+        }
+
+        @Override
+        public Map<String, String> standards(String tenantId, Set<String> ids) {
+            standardCalls++;
+            tenant(tenantId);
+            return Collections.singletonMap("s1", "GB2 路 闃胯帿瑗挎灄鑳跺泭");
+        }
+
+        @Override
+        public Map<String, String> users(String tenantId, Set<String> ids) {
+            userCalls++;
+            tenant(tenantId);
+            return Collections.singletonMap("u1", "绠$悊鍛�");
+        }
+
+        @Override
+        public Map<String, String> products(String tenantId, Set<String> ids) {
+            productCalls++;
+            tenant(tenantId);
+            Map<String, String> result = new LinkedHashMap<>();
+            result.put("c1", "闃胯帿瑗挎灄鑳跺泭锛圓1锛�");
+            return result;
+        }
+
+        private void tenant(String tenantId) {
+            if ("tenant-a".equals(tenantId)) {
+                tenantCalls++;
+            }
+        }
+    }
+
+    private static void check(String name, boolean ok, String detail) {
+        if (ok) {
+            passed++;
+            System.out.println("  [PASS] " + name);
+        } else {
+            failed++;
+            System.out.println("  [FAIL] " + name + " -- " + detail);
+        }
+    }
+
+    private LimsQingyandanFieldValueResolverProbe() {
+    }
+}

--
Gitblit v1.8.0