package com.tofly.xrtygis.custom.service;

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.RelationshipCostDto;
import com.tofly.xrtygis.custom.entity.dto.WisdomDisplayDto;
import com.tofly.xrtygis.custom.entity.scada.StatisticsScada;
import com.tofly.xrtygis.custom.entity.vo.DmaAllIndexVo;
import com.tofly.xrtygis.custom.entity.vo.DmaQueryVo;
import com.tofly.xrtygis.custom.entity.vo.WaterCruxIndexVo;
import com.tofly.xrtygis.entity.Densityconfig;
import com.tofly.xrtygis.entity.Dmausertable;
import com.tofly.xrtygis.entity.Layerfield;
import com.tofly.xrtygis.entity.TfDeviceArchiveManage;

import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.Map;

public interface CustomDisplayService {


    /**
     * 添加动态标注
     *
     * @param layerfield 动态标注
     * @return true or false
     */
    boolean insertDynamicLogo(Layerfield layerfield);

    /**
     * 删除动态标注
     *
     * @param id 动态标识id
     * @return true or false
     */
    boolean deleteDynamicLogo(Long id);

    /**
     * 查看自己创建动态标识
     *
     * @param page page
     * @return page
     */
    Page viewDynamicLogo(Page page);


    /**
     * 获取多个测站指标
     *
     * @param stids 测站id集合
     * @return map
     */
    Map<Long, Map<Long, Object>> getSiteInfos(String stids);

    /**
     * 进取趋势查询
     *
     * @param page      page
     * @param scid      测站id
     * @param code      0：按日查看  1：按月查看
     * @param startTime 开始时间
     * @param endTime   结束时间
     * @return page
     */
    Page waterVolumeTrend(Page page, Long scid, String code, String startTime, String endTime);


    /**
     * 获取监控视频分组分类名称
     *
     * @return list
     */
    List getGroupName();

    /**
     * 获取表位
     * @param khbh 客户编号
     * @return
     */
    /*List getGauge(String khbh);*/

    /**
     * 获取视频监控信息
     *
     * @return list
     */
    List getAllVideo();

    /**
     * 模糊查询视频地址
     *
     * @param add 地址
     * @return list
     */
    List likeVideo(String add);

    /**
     * 修改多个视频是否在大屏显示
     *
     * @param viedoId 视频监控id
     * @return true
     */
    boolean updateVideo(String viedoId);

    /**
     * 停水区域查询
     *
     * @param
     * @return
     */
    Page waterStopArea(Page page, String valve);

    /**
     * 营销信息-获取客户用水量
     *
     * @param page        page
     * @param customerNum 客户编码
     * @return page
     */
    Page getUseWater(Page page, String customerNum);

    /**
     * 营销信息-查看客户历史用水量
     *
     * @param page
     * @param khbh
     * @param strTime
     * @param endTime
     * @return
     */
    Page getUserHistroy(Page page, String khbh, String strTime, String endTime);

    /**
     * 营销信息-客户用水量监控
     *
     * @param page
     * @return page
     */
    Page waterMonitoring(Page page);

    /**
     * 营销信息-获取区域用水量
     *
     * @param page    page
     * @param lon     区域各顶点的横坐标数组
     * @param lat     区域各顶点的纵坐标数组
     * @param strTime 开始时间
     * @param endTime 结束时间
     * @param code    0:查看全部   1：同期比对
     * @return map
     */
    Map<String, Object> getTableInArea(Page page, Double[] lon, Double[] lat, String strTime, String endTime, String code);

    /**
     * 通过管线编号查询客户信息
     *
     * @param page  page
     * @param pipes 管线编号
     * @return page
     */
    Page pipeToCustomers(Page page, String pipes);

    /**
     * 多因子关系成本图
     *
     * @param dto
     * @return
     */
    Map<String, Object> relationshipCost(RelationshipCostDto dto);

