package com.tofly.xrtygis.custom.mapper;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.tofly.xrtygis.custom.entity.WaterHistory;
import com.tofly.xrtygis.custom.entity.dto.CustomDmausertableDto;
import com.tofly.xrtygis.custom.entity.dto.IndexInfoDto;
import com.tofly.xrtygis.custom.entity.dto.QueryAllScadaDto;
import com.tofly.xrtygis.custom.entity.dto.WisdomDisplayDto;
import com.tofly.xrtygis.custom.entity.scada.StatisticsScada;
import com.tofly.xrtygis.custom.entity.vo.QueryVo;
import com.tofly.xrtygis.custom.entity.vo.WaterCruxIndexVo;
import com.tofly.xrtygis.entity.Dmausertable;
import com.tofly.xrtygis.entity.Scadahistory;
import com.tofly.xrtygis.entity.TfDeviceArchiveManage;
import com.tofly.xrtygis.entity.TfWaterInfo;
import io.swagger.models.auth.In;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import java.util.Map;

public interface CustomDisplayMapper {

    /**
     * 查看历史记录
     *
     * @param page      page
     * @param itcd      指标编号
     * @param startTime 开始时间
     * @param endTime   结束时间
     * @return page
     */
    Page<Map> viewHistory(Page page, @Param("itcd") String itcd, @Param("startTime") String startTime, @Param("endTime") String endTime);

    /**
     * 查看历史记录
     *
     * @param itcd      指标编号
     * @param startTime 开始时间
     * @param endTime   结束时间
     * @return page
     */
    List<Map> viewHistory2(@Param("itcd") String itcd, @Param("startTime") String startTime, @Param("endTime") String endTime);

    /**
     * 查询指标值
     *
     * @param itcd      指标编号
     * @param startTime 开始时间
     * @param endTime   结束时间
     * @return list
     */
    List<Scadahistory> viewItValue(@Param("itcd") String itcd, @Param("startTime") String startTime, @Param("endTime") String endTime);

    /**
     * 计算不在范围内的值
     *
     * @param itcd      指标编号
     * @param upValue   上限值
     * @param downValue 下限值
     * @param startTime 开始时间
     * @param endTime   结束时间
     * @return Integer
     */
    Long countValue(@Param("itcd") String itcd, @Param("upValue") double upValue, @Param("downValue") double downValue, @Param("startTime") Date startTime, @Param("endTime") Date endTime);

    /**
     * 获取实时监测值
     *
     * @param itcdList 指标编号集合
     * @return list
     */
    List<IndexInfoDto> getRealtime(@Param("itcdList") List<String> itcdList);

    /**
     * 最大历史值
     *
     * @param itcdList 编号集合
     * @return double
     */
    List<IndexInfoDto> getMaxHistoryVal(@Param("itcdList") List<String > itcdList);

    /**
     * 按小时查询取供水趋势
     *
     * @param page  page
     * @param scid  厂id
     * @param start 开始时间
     * @param end   结束时间
     * @return page
     */
    Page<Map> waterByHour(Page page, @Param("scid") Long scid, @Param("start") String start, @Param("end") String end);


    /**
     * 按天查询取供水趋势
     *
     * @param page  page
     * @param scid  厂id
     * @param start 开始时间
     * @param end   结束时间
     * @return page
     */
    Page<Map> waterByDay(Page page, @Param("scid") Long scid, @Param("start") String start, @Param("end") String end);

    /**
     * 按月查询供取水趋势
     *
     * @param page  page
     * @param scid  厂id
     * @param start 开始时间
     * @param end   结束时间
     * @return page
     */
    Page<Map> waterByMonth(Page page, @Param("scid") Long scid, @Param("start") String start, @Param("end") String end);

    /**
     * 取供水同期比对
     *
     * @param page
     * @return
     */
    Page<Map> waterContrast(Page page, @Param("scid") Long scid, @Param("list") List<String> list);

    /**
     * 获取水表坐标
     *
     * @param numList 编号集合
     * @return list
     */
    List<Map> getCoordinate(List numList);

    List<Map<String, Object>> getPrimaryInfo(@Param("list") List list, @Param("start") String start, @Param("end") String end);

    List<Map<String, Object>> getPacDensity(@Param("map") Map<String,List> map, @Param("start") String start, @Param("end") String end, @Param("density") Double density);

    List<Map<String, Object>> getPamDensity(@Param("map") Map<String,List> map, @Param("start") String start, @Param("end") String end, @Param("density") Double density);

