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.model.Device;
import org.apache.ibatis.annotations.Param;

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 deviceType
     * @param deptid
     * @param beginTime
     * @param endTime
     * @param keywords
     * @param isOnline
     * @return
     */
    List<DeviceDto> getDeviceList(DataScope dataScope, String deviceType, String deptid, String beginTime, String endTime, String keywords, String isOnline);

    /**
     * 根据条件分页查询设备列表
     *
     * @param dataScope  数据权限集合
     * @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);

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


    Device getDeviceByDevCode(String devCode);

    DeviceConcentratorDto selectDeviceConcentorByCode(String concenCode);

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


    void deleteByIds(List<Long> ids);
    ResponseData addDevice(Device  device);

    ResponseData offlineListPage(DataScope dataScope, Page<Map<String, Object>> page,
                                 String deviceCode, String deviceType);

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

    void registerGeTui(Long id, String clientid);

}
