package com.ruoyi.ems.service;

import com.ruoyi.ems.domain.MeterDevice;
import com.ruoyi.ems.enums.MeterObjType;
import com.ruoyi.ems.model.QueryDevice;

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

/**
 * 计量设备Service接口
 *
 * @author ruoyi
 * @date 2024-08-08
 */
public interface IMeterDeviceService {
    /**
     * 查询计量设备
     *
     * @param id 计量设备主键
     * @return 计量设备
     */
    MeterDevice selectMeterDeviceById(Long id);

    /**
     * 查询计量设备
     *
     * @param deviceCode 设备code
     * @return 计量设备
     */
    MeterDevice selectMeterDeviceByCode(String deviceCode);

    /**
     * 查询计量设备列表
     *
     * @param queryDevice 计量设备
     * @return 计量设备集合
     */
    List<MeterDevice> selectMeterDeviceList(QueryDevice queryDevice);

    /**
     * 根据标签查询计量设备
     * @return 计量设备集合
     */
    List<MeterDevice> selectMeterDevByTag(String tagCode, QueryDevice queryDevice);

    /**
     * 查询计量设备列表
     *
     * @param deviceModel 模型编码
     * @return 计量设备集合
     */
    List<MeterDevice> selectByModel(String deviceModel);

    /**
     * 查询区域计量表计
     *
     * @param areaCode 区域代码
     * @param meterCls 计量对象分类
     * @param colMode  采集方式
     * @param objType  对象类型
     * @param objCode  对象类型
     * @return 结果
     */
    List<MeterDevice> selectMeterDeviceByObj(String areaCode, Integer meterCls, Integer colMode, MeterObjType objType,
        String objCode);

    /**
     * 新增计量设备
     *
     * @param meterDevice 计量设备
     * @return 结果
     */
    int insertMeterDevice(MeterDevice meterDevice);

    /**
     * 修改计量设备
     *
     * @param meterDevice 计量设备
     * @return 结果
     */
    int updateMeterDevice(MeterDevice meterDevice);

    /**
     * 批量删除计量设备
     *
     * @param ids 需要删除的计量设备主键集合
     * @return 结果
     */
    int deleteMeterDeviceByIds(Long[] ids);

    /**
     * 删除计量设备信息
     *
     * @param id 计量设备主键
     * @return 结果
     */
    int deleteMeterDeviceById(Long id);

    Map<String, Integer> cntMeterDevice(String areaCode);
}
