package com.nantian.cloud.dbcapp.mapper.record;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.nantian.cloud.dbcapp.bean.EnterpriseDataInfo;
import com.nantian.cloud.dbcapp.pojo.*;
import com.nantian.cloud.dbcapp.unit.Pages;
import com.nantian.cloud.dbcapp.vo.*;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

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

@Mapper
public interface EnterpriseEnergyDataMapper extends BaseMapper<EnterpriseEnergyDataVo> {

    //按企业清空采集实时表
    void deleteRealTime(@Param("epc") String epc);

    //将采集实时数据放入采集实时表
    Integer insertAllRealTime(@Param("list") List<EnterpriseEnergyDataVo> data);
    //获取当月应送未送企业名单（含实时库）（注销企业不再统计异常）
    //List<EnterpriseEnergyDataInfoPOJO> noEnergyDataExcel(@Param("epcStr") String epcStr, @Param("haltCompany") List<EnterpriseHaltVo> haltCompany, @Param("type") String type, @Param("statDate") String statDate, @Param("sendDate") String sendDate, @Param("days") Integer days, @Param("list") List<EnterpriseDataInfo> enable);
    List<EnterpriseEnergyDetailPOJO> noEnergyDataExcel(@Param("epcStr") String epcStr, @Param("haltCompany") List<EnterpriseHaltVo> haltCompany, @Param("type") String type, @Param("statDate") String statDate, @Param("sendDate") String sendDate, @Param("num") Integer num, @Param("list") List<EnterpriseDataInfo> enable);
    //查询企业采集数据上传情况
    List<EnterpriseEnergyDataVo> energyDataByEpc(@Param("epc") String epc, @Param("statDate") String statDate, @Param("sendDate") String sendDate, @Param("type") String type);

    //查询企业采集数据
    //Integer energyTotal(@Param("type") String type, @Param("query") EnterpriseEnergyDataVo energyDataVo, @Param("start") String start, @Param("end") String end);
    IPage<EnterpriseEnergyDataVo> energyPage(Page page, @Param("type") String type, @Param("query") EnterpriseEnergyDataVo energyDataVo, @Param("start") String start, @Param("end") String end);

    //企业没有传数据的采集点
    List<ConfigureCollectVo> noDataCollectByEpc(@Param("epc") String epc, @Param("statDate") String statDate, @Param("num") int num, @Param("list") List<EnterpriseDataInfo> enable);

    List<ConfigureCollectVo> noDataCollectByException(@Param("epc") String epc, @Param("statDate") String statDate,@Param("num") int num);

    //查询注销企业（企业注销后，不影响之前数据展示，后续不再统计异常）
    List<String> getCancelCompanyCode();

    //查询企业注销状态
   String getCompanyCancelState(@Param("epc") String epc);

    //更新企业综合能耗
    Integer deleteEnergyTce(@Param("year") String year);
    Integer insertEnergyTce(@Param("year") String year, @Param("epcStr") String epcStr, @Param("list") String[] statDateList);
    Integer updateEnergyTce();

    //查询企业综合能耗、是否超出耗能级别表（企业自送综合能耗取值优先取08编码的71）
    List<EnterpriseTcePOJO> enterpriseTceExcel(@Param("epcStr") String epcStr, @Param("list") String[] statDateList, @Param("year") String year);

    //企业指标明细表
    List<EnterpriseQuotaDetailPOJO> enterpriseQuotaDetailExcel(@Param("epcStr") String epcStr, @Param("list") String[] statDateList);

    //企业电力消耗明细
    List<EnterpriseElectricPOJO> getEnterpriseElectricExcel(@Param("epcStr") String epcStr, @Param("list") String[] statDateList);

    //根据能源编码获取能源名称
    String getEnergyName(@Param("energyCode") String energyCode);

    //企业用能数据传送明细
    List<EnterpriseEnergyPOJO> getEnterpriseEnergyExcel(@Param("epcStr") String epcStr, @Param("list") String[] statDateList, @Param("energyList") String[] energyCodeList);

