四条读出路径(列表/详情/统计/导出)与管理动作行级把关共用 AnswerScopeQueryBuilder 一个谓词构造器(契约 §8 红线);数据范围按 SysRoleEnum 矩阵×audience 解析 + customId=fc:scope:all 扫描授权模块树,多来源取并集、全不命中回落仅本人提交。 四铁律落地:两段式列表禁 SELECT values_json、keyset 仅提交时间序(游标对外是 uuid)、 覆盖索引化(新增 idx_answer_form_time)、统计缓存键含 form_uuid+version 且仅升版失效+短 TTL。 T3 验收裁决前置三项:P25 answer.form_uuid 精确钉版溯源(删平台级回退启发式)、 P33 代填 subject 存在性+同校(SubjectDirectory 策略接口,生产走 /oapi/user/byId)、 P34 附件 key 与 store_key 一致性比对;P21 FormAdminGuard 整体替换为"授权模块集"口径 (ModuleTreeSource 策略接口,与 scope 解析共用同一棵树)。 新增对外读接口 GET /oapi/form/schema(内联 options+valueSchema)与 /oapi/form/answer (钉住版本 schema+值文档);导出 easyexcel 流式同步响应,选项列显 label、附件列显 fileName。 自验:mvn -B -o clean package 177 条全绿(本轮新增 56,23 条打真实 MySQL), 覆盖 V9/V11/V23/V27/V28/V37/V42 + V30 读侧半边 + V39 范围半边; V9 以"发布时补建索引行"实现(方案未指定机制,记 P36)。详见 docs/T4-report.md(问题单 P35~P46)。
This commit is contained in:
@@ -12,11 +12,16 @@
|
||||
-- P5/P15 裁决:实体继承 BaseEntity,实表=契约草案 + create_by/update_by 两列;
|
||||
-- 审计列在基类未标 nullable=false,故按建表实态写 DEFAULT NULL(Listener 恒写 now(),业务上不为空)。
|
||||
-- 本机取证:MySQL 8.0.45 / bsch_formcenter 由 ddl-auto=update 建表后 SHOW CREATE TABLE 逐列比对一致。
|
||||
-- T4 变更(本轮):①answer 增列 `form_uuid VARCHAR(32) NOT NULL`(P25 裁决落地,钉版溯源精确坐标);
|
||||
-- ②answer 增索引 `idx_answer_form_time`(方案 §5.5 铁律③,四读出路径 keyset 游标的覆盖索引)。
|
||||
-- 开发库 answer 当时零行 → NOT NULL 无需回填;已建库由 ddl-auto=update 追加列与索引,
|
||||
-- 生产(ddl-auto=none)升级即照本脚本这两条 ALTER/CREATE INDEX 执行。
|
||||
-- ============================================================
|
||||
|
||||
CREATE TABLE `answer` (
|
||||
`id` BIGINT NOT NULL AUTO_INCREMENT,
|
||||
`uuid` VARCHAR(32) NOT NULL COMMENT '数据面运行时身份(详情 URL/嵌入地址/L2 引用,契约 §1)',
|
||||
`form_uuid` VARCHAR(32) NOT NULL COMMENT '提交时解析命中的表单 uuid——钉版溯源的精确坐标(P25 裁决:遮蔽歧义根治,读改路径一律按它取版本行)',
|
||||
`sch_id` BIGINT NOT NULL COMMENT '恒=会话校(校域不变式:跨校提交在解析层即不可能)',
|
||||
`app_code` VARCHAR(64) NOT NULL,
|
||||
`code` VARCHAR(64) NOT NULL,
|
||||
@@ -37,7 +42,8 @@ CREATE TABLE `answer` (
|
||||
UNIQUE KEY `uk_answer_idem` (`idempotency_key`),
|
||||
KEY `idx_answer_form` (`sch_id`, `code`, `status`, `id`),
|
||||
KEY `idx_answer_submitter` (`sch_id`, `submitter_id`),
|
||||
KEY `idx_answer_subject` (`subject_id`)
|
||||
KEY `idx_answer_subject` (`subject_id`),
|
||||
KEY `idx_answer_form_time` (`sch_id`, `app_code`, `code`, `is_deleted`, `id`) COMMENT 'T4 铁律③:单表单列表/导出/计数 keyset 游标的覆盖索引'
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='答卷(方案 §5.1:定义与答卷物理分离)';
|
||||
|
||||
CREATE TABLE `answer_index` (
|
||||
|
||||
Reference in New Issue
Block a user