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/JnpfUserFieldValueResolverProbe.java | 150 ++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 150 insertions(+), 0 deletions(-)
diff --git a/jnpf-biz-common/jnpf-biz-common-audit/src/test/java/jnpf/bizcommon/audit/service/value/JnpfUserFieldValueResolverProbe.java b/jnpf-biz-common/jnpf-biz-common-audit/src/test/java/jnpf/bizcommon/audit/service/value/JnpfUserFieldValueResolverProbe.java
new file mode 100644
index 0000000..1f48a72
--- /dev/null
+++ b/jnpf-biz-common/jnpf-biz-common-audit/src/test/java/jnpf/bizcommon/audit/service/value/JnpfUserFieldValueResolverProbe.java
@@ -0,0 +1,150 @@
+package jnpf.bizcommon.audit.service.value;
+
+import jnpf.bizcommon.audit.entity.model.AuditFieldDiffViewVO;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+/** userSelect 鐢ㄦ埛 id 鈫� 銆岀湡瀹炲鍚�/璐﹀彿銆嶇殑鎵归噺瑙f瀽銆佹帶浠剁被鍨嬪垽鎹笌绉熸埛杈圭晫鎺㈤拡銆� */
+public final class JnpfUserFieldValueResolverProbe {
+
+ private static int passed;
+ private static int failed;
+
+ public static void main(String[] args) {
+ CountingLookup lookup = new CountingLookup();
+ JnpfUserFieldValueResolver resolver = new JnpfUserFieldValueResolver(lookup);
+
+ List<AuditFieldDiffViewVO> fields = Arrays.asList(
+ field("tijiao_ren", "userSelect", "", "u-admin"),
+ field("fuhe_ren", "UserSelect", "u-admin", "u-ys"),
+ field("chouyang_ren", "userSelect", "", "[\"u-ys\",\"u-gone\"]"),
+ // 涓や釜闈� userSelect 骞叉壈椤瑰埢鎰忕敤**鐙湁**鐨勫�硷細鑻ョ敤 u-admin 杩欑宸茶鐪熷疄鐢ㄦ埛
+ // 瀛楁鏀堕泦杩囩殑 id锛屽嵆渚胯В鏋愬櫒閿欒鍦版妸瀹冧滑涔熸敹杩涘幓锛孲et 鍘婚噸鍚庢潯鏁扮汗涓濅笉鍔紝
+ // 鏂█灏辨垚浜嗘案杩滆浆涓嶇孩鐨勬憜璁撅紙L077 鍙樹綋 5/8 鍚屾闄烽槺锛夈��
+ field("beizhu", "input", "", "u-only-in-beizhu"),
+ field("zhuangtai", "select", "", "u-only-in-zhuangtai"));
+
+ resolver.resolve(new AuditFieldValueContext("lims_ceshi_huichuan", "0", null), fields);
+
+ check("鏁存壒鍙煡涓�娆″簱", lookup.calls == 1, "calls=" + lookup.calls);
+ check("绉熸埛杈圭晫閫忎紶杩涙煡璇�", "0".equals(lookup.lastTenantId), String.valueOf(lookup.lastTenantId));
+
+ // 鍒ゆ嵁鏄帶浠剁被鍨嬩笉鏄瓧娈靛悕锛氶潪 userSelect 鐨勫垪鍗充究瀛樼潃鐢ㄦ埛 id 涔熶笉纰帮紝
+ // 鍚﹀垯浼氭妸鎭板ソ绛変簬鏌愪釜鐢ㄦ埛 id 鐨勬櫘閫氭枃鏈鏀规垚浜哄悕銆�
+ check("闈� userSelect 鎺т欢涓嶈瑙f瀽",
+ fields.get(3).getNewDisplay() == null && fields.get(4).getNewDisplay() == null,
+ fields.get(3).getNewDisplay() + " / " + fields.get(4).getNewDisplay());
+ check("闈� userSelect 鎺т欢鐨勫�间笉杩� ID 鏀堕泦",
+ lookup.requestedIds.equals(Arrays.asList("u-admin", "u-ys", "u-gone")),
+ lookup.requestedIds.toString());
+
+ check("灞曠ず鏍煎紡涓� realName/account", "绠$悊鍛�/admin".equals(fields.get(0).getNewDisplay()),
+ fields.get(0).getNewDisplay());
+ check("鎺т欢绫诲瀷澶у皬鍐欎笉鏁忔劅", "yangsui/ys0001".equals(fields.get(1).getNewDisplay()),
+ fields.get(1).getNewDisplay());
+ check("oldData 涓� newData 涓や晶閮借В鏋�", "绠$悊鍛�/admin".equals(fields.get(1).getOldDisplay()),
+ fields.get(1).getOldDisplay());
+ check("绌哄�艰В鏋愭垚绌轰覆鑰屼笉鏄�屽悕绉版殏涓嶅彲鐢ㄣ��", "".equals(fields.get(0).getOldDisplay()),
+ fields.get(0).getOldDisplay());
+ check("澶氶�夋寜璇锋眰椤哄簭瑙f瀽锛屽崟椤规煡涓嶅埌鎵嶅洖钀�",
+ "yangsui/ys0001銆佸悕绉版殏涓嶅彲鐢�".equals(fields.get(2).getNewDisplay()),
+ fields.get(2).getNewDisplay());
+
+ // 鍓嶅簭瑙f瀽鍣紙琛ㄤ笓鐢�/瀛楀吀锛夊凡缁忓~杩� display 鐨勫瓧娈典笉閲嶅鏌ュ簱鈥斺��
+ // @Order 寤虹珛鐨勪紭鍏堢骇闈犺繖涓� if 鎵嶈惤寰椾笅鍘汇��
+ CountingLookup skipLookup = new CountingLookup();
+ AuditFieldDiffViewVO resolved = field("qingyan_ren", "userSelect", "", "u-admin");
+ resolved.setNewDisplay("绠$悊鍛�");
+ new JnpfUserFieldValueResolver(skipLookup).resolve(
+ new AuditFieldValueContext("lims_qingyandan", "0", null),
+ Collections.singletonList(resolved));
+ check("鍓嶅簭瑙f瀽鍣ㄥ凡濉殑 display 涓嶈瑕嗙洊锛屼篃涓嶈Е鍙戞煡搴�",
+ skipLookup.calls == 0 && "绠$悊鍛�".equals(resolved.getNewDisplay()),
+ skipLookup.calls + " / " + resolved.getNewDisplay());
+
+ // 绉熸埛鎷夸笉鍒版椂瀹佸彲涓嶈В鏋愶紝涔熶笉鍋氫竴娆℃棤杈圭晫鐨勫叏搴撴煡璇€��
+ CountingLookup blankTenant = new CountingLookup();
+ new JnpfUserFieldValueResolver(blankTenant).resolve(
+ new AuditFieldValueContext("lims_ceshi_huichuan", "", null),
+ Collections.singletonList(field("tijiao_ren", "userSelect", "", "u-admin")));
+ check("绌虹鎴� fail-closed锛堜笉鏌ュ簱锛�", blankTenant.calls == 0,
+ String.valueOf(blankTenant.calls));
+
+ check("supports 瀵逛换鎰忚〃鎭掍负 true锛坲serSelect 鏄钩鍙版帶浠讹級",
+ resolver.supports("lims_ceshi_huichuan") && resolver.supports("any_table")
+ && resolver.supports(null),
+ "supports 鏀剁獎浜嗛�傜敤琛�");
+
+ // 灞曠ず鏍煎紡瑁呴厤鏈韩锛堥獙鏀舵爣鍑嗐�岀鐞嗗憳/admin銆嶇殑鐩存帴鍒ゆ嵁锛�
+ check("userDisplay 鎷� realName/account",
+ "绠$悊鍛�/admin".equals(JnpfUserFieldValueResolver.userDisplay("绠$悊鍛�", "admin")),
+ JnpfUserFieldValueResolver.userDisplay("绠$悊鍛�", "admin"));
+ check("userDisplay 缂鸿处鍙锋椂涓嶇暀瀛ら浂闆舵枩鏉�",
+ "绠$悊鍛�".equals(JnpfUserFieldValueResolver.userDisplay("绠$悊鍛�", null))
+ && "绠$悊鍛�".equals(JnpfUserFieldValueResolver.userDisplay("绠$悊鍛�", " ")),
+ JnpfUserFieldValueResolver.userDisplay("绠$悊鍛�", null));
+ check("userDisplay 缂哄鍚嶆椂閫�鍥炶处鍙�",
+ "admin".equals(JnpfUserFieldValueResolver.userDisplay(null, "admin")),
+ JnpfUserFieldValueResolver.userDisplay(null, "admin"));
+ check("userDisplay 涓よ竟閮界┖杩斿洖 null锛堣皟鐢ㄦ柟鎹涓嶅叆 map锛�",
+ JnpfUserFieldValueResolver.userDisplay(null, null) == null,
+ String.valueOf(JnpfUserFieldValueResolver.userDisplay(null, null)));
+
+ // @Order 甯搁噺鐨勭浉瀵规搴忓嵆瑙f瀽浼樺厛绾э紱鏁板�煎啓鍙嶄細璁╅�氱敤瑙f瀽鍣ㄦ姠鍦ㄨ〃涓撶敤涔嬪墠銆�
+ check("瑙f瀽鍣ㄤ紭鍏堢骇 琛ㄤ笓鐢� < 瀛楀吀 < 鐢ㄦ埛鍏滃簳",
+ LimsQingyandanFieldValueResolver.ORDER < JnpfDictionaryFieldValueResolver.ORDER
+ && JnpfDictionaryFieldValueResolver.ORDER < JnpfUserFieldValueResolver.ORDER,
+ LimsQingyandanFieldValueResolver.ORDER + " / "
+ + JnpfDictionaryFieldValueResolver.ORDER + " / "
+ + JnpfUserFieldValueResolver.ORDER);
+
+ System.out.println("=== 鐢ㄦ埛瀛楁瑙f瀽鏂█锛�" + passed + " 閫氳繃 / " + failed + " 澶辫触 ===");
+ System.exit(failed == 0 ? 0 : 1);
+ }
+
+ private static AuditFieldDiffViewVO field(String name, String componentType,
+ String oldData, String newData) {
+ AuditFieldDiffViewVO field = new AuditFieldDiffViewVO();
+ field.setField(name);
+ field.setComponentType(componentType);
+ field.setOldData(oldData);
+ field.setNewData(newData);
+ return field;
+ }
+
+ private static final class CountingLookup implements JnpfUserFieldValueResolver.UserLookup {
+ private int calls;
+ private String lastTenantId;
+ private final List<String> requestedIds = new ArrayList<>();
+
+ @Override
+ public Map<String, String> names(String tenantId, Set<String> ids) {
+ calls++;
+ lastTenantId = tenantId;
+ requestedIds.addAll(ids);
+ Map<String, String> result = new LinkedHashMap<>();
+ result.put("u-admin", "绠$悊鍛�/admin");
+ result.put("u-ys", "yangsui/ys0001");
+ return result; // u-gone 鍒绘剰缂哄腑锛氭ā鎷熺敤鎴疯鍒�/鏌ヤ笉鍒�
+ }
+ }
+
+ 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 JnpfUserFieldValueResolverProbe() {
+ }
+}
--
Gitblit v1.8.0