在前后端开发联调前 的提交20260223

This commit is contained in:
Neo
2026-02-23 23:02:20 +08:00
parent 254ccb1e77
commit fafc95e64c
1142 changed files with 10366960 additions and 36957 deletions

View File

@@ -0,0 +1,269 @@
# 数据依赖矩阵(页面 → 数据表映射)
> 生成日期2026-02-23
> 基于 PRD 审阅 Q&A 两轮结果 + 真实数据库现状
---
## 图例
| 标记 | 含义 |
|------|------|
| ✅ | ETL 库已有表,可直接通过 FDW 映射 |
| 🔧 | ETL 库已有表但需扩展字段 |
| 🆕 | 需要新建的 ETL 表DWS/DWD 层) |
| 📱 | 需要新建的业务库表(`test_zqyy_app` |
| 🤖 | 需要 AI 应用调用(百炼) |
| ⏰ | 需要后台轮询/触发器机制 |
---
## 一、小程序页面 → 数据源
### task-list.html任务列表
| 数据需求 | 数据源 | 状态 |
|---------|--------|------|
| 助教任务列表 | `zqyy_app.biz.coach_tasks` | 📱 新建 |
| 任务优先级max(WBI,NCI) | `dws.dws_member_winback_index` + `dws.dws_member_newconv_index` | ✅ FDW |
| 客户-助教关系RS/OS | `dws.dws_member_assistant_relation_index` | ✅ FDW |
| 客户基本信息 | `dwd.dim_member` | ✅ FDW |
| 助教基本信息 | `dwd.dim_assistant` | ✅ FDW |
| 任务置顶/放弃状态 | `zqyy_app.biz.coach_tasks` | 📱 新建 |
| 绩效计算快照 | `dws.dws_assistant_salary_calc` | ✅ FDW |
| 定档业绩配置 | `dws.cfg_performance_tier` | ✅ FDW |
| 助教等级单价 | `dws.cfg_assistant_level_price` | ✅ FDW |
| 跳档激励展示 | `dws.cfg_performance_tier` + `dws.dws_assistant_salary_calc` | ✅ FDW |
| 定档折算惩罚 | `dws.dws_assistant_daily_detail`(需扩展) | 🔧 扩展 |
### task-detail.html任务详情
| 数据需求 | 数据源 | 状态 |
|---------|--------|------|
| 任务详情 | `zqyy_app.biz.coach_tasks` | 📱 新建 |
| 客户全信息 | `dwd.dim_member` + `dws.dws_member_consumption_summary` | ✅ FDW |
| 客户-助教亲密度 | `dws.dws_member_assistant_intimacy` | ✅ FDW |
| 近期服务记录 | `dwd.dwd_assistant_service_log` | ✅ FDW |
| 备注列表 | `zqyy_app.biz.notes` | 📱 新建 |
| AI 消费习惯分析 | 应用 3 返回结果缓存 | 📱🤖⏰ |
| AI 关系分析/任务建议 | 应用 4 返回结果缓存 | 📱🤖⏰ |
| AI 话术参考 | 应用 5 返回结果缓存 | 📱🤖⏰ |
| AI 备注星级 | 应用 6 返回结果 | 📱🤖⏰ |
| 客户喜好标签(🎱斯🀅🎤) | `dwd.dwd_table_fee_log`(按房间类型统计) | ✅ FDW |
### performance.html我的绩效
| 数据需求 | 数据源 | 状态 |
|---------|--------|------|
| 收入与业绩档位 | `dws.dws_assistant_salary_calc` | ✅ FDW |
| 服务记录明细 | `dwd.dwd_assistant_service_log` | ✅ FDW |
| 我的新客 | `dws.dws_assistant_customer_stats`(首次服务+次数过滤) | ✅ FDW |
| 我的常客 | `dws.dws_assistant_customer_stats` | ✅ FDW |
| 定档折算惩罚展示 | `dws.dws_assistant_daily_detail`(需扩展) | 🔧 扩展 |
### performance-records.html业绩明细
| 数据需求 | 数据源 | 状态 |
|---------|--------|------|
| 全部业绩记录 | `dwd.dwd_assistant_service_log` | ✅ FDW |
| 定档折算展示 | `dws.dws_assistant_daily_detail`(需扩展) | 🔧 扩展 |
| 按天/月归总 | 后端聚合查询 | — |
### board-finance.html财务看板
| 数据需求 | 数据源 | 状态 |
|---------|--------|------|
| 财务日报 | `dws.dws_finance_daily_summary` | ✅ FDW |
| 收入结构 | `dws.dws_finance_income_structure` | ✅ FDW |
| 充值汇总 | `dws.dws_finance_recharge_summary` | ✅ FDW |
| 折扣明细 | `dws.dws_finance_discount_detail` | ✅ FDW |
| 支出汇总 | `dws.dws_finance_expense_summary` | ✅ FDW |
| 平台结算 | `dws.dws_platform_settlement` | ✅ FDW |
| AI 财务洞察 | 应用 2 返回结果缓存 | 📱🤖⏰ |
| 环比数据 | 后端聚合计算 | — |
### board-customer.html客户看板
| 数据需求 | 数据源 | 状态 |
|---------|--------|------|
| 最应召回WBI 排序) | `dws.dws_member_winback_index` | ✅ FDW |
| 最大消费潜力SPI 排序) | `dws.dws_member_spending_power_index` | 🆕 新建 |
| 最高余额 | `dws.dws_member_consumption_summary` | ✅ FDW |
| 最近充值 | `dwd.dwd_recharge_order` | ✅ FDW |
| 最高消费 60 天 | `dws.dws_member_consumption_summary` | ✅ FDW |
| 最频繁 60 天 | `dws.dws_member_consumption_summary` | ✅ FDW |
| 最近到店 | `dws.dws_member_visit_detail` | ✅ FDW |
| 最专一RS 最大值) | `dws.dws_member_assistant_relation_index` | ✅ FDW |
| 客户喜好标签 | `dwd.dwd_table_fee_log` | ✅ FDW |
### board-coach.html助教看板
| 数据需求 | 数据源 | 状态 |
|---------|--------|------|
| 定档业绩排序 | `dws.dws_assistant_salary_calc` | ✅ FDW |
| 工资排序 | `dws.dws_assistant_salary_calc` | ✅ FDW |
| 高客源储值额 | `dws.dws_member_assistant_relation_index` + `dws.dws_member_consumption_summary` | ✅ FDW |
| 任务完成数 | `zqyy_app.biz.coach_tasks`(统计已完成) | 📱 新建 |
| 助教月度汇总 | `dws.dws_assistant_monthly_summary` | ✅ FDW |
### customer-detail.html客户详情
| 数据需求 | 数据源 | 状态 |
|---------|--------|------|
| 客户基本信息 | `dwd.dim_member` + `dwd.dim_member_card_account` | ✅ FDW |
| 消费汇总 | `dws.dws_member_consumption_summary` | ✅ FDW |
| 消费记录(台桌结账) | `dwd.dwd_settlement_head` + `dwd.dwd_table_fee_log` | ✅ FDW |
| 消费记录(商城订单) | `dwd.dwd_settlement_head` + `dwd.dwd_store_goods_sale` | ✅ FDW |
| 消费记录(充值) | `dwd.dwd_recharge_order` | ✅ FDW |
| 指数总览WBI/NCI/SPI | 各指数表 | ✅🆕 FDW |
| 备注列表 | `zqyy_app.biz.notes` | 📱 新建 |
| AI 消费习惯分析 | 应用 3 缓存 | 📱🤖⏰ |
| 生日信息 | `zqyy_app.biz.notes`type=birthday | 📱 新建 |
### coach-detail.html助教详情
| 数据需求 | 数据源 | 状态 |
|---------|--------|------|
| 助教基本信息 | `dwd.dim_assistant` | ✅ FDW |
| 客户数RS>2 | `dws.dws_member_assistant_relation_index` | ✅ FDW |
| 工龄 | `dwd.dim_assistant.hire_date` | ✅ FDW |
| 备注列表 | `zqyy_app.biz.notes` | 📱 新建 |
### chat.htmlAI 对话)
| 数据需求 | 数据源 | 状态 |
|---------|--------|------|
| 对话记录 | `zqyy_app.biz.ai_conversations` | 📱 新建 |
| 来源页面上下文 | 前端传入 | — |
| AI 应用 1 调用 | 百炼 API | 🤖 |
### notes.html备注管理
| 数据需求 | 数据源 | 状态 |
|---------|--------|------|
| 备注列表 | `zqyy_app.biz.notes` | 📱 新建 |
### chat-history.html对话历史
| 数据需求 | 数据源 | 状态 |
|---------|--------|------|
| 历史对话列表 | `zqyy_app.biz.ai_conversations` | 📱 新建 |
### login/apply/reviewing 等登录流程页
| 数据需求 | 数据源 | 状态 |
|---------|--------|------|
| 用户信息 | `zqyy_app.auth.users` | 📱 新建(重构现有 public.users |
| 微信登录 | 微信 APIcode2Session | — |
| 申请记录 | `zqyy_app.auth.user_applications` | 📱 新建 |
---
## 二、租户管理后台 → 数据源
| 功能 | 数据源 | 状态 |
|------|--------|------|
| 用户审核列表 | `zqyy_app.auth.user_applications` + `zqyy_app.auth.users` | 📱 新建 |
| 用户-助教关联建议 | `dwd.dim_assistant`通过球房ID+手机号匹配) | ✅ FDW |
| 球房ID映射 | `zqyy_app.auth.site_code_mapping` | 📱 新建 |
| Excel 上传-财务支出 | `dws.dws_finance_expense_summary`(或新建 staging 表) | 🔧/📱 |
| Excel 上传-团购收入 | `dws.dws_platform_settlement`(或新建 staging 表) | 🔧/📱 |
| Excel 上传-助教奖罚 | `zqyy_app.biz.salary_adjustments` | 📱 新建 |
| Excel 上传-充值业绩归属 | `dws.dws_assistant_recharge_commission`(或新建 staging 表) | 🔧/📱 |
---
## 三、后台轮询/触发器任务 → 数据源
| 触发器/轮询任务 | 触发条件 | 数据源 | 状态 |
|---------------|---------|--------|------|
| 任务生成器 | 每日 4:00 后首次运行 | 全部指数表 + `coach_tasks` | 📱⏰ |
| 任务状态轮询 | 每小时 | `coach_tasks` + 有效期检查 | 📱⏰ |
| 召回完成检测 | ETL 数据更新后 | `dwd.dwd_assistant_service_log` + `coach_tasks` | ⏰ |
| 数据回溯(备注重分类) | 召回完成时 | `notes` + `coach_tasks` | 📱⏰ |
| AI 应用 2 财务洞察 | 每日 | 财务 DWS 表 | 🤖⏰ |
| AI 应用 3 消费习惯 | 客户新增消费时 | DWD 订单明细 | 🤖⏰ |
| AI 应用 4 关系分析 | 助教参与新结算时 | DWD 订单明细 | 🤖⏰ |
| AI 应用 5 话术 | 应用 4 调用时 | 应用 4 输入+输出 | 🤖⏰ |
| AI 应用 6 备注评分 | 回访任务完成时 | 备注 + 客户信息 | 🤖⏰ |
---
## 四、汇总:需要新建/扩展的数据对象
### ETL 库(`test_etl_feiqiu`)— 新建
| 表名 | Schema | 说明 |
|------|--------|------|
| `dws_member_spending_power_index` | dws | SPI 消费力指数 |
| `dws_assistant_order_contribution` | dws | 助教订单流水四项统计 |
| `app.*`RLS 视图) | app | 全部 FDW 映射表的 RLS 视图层 |
### ETL 库 — 扩展
| 表名 | 扩展内容 |
|------|---------|
| `dws_member_consumption_summary` | 增加 30/60/90 天充值次数/金额、次均消费 |
| `dws_assistant_daily_detail` | 增加定档折算惩罚字段penalty_minutes、penalty_reason、is_exempt |
### 业务库(`test_zqyy_app`)— 新建
| 表名 | Schema | 说明 |
|------|--------|------|
| `users`(重构) | auth | 小程序用户(增加 status、wx_openid、wx_avatar 等) |
| `user_applications` | auth | 用户申请记录 |
| `site_code_mapping` | auth | 球房ID ↔ site_id 映射 |
| `user_assistant_bindng` | auth | 用户-助教绑定关系 |
| `coach_tasks` | biz | 助教任务(类型、优先级、状态、有效期等) |
| `coach_task_history` | biz | 任务变更历史(关闭/新建追溯) |
| `notes` | biz | 统一备注表type 区分) |
| `ai_conversations` | biz | AI 对话记录 |
| `ai_messages` | biz | AI 对话消息明细 |
| `ai_cache` | biz | AI 应用 2-6 结果缓存 |
| `salary_adjustments` | biz | 助教奖罚明细Excel 上传) |
| `excel_upload_log` | biz | Excel 上传记录与冲突处理日志 |
| `trigger_jobs` | biz | 触发器/轮询任务配置与执行日志 |
### FDW 映射(`test_zqyy_app.fdw_etl`
需要映射的 ETL 表(通过 `app` schema RLS 视图):
| 来源表 | 用途 |
|--------|------|
| `dwd.dim_member` | 客户基本信息 |
| `dwd.dim_assistant` | 助教基本信息 |
| `dwd.dim_member_card_account` | 会员卡余额 |
| `dwd.dim_table` | 台桌信息 |
| `dwd.dwd_settlement_head` | 结算主表 |
| `dwd.dwd_table_fee_log` | 台费明细 |
| `dwd.dwd_assistant_service_log` | 助教服务记录 |
| `dwd.dwd_recharge_order` | 充值订单 |
| `dwd.dwd_store_goods_sale` | 商品销售 |
| `dws.dws_member_consumption_summary` | 客户消费汇总 |
| `dws.dws_member_visit_detail` | 客户到店明细 |
| `dws.dws_member_winback_index` | WBI 指数 |
| `dws.dws_member_newconv_index` | NCI 指数 |
| `dws.dws_member_recall_index` | 召回指数 |
| `dws.dws_member_spending_power_index` | SPI 指数(新建后映射) |
| `dws.dws_member_assistant_relation_index` | RS/OS/MS/ML 指数 |
| `dws.dws_member_assistant_intimacy` | 亲密度 |
| `dws.dws_assistant_daily_detail` | 助教日明细 |
| `dws.dws_assistant_monthly_summary` | 助教月汇总 |
| `dws.dws_assistant_salary_calc` | 薪资计算 |
| `dws.dws_assistant_customer_stats` | 助教客户统计 |
| `dws.dws_assistant_order_contribution` | 助教订单流水(新建后映射) |
| `dws.dws_assistant_finance_analysis` | 助教财务分析 |
| `dws.dws_finance_daily_summary` | 财务日报 |
| `dws.dws_finance_income_structure` | 收入结构 |
| `dws.dws_finance_recharge_summary` | 充值汇总 |
| `dws.dws_finance_discount_detail` | 折扣明细 |
| `dws.dws_finance_expense_summary` | 支出汇总 |
| `dws.dws_platform_settlement` | 平台结算 |
| `dws.dws_assistant_recharge_commission` | 充值业绩归属 |
| `dws.cfg_performance_tier` | 定档配置 |
| `dws.cfg_assistant_level_price` | 助教等级单价 |
| `dws.cfg_bonus_rules` | 奖金规则 |
| `dws.cfg_index_parameters` | 指数参数配置 |
| `dws.dws_order_summary` | 订单汇总 |
---

