package com.ruoyi.business.service;

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

import com.ruoyi.business.domain.HwMonitorUnit;
import com.ruoyi.business.domain.VO.*;
import com.ruoyi.common.core.domain.R;


/**
 * 监控单元Service接口
 *
 * @author YINQ
 * @date 2023-08-31
 */
public interface IHwMonitorUnitService
{
    /**
     * 查询监控单元
     *
     * @param monitorUnitId 监控单元主键
     * @return 监控单元
     */
    public HwMonitorUnit selectHwMonitorUnitByMonitorUnitId(Long monitorUnitId);
    /**
     * 查询区域数量站场景区总数百分比
     * */
    public List<HwMonitorUnitVo> selectMonitorPercentage();
    /**
     * 	展示总的设备数量和总的监控单元数量（最低级的监控单元）
     * */
    public AllNumsVo selectAllNums();
    public List<AllNumsVo> selectSenceAllNums();

    /**
     * 分页获取最子集监控单元列表
     * */
    public List<HwMonitorUnit> selectLimitSubMonitorUnit();



    /**
     * 监控单元报警统计
     * */
    public  List<AlarmStatsVo> selectAlarmStats();
    /**
     * 查询监控单元列表
     *
     * @param hwMonitorUnit 监控单元
     * @return 监控单元集合
     */
    public List<HwMonitorUnit> selectHwMonitorUnitList(HwMonitorUnit hwMonitorUnit);

    /**
     * 获取最子级监控单元数量、设备数量和在线设备数量
     * */
    public SubDeviceSumVo selectSubDeviceSum(Long sceneId);
    /**
     * 按电子围栏定位显示其下设备数量，以及报警的设备数量。
     * */
    public Integer selectElectronicNum(Long sceneId);
    /**
     * 树状获取监控单元列表
     * */
    public List<HwMonitorUnit> selectTreeList(List<HwMonitorUnit> hwMonitorUnits);
    /**
     * 获取监控单元详细信息
     * */
    public HwMonitorUnit selectHwmonitorUnitSub(Long monitorUnitId);
    /**
     * 通过tdengine获取设备运行情况
     *
     * @return*/
    public int[] selectTdengine(String beginTime, String endTime, Long sceneId);
     /**
      * 设备汇总
      *
      * @return*/
     public R<Map<String, Map<String, Object>>> selectLatestDataByTags(Long monitorUnitId);


      /**
     * 新增监控单元
     *
     * @param hwMonitorUnit 监控单元
     * @return 结果
     */
    public int insertHwMonitorUnit(HwMonitorUnit hwMonitorUnit);

    /**
     * 修改监控单元
     *
     * @param hwMonitorUnit 监控单元
     * @return 结果
     */
    public int updateHwMonitorUnit(HwMonitorUnit hwMonitorUnit);

    /**
     * 批量删除监控单元
     *
     * @param monitorUnitIds 需要删除的监控单元主键集合
     * @return 结果
     */
    public int deleteHwMonitorUnitByMonitorUnitIds(Long[] monitorUnitIds);

    /**
     * 删除监控单元信息
     *
     * @param monitorUnitId 监控单元主键
     * @return 结果
     */
    public int deleteHwMonitorUnitByMonitorUnitId(Long monitorUnitId);
}
