dongyukun
6 天以前 ed8fc5f674544d3af63c6f68093ffc038385c493
提交 | 用户 | 时间
e7c126 1 package com.iailab.module.bpm.service.task;
H 2
3 import com.iailab.framework.common.pojo.PageResult;
4 import com.iailab.framework.common.util.collection.CollectionUtils;
5 import com.iailab.module.bpm.controller.admin.task.vo.task.*;
bb2880 6 import com.iailab.module.bpm.enums.definition.BpmUserTaskTimeoutHandlerTypeEnum;
e7c126 7 import org.flowable.bpmn.model.UserTask;
bb2880 8 import org.flowable.engine.history.HistoricActivityInstance;
e7c126 9 import org.flowable.task.api.Task;
bb2880 10 import org.flowable.task.api.TaskInfo;
e7c126 11 import org.flowable.task.api.history.HistoricTaskInstance;
H 12
13 import javax.validation.Valid;
14 import java.util.Collection;
15 import java.util.List;
16 import java.util.Map;
17
18 /**
19  * 流程任务实例 Service 接口
20  *
21  * @author jason
bb2880 22  * @author 芋道源码
e7c126 23  */
H 24 public interface BpmTaskService {
bb2880 25
H 26     // ========== Query 查询相关方法 ==========
e7c126 27
H 28     /**
29      * 获得待办的流程任务分页
30      *
31      * @param userId    用户编号
32      * @param pageReqVO 分页请求
33      * @return 流程任务分页
34      */
35     PageResult<Task> getTaskTodoPage(Long userId, BpmTaskPageReqVO pageReqVO);
bb2880 36
H 37     /**
38      * 获得用户在指定流程下,首个需要处理(待办)的任务
39      *
40      * @param userId 用户编号
41      * @param processInstanceId 流程实例编号
42      * @return 待办任务
43      */
44     BpmTaskRespVO getFirstTodoTask(Long userId, String processInstanceId);
e7c126 45
H 46     /**
47      * 获得已办的流程任务分页
48      *
49      * @param userId    用户编号
50      * @param pageReqVO 分页请求
51      * @return 流程任务分页
52      */
53     PageResult<HistoricTaskInstance> getTaskDonePage(Long userId, BpmTaskPageReqVO pageReqVO);
54
55     /**
56      * 获得全部的流程任务分页
57      *
58      * @param userId    用户编号
59      * @param pageReqVO 分页请求
60      * @return 流程任务分页
61      */
62     PageResult<HistoricTaskInstance> getTaskPage(Long userId, BpmTaskPageReqVO pageReqVO);
63
64     /**
65      * 获得流程任务 Map
66      *
67      * @param processInstanceIds 流程实例的编号数组
68      * @return 流程任务 Map
69      */
70     default Map<String, List<Task>> getTaskMapByProcessInstanceIds(List<String> processInstanceIds) {
71         return CollectionUtils.convertMultiMap(getTasksByProcessInstanceIds(processInstanceIds),
72                 Task::getProcessInstanceId);
73     }
74
75     /**
76      * 获得流程任务列表
77      *
78      * @param processInstanceIds 流程实例的编号数组
79      * @return 流程任务列表
80      */
81     List<Task> getTasksByProcessInstanceIds(List<String> processInstanceIds);
82
83     /**
84      * 获得指定流程实例的流程任务列表,包括所有状态的
85      *
86      * @param processInstanceId 流程实例的编号
bb2880 87      * @param asc               是否升序
e7c126 88      * @return 流程任务列表
H 89      */
bb2880 90     List<HistoricTaskInstance> getTaskListByProcessInstanceId(String processInstanceId, Boolean asc);
H 91
92     /**
93      * 获取任务
94      *
95      * @param id 任务编号
96      * @return 任务
97      */
98     Task getTask(String id);
99
100     /**
101      * 获取历史任务
102      *
103      * @param id 任务编号
104      * @return 历史任务
105      */
106     HistoricTaskInstance getHistoricTask(String id);
107
108     /**
109      * 获取历史任务列表
110      *
111      * @param taskIds 任务编号集合
112      * @return 历史任务列表
113      */
114     List<HistoricTaskInstance> getHistoricTasks(Collection<String> taskIds);
115
116     /**
117      * 根据条件查询正在进行中的任务
118      *
119      * @param processInstanceId 流程实例编号,不允许为空
120      * @param assigned          是否分配了审批人,允许空
121      * @param taskDefineKey     任务定义 Key,允许空
122      */
123     List<Task> getRunningTaskListByProcessInstanceId(String processInstanceId,
124                                                      Boolean assigned,
125                                                      String taskDefineKey);
126
127     /**
128      * 获取当前任务的可退回的 UserTask 集合
129      *
130      * @param id 当前的任务 ID
131      * @return 可以退回的节点列表
132      */
133     List<UserTask> getUserTaskListByReturn(String id);
134
135     /**
136      * 获取指定任务的子任务列表(多层)
137      *
138      * @param parentTaskId 父任务 ID
139      * @param tasks 任务列表
140      * @return 子任务列表
141      */
142     <T extends TaskInfo> List<T> getAllChildrenTaskListByParentTaskId(String parentTaskId, List<T> tasks);
143
144     /**
145      * 获取指定任务的子任务列表
146      *
147      * @param parentTaskId 父任务ID
148      * @return 子任务列表
149      */
150     List<Task> getTaskListByParentTaskId(String parentTaskId);
151
152     /**
153      * 获得指定流程实例的活动实例列表
154      *
155      * @param processInstanceId 流程实例的编号
156      * @return 活动实例列表
157      */
158     List<HistoricActivityInstance> getActivityListByProcessInstanceId(String processInstanceId);
159
160     /**
161      * 获得执行编号对应的活动实例
162      *
163      * @param executionId 执行编号
164      * @return 活动实例
165      */
166     List<HistoricActivityInstance> getHistoricActivityListByExecutionId(String executionId);
167
168     // ========== Update 写入相关方法 ==========
e7c126 169
H 170     /**
171      * 通过任务
172      *
173      * @param userId 用户编号
174      * @param reqVO  通过请求
175      */
176     void approveTask(Long userId, @Valid BpmTaskApproveReqVO reqVO);
177
178     /**
179      * 不通过任务
180      *
181      * @param userId 用户编号
182      * @param reqVO  不通过请求
183      */
184     void rejectTask(Long userId, @Valid BpmTaskRejectReqVO reqVO);
185
186     /**
187      * 将流程任务分配给指定用户
188      *
189      * @param userId 用户编号
190      * @param reqVO  分配请求
191      */
192     void transferTask(Long userId, BpmTaskTransferReqVO reqVO);
193
194     /**
bb2880 195      * 将指定流程实例的、进行中的流程任务,移动到结束节点
e7c126 196      *
bb2880 197      * @param processInstanceId 流程编号
e7c126 198      */
bb2880 199     void moveTaskToEnd(String processInstanceId);
e7c126 200
H 201     /**
bb2880 202      * 将任务退回到指定的 targetDefinitionKey 位置
e7c126 203      *
H 204      * @param userId 用户编号
bb2880 205      * @param reqVO  退回的任务key和当前所在的任务ID
e7c126 206      */
H 207     void returnTask(Long userId, BpmTaskReturnReqVO reqVO);
208
209     /**
210      * 将指定任务委派给其他人处理,等接收人处理后再回到原审批人手中审批
211      *
212      * @param userId 用户编号
213      * @param reqVO  被委派人和被委派的任务编号理由参数
214      */
215     void delegateTask(Long userId, BpmTaskDelegateReqVO reqVO);
216
217     /**
218      * 任务加签
219      *
220      * @param userId 被加签的用户和任务 ID,加签类型
221      * @param reqVO  当前用户 ID
222      */
223     void createSignTask(Long userId, BpmTaskSignCreateReqVO reqVO);
224
225     /**
226      * 任务减签
227      *
228      * @param userId 当前用户ID
229      * @param reqVO  被减签的任务 ID,理由
230      */
231     void deleteSignTask(Long userId, BpmTaskSignDeleteReqVO reqVO);
232
233     /**
bb2880 234      * 抄送任务
e7c126 235      *
bb2880 236      * @param userId 用户编号
H 237      * @param reqVO  通过请求
e7c126 238      */
bb2880 239     void copyTask(Long userId, @Valid BpmTaskCopyReqVO reqVO);
H 240
241     // ========== Event 事件相关方法 ==========
e7c126 242
H 243     /**
bb2880 244      * 处理 Task 创建事件,目前是
H 245      * <p>
246      * 1. 更新它的状态为审批中
247      * 2. 处理自动通过的情况,例如说:1)无审批人时,是否自动通过、不通过;2)非【人工审核】时,是否自动通过、不通过
248      * <p>
249      * 注意:它的触发时机,晚于 {@link #processTaskAssigned(Task)} 之后
e7c126 250      *
bb2880 251      * @param task 任务实体
e7c126 252      */
bb2880 253     void processTaskCreated(Task task);
H 254
255     /**
256      * 处理 Task 取消事件,目前是更新它的状态为已取消
257      *
258      * @param taskId 任务的编号
259      */
260     void processTaskCanceled(String taskId);
261
262     /**
263      * 处理 Task 设置审批人事件,目前是发送审批消息
264      *
265      * @param task 任务实体
266      */
267     void processTaskAssigned(Task task);
268
269     /**
270      * 处理 Task 审批超时事件,可能会处理多个当前审批中的任务
271      *
272      * @param processInstanceId 流程示例编号
273      * @param taskDefineKey     任务 Key
274      * @param handlerType       处理类型,参见 {@link BpmUserTaskTimeoutHandlerTypeEnum}
275      */
276     void processTaskTimeout(String processInstanceId, String taskDefineKey, Integer handlerType);
e7c126 277
H 278 }