View File

@@ -0,0 +1,332 @@
# SPEC 任务拆分总览
> 生成日期2026-02-23
> 按依赖优先级排序,按 SPEC 边界分组,面向 Kiro SPEC 工作流
---
## 执行顺序总览
```
P1 基础设施层(数据库 Schema + FDW + RLS
P2 ETL 扩展层DWS 新表 + 字段扩展 + SPI 指数)
P3 用户认证层(微信登录 + 申请审核 + 权限体系)
P4 核心业务层(任务系统 + 备注系统 + 触发器机制)
P5 AI 集成层(百炼对接 + 对话系统 + 轮询缓存)
P6 小程序前端-任务模块task-list + task-detail + notes
P7 小程序前端-绩效模块performance + performance-records
P8 小程序前端-看板模块board-finance + board-customer + board-coach
P9 小程序前端-详情模块customer-detail + coach-detail + chat
P10 租户管理后台(独立 Web 应用 + Excel 上传)
P11 部署与上线(环境配置 + 监控 + 灰度)
```
---
## P1基础设施层 — 数据库 Schema + FDW + RLS
### SPEC 名称建议:`miniapp-db-foundation`
### 需求概述
为小程序建立完整的数据库基础设施,包括业务库 Schema 规划、ETL 库 RLS 视图层、FDW 外部表映射。这是所有后续 SPEC 的硬依赖。
### 关键交付物
1. `test_zqyy_app` 新建 Schema`auth`(用户认证)、`biz`(业务数据)
2. `test_etl_feiqiu.app` Schema为所有需要 FDW 映射的 DWS/DWD 表创建 RLS 视图(按 `site_id` 隔离)
3. `test_zqyy_app.fdw_etl` Schema创建全部 FDW 外部表(约 33 张,见数据依赖矩阵)
4. 迁移脚本:`db/zqyy_app/migrations/` + `db/etl_feiqiu/migrations/`
### 依赖
- 无前置依赖(第一个 SPEC
### 验收标准
- `fdw_etl` 下所有外部表可正常 SELECT
- RLS 视图按 `site_id` 正确过滤
- `auth``biz` Schema 存在且权限正确
---
## P2ETL 扩展层 — DWS 新表 + 字段扩展 + SPI 指数
### SPEC 名称建议:`etl-dws-miniapp-extensions`
### 需求概述
扩展 ETL 的 DWS 层以支持小程序的数据需求,包括新建 SPI 指数表、助教订单流水统计表,以及扩展现有表的字段。
### 关键交付物
1. 新建 `dws.dws_member_spending_power_index`SPI 消费力指数,含 Level/Speed/Stability 子分)
2. 新建 `dws.dws_assistant_order_contribution`(助教订单流水四项统计)
3. 扩展 `dws.dws_member_consumption_summary`:增加 30/60/90 天充值次数/金额、次均消费
4. 扩展 `dws.dws_assistant_daily_detail`:增加定档折算惩罚字段
5. 新建 ETL 任务:`SpendingPowerIndexTask``AssistantOrderContributionTask`
6. 扩展现有 ETL 任务以填充新字段
7. 更新 `app` Schema RLS 视图 + FDW 映射(新表)
### 依赖
- P1FDW 基础设施就绪后才能验证端到端)
### 验收标准
- SPI 指数可正常计算并写入,展示分 0-10 分布合理
- 四项助教流水统计数值正确(对照 PRD 示例验算)
- 消费汇总表新字段有值
- 定档折算惩罚字段在符合条件的订单上正确填充
### 四项统计命名方案Q1.3
| 序号 | 中文名 | 英文字段名 | 含义 |
|------|--------|-----------|------|
| 1 | 订单总流水 | `order_gross_revenue` | 助教参与订单的全部流水 |
| 2 | 订单净流水 | `order_net_revenue` | 订单总流水 - 助教服务分成 |
| 3 | 时效贡献流水 | `time_weighted_revenue` | 按服务时长折算的助教个人贡献 |
| 4 | 时效净贡献 | `time_weighted_net_revenue` | 时效贡献流水 - 助教服务分成 |
---
## P3用户认证层 — 微信登录 + 申请审核 + 权限体系
### SPEC 名称建议:`miniapp-auth-system`
### 需求概述
构建小程序的完整用户认证体系包括微信登录、用户申请、审核流程、RBAC 权限、用户-助教绑定。
### 关键交付物
1. 新建表:`auth.users`(重构,增加 wx_openid、status、site_id 等)、`auth.user_applications``auth.site_code_mapping``auth.user_assistant_binding`
2. 重构现有 `public.roles``public.permissions``public.user_roles``public.role_permissions` 迁移至 `auth` Schema
3. 后端 API微信 code2Session 登录、用户申请提交、JWT 签发
4. 后端 API用户状态查询审核中/通过/拒绝)
5. 权限中间件:基于角色的 API 访问控制
### 依赖
- P1`auth` Schema 已创建)
### 验收标准
- 微信登录 → 新用户自动创建申请记录
- 申请状态正确流转pending → approved/rejected
- JWT 签发与验证正常
- 权限中间件正确拦截无权请求
---
## P4核心业务层 — 任务系统 + 备注系统 + 触发器机制
### SPEC 名称建议:`miniapp-core-business`
### 需求概述
实现小程序的核心业务逻辑:助教任务生成/管理、备注系统、后台触发器/轮询机制。
### 关键交付物
#### 任务系统
1. 新建表:`biz.coach_tasks``biz.coach_task_history`
2. 任务生成器:每日 4:00 后运行,基于指数计算为每个助教分配任务
3. 任务类型:高优先召回、优先召回、客户回访、关系构建(优先级从高到低)
4. 任务状态机:有效/无效 + 有效期机制
5. 48 小时回访滞留逻辑
6. 召回完成检测ETL 数据到达后自动标记)
7. 数据回溯机制(召回完成后回溯备注分类)
8. 任务置顶/放弃 API
#### 备注系统
9. 新建表:`biz.notes`type 区分:普通/回访/生日/放弃原因)
10. 备注 CRUD API
11. 生日信息隔离存储(不被 ETL 数据覆盖)
#### 触发器机制
12. 新建表:`biz.trigger_jobs`(触发器配置与执行日志)
13. 轮询调度框架:支持按条件触发(数据变更、定时、事件驱动)
14. 任务状态轮询(每小时检查有效期)
### 依赖
- P1数据库基础
- P2指数数据可用用于任务生成器
- P3用户认证知道当前助教身份
### 验收标准
- 任务生成器正确按指数分配 4 种类型任务
- 同客户-助教-类型跳过,不同类型关闭旧任务+新建
- 48 小时滞留机制正常工作
- 召回完成后自动标记任务完成
- 数据回溯正确将普通备注重分类为回访备注
- 备注 CRUD 正常,生日信息独立存储
---
## P5AI 集成层 — 百炼对接 + 对话系统 + 轮询缓存
### SPEC 名称建议:`miniapp-ai-integration`
### 需求概述
对接阿里云百炼 6 个 AI 应用,实现对话系统、后台轮询缓存、备注含金量评分。
### 关键交付物
1. 新建表:`biz.ai_conversations``biz.ai_messages``biz.ai_cache`
2. 百炼 API 封装:统一调用层(支持流式/非流式)
3. 应用 1通用对话 APISSE 流式返回)
4. 应用 2财务洞察轮询任务每日更新多时间维度交叉
5. 应用 3客户消费习惯分析轮询客户新增消费时触发
6. 应用 4客户-助教关系分析轮询(助教参与新结算时触发)
7. 应用 5话术参考应用 4 调用时联动)
8. 应用 6备注含金量评分回访任务完成时触发
9. AI 结果缓存读写 API
10. 页面内容文本化工具(将页面数据转为 AI 可读文本)
### 依赖
- P3用户身份AI 信息隔离需要传入身份参数)
- P4备注系统 + 触发器机制,应用 6 依赖回访任务完成事件)
### 验收标准
- 应用 1 流式对话正常
- 应用 2-5 轮询任务按条件触发并缓存结果
- 应用 6 在回访备注提交后自动评分6 分以上标记完成
- 所有 AI 对话记录持久化(含系统调用)
---
## P6小程序前端 — 任务模块
### SPEC 名称建议:`miniapp-fe-tasks`
### 需求概述
实现小程序任务相关页面task-list、task-detail、notes。
### 关键交付物
1. task-list.html → 小程序页面:任务列表(按优先级分组)、长按操作(置顶/放弃/AI、绩效计算展示、跳档激励
2. task-detail.html → 小程序页面任务详情、近期服务记录、备注入口、AI 分析展示(消费习惯/关系分析/话术/备注星级)
3. notes.html → 小程序页面:备注列表、删除(二次确认)
4. 通用组件:爱心 icon💖🧡💛💙、喜好标签🎱斯🀅🎤、跟/弃 icon、预估标记
### 依赖
- P3登录态
- P4任务/备注 API
- P5AI 缓存数据展示)
---
## P7小程序前端 — 绩效模块
### SPEC 名称建议:`miniapp-fe-performance`
### 需求概述
实现绩效相关页面performance、performance-records。
### 关键交付物
1. performance.html → 小程序页面:收入与业绩档位、服务记录明细(按天归总)、我的新客、我的常客
2. performance-records.html → 小程序页面:按口径展示全部业绩、定档折算惩罚展示
3. 后端 API绩效数据聚合查询按天/月归总)
### 依赖
- P3登录态
- P2定档折算字段
---
## P8小程序前端 — 看板模块
### SPEC 名称建议:`miniapp-fe-boards`
### 需求概述
实现三个看板页面board-finance、board-customer、board-coach。
### 关键交付物
1. board-finance.html → 小程序页面财务数据展示、多维度筛选交叉、环比、AI 洞察、预收资产条件隐藏
2. board-customer.html → 小程序页面8 个维度筛选(最应召回/最大消费潜力/最高余额/最近充值/最高消费/最频繁/最近到店/最专一)、类型筛选、前 100 名列表
3. board-coach.html → 小程序页面:维度筛选(定档业绩/工资/高客源储值/任务完成)、项目筛选、日期维度筛选
4. 后端 API看板数据聚合查询 + 缓存层
5. 通用组件:时间筛选器、维度筛选器、环比展示
### 依赖
- P3登录态 + 权限控制看板可见性)
- P2SPI 指数用于"最大消费潜力"排序)
- P5AI 财务洞察缓存)
---
## P9小程序前端 — 详情与对话模块
### SPEC 名称建议:`miniapp-fe-details`
### 需求概述
实现详情页和 AI 对话页customer-detail、coach-detail、customer-service-records、chat、chat-history。
### 关键交付物
1. customer-detail.html → 小程序页面:客户信息、消费记录(台桌/商城/充值三种样式、指数总览、备注、AI 入口
2. coach-detail.html → 小程序页面:助教信息、客户数、工龄、备注
3. customer-service-records.html → 小程序页面:服务记录列表
4. chat.html → 小程序页面AI 对话(流式展示)、来源展示、历史消息
5. chat-history.html → 小程序页面:对话历史列表
6. 后端 API消费记录分页查询懒加载每次 10 条)
### 依赖
- P3登录态
- P5AI 对话系统)
- P4备注系统
---
## P10租户管理后台
### SPEC 名称建议:`tenant-admin-web`
### 需求概述
独立的租户管理 Web 应用提供用户审核、用户管理、Excel 数据上传功能。
### 关键交付物
1. 独立 Web 应用React + Vite + Ant Design类似 `apps/admin-web/` 技术栈)
2. 租户管理员登录(独立凭据体系)
3. 用户审核页面申请列表、状态筛选、关联建议球房ID+手机号匹配助教)、审核操作
4. 用户管理页面:用户列表、身份编辑、店铺归属编辑
5. Excel 上传页面4 种模板(财务支出/团购收入/助教奖罚/充值业绩归属)
6. Excel 校验:必填、金额精度、表头格式、类型合法
7. 冲突处理:前端 diff 交互(逐条确认替换/保留)
8. 后端 APIExcel 解析、校验、冲突检测、确认写入
9. 新建表:`biz.salary_adjustments``biz.excel_upload_log`
### 依赖
- P1数据库基础
- P3用户体系共享 `auth` Schema
### 验收标准
- 租户管理员只能看到自己租户下的店铺数据
- Excel 上传校验正确,冲突 diff 交互可用
- 用户审核流程完整(申请→审核→分配身份→关联助教)
---
## P11部署与上线
### SPEC 名称建议:`deployment-launch`
### 需求概述
完成部署环境配置、监控、灰度上线。参考 `docs/deployment/LAUNCH-CHECKLIST.md`
### 关键交付物
1. 生产环境数据库初始化(`etl_feiqiu` + `zqyy_app`
2. FDW 生产环境配置
3. 后端部署FastAPI + Uvicorn
4. 小程序审核与发布
5. 租户管理后台部署
6. ETL 定时调度配置(每小时增量)
7. 监控与告警
8. 灰度上线方案
### 依赖
- P1-P10 全部完成
---
## 附SPEC 依赖关系图
```
P1 ─────┬──→ P2 ──→ P7
│ ↘
├──→ P3 ──→ P4 ──→ P5 ──→ P6
│ │ ↗ ↘
│ └──→ P10 P8 ←── P9
└──→ P11全部完成后
```
可并行的 SPEC 组合:
- P2 和 P3 可并行(无互相依赖)
- P6、P7、P8、P9 在后端 API 就绪后可部分并行
- P10 在 P1+P3 完成后即可启动,与 P4-P9 并行

View File

@@ -0,0 +1,63 @@
# P1基础设施层 — miniapp-db-foundation
> 优先级P1最高无前置依赖
> 预估工作量:中等
---
## 需求Requirements
### 用户故事
1. 作为后端开发者,我需要 `test_zqyy_app` 中有清晰的 Schema 划分(`auth` + `biz`),以便按功能组织业务表。
2. 作为后端开发者,我需要通过 FDW 从 `test_zqyy_app` 读取 ETL 库的 DWS/DWD 数据,以便小程序页面展示 ETL 计算结果。
3. 作为系统管理员,我需要 RLS 视图按 `site_id` 隔离数据,以便多门店数据安全。
### 验收标准
- AC1`test_zqyy_app` 中存在 `auth``biz` 两个 Schema权限配置正确
- AC2`test_etl_feiqiu.app` Schema 中为数据依赖矩阵列出的所有表创建了 RLS 视图
- AC3`test_zqyy_app.fdw_etl` 中所有外部表可正常 `SELECT`,数据与源表一致
- AC4RLS 视图在设置 `app.current_site_id` 后正确过滤数据
- AC5所有变更有对应的迁移脚本`db/zqyy_app/migrations/` + `db/etl_feiqiu/migrations/`
---
## 设计要点
### Schema 规划
```
test_zqyy_app
├── auth — 用户认证、权限、映射
├── biz — 业务数据任务、备注、AI、Excel
├── fdw_etl — FDW 外部表(只读,映射 ETL app schema
└── public — 保留现有系统管理表admin_users 等)
```
### RLS 实现方案
```sql
-- ETL 库 app schema 示例
CREATE VIEW app.v_dws_member_consumption_summary AS
SELECT * FROM dws.dws_member_consumption_summary
WHERE site_id = current_setting('app.current_site_id')::bigint;
```
### FDW 映射
- 使用 `postgres_fdw` 扩展
- 外部服务器指向 `test_etl_feiqiu`
- 外部表映射 `app` schema 的 RLS 视图(而非直接映射 dws/dwd 表)
- 映射表清单见 `00-数据依赖矩阵.md` 第四节
---
## 任务清单
- [ ] T1创建 `auth``biz` Schema + 权限配置
- [ ] T2`test_etl_feiqiu.app` 中创建全部 RLS 视图(约 33 张)
- [ ] T3配置 `postgres_fdw` 外部服务器和用户映射
- [ ] T4`fdw_etl` 中创建全部外部表
- [ ] T5编写验证脚本检查所有外部表可查询
- [ ] T6编写迁移脚本并归档

View File

@@ -0,0 +1,133 @@
# P10租户管理后台 — tenant-admin-web
> 优先级P10依赖 P1 + P3可与 P4-P9 并行)
> 预估工作量:中等
---
## 需求Requirements
### 用户故事
1. 作为租户管理员,我需要独立的 Web 管理后台来审核用户申请。
2. 作为租户管理员,我需要管理用户(编辑身份、店铺归属、关联助教)。
3. 作为租户管理员,我需要上传 Excel 数据(财务支出/团购收入/助教奖罚/充值业绩归属)。
4. 作为租户管理员,上传 Excel 时如果发现主键冲突,我需要逐条确认替换或保留(类似 diff 交互)。
5. 作为系统,租户管理员只能看到自己租户下的店铺数据。
### 验收标准
- AC1租户管理后台是独立 Web 应用,独立登录入口
- AC2租户管理员只能看到自己租户下的店铺和用户
- AC3用户审核页面申请列表、状态筛选、球房ID+手机号关联建议、审核操作
- AC4Excel 上传校验:必填、金额精度、表头格式、类型合法
- AC5主键冲突时前端展示 diff 交互,逐条确认后保存
- AC6助教奖罚支持同一助教同月多笔
---
## 设计要点
### 技术栈
- 独立 Web 应用React + Vite + Ant Design`apps/admin-web/` 同技术栈)
- 部署路径:`apps/tenant-admin/`
- 后端复用 `apps/backend/` 的 FastAPI新增租户管理路由模块
### 登录体系
- 独立凭据:每个租户有若干管理员账号(用户名+密码)
- 租户级管理员:可管理租户下所有店铺
- 店铺级管理员:只能管理指定店铺
- 与系统管理后台(`apps/admin-web/`)完全隔离
### Excel 4 种模板
#### 1. 财务支出(按月)
| 列名 | 类型 | 必填 | 说明 |
|------|------|------|------|
| 月份 | YYYY-MM | 是 | 提交月份 |
| 支出类别 | 文本 | 是 | 房租/水电/物业/食品饮料进货/耗材/报销/固定人员工资/其他费用 |
| 金额 | 数值(2) | 是 | 支出金额 |
| 备注 | 文本 | 否 | |
主键:月份 + 支出类别
#### 2. 团购平台收入(按月)
| 列名 | 类型 | 必填 | 说明 |
|------|------|------|------|
| 月份 | YYYY-MM | 是 | |
| 平台名称 | 文本 | 是 | |
| 收入金额 | 数值(2) | 是 | |
| 备注 | 文本 | 否 | |
主键:月份 + 平台名称
#### 3. 助教奖罚(按月)
| 列名 | 类型 | 必填 | 说明 |
|------|------|------|------|
| 月份 | YYYY-MM | 是 | |
| 助教姓名 | 文本 | 是 | |
| 助教编号 | 文本 | 是 | |
| 类型 | 文本 | 是 | 扣款/奖金 |
| 金额 | 数值(2) | 是 | |
| 原因 | 文本 | 是 | |
主键:月份 + 助教姓名 + 助教编号 + 类型 + 原因(同一助教同月可多笔)
#### 4. 充值业绩归属(按月)
| 列名 | 类型 | 必填 | 说明 |
|------|------|------|------|
| 充值日期 | YYYY-MM-DD | 是 | |
| 会员名称 | 文本 | 是 | |
| 充值金额 | 数值(2) | 是 | |
| 归属助教 | 文本 | 是 | |
| 奖励金额 | 数值(2) | 是 | |
主键:充值日期 + 会员名称 + 归属助教
### 冲突处理流程
```
上传 Excel → 后端解析+校验 → 返回校验结果
├── 无冲突 → 直接写入
└── 有冲突 → 返回冲突列表(旧值 vs 新值)
→ 前端展示 diff 交互
→ 用户逐条选择"替换"或"保留"
→ 提交确认 → 后端按选择写入
```
### 新建表
```
biz.salary_adjustments
- id, site_id, assistant_id, assistant_name, assistant_number
- salary_month, adjustment_type (deduction/bonus)
- amount, reason
- upload_batch_id, created_at
biz.excel_upload_log
- id, site_id, upload_type (expense/platform_income/salary_adj/recharge_commission)
- file_name, uploaded_by, row_count
- conflict_count, resolved_count
- status (pending/confirmed/failed)
- created_at
```
---
## 任务清单
- [ ] T1创建 `apps/tenant-admin/` 项目骨架React + Vite + Ant Design
- [ ] T2实现租户管理员登录独立凭据
- [ ] T3实现用户审核页面申请列表 + 状态筛选 + 关联建议 + 审核操作)
- [ ] T4实现用户管理页面用户列表 + 身份编辑 + 店铺归属)
- [ ] T5创建 `biz.salary_adjustments` + `biz.excel_upload_log`
- [ ] T6实现 Excel 上传后端(解析 + 校验 + 冲突检测)
- [ ] T7实现 Excel 上传前端(模板下载 + 上传 + diff 交互 + 确认)
- [ ] T8实现 4 种 Excel 模板的校验规则
- [ ] T9实现助教姓名+编号匹配校验(对照 `dim_assistant`

View File

@@ -0,0 +1,59 @@
# P11部署与上线 — deployment-launch
> 优先级P11依赖 P1-P10 全部完成)
> 预估工作量:中等
---
## 需求Requirements
### 用户故事
1. 作为运维,我需要将全部系统部署到生产环境并完成上线。
2. 作为运维,我需要监控系统运行状态和告警。
3. 作为产品经理,我需要灰度上线方案以降低风险。
### 验收标准
- AC1生产环境数据库初始化完成`etl_feiqiu` + `zqyy_app`
- AC2FDW 生产环境配置正确
- AC3后端 API 可正常访问
- AC4小程序审核通过并发布
- AC5租户管理后台可正常访问
- AC6ETL 定时调度正常运行(每小时增量)
- AC7监控告警配置完成
---
## 关键交付物
1. 生产环境数据库初始化脚本
2. FDW 生产环境配置(`etl_feiqiu``zqyy_app`
3. 后端部署配置FastAPI + Uvicorn + Nginx
4. 小程序审核材料准备与提交
5. 租户管理后台部署
6. ETL 定时调度配置cron / systemd timer
7. 监控方案数据库连接、API 响应、ETL 执行状态)
8. 灰度上线方案(先单店 → 多店 → 全量)
9. 回滚方案
---
## 参考
- 现有部署清单:`docs/deployment/LAUNCH-CHECKLIST.md`
- 环境配置:`.env.template`
---
## 任务清单
- [ ] T1生产环境数据库初始化Schema + 表 + 种子数据)
- [ ] T2生产环境 FDW 配置
- [ ] T3后端部署含 HTTPS、CORS、JWT 生产配置)
- [ ] T4小程序审核与发布
- [ ] T5租户管理后台部署
- [ ] T6ETL 定时调度配置
- [ ] T7监控与告警配置
- [ ] T8灰度上线执行
- [ ] T9更新 `LAUNCH-CHECKLIST.md`

