这些审计记录原本堆积在 docs/audit/changes/changes/ 嵌套误产物目录下(由开发机迁移
79d3c2e 前后的不明批量操作产生)。由于同期 .gitignore 屏蔽了 docs/audit/ 全目录,
它们从未入过 git 任何分支 history。删除即永久丢失。
按 docs/specs/audit-gap-recovery/tasks.md 阶段 1 执行,将全部 96 份 D 类孤本
(主目录无同名、git history 亦无记录)复制到 docs/audit/changes/ 主目录入仓。
涵盖主题: P1-P18 全栈集成 / 多模块累积变更 / ETL bug 修复 / 业务日切 /
召回与任务引擎改造 / 租户管理与审批 / 董事会财务 / 客户与助教详情 /
DDL 基线合并 / Kiro 到 Claude Code 迁移
阶段 2(B 类内容漂移 1 份)和阶段 4(嵌套目录删除)独立推进。
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
6.1 KiB
6.1 KiB
变更审计记录:任务引擎改造 — 参数调优 + 客户级升级/转移 + 任务统计写入
| 字段 | 值 |
|---|---|
| 日期 | 2026-03-31 23:31:55 |
| Prompt-ID | P20260331-233155 |
| Session-ID | b743f2ab |
| Session 路径 | docs/audit/session_logs/2026-03/31/07_7dabc6f0_231307 |
操作摘要
在 task_generator.py 中新增 _update_task_stats() 函数,在每次任务生成完成后统计当前门店的任务数据并写入汇总表。统计分两层:B 层按助教+月份汇总写入 biz.dws_assistant_task_monthly(月度统计),C 层按助教+客户写入 dws.dws_member_assistant_relation_index 的 6 个新增历史总计字段。同时创建了对应的迁移 SQL。
本次变更是 P19 任务引擎改造系列的一部分,此前已完成参数调优、_run_for_site() 客户级升级/转移重写、recall_detector 直接生成回访任务、relation_index OS 方案重写、as_of_date 回测支持等改动。
风险评估
task_generator.py核心逻辑改动:高(_run_for_site()完全重写,从任务级别升级改为客户级别升级/转移;参数阈值多处调整)- 新建
dws_assistant_task_monthly表:中(新表,不影响现有数据,但统计逻辑需验证准确性) dws_member_assistant_relation_index新增字段:中(ALTER TABLE ADD COLUMN,默认值 0,不影响现有查询)- DDL 基线已合并:✅
数据库变更
新建表
biz.dws_assistant_task_monthly— 助教任务月度统计汇总(site_id + assistant_id + stat_month 唯一约束)- 字段:recall_created, follow_up_created, relationship_created, total_created, recall_completed, follow_up_completed, total_completed, abandoned_count, transferred_count
新增字段
dws.dws_member_assistant_relation_index新增 6 个统计字段:recall_created_total/recall_completed_total— 历史累计召回任务创建/完成数follow_up_created_total/follow_up_completed_total— 历史累计回访任务创建/完成数total_created/total_completed— 历史累计任务创建/完成总数
迁移脚本
db/zqyy_app/migrations/2026-03-31__task_stats_tables.sql— 新建月度汇总表db/etl_feiqiu/migrations/2026-03-31__relation_index_task_stats.sql— 关系指数表新增字段
DDL 基线
docs/database/ddl/zqyy_app__biz.sql— ✅ 已合并
⚠️ 迁移执行状态
- 待验证:需在测试库执行迁移后确认表结构
本次对话文件变更
新增文件
db/etl_feiqiu/migrations/2026-03-31__relation_index_task_stats.sql— 关系指数表新增 6 个历史总计统计字段db/zqyy_app/migrations/2026-03-31__task_stats_tables.sql— 新建biz.dws_assistant_task_monthly月度汇总表docs/audit/prompt_logs/prompt_log_20260331_233155.md— Prompt 日志
删除文件
docs/audit/session_logs/2026-03/31/07_7dabc6f0_231307/main_01_0f0a9f5b.md— Session 日志重建(被 b743f2ab 替代)
修改文件
apps/backend/app/services/task_generator.py— 新增_update_task_stats()统计写入函数(月度汇总 + 历史总计)
改动注解
apps/backend/app/services/task_generator.py
- 变更类型:修改
- 原始原因:用户要求在 task_generator.run() 末尾统计当前门店的任务数据并写入。B 层按月统计(助教维度),C 层按客户维度统计历史总和
- 思路分析:新增
_update_task_stats(conn, site_id)函数,在 run() 主循环的 Step 4 中逐门店调用。B 层使用INSERT ... ON CONFLICT DO UPDATE对biz.dws_assistant_task_monthly做 upsert,按(site_id, assistant_id, stat_month)唯一键聚合当月任务数据。C 层对dws.dws_member_assistant_relation_index的 6 个新增字段做 UPDATE ... FROM 子查询,按(site_id, assistant_id, member_id)聚合历史总计。两层统计独立事务,互不影响 - 修改结果:每次任务生成完成后自动更新统计数据,供看板和报表使用。统计失败仅记录日志不中断主流程
db/zqyy_app/migrations/2026-03-31__task_stats_tables.sql
- 变更类型:新增
- 原始原因:B 层月度统计需要持久化存储,按助教+月份维度汇总任务创建/完成/放弃/转移数量
- 思路分析:新建
biz.dws_assistant_task_monthly表,主键 BIGSERIAL,唯一约束(site_id, assistant_id, stat_month)。字段覆盖召回/回访/关系构建三种任务类型的创建数和完成数,以及放弃和转移计数。两个索引分别支持按门店+月份和按助教+月份的查询模式 - 修改结果:为任务引擎提供月度统计持久化能力,支持助教绩效看板展示
db/etl_feiqiu/migrations/2026-03-31__relation_index_task_stats.sql
- 变更类型:新增
- 原始原因:C 层历史总计需要在关系指数表上新增字段,记录每对助教-客户关系的累计任务数据
- 思路分析:使用
ALTER TABLE ADD COLUMN IF NOT EXISTS安全添加 6 个 INT 字段(默认值 0),分别记录召回/回访/总计的创建和完成数。包含 ROLLBACK 注释便于回滚 - 修改结果:关系指数表扩展为同时承载指数数据和任务统计数据,供客户详情页和任务分析使用
docs/database/ddl/zqyy_app__biz.sql
- 变更类型:修改(简要)
- DDL 基线已合并新建表定义
验证 SQL
-- 1. 验证 dws_assistant_task_monthly 表存在且结构正确
SELECT column_name, data_type, is_nullable, column_default
FROM information_schema.columns
WHERE table_schema = 'biz' AND table_name = 'dws_assistant_task_monthly'
ORDER BY ordinal_position;
-- 2. 验证 relation_index 新增字段
SELECT column_name, data_type, is_nullable, column_default
FROM information_schema.columns
WHERE table_schema = 'dws' AND table_name = 'dws_member_assistant_relation_index'
AND column_name IN ('recall_created_total', 'recall_completed_total',
'follow_up_created_total', 'follow_up_completed_total',
'total_created', 'total_completed');
-- 3. 验证唯一约束
SELECT conname, contype
FROM pg_constraint
WHERE conrelid = 'biz.dws_assistant_task_monthly'::regclass AND contype = 'u';