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.entity.HisTask;
020import org.dromara.warm.flow.core.entity.Node;
021import org.dromara.warm.flow.core.entity.Task;
022import org.dromara.warm.flow.core.entity.User;
023import org.dromara.warm.flow.core.orm.service.IWarmService;
024
025import java.math.BigDecimal;
026import java.util.List;
027
028/**
029 * 历史任务记录Service接口
030 *
031 * @author warm
032 * @since 2023-03-29
033 */
034public interface HisTaskService extends IWarmService<HisTask> {
035
036    /**
037     * 根据任务id和协作类型查询
038     *
039     * @param taskId 任务id
040     * @param cooperateTypes 协作类型集合
041     * @return List<HisTask>
042     */
043    List<HisTask> listByTaskIdAndCooperateTypes(Long taskId, Integer... cooperateTypes);
044
045    /**
046     * 根据instanceId获取未退回的历史记录
047     *
048     * @param instanceId 流程实例id
049     */
050    List<HisTask> getNoReject(Long instanceId);
051
052    /**
053     * 根据nodeCode和targetNodeCode获取未退回的历史记录
054     * @param nodeCode 节点编码
055     * @param targetNodeCode 目标节点编码
056     * @param hisTasks 历史任务集合
057     * @return HisTask
058     */
059    HisTask getNoReject(String nodeCode, String targetNodeCode, List<HisTask> hisTasks);
060
061    /**
062     * 根据instanceId和流程编码获取未退回的历史记录
063     *
064     * @param instanceId 流程实例id
065     * @param nodeCodes 流程编码集合
066     * @return  List<HisTask>
067     */
068    List<HisTask> getByInsAndNodeCodes(Long instanceId, List<String> nodeCodes);
069
070    /**
071     * 根据instanceIds删除
072     *
073     * @param instanceIds 流程实例id集合
074     * @return boolean
075     */
076    boolean deleteByInsIds(List<Long> instanceIds);
077
078    /**
079     * 设置流程历史任务信息
080     *
081     * @param task       当前任务
082     * @param nextNodes  后续任务
083     * @param flowParams 参数
084     */
085    List<HisTask> setSkipInsHis(Task task, List<Node> nextNodes, FlowParams flowParams);
086
087    /**
088     * 设置协作历史记录
089     *
090     * @param task          当前任务
091     * @param node          当然任务节点
092     * @param flowParams    参数
093     * @param collaborators 协作人
094     * @return List<HisTask> 历史任务集合
095     */
096    List<HisTask> setCooperateHis(Task task, Node node, FlowParams flowParams
097            , List<String> collaborators);
098
099    /**
100     * 委派历史任务
101     *
102     * @param task          当前任务
103     * @param flowParams    参数
104     * @param entrustedUser 委托人
105     * @return HisTask 历史任务
106     */
107    HisTask setDeputeHisTask(Task task, FlowParams flowParams, User entrustedUser);
108
109    /**
110     * 设置会签票签历史任务
111     *
112     * @param task       当前任务
113     * @param flowParams 参数
114     * @param nodeRatio  节点比率
115     * @param isPass     是否通过
116     * @return HisTask 历史任务
117     */
118    HisTask setSignHisTask(Task task, FlowParams flowParams, BigDecimal nodeRatio, boolean isPass);
119
120    /**
121     * 自动完成历史任务
122     *
123     * @param flowParams 流程参数
124     * @param flowStatus 流程状态
125     * @param task 当前任务
126     * @param userList 用户列表
127     */
128    List<HisTask> autoHisTask(FlowParams flowParams, String flowStatus, Task task, List<User> userList, Integer cooperateType);
129
130    /**
131     * 设置流程历史任务信息
132     *
133     * @param task              当前任务
134     * @param nextNode          跳转的节点
135     * @param flowParams        流程参数
136     * @return HisTask          历史任务
137     * @author xiarg
138     * @since 2024/9/30 11:59
139     */
140    HisTask setSkipHisTask(Task task, Node nextNode, FlowParams flowParams);
141}