View File

@@ -0,0 +1,69 @@
# P2ETL 扩展层 — etl-dws-miniapp-extensions
> 优先级P2依赖 P1
> 预估工作量:大
---
## 需求Requirements
### 用户故事
1. 作为产品经理,我需要 SPI 消费力指数来评估客户消费层级,替代现有的 `customer_tier` 分层。
2. 作为产品经理,我需要助教订单流水四项统计(订单总流水/订单净流水/时效贡献流水/时效净贡献),以便评估助教个人能力。
3. 作为产品经理,我需要客户 30/60/90 天充值次数和金额、次均消费,以便在客户看板中展示。
4. 作为产品经理,我需要定档折算惩罚数据,以便在绩效页面展示折算详情。
### 验收标准
- AC1`dws_member_spending_power_index` 表存在SPI 展示分 0-10 分布合理
- AC2`dws_assistant_order_contribution` 表存在,四项统计数值可对照 PRD 示例验算
- AC3`dws_member_consumption_summary` 新增字段有值(`recharge_count_30d/60d/90d``recharge_amount_30d/60d/90d``avg_ticket_amount`
- AC4`dws_assistant_daily_detail` 新增字段在符合惩罚条件的订单上正确填充
- AC5新表的 RLS 视图和 FDW 映射已同步创建
- AC6`cfg_index_parameters` 中新增 `SPI` 类型的配置行
---
## 设计要点
### SPI 指数
- 完整算法见 `docs/prd/SPI 消费力指数.md`
- 新建 ETL 任务 `SpendingPowerIndexTask`,继承 `BaseIndexTask`
- 粒度:`(site_id, member_id)`,每日计算
### 助教订单流水四项统计
- 新建 ETL 任务 `AssistantOrderContributionTask`
- 粒度:`(site_id, assistant_id, stat_date)`
- 计算逻辑见 PRD "新增统计"节
### 命名方案
| 中文名 | 字段名 | 含义 |
|--------|--------|------|
| 订单总流水 | `order_gross_revenue` | 助教参与订单的全部流水 |
| 订单净流水 | `order_net_revenue` | 总流水 - 助教服务分成 |
| 时效贡献流水 | `time_weighted_revenue` | 按服务时长折算的个人贡献 |
| 时效净贡献 | `time_weighted_net_revenue` | 时效贡献 - 助教服务分成 |
### 定档折算惩罚
- 扩展 `dws_assistant_daily_detail``penalty_minutes``penalty_reason``is_exempt``per_hour_contribution`
- 检测逻辑:同一台桌同一时段 >2 名助教 → 计算单人贡献流水 → <24 元则按比例折算
- 豁免标记:在订单级别打标(`is_exempt` 字段)
- 每日 ETL 自动计算
---
## 任务清单
- [ ] T1设计并创建 `dws_member_spending_power_index`
- [ ] T2实现 `SpendingPowerIndexTask`(含 Level/Speed/Stability 子分)
- [ ] T3`cfg_index_parameters` 中插入 SPI 默认参数
- [ ] T4设计并创建 `dws_assistant_order_contribution`
- [ ] T5实现 `AssistantOrderContributionTask`
- [ ] T6扩展 `dws_member_consumption_summary`(充值窗口 + 次均消费字段)
- [ ] T7修改 `MemberConsumptionSummaryTask` 填充新字段
- [ ] T8扩展 `dws_assistant_daily_detail`(定档折算惩罚字段)
- [ ] T9实现定档折算惩罚检测与计算逻辑
- [ ] T10为新表创建 RLS 视图 + FDW 映射
- [ ] T11影子跑数验证SPI 分布、流水统计对账)

