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 解析后仍标记 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<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", "阿莫西林胶囊(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() {
|
}
|
}
|