    /**
     * 多因子浓度配置
     *
     * @param config config
     * @return boolean
     */
    boolean concentrationConfig(Densityconfig config);

    /**
     * 查看配置信息
     * @return Densityconfig
     */
    Densityconfig viewConfig();

    /**
     * 水表关联查询
     * @param page page
     * @param khbh 客户编号
     * @return page
     */
    Page<Map> viewTable(Page page, String khbh,String khxm,String khdz);

    /**
     * 获得编码表详细消息
     * @param pcid pcid
     * @return list
     */
    List<Map<String,Object>> getCodeInfo(String pcid);

    /**
     * 通过分区id获取用户水表分页
     *
     * @param page
     * @return page
     */
    Page<Dmausertable> selectDmausertablePage(Page page, CustomDmausertableDto dmausertableDto);

    /**
     * 用户用水历史 （调用第三方接口）
     * @param page page
     * @param yhbh 用户编号
     * @return page
     */
    Page<WaterHistory> useWaterHistory(Page page, String yhbh, String startTime, String endTime);

    /**
     * 获取分区树
     * @return true
     */
    DmaQueryVo getDmaTree(String dmaName);

    /**
     * 获取分区级别
     * @return true
     */
    List<Map<String,Object>> getDmaLevel();

    /**
     * 获取各分区级别数量
     * @return true
     */
    List<Map<String,Object>> getDmaLevelAmount();

    /**
     * 通过dmaId查询各指标
     * @param id
     * @return page
     */
    DmaAllIndexVo getDmaAllIndex(Long id);

    /**
     * 查询流量曲线
     * @param
     * @return
     */
    List<StatisticsScada> getDmaFlowPress(String dataType, Long dmaId, String startTime, String endTime);

//    /**
//     * 查询压力曲线
//     * @param
//     * @return
//     */
//    List<StatisticsScada> getDmaPress(Long dmaId, String startTime, String endTime);

    /**
     * 查询供水量和漏损率曲线
     * @param
     * @return
     */
    List<Map<String, Object>> getDmaCensusParam(Long dmaId, String startTime, String endTime);

    /**
     * 导出综合报表(1年;2季度;3月度)
     * @param
     * @return
     */
    boolean exportReportForm(HttpServletResponse response, Page page, WisdomDisplayDto wisdomDisplayDto);

    /**
     * 查询年度综合报表
     * @param
     * @return
     */
    Page<Map<String,Object>> getYearReportForm(Page page, WisdomDisplayDto wisdomDisplayDto);

    /**
     * 查询季度综合报表
     * @param
     * @return
     */
    Page<Map<String,Object>> getQuarterReportForm(Page page, WisdomDisplayDto wisdomDisplayDto);

    /**
     * 查询月度综合报表
     * @param
     * @return
     */
    Page<Map<String,Object>> getMonthReportForm(Page page, WisdomDisplayDto wisdomDisplayDto);

    Page<Map<String,Object>> getReportFormComm(Page page, WisdomDisplayDto wisdomDisplayDto);
    /**
     * 漏损率指标分析
     * @param
     * @return
     */
    Page<Map<String, Object>> getLeakageRate(Page page, WisdomDisplayDto wisdomDisplayDto);

    /**
     * 漏损率指标分析统计图
     * @param
     * @return
     */
    List<Map<String,Object>> getLeakageRateCensus(WisdomDisplayDto wisdomDisplayDto);

    /**
     * 获取漏损率分析状态数量
     * @param
     * @return
     */
    List<Map<String,Object>> getLeakRateStatus(WisdomDisplayDto wisdomDisplayDto);

    /**
     * 产销差指标分析
     * @param
     * @return
     */
    Page<Map<String, Object>> getNrw(Page page, WisdomDisplayDto wisdomDisplayDto);

    /**
     * 获取产销差分析状态数量
     * @param
     * @return
     */
    List<Map<String,Object>> getNrwStatus(WisdomDisplayDto wisdomDisplayDto);

