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