package com.nantian.cloud.dbcapp.mapper.record;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.nantian.cloud.dbcapp.bean.*;
import com.nantian.cloud.dbcapp.entity.CompanyMaterielProduct;
import com.nantian.cloud.dbcapp.vo.*;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.math.BigInteger;
import java.util.ArrayList;
import java.util.List;

@Mapper
public interface EnterpriseDataInfoMapper extends BaseMapper<EnterpriseEnergyDataVo> {

    //查询停用采集点 startTime为yyyy-mm-dd
    List<EnterpriseDataInfo> selectEnableDataCode(@Param("enterpriseCode") String enterpriseCode, @Param("startTime") String startTime);

    //查询停用采集点 startTime为yyyy-mm
    List<EnterpriseDataInfo> selectEnableDataCodeByMonth(@Param("enterpriseCode") String enterpriseCode, @Param("startTime") String startTime);

    List<EnterpriseDataInfo> selectDataCode(@Param("enterpriseCode") String enterpriseCode, @Param("list") List<EnterpriseDataInfo> enable);

    List<Values> selectDataValue(String enterpriseCode, String startTime, String endTime);

    Integer insertData(List<EnterpriseDataInfo> newLists);

    List<CalculateBo> selectEnergyValue(@Param("enterpriseCode") String enterpriseCode,
                                        @Param("energyCode") String energyCode,
                                        @Param("energyTypeCode") String energyTypeCode,
                                        @Param("startTime") String startTime,
                                        @Param("base") String base
    );

    List<String> selectEnterpriseInfo(@Param("cmpName") String cmpName);

    Float selectUnitEnergyInfo(@Param("enterpriseCode") String enterpriseCode,
                               @Param("base") String base,
                               @Param("dataCode") String dataCode,
                               @Param("time") String time);

    Float selectUnitProduct(@Param("enterpriseCode") String enterpriseCode,
                            @Param("productCode") String productCode,
                            @Param("time") String time);

    Float selectElectricPower(@Param("enterpriseCode") String enterpriseCode, @Param("productCode") String productCode, @Param("time") String time);

    ArrayList<UnitInfo> selectUnitEnergyName(String enterpriseCode);

    void insertIndexData(ArrayList<IndexValuesBo> resultList);

    List<EnterpriseConfigureInfo> selectEnterpriseConfigureInfo(@Param("enterpriseCode") String enterpriseCode);

    void insertIntoCongigure(@Param("name") String name, @Param("list") List<EnergyInfo> list);

    ArrayList<EnergyKindsInfo> selectEnergyKindsInfo(@Param("enterpriseCode") String enterpriseCode, @Param("baseCode") String baseCode);

    Float selectDataInfoByDataCode(String newCode, String enterpriseCode, String time);

    List<Float> selectCoefficientbyDataCode(String enterpriseCode, String dataCode, String time);

    List<ProductAssist> selectProductAssist(String enterpriseCode);

    List<ProductAssist> selectUnitAssist(@Param("enterpriseCode") String enterpriseCode);

    Float selectRecyleElectricityFromStructury(@Param("dataCode") String dataCode, @Param("enterPriseCode") String enterpriseCode, @Param("time") String time);

    ValueUnit selectUnitByCode(String substring);

    ValueUnit selectUnitByCode1(String substring);

    List<UnitList> selectAllUnitList(@Param("list") List<String> enterpriseLists, @Param("preTime") String preTime, @Param("finishTime") String finishTime);

    List<DataValueUnit> selectUnitInfo01();

    List<DataValueUnit> selectUnitInfo03();

    void upsetUnit(List<UnitList> list);

    List<ExceptionInfoBo> selectEnterpriseInfoAll(@Param("time") String time);

    void insertExceptionInfo(@Param("list") List<ExceptionInfoBo> resultInfos, @Param("statType") String statType);

    List<CollectWaveBo> selectWaveInfo();

    List<ConsumeBo> selectConsume(@Param("enterpriseCode") String enterpriseCode, @Param("dataCode") String dataCode, @Param("time") String s);

    List<ExceptionInfoBo> selectTransException(@Param("type") String type, @Param("haltArr") String[] haltArr, @Param("list") List<EnterpriseDataInfo> enable);

    List<ExceptionInfoBo> selectEnterpriseInfoAllByDay(@Param("haltArr") String[] haltArr);

    void delectCollectInfo();

    void insertInfoByDay(@Param("preTime") String preTime, @Param("endTime") String endTime);

