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 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 解析后仍标记 technical", Boolean.TRUE.equals(fields.get(3).getTechnical()) && "阿莫西林胶囊(A1)".equals(fields.get(3).getNewDisplay()), String.valueOf(fields.get(3).getTechnical())); check("事件值类型优先于显式解析器", "multiEnum".equals(fields.get(0).getValueType()), fields.get(0).getValueType()); check("事件控件类型优先于显式解析器", "relationForm".equals(fields.get(1).getComponentType()), fields.get(1).getComponentType()); check("显式业务解析器解析 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 projects(String tenantId, Set 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 standards(String tenantId, Set ids) { standardCalls++; tenant(tenantId); return Collections.singletonMap("s1", "GB2 · 阿莫西林胶囊"); } @Override public Map users(String tenantId, Set ids) { userCalls++; tenant(tenantId); return Collections.singletonMap("u1", "管理员"); } @Override public Map products(String tenantId, Set ids) { productCalls++; tenant(tenantId); Map result = new LinkedHashMap<>(); result.put("c1", "阿莫西林胶囊(A1)"); 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() { } }