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

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.chinaweal.aiccs.aiccs.abnormal.entity.EBaseinfo;
import com.chinaweal.aiccs.aiccs.abnormal.entity.dto.*;
import com.chinaweal.aiccs.aiccs.abnormal.entity.excel.EBaseinfoExcel;
import com.chinaweal.aiccs.aiccs.abnormal.entity.vo.ContactVo;
import com.chinaweal.aiccs.aiccs.abnormal.entity.vo.QzzxEntDto;
import com.chinaweal.aiccs.aiccs.abnormal.entity.vo.XyxfCqDto;
import com.chinaweal.aiccs.aiccs.market.entity.AreaSlice;
import com.chinaweal.aiccs.crgs.moveinDetails.entity.EAlterRecoder;
import com.chinaweal.aicorg.model.AICUser;
import com.chinaweal.solr.entity.EBaseInfoSolrBean;
import com.chinaweal.youfool.framework.springboot.base.query.BaseQuery;
import com.chinaweal.youfool.framework.springboot.mybatis.plus.BaseService;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;

import java.time.LocalDate;
import java.util.List;
import java.util.Map;

/**
 * <p>
 *  服务类
 * </p>
 *
 * @author Lee
 * @since 2021-03-15
 */
public interface EBaseinfoService extends BaseService<EBaseinfo> {

    String getLevelFromCrgs(String pripid);
    /**
     * 获取主体信息的惩戒状态
     * 1、如果是主体是企业，检查列入严重违法失信企业名录状态
     *  1.1、检查名录表，根据移出时间初步判断状态
     *  1.2、如果移出时间为空，则判断是否存在异议或移出审批中状态
     *  1.3、如果存在移出时间，则判断是否有正在列入的记录
     * 2、如果存在严重违法失信企业名录状态则返回状态，不判断异常名录
     * 3、检查列入异常名录状态
     *  3.1、检查名录表，根据移出时间初步判断状态
     *  3.2、如果移出时间为空，则判断是否存在异议或移出审批中状态
     *  3.3、如果存在移出时间，则判断是否有正在列入的记录
     * 4、返回最终状态
     * @param eBaseinfo 主体信息
     * @return  获取结果
     * @author lroyia
     * @since 2021年3月23日 14:11:04
     */
    EBaseinfo getEBaseInfoStatus(EBaseinfo eBaseinfo);

    /**
     * 获取复杂主体信息分页
     * @param page   分页参数
     * @param params    获取参数
     * @return  分页结果
     * @author lroyia
     * @since  2021年4月21日 10:36:37
     */
    IPage<ComplexEntInfoDto> getComplexEntInfoPage(IPage<ComplexEntInfoDto> page, Map<String, Object> params);

    IPage<EBaseinfo> selectNbAndDom(Page<EBaseinfo> objectPage, Map<String, Object> customParamMap);

    /**
     * 拟列异主体分页
     * @param page            分页参数
     * @param customParamMap  条件参数
     * @return
     */
    IPage<ToIncludeAbnDto> toIncludeAbnListPage (IPage<ToIncludeAbnDto> page, Map<String, Object> customParamMap);

    Page comprehensiveQuery(IPage page, Map<String, Object> customParamMap);

    org.springframework.data.domain.Page<EBaseInfoSolrBean> comprehensiveQuery(Map<String, Object> customParamMap, int offset, int rows);

    Page solrQueryPripidByEntName(IPage page, EBaseinfo eBaseinfo);

    List<ComprehensiveStatistics> queryCphStatistics(Map<String, Object> customParamMap);

    List<ComprehensiveStat> queryCphStat(Map<String, Object> customParamMap);

    List<ComprehensiveStat> queryCphStatSplit(Map<String, Object> customParamMap);

    EBaseinfo getOneByPripid(String pripid);

    IPage<AbnEntDto> getSDCWandTwoYearsAbnlist(IPage<AbnEntDto> page, Map<String, Object> customParamMap);

    IPage<NoAnnualReportEntDto> getNoReportTwoYearsPage(IPage<NoAnnualReportEntDto> page, Map<String, Object> customParamMap);

    EBaseinfo getEntBaseInfoByCode(String code);

    IPage<Map<String, String>> selectBlackForEnt(IPage<Map<String, String>> page, String uscc, String entName);

    IPage<Map<String, String>> selectBlackForPerson(IPage<Map<String, String>> page, String cerNo, String name);

