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/service/task/BpmTaskService.java |  182 ++++++++++++++++++++++++++++++++++-----------
 1 files changed, 137 insertions(+), 45 deletions(-)

diff --git a/iailab-module-bpm/iailab-module-bpm-biz/src/main/java/com/iailab/module/bpm/service/task/BpmTaskService.java b/iailab-module-bpm/iailab-module-bpm-biz/src/main/java/com/iailab/module/bpm/service/task/BpmTaskService.java
index e5015c0..1a03a1b 100644
--- a/iailab-module-bpm/iailab-module-bpm-biz/src/main/java/com/iailab/module/bpm/service/task/BpmTaskService.java
+++ b/iailab-module-bpm/iailab-module-bpm-biz/src/main/java/com/iailab/module/bpm/service/task/BpmTaskService.java
@@ -3,8 +3,11 @@
 import com.iailab.framework.common.pojo.PageResult;
 import com.iailab.framework.common.util.collection.CollectionUtils;
 import com.iailab.module.bpm.controller.admin.task.vo.task.*;
+import com.iailab.module.bpm.enums.definition.BpmUserTaskTimeoutHandlerTypeEnum;
 import org.flowable.bpmn.model.UserTask;
+import org.flowable.engine.history.HistoricActivityInstance;
 import org.flowable.task.api.Task;
+import org.flowable.task.api.TaskInfo;
 import org.flowable.task.api.history.HistoricTaskInstance;
 
 import javax.validation.Valid;
@@ -16,9 +19,11 @@
  * 流程任务实例 Service 接口
  *
  * @author jason
