package com.chinaweal.aiccs.aiccs.business.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.chinaweal.aiccs.aiccs.abnormal.entity.TSAbnList;
import com.chinaweal.aiccs.aiccs.abnormal.entity.excel.AbnListExcel;
import com.chinaweal.aiccs.aiccs.abnormal.entity.vo.XyxfCqDto;
import com.chinaweal.aiccs.aiccs.auditing.entity.TSOpinion;
import com.chinaweal.aiccs.aiccs.business.entity.TSTaskList;
import com.chinaweal.aiccs.aiccs.business.entity.dto.RepairTaskListDto;
import com.chinaweal.aiccs.aiccs.business.entity.dto.RepairTaskStatisticDto;
import com.chinaweal.aiccs.aiccs.business.entity.dto.TaskListUnionDto;
import com.chinaweal.aiccs.aiccs.seriousillegal.entity.TSBizSerIllegalRem;
import com.chinaweal.aiccs.crgs.system.entity.TaskList;
import com.chinaweal.aiccs.org.entity.OrgUnits;
import com.chinaweal.aicorg.model.AICUser;
import com.chinaweal.youfool.framework.springboot.mybatis.plus.BaseService;
import org.apache.ibatis.annotations.Param;

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

/**
 * <p>
 * 待办列表 服务类
 * </p>
 *
 * @author <a href="https://blog.lroyia.top">lroyia</a>
 * @since 2021-01-22
 */
public interface TSTaskListService extends BaseService<TSTaskList> {

    /**
     * 启动待办
     * @param taskListModel 待办信息
     * @param user 当前用户
     * @param definitionName 定义名称
     * @return 启动结果
     * @author lroyia
     * @since 2021年1月22日 13:43:24
     */
    String startWorkFlow(TSTaskList taskListModel, AICUser user, String definitionName);

    /**
     * 创建接收单位为组的待办
     * @param taskListModel
     * @param userids 接收组用户id集合
     * @param decorg 行政区划
     * @param definitionName
     * @return
     */
    String startWorkFlow(TSTaskList taskListModel, List<String> userids, String decorg, String definitionName);

    /**
     * 通过taskList的id 查询tasklist
     * @param taskListId taskList的id
     * @return 查询结果
     * @author lroyia
     * @since 2021年1月25日 09:32:21
     */
    TSTaskList selectByTasklistID(String taskListId);

    /**
     * 更新工作流
     * @param user 操作用户
     * @param opinionModel 处办意见
     * @param taskListModel 待办对象
     * @param nextNodeID 下一个节点标识
     * @param nextPerformerids 下一步处理人id
     * @param nextPerformerNames 提下一个平台名称
     * @author lroyia
     * @since 2021年1月25日 10:16:49
     */
    void updateWorkFlow(AICUser user, TSOpinion opinionModel, TSTaskList taskListModel, String nextNodeID, String[] nextPerformerids, String[] nextPerformerNames);

    /**
     * 通过bizSeqId查询待办列表
     * @param bizSeqId bizSeqId
     * @return 查询结果
     * @author lroyia
     * @since 2021年1月25日 16:48:20
     */
    List<TSTaskList> selectByBizSeqID(String bizSeqId);

    /**
     * 通过工作流id查询待办信息
     * @param workflowid 工作流id
     * @return 查询结果
     * @author lroyia
     * @since 2021年1月25日 17:38:49
     */
    TSTaskList selectByWorkflowID(String workflowid);

    /**
     * 查询待办分页
     * @param page 分页参数
     * @param tsTaskListModel 查询参数
     * @param flag 类型标记
     * @param decorg 作出决定机关
     * @return 查询结果
     * @author lroyia
     * @since 2021年1月26日 15:08:01
     */
    IPage<TSTaskList> searchTstaskByPage(IPage<TSTaskList> page, TSTaskList tsTaskListModel, String flag, String decorg);

    /**
     * 联查流程分页
     * @param page 分页信息
     * @param tsTaskList 分页参数
     * @return 分页结果
     * @author lroyia
     * @since 2021年2月18日 15:48:53
     */
    IPage<TSTaskList> searchPageWithProcess(IPage<TSTaskList> page, TSTaskList tsTaskList, Map<String, Object> customParamMap);
    /**
     * 联查流程分页 汇总
     * @param page 分页信息
     * @param taskListUnionDto 分页参数
     * @return 分页结果
     * @author Lee
     * @since 2021年6月1日 11:09:53
     */
    IPage<TaskListUnionDto> searchUnionTaskPage(IPage<TaskListUnionDto> page, TaskListUnionDto taskListUnionDto, Map<String, Object> customParamMap);

