200 lines
6.2 KiB
Markdown
200 lines
6.2 KiB
Markdown
# 技术方案-企微审批工单同步
|
||
|
||
> **文档编号**: 02-技术方案-企微审批工单同步
|
||
> **版本**: v1.1
|
||
> **创建日期**: 2026-07-04
|
||
> **状态**: 待评审
|
||
|
||
---
|
||
|
||
## 1. 需求概述
|
||
|
||
### 1.1 背景
|
||
|
||
将企微审批工单同步到坐席待办事项,实现IT服务台与企微审批系统的集成。
|
||
|
||
### 1.2 需求描述
|
||
|
||
| 需求项 | 说明 |
|
||
|--------|------|
|
||
| 需求来源 | PRD v0.7.2 Backlog #74 |
|
||
| 需求类型 | P1(待办事项集成) |
|
||
| 目标 | 将企微审批工单同步到坐席待办事项 |
|
||
|
||
---
|
||
|
||
## 2. 技术方案
|
||
|
||
### 2.1 整体架构
|
||
|
||
```
|
||
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
|
||
│ 企微审批系统 │ ───▶ │ IT服务台后端 │ ───▶ │ 坐席待办事项 │
|
||
│ (外部API) │ │ (同步服务) │ │ (todo_items) │
|
||
└─────────────────┘ └─────────────────┘ └─────────────────┘
|
||
│ │ │
|
||
▼ ▼ ▼
|
||
审批工单数据 定时轮询/回调 待办面板展示
|
||
(get_approval_list) 转换+存储
|
||
```
|
||
|
||
### 2.2 数据同步方式
|
||
|
||
| 方式 | 说明 | 优点 | 缺点 |
|
||
|------|------|------|------|
|
||
| **定时轮询** | 每5分钟调用企微API拉取审批列表 | 实现简单,稳定可靠 | 有延迟(最大5分钟) |
|
||
| **企微回调** | 审批通过时企微主动推送 | 实时性高 | 需要企微开通回调权限 |
|
||
| **混合模式** | 回调为主 + 定时兜底 | 实时+兜底 | 实现复杂 |
|
||
|
||
**推荐方案**:定时轮询(简单可靠) + 回调模式(实时性)
|
||
|
||
### 2.3 企微API接口
|
||
|
||
使用企微 OA 审批接口:
|
||
|
||
| 接口 | 说明 |
|
||
|------|------|
|
||
| `GET /cgi-bin/oa/approvallist` | 获取审批列表 |
|
||
| `GET /cgi-bin/oa/approvalinfo` | 获取审批详情 |
|
||
|
||
### 2.4 数据映射
|
||
|
||
| 企微审批字段 | todo_item 字段 | 说明 |
|
||
|-------------|----------------|------|
|
||
| `sp_no` | `id` | 审批单号 |
|
||
| `sp_name` | `title` | 审批名称 |
|
||
| `apply_name` | `description.applicant` | 申请人 |
|
||
| `apply_time` | `created_at` | 申请时间 |
|
||
| `status` | `status` | 审批状态 |
|
||
| `sp_status` | `priority` | 审批类型 |
|
||
|
||
### 2.5 待办事项字段扩展
|
||
|
||
```python
|
||
class TodoItem(Base):
|
||
# 现有字段...
|
||
type: Mapped[str] = "approval" # 固定为 approval
|
||
|
||
# 新增字段(审批专用)
|
||
approval_id: Mapped[str] = mapped_column(String(64)) # 企微审批单ID
|
||
approval_type: Mapped[str] = mapped_column(String(64)) # 审批模板名称
|
||
applicant: Mapped[str] = mapped_column(String(100)) # 申请人
|
||
applicant_dept: Mapped[str] = mapped_column(String(100)) # 申请人部门
|
||
apply_time: Mapped[datetime] # 申请时间
|
||
approval_url: Mapped[str] = mapped_column(String(512)) # 审批详情链接
|
||
```
|
||
|
||
---
|
||
|
||
## 3. 审批模板(IT相关)
|
||
|
||
根据需求,明确需要同步的审批模板:
|
||
|
||
| 序号 | 审批模板名称 | 说明 |
|
||
|------|-------------|------|
|
||
| 1 | IT资产升级申请 | 硬件升级审批 |
|
||
| 2 | IT资产报废申请 | 资产报废审批 |
|
||
| 3 | 商业软件服务申请 | 软件采购审批 |
|
||
| 4 | 企微外联权限申请 | 外网权限审批 |
|
||
| 5 | 离职人员企微微盘&文档空间异常移交 | 离职资产移交 |
|
||
| 6 | 会议室故障报修 | 设备报修审批 |
|
||
|
||
---
|
||
|
||
## 4. 企微API权限确认
|
||
|
||
### 4.1 如何确认是否已开通权限
|
||
|
||
**方法一:企微管理后台查看**
|
||
|
||
1. 登录企微管理后台:https://work.weixin.qq.com/
|
||
2. 进入「应用管理」→「自建应用」→ 选择IT服务台应用
|
||
3. 查看「API权限」中是否包含:
|
||
- 通讯录同步
|
||
- 审批相关接口
|
||
|
||
**方法二:调用接口测试**
|
||
|
||
使用已有 access_token 调用以下接口测试:
|
||
|
||
```bash
|
||
curl "https://qyapi.weixin.qq.com/cgi-bin/oa/approvallist?access_token=xxx&start_time=0&end_time=9999999999"
|
||
```
|
||
|
||
如果返回 `{"errcode":0, ...}` 表示已开通权限。
|
||
|
||
**方法三:联系企微管理员**
|
||
|
||
确认是否在「审批」应用中开通了API调用权限。
|
||
|
||
### 4.2 回调模式说明
|
||
|
||
| 对比项 | 定时轮询 | 企微回调 |
|
||
|--------|----------|----------|
|
||
| 实时性 | 5分钟延迟 | 秒级实时 |
|
||
| 实现复杂度 | 简单 | 稍复杂 |
|
||
| 可靠性 | 稳定 | 依赖回调通道 |
|
||
| 资源消耗 | 每次全量/增量拉取 | 按需推送 |
|
||
|
||
**回调模式优势**:
|
||
1. 实时性高 - 审批提交/通过后立即同步
|
||
2. 节省资源 - 只需处理变更,无需轮询
|
||
3. 体验更好 - 坐席几乎实时看到新待办
|
||
|
||
**回调模式限制**:
|
||
1. 需要企微开通审批回调权限
|
||
2. 回调地址需公网可访问(可通过nginx反向代理)
|
||
3. 需要处理回调签名验证
|
||
|
||
---
|
||
|
||
## 5. 实施计划
|
||
|
||
### 5.1 任务拆分
|
||
|
||
| 任务 | 说明 | 优先级 |
|
||
|------|------|--------|
|
||
| T1 | 扩展 todo_item 模型,新增审批专用字段 | P0 |
|
||
| T2 | 创建企微审批同步服务 `ApprovalSyncService` | P0 |
|
||
| T3 | 实现定时轮询逻辑(每5分钟) | P0 |
|
||
| T4 | 坐席端待办面板接入审批数据 | P1 |
|
||
| T5 | 审批状态变更同步 | P1 |
|
||
| T6 | 企微审批回调接入(可选) | P2 |
|
||
|
||
### 5.2 数据库变更
|
||
|
||
```sql
|
||
ALTER TABLE todo_items
|
||
ADD COLUMN approval_id VARCHAR(64),
|
||
ADD COLUMN approval_type VARCHAR(64),
|
||
ADD COLUMN applicant VARCHAR(100),
|
||
ADD COLUMN applicant_dept VARCHAR(100),
|
||
ADD COLUMN apply_time TIMESTAMP,
|
||
ADD COLUMN approval_url VARCHAR(512);
|
||
```
|
||
|
||
---
|
||
|
||
## 6. 待确认事项
|
||
|
||
| 事项 | 状态 | 备注 |
|
||
|------|------|------|
|
||
| 企微API权限 | 待确认 | 需按4.1方法确认 |
|
||
| 审批模板 | ✅ 已明确 | 6个IT相关模板 |
|
||
| 同步频率 | ✅ 已确认 | 5分钟可接受 |
|
||
| 回调模式 | ✅ 确认开通 | 实时性优先 |
|
||
|
||
---
|
||
|
||
## 7. 相关文档
|
||
|
||
| 文档 | 说明 |
|
||
|------|------|
|
||
| [PRD v0.7.2 Backlog](./02-产品需求/product-产品/v0.7.2-backlog-candidate-2026-06-24.md) | 需求来源 |
|
||
| [todo_item 模型](../../backend/app/models/todo_item.py) | 现有模型定义 |
|
||
| [企微API文档](https://developer.work.weixin.qq.com/document/14567) | 审批接口文档 |
|
||
|
||
---
|
||
|
||
> **文档状态**: 待评审
|