    Integer isHasOpenId(@Param("openId") String openId);
    Integer savaOpenId(@Param("openId") String openId, @Param("userId") String userId);
    List<SysUserSub> getUserInfo(@Param("openId") String openId);

    void deleteYearAndMonthRigth(@Param("enterpriseCode") String epcCode, @Param("preTime") String preTime, @Param("finishTime") String finishTime);

    void delectExceptionByDay(@Param("format") String format);

    void merageExceptionByDay(@Param("format") String format);

    void deleteExceptionNew(@Param("format") String nowDate);

    void judge(String format);

    List<ExceptionInfoBo> selectEnterpriseInfoAllByMonth(@Param("pre") String preTime, @Param("end") String endTime, @Param("type") String type, @Param("haltArr") String[] haltArr);

    List<ExceptionInfoBo> selectEnterpriseDataByMonth(@Param("pre") String preTime, @Param("type") String type, @Param("haltArr") String[] haltArr);

    List<EnterpriseBo> analyseEnterpriseCode();

    void insertExceptionInfoMonth(@Param("list") ArrayList<ExceptionInfoBo> resultList, @Param("statType") String statType);

    Integer updateDataCodeState(@Param("enterpriseCode") String enterpriseCode, @Param("dataCode") String dataCode, @Param("state") Integer state);

    void updateDataCodeStateNew(@Param("enterpriseCode") String enterpriseCode, @Param("dataCode") String dataCode, @Param("state") Integer state);

    List<String> selectEnterpriseCode(@Param("enterpriseCode") String enterpriseCode);

    void deleteEnergyKinds(@Param("enterpriseCode") String enterpriseCode);

    List<String> getEffectiveEnterprise(@Param("time") String time);

    Float selectEnergyKindsValue(@Param("enterpriseCode") String enterpriseCode, @Param("time") String time, @Param("energyCode") String energyCode, @Param("energyTypeCode") String energyTypeCode, @Param("baseCode") String s);

    void insetEpcList(@Param("list") List<EpcDictIndustryCode> lists, @Param("time") String time);

    void updateEpcAreaAndIndustry();

    List<XYBo> selectOutputValue();

    Float selectZhnh(@Param("enterpriseCode") String x, @Param("time") String time);

    Float selectOutput(@Param("enterpriseCode") String x, @Param("dataCode") String y, @Param("time") String time);

    void insetOutPutValue(@Param("list") List result, @Param("time") String time);

    List<ExceptionInfoVo> selectRightExceptionRation();

    void insetAddEnterpriseDataInfo(@Param("list") ArrayList<String> addIdLists);

    List<String> selectEnterpriseInfoByEpc(@Param("epc") String epc);

    List<XYBo> selectElectricityDataInfo(@Param("list") List<String> enterpriseInfo, @Param("time") String time);

    Float selectCollectDataInfo(@Param("epc") String x, @Param("time") String time, @Param("dataCode") String dataCode);

    Integer updateCollectDataInfoByElectricity(@Param("x") String x, @Param("y") String y, @Param("time") String time, @Param("dataCode") String dataCode);

    List<EpcDictIndustryCode> selectEpcDictIndustryCode(@Param("list") List<String> lists);

    List<JudegTransExceptionBo> selectExceptionTrans(@Param("date") String date, @Param("exceptionType") String exceptionType);

    List<JudegTransExceptionBo> selectTransExceptionValue(@Param("list") List<JudegTransExceptionBo> resultList, @Param("date") String date);

    Integer updateTransException(@Param("list") List<BigInteger> idList);

    List<JudegTransExceptionBo> selectExceptionTransMonth(@Param("date") String date, @Param("exceptionType") String exceptionType);

    List<JudegTransExceptionBo> selectTransExceptionValueMonth(@Param("list") List<JudegTransExceptionBo> resultListMonth, @Param("pre") String pre, @Param("end") String end);

    //能源参考折标系数
    Float getEnergyConvertRation(@Param("energyCode") String energyCode);

    //获取异常日期
    List<String> getExceptionDate(@Param("exceptionType") String exceptionType);

    //波动异常处理
    List<JudegTransExceptionBo> selectWaveException(@Param("date") String date);
    List<JudegTransExceptionBo> selectWaveExceptionValue(@Param("list") List<JudegTransExceptionBo> resultList, @Param("date") String date);

    //企业采集点不存在的，同步删除异常记录
    int deleteExceptionByCollect(@Param("epc") String epc);

    Float selectUnitEnergyByStructure(@Param("enterpriseCode") String enterpriseCode, @Param("base") String base, @Param("dataCode") String dataCode, @Param("time") String time);

