package jnpf.bizcommon.audit.service.title;
import jnpf.bizcommon.audit.entity.AuditEventEntity;
import jnpf.audit.diff.AuditFieldDiff;
import jnpf.bizcommon.audit.entity.model.AuditFieldDiffViewVO;
import jnpf.bizcommon.audit.service.AuditFieldDiffViewService;
import jnpf.bizcommon.audit.service.value.AuditFieldValueContext;
import jnpf.bizcommon.audit.service.value.AuditFieldValueResolver;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
/**
* 标题渲染「主表 + 全部子表行一次解析」的探针(A3,2026-08-03 Codex 终审 Low:查询放大)。
*
*
源码断言只守得住形状(有没有 renderLines、build 调了几次),守不住**对位**——
* 合批之后每行的展示值是按位置从同一批解析结果里切回去的,切错一格就会把 A 行的值显示到
* B 行的标题上,而 {@code record_title} 是 append-only 存十年的明文列。所以这些必须跑起来验:
*
* - 整份标题(主 + N 个子行)**只解析一次**,不是 1 + N 次;
* - 每个子表行的标题各自对应自己那一行的值(各行刻意取不同值,错位立刻现形);
* - 中间某行整行为空时该行不产出标题,且**不把后面几行的对位带偏——
* 这是位置分发最容易错的地方(空行贡献 0 个解析项,切片边界必须跟着走)。
*
*/
public final class AuditRecordTitleBatchProbe {
private static int passed;
private static int failed;
public static void main(String[] args) throws Exception {
CountingResolver counter = new CountingResolver();
AuditFieldDiffViewService viewService = new AuditFieldDiffViewService(
Collections.singletonList(counter), "Asia/Shanghai");
AuditRecordTitleBuilder builder = new AuditRecordTitleBuilder();
Field field = AuditRecordTitleBuilder.class.getDeclaredField("fieldDiffViewService");
field.setAccessible(true);
field.set(builder, viewService);
AuditTitleSpec spec = new AuditTitleSpec(
Arrays.asList("bian_hao", "beizhu"),
Collections.singletonList(new AuditTitleSpec.SubTableSpec(
"tableField101", "lims_sub", Arrays.asList("xiang_mu", "jie_guo"))));
// 子表第 2 行(下标 1)刻意整行为空:它贡献 0 个解析项,后面两行的切片起点必须跟着挪。
List