Files
sc-lktx-mp/sc-lktx-backend/docs/easy-workflow.md
huangjin fe3ad20fe2 'init'
2026-06-29 17:34:59 +08:00

7.9 KiB
Raw Permalink Blame History

Easy-Workflow 工作流框架使用指南

概述

本项目已集成 easy-workflow 工作流框架,支持可视化的流程编排和灵活的审批流管理。

核心概念

1. 流程定义 (ProcessDefinition)

流程定义是工作流的模板,描述了一个完整的审批流程结构。

数据结构:

{
  "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 接口

流程定义管理

# 创建流程定义
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

流程实例管理

# 启动流程实例
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

任务管理

# 获取待办任务
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}

支持功能:

  • 查看审批进度时间线
  • 查看每个节点的审批意见
  • 执行审批操作

代码示例

发起审批流程

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
  }
})

获取待办任务

// 获取我的待办
const tasks = await workflowAPI.getPendingTasks()

// 遍历处理
tasks.forEach(task => {
  console.log(`${task.node_name} - ${task.instance?.process_def?.process_name}`)
})

审批操作

// 审批通过
await workflowAPI.approveTask(taskId, '同意申请')

// 审批拒绝
await workflowAPI.rejectTask(taskId, '拒绝,资料不全')

高级特性

1. 条件网关

{
  "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. 并行网关

{
  "node_id": "GW-Parallel",
  "node_name": "并行审批",
  "node_type": 2,
  "gw_config": {
    "inevitable_nodes": ["HR", "DeputyBoss"],
    "wait_for_all_prev_node": 1
  }
}

3. 会签节点

{
  "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修改业务代码

将原有的审批逻辑改为调用工作流引擎:

// 旧代码
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_eventsnode_end_events 数组中添加事件名称。

Q: 如何获取审批进度?

A: 调用 GET /api/v1/workflow/instances/:id 获取实例详情,包含所有任务记录。

Q: 支持撤回吗?

A: 当前版本暂不支持,可在流程定义中配置 revoke_events 实现。

访客预约审批流程示例

流程定义(创建时 nodes_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

当未匹配到员工或部门未配置审批人时使用:

[
  {"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"]}
]

技术支持

如有问题,请联系开发团队或查看示例代码。