feat: restore learning feedback and knowledge capabilities

This commit is contained in:
2026-07-18 00:50:11 +08:00
parent 876a23a123
commit 6bdc86e3fc
152 changed files with 30337 additions and 953 deletions
+74 -72
View File
@@ -1,5 +1,7 @@
# 开放平台组织与预算同步 API 设计方案 v1
> 线上前缀修正(2026-07-15):当前域名 `https://wuye.meihe.cc` 只有 `/api/*` 会代理到后端开放平台;实际接入必须使用 `https://wuye.meihe.cc/api/open/v1`。不要使用 `https://wuye.meihe.cc/open/v1`,否则可能命中前端 SPA 或 nginx,返回 HTML 而不是开放接口 JSON。
## 1. 文档目标
本文档用于定义本系统对外开放的组织与预算同步方案,覆盖以下对象:
@@ -47,7 +49,7 @@
### 3.2 架构原则
- 对外统一入口:全部走 `backend` 的 `/open/v1/*`
- 对外统一入口:全部走 `backend` 的 `/api/open/v1/*`
- 内外账号隔离:外部系统不用内部员工登录账号
- 事件通知最小化:通知消息只传事件元信息,不传完整业务数据
- 数据主动拉取:业务明细通过开放接口主动拉取
@@ -68,7 +70,7 @@
↓
订阅者收到消息
↓
7天内调用 /open/v1/sync/changes 或对象接口主动拉取
7天内调用 /api/open/v1/sync/changes 或对象接口主动拉取
↓
记录同步任务、同步明细、游标、审计日志
↓
@@ -470,66 +472,66 @@ X-Nonce
开放平台统一前缀:
```text
/open/v1
/api/open/v1
```
### 9.1 认证接口
- `POST /open/v1/auth/token`
- `POST /open/v1/auth/refresh`
- `GET /open/v1/auth/me`
- `POST /api/open/v1/auth/token`
- `POST /api/open/v1/auth/refresh`
- `GET /api/open/v1/auth/me`
### 9.2 订阅管理接口
- `POST /open/v1/subscriptions`
- `GET /open/v1/subscriptions`
- `GET /open/v1/subscriptions/{subscription_id}`
- `PATCH /open/v1/subscriptions/{subscription_id}`
- `POST /open/v1/subscriptions/{subscription_id}/enable`
- `POST /open/v1/subscriptions/{subscription_id}/disable`
- `POST /api/open/v1/subscriptions`
- `GET /api/open/v1/subscriptions`
- `GET /api/open/v1/subscriptions/{subscription_id}`
- `PATCH /api/open/v1/subscriptions/{subscription_id}`
- `POST /api/open/v1/subscriptions/{subscription_id}/enable`
- `POST /api/open/v1/subscriptions/{subscription_id}/disable`
### 9.3 事件通知接口
- `GET /open/v1/events`
- `GET /open/v1/events/{event_id}`
- `POST /open/v1/events/{event_id}/ack`
- `POST /open/v1/events/{event_id}/nack`
- `GET /api/open/v1/events`
- `GET /api/open/v1/events/{event_id}`
- `POST /api/open/v1/events/{event_id}/ack`
- `POST /api/open/v1/events/{event_id}/nack`
### 9.4 数据拉取接口
- `GET /open/v1/sync/changes`
- `GET /open/v1/sync/snapshot`
- `GET /open/v1/groups/{id}`
- `GET /open/v1/companies/{id}`
- `GET /open/v1/departments/{id}`
- `GET /open/v1/employees/{id}`
- `GET /open/v1/budget-versions/{id}`
- `GET /open/v1/budget-subjects/{id}`
- `GET /open/v1/budget-items/{id}`
- `GET /open/v1/budget-plans/{id}`
- `GET /api/open/v1/sync/changes`
- `GET /api/open/v1/sync/snapshot`
- `GET /api/open/v1/groups/{id}`
- `GET /api/open/v1/companies/{id}`
- `GET /api/open/v1/departments/{id}`
- `GET /api/open/v1/employees/{id}`
- `GET /api/open/v1/budget-versions/{id}`
- `GET /api/open/v1/budget-subjects/{id}`
- `GET /api/open/v1/budget-items/{id}`
- `GET /api/open/v1/budget-plans/{id}`
### 9.5 同步任务接口
- `POST /open/v1/sync/jobs`
- `GET /open/v1/sync/jobs/{job_id}`
- `POST /open/v1/sync/jobs/{job_id}/complete`
- `POST /api/open/v1/sync/jobs`
- `GET /api/open/v1/sync/jobs/{job_id}`
- `POST /api/open/v1/sync/jobs/{job_id}/complete`
### 9.6 补数申请接口
- `POST /open/v1/replay-requests`
- `GET /open/v1/replay-requests`
- `GET /open/v1/replay-requests/{request_id}`
- `POST /open/v1/replay-requests/{request_id}/cancel`
- `POST /open/v1/replay-requests/{request_id}/approve`
- `POST /open/v1/replay-requests/{request_id}/reject`
- `POST /open/v1/replay-requests/{request_id}/execute`
- `POST /api/open/v1/replay-requests`
- `GET /api/open/v1/replay-requests`
- `GET /api/open/v1/replay-requests/{request_id}`
- `POST /api/open/v1/replay-requests/{request_id}/cancel`
- `POST /api/open/v1/replay-requests/{request_id}/approve`
- `POST /api/open/v1/replay-requests/{request_id}/reject`
- `POST /api/open/v1/replay-requests/{request_id}/execute`
### 9.7 追踪与审计接口
- `GET /open/v1/traces/{trace_id}`
- `GET /open/v1/audits`
- `GET /open/v1/subscriptions/{subscription_id}/deliveries`
- `GET /open/v1/subscriptions/{subscription_id}/sync-records`
- `GET /api/open/v1/traces/{trace_id}`
- `GET /api/open/v1/audits`
- `GET /api/open/v1/subscriptions/{subscription_id}/deliveries`
- `GET /api/open/v1/subscriptions/{subscription_id}/sync-records`
---
@@ -537,7 +539,7 @@ X-Nonce
### 10.1 获取令牌
`POST /open/v1/auth/token`
`POST /api/open/v1/auth/token`
请求示例:
@@ -565,11 +567,11 @@ X-Nonce
### 10.2 刷新令牌
`POST /open/v1/auth/refresh`
`POST /api/open/v1/auth/refresh`
### 10.3 查询当前应用
`GET /open/v1/auth/me`
`GET /api/open/v1/auth/me`
返回内容:
@@ -587,7 +589,7 @@ X-Nonce
### 11.1 创建订阅
`POST /open/v1/subscriptions`
`POST /api/open/v1/subscriptions`
请求示例:
@@ -633,7 +635,7 @@ X-Nonce
### 11.2 查询订阅列表
`GET /open/v1/subscriptions`
`GET /api/open/v1/subscriptions`
支持筛选:
@@ -643,8 +645,8 @@ X-Nonce
### 11.3 启停订阅
- `POST /open/v1/subscriptions/{subscription_id}/enable`
- `POST /open/v1/subscriptions/{subscription_id}/disable`
- `POST /api/open/v1/subscriptions/{subscription_id}/enable`
- `POST /api/open/v1/subscriptions/{subscription_id}/disable`
---
@@ -652,7 +654,7 @@ X-Nonce
### 12.1 拉取事件列表
`GET /open/v1/events`
`GET /api/open/v1/events`
查询参数:
@@ -685,7 +687,7 @@ X-Nonce
### 12.2 事件确认收到
`POST /open/v1/events/{event_id}/ack`
`POST /api/open/v1/events/{event_id}/ack`
请求示例:
@@ -698,7 +700,7 @@ X-Nonce
### 12.3 事件确认失败
`POST /open/v1/events/{event_id}/nack`
`POST /api/open/v1/events/{event_id}/nack`
请求示例:
@@ -715,7 +717,7 @@ X-Nonce
### 13.1 增量拉取
`GET /open/v1/sync/changes`
`GET /api/open/v1/sync/changes`
查询参数:
@@ -758,7 +760,7 @@ X-Nonce
### 13.2 全量快照拉取
`GET /open/v1/sync/snapshot`
`GET /api/open/v1/sync/snapshot`
查询参数:
@@ -779,35 +781,35 @@ X-Nonce
#### 集团
`GET /open/v1/groups/{id}`
`GET /api/open/v1/groups/{id}`
#### 公司
`GET /open/v1/companies/{id}`
`GET /api/open/v1/companies/{id}`
#### 部门
`GET /open/v1/departments/{id}`
`GET /api/open/v1/departments/{id}`
#### 员工
`GET /open/v1/employees/{id}`
`GET /api/open/v1/employees/{id}`
#### 预算版本
`GET /open/v1/budget-versions/{id}`
`GET /api/open/v1/budget-versions/{id}`
#### 预算科目
`GET /open/v1/budget-subjects/{id}`
`GET /api/open/v1/budget-subjects/{id}`
#### 预算项
`GET /open/v1/budget-items/{id}`
`GET /api/open/v1/budget-items/{id}`
#### 预算计划
`GET /open/v1/budget-plans/{id}`
`GET /api/open/v1/budget-plans/{id}`
### 13.4 单对象接口通用参数
@@ -821,7 +823,7 @@ X-Nonce
### 14.1 创建同步任务
`POST /open/v1/sync/jobs`
`POST /api/open/v1/sync/jobs`
用途:
@@ -853,11 +855,11 @@ X-Nonce
### 14.2 查询同步任务
`GET /open/v1/sync/jobs/{job_id}`
`GET /api/open/v1/sync/jobs/{job_id}`
### 14.3 回报同步结果
`POST /open/v1/sync/jobs/{job_id}/complete`
`POST /api/open/v1/sync/jobs/{job_id}/complete`
请求示例:
@@ -932,7 +934,7 @@ X-Nonce
### 16.3 发起补数申请
`POST /open/v1/replay-requests`
`POST /api/open/v1/replay-requests`
请求示例:
@@ -963,29 +965,29 @@ X-Nonce
### 16.4 查询补数申请
`GET /open/v1/replay-requests`
`GET /api/open/v1/replay-requests`
### 16.5 查询补数申请详情
`GET /open/v1/replay-requests/{request_id}`
`GET /api/open/v1/replay-requests/{request_id}`
### 16.6 取消补数申请
`POST /open/v1/replay-requests/{request_id}/cancel`
`POST /api/open/v1/replay-requests/{request_id}/cancel`
### 16.7 审批补数申请
#### 批准
`POST /open/v1/replay-requests/{request_id}/approve`
`POST /api/open/v1/replay-requests/{request_id}/approve`
#### 驳回
`POST /open/v1/replay-requests/{request_id}/reject`
`POST /api/open/v1/replay-requests/{request_id}/reject`
### 16.8 执行补数
`POST /open/v1/replay-requests/{request_id}/execute`
`POST /api/open/v1/replay-requests/{request_id}/execute`
执行方式:
@@ -999,7 +1001,7 @@ X-Nonce
### 17.1 查询链路追踪
`GET /open/v1/traces/{trace_id}`
`GET /api/open/v1/traces/{trace_id}`
返回应包含:
@@ -1014,7 +1016,7 @@ X-Nonce
### 17.2 查询审计日志
`GET /open/v1/audits`
`GET /api/open/v1/audits`
可按以下条件筛选: