package com.sooka.sponest.monitor.device.service;

import com.ruoyi.common.core.domain.R;
import com.ruoyi.system.api.domain.SysDept;
import com.sooka.sponest.monitor.aidevicedept.domain.CenterdataTAidevicedept;
import com.sooka.sponest.monitor.device.domain.*;

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

/**
 * 监测设备Service接口
 *
 * @author ruoyi
 * @date 2023-03-14
 */
public interface ICentermonitorTMonitoringDeviceService
{
    /**
     * 查询监测设备
     *
     * @param id 监测设备主键
     * @return 监测设备
     */
     CentermonitorTMonitoringDevice selectCentermonitorTMonitoringDeviceById(String id);

    //水流速
     CentermonitorTMonitoringDataWaterVelocity selectWaterVelocityCentermonitorByST(String id);
    //土壤墒情
     CentermonitorTMonitoringDataSoilMoisture selectSoilMoistureCentermonitorByDeviceCode(String id);
    //大气
     CentermonitorTMonitoringDataAtmosphere selectAtmosphereCentermonitorByDeviceCode(String id);
    //水质
     CentermonitorTMonitoringDataWaterQuality selectWaterQualityCentermonitorByDeviceCode(String id);
    //水压
     CentermonitorTMonitoringDataWaterPressure selectWaterPressureCentermonitorByIMEI(String id);
    //病虫害
    //大气
     CentermonitorTMonitoringDataInsectPests selectInsectPestsCentermonitorByDeviceCode(String id);

    /**
     * 查询监测设备列表
     *
     * @param centermonitorTMonitoringDevice 监测设备
     * @return 监测设备集合
     */
     List<CentermonitorTMonitoringDevice> selectCentermonitorTMonitoringDeviceList(CentermonitorTMonitoringDevice centermonitorTMonitoringDevice);

    /**
     * 根据部门ID和工作状态查询传感器列表
     *
     * @param centermonitorTMonitoringDevice 传感器
     * @return 传感器集合
     */
     List<CentermonitorTMonitoringDevice> selectDeviceListByDeptIdAndWorkingStatus(CentermonitorTMonitoringDevice centermonitorTMonitoringDevice);

    /**
     * 查询监测设备列表(所有)
     *
     * @param centermonitorTMonitoringDevice 监测设备
     * @return 监测设备集合
     */
     List<CentermonitorTMonitoringDevice> selectCentermonitorTMonitoringDeviceListAll(CentermonitorTMonitoringDevice centermonitorTMonitoringDevice);

    /**
     * 新增监测设备
     *
     * @param centermonitorTMonitoringDevice 监测设备
     * @return 结果
     */
     int insertCentermonitorTMonitoringDevice(CentermonitorTMonitoringDevice centermonitorTMonitoringDevice);

    /**
     * 修改监测设备
     *
     * @param centermonitorTMonitoringDevice 监测设备
     * @return 结果
     */
     int updateCentermonitorTMonitoringDevice(CentermonitorTMonitoringDevice centermonitorTMonitoringDevice);


    /**
     * 批量删除监测设备
     *
     * @param ids 需要删除的监测设备主键集合
     * @return 结果
     */
     int deleteCentermonitorTMonitoringDeviceByIds(String[] ids);

    /**
     * 删除监测设备信息
     *
     * @param id 监测设备主键
     * @return 结果
     */
     int deleteCentermonitorTMonitoringDeviceById(String id);

    /**
     * 查询监测设备
     *
     * @param str 监测设备
     * @return 监测设备
     */
     List<CentermonitorTMonitoringDevice> selectListByDeptId(List<String> str);

    /**
     * 查询水流速传感器数据列表
     *
     * @param centermonitorTMonitoringDataWaterVelocity 水质传感器
     * @return 监测设备集合
     */
     List<CentermonitorTMonitoringDataWaterVelocity> selectWaterVelocityMonitoringData(CentermonitorTMonitoringDataWaterVelocity centermonitorTMonitoringDataWaterVelocity);

    /**
     * 查询水质传感器数据列表
     *
     * @param centermonitorTMonitoringDataWaterQuality 水质传感器
     * @return 监测设备集合
     */
     List<CentermonitorTMonitoringDataWaterQuality> selectWaterQualityMonitoringData(CentermonitorTMonitoringDataWaterQuality centermonitorTMonitoringDataWaterQuality);

    /**
     * 查询土壤墒情传感器数据列表
     *
     * @param centermonitorTMonitoringDataSoilMoisture 水质传感器
     * @return 监测设备集合
     */
     List<CentermonitorTMonitoringDataSoilMoisture> selectSoilMoistureMonitoringData(CentermonitorTMonitoringDataSoilMoisture centermonitorTMonitoringDataSoilMoisture);

    /**
     * 查询大气传感器数据列表
     *
     * @param centermonitorTMonitoringDataAtmosphere 水质传感器
     * @return 监测设备集合
     */
     List<CentermonitorTMonitoringDataAtmosphere> selectAtmosphereMonitoringData(CentermonitorTMonitoringDataAtmosphere centermonitorTMonitoringDataAtmosphere);

    /**
     * 查询水压传感器数据列表
     *
     * @param centermonitorTMonitoringDataWaterPressure 水压传感器
     * @return 监测设备集合
     */
     List<CentermonitorTMonitoringDataWaterPressure> selectWaterPressureMonitoringData(CentermonitorTMonitoringDataWaterPressure centermonitorTMonitoringDataWaterPressure);

    /**
     * 查询病虫害传感器数据列表
     *
     * @param centermonitorTMonitoringDataInsectPests 病虫害传感器
     * @return 监测设备集合
     */
     List<CentermonitorTMonitoringDataInsectPests> selectInsectPestsMonitoringData(CentermonitorTMonitoringDataInsectPests centermonitorTMonitoringDataInsectPests);

    /**
     * 查询部门管理列表
     *
     * @param centerdataTAidevicedept 部门管理列表
     * @return 监测设备集合
     */
     List<CenterdataTAidevicedept> selectDeptMonitoringData(CenterdataTAidevicedept centerdataTAidevicedept);

    /**
     * 按类型查询传感器设备编码数组
     * */
     List<Map<String,String>> selectDeviceCodeMap(CentermonitorTMonitoringDevice device);

    /**
     * 查询最新一条水质传感器监测数据 -- 根据设备编码数组
     */
     List<CentermonitorTMonitoringDataWaterQuality> selectWaterQualityDataByDeviceCodes(String[]  deviceCodes);

    /**
     * 查询最新一条土壤墒情传感器监测数据 -- 根据设备编码数组
     */
     List<CentermonitorTMonitoringDataSoilMoisture> selectSoilMoistureDataByDeviceCodes(String[]  deviceCodes);

    /**
     * 查询最新一条大气监测传感器监测数据 -- 根据设备编码数组
     */
     List<CentermonitorTMonitoringDataAtmosphere> selectAtmosphereDataByDeviceCodes(String[]  deviceCodes);

    /**
     * 查询最新一条水压监测传感器监测数据 -- 根据设备编码数组
     */
     List<CentermonitorTMonitoringDataWaterPressure> selectWaterPressureDataByDeviceCodes(String[]  deviceCodes);

    /**
     * 查询最新一条水流速传感器监测数据 -- 根据设备编码数组
     */
     List<CentermonitorTMonitoringDataWaterVelocity> selectWaterVelocityDataByDeviceCodes(String[]  deviceCodes);

    /**
     * 查询最新一条病虫害传感器监测数据 -- 根据设备编码数组
     */
     List<CentermonitorTMonitoringDataInsectPests> selectInsectPestsDataByDeviceCodes(String[]  deviceCodes);

    List<DeviceIoTEquipmentStatisticsVO> getIoTEquipmentStatistics(Long deptId);

    Map<String, List> getOnLineSensorStatistics(Long deptId);

    List<Map<String, List>> getOfflineReasonCountStatistics(List<SysDept> sysDepartments);

    /**
     * 在线设备分析
     */
    public Map<String, List> getDeviceAnalysis(Long deptId);

    /**
     * 设备故障分布
     */
    Map<String, List>  getFaultDistribution(Long deptId);

    /**
     * 采集数量分析
     */
    public Map<String, List> getSensorDataCount(Long deptId);

    /**
     * 物联广场右上角统计数
     */
    public R getDeviceSquareNumber(Long deptId);

    /**
     * 物联网中台统一入口
     */
    R getInternetOfThings(Long deptId);


    R getIoTEquipmentDetails(Long deptId,String deviceCode,String deviceType);

}
