package org.jeecg.modules.approval.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import org.jeecg.modules.approval.model.dto.ApprovalOpinionDTO;
import org.jeecg.modules.approval.model.vo.ApprovalTaskQueryVo;
import org.jeecg.modules.approval.model.vo.TaskVO;
import org.springframework.web.bind.annotation.RequestParam;

import javax.servlet.http.HttpServletRequest;
import java.util.List;
import java.util.Map;

/**
 * 任务接口
 *
 * @author yao
 */
public interface ApprovalTaskService {

    /**
     * 待处理任务
     *
     * @return
     */
    IPage listMyTask(Integer pageNo,Integer pageSize,HttpServletRequest req);


    /**
     * 已处理任务列表
     *
     * @param req
     * @return
     */
    IPage listMyProcessedTask( Integer pageNo,Integer pageSize,HttpServletRequest req);


    /**
     * 任务明细
     *
     * @param taskId
     * @return
     */
    Object getTask(String taskId);

    /**
     * 追踪流程图片
     *
     * @param processInstanceId
     * @return
     * @throws Exception
     */
    byte[] getProcessImage(String processInstanceId) throws Exception;



    /**
     * 我发起的流程
     *
     * @param
     * @return
     */
    IPage listApprovalMyStarted(Integer pageNo,Integer pageSize,HttpServletRequest req);

    /**
     * 待处理任务数量
     *
     * @return
     */
    long countUnprocessed();

    /**
     * 我发起的任务数量
     *
     * @return
     */
    long countMyStarted();

    /**
     * 我审批的任务列表
     *
     * @param
     * @param param
     * @return
     */
    IPage listApiMyApproval(Map<String, String> params, ApprovalTaskQueryVo param);

    /**
     * 我发起的任务列表
     *
     * @param
     * @param param
     * @return
     */
    IPage listApiMyStarted(Map<String, String> params, ApprovalTaskQueryVo param);


    /**
     * 根据流程id获取待我审批的流程
     *
     * @param processInstanceId
     * @return
     */
    TaskVO getMyApprovalTask(String processInstanceId);

    /**
     * 根据流程id获取审批记录
     * @param processInstanceId
     * @return
     */
    List<ApprovalOpinionDTO> listOpinionsByPId(String processInstanceId);
}
