package com.iailab.module.bpm.service.task; 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; import java.util.Collection; import java.util.List; import java.util.Map; /** * 流程任务实例 Service 接口 * * @author jason * @author 芋道源码 */ public interface BpmTaskService { // ========== Query 查询相关方法 ========== /** * 获得待办的流程任务分页 * * @param userId 用户编号 * @param pageReqVO 分页请求 * @return 流程任务分页 */ PageResult getTaskTodoPage(Long userId, BpmTaskPageReqVO pageReqVO); /** * 获得用户在指定流程下,首个需要处理(待办)的任务 * * @param userId 用户编号 * @param processInstanceId 流程实例编号 * @return 待办任务 */ BpmTaskRespVO getFirstTodoTask(Long userId, String processInstanceId); /** * 获得已办的流程任务分页 * * @param userId 用户编号 * @param pageReqVO 分页请求 * @return 流程任务分页 */ PageResult getTaskDonePage(Long userId, BpmTaskPageReqVO pageReqVO); /** * 获得全部的流程任务分页 * * @param userId 用户编号 * @param pageReqVO 分页请求 * @return 流程任务分页 */ PageResult getTaskPage(Long userId, BpmTaskPageReqVO pageReqVO); /** * 获得流程任务 Map * * @param processInstanceIds 流程实例的编号数组 * @return 流程任务 Map */ default Map> getTaskMapByProcessInstanceIds(List processInstanceIds) { return CollectionUtils.convertMultiMap(getTasksByProcessInstanceIds(processInstanceIds), Task::getProcessInstanceId); } /** * 获得流程任务列表 * * @param processInstanceIds 流程实例的编号数组 * @return 流程任务列表 */ List getTasksByProcessInstanceIds(List processInstanceIds); /** * 获得指定流程实例的流程任务列表,包括所有状态的 * * @param processInstanceId 流程实例的编号 * @param asc 是否升序 * @return 流程任务列表 */ List getTaskListByProcessInstanceId(String processInstanceId, Boolean asc); /** * 获取任务 * * @param id 任务编号 * @return 任务 */ Task getTask(String id); /** * 获取历史任务 * * @param id 任务编号 * @return 历史任务 */ HistoricTaskInstance getHistoricTask(String id); /** * 获取历史任务列表 * * @param taskIds 任务编号集合 * @return 历史任务列表 */ List getHistoricTasks(Collection taskIds); /** * 根据条件查询正在进行中的任务 * * @param processInstanceId 流程实例编号,不允许为空 * @param assigned 是否分配了审批人,允许空 * @param taskDefineKey 任务定义 Key,允许空 */ List getRunningTaskListByProcessInstanceId(String processInstanceId, Boolean assigned, String taskDefineKey); /** * 获取当前任务的可退回的 UserTask 集合 * * @param id 当前的任务 ID * @return 可以退回的节点列表 */ List getUserTaskListByReturn(String id); /** * 获取指定任务的子任务列表(多层) * * @param parentTaskId 父任务 ID * @param tasks 任务列表 * @return 子任务列表 */ List getAllChildrenTaskListByParentTaskId(String parentTaskId, List tasks); /** * 获取指定任务的子任务列表 * * @param parentTaskId 父任务ID * @return 子任务列表 */ List getTaskListByParentTaskId(String parentTaskId); /** * 获得指定流程实例的活动实例列表 * * @param processInstanceId 流程实例的编号 * @return 活动实例列表 */ List getActivityListByProcessInstanceId(String processInstanceId); /** * 获得执行编号对应的活动实例 * * @param executionId 执行编号 * @return 活动实例 */ List getHistoricActivityListByExecutionId(String executionId); // ========== Update 写入相关方法 ========== /** * 通过任务 * * @param userId 用户编号 * @param reqVO 通过请求 */ void approveTask(Long userId, @Valid BpmTaskApproveReqVO reqVO); /** * 不通过任务 * * @param userId 用户编号 * @param reqVO 不通过请求 */ void rejectTask(Long userId, @Valid BpmTaskRejectReqVO reqVO); /** * 将流程任务分配给指定用户 * * @param userId 用户编号 * @param reqVO 分配请求 */ void transferTask(Long userId, BpmTaskTransferReqVO reqVO); /** * 将指定流程实例的、进行中的流程任务,移动到结束节点 * * @param processInstanceId 流程编号 */ void moveTaskToEnd(String processInstanceId); /** * 将任务退回到指定的 targetDefinitionKey 位置 * * @param userId 用户编号 * @param reqVO 退回的任务key和当前所在的任务ID */ void returnTask(Long userId, BpmTaskReturnReqVO reqVO); /** * 将指定任务委派给其他人处理,等接收人处理后再回到原审批人手中审批 * * @param userId 用户编号 * @param reqVO 被委派人和被委派的任务编号理由参数 */ void delegateTask(Long userId, BpmTaskDelegateReqVO reqVO); /** * 任务加签 * * @param userId 被加签的用户和任务 ID,加签类型 * @param reqVO 当前用户 ID */ void createSignTask(Long userId, BpmTaskSignCreateReqVO reqVO); /** * 任务减签 * * @param userId 当前用户ID * @param reqVO 被减签的任务 ID,理由 */ void deleteSignTask(Long userId, BpmTaskSignDeleteReqVO reqVO); /** * 抄送任务 * * @param userId 用户编号 * @param reqVO 通过请求 */ void copyTask(Long userId, @Valid BpmTaskCopyReqVO reqVO); // ========== Event 事件相关方法 ========== /** * 处理 Task 创建事件,目前是 *

* 1. 更新它的状态为审批中 * 2. 处理自动通过的情况,例如说:1)无审批人时,是否自动通过、不通过;2)非【人工审核】时,是否自动通过、不通过 *

* 注意:它的触发时机,晚于 {@link #processTaskAssigned(Task)} 之后 * * @param task 任务实体 */ 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); }