    List<Map<String, Object>> getGmsjDensity(@Param("map") Map<String,List> map, @Param("start") String start, @Param("end") String end, @Param("density") Double density);

    List<Map<String, Object>> getYlDensity(@Param("map") Map<String,List> map, @Param("start") String start, @Param("end") String end);

    List<Map<String,Object>> getPacTwo(@Param("list") List list, @Param("start") String start, @Param("end") String end);

    List<Map<String, Object>> getCostAndWater(@Param("param") String param,@Param("start") String start,@Param("end") String end);

    Map<String, Double> getCoordinateInfo(@Param("sbbh") String sbbh);

    List<Map<String,Object>> getWaterVolume(@Param("code") String code,@Param("start") String start,@Param("end") String end);


    List<Map<String,Object>> getCodeInfo(@Param("pcid") String pcid);

    @Select("select distinct ccode, cname\n" +
            "from TF_YWPN_SYSCHILDCODE_D\n" +
            "where pcid = 403")
    List<Map> getIndexType();

    @Select("select STNM, i.ITCD, i.ITNM\n" +
            "        from TF_YWPN_SCADASTAITEM_W i\n" +
            "                 left join TF_YWPN_SCADASTATION_B s on i.STATION_ID = s.ID\n" +
            "        where UP_LIMIT is not null\n" +
            "           or DOWN_LIMIT is not null\n" +
            "           or QUALITY_STANDARD is not null" +
            "           and i.state = 1")
    List<Map> getStationItemInfo();

    List<Map<String,Object>> getItvalHistory(@Param("itcdList") List itcdList,@Param("start") String start,@Param("end") String end,@Param("itidList") List itidList);

    List<Map<String,Object>> itemValInfo(@Param("itcdList") List itcdList,@Param("start") String start,@Param("end") String end);

    Page<Dmausertable> selectDmausertablePage(Page page, @Param(value = "dmausertableDto") CustomDmausertableDto dmausertableDto);

    Page<WaterHistory> useWaterHistory(Page page, @Param("yhbh") String yhbh, @Param("startTime")String startTime, @Param("endTime")String endTime);

    List<QueryVo> getAllMainDma(String dmaName);

    List<QueryVo> getDmaChild(@Param("id") Long id,@Param("dmaName") String dmaName);

    List<Map<String,Object>> getDmaByLevel(Integer dmaLevel);

    List<String> getDmaLevel();

    List<Map<String,Object>> getDmaName(int dmaLevel);

    List<Map<String,Object>> getDmaAllLevelCount();

    List<StatisticsScada> getAllScadaIndex(QueryAllScadaDto dto);

    Map<String,Object> getLastMonthStatistical(Long dmaId);

    List<StatisticsScada> getDmaFlowPress(@Param("dataType") String dataType, @Param("dmaId") Long dmaId, @Param("startTime") String startTime, @Param("endTime") String endTime);

//    List<StatisticsScada> getDmaPress(@Param("dmaId") Long dmaId, @Param("startTime") String startTime, @Param("endTime") String endTime);

    List<Map<String,Object>> getDmaCensusParam(@Param("dmaId") Long dmaId, @Param("startTime") String startTime, @Param("endTime") String endTime);

    Page<Map<String, Object>> getYearReportForm(@Param("page") Page page, @Param("dto") WisdomDisplayDto wisdomDisplayDto);

    Page<Map<String, Object>> getQuarterReportForm(@Param("page") Page page, @Param("dto") WisdomDisplayDto wisdomDisplayDto);

    Page<Map<String, Object>> getReportFormComm(@Param("page") Page page, @Param("dto") WisdomDisplayDto wisdomDisplayDto);



    Page<Map<String, Object>> getMonthReportForm(@Param("page") Page page, @Param("dto") WisdomDisplayDto wisdomDisplayDto);

    Page<Map<String, Object>> getLeakageRate(@Param("page") Page page, @Param("dto") WisdomDisplayDto wisdomDisplayDto);

    List<Map<String,Object>> getLeakageRateCensus(WisdomDisplayDto wisdomDisplayDto);

    List<Map<String,Object>> getLeakRateStatus(WisdomDisplayDto wisdomDisplayDto);

    Page<Map<String, Object>> getNrw(@Param("page") Page page, @Param("dto") WisdomDisplayDto wisdomDisplayDto);

    List<Map<String,Object>> getNrwStatus(WisdomDisplayDto wisdomDisplayDto);

