001/*
002 *    Copyright 2024-2025, Warm-Flow (290631660@qq.com).
003 *
004 *    Licensed under the Apache License, Version 2.0 (the "License");
005 *    you may not use this file except in compliance with the License.
006 *    You may obtain a copy of the License at
007 *
008 *       https://www.apache.org/licenses/LICENSE-2.0
009 *
010 *    Unless required by applicable law or agreed to in writing, software
011 *    distributed under the License is distributed on an "AS IS" BASIS,
012 *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 *    See the License for the specific language governing permissions and
014 *    limitations under the License.
015 */
016package org.dromara.warm.flow.core.service;
017
018import org.dromara.warm.flow.core.dto.FlowParams;
019import org.dromara.warm.flow.core.dto.ModifyHandler;
020import org.dromara.warm.flow.core.entity.Definition;
021import org.dromara.warm.flow.core.entity.Instance;
022import org.dromara.warm.flow.core.entity.Node;
023import org.dromara.warm.flow.core.entity.Task;
024import org.dromara.warm.flow.core.orm.service.IWarmService;
025
026import java.util.List;
027
028/**
029 * 待办任务Service接口
030 *
031 * @author warm
032 * @since 2023-03-29
033 */
034public interface TaskService extends IWarmService<Task> {
035
036    /**
037     * 根据任务id,流程跳转
038     *
039     * @param taskId:流程任务id[必传]
040     * @param flowParams:包含流程相关参数的对象 - skipType: 跳转类型(PASS审批通过 REJECT退回) [必传]
041     *                               - nodeCode: 如果指定节点,可任意跳转到对应节点 [按需传输]
042     *                               - permissionFlag: 办理人权限标识,比如用户,角色,部门等,未设置办理人或者ignore为true可不传 [按需传输]
043     *                               - message: 审批意见  [按需传输]
044     *                               - handler: 办理人唯一标识 [建议传]
045     *                               - variable: 流程变量 [按需传输,跳转条件放入流程变量<互斥网关必传>]
046     *                               - flowStatus: 流程状态,自定义流程状态 [按需传输]
047     *                               - ignore   转办忽略权限校验,默认不忽略(true:忽略,false:不忽略)[按需传输]
048     */
049    Instance skip(Long taskId, FlowParams flowParams);
050
051    /**
052     * 流程跳转
053     *
054     * @param flowParams:包含流程相关参数的对象 - skipType: 跳转类型(PASS审批通过 REJECT退回) [必传]
055     *                               - nodeCode: 如果指定节点,可任意跳转到对应节点 [按需传输]
056     *                               - permissionFlag: 办理人权限标识,比如用户,角色,部门等,未设置办理人或者ignore为true可不传 [按需传输]
057     *                               - message: 审批意见 [按需传输]
058     *                               - handler: 办理人唯一标识 [建议传]
059     *                               - variable: 流程变量 [按需传输,跳转条件放入流程变量<互斥网关必传>]
060     *                               - flowStatus: 流程状态,自定义流程状态 [按需传输]
061     *                               - ignore   转办忽略权限校验,默认不忽略(true:忽略,false:不忽略)[按需传输]
062     * @param task:流程任务[必传]
063     */
064    Instance skip(FlowParams flowParams, Task task);
065
066    /**
067     * 终止流程,提前结束流程,将所有待办任务转历史
068     *
069     * @param taskId: 流程任务id [必传]
070     * @param flowParams:包含流程相关参数的对象 - message: 审批意见 [按需传输]
071     *                               - handler: 办理人唯一标识 [建议传]
072     *                               - flowStatus: 流程状态,自定义流程状态 [按需传输]
073     *                               - ignore   转办忽略权限校验,默认不忽略(true:忽略,false:不忽略)[按需传输]
074     */
075    Instance termination(Long taskId, FlowParams flowParams);
076
077    /**
078     * 终止流程,提前结束流程,将所有待办任务转历史
079     *
080     * @param task:流程任务
081     * @param flowParams:包含流程相关参数的对象 - message: 审批意见  [按需传输]
082     *                               - handler: 办理人唯一标识 [建议传]
083     *                               - flowStatus: 流程状态,自定义流程状态 [按需传输]
084     *                               - ignore   转办忽略权限校验,默认不忽略(true:忽略,false:不忽略)[按需传输]
085     */
086    Instance termination(Task task, FlowParams flowParams);
087
088    /**
089     * 根据instanceIds删除
090     *
091     * @param instanceIds 流程实例id集合
092     * @return boolean
093     */
094    boolean deleteByInsIds(List<Long> instanceIds);
095
096    /**
097     * 转办, 默认删除当然办理用户权限,转办后,当前办理不可办理
098     *
099     * @param taskId         修改的任务id [必传]
100     * @param flowParams:包含流程相关参数的对象 - handler     当前办理人唯一标识,代替老版本的curUser  [必传]
101     *                                     - permissionFlag 用户权限标识集合 [必传]
102     *                                     - addHandlers    转办对象 [必传]
103     *                                     - message        审批意见 [按需传输]
104     *                                     - ignore   转办忽略权限校验,默认不忽略(true:忽略,false:不忽略)[按需传输]
105     */
106    boolean transfer(Long taskId, FlowParams flowParams);
107
108    /**
109     * 转办, 默认删除当然办理用户权限,转办后,当前办理不可办理
110     *
111     * @param taskId         修改的任务id
112     * @param curUser        当前办理人唯一标识
113     * @param permissionFlag 用户权限标识集合
114     * @param addHandlers    增加办理人:加签,转办,委托
115     * @param message        审批意见
116     * @deprecated  1.3.3版本弃用
117     */
118    @Deprecated
119    boolean transfer(Long taskId, String curUser, List<String> permissionFlag, List<String> addHandlers, String message);
120
121    /**
122     * 委派, 默认删除当然办理用户权限,委派后,当前办理不可办理
123     *
124     * @param taskId         修改的任务id [必传]
125     * @param flowParams:包含流程相关参数的对象 - handler     当前办理人唯一标识,代替老版本的curUser  [必传]
126     *                                     - permissionFlag 用户权限标识集合 [必传]
127     *                                     - addHandlers    委托对象 [必传]
128     *                                     - message        审批意见 [按需传输]
129     *                                     - ignore   转办忽略权限校验,默认不忽略(true:忽略,false:不忽略)[按需传输]
130     */
131    boolean depute(Long taskId, FlowParams flowParams);
132
133    /**
134     * 委派, 默认删除当然办理用户权限,委派后,当前办理不可办理
135     *
136     * @param taskId         修改的任务id
137     * @param curUser        当前办理人唯一标识
138     * @param permissionFlag 用户权限标识集合
139     * @param addHandlers    增加办理人:加签,转办,委托
140     * @param message        审批意见
141     * @deprecated  1.3.3版本弃用
142     */
143    @Deprecated
144    boolean depute(Long taskId, String curUser, List<String> permissionFlag, List<String> addHandlers, String message);
145
146    /**
147     * 加签,增加办理人
148     *
149     * @param taskId         修改的任务id [必传]
150     * @param flowParams:包含流程相关参数的对象 - handler     当前办理人唯一标识,代替老版本的curUser  [必传]
151     *                                     - permissionFlag 用户权限标识集合 [必传]
152     *                                     - addHandlers    加签对象 [必传]
153     *                                     - message        审批意见 [按需传输]
154     *                                     - ignore   转办忽略权限校验,默认不忽略(true:忽略,false:不忽略)[按需传输]
155     */
156    boolean addSignature(Long taskId, FlowParams flowParams);
157
158    /**
159     * 加签,增加办理人
160     *
161     * @param taskId         修改的任务id
162     * @param curUser        当前办理人唯一标识
163     * @param permissionFlag 用户权限标识集合
164     * @param addHandlers    增加办理人:加签,转办,委托
165     * @param message        审批意见
166     * @deprecated  1.3.3版本弃用
167     */
168    @Deprecated
169    boolean addSignature(Long taskId, String curUser, List<String> permissionFlag, List<String> addHandlers, String message);
170
171    /**
172     * 减签,减少办理人
173     *
174     * @param taskId         修改的任务id [必传]
175     * @param flowParams:包含流程相关参数的对象 - handler     当前办理人唯一标识,代替老版本的curUser  [必传]
176     *                                     - permissionFlag 用户权限标识集合 [必传]
177     *                                     - reductionHandlers 减少办理人 [必传]
178     *                                     - message        审批意见 [按需传输]
179     *                                     - ignore   转办忽略权限校验,默认不忽略(true:忽略,false:不忽略)[按需传输]
180     */
181    boolean reductionSignature(Long taskId, FlowParams flowParams);
182
183    /**
184     * 减签,减少办理人
185     *
186     * @param taskId            修改的任务id
187     * @param curUser           当前办理人唯一标识
188     * @param permissionFlag    用户权限标识集合
189     * @param reductionHandlers 减少办理人
190     * @param message           审批意见
191     * @deprecated  1.3.3版本弃用
192     */
193    @Deprecated
194    boolean reductionSignature(Long taskId, String curUser, List<String> permissionFlag, List<String> reductionHandlers, String message);
195
196    /**
197     * 修改办理人
198     *
199     * @param taskId         修改的任务id [必传]
200     * @param flowParams:包含流程相关参数的对象 - handler     当前办理人唯一标识,代替老版本的curUser  [必传]
201     *                                      - permissionFlag: 用户所拥有的权限标识[按需传输,ignore为false,则必传]
202     *                                      - addHandlers: 增加办理人:加签,转办,委托[按需传输]
203     *                                      - reductionHandlers: 减少办理人:减签,委托[按需传输]
204     *                                      - message: 审批意见[按需传输]
205     *                                      - cooperateType: 协作方式(2转办 3委派 6加签 7减签)[按需传输]
206     *                                      - ignore: 转办忽略权限校验,默认忽略(true:忽略,false:不忽略)[按需传输]
207     */
208    boolean updateHandler(Long taskId, FlowParams flowParams);
209
210    /**
211     * 修改办理人
212     * @param modifyHandler: 修改办理人参数的对象 - taskId:修改的任务id[必传]
213     *                               - curUser:办理人唯一标识[按需传输]
214     *                               - ignore: 转办忽略权限校验(true:忽略,false:不忽略)[按需传输]
215     *                               - permissionFlag: 用户所拥有的权限标识[按需传输,ignore为false,则必传]
216     *                               - addHandlers: 增加办理人:加签,转办,委托[按需传输]
217     *                               - reductionHandlers: 减少办理人:减签,委托[按需传输]
218     *                               - message: 审批意见[按需传输]
219     *                               - cooperateType: 协作方式(1审批 2转办 3委派 4会签 5票签 6加签 7减签)[按需传输]
220     * @deprecated  1.3.3版本弃用
221     */
222    @Deprecated
223    boolean updateHandler(ModifyHandler modifyHandler);
224
225    /**
226     * 取回
227     *
228     * @param instanceId        实例id [必传]
229     * @param flowParams        handler: 当前处理人 [必传]
230     *                          nodeCode: 取回到的节点编码,如果为空,则默认取回到开始节点 [按需传输]
231     *                          flowStatus: 自定义流程状态 [按需传输]
232     *                          hisStatus: 自定义历史任务状态 [按需传输]
233     *                          hisTaskExt: 业务详情扩展字段 [按需传输]
234     *                          message: 审批意见 [按需传输]
235     * @return Instance         流程实例
236     * @author xiarg
237     * @since 2024/9/22 13:59
238     */
239    Instance retrieve(Long instanceId, FlowParams flowParams);
240
241    /**
242     * 设置流程待办任务对象
243     *
244     * @param node 节点
245     * @param instance 流程实例
246     * @param flowParams 流程参数
247     * @return Task
248     */
249    Task addTask(Node node, Instance instance, Definition definition, FlowParams flowParams);
250
251    /**
252     * 设置流程实例和代码任务流程状态
253     *
254     * @param nodeType 节点类型(开始节点、中间节点、结束节点)
255     * @param skipType 流程条件
256     */
257    String setFlowStatus(Integer nodeType, String skipType);
258
259    /**
260     * 并行网关,取结束节点类型,否则随便取id最大的
261     *
262     * @param tasks 任务列表
263     * @return Task
264     */
265    Task getNextTask(List<Task> tasks);
266
267
268}