View File

@@ -0,0 +1,88 @@
# P3用户认证层 — miniapp-auth-system
> 优先级P3依赖 P1可与 P2 并行)
> 预估工作量:中等
---
## 需求Requirements
### 用户故事
1. 作为球房工作人员我需要通过微信登录小程序首次登录时填写申请表单球房ID、申请身份、手机号、编号、昵称
2. 作为租户管理员,我需要审核用户申请,将用户关联到对应的助教/员工,并分配身份权限。
3. 作为系统我需要通过球房ID+手机号自动建议用户与助教的对应关系。
4. 作为用户,我需要看到自己的申请状态(审核中/通过/拒绝)。
5. 作为用户,我可以同时属于多个店铺(连锁场景),权限按店铺独立。
### 验收标准
- AC1微信 code2Session 登录正常,返回 JWT
- AC2新用户首次登录后进入申请页面提交后状态为 pending
- AC3管理员审核通过后用户状态变为 approved可正常访问小程序
- AC4球房ID 不存在时,申请仍可提交,管理端显示"未找到关联信息"
- AC5权限中间件正确拦截无权请求如助教不能看财务看板
- AC6一个用户可关联多个店铺切换店铺后数据正确隔离
---
## 设计要点
### 表结构
```
auth.users
- id, wx_openid, wx_union_id, wx_avatar_url, nickname, phone
- status (pending/approved/rejected/disabled)
- created_at, updated_at
auth.user_applications
- id, user_id, site_code (球房ID文本), applied_role_text (自由文本)
- employee_number (选填), status, reviewer_id, review_note
- created_at, reviewed_at
auth.site_code_mapping
- id, site_code (2字母+3数字), site_id (ETL bigint), site_name
- tenant_id, created_at
auth.user_site_roles
- id, user_id, site_id, role_id
- created_at
auth.user_assistant_binding
- id, user_id, site_id, assistant_id (ETL dim_assistant)
- binding_type (assistant/staff/manager)
- created_at
```
### 权限列表(固定)
| 权限 code | 说明 |
|-----------|------|
| `view_tasks` | 任务板块可见 |
| `view_board` | 看板板块可见 |
| `view_board_finance` | 财务板块可见 |
| `view_board_customer` | 客户板块可见 |
| `view_board_coach` | 助教板块可见 |
### 租户层级
```
租户 (tenant)
└── 店铺 (site) ← site_code 映射
└── 用户 (user) ← 可属于多个 site
└── 角色 (role) ← 按 site 独立分配
```
---
## 任务清单
- [ ] T1创建 `auth` Schema 下全部表users, user_applications, site_code_mapping, user_site_roles, user_assistant_binding
- [ ] T2迁移现有 RBAC 表到 `auth` Schema或保留 public 但建立关联)
- [ ] T3实现微信 code2Session 登录 API
- [ ] T4实现用户申请提交 API
- [ ] T5实现 JWT 签发与刷新
- [ ] T6实现权限中间件基于 user_site_roles
- [ ] T7实现用户状态查询 API
- [ ] T8种子数据预置权限列表和默认角色

