Files
Neo-ZQYY/docs/audit/changes/2026-03-24__p18-task-engine-dashboard.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

7.6 KiB
Raw Blame History

变更审计记录P18 任务引擎运营看板实施

字段
日期 2026-03-24 07:44:01
Prompt-ID P20260324-072446
Session-ID
Session 路径

操作摘要

基于已评审通过的 P18 PRDv2.1-reviewed实施管理后台任务引擎运营看板。新增 3 个前端页面转移日志、待审核任务、参数管理、9 个后端 API 端点、12 个 Pydantic Schema、1 个 DDL 迁移trigger_jobs.last_stats + cfg_task_generator_params.updated_by

变更文件清单

DDL 迁移

  • db/zqyy_app/migrations/2026-03-24__p18_task_engine_dashboard.sql — trigger_jobs 新增 last_stats JSONBcfg_task_generator_params 新增 updated_by BIGINT
  • docs/database/ddl/zqyy_app__biz.sql — DDL 基线合并

后端(新建)

  • apps/backend/app/schemas/admin_task_engine.py — 12 个 Pydantic v2 模型
  • apps/backend/app/routers/admin_task_engine.py — 9 个端点(转移日志分页+历史、待审核任务分页+重新分配+关闭、参数管理 CRUD

后端(修改)

  • apps/backend/app/main.py — 追加 admin_task_engine router 注册

前端(新建)

  • apps/admin-web/src/api/taskEngine.ts — API 调用模块(类型定义 + 9 个 API 函数)
  • apps/admin-web/src/pages/TransferLog.tsx — 客户转移日志页面
  • apps/admin-web/src/pages/PendingReview.tsx — 待审核任务页面
  • apps/admin-web/src/pages/TaskEngineConfig.tsx — 参数管理页面

前端(修改)

  • apps/admin-web/src/App.tsx — 新增任务引擎菜单组 + 3 个路由 + defaultOpenKeys

一次性脚本

  • scripts/ops/_p18_migrate.py — DDL 迁移执行脚本(已执行完毕)

本次对话文件变更

新增文件

  • docs/audit/prompt_logs/prompt_log_20260324_072446.md
  • docs/audit/session_logs/2026-03/24/29_3bf23309_071526/main_01_83361313.md

风险点与待办

  1. ⚠️ sites 表 JOIN 条件已修复(s.site_id = t.site_id),但需联调验证
  2. ⚠️ FDW 姓名关联member_name/assistant_name尚未实现当前返回空字符串前端降级显示 ID
  3. ⚠️ 权重参数联合校验依赖数据库事务,需验证并发场景
  4. ⚠️ DDL 基线已合并(docs/database/ddl/zqyy_app__biz.sql

DDL/迁移状态

  • 迁移文件:db/zqyy_app/migrations/2026-03-24__p18_task_engine_dashboard.sql
  • 新增字段:biz.trigger_jobs.last_stats (JSONB)、biz.cfg_task_generator_params.updated_by (BIGINT)
  • 迁移脚本使用 ADD COLUMN IF NOT EXISTS,幂等安全
  • DDL 基线:已合并到 docs/database/ddl/zqyy_app__biz.sql

改动注解

db/zqyy_app/migrations/2026-03-24__p18_task_engine_dashboard.sql

  • 变更类型:新增
  • 原始原因P18 运营看板需要 trigger_jobs 表记录最近一次执行统计last_stats JSONB以及 cfg_task_generator_params 表记录修改人updated_by BIGINT用于审计追溯
  • 思路分析:使用 ADD COLUMN IF NOT EXISTS 保证幂等性last_stats 为 JSONB 类型,灵活存储 created/replaced/skipped/transferred 等统计数字updated_by 为 BIGINT 对应 user_id
  • 修改结果trigger_jobs 表新增 1 字段cfg_task_generator_params 表新增 1 字段,均可空,不影响现有查询

apps/backend/app/schemas/admin_task_engine.py

  • 变更类型:新增
  • 原始原因P18 运营看板 9 个 API 端点需要请求/响应数据模型
  • 思路分析12 个 Pydantic v2 模型,按功能分组(转移日志 2 个、待审核任务 6 个、参数管理 4 个)。所有模型使用 str | None 联合类型语法,字段默认值合理(如 member_name 默认空字符串,兼容 FDW 姓名未关联场景)
  • 修改结果:为 admin_task_engine router 提供完整的类型安全数据模型

apps/backend/app/routers/admin_task_engine.py

  • 变更类型:新增
  • 原始原因P18 运营看板需要 9 个管理端 API 端点,覆盖转移日志查看、待审核任务管理、参数配置 CRUD
  • 思路分析:路由前缀 /api/admin/task-engine,写操作通过 _require_super_admin() 限制仅超级管理员;读操作通过 _filter_site_id() 实现门店管理员数据隔离。SQL 使用参数化查询防注入sites 表 JOIN 使用 s.site_id(已修复原 s.id 错误。权重参数更新后做联合校验w_rs + w_ms + w_ml = 1.0
  • 修改结果9 个端点全部注册,含完整的权限校验、门店隔离、事务管理和错误处理

apps/backend/app/main.py

  • 变更类型:修改
  • 原始原因:新增的 admin_task_engine router 需要在 FastAPI 应用中注册
  • 思路分析:在 import 行和 app.include_router() 调用中追加 admin_task_engine保持与现有 router 注册模式一致
  • 修改结果admin_task_engine router 已注册9 个端点可通过 /docs 访问

apps/admin-web/src/api/taskEngine.ts

  • 变更类型:新增
  • 原始原因:前端 3 个页面需要与后端 9 个 API 端点通信
  • 思路分析:定义 TypeScript 接口TransferLogItem/Page、PendingReviewItem/Page、ConfigParam/List和 9 个 API 函数,使用 apiClientAxios 实例)统一处理 JWT 认证和错误
  • 修改结果:前端 API 层完整覆盖后端所有端点

apps/admin-web/src/pages/TransferLog.tsx

  • 变更类型:新增
  • 原始原因:运营团队需要查看客户转移日志,按门店/时间/助教筛选
  • 思路分析Ant Design Table 分页表格 + RangePicker 日期筛选 + InputNumber 门店/助教 ID 筛选。guard_checks JSON 渲染为彩色标签(通过/未通过。transfer_reason 映射中文标签
  • 修改结果转移日志页面完整可用支持分页、筛选、guard_checks 可视化

apps/admin-web/src/pages/PendingReview.tsx

  • 变更类型:新增
  • 原始原因:运营团队需要审核 pending_review 状态的任务,执行重新分配或关闭操作
  • 思路分析:分页表格 + 重新分配弹窗(输入目标助教 ID+ 关闭弹窗(填写原因)+ 转移历史抽屉(点击客户名查看)。操作列仅超级管理员可见(isSuperAdmin 判断)
  • 修改结果:待审核任务页面完整可用,含权限控制和完整的操作流程

apps/admin-web/src/pages/TaskEngineConfig.tsx

  • 变更类型:新增
  • 原始原因:运营团队需要按门店调整任务生成参数,监控参数配置
  • 思路分析:全局默认 + 门店覆盖参数表格行内编辑单个参数值。权重参数w_rs/w_ms/w_ml使用独立的卡片编辑弹窗前端预校验三者之和 = 1.0。新增门店覆盖通过 Select 选择参数名 + InputNumber 输入值。全局默认参数禁止删除
  • 修改结果:参数管理页面完整可用,含行内编辑、权重卡片编辑、新增/删除门店覆盖

apps/admin-web/src/App.tsx

  • 变更类型:修改
  • 原始原因:新增的 3 个页面需要在侧边栏导航和路由中注册
  • 思路分析:新增 ApartmentOutlined 图标 import、3 个页面 import、task-engine-group 菜单组(含 3 个子菜单、3 个 Route、defaultOpenKeys 补充 task-engine-group当路径以 /task-engine/ 开头时自动展开)
  • 修改结果侧边栏新增「任务引擎」菜单组3 个子页面路由正常工作

scripts/ops/_p18_migrate.py

  • 变更类型:新增
  • 原始原因DDL 迁移需要执行脚本
  • 思路分析:一次性脚本,连接测试库执行迁移 SQL
  • 修改结果:迁移已执行完毕,脚本保留用于记录

验证建议

  1. 启动后端 uvicorn app.main:app --reload,访问 /docs 确认 9 个端点注册
  2. 启动前端 pnpm dev,验证侧边栏「任务引擎」菜单组和 3 个页面路由
  3. 用 super_admin JWT 测试写操作,用 site_admin JWT 验证 403