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

@@ -1,6 +1,6 @@
# 后端架构文档 — FastAPI 服务层
> 更新日期2026-03-19RNS1.3 三看板接口 + CONFIG-1 技能类型
> 更新日期2026-03-23DevTrace 全链路日志模块
> 位置:`apps/backend/`
> 框架FastAPI + psycopg2同步连接池
> 数据库:`zqyy_app`(业务库)+ `etl_feiqiu`ETL 库,直连只读访问)
@@ -101,6 +101,7 @@ graph TB
| `xcx_ai_chat.py` | `/api/xcx/ai` | AI 对话SSE 流式) |
| `xcx_ai_cache.py` | `/api/xcx/ai-cache` | AI 缓存查询 |
| `admin_applications.py` | `/api/admin/applications` | 入驻审核 |
| `admin_dev_trace.py` | `/api/admin/dev-trace` | 开发调试全链路日志(日期/请求/详情/清理/设置/覆盖率8 端点) |
| `auth.py` | `/api/auth` | 管理后台登录 |
| `member_retention_clue.py` | `/api/member-retention-clue` | 维客线索 |
| `ops_panel.py` | `/api/ops` | 运维面板 |
@@ -226,7 +227,46 @@ RLS 视图直接暴露 DWD/DWS 原始列名,后端代码在 SQL 中使用 AS
→ { code: 0, data: ..., message: "ok" }
```
## 6. 关键设计决策
## 7. Trace 全链路日志模块(`app/trace/`
开发调试专用的全链路请求追踪模块,覆盖 HTTP 请求、SSE 流式响应、WebSocket 连接、后台 Job、异常/错误、数据库连接生命周期和中间件层。日志以 JSON Lines 格式写入本地文件系统,仅用于开发调试。
### 模块结构
| 文件 | 职责 |
|------|------|
| `config.py` | `TraceConfig` 配置类,从环境变量读取(`DEV_TRACE_*`支持运行时动态修改API 更新后即时生效,重启回退 .env 值) |
| `context.py` | `TraceContext` + `TraceSpan` 数据模型,基于 `contextvars.ContextVar` 实现请求级隔离23 种 span_type |
| `writer.py` | JSON Lines 日志写入器,按日期分目录(`YYYY-MM-DD/`)、按小时分文件(`trace_YYYY-MM-DD_HH.jsonl`),单文件 10MB 自动轮转,维护 `_index.json` 索引 |
| `cleanup.py` | 日志自动清理,按 `DEV_TRACE_LOG_RETENTION_DAYS` 保留天数删除过期目录,每日凌晨自动执行 |
| `middleware.py` | `TraceMiddleware` ASGI 中间件,拦截 `xcx_*` 路由前缀请求,创建 TraceContext记录 HTTP_IN/HTTP_OUT/MIDDLEWARE span写入响应头X-Request-ID 等) |
| `decorators.py` | `@trace_service` 装饰器Service 层函数追踪(模块名、函数名、参数、返回值摘要、耗时) |
| `db_wrapper.py` | 数据库连接生命周期追踪,包装 cursor.execute()DB_QUERY、get_connection()DB_CONN、连接关闭DB_CONN_RELEASE、异常DB_ERROR |
| `error_handler.py` | 异常/错误全链路追踪,集成全局异常处理器,记录 ERROR spanHTTPException + 未捕获异常 + 堆栈摘要) |
| `sse_wrapper.py` | SSE 流式响应追踪SSE_START/SSE_EVENT/SSE_END/AI_CALL/AI_ERROR每 10 token 记录一次避免 span 爆炸 |
| `ws_wrapper.py` | WebSocket 连接追踪WS_CONNECT/WS_MESSAGE/WS_DISCONNECTtrace_type 为 "ws" |
| `job_wrapper.py` | 后台 Job 执行追踪JOB_START/JOB_END/JOB_ERROR包装 lifespan 中注册的 4 个 job handler |
| `coverage.py` | 覆盖率扫描器,通过 AST 解析检测路由/Service/Job/SSE/WS 五个维度的追踪覆盖情况,启动时自动扫描,支持手动刷新 |
### 数据流
```
xcx_* 请求 / SSE / WebSocket / 后台 Job
→ TraceMiddleware / sse_wrapper / ws_wrapper / job_wrapper
→ 创建 TraceContextcontextvars
→ AUTH span鉴权层
→ @trace_service spanService 层)
→ DB_QUERY / DB_CONN span数据库层
→ ERROR span异常处理器
→ TraceWriter 异步写入 .jsonl 文件
→ admin_dev_trace API 读取并展示
```
### 管理 API
`admin_dev_trace.py` 路由(`/api/admin/dev-trace`8 个端点admin 角色鉴权)提供日志查询、手动清理、运行时设置修改和覆盖率扫描能力。前端 DevTrace 页面(`apps/admin-web/src/pages/DevTrace.tsx`)提供可视化操作界面。
## 8. 关键设计决策
- **ETL 直连**:所有 ETL 查询封装在 `fdw_queries.py`,通过 `_fdw_context()` 直连 ETL 库查询 `app.v_*` RLS 视图(不使用 FDW foreign table因 postgres_fdw 不传递自定义 GUC
- **优雅降级**扩展字段lastVisitDays/balance/aiSuggestion查询失败返回 null不影响核心响应

View File

@@ -289,7 +289,7 @@ RS 默认参数:
| 参数 | 默认值 | 说明 |
|------|--------|------|
| `lookback_days` | 60 | 回溯天数 |
| `lookback_days` | 90 | 回溯天数 |
| `session_merge_hours` | 4 | 会话合并间隔(小时) |
| `incentive_weight` | 1.5 | 激励权重 |
| `halflife_session` | 14.0 | 会话频次半衰期(天) |