'init'
This commit is contained in:
2
sc-lktx-backend/docs/docs.go
Normal file
2
sc-lktx-backend/docs/docs.go
Normal file
@@ -0,0 +1,2 @@
|
||||
// Package docs 用于 swagger 文档初始化
|
||||
package docs
|
||||
358
sc-lktx-backend/docs/easy-workflow.md
Normal file
358
sc-lktx-backend/docs/easy-workflow.md
Normal 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"]}
|
||||
]
|
||||
```
|
||||
|
||||
## 技术支持
|
||||
|
||||
如有问题,请联系开发团队或查看示例代码。
|
||||
Reference in New Issue
Block a user