package com.xzzn.ems.service;

import com.xzzn.ems.domain.EmsAlarmRecords;
import com.xzzn.ems.domain.vo.AlarmRecordListRequestVo;
import com.xzzn.ems.domain.vo.AlarmRecordListResponseVo;

import java.util.List;

/**
 * 告警记录Service接口
 *
 * @author xzzn
 * @date 2025-06-29
 */
public interface IEmsAlarmRecordsService
{
    /**
     * 查询告警记录
     *
     * @param id 告警记录主键
     * @return 告警记录
     */
    public EmsAlarmRecords selectEmsAlarmRecordsById(Long id);

    /**
     * 查询告警记录列表
     *
     * @param emsAlarmRecords 告警记录
     * @return 告警记录集合
     */
    public List<EmsAlarmRecords> selectEmsAlarmRecordsList(EmsAlarmRecords emsAlarmRecords);

    /**
     * 新增告警记录
     *
     * @param emsAlarmRecords 告警记录
     * @return 结果
     */
    public int insertEmsAlarmRecords(EmsAlarmRecords emsAlarmRecords);

    /**
     * 修改告警记录
     *
     * @param emsAlarmRecords 告警记录
     * @return 结果
     */
    public int updateEmsAlarmRecords(EmsAlarmRecords emsAlarmRecords);

    /**
     * 批量删除告警记录
     *
     * @param ids 需要删除的告警记录主键集合
     * @return 结果
     */
    public int deleteEmsAlarmRecordsByIds(Long[] ids);

    /**
     * 删除告警记录信息
     *
     * @param id 告警记录主键
     * @return 结果
     */
    public int deleteEmsAlarmRecordsById(Long id);

    /**
     * 获取故障告警列表
     * @param requestVo
     * @return
     */
    public List<AlarmRecordListResponseVo> getAlarmRecordDetailList(AlarmRecordListRequestVo requestVo);

    /**
     * 生产工单号并设置告警处理中
     *
     * @param id
     * @param userId
     * @return
     */
    public String createTicketNo(Long id, Long userId);

    /**
     * 关闭告警并设置为已处理
     *
     * @param id 告警ID
     * @param userId 用户ID
     * @return 处理结果
     */
    public String closeAlarm(Long id, Long userId);
    // 订阅失败-增加告警
    public void addSubFailedAlarmRecord(String topic);
    // 订阅成功-处理告警
    public void checkFailedRecord(String topic);

    // topic 内没有数据，按照设备维度告警
    public void addEmptyDataAlarmRecord(String siteId, String deviceId);

    public void deleteEmptyDataAlarmRecord(String siteId, String deviceId);

    // 告警字段和告警信息
    public void initAlarmMatchInfo();

    // 获取所有没有处理完成的告警记录
    public List<EmsAlarmRecords> getAllUnfinishedRecords(List<String> needUpdateKeys, String siteId, String deviceId);

    // 批量处理告警数据
    public void batchProcessAlarmRecords(List<EmsAlarmRecords> recordsList);

    // 根据site_id和deviceId更新对应的redis
    public void updateRedisAlarmRecords(String siteId, String deviceId);

    // 处理本地端同步的保护策略告警信息
    public void dealSyncData(String content, String operateType);

    public void addDeviceOfflineRecord(String siteId, String deviceNumber);

    public void deleteDeviceOfflineRecord(String siteId, String deviceNumber);
}