View File

@@ -0,0 +1,102 @@
# P4核心业务层 — miniapp-core-business
> 优先级P4依赖 P1 + P2 + P3
> 预估工作量:大(本 SPEC 是业务核心)
---
## 需求Requirements
### 用户故事
1. 作为助教,我每天打开小程序能看到系统为我分配的任务列表,按优先级排序。
2. 作为助教,我可以置顶/放弃任务,放弃时必须填写原因。
3. 作为助教,我完成召回任务后(客户到店被服务),系统自动标记任务完成。
4. 作为助教我给客户添加回访备注后系统自动评估备注含金量≥6 分算完成)。
5. 作为系统,回访任务至少保留 48 小时,到期后自动失效。
6. 作为系统,当 ETL 数据延迟导致召回完成晚于备注提交时,需要回溯重分类备注。
### 验收标准
- AC1任务生成器每日 4:00 后运行,正确按 max(WBI,NCI) 分配 4 种任务类型
- AC2同客户-助教-类型的任务跳过;不同类型则关闭旧任务+新建
- AC3回访任务 48 小时滞留机制正常(生成时间算起)
- AC4任务有效/无效状态 + 有效期字段正确流转
- AC5召回完成检测在 ETL 数据到达后自动触发
- AC6数据回溯将普通备注重分类为回访备注并触发 AI 评分
- AC7备注 CRUD 正常type 字段正确区分
- AC8生日信息独立于 ETL 数据,不被覆盖
---
## 设计要点
### 任务类型与优先级
| 优先级 | 类型 | 触发条件 | 完成条件 |
|--------|------|---------|---------|
| 0 | 高优先召回 | max(WBI,NCI) > 7 | 助教为该客户服务ETL 检测) |
| 0 | 优先召回 | max(WBI,NCI) > 5 | 同上 |
| 1 | 客户回访 | 完成召回后未备注 | 提交备注且 AI 评分 ≥ 6 |
| 2 | 关系构建 | RS < 6 | 无自动完成条件(手动标记或指数变化) |
### 任务状态机
```
[生成] → 有效(无有效期)
├── 类型变更 → 旧任务无效(无有效期) + 新任务有效
├── 指数不再满足 → 有效(填充有效期=生成时间+48h)
│ └── 轮询检查 → 超过有效期 → 无效
├── 新回访任务顶替 → 旧任务无效 + 新任务有效
├── 助教放弃 → 无效(记录放弃原因)
└── 完成 → 已完成(记录完成时间和完成时状态)
```
### coach_tasks 表核心字段
```
biz.coach_tasks
- id, site_id, assistant_id, member_id
- task_type (high_priority_recall / priority_recall / follow_up_visit / relationship_building)
- status (active / inactive / completed / abandoned)
- priority_score (max(WBI,NCI) 快照)
- expires_at (有效期,默认 NULL)
- is_pinned (置顶)
- abandon_reason (放弃原因)
- completed_at, completed_task_type (完成时的任务类型快照)
- parent_task_id (被顶替的旧任务 ID)
- created_at, updated_at
```
### 触发器机制
```
biz.trigger_jobs
- id, job_type, job_name
- trigger_condition (cron / event / interval)
- trigger_config (JSON: cron表达式 / 事件名 / 间隔秒数)
- last_run_at, next_run_at
- status (enabled / disabled)
- created_at
```
预置触发器:
1. `task_generator` — cron: 每日 04:00
2. `task_expiry_check` — interval: 每小时
3. `recall_completion_check` — event: ETL 数据更新后
4. `note_reclassify_backfill` — event: 召回完成时
---
## 任务清单
- [ ] T1创建 `biz.coach_tasks` + `biz.coach_task_history`
- [ ] T2创建 `biz.notes`type: normal/follow_up/birthday/abandon_reason
- [ ] T3创建 `biz.trigger_jobs` 表 + 轮询调度框架
- [ ] T4实现任务生成器读取指数 → 分配任务 → 跳过/更新逻辑)
- [ ] T5实现 48 小时滞留机制 + 有效期轮询
- [ ] T6实现召回完成检测ETL 数据到达后匹配 service_log
- [ ] T7实现数据回溯机制普通备注 → 回访备注 + 触发 AI 评分)
- [ ] T8实现任务 CRUD API列表/详情/置顶/放弃/取消置顶/取消放弃)
- [ ] T9实现备注 CRUD API创建/列表/删除)
- [ ] T10实现生日信息隔离存储逻辑

