package com.nantian.cloud.jljc.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.nantian.cloud.jljc.entity.TReport;
import com.nantian.cloud.jljc.vo.EnergyInfoConsumptionVo;
import com.nantian.cloud.jljc.vo.Query;
import com.nantian.cloud.jljc.vo.QueryCustomReportSummaryVo;
import com.nantian.cloud.jljc.vo.ReportModifyVo;
import com.nantian.cloud.jljc.vo.comAnalysis.EnergyInfoVo;
import com.nantian.sc.cloud.common.data.datascope.DataScope;
import com.nantian.sc.cloud.common.security.service.ScUser;

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

/**
 * 能源报表信息 服务类
 * @since 2020-09-16
 * @author stz
 */
public interface TReportService extends IService<TReport> {

    //超期申请查询
    IPage<ReportModifyVo> getModifyRecords(Page page, String cmpName, String status);

    //通过企业编码、年份、报表类型，查询能源报表信息
    TReport getInfoByType(String enterpriseCode, String year, String type);

    //新增报表信息，返回主键id
    boolean addTReport(TReport addReport);

    /**
     * 通过企业编码、年份、报表类型，查询能源报表信息id
     * （有数据就返回id，无数据就新增记录后返回id）方法慎用！！！
     * 只有需要新增和修改report数据时，再使用；
     * 查询时使用 getInfoByType(String enterpriseCode, String year, String type);方法
     */
    long getTReportIdByType(String enterpriseCode, String year, String type, ScUser u );

    //查询企业报表情况
    IPage<Map<String,Object>> queryState(Page page, Query query);

    //自定义报表查询
    IPage<Map<String,Object>> queryCustom(Page page, Query query);

    //按企业维度获取综合能耗
    IPage<Map<String,Object>> getEnergyConsumptionByCom(Page page, Query query);
    //按地区维度获取综合能耗
    List<Map<String,Object>> getEnergyConsumptionByArea(Query query);
    //按行业维度获取综合能耗
    List<Map<String,Object>> getEnergyConsumptionByTrade(Query query);

    //按年份、产品编码获取 单位产品能耗排名
    IPage<Map<String,Object>> unitConsumptionRanking(Page page, String year, String productCode);
    //按年份、产品编码获取 单位产品能耗的前三名
    List<Map<String, Object>> unitConsumptionTop3(String year, String productCode);

    //自定义查询能报、监察、在线监测数据
    IPage<Map<String, Object>> queryCustomReport(Page page, Query query);

    //根据多行业、多地区 自定义查询能报、监察、在线监测汇总数据
    List<QueryCustomReportSummaryVo> queryCustomReportSummary(Query query);

    //自定义查询 16地州数据
    List<QueryCustomReportSummaryVo> queryCustomReportSummaryByAllArea(Query query);

    //获取节能首页的获取综合能源消费
    List<Map<String,Object>> energyConsumptionByAreas(String year, String area);

    //能源利用状况报告上报情况汇总
    Map<String,Object> totalByReport(String year, String area);

    //获取能源消费结构的综合能源消费
    List<EnergyInfoConsumptionVo> energyConsumptionByEnergy(Query query);

    //企业专题分析(企业列表)
    IPage<Map<String,Object>> comAnalysisList(Page page, Query query);

    //分页获取能效对标企业名单
    IPage<Map<String, Object>> energyBenchmarkingPage(Page page, String year, String energyId, DataScope dataScope);

    //获取能效对标饼图
    Map<String, String> energyBenchmarkingGov(String year, String energyId, Integer area);
    Map<String, String> energyBenchmarkingLocal(String year, String energyId, Integer area);

    //能效对标管理
    Map<String, Object> energyBenchmarking(Page page, String year, String energyId);

    //地区未审核报表记录
    int noProvStatusLog();

    //滞留在州市级的报表上送至省级
    int upProvStatus(String date);

    //获取能报情况首页通知（加数据权限）
    List<Map<String, Object>> noticeListByReport(Query query, String deptId);

    //获取能报报表1的异常情况
    List<Map<String, Object>> exceptionInfoByReport1(Query query, String deptId);

    //获取能报报表2的异常情况
    List<Map<String, Object>> exceptionInfoByReport2(Query query, String deptId);

    List<Map<String, Object>> reportSummaryAndAudit(Query query);

    Map<String, Object> queryCustomRank(Page page, Query query);

    IPage<Map<String,Object>> getNoAuditPage(Page page, Query query);

    List<TReport> listByAuditorJudge(TReport tReport);

    List<EnergyInfoVo> getEnergyData();

    List<Map<String,Object>> getReturnDetail(String epc, String year);

    //更新能报企业和报表所属地区
    void renewReportRegion(String enterpriseCode, String regionCode);
}
