Files
Neo-ZQYY/docs/audit/changes/2026-03-29__coach-detail-style-aggregation-fix.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

64 lines
4.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 变更审计记录:助教详情页样式修复 + 数据聚合修复 + 关系指数回测支持
| 字段 | 值 |
|------|-----|
| 日期 | 2026-03-29 12:41:38 |
| Prompt-ID | P20260329-122744 |
## 操作摘要
修复助教详情页的样式和数据聚合问题TASK_TYPE_MAP 的 CSS 类名对齐 WXSS、label 文案调整fdw_queries 中 `get_coach_top_customers` 修复多卡膨胀CTE 先聚合再 JOINcoach-detail.wxml 近期服务明细限制最多显示 5 条。同时修复 `relation_index_task.py` 的 SQL 语法错误f-string 拼接 INSERT 参数)并增加 P19 回测模式支持lookback_days 60→90、as_of_date 替代 NOW()、calc_time 参数化写入)。
## 变更文件清单
| 文件 | 变更类型 | 风险 |
|------|----------|------|
| `apps/backend/app/services/coach_service.py` | 修改 | 中 |
| `apps/backend/app/services/fdw_queries.py` | 修改 | 高 |
| `apps/miniprogram/miniprogram/pages/coach-detail/coach-detail.wxml` | 修改 | 低 |
| `apps/etl/connectors/feiqiu/tasks/dws/index/relation_index_task.py` | 修改 | 高 |
## 改动注解
### `apps/backend/app/services/coach_service.py`
- 变更类型:修改
- 原始原因TASK_TYPE_MAP 中的 CSS class 值(`tag-recall`/`tag-callback`/`tag-relationship`)与小程序 WXSS 中实际定义的类名不匹配导致任务标签样式不生效label 文案需要更贴合业务语义
- 思路分析:将 class 值改为 `high-priority`/`priority`/`callback`/`relationship` 以匹配 WXSS 类名定义label 从 `回访``客户回访``紧急召回``高优先召回`,新增 `relationship_building``关系构建`
- 修改结果:任务类型标签在小程序中正确显示对应颜色样式,文案更准确
### `apps/backend/app/services/fdw_queries.py`
- 变更类型:修改
- 原始原因:`get_coach_top_customers` 直接 JOIN `v_dim_member_card_account` 导致同一客户因持有多张卡而出现多行多卡膨胀TOP 客户列表数据重复
- 思路分析:引入 CTE `card_balance`,先按 `tenant_member_id``GROUP BY` + `SUM(balance)` 聚合所有卡余额,再 LEFT JOIN 到主查询。这是 `dim_member_card_account` 多卡膨胀的标准修复模式(参见 frontend-backend-integration 踩坑记录 2026-03-29
- 修改结果:每个客户在 TOP 列表中只出现一行,余额为所有卡的合计值,消除了行膨胀问题
### `apps/miniprogram/miniprogram/pages/coach-detail/coach-detail.wxml`
- 变更类型:修改
- 原始原因:近期服务明细列表无数量限制,数据量大时页面过长影响体验
- 思路分析:添加 `wx:if="{{index < 5}}"` 条件渲染,限制默认最多显示 5 条记录
- 修改结果:近期服务明细默认只展示前 5 条,页面布局更紧凑
### `apps/etl/connectors/feiqiu/tasks/dws/index/relation_index_task.py`
- 变更类型:修改
- 原始原因Prompt log 显示 `DWS_RELATION_INDEX` 执行失败SQL 语法错误 `在 "{" 或附近的`——`_save_relation_rows` 中 INSERT 语句的时间戳占位符使用了 Python f-string 拼接但格式不正确
- 思路分析:
1. **SQL 语法修复**:将 INSERT SQL 改为 f-string根据 `use_param_time` 标志动态选择 `%s, %s, %s`(参数化)或 `NOW(), NOW(), NOW()`(直接 SQL
2. **P19 回测模式支持**`execute()``now` 改为优先读取 `context.as_of_date`(回测时间点),正常模式仍用 `datetime.now()`
3. **lookback_days 60→90**所有子指数RS/OS/MS/ML的默认回溯天数从 60 天扩展到 90 天
4. **calc_time 参数化写入**`_save_relation_rows` 新增 `calc_time` 关键字参数,回测模式按 `calc_time` 删除旧数据(保留其他快照),正常模式按 `site_id` 全量刷新
5. **参数元组重构**:将 `cur.execute(insert_sql, (...))` 改为先构建 `params` 元组,回测模式追加 3 个 `calc_time`
- 修改结果:修复了 SQL 语法错误使任务可正常执行;支持 P19 回测场景的多快照写入;回溯窗口扩大到 90 天覆盖更多历史数据
## 合规检查
| 检查项 | 状态 |
|--------|------|
| 新增迁移 SQL | 无 |
| DDL 基线更新 | ⚠️ DDL 基线待合并(`has_ddl_baseline: false` |
| OpenAPI spec 同步 | 无需(`api_changed: false` |
| 文档同步 | `relation_index_task.py` 需同步 ETL 任务文档 |
## 文档同步待办
- [ ] `apps/etl/connectors/feiqiu/docs/etl_tasks/` — 更新 `relation_index_task` 的参数说明lookback_days 默认值 60→90、新增 calc_time/as_of_date 回测支持)