    Page<Map<String, Object>> getWaterBalanceM(@Param("page") Page page, @Param("dto") WisdomDisplayDto wisdomDisplayDto);

    Page<Map<String, Object>> getWaterBalanceY(@Param("page") Page page, @Param("dto") WisdomDisplayDto wisdomDisplayDto);

    Page<Map<String, Object>> getObserveFlowM(@Param("page") Page page, @Param("dto") WisdomDisplayDto wisdomDisplayDto);

    Page<Map<String, Object>> getObserveFlowD(@Param("page") Page page, @Param("dto") WisdomDisplayDto wisdomDisplayDto);

    Page<Map<String, Object>> getObserveFlowH(@Param("page") Page page, @Param("dto") WisdomDisplayDto wisdomDisplayDto);

    int getMonitorCount();

    Map<String,Object> getLeakOverview();

    List<Map<String,Object>> getSupplyWaterYear(WisdomDisplayDto wisdomDisplayDto);

    List<Map<String,Object>> getDmaStatisticalMonth(WisdomDisplayDto wisdomDisplayDto);

    Map<String,Object> getDmaStatisticalMonthOne(String censusMonth);

    List<Map<String,Object>> getLevelDmaLeak(WisdomDisplayDto wisdomDisplayDto);

    Float getLevelDmaLeakAvg(WisdomDisplayDto wisdomDisplayDto);

    int getDmaCount();

    Integer getLeakageCount();

    List<Map<String,Object>> viewDmaCensusParam(WisdomDisplayDto wisdomDisplayDto);

    int getPipeDevice(@Param("type") String type, @Param("deviceType") String deviceType, @Param("status") String status);

    int getWaterAmount();

    int getCameraAmount();

    BigDecimal getDesignProcessCapacity(String name);

    int getNoiseCheckAmount();

    int getPipeTableAmount();

    BigDecimal getYesterdaySupplyWater();

    BigDecimal getYesterdayUserWater();

    List<TfWaterInfo> getWaterInfo();

    List<Map<String,Double>> getNearYearStatistical(@Param("startDate") String startDate, @Param("endDate") String endDate);

    Page<Map<String,Object>> reportFormCensusY(@Param("page") Page page, @Param("dto") WisdomDisplayDto wisdomDisplayDto);

    Page<Map<String,Object>> reportFormCensusM(@Param("page") Page page, @Param("dto") WisdomDisplayDto wisdomDisplayDto);

    Page<Map<String,Object>> reportFormCensusD(@Param("page") Page page, @Param("dto") WisdomDisplayDto wisdomDisplayDto);

    List<Map<String,Object>> currencyViewIndexH(WisdomDisplayDto wisdomDisplayDto);

    List<Map<String,Object>> currencyViewIndexAvgH(WisdomDisplayDto wisdomDisplayDto);

    List<Map<String,Object>> censusDeviceStaCount();

    List<Map<String,Object>> censusIndexStaCount();

    List<String> getAllDeviceType(TfDeviceArchiveManage deviceArchiveManage);

    String getDeviceTypeName(String deviceType);

    Integer getWaterQualityDevice(String isAlarm);

    Map<String,Object> getStatisticalGroupYear(WisdomDisplayDto wisdomDisplayDto);

    List<Map<String,Object>> viewLossCensus(WisdomDisplayDto wisdomDisplayDto);

    Map<String,Object> viewLossCensusOne(WisdomDisplayDto wisdomDisplayDto);

//    Map<String,Object> viewInspectCensus(WisdomDisplayDto wisdomDisplayDto);

//    List<Map<String,Object>> viewGpsCalculateByMonth(WisdomDisplayDto wisdomDisplayDto);

    Integer getInspectPersonNum();

    List<Long> getInspectPersonList();

    Long viewOrderCensus(WisdomDisplayDto wisdomDisplayDto);

    List<Map<String,Object>> viewOrderByMonth(WisdomDisplayDto wisdomDisplayDto);

    Long viewInspectPlanCensus(WisdomDisplayDto wisdomDisplayDto);

    List<Map<String,Object>> viewInspectPlanByMonth(WisdomDisplayDto wisdomDisplayDto);

    Long viewTroubleCensus(WisdomDisplayDto wisdomDisplayDto);

    List<Map<String,Object>> viewTroubleByMonth(WisdomDisplayDto wisdomDisplayDto);

    Long getUserByDmaId(Long id);

    List<Map<String,Object>> getScadaReportById(@Param("reportIdList") List<Long> reportIdList);

}
