9216bd66d2
PRD 附录 E。每个任务都是两段式:先以平台身份(tenantId=0)扫候选,再逐个租户摆上下文 干活——写数据必须在第二段,否则 tenant_id 被写成 0,通知进平台租户且不报错。 V17 新建 sys_tenant_usage_snapshot(唯一索引保证幂等;tenant_id 必须显式写)并给 collect_file 补 process_retry_count / process_error / last_retry_time + 只索引 「还没处理出规范件」的部分索引;压缩失败重试必须封顶,否则原图损坏的文件会被每 10 分钟重试一次而永远不成功。 跨租户的候选查询全部集中在 ScheduleMapper 一个文件、一律 @InterceptorIgnore + 只读; Map 结果的别名一律 AS "camelCase"(F-83:PG 会把未加引号的别名折成小写, 表现是任务照跑、日志一行 warn、什么都没做)。 验证:e2e-m7-schedule 38/38(含快照幂等与一致性、重试累加与封顶、到期提醒窗口)。