View File

@@ -0,0 +1,96 @@
# P5AI 集成层 — miniapp-ai-integration
> 优先级P5依赖 P3 + P4
> 预估工作量:大
---
## 需求Requirements
### 用户故事
1. 作为助教,我可以在任意页面点击 AI 按钮,跳转到对话页面与 AI 交流AI 了解当前页面上下文。
2. 作为助教,我在任务详情页能看到 AI 生成的消费习惯分析、关系分析、话术参考。
3. 作为助教,我提交回访备注后,系统自动通过 AI 评估备注含金量。
4. 作为管理者,我在财务看板能看到 AI 生成的财务洞察分析。
5. 作为系统,所有 AI 对话(含系统调用)都要持久化记录。
### 验收标准
- AC1应用 1 通用对话支持流式返回SSE前端逐字展示
- AC2应用 2 财务洞察每日自动更新,覆盖 8 个时间维度
- AC3应用 3 消费习惯在客户新增消费时自动更新
- AC4应用 4+5 在助教参与新结算时联动更新
- AC5应用 6 在回访备注提交后自动评分,返回 1-10 分 + 评价文本
- AC6所有 AI 调用记录持久化conversation_id, message_id, app_id, user_id/系统, role, content, tokens_used, nickname, created_at, site_id
---
## 设计要点
### 6 个 AI 应用
| 应用 | 用途 | 调用方式 | 触发条件 |
|------|------|---------|---------|
| 应用 1 | 通用对话 | 用户主动(流式) | 点击 AI 入口 |
| 应用 2 | 财务洞察 | 后台轮询 | 每日 |
| 应用 3 | 消费习惯分析 | 后台轮询 | 客户新增消费 |
| 应用 4 | 关系分析/任务建议 | 后台轮询 | 助教参与新结算 |
| 应用 5 | 话术参考 | 后台联动 | 应用 4 调用时 |
| 应用 6 | 备注含金量 | 后台事件 | 回访任务完成时 |
### 信息隔离
应用 1 通过 `biz_params.user_prompt_params` 传入:
- `User_ID`:当前用户 ID
- `Role`:身份(助教/管理者)
- `Nickname`:昵称
百炼平台侧根据参数做数据查询隔离。
### AI 入口汇总
所有入口统一使用应用 1跳转 chat.html第一条消息为页面上下文
| 来源页面 | 触发方式 | 上下文内容 |
|---------|---------|-----------|
| task-list | 长按任务 → AI | 任务详情 + 客户-助教关系 |
| task-detail / coach-detail / customer-detail | "问问助手" | 页面完整内容 |
| board-* / performance-* / customer-service-records / my-profile | 右下角 AI 按钮 | 页面内容摘要 |
### 表结构
```
biz.ai_conversations
- id, user_id, nickname, app_id, site_id
- source_page, source_context (JSON)
- created_at
biz.ai_messages
- id, conversation_id, role (user/assistant/system)
- content, tokens_used
- created_at
biz.ai_cache
- id, cache_type (app2_finance/app3_habit/app4_analysis/app5_tactics/app6_score)
- site_id, target_id (member_id 或 assistant_id 或 pair)
- result_json, score (应用6专用)
- triggered_by (trigger_job_id)
- created_at, expires_at
```
---
## 任务清单
- [ ] T1创建 `biz.ai_conversations` + `biz.ai_messages` + `biz.ai_cache`
- [ ] T2实现百炼 API 统一封装层(流式/非流式、重试、日志)
- [ ] T3实现应用 1 通用对话 APISSE 流式返回)
- [ ] T4实现页面内容文本化工具各页面数据 → AI 可读文本)
- [ ] T5实现应用 2 财务洞察轮询任务
- [ ] T6实现应用 3 消费习惯分析轮询任务
- [ ] T7实现应用 4 关系分析轮询任务
- [ ] T8实现应用 5 话术参考联动任务
- [ ] T9实现应用 6 备注含金量评分(集成到回访完成事件)
- [ ] T10实现 AI 缓存读写 API前端读取缓存结果
- [ ] T11查阅百炼文档确认流式返回技术方案SSE vs WebSocket

