package com.chinaweal.aiccs.aiccs.abnormal.service;

import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.chinaweal.aiccs.aiccs.abnormal.entity.vo.DissentListVo;
import com.chinaweal.aiccs.aiccs.abnormal.entity.TSAbnList;
import com.chinaweal.aiccs.aiccs.abnormal.entity.dto.AbnormalTaskCountDto;
import com.chinaweal.aiccs.aiccs.abnormal.entity.dto.ReasonEntTypeDto;
import com.chinaweal.aiccs.common.base.entity.dto.task.UniTaskListDto;
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-19
 */
public interface TSAbnListService extends BaseService<TSAbnList> {

    /**
     * 查询异常名录表里同一家企业所有记录
     * @param pripid 主体pripid
     * @return 查询结果
     * @author lroyia
     * @since 2021年1月22日 14:58:58
     */
    List<TSAbnList> selectEntList(String pripid);

    IPage<TSAbnList> selectTSAbnByPageList(IPage<TSAbnList> page, TSAbnList tsAbnListModel, String entertype);

    IPage<TSAbnList> removeselectByPagebnlist(IPage<TSAbnList> page, TSAbnList tsAbnListModel, String entertype);

    IPage<TSAbnList> selectAbnListByPage(int rows, int page, TSAbnList tsAbnListModel);

    /**
     * 异常名录中 严重违法失信（期限届满列入） 查询
     * @param rows 行数
     * @param page 当前页数
     * @param tsAbnListModel 查询参数
     * @return 查询结果
     * @author lroyia
     * @since 2021年1月27日 10:18:04
     */
    IPage<TSAbnList> selectTSAbnByTimeout(int rows, int page, TSAbnList tsAbnListModel);

    /**
     * 获取异常主体列表分页
     * @param page 分页参数
     * @param customParamMap 查询条件
     * @return 分页结果
     */
    IPage<DissentListVo> getDissentListPage(Page<DissentListVo> page, Map<String, Object> customParamMap);

    /**
     * 获取移出异议主体列表分页
     * @param page 分页参数
     * @param customParamMap 查询条件
     * @return 分页结果
     */
    IPage<DissentListVo> getRemDissentListPage(Page<DissentListVo> page, Map<String, Object> customParamMap);


    /**
     * 统计移出名录的数据pripid
     * @param beginDate 统计开始范围日期
     * @return 统计结果
     * @author lroyia
     * @since 2021年3月17日 15:03:53
     */
    List<String> listRemovedPripid(String beginDate);

    /**
     * 获取第一个异常经营名录
     * @param wrapper   查询参数包装
     * @return  获取结果
     * @author lroyia
     * @since 2021年3月23日 15:26:23
     */
    TSAbnList getFirstAbnormalList(Wrapper<TSAbnList> wrapper);

    /**
     * 列入异常名录原因与主体类型分类统计
     * @param params    查询参数
     * @return  统计结果
     * @author lroyia
     * @since  2021年4月20日 09:57:45
     */
    List<ReasonEntTypeDto> statisticSpeCauseAndEntType(Map<String, Object> params);

    /**
     * 异常名录待办统计
     * @param params    查询参数
     * @return  统计结果
     * @author lroyia
     * @since  2021年4月20日 09:57:45
     */
    List<AbnormalTaskCountDto> statisticAbnormalTaskCount(Map<String, Object> params);

    /**
     * 查询异常名录待办列表分页
     * @param page  分页参数
     * @param params    查询参数
     * @return  查询结果
     * @author lroyia
     * @since  2021年4月20日 10:28:14
     */
    IPage<UniTaskListDto> getAbnormalTaskListPage(IPage<UniTaskListDto> page, Map<String, Object> params);

    List<TSAbnList> queryTSAbnByREMDATE(String pripid);

    TSAbnList queryOneByPripid(String pripid);

    List<TSAbnList> getTSAbnListByMap(Map<String, Object> parm);

    TSAbnList selectTsAbnbyMap(Map<String, Object> paramAbn);

    TSAbnList selectTsAbnById(String abnlistid);

    TSAbnList queryByAbnlistid(String abnlistid);

    IPage<TSAbnList> selectTSAbnListByPageList(IPage<TSAbnList> page, Map<String, Object> pram);

    List<TSAbnList> selectAbnListByPripid( String pripid,String newAbnTime,String abnTime);

    /**
     * 主体已撤销的异常名录记录
     * @return
     */
    List<TSAbnList> getDeregEntList();

    /**
     * 主体已注销的异常名录记录
     * @return
     */
    List<TSAbnList> getCancelEntList();

    /**
     * 按信用修复时间查询
     * @param page
     * @param params
     * @return
     */
    IPage<String> selectByRemDate(IPage<String> page, Map<String, Object> params);

    List<String> selectByRemDate(Map<String, Object> params);

    Boolean saveAbnBatch(List<TSAbnList> list);

    int checknb(String entityno, String reportYear);

    Boolean saveByOne(TSAbnList tsAbnList);
}