package com.casic.missiles.modular.system.service;

import com.baomidou.mybatisplus.plugins.Page;
import com.baomidou.mybatisplus.service.IService;
import com.casic.missiles.core.datascope.DataScope;
import com.casic.missiles.modular.system.dto.*;
import com.casic.missiles.modular.system.model.Device;

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

/**
 * <p>
 * 设备表 服务类
 * </p>
 *
 * @author lwh123
 * @since 2019-05-23
 */
public interface IDeviceService extends IService<Device> {

    /**
     * 根据条件分页查询设备列表
     *
     * @param dataScope  数据权限集合
     * @param page       分页参数
     * @param deviceType 设备类型
     * @param deptid     组织ID
     * @param beginTime  设备安装开始时间
     * @param endTime    设备安装结束时间
     * @return 设备列表
     */
    List<DeviceDto> selectDataScopePage(DataScope dataScope, Page<DeviceDto> page, String deviceType, String deptid, String beginTime, String endTime, String keywords,String isOnline, String areaId);

    /**
     * 根据闸井编号查询闸井ID
     *
     * @param wellCode
     * @return
     */
    DeviceWellDto selectWellIdByCode(String wellCode);


    Device getDeviceByDevCode(String devCode);

    DeviceConcentratorDto selectDeviceConcentorByCode(String concenCode);

    List<String> addDeviceBatch(List<Device> results);

    /**
     * 根据条件检索井盖监测数据列表
     *
     * @param dataScope 数据权限
     * @param page      分页查询
     * @param deptid    组织ID
     * @param beginTime 起始时间
     * @param endTime   结束时间
     * @param keywords  关键字
     * @return
     */
    List<DeviceMonitorDataDto> selectWellDataScopePage(DataScope dataScope, Page<DeviceMonitorDataDto> page, String deptid, String beginTime, String endTime, String keywords);

    /**
     * 根据检索条件查询液位检测数据
     *
     * @param dataScope 数据权限
     * @param page      分页参数
     * @param deptid    组织id
     * @param beginTime
     * @param endTime
     * @param keywords
     * @return
     */
    List<DeviceMonitorDataDto> selectLiquidDataScopePage(DataScope dataScope, Page<DeviceMonitorDataDto> page, String deptid, String beginTime, String endTime, String keywords);

    /**
     * 燃气数据查询
     */
    List<Map<String,Object>> selectGasDataScopePage(DataScope dataScope, Page<Map<String,Object>> page, String deptid, String beginTime, String endTime, String keywords);
    /**
     * 管盯数据查询
     */
    List<Map<String,Object>> selectTubeDataScopePage(DataScope dataScope, Page<Map<String,Object>> page, String deptid, String beginTime, String endTime, String keywords);

    /**
     * 有害气体数据查询
     */
    List<Map<String,Object>> selectHarmfulDataScopePage(DataScope dataScope, Page<Map<String,Object>> page, String deptid, String beginTime, String endTime, String keywords);

    /**
     * 温湿度数据查询
     */
    List<Map<String,Object>> selectTempDataScopePage(DataScope dataScope, Page<Map<String,Object>> page, String deptid, String beginTime, String endTime, String keywords);

    /**
     * 温度压力数据查询
     */
    List<Map<String,Object>> selectTempPressDataScopePage(DataScope dataScope, Page<Map<String,Object>> page, String deptid, String beginTime, String endTime, String keywords);


    /**
     * 开挖监测仪数据查询
     */
    List<Map<String,Object>> selectDigDataScopePage(DataScope dataScope, Page<Map<String,Object>> page, String deptid, String beginTime, String endTime, String keywords);

    /**
     * 井盖定位监测仪数据查询
     */
    List<Map<String,Object>> selectWellLocDataScopePage(DataScope dataScope, Page<Map<String,Object>> page, String deptid, String beginTime, String endTime, String keywords);

    /**
     * 噪声记录仪数据查询
     */
    List<Map<String,Object>> selectNoiseDataScopePage(DataScope dataScope, Page<Map<String,Object>> page, String deptid, String beginTime, String endTime, String keywords);

    /**
     * 根据权属单位统计设备数及告警次数
     *
     * @param deviceType 设备类型
     * @param beginTime  起止时间
     * @param endTime    结束时间
     * @param dataScope  数据权限
     * @return
     */
    List<AlarmDeptStaticsDto> alarmsStaticsByDept(Long deviceType, String beginTime, String endTime, DataScope dataScope, Long deptId);

    void deleteByIds(List<Long> ids);

    /**
     * 根据设备配置状态获取设备选择列表
     * @param dataScope 数据权限
     * @param deviceType 设备类型
     * @param configStatus 配置状态
     * @return
     */
    List<DeviceCodeSelectDto> selectDevicesByConfig(DataScope dataScope, String deviceType, String configStatus);

    void registerGeTui(Long id, String clientid);

    String getAreaFullNameById(String area);

    List<Map<String,Object>> selectDataList(DataScope dataScope, String wellCode, String watchType, String beginTime, String endTime);

    /**
     * 燃气数据查询
     */
    List<Map<String,Object>> selectGasLiquidDataScopePage(DataScope dataScope, Page<Map<String, Object>> page, String sensorType, String deptid, String beginTime, String endTime, String keywords);

    Map<String,Object> selectWaterMeterDay(String devcode, String date);
    Map<String,Object> selectWaterMeterMonth(String devcode, String month);
    Map<String,Object> selectWaterMeterTotal(String devcode, String year);
    Map<String,Object> selectLatestWaterMeter(String devcode);
}