View File

@@ -0,0 +1,58 @@
# P6小程序前端 — 任务模块 — miniapp-fe-tasks
> 优先级P6依赖 P3 + P4 + P5
> 预估工作量:大
---
## 需求Requirements
### 用户故事
1. 作为助教,我打开小程序首页看到按优先级排序的任务列表,高优先召回在最上面。
2. 作为助教,我长按任务可以置顶、放弃(需填原因)、或问 AI。
3. 作为助教我点击任务进入详情页看到客户信息、近期服务记录、AI 分析、备注入口。
4. 作为助教,我在绩效区域看到当月业绩、档位、工资预估、跳档激励。
5. 作为助教,我能管理自己的备注(查看、删除需二次确认)。
### 验收标准
- AC1任务列表按优先级 0→1→2 分组展示,每组内按分数降序
- AC2置顶任务固定在列表顶部已放弃任务在独立列表
- AC3爱心 icon 正确展示(💖>8.5 / 🧡>7 / 💛>5 / 💙<5
- AC4喜好标签正确展示🎱/斯/🀅/🎤)
- AC5跟/弃 icon 正确展示
- AC6当月数据显示"预估"标记
- AC7跳档激励"到达XXX即得YYY"计算正确
---
## 页面清单
### task-list任务列表 + 绩效)
- 任务列表:优先级分组、长按操作
- 绩效区域:当月业绩/档位/工资/跳档激励
- 通用组件:爱心 icon、喜好标签、跟/弃 icon
### task-detail任务详情
- 客户信息卡片
- 近期服务记录(时间+时长)
- AI 区域消费习惯应用3缓存、关系分析+任务建议+一句话总结应用4缓存、话术参考应用5缓存、备注星级应用6
- 备注入口(提交后触发回访完成判定)
- "问问助手"按钮 → chat.html
### notes备注管理
- 备注列表
- 删除操作(二次确认弹窗)
---
## 任务清单
- [ ] T1实现 task-list 页面(任务列表 + 分组 + 排序)
- [ ] T2实现长按操作置顶/放弃/AI
- [ ] T3实现绩效展示区域业绩/档位/工资/跳档激励)
- [ ] T4实现 task-detail 页面(客户信息 + 服务记录 + AI 区域)
- [ ] T5实现备注提交功能集成回访完成判定
- [ ] T6实现 notes 页面(列表 + 删除)
- [ ] T7实现通用组件爱心 icon、喜好标签、跟/弃 icon、预估标记

View File

@@ -0,0 +1,67 @@
# P7小程序前端 — 绩效模块 — miniapp-fe-performance
> 优先级P7依赖 P2 + P3
> 预估工作量:中等
---
## 需求Requirements
### 用户故事
1. 作为助教,我在绩效页面能看到当月收入、业绩档位、工资预估。
2. 作为助教,我能看到本月/上月的服务记录明细,按天归总。
3. 作为助教,我能看到"我的新客"(首次服务且 2 月内服务 ≤2 次的客户)和"我的常客"2 月内服务次数最多的客户)。
4. 作为助教,我在业绩明细页能看到每条服务的详情,包括定档折算惩罚展示。
### 验收标准
- AC1收入与业绩档位数据从 `dws_assistant_salary_calc` 正确读取
- AC2服务记录按天归总展示支持本月/上月切换
- AC3"我的新客"筛选逻辑正确(该助教首次服务 + 2 月内 + 服务次数 ≤2
- AC4"我的常客"按服务次数降序,展示次数、小时数、工资合计
- AC5业绩明细每条展示结账时间、课程类型、台桌/房间、会员昵称、开始/结束时间、业绩分钟
- AC6有定档折算惩罚时展示"120分钟定档折算30分钟"格式
- AC7当月数据显示"预估"标记
---
## 页面清单
### performance我的绩效
- 收入与业绩档位卡片
- 服务记录明细(按天归总,本月/上月切换)
- 我的新客列表(按最后服务时间排列)
- 我的常客列表(按服务次数降序)
- 服务明细:按天/月归总整合数据
### performance-records业绩明细
- 口径选择(本月/上月/本周/上周等)
- 业绩列表(每条含:结账时间、课程类型、台桌/房间、会员昵称、开始/结束时间、业绩分钟+折算展示)
- 按天/月归总整合
---
## 后端 API 需求
| API | 说明 | 数据源 |
|-----|------|--------|
| `GET /api/performance/summary` | 当月绩效汇总 | `fdw_etl.dws_assistant_salary_calc` |
| `GET /api/performance/service-records` | 服务记录明细(分页) | `fdw_etl.dwd_assistant_service_log` |
| `GET /api/performance/my-new-customers` | 我的新客列表 | `fdw_etl.dws_assistant_customer_stats` |
| `GET /api/performance/my-regulars` | 我的常客列表 | `fdw_etl.dws_assistant_customer_stats` |
| `GET /api/performance/records` | 业绩明细(按口径) | `fdw_etl.dwd_assistant_service_log` + `fdw_etl.dws_assistant_daily_detail` |
---
## 任务清单
- [ ] T1实现绩效汇总 API含定档、工资、档位
- [ ] T2实现服务记录明细 API按天归总 + 分页)
- [ ] T3实现我的新客/常客 API
- [ ] T4实现业绩明细 API含定档折算惩罚字段
- [ ] T5实现 performance 小程序页面
- [ ] T6实现 performance-records 小程序页面
- [ ] T7实现"预估"标记组件(当月/本周数据自动标记)

