package com.trade.admin.workflow.service;


import com.trade.admin.workflow.dto.BusinessHistoricDetailVo;
import com.trade.admin.workflow.dto.BusinessProcessingTaskVo;
import com.trade.common.core.page.GridPage;
import com.trade.admin.workflow.dto.SearchBusinessProcessingTask;

import java.util.List;


/**
 * @Description:流程相关业务任务列表Service（如立项流程、尽调流程、评审会流程等待我处理、我已处理和全部列表）
 * @Author:wanxiangZhou
 * @E-mail:zhouyu@sunxung.cn
 * @Date:2018年7月30日 下午7:21:16
 */
public interface BusinessProcessingTaskService {

    /**
     * 分页查询待我处理的流程业务信息
     *
     * @param search 查询条件
     * @return 待我处理的业务信息列表
     */
    GridPage<BusinessProcessingTaskVo> findMyPendingList(SearchBusinessProcessingTask search);

    /**
     * 分页查询我已处理（办理）的任务
     *
     * @param search 业务查询条件
     * @return 我已办理的任务集合（历史任务）
     */
    GridPage<BusinessProcessingTaskVo> findMyCompletedList(SearchBusinessProcessingTask search);

    /**
     * 全部流程业务信息
     *
     * @param search 业务查询条件
     * @return 全部流程业务信息
     */
    GridPage<BusinessProcessingTaskVo> findAll(SearchBusinessProcessingTask search);

    /**
     * 获取流程业务已完成的业务表单信息
     *
     * @param businessKey  流程业务ID
     * @param businessType 流程业务类别
     * @return
     */
    List<BusinessHistoricDetailVo> getHistoricBusinessById(Long businessKey, String businessType);

    /**
     * 验证任务是否已经完成或者被分配了<br>
     * 1.任务办理人是当前操作者； 2.任务未完成
     *
     * @param taskId 任务ID
     * @return true表示待我处理的任务，否则不是待我处理的任务，无法进行处理操作
     */
    Boolean duplicateProcessingTask(String taskId);

    /**
     * 终止流程
     * @param taskId
     * @param entityId
     * @param businessType
     * @param taskName
     * @param taskDefKey
     * @return
     */
    Long terminate(String taskId,Long entityId,String businessType,String taskName, String taskDefKey);
}
