package cn.iocoder.yudao.module.qcreport.dal.dataobject.version; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import lombok.Data; import java.util.List; import java.util.Map; /** * 报告模板 Schema —— 设计器产物,也是报告出件的唯一输入。 *
* 模板不保存裸 HTML。保存的是「画布数据 + 业务语义」,由渲染引擎据此生成 HTML, * 这样同一份模板在不同渲染环境下产物一致,也才有可能做服务端 Sanitization。 * *
| {@link #grapes} | GrapesJS 原始项目数据。设计器靠它无损还原画布,渲染引擎也读它(正文结构在这里) |
| {@link #components} | 质量组件业务语义清单。渲染不读,供设计器定位组件、供后续 AI 生成模板时理解结构 |
| {@link #rules} | 判定规则。渲染前由判定器求值,决定每项 PASS/FAIL 与报告结论 |
| {@link #page} | 纸张与页边距,渲染时换算成 CSS {@code @page} |
* {@code schema_json} 列里已经存着含 1.0 字段(dataSources / bindings / styles)的历史 JSON, * 所以这里显式标注 {@link JsonIgnoreProperties} 容错。 *
* 说明一句,免得后人以为它必不可少:去掉这个注解,兼容性测试也是绿的—— * 读库那条链路用的 {@code Jackson3TypeHandler} 自己 new 的 ObjectMapper, * 而 Jackson 3 的 {@code FAIL_ON_UNKNOWN_PROPERTIES} 默认就是关的。 * 真正需要它防的是另外两条:Spring 反序列化请求体时用的 ObjectMapper(配置不受本模块控制), * 以及将来有人给类型处理器换一个更严格的 Mapper。留着是把意图写明,不是摆设。 * *
* 与前端 {@code designer/constants.ts} 的 {@code SCHEMA_VERSION} 必须一致:
* 两端各写一份是历史原因(后端不参与设计器构建),改这里就要同步改那边。
*/
public static final String SCHEMA_VERSION = "1.1";
/**
* Schema 版本,用于后续兼容升级
*/
private String schemaVersion;
/**
* 纸张与页边距配置
*/
private Page page;
/**
* GrapesJS 原始画布数据(保留以便设计器无损还原)
*/
private Map
* 元素形状为 {@code {id, name, scope, expression, enabled}},由
* {@code QualityRuleDefinition.from(Map)} 宽松读取——历史数据里可能有缺字段的规则,
* 读不动的跳过而不是让整份模板打不开。
*/
private List