View File

@@ -0,0 +1,85 @@
# P8小程序前端 — 看板模块 — miniapp-fe-boards
> 优先级P8依赖 P2 + P3 + P5
> 预估工作量:大
---
## 需求Requirements
### 用户故事
1. 作为管理者我在财务看板能看到多维度交叉筛选的财务数据、环比、AI 洞察。
2. 作为管理者,我在客户看板能按 8 个维度排序查看前 100 名客户。
3. 作为管理者,我在助教看板能按业绩/工资/客源储值/任务完成等维度排序查看助教。
4. 作为系统,看板数据需要缓存层以提升查询性能。
### 验收标准
- AC1财务看板支持 2 组筛选交叉(区域 × 时间),选择非"全部区域"时预收资产板块消失
- AC2财务看板环比数据正确计算
- AC3财务看板 AI 洞察从缓存读取(应用 2 每日更新)
- AC4客户看板 8 个维度筛选正确(最应召回/最大消费潜力/最高余额/最近充值/最高消费60天/最频繁60天/最近到店/最专一)
- AC5客户看板"最专一"维度下类型筛选锁定为"不限"
- AC6助教看板维度×项目×日期三重筛选交叉正确
- AC7看板数据有缓存层非每次实时查询 FDW
---
## 页面清单
### board-finance财务看板
- 筛选器:区域筛选 + 时间筛选(本月/上月/本周/上周/前3月/本季/上季/近6月
- 数据板块:收入结构、预收资产(条件隐藏)、支出汇总、平台结算
- 环比展示
- AI 智能洞察(应用 2 缓存结果)
- "问问助手"入口 → chat.html
### board-customer客户看板
- 维度筛选8 个维度,默认"最应召回"
- 类型筛选(全部/台球/斯诺克/麻将/团建 + 台费包厢流水过滤)
- 筛选互斥规则:"最专一"锁定类型为"不限"
- 客户列表(前 100 名)
- 每个客户卡片:昵称、爱心 icon、喜好标签、关键指标值
- 右下角 AI 按钮 → chat.html
### board-coach助教看板
- 维度筛选:定档业绩最高/最低、工资最高/最低、高客源储值额最高、任务完成最多
- 项目筛选:全部/中🎱/斯诺克/麻将/团建
- 日期维度筛选:本月/上月/本周/上周/前3月/本季/上季/近6月
- 助教列表
- 右下角 AI 按钮 → chat.html
---
## 后端 API 需求
| API | 说明 | 缓存 |
|-----|------|------|
| `GET /api/board/finance` | 财务看板数据(交叉筛选) | 是 |
| `GET /api/board/finance/ai-insight` | 财务 AI 洞察 | 是应用2缓存 |
| `GET /api/board/customers` | 客户看板(维度+类型筛选) | 是 |
| `GET /api/board/coaches` | 助教看板(维度×项目×日期) | 是 |
### 缓存策略
- 看板数据缓存层Redis 或内存缓存
- 缓存粒度:`site_id` + 筛选条件组合
- 缓存过期ETL 数据更新后失效(约 1 小时)
- AI 洞察缓存:从 `biz.ai_cache` 读取(应用 2 每日更新)
---
## 任务清单
- [ ] T1实现看板缓存层Redis/内存,按 site_id + 筛选条件)
- [ ] T2实现财务看板 API交叉筛选 + 环比 + 预收资产条件隐藏)
- [ ] T3实现客户看板 API8 维度排序 + 类型筛选 + 互斥规则)
- [ ] T4实现助教看板 API维度×项目×日期三重筛选
- [ ] T5实现 board-finance 小程序页面
- [ ] T6实现 board-customer 小程序页面
- [ ] T7实现 board-coach 小程序页面
- [ ] T8实现通用筛选器组件时间/维度/项目)

View File

@@ -0,0 +1,108 @@
# P9小程序前端 — 详情与对话模块 — miniapp-fe-details
> 优先级P9依赖 P3 + P4 + P5
> 预估工作量:大
---
## 需求Requirements
### 用户故事
1. 作为助教我在客户详情页能看到客户全信息、消费记录三种样式、指数总览、备注、AI 分析。
2. 作为助教,我在助教详情页能看到助教信息、客户数、工龄、备注。
3. 作为助教,我在 AI 对话页能与 AI 流式对话,看到来源页面信息。
4. 作为助教,我能查看历史 AI 对话记录。
### 验收标准
- AC1消费记录区分三种样式台桌结账→下沉台费明细、商城订单、充值
- AC2消费记录默认 10 条,拉到底懒加载(每次 10 条)
- AC3金额为 0 的项不展示;有团购/折扣时展示正价+实付
- AC4总金额仅在消费条目 >1 时出现
- AC5AI 对话支持流式展示(逐字输出)
- AC6从其他页面进入 chat.html 时新开对话,第一条消息为页面上下文
- AC7对话历史列表可查看、可继续对话
---
## 页面清单
### customer-detail客户详情
- 客户信息卡片(昵称、手机、会员卡等级、余额、注册日期)
- 指数总览WBI/NCI/SPI 展示分 + 爱心 icon
- 消费记录列表(三种样式,懒加载)
- 台桌结账:下沉到 `dwd_table_fee_log`,每条台费详情,关联总金额汇总
- 商城订单:助教列表(花名+级别+课程类型+服务时长+定档绩效)、支付金额、食品酒水总金额
- 充值:充值金额、支付方式
- 备注列表
- AI 消费习惯分析(应用 3 缓存)
- "问问助手"入口 → chat.html
### coach-detail助教详情
- 助教信息卡片(花名、级别、工龄)
- 客户数RS > 2 的客户数量)
- 备注按钮(查看此助教为该客户做的备注)
### customer-service-records客户服务记录
- 服务记录列表(时间 + 持续时长)
### chatAI 对话)
- 来源展示(来源页面 title + 基本信息)
- 对话界面IM 风格)
- AI 回复流式展示SSE
- 消息输入 + 发送
### chat-history对话历史
- 历史对话列表(按时间倒序)
- 点击进入继续对话
---
## 后端 API 需求
| API | 说明 |
|-----|------|
| `GET /api/customers/:id` | 客户详情 |
| `GET /api/customers/:id/consumption-records` | 消费记录(分页,懒加载) |
| `GET /api/customers/:id/indexes` | 客户指数总览 |
| `GET /api/coaches/:id` | 助教详情 |
| `GET /api/coaches/:id/customer-count` | 助教客户数RS>2 |
| `GET /api/customers/:id/service-records` | 客户服务记录 |
| `POST /api/chat/conversations` | 创建对话 |
| `POST /api/chat/conversations/:id/messages` | 发送消息SSE 流式返回) |
| `GET /api/chat/conversations` | 对话历史列表 |
| `GET /api/chat/conversations/:id/messages` | 对话消息列表 |
### 消费记录 settle_type 区分
需要查库确认的字段(待 P1 完成后验证):
- 台桌结账:`settle_type` 对应值(需查 `dwd_settlement_head`
- 商城订单:`settle_type` 对应值
- 充值:从 `dwd_recharge_order` 单独查询
### 正价金额字段(待用户复核)
需要在 `dwd_settlement_head` 或相关 DWS 表中确认:
- `original_amount` vs `total_amount` vs 其他字段
- 此项标记为"需用户复核"
---
## 任务清单
- [ ] T1实现客户详情 API
- [ ] T2实现消费记录分页 API三种样式区分 + 懒加载)
- [ ] T3实现客户指数总览 API
- [ ] T4实现助教详情 API
- [ ] T5实现对话 API创建/发送/历史/消息列表SSE 流式)
- [ ] T6实现 customer-detail 小程序页面
- [ ] T7实现 coach-detail 小程序页面
- [ ] T8实现 customer-service-records 小程序页面
- [ ] T9实现 chat 小程序页面(流式展示 + 来源信息)
- [ ] T10实现 chat-history 小程序页面