package com.yunzhupaas.flowable.service;

import com.yunzhupaas.base.service.SuperService;
import com.yunzhupaas.exception.WorkFlowException;
import com.yunzhupaas.flowable.entity.TriggerTaskEntity;
import com.yunzhupaas.flowable.model.trigger.TriggerInfoListModel;
import com.yunzhupaas.flowable.model.trigger.TriggerInfoModel;
import com.yunzhupaas.flowable.model.trigger.TriggerPagination;

import java.util.List;

/**
 * 类的描述
 *
 * @author YUNZHUPAASYUNZHUPAAS开发组
 * @version 5.0.x
 * @since 2024/9/10 17:12
 */
public interface TriggerTaskService extends SuperService<TriggerTaskEntity> {
    /**
     * 获取任务下的触发记录
     *
     * @param taskId   任务主键
     * @param nodeCode 节点编码
     */
    List<TriggerInfoListModel> getListByTaskId(String taskId, String nodeCode);

    /**
     * 判断是否有任务流程
     *
     * @param taskId   任务主键
     * @param nodeCode 节点编码
     */
    boolean existTriggerTask(String taskId, String nodeCode);

    /**
     * 列表
     *
     * @param pagination 分页参数
     */
    List<TriggerTaskEntity> getList(TriggerPagination pagination);

    /**
     * 详情
     *
     * @param id 主键
     */
    TriggerInfoModel getInfo(String id) throws WorkFlowException;

    /**
     * 重试
     *
     * @param id 主键
     */
    void retry(String id) throws Exception;

    /**
     * 保存
     *
     * @param entity 实体
     */
    void saveTriggerTask(TriggerTaskEntity entity);

    /**
     * 更新
     *
     * @param entity 实体
     */
    void updateTriggerTask(TriggerTaskEntity entity);

    /**
     * 批量删除
     *
     * @param ids 任务流程实例主键
     */
    void batchDelete(List<String> ids);

    /**
     * 根据任务主键删除
     *
     * @param taskId 任务主键
     */
    void deleteByTaskId(List<String> taskId);

    /**
     * 判断流程版本下是否存在任务流程
     *
     * @param flowIds 流程版本主键集合
     */
    boolean checkByFlowIds(List<String> flowIds);
}
