From ed8fc5f674544d3af63c6f68093ffc038385c493 Mon Sep 17 00:00:00 2001
From: dongyukun <1208714201@qq.com>
Date: 星期一, 16 十二月 2024 09:30:04 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 iailab-module-bpm/iailab-module-bpm-biz/src/main/java/com/iailab/module/bpm/framework/flowable/core/candidate/BpmTaskCandidateStrategy.java |   57 +++++++++++++++++++++++++++++++++++++++++++++++----------
 1 files changed, 47 insertions(+), 10 deletions(-)

diff --git a/iailab-module-bpm/iailab-module-bpm-biz/src/main/java/com/iailab/module/bpm/framework/flowable/core/candidate/BpmTaskCandidateStrategy.java b/iailab-module-bpm/iailab-module-bpm-biz/src/main/java/com/iailab/module/bpm/framework/flowable/core/candidate/BpmTaskCandidateStrategy.java
index 73993a5..9fa6a69 100644
--- a/iailab-module-bpm/iailab-module-bpm-biz/src/main/java/com/iailab/module/bpm/framework/flowable/core/candidate/BpmTaskCandidateStrategy.java
+++ b/iailab-module-bpm/iailab-module-bpm-biz/src/main/java/com/iailab/module/bpm/framework/flowable/core/candidate/BpmTaskCandidateStrategy.java
@@ -1,16 +1,18 @@
 package com.iailab.module.bpm.framework.flowable.core.candidate;
 
 import com.iailab.module.bpm.framework.flowable.core.enums.BpmTaskCandidateStrategyEnum;
+import org.flowable.bpmn.model.BpmnModel;
 import org.flowable.engine.delegate.DelegateExecution;
 
+import java.util.Map;
 import java.util.Set;
 
 /**
  * BPM 任务的候选人的策略接口
- *
+ * <p>
  * 例如说:分配审批人
  *
- * @author iailab
+ * @author hou
  */
 public interface BpmTaskCandidateStrategy {
 
@@ -29,14 +31,6 @@
     void validateParam(String param);
 
     /**
-     * 基于执行任务,获得任务的候选用户们
-     *
-     * @param execution 执行任务
-     * @return 用户编号集合
-     */
-    Set<Long> calculateUsers(DelegateExecution execution, String param);
-
-    /**
      * 是否一定要输入参数
      *
      * @return 是否
@@ -45,4 +39,47 @@
         return true;
     }
 
+    /**
+     * 基于候选人参数,获得任务的候选用户们
+     *
+     * 注意:实现 calculateUsers 系列方法时,有两种选择:
+     * 1. 只重写 calculateUsers 默认方法
+     * 2. 都重写 calculateUsersByTask 和 calculateUsersByActivity 两个方法
+     *
+     * @param param 执行任务
+     * @return 用户编号集合
+     */
+    default Set<Long> calculateUsers(String param) {
+        throw new UnsupportedOperationException("该分配方法未实现,请检查!");
+    }
+
+    /**
+     * 基于【执行任务】,获得任务的候选用户们
+     *
+     * @param execution 执行任务
+     * @return 用户编号集合
+     */
+    default Set<Long> calculateUsersByTask(DelegateExecution execution, String param) {
+        return calculateUsers(param);
+    }
+
+    /**
+     * 基于【流程活动】,获得任务的候选用户们
+     * <p>
+     * 目的:用于获取未执行节点的候选用户们
+     *
+     * @param bpmnModel 流程图
+     * @param activityId 活动 ID (对应 Bpmn XML id)
+     * @param param     节点的参数
+     * @param startUserId  流程发起人编号
+     * @param processDefinitionId 流程定义编号
+     * @param processVariables 流程变量
+     * @return 用户编号集合
+     */
+    @SuppressWarnings("unused")
+    default Set<Long> calculateUsersByActivity(BpmnModel bpmnModel, String activityId, String param,
+                                               Long startUserId, String processDefinitionId, Map<String, Object> processVariables) {
+        return calculateUsers(param);
+    }
+
 }

--
Gitblit v1.9.3