feat: chat integration, tenant admin spec, backend chat service, miniprogram updates, DEMO moved to tmp, XCX-TEST removed, migrations & docs

This commit is contained in:
Neo
2026-03-20 09:02:10 +08:00
parent 3d2e5f8165
commit beb88d5bea
388 changed files with 6436 additions and 25458 deletions

View File

@@ -465,6 +465,150 @@ MVP 全链路验证端点,从 `test."xcx-test"` 表读取数据。
---
## 16. 小程序配置 `/api/xcx/config`
所有端点需 JWTapproved 状态)。
### GET `/api/xcx/config/skill-types`
项目类型筛选器配置CONFIG-1。返回前端筛选器选项列表。
数据源:`app.v_cfg_area_category`(基于 `dws.cfg_area_category` 去重到 category 级别,排除 SPECIAL/OTHER按 sort_order 排序)。
响应头部自动插入"不限"选项key=ALL不存储在数据库中。
响应:`SkillTypeItem[]`
```json
[
{ "key": "ALL", "label": "不限", "emoji": "🔍", "cls": "" },
{ "key": "BILLIARD", "label": "🎱 中式/追分", "emoji": "🎱", "cls": "" },
{ "key": "SNOOKER", "label": "斯诺克", "emoji": "斯", "cls": "" },
{ "key": "MAHJONG", "label": "🀄 麻将/棋牌", "emoji": "🀄", "cls": "" },
{ "key": "KTV", "label": "🎤 团建/K歌", "emoji": "🎤", "cls": "" }
]
```
降级行为:查询失败时返回空数组 `[]`
---
## 17. 小程序三看板 `/api/xcx/board`
所有端点需 JWT + 对应权限。
### GET `/api/xcx/board/coaches`
助教看板BOARD-1。返回助教列表支持排序×技能×时间三重筛选。
查询参数:
- `sort`:排序维度(`perf_desc`/`perf_asc`/`salary_desc`/`salary_asc`/`sv_desc`/`task_desc`,默认 `perf_desc`
- `skill`:技能筛选(`ALL`/`BILLIARD`/`SNOOKER`/`MAHJONG`/`KTV`,默认 `ALL`
- `time`:时间范围(`month`/`quarter`/`last_month`/`last_3m`/`last_quarter`/`last_6m`,默认 `month`
约束:`time=last_6m` + `sort=sv_desc` 互斥,返回 400。
权限:`view_board_coach`
响应:`CoachBoardResponse`(含 `items` + `dimType`
### GET `/api/xcx/board/customers`
客户看板BOARD-2。返回客户列表支持维度×项目筛选 + 分页。
查询参数:
- `dimension`:客户维度(`recall`/`potential`/`balance`/`recharge`/`recent`/`spend60`/`freq60`/`loyal`,默认 `recall`
- `project`:项目筛选(`ALL`/`BILLIARD`/`SNOOKER`/`MAHJONG`/`KTV`,默认 `ALL`
- `page`:页码(默认 1
- `page_size`:每页条数(默认 20最大 100
权限:`view_board_customer`
响应:`CustomerBoardResponse`(含 `items`/`total`/`page`/`pageSize`
### GET `/api/xcx/board/finance`
财务看板BOARD-3。返回 6 大板块(经营一览/预收资产/营收结构/现金流/支出/助教分析)。
查询参数:
- `time`:时间范围(`month`/`lastMonth`/`week`/`lastWeek`/`quarter3`/`quarter`/`lastQuarter`/`half6`,默认 `month`
- `area`:区域筛选(`all`/`hall`/`hallA`/`hallB`/`hallC`/`mahjong`/`teamBuilding`,默认 `all`
- `compare`环比开关0=关闭/1=开启,默认 0
约束:`area≠all``recharge` 板块为 null`compare=0` 时响应不含环比字段。
权限:`view_board_finance`
响应:`FinanceBoardResponse`(含 `overview`/`recharge`/`revenue`/`cashflow`/`expense`/`coachAnalysis`
---
## 18. 小程序 CHAT `/api/xcx/chat`
所有端点需 JWTapproved 状态)。替代原 `xcx_ai_chat``/api/ai/*`),统一迁移到 `/api/xcx/chat/*` 路径。
### GET `/api/xcx/chat/history`
对话历史列表CHAT-1。返回当前用户的对话列表按最后消息时间倒序。
查询参数:
- `page`:页码(默认 1
- `page_size`:每页条数(默认 20最大 100
响应:`ChatHistoryResponse`(含 `items`/`total`/`page`/`pageSize`
每条对话包含:`id`(对话 ID`title`(对话标题)、`customerName`(关联客户姓名,可选)、`lastMessage`(最后消息摘要)、`timestamp`(最后消息时间)、`unreadCount`(未读数)。
### GET `/api/xcx/chat/messages`
通过上下文查询消息CHAT-2b。根据 `contextType` + `contextId` 自动查找或创建对话。
查询参数:
- `contextType`:上下文类型(`task`/`customer`/`coach`/`general`,必填)
- `contextId`:上下文 ID必填
- `page`:页码(默认 1
- `page_size`:每页条数(默认 50最大 100
对话复用规则:`task` 始终复用(无时限);`customer`/`coach` ≤ 3 天复用、> 3 天新建;`general` 始终新建。
响应:`ChatMessagesResponse`(含 `chatId`/`items`/`total`/`page`/`pageSize`
### GET `/api/xcx/chat/{chat_id}/messages`
通过 chatId 查询消息CHAT-2a。消息按 `created_at` 正序。
路径参数:
- `chat_id`:对话 ID
查询参数:
- `page`:页码(默认 1
- `page_size`:每页条数(默认 50最大 100
响应:`ChatMessagesResponse`
每条消息包含:`id``role``user`/`assistant`)、`content``createdAt``referenceCard`(可选,含 `type`/`title`/`summary`/`data` 键值对)。
### POST `/api/xcx/chat/{chat_id}/messages`
发送消息并获取同步 AI 回复CHAT-3。chatId 归属验证:不属于当前用户返回 403。
请求体:
```json
{ "content": "消息内容" }
```
响应:`SendMessageResponse`(含 `userMessage``aiReply`,各含 `id`/`content`/`createdAt`
AI 失败降级:用户消息仍保存,`aiReply.content` 返回错误提示HTTP 200。
### POST `/api/xcx/chat/stream`
SSE 流式对话端点CHAT-4。chatId 归属验证在流开始前完成。
请求体:
```json
{ "chatId": 1, "content": "消息内容" }
```
响应:`text/event-stream`(不经过 ResponseWrapper 包装)
SSE 事件类型:
- `event: message``data: {"token": "文本片段"}`
- `event: done``data: {"messageId": 123, "createdAt": "ISO8601"}`
- `event: error``data: {"message": "错误描述"}`
---
## 15. 维客线索 `/api/member-retention-clue`
替代原 `member-birthday` 端点,提供维客线索管理能力。