    //获取企业所属行业编码
    String getProductCode(@Param("enterpriseCode") String enterpriseCode);

    //获取企业需要修正的能源
    List<String> getCorrectEnergyCode(@Param("enterpriseCode") String enterpriseCode, @Param("calculateTime") String calculateTime);

    //获取实物量  1.若一个能源有多条配置，就用实物量折标相加后的值，折标系数用1   2.电力、煤气统一单位除以10000，乙醇统一单位除以1000
    EffectiveBo getCorrectConsume(@Param("enterpriseCode") String enterpriseCode, @Param("calculateTime") String calculateTime, @Param("energyCode") String energyCode, @Param("time") String time);

    //获取折标量
    EffectiveBo getCorrectConsumeByQuotaName(@Param("enterpriseCode") String enterpriseCode, @Param("calculateTime") String calculateTime, @Param("quotaName") String quotaName, @Param("time") String time);

    List<String> selectCollect(@Param("epc") String epc, @Param("statType") String statType);

    List<JudegTransExceptionBo> selectEnergyData(@Param("epc") String epc, @Param("collect") String collect, @Param("date") String date);

    List<EnergyDataVo> selectEnergyDataInfo(@Param("epc") String epc, @Param("collect") String collect, @Param("date") String date, @Param("state") String state);
    List<EnergyDataVo> selectEnergyDataInfo2(@Param("epc") String epc, @Param("collect") String collect, @Param("date") String date, @Param("state") String state);

    void truncateDistinctEnergyData(@Param("tableName") String tableName);
    int insertDistinctEnergyData(@Param("tableName") String tableName, @Param("list") List<EnergyDataVo> dataList);

    void truncateDistinctEnergyDataTemp();
    void insertDistinctEnergyDataTemp(@Param("epc") String epc, @Param("year") String year, @Param("collect") String collect);
    void insertDistinctEnergyDataTempByAddDate(@Param("epc") String epc, @Param("collect") String collect, @Param("addDate") String addDate, @Param("num") int num);

    List<String> distinctEnergyDataTemp(@Param("epc") String epc, @Param("collect") String collect, @Param("num") int num);

    Float selectPreUnitProduct(@Param("enterpriseCode") String enterpriseCode, @Param("productCode") String productCode, @Param("time") String time);

    JudegTransExceptionBo getGuidelineVal(@Param("enterpriseCode") String enterpriseCode, @Param("name") String name, @Param("time") String time);

    Integer updateNewCollect();
    Integer deleteNewCollect();


    List<JudegTransExceptionBo> selectEnterpriseData(@Param("enterpriseCode") String enterpriseCode, @Param("dataCode") String dataCode, @Param("date") String date);

    //获取企业物料产品单位
    ValueUnit getProductName(@Param("enterpriseCode") String enterpriseCode, @Param("energyCode") String energyCode);

    //设置老平台企业信息
    void updateOldEnterpriseName();
    //设置端系统接入企业，行业信息
    void updateEnterpriseTrade();
    //企业表信息中间表（更新企业信息中间表enterprise_info_all、更新487&299企业名单access_enterprise_info）
    void insertEnterpriseTmp();
    //将energy_record库的enterprise_info表信息 同步至 jly库的enterprise_info表
    void insertEnterpriseJly();
    //配置history_config_endtime表
    void configEndTime();
    //配置t_configure_energykinds表
    //void configEnergyKinds();
    //在线监测企业数据中间表
    void insertEnterpriseDataTmp();

    //获取应用分析系统计量器具的企业编码
    List<String> getConfigureGaugeEpc();
    //同步在线采集新增计量器具信息，至应用分析系统
    void insertConfigureGauge(@Param("list") List<ConfigureGaugeVo> configureGaugeVos);
    //能源计量审查企业，同步计量器具信息至应用分析系统首页
    void etlGauges(@Param("list") List<ConfigureGaugeVo> gauges, @Param("epc") String epc);

    //原始数据标记为异常已处理
    Integer updateDataException(@Param("list") List<BigInteger> oldIdList);

    //单位产值综合能耗数据录入t_output_value表
    void insertUnitEnergyConsumption();

    //州市未审核日志
    int noProvStatusLog(@Param("date") String date,@Param("step") int step);

    //定时推送滞留在州市的报表至省级
    int upProvStatus(@Param("date") String date,@Param("step") int step);

    //新增new表中不存在的配置项数据
    Integer insertNewCollect();

    //同步产品数据
    int renewMaterielProduct(@Param("item") CompanyMaterielProduct productList);
}
