feat(cleanup): 历史数据整理器(§13.2,V13)—— 解压解析、体检报告、导入为正式任务
从「人长出来的」历史路径里解析姓名/证件号/材料/班级 → 与名册比对 → 按模板重打包 → 体检报告(autoHandled / needManual 由服务端算,前端只展示,不自己减)→ 幂等导入。 F-48 的教训:中文人名与业务短词无法用「包含」区分——噪声词只做精确匹配, 候选名按「完整中文串 2~4 字 + 不含数字 + 不含班级词」判定。 F-49:参数校验必须排在幂等判断之前(否则不合法的请求会因「之前导过一次」变成成功)。 验证:e2e-m7-cleanup 54/54(含「坏包要明确失败」与「无名单时串档恒为 0」)。
This commit is contained in:
@@ -0,0 +1,38 @@
|
||||
-- ============================================================================
|
||||
-- V13:历史整理任务补审计列
|
||||
--
|
||||
-- V1 建 `collect_cleanup_job` 时漏了 `update_time` / `deleted`,而实体要继承
|
||||
-- `BaseEntity`(那个基类带 @TableLogic 与自动填充)—— 少了这两列的表现是
|
||||
-- **运行时**才炸:查询补 `deleted = 0`、更新补 `update_time`,都会报 column does not exist。
|
||||
--
|
||||
-- 这是同一类错的第 N 次(见 F-24/F-35)。这次是 `scripts/check-entity-columns.py`
|
||||
-- 在写代码**之前**就报出来的 —— 那个脚本的价值第一次体现在"还没踩坑就先拦住"。
|
||||
--
|
||||
-- 另外补两列业务字段:
|
||||
-- · `roster_task_id` —— 契约 §13.2 的 `rosterTaskId`。**这本是关键参数**
|
||||
-- (有名单才能做证件号校验与串档检测),而 V1 的表里没有它,
|
||||
-- 于是"整理结果关联到哪个名册"这件事无处可存。
|
||||
-- · `source_url` —— `sourceType=3`(云盘链接)时的来源地址。
|
||||
-- 一期不做云盘(返回 40044),但列先留着:加列容易,事后补一次迁移要动生产库。
|
||||
-- ============================================================================
|
||||
|
||||
ALTER TABLE collect_cleanup_job ADD COLUMN IF NOT EXISTS create_by BIGINT;
|
||||
ALTER TABLE collect_cleanup_job ADD COLUMN IF NOT EXISTS create_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP;
|
||||
ALTER TABLE collect_cleanup_job ADD COLUMN IF NOT EXISTS update_by BIGINT;
|
||||
ALTER TABLE collect_cleanup_job ADD COLUMN IF NOT EXISTS update_time TIMESTAMP;
|
||||
ALTER TABLE collect_cleanup_job ADD COLUMN IF NOT EXISTS deleted SMALLINT NOT NULL DEFAULT 0;
|
||||
ALTER TABLE collect_cleanup_job ADD COLUMN IF NOT EXISTS roster_task_id BIGINT;
|
||||
ALTER TABLE collect_cleanup_job ADD COLUMN IF NOT EXISTS source_url VARCHAR(512);
|
||||
ALTER TABLE collect_cleanup_job ADD COLUMN IF NOT EXISTS processed_files INTEGER;
|
||||
ALTER TABLE collect_cleanup_job ADD COLUMN IF NOT EXISTS parsed_students INTEGER;
|
||||
ALTER TABLE collect_cleanup_job ADD COLUMN IF NOT EXISTS parsed_materials INTEGER;
|
||||
ALTER TABLE collect_cleanup_job ADD COLUMN IF NOT EXISTS raw_size_bytes BIGINT;
|
||||
ALTER TABLE collect_cleanup_job ADD COLUMN IF NOT EXISTS final_size_bytes BIGINT;
|
||||
|
||||
COMMENT ON COLUMN collect_cleanup_job.roster_task_id IS '关联的已有任务名册(契约 §13.2 的 rosterTaskId):**有名单才能做证件号校验与串档检测**';
|
||||
COMMENT ON COLUMN collect_cleanup_job.source_url IS 'sourceType=3(云盘链接)的来源地址;一期不启用';
|
||||
COMMENT ON COLUMN collect_cleanup_job.update_time IS '审计列(V1 漏了):实体继承 BaseEntity 就必须有它';
|
||||
COMMENT ON COLUMN collect_cleanup_job.deleted IS '审计列(V1 漏了):@TableLogic 会让查询自动补 deleted = 0';
|
||||
|
||||
-- 默认值兜底:老行(如果有)不会因为 NOT NULL 而报错
|
||||
UPDATE collect_cleanup_job SET update_time = create_time WHERE update_time IS NULL;
|
||||
Reference in New Issue
Block a user