潘志宝
9 天以前 9d5be382e52f9ac57199d5ef75cc23f925a4cdb0
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);
}