- * @author iailab
+ * @author 芋道源码
  */
 public interface BpmTaskService {
+
+    // ========== Query 查询相关方法 ==========
 
     /**
      * 获得待办的流程任务分页
@@ -28,6 +33,15 @@
      * @return 流程任务分页
      */
     PageResult<Task> getTaskTodoPage(Long userId, BpmTaskPageReqVO pageReqVO);
+
+    /**
+     * 获得用户在指定流程下,首个需要处理(待办)的任务
+     *
+     * @param userId 用户编号
+     * @param processInstanceId 流程实例编号
+     * @return 待办任务
+     */
+    BpmTaskRespVO getFirstTodoTask(Long userId, String processInstanceId);
 
     /**
      * 获得已办的流程任务分页
@@ -70,9 +84,88 @@
      * 获得指定流程实例的流程任务列表,包括所有状态的
      *
      * @param processInstanceId 流程实例的编号
+     * @param asc               是否升序
      * @return 流程任务列表
      */
-    List<HistoricTaskInstance> getTaskListByProcessInstanceId(String processInstanceId);
+    List<HistoricTaskInstance> getTaskListByProcessInstanceId(String processInstanceId, Boolean asc);
+
+    /**
+     * 获取任务
+     *
+     * @param id 任务编号
+     * @return 任务
+     */
+    Task getTask(String id);
+
+    /**
+     * 获取历史任务
+     *
+     * @param id 任务编号
+     * @return 历史任务
+     */
+    HistoricTaskInstance getHistoricTask(String id);
+
+    /**
+     * 获取历史任务列表
+     *
+     * @param taskIds 任务编号集合
+     * @return 历史任务列表
+     */
+    List<HistoricTaskInstance> getHistoricTasks(Collection<String> taskIds);
+
+    /**
+     * 根据条件查询正在进行中的任务
+     *
+     * @param processInstanceId 流程实例编号,不允许为空
+     * @param assigned          是否分配了审批人,允许空
+     * @param taskDefineKey     任务定义 Key,允许空
+     */
+    List<Task> getRunningTaskListByProcessInstanceId(String processInstanceId,
+                                                     Boolean assigned,
+                                                     String taskDefineKey);
+
+    /**
+     * 获取当前任务的可退回的 UserTask 集合
+     *
+     * @param id 当前的任务 ID
+     * @return 可以退回的节点列表
+     */
+    List<UserTask> getUserTaskListByReturn(String id);
+
+    /**
+     * 获取指定任务的子任务列表(多层)
+     *
+     * @param parentTaskId 父任务 ID
+     * @param tasks 任务列表
+     * @return 子任务列表
+     */
+    <T extends TaskInfo> List<T> getAllChildrenTaskListByParentTaskId(String parentTaskId, List<T> tasks);
+
+    /**
+     * 获取指定任务的子任务列表
+     *
+     * @param parentTaskId 父任务ID
+     * @return 子任务列表
+     */
+    List<Task> getTaskListByParentTaskId(String parentTaskId);
+
+    /**
+     * 获得指定流程实例的活动实例列表
+     *
+     * @param processInstanceId 流程实例的编号
+     * @return 活动实例列表
+     */
+    List<HistoricActivityInstance> getActivityListByProcessInstanceId(String processInstanceId);
+
+    /**
+     * 获得执行编号对应的活动实例
+     *
+     * @param executionId 执行编号
+     * @return 活动实例
+     */
+    List<HistoricActivityInstance> getHistoricActivityListByExecutionId(String executionId);
+
+    // ========== Update 写入相关方法 ==========
 
     /**
      * 通过任务
@@ -99,47 +192,17 @@
     void transferTask(Long userId, BpmTaskTransferReqVO reqVO);
 
     /**
-     * 更新 Task 状态,在创建时
+     * 将指定流程实例的、进行中的流程任务,移动到结束节点
      *
-     * @param task 任务实体
+     * @param processInstanceId 流程编号
      */
-    void updateTaskStatusWhenCreated(Task task);
+    void moveTaskToEnd(String processInstanceId);
 
     /**
-     * 更新 Task 状态,在取消时
-     *
-     * @param taskId 任务的编号
-     */
-    void updateTaskStatusWhenCanceled(String taskId);
-
-    /**
-     * 更新 Task 拓展记录,并发送通知
-     *
-     * @param task 任务实体
-     */
-    void updateTaskExtAssign(Task task);
-
-    /**
-     * 获取任务
-     *
-     * @param id 任务编号
-     * @return 任务
-     */
-    Task getTask(String id);
-
-    /**
-     * 获取当前任务的可回退的 UserTask 集合
-     *
-     * @param id 当前的任务 ID
-     * @return 可以回退的节点列表
-     */
-    List<UserTask> getUserTaskListByReturn(String id);
-
-    /**
-     * 将任务回退到指定的 targetDefinitionKey 位置
+     * 将任务退回到指定的 targetDefinitionKey 位置
      *
      * @param userId 用户编号
-     * @param reqVO  回退的任务key和当前所在的任务ID
+     * @param reqVO  退回的任务key和当前所在的任务ID
      */
     void returnTask(Long userId, BpmTaskReturnReqVO reqVO);
 
@@ -168,19 +231,48 @@
     void deleteSignTask(Long userId, BpmTaskSignDeleteReqVO reqVO);
 
     /**
-     * 获取指定任务的子任务列表
+     * 抄送任务
      *
-     * @param parentTaskId 父任务ID
-     * @return 子任务列表
+     * @param userId 用户编号
+     * @param reqVO  通过请求
      */
-    List<Task> getTaskListByParentTaskId(String parentTaskId);
+    void copyTask(Long userId, @Valid BpmTaskCopyReqVO reqVO);
+
+    // ========== Event 事件相关方法 ==========
 
     /**
-     * 通过任务 ID,查询任务名 Map
+     * 处理 Task 创建事件,目前是
+     * <p>
+     * 1. 更新它的状态为审批中
+     * 2. 处理自动通过的情况,例如说:1)无审批人时,是否自动通过、不通过;2)非【人工审核】时,是否自动通过、不通过
+     * <p>
+     * 注意:它的触发时机,晚于 {@link #processTaskAssigned(Task)} 之后
      *
-     * @param taskIds 任务 ID
-     * @return 任务 ID 与名字的 Map
+     * @param task 任务实体
      */
-    Map<String, String> getTaskNameByTaskIds(Collection<String> taskIds);
+    void processTaskCreated(Task task);
+
+    /**
+     * 处理 Task 取消事件,目前是更新它的状态为已取消
+     *
+     * @param taskId 任务的编号
+     */
+    void processTaskCanceled(String taskId);
+
+    /**
+     * 处理 Task 设置审批人事件,目前是发送审批消息
+     *
+     * @param task 任务实体
+     */
+    void processTaskAssigned(Task task);
+
+    /**
+     * 处理 Task 审批超时事件,可能会处理多个当前审批中的任务
+     *
+     * @param processInstanceId 流程示例编号
+     * @param taskDefineKey     任务 Key
+     * @param handlerType       处理类型,参见 {@link BpmUserTaskTimeoutHandlerTypeEnum}
+     */
+    void processTaskTimeout(String processInstanceId, String taskDefineKey, Integer handlerType);
 
 }

--
Gitblit v1.9.3