package com.ruoyi.business.mapper;

import java.util.List;

import com.alibaba.druid.support.http.MonitorClientContextListener;
import com.ruoyi.business.domain.HwMonitorUnit;
import com.ruoyi.business.domain.HwScene;
import com.ruoyi.business.domain.VO.*;

/**
 * 监控单元Mapper接口
 *
 * @author YINQ
 * @date 2023-08-31
 */
public interface HwMonitorUnitMapper
{
    /**
     * 查询监控单元
     *
     * @param monitorUnitId 监控单元主键
     * @return 监控单元
     */
    public HwMonitorUnit selectHwMonitorUnitByMonitorUnitId(Long monitorUnitId);
    /**
     * 查询区域数量站场景区总数百分比(左上角)
     * */
    public List<HwMonitorUnitVo> selectMonitorPercentage();
    /**
     * 	展示总的设备数量和总的监控单元数量（最低级的监控单元）
     * */
    public List<AllNumsVo> selectAllNums();
    public List<AllNumsVo> selectsum();
    //查询id与name的结果集
    List<HwMonitorUnitVo> selectSceneNameById();
    Integer selectSubSetNums(Long sceneId);

    /**
     * 分页获取最子集监控单元列表
     * */
    public List<HwMonitorUnit> selectLimitSubMonitorUnit();
    Integer selectReleatedDeviceIdNums(Long deviceCode);
    Integer selectDeviceNums(Long sceneId);
    Integer selectSubDeviceSum(Long sceneId);

    /**
     * 监控单元报警统计
     * */
    public  List<AlarmStatsVo> selectAlarmStats(Long sceneId);
    /**
     * 获取最子级监控单元数量、设备数量和在线设备数量
     * */
    public List<SubDeviceSumVo> selectSubDeviceSum();
    /**
     * 按电子围栏定位显示其下设备数量，以及报警的设备数量。
     * */
    public List<ElectronicNumVo> selectElectronicNum(Long sceneId);
    //查询场景下电子围栏
    public List<Long> selectEleInScene(Long sceneId);
    public String selectEleType2(Long electronicFenceId);
    public String selectEleType3(Long sceneId);

    public Integer selectDeviceType2Nums(Long sceneId);

    /**
     * 查询监控单元列表
     *
     * @param hwMonitorUnit 监控单元
     * @return 监控单元集合
     */
    public List<HwMonitorUnit> selectHwMonitorUnitList(HwMonitorUnit hwMonitorUnit);
    /**
     * 树状获取监控单元列表
     * */
    //查询子集
    public List<HwMonitorUnit> selectHwMonitorUnitByParent(Long monitorUnitId);
    //查询最小单元的详细信息
    public List<HwMonitorUnit> selectHwmonitorUnitSub(Long monitorUnitId);
    //查询是否为最小单元
    public String selectHwMonitorUnitIsParent(Long monitorUnitId);

    public List<MonitorUnitNumVo> selectHaveEleDevice(Long sceneId);
    public List<MonitorUnitNumVo> selectMonitorUnitHaveEle(Long sceneId);
    /**
     * 新增监控单元
     *
     * @param hwMonitorUnit 监控单元
     * @return 结果
     */
    public int insertHwMonitorUnit(HwMonitorUnit hwMonitorUnit);

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

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

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

    /**
     * 查询监控单元列表join场景
     *
     * @param hwMonitorUnit 监控单元
     * @return 监控单元集合
     */
    public List<HwMonitorUnit> selectHwMonitorUnitListJoinScene(HwMonitorUnit hwMonitorUnit);

}