package cn.fateverse.workflow.service;

import cn.fateverse.common.core.result.page.TableDataInfo;
import cn.fateverse.workflow.entity.vo.ProcessInstanceDetailVo;
import cn.fateverse.workflow.entity.dto.ProcessInstanceDto;
import cn.fateverse.workflow.entity.vo.ProcessInstanceVo;


/**
 * 流程实例服务
 *
 * @author Clay
 * @date 2022/12/24
 */
public interface ProcessInstanceService {
    /**
     * 发起流程实例
     *
     * @param processInstanceDto 流程dto
     */
    void start(ProcessInstanceDto processInstanceDto);

    /**
     * 重新启动流
     *
     * @param processInstanceDto 流程dto
     */
    void restart(ProcessInstanceDto processInstanceDto);

    /**
     * 查询当前启动的实例
     *
     * @param state 流程状态
     * @return 列表数据
     */
    TableDataInfo<ProcessInstanceVo> searchList(String state);

    /**
     * 查询自己的流程
     *
     * @param state          流程状态
     * @param deploymentName 流程名称
     * @return 列表数据
     */
    TableDataInfo<ProcessInstanceVo> searchSelfList(String state, String deploymentName);

    /**
     * 查询关于我的列表
     *
     * @param state          流程状态
     * @param deploymentName 流程名称
     * @return 列表数据
     */
    TableDataInfo<ProcessInstanceVo> searchAboutMeList(String state, String deploymentName);

    /**
     * 获取到自己的流程详细信息
     *
     * @param processInstanceId 流程实例id
     * @return 流程详情
     */
    ProcessInstanceDetailVo searchSelfInfo(String processInstanceId);

    /**
     * 重新启动时获取到流程数据信息
     *
     * @param instanceId 用户实例id
     * @return 流程详情
     */
    ProcessInstanceDetailVo searchReInfo(String instanceId);
}
