潘志宝
9 天以前 9d5be382e52f9ac57199d5ef75cc23f925a4cdb0
iailab-module-bpm/iailab-module-bpm-biz/src/main/java/com/iailab/module/bpm/framework/flowable/core/behavior/BpmSequentialMultiInstanceBehavior.java
@@ -1,5 +1,7 @@
package com.iailab.module.bpm.framework.flowable.core.behavior;
import cn.hutool.core.collection.CollUtil;
import com.iailab.framework.common.util.collection.SetUtils;
import com.iailab.module.bpm.framework.flowable.core.candidate.BpmTaskCandidateInvoker;
import com.iailab.module.bpm.framework.flowable.core.util.FlowableUtils;
import lombok.Setter;
@@ -42,9 +44,18 @@
        super.collectionElementVariable = FlowableUtils.formatExecutionCollectionElementVariable(execution.getCurrentActivityId());
        // 第二步,获取任务的所有处理人
        Set<Long> assigneeUserIds = new LinkedHashSet<>(taskCandidateInvoker.calculateUsers(execution)); // 保证有序!!!
        execution.setVariable(super.collectionVariable, assigneeUserIds);
        @SuppressWarnings("unchecked")
        Set<Long> assigneeUserIds = (Set<Long>) execution.getVariable(super.collectionVariable, Set.class);
        if (assigneeUserIds == null) {
            assigneeUserIds = taskCandidateInvoker.calculateUsersByTask(execution);
            execution.setVariable(super.collectionVariable, assigneeUserIds);
            if (CollUtil.isEmpty(assigneeUserIds)) {
                // 特殊:如果没有处理人的情况下,至少有一个 null 空元素,避免自动通过!
                // 这样,保证在 BpmUserTaskActivityBehavior 至少创建出一个 Task 任务
                // 用途:1)审批人为空时;2)审批类型为自动通过、自动拒绝时
                assigneeUserIds = SetUtils.asSet((Long) null);
            }
        }
        return assigneeUserIds.size();
    }
}