Camunda并行网关实战:如何用Parallel Gateway优化多审批流程(附完整BPMN配置)
2026/4/14 12:23:51 网站建设 项目流程

Camunda并行网关实战:如何用Parallel Gateway优化多审批流程(附完整BPMN配置)

在企业流程管理中,多部门协同审批是常见场景。比如合同审批需要法务、财务、业务三方同时审核,用章申请需经过项目经理、行政主管、综合办等多环节确认。这类流程如果采用串行处理,效率会大打折扣。Camunda的Parallel Gateway(并行网关)正是解决这类问题的利器。

1. 并行网关核心原理与业务价值

并行网关在BPMN规范中属于路由元素,其核心作用是同时创建多个执行路径。与排他网关(Exclusive Gateway)不同,它不进行条件判断,而是无条件激活所有出口分支。

典型应用场景包括

  • 多部门并行审批(如采购申请需财务、法务、技术三方评审)
  • 多系统同步操作(如订单创建后需同时触发库存锁定和物流调度)
  • 复杂任务分解(如项目启动需并行完成合同签署、环境准备、团队组建)

技术实现上,当流程执行到并行网关时:

  1. 引擎会在act_ru_execution表创建多条执行记录
  2. 每个分支生成独立的act_ru_task任务记录
  3. 所有分支完成后才会触发后续的汇聚网关
<parallelGateway id="forkGateway" /> <sequenceFlow sourceRef="forkGateway" targetRef="task1" /> <sequenceFlow sourceRef="forkGateway" targetRef="task2" /> <sequenceFlow sourceRef="forkGateway" targetRef="task3" />

2. 完整BPMN配置解析

以下是用章审批流程的完整模型(已精简非关键属性):

<bpmn:process id="seal_approval" name="用章审批流程"> <!-- 初始审批 --> <bpmn:userTask id="deptHeadApprove" name="部门主任审批"> <bpmn:outgoing>Flow_toFork</bpmn:outgoing> </bpmn:userTask> <!-- 并行网关分支 --> <bpmn:parallelGateway id="forkGateway"> <bpmn:incoming>Flow_toFork</bpmn:incoming> <bpmn:outgoing>Flow_toPM</bpmn:outgoing> <bpmn:outgoing>Flow_toAdmin</bpmn:outgoing> <bpmn:outgoing>Flow_toOffice</bpmn:outgoing> </bpmn:parallelGateway> <!-- 三个并行审批节点 --> <bpmn:userTask id="pmApprove" name="项目经理审批"/> <bpmn:userTask id="adminApprove" name="行政主管审批"/> <bpmn:userTask id="officeApprove" name="综合办审批"/> <!-- 汇聚网关 --> <bpmn:parallelGateway id="joinGateway"> <bpmn:incoming>Flow_fromPM</bpmn:incoming> <bpmn:incoming>Flow_fromAdmin</bpmn:incoming> <bpmn:incoming>Flow_fromOffice</bpmn:incoming> <bpmn:outgoing>Flow_toFinal</bpmn:outgoing> </bpmn:parallelGateway> <!-- 后续处理 --> <bpmn:userTask id="finalStep" name="用章登记"/> </bpmn:process>

关键设计要点:

  1. 分支与汇聚网关必须成对出现
  2. 每个分支的sequenceFlow不需要配置条件表达式
  3. 网关ID建议体现fork/join功能区分

3. 数据库层面的执行机制

当流程到达并行网关时,观察数据库变化:

act_ru_execution表

ID_PROC_INST_ID_ACT_ID_IS_ACTIVE_
100100fork0
101100task11
102100task21
103100task31

act_ru_task表

ID_EXECUTION_ID_NAME_ASSIGNEE_
200101项目经理审批user1
201102行政主管审批user2
202103综合办审批user3

注意:只有当所有分支任务都完成时,引擎才会删除对应的执行记录,并激活汇聚网关后的节点。

4. 常见问题与调试技巧

问题1:流程实例卡在汇聚网关

  • 检查点
    1. 确认所有分支任务状态为completed
    2. 查询act_ru_execution表是否存在未完成的执行分支
    3. 检查历史表act_hi_taskinst是否有异常终止记录

问题2:并行任务未全部创建

  • 可能原因
    • 网关配置错误(误用排他网关)
    • 流程定义部署版本混乱
    • 引擎事务未正常提交

性能优化建议

  1. 对于高频流程,建议:

    • 控制并行分支数量(通常不超过5个)
    • 避免在并行分支中嵌套子流程
    • act_ru_task表建立合适的索引
  2. 监控关键指标:

    -- 检查未完成的并行任务 SELECT COUNT(*) FROM act_ru_task WHERE PROC_DEF_ID_ = 'seal_approval:1' AND SUSPENSION_STATE_ = 1;

5. 高级应用:动态分支处理

通过Camunda的API可以实现更灵活的控制:

// 动态添加审批分支 runtimeService.createProcessInstanceModification(processInstanceId) .startBeforeActivity("additionalApprovalTask") .execute(); // 查询未完成任务 List<Task> tasks = taskService.createTaskQuery() .processInstanceId(processInstanceId) .taskDefinitionKey("pmApprove") .list();

实际项目中我们曾遇到这样的案例:某次紧急用章需要额外增加安全部门审批。通过运行时动态添加分支,既满足了临时需求,又保持了流程模型的简洁性。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询