package com.zcxk.service;

import com.zcxk.dto.MonitorDataChartReportDeviceDto;
import com.zcxk.dto.generalView.*;
import com.zcxk.entity.DeviceEntity;
import com.zcxk.entity.MonitorDataEntity;
import com.zcxk.model.LoginUser;

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

/**
 * @description
 * @auto wangli
 * @data 2020/12/7 20:22
 */
public interface MonitorDataReportService {

    //日报
    List<MonitorDataChartReportDeviceDto> monitorDataChartReportByDay(Long sceneId, Integer year, Integer month , Integer day);
    //月报
    List<MonitorDataChartReportDeviceDto> monitorDataChartReportByMonth(Long sceneId, Integer year, Integer month );
    //年报
    List<MonitorDataChartReportDeviceDto> monitorDataChartReportByYear(Long sceneId, Integer year);
    //月报
    List<MonitorDataChartReportDeviceDto> monthMonitorData(Long sceneId, String startTime, String endTime );

    //报警次数
    List<MonitorDataChartReportDeviceDto> deviceAlarmReport(Integer type, List<Long>  sceneIds, Integer year, Integer month , Integer day, String startTime, String endTime);
    //水质对比
    List<MonitorDataChartReportDeviceDto> monitorDataQualityReport(Integer type, List<Long>  sceneIds, Integer year, Integer month , Integer day, String startTime, String endTime);
    //能耗对比
    List<MonitorDataChartReportDeviceDto> monitorDataEnergyReport(Integer type, List<Long>  sceneIds, Integer year, Integer month , Integer day, Integer sceneType,String startTime, String endTime);
    // 水电耗
    List<MonitorDataChartReportDeviceDto> monitorWaterPowerConsumptionReport(Integer type, List<Long>  sceneIds, Integer year, Integer month , Integer day, Integer sceneType, String startTime, String endTime);
    List<DeviceEntity> getDeviceBySceneTypeName(String sceneTypeName);

    List<MonitorDataChartReportDeviceDto> monitorDataDeviceReport(Integer type, List<Long>  deviceIds, Integer searchType, Integer year, Integer month , Integer day,String startTime, String endTime);

    //概览页所有数据
    GeneralViewResults monitorDataGeneralView();
    
    //近30天水量
    List<DeviceWaterSupply> deviceWaterSupplie();

    //供水详情数据
    DeviceWaterAmount deviceWaterAmount();

    //实时报警信息
    List<SceneAlarm> sceneAlarms();

    //管网水质情况
    List<SceneNormalRate> SceneNormalRates();

    //压力分布区间
    SceneWaterPressure sceneWaterPressure(String sceneType);

    //水量排行
    List<SceneWaterAmount> sceneWaterAmounts();

    //对比曲线图
    List<WaterSupplyChart> waterSupplyCharts(String sceneTypeName);

    //对比曲线图当月
    List<WaterSupplyChart> waterSupplyChartsForCurrentMonth(String sceneTypeName,Long sceneId);

    List<WaterSupplyChart>  waterSupplyChartsByMonth(String sceneTypeName, Integer companyOrgId);

    Map<Integer, MonitorDataEntity> getIntegerMonitorDataEntityMap(LoginUser loginUser);
    BigDecimal getDeviceAttributeValue(String deviceCode,Long attributeId);

    /**
     *
     * @param companyOrgId 公司id
     * @param sceneId 场景类型
     * @param sceneTypeName 场景类型
     * @param parmType  标记值
     * @param searchType 查询类型：1日 2月 3年
     * @return
     */
    BigDecimal getAmountCount(Integer companyOrgId, Integer sceneId, String sceneTypeName, Integer parmType, Integer searchType);
    /**
     *
     * @param companyOrgId 公司id
     * @param sceneId 场景类型
     * @param sceneTypeName 场景类型
     * @param parmType  标记值
     * @param searchType 查询类型：1日 2月 3年
     * @return
     */
    Date getLastCollectTime(Integer companyOrgId, Integer sceneId, String sceneTypeName, Integer parmType, Integer searchType);

    /**
     * 获取用水量
     * @param companyOrgId
     * @param searchType
     * @return 查询类型：1月 2年
     */
    BigDecimal getUseAmount(Integer companyOrgId,Integer searchType);
}




