Files
Neo-ZQYY/docs/audit/changes/2026-03-31__task-engine-overhaul.md
Neo 14a12342b5 chore(audit): 补追 96 份未入仓审计孤本 — 覆盖 2026-02-26 ~ 2026-04-08
这些审计记录原本堆积在 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>
2026-04-20 06:35:42 +08:00

6.1 KiB
Raw Blame History

变更审计记录:任务引擎改造 — 参数调优 + 客户级升级/转移 + 任务统计写入

字段
日期 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 UPDATEbiz.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';