    /**
     * 我的待办相关统计
     * @param customParamMap
     * @return
     */
    Map<String, Object> unionTaskPageStatistic(Map<String, Object> customParamMap);

    /**
     * 已办分页 汇总
     *
     * @param page               分页信息
     * @param taskListUnionParam 分页参数
     * @param customParamMap     查询条件对象
     * @return                   分页结果
     * @author                   Lee
     * @since                    2021年6月4日 14点03分
     */
    IPage<TaskListUnionDto> searchFinishTaskUnionPage(IPage<TaskListUnionDto> page, TaskListUnionDto taskListUnionParam, Map<String, Object> customParamMap);

    List<TaskListUnionDto> searchUnionTaskList(String yclrStr, String userId);

    List<TaskListUnionDto> searchUnionTaskToday(String userId);

    int countFinishToday(String userId);

    int countFinishAll(String userId);

    int countByBUSTYPE(String bustype, String userId);

    int countByBUSTYPEAndsourceType(String bustype, String userId, String sourceType);

    int countPD(String userId);

    int countByUserid(String userId);

    /**
     * 获取信用风险分类监管待办分页
     * @param page    分页信息
     * @param params
     * @return
     */
    IPage<TaskList> getCheckPage(IPage<TaskList> page, Map<String, Object> params);

    /**
     * 获取信用风险分类监管待办统计数
     * @param params
     * @return
     */
    int getRiskStatistic(Map<String, Object> params);

    List<TaskListUnionDto> searchCheckList(String aicUserId);
    /**
     * 移动端启动待办
     * @param taskListModel 待办信息
     * @return 启动结果
     * @author lwd
     * @since 2021年8月31日 15:53:34
     */
    String startWorkFlowApp(TSTaskList taskListModel, String definedname);

    /**
     * 更新工作流
     * @param taskListModel 待办对象
     * @param nextNodeID 下一个节点标识
     * @param nextPerformerids 下一步处理人id
     * @param nextPerformerNames 提下一个平台名称
     * @author lroyia
     * @since 2021年1月25日 10:16:49
     */
    void updateWorkFlowApp(TSTaskList taskListModel, String nextNodeID, String[] nextPerformerids, String[] nextPerformerNames);
    /**
     * 根据业务号查询待办
     * @return 待办集合
     * @author lwd
     * @since 2021年09月01日 11:31:53
     */
    List<TSTaskList> selectTaskListByBizseqid(String bizseqid);

    IPage<TaskListUnionDto> queryForComprehensive(IPage<TaskListUnionDto> page, @Param("customParamMap") Map<String, Object> customParamMap);

    List<TSTaskList> selectByBIZSEQIDANDSIGNUSERID(String BIZSEQID,String SIGNUSERID);

    IPage<TaskListUnionDto> comprehensiveOptimizeQuery(Page<TaskListUnionDto> page, Map<String, Object> paramMap);

    IPage<TSAbnList> queryAbnList(Page<TSAbnList> page, Map<String, Object> paramMap);

    List<AbnListExcel> exportAbnList(Map<String, Object> paramMap);


    List<OrgUnits> queryAllOrg();

    IPage<TaskListUnionDto> queryOldeBusness(Page<TaskListUnionDto> page, Map<String, Object> paramMap);

    /**
     * 信用修复预警待办分析
     * @author ymc
     * @since 2024年8月1日 13:42
     * @param page
     * @param paramMap
     * @return
     */
    IPage<RepairTaskListDto> repairTaskQuery(Page<RepairTaskListDto> page, Map<String, Object> paramMap);

    IPage<XyxfCqDto> queryxyxfCqList(Page<XyxfCqDto> page, Map<String, Object> paramMap);

    List<XyxfCqDto> exportxyxfCqList(Map<String, Object> paramMap);

    TSTaskList searchTaskListByBizId(String bizId);

    List<RepairTaskStatisticDto> repairTaskStatistic(Map<String, Object> paramMap,AICUser aicUser);

    /**
     * 首页统计接口
     * @param customParamMap
     * @return
     */
    Map<String, Object> indexPageStatistic(Map<String, Object> customParamMap,AICUser aicUser);

}
