package org.dromara.ems.record.mapper;

import org.dromara.ems.record.domain.EmsRecordAlarmData;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;

/**
 * 异常数据记录Mapper接口
 * 
 * @author Yinq
 * @date 2024-05-15
 */
public interface EmsRecordAlarmDataMapper 
{
    /**
     * 查询异常数据记录
     * 
     * @param objId 异常数据记录主键
     * @return 异常数据记录
     */
    public EmsRecordAlarmData selectEmsRecordAlarmDataByObjId(Long objId);

    /**
     * 查询异常数据记录列表
     * 
     * @param emsRecordAlarmData 异常数据记录
     * @return 异常数据记录集合
     */
    public List<EmsRecordAlarmData> selectEmsRecordAlarmDataList(EmsRecordAlarmData emsRecordAlarmData);

    /**
     * 新增异常数据记录
     * 
     * @param emsRecordAlarmData 异常数据记录
     * @return 结果
     */
    public int insertEmsRecordAlarmData(EmsRecordAlarmData emsRecordAlarmData);

    /**
     * 修改异常数据记录
     * 
     * @param emsRecordAlarmData 异常数据记录
     * @return 结果
     */
    public int updateEmsRecordAlarmData(EmsRecordAlarmData emsRecordAlarmData);

    /**
     * 删除异常数据记录
     * 
     * @param objId 异常数据记录主键
     * @return 结果
     */
    public int deleteEmsRecordAlarmDataByObjId(Long objId);

    /**
     * 批量删除异常数据记录
     * 
     * @param objIds 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteEmsRecordAlarmDataByObjIds(Long[] objIds);
    
    /**
     * 查询最近时间内的异常数据
     * 
     * @param startTime 开始时间
     * @return 异常数据列表
     */
    public List<EmsRecordAlarmData> selectRecentAlarmData(@Param("startTime") Date startTime);
    
    /**
     * 检查特定条件的异常数据是否已存在（精确去重）
     * 
     * @param monitorId 设备ID
     * @param cause 异常原因
     * @param startTime 采集时间开始
     * @param endTime 采集时间结束
     * @return 数量
     */
    public Integer checkDuplicateAlarmData(@Param("monitorId") String monitorId,
                                          @Param("cause") String cause,
                                          @Param("startTime") Date startTime,
                                          @Param("endTime") Date endTime);

    /**
     * 获取异常数据表总数（包含所有告警类型）
     */
    Integer getAlarmDataTotalCount();
}