    List<Map<String, String>> statistics(String startDate, String endDate);

    IPage<EBaseinfo> getNoReportPage(IPage<EBaseinfo> page, Map<String, Object> customParamMap);

    IPage<EBaseinfo> getSDCWandTwoYearsPage(IPage<EBaseinfo> page, Map<String, Object> customParamMap);

    IPage<EBaseinfo> getWnbAndSdcwPage(IPage<EBaseinfo> page, Map<String, Object> customParamMap);

    IPage<Map<String, String>> getEntBlackForPerson(Page<Map<String, String>> page, String cerNo);

    IPage<EBaseinfo> selectAddressAbnPage(IPage<EBaseinfo> page, Map<String, Object> customParamMap);

    /**
     * 获取id分页
     * @param beginId   起始id
     * @param pageSize  分页大小
     * @return  分页结果
     * @author lroyia
     * @since  2021年12月16日 09:54:25
     */
    List<EBaseinfo> getPageOrderById(String beginId, int pageSize);

    /**
     * 每日更新的主体，不包括农合
     * @param regState  主体状态
     * @return
     */
    List<EBaseinfo> selectUpdatedList(String... regState);

    /**
     * 清除监管机关、片区信息
     * @param pripid
     * @author lrouia
     * @since  2022年1月13日 09:31:24
     */
    void clearRegulatory(String pripid);

    /**
     * 更新监管机关、片区信息
     * @param pripid    主体pripid
     * @param orgNumber 监管机关机构编码
     * @param sliceId
     * @param sliceName
     * @author lroyia
     * @since  2022年1月13日 09:46:12
     */
    void updateRegulatory(String pripid, String orgNumber, String sliceId, String sliceName);

    /**
     * 更新主体片区认领信息
     * @param pripid    主体pripid
     * @param areaSlice 片区信息
     * @author lroyia
     * @since  2022年2月16日 14:36:19
     */
    void updateEntAreaSliceInfo(String pripid, AreaSlice areaSlice);

    IPage<EBaseinfo> pageByRemDate(IPage<String> page, Map<String, Object> customParamMap);

    List<String> pageByRemDate(Map<String, Object> customParamMap);

    HSSFWorkbook exportInfo(List<String> pripids, List<String> filedParams);

    List<List<Object>> exportInfo2(List<String> pripids, List<String> filedParams, Boolean isHead);

    List<List<Object>> exportInfo2New(List<EBaseInfoSolrBean> data, List<String> filedParams, Boolean isHead);

    List<List<Object>> exportInfo2(List<EBaseinfoExcel> list, List<String> filedParams);

    IPage<EBaseinfo> selectYearReport(IPage<EBaseinfo> page, Map<String, Object> customParamMap);

    List<EBaseinfoExcel> selectYearReport(Map<String, Object> customParamMap);

    List<EBaseinfo> queryForNb(String regorg);

    List<EBaseinfo> querynzForNb(String regorg);

    List<EBaseinfo> querygtForNb(String regorg);

    List<EBaseinfo> querybyperson(String name, String cerno, String type);

    List<EAlterRecoder> queryEAlterByPripid(String pripid);

    List<EAlterRecoder> queryEAlterByEntNo(String pripid);

    List<Map<String, String>> queryEpriPersonList(String pripid);

    List<ContactVo> queryContactByEntNo(String pripid);

    Map<String,Object> addContactLogByEntNo(String pripid, AICUser aicUser);


    /**
     * 根据个体注册时间、变更时间，作为起始条件，进行更新所机关
     * @return
     */
    int automaticClaimCenter();

    /**
     * 根据企业注册时间、变更时间，作为起始条件，进行更新所机关
     * @return
     */
    int autoEntArea();

    /**
     * 查询强制注销企业列表
     * @param page 分页参数
     * @param customParamMap 查询参数
     * @return 分页结果
     * @author lwd
     * @since 2025年10月20日 10:00:00
     */
    IPage<QzzxEntDto> queryForcedLogoutEntList(IPage<QzzxEntDto> page, Map<String, Object> customParamMap);


    List<QzzxEntDto> exportQzzxEntList(Map<String, Object> paramMap);

    IPage<EBaseinfo> listEBaseinfo(BaseQuery<EBaseinfo> query);

    EBaseinfo updateBaseinfoSuperviseDept(EBaseinfo eBaseinfo, String afterDeptid, AICUser user);

}