    /**
     * 水平衡分析
     * @param
     * @return
     */
    Page<Map<String, Object>> getWaterBalance(Page page, WisdomDisplayDto wisdomDisplayDto);

    /**
     * 观察表流量分析
     * @param
     * @return
     */
    Page<Map<String, Object>> getObserveFlow(Page page, WisdomDisplayDto wisdomDisplayDto);

    /**
     * 漏损情况总览
     * @param
     * @return
     */
    Map<String, Object> getLeakOverview();

    /**
     * 近12个月供水量分析
     * @param
     * @return
     */
    List<Map<String, Object>> getSupplyWaterYear();

    /**
     * 年度漏损产销差分析
     * @param
     * @return
     */
    List<Map<String, Object>> getLeakNrwYear(WisdomDisplayDto wisdomDisplayDto);

    /**
     * 按月分组统计DMA统计参数
     * @param
     * @return
     */
    List<Map<String, Object>> getDmaStatisticalMonth(WisdomDisplayDto wisdomDisplayDto);

    /**
     * 各级别分区漏损率
     * @param
     * @return
     */
    Map<String, Object> getLevelDmaLeak();

    /**
     * 查询DMA统计参数记录表
     * @param
     * @return
     */
    List<Map<String, Object>> viewDmaCensusParam(WisdomDisplayDto wisdomDisplayDto);

    /**
     * 供水关键指标展示
     * @param
     * @return
     */
    WaterCruxIndexVo viewWaterCruxIndex(WisdomDisplayDto wisdomDisplayDto);

    /**
     * 报表统计（1年;2月;3日）
     * @param
     * @return
     */
    Page<Map<String, Object>> reportFormCensus(Page page, WisdomDisplayDto wisdomDisplayDto);

    /**
     * 查询各指标数据通用接口
     * @param
     * @return
     */
    List<Map<String, Object>> currencyViewIndexH(WisdomDisplayDto wisdomDisplayDto);

    /**
     * 按小时分组查询各指标平均值数据通用接口
     * @param
     * @return
     */
    List<Map<String, Object>> currencyViewIndexAvgH(WisdomDisplayDto wisdomDisplayDto);

    /**
     * 统计设备各状态数量
     * @param
     * @return
     */
    List<Map<String, Object>> censusDeviceStaCount();

    /**
     * 统计指标各状态数量
     * @param
     * @return
     */
    List<Map<String, Object>> censusIndexStaCount();

    /**
     * 查看设备树
     * @param
     * @return
     */
    List<Map<String, Object>> viewDeviceTree(TfDeviceArchiveManage deviceArchiveManage);

    /**
     * 根据小时查询压力合格率指标
     * @param
     * @return
     */
    List<Map<String, Object>> pressQualityRateH(WisdomDisplayDto wisdomDisplayDto);

    /**
     * 查看能耗统计
     * @param
     * @return
     */
    List<Map<String, Object>> viewLossCensus(WisdomDisplayDto wisdomDisplayDto);

//    /**
//     * 按月分组查看巡查统计记录
//     * @param
//     * @return
//     */
//    List<Map<String, Object>> viewGpsCalculateByMonth(WisdomDisplayDto wisdomDisplayDto);

    /**
     * 按月分组查看工单数和完成率
     * @param
     * @return
     */
    List<Map<String, Object>> viewOrderByMonth(WisdomDisplayDto wisdomDisplayDto);

    /**
     * 按月分组查看巡检次数和巡检公里数
     * @param
     * @return
     */
    List<Map<String, Object>> viewInspectPlanByMonth(WisdomDisplayDto wisdomDisplayDto) throws Exception;

    /**
     * 按月分组查看呼叫中心记录
     * @param
     * @return
     */
    List<Map<String, Object>> viewNewHotLineByMonth(WisdomDisplayDto wisdomDisplayDto);

}
