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() {
|
}
|
}
|