Camunda 7.20.0工作流实战:深度解析多人审批的三种模式
在企业级应用开发中,工作流引擎扮演着至关重要的角色。Camunda作为一款开源的工作流和决策自动化平台,其强大的流程编排能力尤其适合处理复杂的审批场景。本文将聚焦Camunda 7.20.0版本中三种典型的多人审批模式——"或签"、"会签"和"比例签",通过实际案例演示如何根据业务需求选择最合适的审批规则。
1. 核心概念与业务场景
多人审批是企业流程自动化中最常见的需求之一。不同的业务场景对审批规则有着截然不同的要求:
- 或签(Any-one Approval):只需任意一位审批人通过即可继续流程,适用于紧急事务或信任度高的场景
- 会签(All Approval):需要所有审批人一致同意,常见于重大决策或高风险操作
- 比例签(Percentage Approval):按设定比例通过即可,平衡了效率与风险控制
这三种模式在OA系统、财务报销、合同审批等场景中各有应用。例如:
- 差旅审批可能采用或签模式提高效率
- 大额采购需要会签确保集体决策
- 项目立项可采用比例签(如2/3通过)平衡各方意见
2. 技术实现原理
Camunda通过multiInstanceLoopCharacteristics和completionCondition两个核心配置实现多人审批逻辑。
2.1 基础配置参数
在BPMN模型中,关键变量包括:
| 变量名 | 描述 | 示例值 |
|---|---|---|
nrOfInstances | 总实例数 | 5 |
nrOfCompletedInstances | 已完成实例数 | 2 |
loopCounter | 当前循环计数 | 3 |
elementVariable | 集合元素变量 | "assignee" |
2.2 XML配置示例
<bpmn:userTask id="approvalTask" name="审批节点"> <bpmn:multiInstanceLoopCharacteristics camunda:collection="${approvers}" camunda:elementVariable="approver"> <bpmn:completionCondition xsi:type="bpmn:tFormalExpression"> ${nrOfCompletedInstances >= 1} <!-- 或签条件 --> </bpmn:completionCondition> </bpmn:multiInstanceLoopCharacteristics> </bpmn:userTask>3. 三种模式的具体实现
3.1 或签模式实现
或签是最简单的多人审批模式,只需一个审批人通过即可:
<bpmn:completionCondition> ${nrOfCompletedInstances >= 1} </bpmn:completionCondition>注意:实际项目中建议使用
==1而非>=1,避免重复审批导致的逻辑混乱
Java代码中设置审批人列表:
List<String> approvers = Arrays.asList("user1", "user2", "user3"); variables.put("approvers", approvers);3.2 会签模式实现
会签要求所有审批人同意,配置最为简单:
<bpmn:completionCondition> ${nrOfCompletedInstances == nrOfInstances} </bpmn:completionCondition>典型应用场景包括:
- 董事会决议
- 高风险操作授权
- 跨部门协同审批
3.3 比例签模式实现
比例签通过数学表达式实现灵活的通过率控制:
<bpmn:completionCondition> ${nrOfCompletedInstances/nrOfInstances >= 0.6} <!-- 60%通过率 --> </bpmn:completionCondition>常见比例设置建议:
- 简单多数:>0.5
- 绝对多数:≥0.67
- 超级多数:≥0.75
4. 高级应用与最佳实践
4.1 动态审批人设置
通过Java代码动态生成审批人列表:
public List<String> getDepartmentApprovers(String deptId) { // 从数据库或API获取部门审批人 return userService.findApproversByDept(deptId); }4.2 混合审批策略
复杂业务可能需要组合多种审批模式:
- 第一级:部门内或签
- 第二级:跨部门比例签(60%)
- 第三级:高管会签
4.3 性能优化建议
- 对于大规模审批人列表(>50人),考虑分批次处理
- 使用
camunda:asyncBefore="true"避免长事务 - 监控
ACT_RU_TASK表防止任务堆积
5. 决策树:如何选择审批模式
根据业务需求选择合适模式的决策流程:
- 是否需要所有人同意?
- 是 → 选择会签
- 否 → 进入下一步
- 是否有明确的通过比例要求?
- 是 → 选择比例签
- 否 → 选择或签
- 是否需要分级审批?
- 是 → 组合多种模式
- 否 → 单一模式即可
实际项目中,我们曾遇到一个采购审批流程:5万元以下用或签,5-50万用比例签(50%),50万以上需要会签。这种阶梯式设计既保证了效率又控制了风险。