feat: P1-P3 全栈集成 — 数据库基础 + DWS 扩展 + 小程序鉴权 + 工程化体系
## P1 数据库基础 - zqyy_app: 创建 auth/biz schema、FDW 连接 etl_feiqiu - etl_feiqiu: 创建 app schema RLS 视图、商品库存预警表 - 清理 assistant_abolish 残留数据 ## P2 ETL/DWS 扩展 - 新增 DWS 助教订单贡献度表 (dws.assistant_order_contribution) - 新增 assistant_order_contribution_task 任务及 RLS 视图 - member_consumption 增加充值字段、assistant_daily 增加处罚字段 - 更新 ODS/DWD/DWS 任务文档及业务规则文档 - 更新 consistency_checker、flow_runner、task_registry 等核心模块 ## P3 小程序鉴权系统 - 新增 xcx_auth 路由/schema(微信登录 + JWT) - 新增 wechat/role/matching/application 服务层 - zqyy_app 鉴权表迁移 + 角色权限种子数据 - auth/dependencies.py 支持小程序 JWT 鉴权 ## 文档与审计 - 新增 DOCUMENTATION-MAP 文档导航 - 新增 7 份 BD_Manual 数据库变更文档 - 更新 DDL 基线快照(etl_feiqiu 6 schema + zqyy_app auth) - 新增全栈集成审计记录、部署检查清单更新 - 新增 BACKLOG 路线图、FDW→Core 迁移计划 ## Kiro 工程化 - 新增 5 个 Spec(P1/P2/P3/全栈集成/核心业务) - 新增审计自动化脚本(agent_on_stop/build_audit_context/compliance_prescan) - 新增 6 个 Hook(合规检查/会话日志/提交审计等) - 新增 doc-map steering 文件 ## 运维与测试 - 新增 ops 脚本:迁移验证/API 健康检查/ETL 监控/集成报告 - 新增属性测试:test_dws_contribution / test_auth_system - 清理过期 export 报告文件 - 更新 .gitignore 排除规则
This commit is contained in:
@@ -164,7 +164,7 @@
|
||||
| 功能 | 数据源 | 状态 |
|
||||
|------|--------|------|
|
||||
| 用户审核列表 | `zqyy_app.auth.user_applications` + `zqyy_app.auth.users` | 📱 新建 |
|
||||
| 用户-助教关联建议 | `dwd.dim_assistant`(通过球房ID+手机号匹配) | ✅ FDW |
|
||||
| 用户-助教关联建议 | `dwd.dim_assistant`(通过球房ID+手机号匹配)+ `dwd.dim_staff` / `dwd.dim_staff_ex`(员工信息表匹配) | ✅ FDW |
|
||||
| 球房ID映射 | `zqyy_app.auth.site_code_mapping` | 📱 新建 |
|
||||
| Excel 上传-财务支出 | `dws.dws_finance_expense_summary`(或新建 staging 表) | 🔧/📱 |
|
||||
| Excel 上传-团购收入 | `dws.dws_platform_settlement`(或新建 staging 表) | 🔧/📱 |
|
||||
@@ -263,7 +263,14 @@
|
||||
| `dws.cfg_performance_tier` | 定档配置 |
|
||||
| `dws.cfg_assistant_level_price` | 助教等级单价 |
|
||||
| `dws.cfg_bonus_rules` | 奖金规则 |
|
||||
| `dws.cfg_index_parameters` | 指数参数配置 |
|
||||
| `dws.cfg_index_parameters` | 指数参数配置(含 SPI 26 个参数 ✅) |
|
||||
| `dws.dws_order_summary` | 订单汇总 |
|
||||
|
||||
### 新增 FDW 映射(员工信息表)
|
||||
|
||||
| 来源表 | 用途 |
|
||||
|--------|------|
|
||||
| `dwd.dim_staff` | 员工基础维度(姓名、手机、岗位、在职状态等),用于用户申请人员匹配 |
|
||||
| `dwd.dim_staff_ex` | 员工扩展维度(工号、头像、职级、分组等),用于用户申请人员匹配 |
|
||||
|
||||
---
|
||||
|
||||
@@ -87,14 +87,15 @@ P11 部署与上线(环境配置 + 监控 + 灰度)
|
||||
### SPEC 名称建议:`miniapp-auth-system`
|
||||
|
||||
### 需求概述
|
||||
构建小程序的完整用户认证体系,包括微信登录、用户申请、审核流程、RBAC 权限、用户-助教绑定。
|
||||
构建小程序的完整用户认证体系,包括微信登录、用户申请、审核流程、RBAC 权限、用户-助教/员工绑定。
|
||||
|
||||
### 关键交付物
|
||||
1. 新建表:`auth.users`(重构,增加 wx_openid、status、site_id 等)、`auth.user_applications`、`auth.site_code_mapping`、`auth.user_assistant_binding`
|
||||
1. 新建表:`auth.users`(重构,增加 wx_openid、status、site_id 等)、`auth.user_applications`、`auth.site_code_mapping`、`auth.user_assistant_binding`(增加 `staff_id` 字段支持员工绑定)
|
||||
2. 重构现有 `public.roles`、`public.permissions`、`public.user_roles`、`public.role_permissions` 迁移至 `auth` Schema
|
||||
3. 后端 API:微信 code2Session 登录、用户申请提交、JWT 签发
|
||||
4. 后端 API:用户状态查询(审核中/通过/拒绝)
|
||||
5. 权限中间件:基于角色的 API 访问控制
|
||||
6. 人员匹配:用户申请时同时在助教表(`dim_assistant`)和员工信息表(`dim_staff` + `dim_staff_ex`)中匹配
|
||||
|
||||
### 依赖
|
||||
- P1(`auth` Schema 已创建)
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
|
||||
- AC1:租户管理后台是独立 Web 应用,独立登录入口
|
||||
- AC2:租户管理员只能看到自己租户下的店铺和用户
|
||||
- AC3:用户审核页面:申请列表、状态筛选、球房ID+手机号关联建议、审核操作
|
||||
- AC3:用户审核页面:申请列表、状态筛选、球房ID+手机号关联建议(同时匹配助教表+员工信息表)、审核操作
|
||||
- AC4:Excel 上传校验:必填、金额精度、表头格式、类型合法
|
||||
- AC5:主键冲突时前端展示 diff 交互,逐条确认后保存
|
||||
- AC6:助教奖罚支持同一助教同月多笔
|
||||
@@ -130,4 +130,4 @@ biz.excel_upload_log
|
||||
- [ ] T6:实现 Excel 上传后端(解析 + 校验 + 冲突检测)
|
||||
- [ ] T7:实现 Excel 上传前端(模板下载 + 上传 + diff 交互 + 确认)
|
||||
- [ ] T8:实现 4 种 Excel 模板的校验规则
|
||||
- [ ] T9:实现助教姓名+编号匹配校验(对照 `dim_assistant`)
|
||||
- [ ] T9:实现人员姓名+编号匹配校验(同时对照 `dim_assistant` 助教表和 `dim_staff` + `dim_staff_ex` 员工信息表)
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
- 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` 类型的配置行
|
||||
- AC6:`cfg_index_parameters` 中新增 `SPI` 类型的配置行 ✅(已完成,26 个参数,effective_from=2026-02-23)
|
||||
|
||||
---
|
||||
|
||||
@@ -56,9 +56,9 @@
|
||||
|
||||
## 任务清单
|
||||
|
||||
- [ ] T1:设计并创建 `dws_member_spending_power_index` 表
|
||||
- [ ] T2:实现 `SpendingPowerIndexTask`(含 Level/Speed/Stability 子分)
|
||||
- [ ] T3:在 `cfg_index_parameters` 中插入 SPI 默认参数
|
||||
- [x] T1:设计并创建 `dws_member_spending_power_index` 表 ✅(已完成,24 字段 + 2 索引,迁移脚本 `2026-02-23_create_dws_member_spending_power_index.sql`,测试库已建表,0 行待跑数)
|
||||
- [x] T2:实现 `SpendingPowerIndexTask`(含 Level/Speed/Stability 子分)✅(已完成,代码 `tasks/dws/index/spending_power_index_task.py`,已注册 task_registry,含单元测试 + 属性测试 + BD_Manual 文档)
|
||||
- [x] T3:在 `cfg_index_parameters` 中插入 SPI 默认参数 ✅(已完成,27 个参数含 Level/Speed/Stability 权重、压缩基数、窗口天数等)
|
||||
- [ ] T4:设计并创建 `dws_assistant_order_contribution` 表
|
||||
- [ ] T5:实现 `AssistantOrderContributionTask`
|
||||
- [ ] T6:扩展 `dws_member_consumption_summary`(充值窗口 + 次均消费字段)
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
|
||||
1. 作为球房工作人员,我需要通过微信登录小程序,首次登录时填写申请表单(球房ID、申请身份、手机号、编号、昵称)。
|
||||
2. 作为租户管理员,我需要审核用户申请,将用户关联到对应的助教/员工,并分配身份权限。
|
||||
3. 作为系统,我需要通过球房ID+手机号自动建议用户与助教的对应关系。
|
||||
3. 作为系统,我需要通过球房ID+手机号自动建议用户与助教/员工的对应关系(同时匹配 `dwd.dim_assistant` 助教表和 `dwd.dim_staff` + `dwd.dim_staff_ex` 员工信息表)。
|
||||
4. 作为用户,我需要看到自己的申请状态(审核中/通过/拒绝)。
|
||||
5. 作为用户,我可以同时属于多个店铺(连锁场景),权限按店铺独立。
|
||||
|
||||
@@ -21,6 +21,7 @@
|
||||
- AC2:新用户首次登录后进入申请页面,提交后状态为 pending
|
||||
- AC3:管理员审核通过后,用户状态变为 approved,可正常访问小程序
|
||||
- AC4:球房ID 不存在时,申请仍可提交,管理端显示"未找到关联信息"
|
||||
- AC7:用户申请信息比对时,系统同时在助教表(`dwd.dim_assistant`)和员工信息表(`dwd.dim_staff` / `dwd.dim_staff_ex`)中匹配,返回所有匹配结果供管理员选择
|
||||
- AC5:权限中间件正确拦截无权请求(如助教不能看财务看板)
|
||||
- AC6:一个用户可关联多个店铺,切换店铺后数据正确隔离
|
||||
|
||||
@@ -51,10 +52,22 @@ auth.user_site_roles
|
||||
|
||||
auth.user_assistant_binding
|
||||
- id, user_id, site_id, assistant_id (ETL dim_assistant)
|
||||
- staff_id (ETL dim_staff,可选,员工绑定时填写)
|
||||
- binding_type (assistant/staff/manager)
|
||||
- created_at
|
||||
```
|
||||
|
||||
### 人员匹配逻辑(用户申请 → 信息比对)
|
||||
|
||||
用户提交申请时填写球房ID + 手机号(或编号),系统自动在以下两张表中匹配:
|
||||
|
||||
1. 助教表 `dwd.dim_assistant`(通过 FDW `fdw_etl.v_assistant`):按 `site_id` + `mobile` 或 `alias_name` 匹配
|
||||
2. 员工信息表 `dwd.dim_staff` + `dwd.dim_staff_ex`(通过 FDW):按 `site_id` + `mobile` 或 `staff_name` / `alias_name` / `job_num` 匹配
|
||||
|
||||
匹配结果合并后返回给管理端,管理员从候选列表中选择正确的关联对象。若两张表均无匹配,显示"未找到关联信息",管理员可手动填写。
|
||||
|
||||
> 员工信息表数据链路:上游 API → `ods.staff_info_master` → `dwd.dim_staff`(基础维度,SCD2)+ `dwd.dim_staff_ex`(扩展维度,SCD2)
|
||||
|
||||
### 权限列表(固定)
|
||||
|
||||
| 权限 code | 说明 |
|
||||
|
||||
Reference in New Issue
Block a user