普通网友 2025-05-15 07:25 采纳率: 97.8%
浏览 51
已采纳

Flowable会签节点如何实现多人并行审批并汇总结果?

在Flowable工作流引擎中,如何利用会签节点实现多人并行审批并汇总审批结果?具体问题如下:当一个任务进入会签节点时,如何配置使任务能够同时分配给多个审批人,并确保每位审批人独立完成审批后,系统自动汇总所有审批意见和结果(如同意或拒绝),最终根据预设逻辑(如全体同意、半数以上同意等)决定流程走向?此外,在实现过程中,如何处理审批人动态增减、超时未处理等情况以保证流程的灵活性与 robust性?
  • 写回答

1条回答 默认 最新

  • The Smurf 2025-05-15 07:25
    关注

    1. Flowable工作流引擎中的会签节点基础概念

    在Flowable工作流引擎中,会签节点是一种用于多人并行审批的特殊任务节点。它允许将任务分配给多个用户或组,并要求所有或部分用户完成任务后才能继续流程。

    常见的配置包括:

    • 指定审批人集合:通过候选人(Candidate)或候选组(Candidate Group)定义。
    • 设置完成条件:例如全体同意、半数以上同意等。
    • 处理超时逻辑:为每个审批人设定任务过期时间。

    在实际应用中,会签节点的灵活性和鲁棒性取决于如何合理配置这些参数。

    2. 配置会签节点以实现多人并行审批

    为了使任务能够同时分配给多个审批人,需要在BPMN流程图中定义一个用户任务,并将其属性设置为“多实例”模式。

    <userTask id="multiInstanceTask" name="多人审批任务" flowable:assignee="${assignee}">
        <multiInstanceLoopCharacteristics isSequential="false" flowable:collection="approvers" flowable:elementVariable="approver">
            <completionCondition>${nrOfCompletedInstances == nrOfInstances}</completionCondition>
        </multiInstanceLoopCharacteristics>
    </userTask>

    上述代码片段中:

    • isSequential="false"表示任务是并行执行的。
    • flowable:collection定义了审批人列表。
    • completionCondition指定了任务完成的条件。

    此配置确保每位审批人独立完成任务后,系统自动汇总结果。

    3. 汇总审批意见与结果

    在Flowable中,可以通过监听器或服务任务来捕获审批结果并进行汇总。以下是一个简单的Java代码示例,展示如何根据预设逻辑决定流程走向:

    public boolean evaluateApprovalResults(List<ApprovalResult> results, String decisionLogic) {
            int totalApprovals = results.size();
            int approvedCount = (int) results.stream().filter(result -> result.isApproved()).count();
    
            if ("all".equals(decisionLogic)) {
                return approvedCount == totalApprovals;
            } else if ("majority".equals(decisionLogic)) {
                return approvedCount > totalApprovals / 2;
            }
            return false;
        }

    该方法接收审批结果列表和决策逻辑(如全体同意或多数同意),返回是否满足条件。

    4. 动态增减审批人与超时处理

    在实现过程中,可能会遇到审批人动态增减的情况。以下是两种常见场景及解决方案:

    场景解决方案
    新增审批人通过API调用taskService.addCandidateUser(taskId, userId)动态添加新的审批人。
    移除审批人使用taskService.deleteCandidateUser(taskId, userId)删除不再需要的审批人。

    对于超时未处理的任务,可以配置定时器事件来触发提醒或自动处理逻辑。

    5. 流程图示例

    以下是使用Mermaid语法绘制的简单流程图,展示会签节点的工作流程:

    graph TD; A[开始] --> B(进入会签节点); B --> C{分配任务}; C --并行--> D[审批人1]; C --并行--> E[审批人2]; D --> F{汇总结果}; E --> F; F --满足条件--> G(流程继续); F --不满足条件--> H(流程终止);

    此图清晰展示了任务分配、审批、结果汇总以及流程走向的完整过程。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已采纳回答 10月23日
  • 创建了问题 5月15日