package com.yanzhu.flowable.mapper;

import com.yanzhu.flowable.domain.my.FlowTaskEntity;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/***
 * 工作流业务相关
 */
public interface FlowBusinessKeyMapper {

    /**
     * 根据条件查询所有流任务
     * @param flowTaskEntity
     * @return
     */
    public List<FlowTaskEntity> selectAllFlowTaskByParams(FlowTaskEntity flowTaskEntity);

    /**
     * 根据条件查询流程任务
     * @param procInsId
     * @return
     */
    public FlowTaskEntity findFlowTaskByProcInsId(String procInsId);

    /**
     * 查询项目信息
     * @param proId
     * @return
     */
    public Map<String,Object> selectSurProjectById(Long proId);

    /**
     * 根据流程Id查询操作日志
     * @param procInsId
     * @return
     */
    public List<Map<String, Object>> selectCommentByProcInsId(String procInsId);

    /**
     * 根据条件流程Id查询操作日志
     * @param procInsId
     * @return
     */
    public Map<String, Object> selectLastCommentByProcInsId(String procInsId);

    /**
     * 根据流程Id查询表单数据
     * @param procInsId
     * @return
     */
    public List<Map<String, Object>> selectFormDatasByProcInsId(String procInsId);

    /**
     * 查询我的代办任务
     * @param flowTaskEntity
     * @return
     */
    public List<Map<String, Object>> selectMyAwaitFlowTask(FlowTaskEntity flowTaskEntity);

    /**
     * 根据条件查询我的代办分组数量统计
     * @param flowTaskEntity
     * @return
     */
    public List<Map<String, Object>> findAwaitCountGroupByCategory(FlowTaskEntity flowTaskEntity);

    /**
     * 查询我的已办任务
     * @param flowTaskEntity
     * @return
     */
    public List<Map<String, Object>> selectMyFinishedFlowTask(FlowTaskEntity flowTaskEntity);

    public List<FlowTaskEntity> groupByCategory(FlowTaskEntity where);

    public List<FlowTaskEntity> groupByUnit(FlowTaskEntity where);

    public List<FlowTaskEntity> listByUnit(FlowTaskEntity where);

    public List<FlowTaskEntity> listByState(FlowTaskEntity where);

    public List<FlowTaskEntity> groupByUnitTotal(FlowTaskEntity where);

    public List<FlowTaskEntity> groupByUnitFinish(FlowTaskEntity where);

    public List<FlowTaskEntity> groupByProject(@Param("deptId")long deptId,@Param("proType")String proType);

    /**
     * 根据条件查询安全类作业工作流列表
     * @param flowTaskEntity
     * @return
     */
    public List<FlowTaskEntity> findSafetyWorkList(FlowTaskEntity flowTaskEntity);

    public List<FlowTaskEntity> listByCategory(FlowTaskEntity where);

    /**
     *  工程管理-分包单位占比
     * @param where
     * @return
     */
    public List<FlowTaskEntity> groupFlowBySubDeptType(FlowTaskEntity where);
    /**
     *  工程管理-分包单位资质审批明细
     * @param where
     * @return
     */
    public List<FlowTaskEntity> listFlowBySubDeptType(FlowTaskEntity where);
}
