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

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.casic.missiles.core.datascope.DataScope;
import com.casic.missiles.model.response.ResponseData;
import com.casic.missiles.modular.system.dto.*;
import com.casic.missiles.modular.system.dto.ExcelModel.*;
import com.casic.missiles.modular.system.dto.statistic.DataH2s;
import com.casic.missiles.modular.system.model.BusWellInfo;

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

/**
 * 数据统计服务接口
 *
 * @author lwh
 */
public interface IDataAnalysisService extends IService<BusWellInfo> {
    /**
     * 获取告警闸井列表
     * @param dataScope 数据权限
     * @param keywords 关键字
     * @param wellType 井列表
     * @param deptid 组织id
     * @return
     */
    List<BusWellInfoDto> getAlarmWellList(DataScope dataScope, String keywords, String wellType, String deptid);

    /**
     * 获取不告警井列表信息
     * @param dataScope  数据权限
     * @param keywords 关键字
     * @param wellType 井类型
     * @param deptid 组织id
     * @return
     */
    List<BusWellInfoDto> getNotAlarmWellList(DataScope dataScope, String keywords, String wellType, String deptid);

    /**
     * 设备数据查询接口
     * @param devTypename 设备类型
     * @param devcode 设备编码
     * @param status 设备状态
     * @return 设备监测数据
     */
    List<DeviceDataDto> getDeviceDatas(String devTypename, String devcode, String status);

    List<WatchDataDto> getWatchDatas(Long id);


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

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

    List<DataWellLiquidDto> getWellliquiddataList(DataScope dataScope, Page<DataWellLiquidDto> page, String deptid, String beginTime, String endTime, String keywords);
    /**
     * 燃气数据查询
     */
    List<DeviceDataExcelDto> selectGasDataScopePage(DataScope dataScope, Page<DeviceDataExcelDto> page, String deptid, String beginTime, String endTime, String keywords);
    /**
     * 管盯数据查询
     */
    List<DeviceDataExcelDto> selectTubeDataScopePage(DataScope dataScope, Page<DeviceDataExcelDto> page, String deptid, String beginTime, String endTime, String keywords);
    /**
     * 有害气体数据查询
     */
    List<HarmfulDataDto> selectHarmfulDataScopePage(DataScope dataScope, Page<HarmfulDataDto> page, String deptid, String beginTime, String endTime, String keywords);
    /**
     * 温湿度数据查询
     */
    List<TemhumDataDto> selectTempDataScopePage(DataScope dataScope, Page<TemhumDataDto> page, String deptid, String beginTime, String endTime, String keywords);
    /**
     * 温度压力数据查询
     */
    List<TemppressDataDto> selectTempPressDataScopePage(DataScope dataScope, Page<TemppressDataDto> page, String deptid, String beginTime, String endTime, String keywords);
    /**
     * 开挖监测仪数据查询
     */
    List<DigNoiseDataDto> selectDigDataScopePage(DataScope dataScope, Page<DigNoiseDataDto> page, String deptid, String beginTime, String endTime, String keywords);

    /**
     * 井盖定位监测仪数据查询
     */
    List<WellAppointDataDto> selectWellLocDataScopePage(DataScope dataScope, Page<WellAppointDataDto> page, String deptid, String beginTime, String endTime, String keywords);
    /**
     * 噪声记录仪数据查询
     */
    List<DigNoiseDataDto> selectNoiseDataScopePage(DataScope dataScope, Page<DigNoiseDataDto> 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);

    List<GasLiquidDataExcelDto> selectGasLiquidDataScopePage(DataScope dataScope, Page<GasLiquidDataExcelDto> page, String sensorType, String deptid, String beginTime, String endTime, String keywords);

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

    ResponseData getHydrantlist(DataScope dataScope, Page<HydrantDataDto> page, String deptid, String beginTime, String endTime, String keywords);

    ResponseData getH2slist(DataScope dataScope, Page<H2SDataDto> page, String keywords, String beginTime, String endTime, String deptid);
}
