This commit is contained in:
huangjin
2026-06-29 17:34:59 +08:00
commit fe3ad20fe2
271 changed files with 51767 additions and 0 deletions

View File

@@ -0,0 +1,358 @@
# Easy-Workflow 工作流框架使用指南
## 概述
本项目已集成 easy-workflow 工作流框架,支持可视化的流程编排和灵活的审批流管理。
## 核心概念
### 1. 流程定义 (ProcessDefinition)
流程定义是工作流的模板,描述了一个完整的审批流程结构。
**数据结构:**
```json
{
"process_name": "员工请假",
"process_code": "leave_request",
"source": "办公系统",
"nodes": [
{
"node_id": "Start",
"node_name": "请假申请",
"node_type": 0,
"user_ids": ["$starter"],
"roles": []
},
{
"node_id": "Manager",
"node_name": "主管审批",
"node_type": 1,
"prev_node_ids": ["Start"],
"roles": ["主管"],
"is_cosigned": 0
}
]
}
```
### 2. 节点类型 (NodeType)
- **0 - 开始节点**:流程的起点
- **1 - 审批节点**:需要人工审批的节点
- **2 - 网关节点**:条件分支或并行分支
- **3 - 结束节点**:流程终点
### 3. 流程实例 (ProcessInstance)
每次发起审批时创建的实例,关联具体的业务数据。
### 4. 任务 (Task)
每个审批节点会生成一个或多个待办任务,分配给具体的处理人。
## API 接口
### 流程定义管理
```bash
# 创建流程定义
POST /api/v1/workflow/definitions
Content-Type: application/json
{
"process_name": "访客预约审批",
"process_code": "visitor_approval",
"source": "访客系统",
"nodes_json": "[...]"
}
# 获取流程定义列表
GET /api/v1/workflow/definitions
# 获取流程定义详情
GET /api/v1/workflow/definitions/:id
# 更新流程定义
PUT /api/v1/workflow/definitions/:id
# 删除流程定义
DELETE /api/v1/workflow/definitions/:id
```
### 流程实例管理
```bash
# 启动流程实例
POST /api/v1/workflow/instances
Content-Type: application/json
{
"process_code": "visitor_approval",
"business_type": "appointment",
"business_id": 123,
"variables": {
"days": 3,
"reason": "商务拜访"
}
}
# 获取流程实例列表
GET /api/v1/workflow/instances?business_type=appointment&status=0
# 获取流程实例详情
GET /api/v1/workflow/instances/:id
```
### 任务管理
```bash
# 获取待办任务
GET /api/v1/workflow/tasks/pending
# 审批通过
POST /api/v1/workflow/tasks/:id/approve
Content-Type: application/json
{
"comment": "同意"
}
# 审批拒绝
POST /api/v1/workflow/tasks/:id/reject
Content-Type: application/json
{
"comment": "拒绝,原因:..."
}
```
## 前端使用
### 1. 流程设计器
访问路径:`/subpackages/admin/workflow-designer`
支持功能:
- 创建/编辑流程定义
- 添加/删除节点
- 配置节点类型和审批人
- 设置网关条件
### 2. 流程管理列表
访问路径:`/subpackages/admin/workflow-list`
支持功能:
- 查看所有流程定义
- 编辑/删除流程
- 查看流程实例
### 3. 我的待办
访问路径:`/subpackages/workflow/my-tasks`
支持功能:
- 查看待审批任务
- 快速审批通过/拒绝
### 4. 流程实例详情
访问路径:`/subpackages/admin/workflow-instance-detail?id={instanceId}`
支持功能:
- 查看审批进度时间线
- 查看每个节点的审批意见
- 执行审批操作
## 代码示例
### 发起审批流程
```typescript
import workflowAPI from '@/api/workflow'
// 发起访客预约审批
const instance = await workflowAPI.startInstance({
process_code: 'visitor_approval',
business_type: 'appointment',
business_id: appointmentId,
variables: {
visitDays: 3,
visitorCount: 5
}
})
```
### 获取待办任务
```typescript
// 获取我的待办
const tasks = await workflowAPI.getPendingTasks()
// 遍历处理
tasks.forEach(task => {
console.log(`${task.node_name} - ${task.instance?.process_def?.process_name}`)
})
```
### 审批操作
```typescript
// 审批通过
await workflowAPI.approveTask(taskId, '同意申请')
// 审批拒绝
await workflowAPI.rejectTask(taskId, '拒绝,资料不全')
```
## 高级特性
### 1. 条件网关
```json
{
"node_id": "GW-Day",
"node_name": "请假天数判断",
"node_type": 2,
"gw_config": {
"conditions": [
{
"expression": "$days >= 3",
"node_id": "Manager"
},
{
"expression": "$days < 3",
"node_id": "END"
}
]
}
}
```
### 2. 并行网关
```json
{
"node_id": "GW-Parallel",
"node_name": "并行审批",
"node_type": 2,
"gw_config": {
"inevitable_nodes": ["HR", "DeputyBoss"],
"wait_for_all_prev_node": 1
}
}
```
### 3. 会签节点
```json
{
"node_id": "Board",
"node_name": "董事会审批",
"node_type": 1,
"roles": ["董事 A", "董事 B", "董事 C"],
"is_cosigned": 1
}
```
## 数据库表结构
### wf_process_definitions
- 存储流程定义模板
- 节点配置以 JSON 格式存储
### wf_process_instances
- 存储流程实例
- 关联业务数据
- 记录当前节点
### wf_tasks
- 存储审批任务
- 记录处理人和审批意见
## 迁移现有审批逻辑
### 步骤 1创建流程定义
使用流程设计器创建对应的流程模板。
### 步骤 2修改业务代码
将原有的审批逻辑改为调用工作流引擎:
```go
// 旧代码
approvalHandler.StartInstance(...)
// 新代码
workflowEngine.StartInstance("visitor_approval", "appointment", appointmentID, userID, variables)
```
### 步骤 3数据迁移
将现有的审批记录迁移到新的工作流表(可选)。
## 注意事项
1. **流程变量**:使用 `$` 前缀引用,如 `$days`
2. **角色解析**:审批人可以是具体用户 ID 或角色编码
3. **会签支持**:设置 `is_cosigned=1` 启用会签
4. **网关等待**`wait_for_all_prev_node=1` 表示等待所有前置节点完成
## 常见问题
### Q: 如何添加自定义事件?
A: 在节点的 `node_start_events``node_end_events` 数组中添加事件名称。
### Q: 如何获取审批进度?
A: 调用 `GET /api/v1/workflow/instances/:id` 获取实例详情,包含所有任务记录。
### Q: 支持撤回吗?
A: 当前版本暂不支持,可在流程定义中配置 `revoke_events` 实现。
## 访客预约审批流程示例
### 流程定义(创建时 nodes_json 内容)
```json
[
{"node_id":"Start","node_name":"发起预约","node_type":0,"user_ids":["$starter"]},
{"node_id":"Employee","node_name":"公司接待员工","node_type":1,"prev_node_ids":["Start"],"user_ids":["$employee_id"]},
{"node_id":"DeptApprover","node_name":"部门指定人审批","node_type":1,"prev_node_ids":["Employee"],"user_ids":["$dept_approver_ids"]},
{"node_id":"VPApproval","node_name":"分管领导审批","node_type":1,"prev_node_ids":["DeptApprover"],"user_ids":["$vp_ids"]},
{"node_id":"End","node_name":"审批完成","node_type":3,"prev_node_ids":["VPApproval"]}
]
```
### 流程变量说明
| 变量名 | 类型 | 说明 |
|--------|------|------|
| `$starter` | uint | 发起人的用户 ID引擎自动填入 |
| `$employee_id` | uint | 被访员工用户 ID |
| `$dept_approver_ids` | JSON 数组 | 部门指定审批人 ID 列表,支持多人 |
| `$vp_ids` | JSON 数组 | 分管领导 ID 列表,支持多人,空数组跳过节点 |
### 行为规则
- **`$dept_approver_ids` 为空**:跳过「部门指定人审批」节点
- **`$vp_ids` 为空**:跳过「分管领导审批」节点
- **`$default_approver_ids` 为空**:跳过「兜底审批」节点,流程直接结束
- **多个审批人**:会签模式,需全部通过才流转下一节点
### 兜底审批流程定义visitor_approval_simple
当未匹配到员工或部门未配置审批人时使用:
```json
[
{"node_id":"Start","node_name":"发起预约","node_type":0,"user_ids":["$starter"]},
{"node_id":"DefaultApproval","node_name":"兜底审批","node_type":1,"prev_node_ids":["Start"],"user_ids":["$default_approver_ids"],"is_cosigned":1},
{"node_id":"End","node_name":"审批完成","node_type":3,"prev_node_ids":["DefaultApproval"]}
]
```
## 技术支持
如有问题,请联系开发团队或查看示例代码。