    //修改采集数据和折标系数
    boolean updateInfoByEpc(@Param("data") ExceptionInfoVo data);

    //获取采集配置项信息
    EnterpriseEnergyDataVo getEnergyCollectInfo(@Param("data") ExceptionInfoVo data);

    List<String> getDataBySataDate(@Param("data") ExceptionInfoVo data);

    //清除备份
    void deleteDataBack(@Param("dataId") String dataId);
    //数据备份
    void insertDataBack(@Param("applyRecord") ApplyRecord applyRecord);
    //修改数据
    void updateDataInfo(@Param("applyRecord") ApplyRecord applyRecord);
    //数据删除
    void deleteDataInfo(@Param("applyRecord") ApplyRecord applyRecord);

    Integer updateExceptionInfo(@Param("data") ExceptionInfoVo data);

    //清除备份
    void deleteDataBackByDistinct();
    //重复数据备份
    void insertDataBackByDistinct(@Param("remark") String remark, @Param("type") String type, @Param("user") String user);
    //重复数据删除
    void deleteDataInfoByDistinct();

    //获取单月应送未送名单明细（含实时库）
    List<EnterpriseEnergyDetailPOJO> noEnergyDataInfoExcel(@Param("epcStr") String epcStr, @Param("haltCompany") List<EnterpriseHaltVo> haltCompany, @Param("num") int num, @Param("statDate") String statDate, @Param("type") String type, @Param("list") List<EnterpriseDataInfo> enable);

    //查找采集项id
    String getDataId(@Param("applyRecord") ApplyRecord applyRecord);

    //设置表头
    int updateElectricDetailTable(@Param("num") int num, @Param("date") String date);

    //设置企业一级电力数据
    int updateElectricDetailData(@Param("num") int num, @Param("date") String date);

    //批量确认异常数据无误
    int updateExceptionList(@Param("list") List<ExceptionInfoVo> data);

    //批量删除已经处理的异常信息
    int deleteExceptionList(@Param("list") List<ExceptionInfoVo> data);

    //批量提交数据修改申请
    int inestApplyRecord(@Param("list") List<ExceptionInfoVo> data);

    //修改异常表记录为已处理
    int updateExceptionState(@Param("applyRecord") ApplyRecord applyRecord);

    //删除已经处理的异常信息
    int deleteException(@Param("applyRecord") ApplyRecord applyRecord);

    //批量修改异常数据企业受理状态，为企业提交修改申请
    int updateExceptionHandlerType(@Param("list") List<ExceptionInfoVo> data, @Param("type") String type);

    //修改异常表记录为政府审核状态：0企业已解决，1企业提交修改申请，2政府审核退回，4企业未处理
    int updateExceptionHandlerReson(@Param("applyRecord") ApplyRecord applyRecord, @Param("handlerType") String handlerType);

    //申请修改数据记录表审核内容更新
    int updateApplyRecord(@Param("applyRecord") ApplyRecord applyRecord);

    //接入完成企业、公式配置企业家数
    List<Map<String, String>> getEnterpriseDetail(@Param("startDate") String startDate, @Param("endDate") String endDate, @Param("type") String type);

    //累计公式配置、在线采集数据量（在线采集、电力数据）
    Map<String, String> getEnterpriseDataDetail(@Param("startDate") String startDate, @Param("endDate") String endDate);

    //数据不合格企业
    Map<String, String> getEnterpriseByException(@Param("startDate") String startDate, @Param("endDate") String endDate);

    //按异常类型获取各异常情况
    Map<String, String> getExceptionDetailGroupByType(@Param("startDate") String startDate, @Param("endDate") String endDate);

    //获取新注册企业
    List<Map<String, String>> getRegisterEnterprise(@Param("list") List<String> accountList);

    Map<String,Double> getMarks(@Param("dataCode") String dataCode);
}
