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;

/**
 * <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);

    /**
     * 根据闸井编号查询闸井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);

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

    /**
     * 根据所属派出所统计井数量
     * @param pid
     * @param dataScope
     * @return
     */
    List<WellDeptStaticsDto> wellStaticsByDept(Long pid, DataScope dataScope);

    /**
     * 按照所属分局统计井数量
     * @param dataScope
     * @return
     */
    List<WellParentDeptStaticsDto> wellStaticsByParentDept();


    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);
}
