feat: 累积功能变更 — 聊天集成、租户管理、小程序更新、ETL 增强、迁移脚本

包含多个会话的累积代码变更:
- backend: AI 聊天服务、触发器调度、认证增强、WebSocket、调度器最小间隔
- admin-web: ETL 状态页、任务管理、调度配置、登录优化
- miniprogram: 看板页面、聊天集成、UI 组件、导航更新
- etl: DWS 新任务(finance_area_daily/board_cache)、连接器增强
- tenant-admin: 项目初始化
- db: 19 个迁移脚本(etl_feiqiu 11 + zqyy_app 8)
- packages/shared: 枚举和工具函数更新
- tools: 数据库工具、报表生成、健康检查
- docs: PRD/架构/部署/合约文档更新

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Neo
2026-04-06 00:03:48 +08:00
parent 70324d8542
commit 6f8f12314f
515 changed files with 76604 additions and 7456 deletions

View File

@@ -0,0 +1,99 @@
# P10-NS4-03数据导出功能的规范
## 简要结论
- 状态:❌ 未解决
- 租户管理后台tenant-admin无任何业务数据导出功能。后端无导出端点前端无导出按钮数据库无导出日志表。现有的"下载"功能仅限 Excel 空白模板下载和系统管理后台的环境配置导出,均与业务数据导出无关。
## 详细审查
### 数据库端
搜索范围:`db/zqyy_app/` 全部 SQL 文件
结果:
- **无导出日志表**`biz` schema 下无 `export_log``download_log` 等导出记录表
- **现有表**`biz.excel_upload_log` 仅记录 Excel **上传**操作upload_type: expense/platform_income/salary_adj/recharge_commission无导出相关字段
- **无导出审计字段**:任何现有表均未包含导出时间、导出人、导出格式等审计字段
### 后端代码
搜索范围:`apps/backend/app/routers/` 全部 tenant_*.py 文件 + 全部路由文件
逐文件审查结果:
| 路由文件 | 导出相关端点 | 说明 |
|----------|-------------|------|
| `tenant_auth.py` | 无 | 仅登录/鉴权 |
| `tenant_users.py` | 无 | 用户审核+管理,无导出 |
| `tenant_excel.py` | `GET /template/{type}` | **模板下载**(空白 Excel 模板),非数据导出 |
| `tenant_clues.py` | 无 | 线索 CRUD无导出 |
| `env_config.py` | `GET /export` | **环境配置导出**admin-web 专用),非业务数据 |
关键发现:
1. `tenant_excel.py` 包含 `download_template()` 函数,使用 `openpyxl` + `StreamingResponse` 生成空白模板文件,仅含表头和格式说明,不含任何业务数据
2. 后端无通用导出工具模块(无 `export_to_excel``export_to_csv` 等工具函数)
3. 全局搜索 `def.*export` 仅命中 `env_config.py``export_env_config()`(系统管理后台功能)
### 前端代码
#### tenant-admin租户管理后台
搜索范围:`apps/tenant-admin/src/` 全部文件
页面清单与导出功能:
| 页面 | 路径 | 导出按钮 | 说明 |
|------|------|---------|------|
| Login | `pages/Login/` | 无 | 登录页 |
| UserApproval | `pages/UserApproval/` | 无 | 用户审核 |
| UserManagement | `pages/UserManagement/` | 无 | 用户管理 |
| ExcelUpload | `pages/ExcelUpload/` | 无 | 仅有模板**下载**按钮(`DownloadOutlined` + `handleDownloadTemplate` |
| RetentionClues | `pages/RetentionClues/` | 无 | 维客线索管理 |
结论5 个页面均无数据导出功能。ExcelUpload 页面的 `DownloadOutlined` 图标用于下载空白模板,非数据导出。
#### admin-web系统管理后台参考
搜索范围:`apps/admin-web/src/` 全部文件
- `EnvConfig.tsx`:有"导出"按钮,调用 `exportEnvConfig()` 导出去敏感值的 `.env` 配置文件 → 运维功能,非业务数据导出
- `OpsPanel.tsx``CloudDownloadOutlined` 用于 Git Pull 操作 → 非数据导出
- **无业务数据导出功能可参考**
### 差距分析
review-report.md 中 P10→NS4 缺失项 #3 指出P10 §数据导出 位置隐含了管理后台应支持数据导出,但 NS4 完全未提及。
作为管理后台,以下场景存在合理的导出需求但均未实现:
| 导出场景 | 数据源 | 潜在用户需求 | 当前状态 |
|----------|--------|-------------|---------|
| 用户列表导出 | `auth.users` | 租户管理员需要离线查看/统计用户信息 | ❌ 无 |
| 审核记录导出 | `auth.user_applications` | 审核工作量统计、合规审计 | ❌ 无 |
| Excel 上传历史导出 | `biz.excel_upload_log` | 上传操作追溯、数据核对 | ❌ 无 |
| 维客线索导出 | `member_retention_clue` | 线索数据离线分析、交接 | ❌ 无 |
| 助教奖罚明细导出 | `biz.salary_adjustments` | 工资核算、财务对账 | ❌ 无 |
补充说明:
- P10 spec 本身也未明确列出"数据导出"功能(无 AC、无任务项但 review-report 将其标记为隐含需求
- P7-NS1-10 审查(绩效明细导出)结论同样为 ❌ 未解决,说明整个项目目前缺乏通用的数据导出基础设施
### 建议
1. **明确需求优先级**:数据导出为隐含需求,建议在 NS4 spec 中明确标注为"后续迭代项"或"MVP 不含",避免歧义
2. **如需实现,建议分两步**
- **Step 1 — 通用导出基础设施**
- 后端新增 `apps/backend/app/utils/export_helper.py`,封装 openpyxl 生成 Excel 的通用逻辑列定义、数据填充、StreamingResponse 包装)
- 新建 `biz.export_log` 表记录导出操作who/when/what/row_count满足审计要求
- **Step 2 — 逐页面接入**
- 用户列表:`GET /api/tenant/users/export?format=xlsx`
- 审核记录:`GET /api/tenant/applications/export?status=&format=xlsx`
- 维客线索:`GET /api/tenant/customers/{member_id}/clues/export`
- 上传历史:`GET /api/tenant/excel/logs/export`
3. **权限控制**:导出操作应复用现有的 `require_tenant_admin()` 鉴权 + `site_id IN (管辖列表)` 数据隔离,确保导出数据不越权
4. **导出格式**:建议统一 `.xlsx`(已有 openpyxl 依赖),暂不支持 CSV避免中文编码问题
5. **NS4 spec 补充建议**:在 NS4 文档"三、功能详细设计"中新增 §3.5 数据导出,定义支持导出的页面清单、导出格式、权限规则、导出日志记录要求