package com.yfd.platform.modules.patroltask.service;

import cn.hutool.json.JSONObject;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.yfd.platform.modules.patroltask.domain.AlarmLog;
import com.yfd.platform.modules.patroltask.domain.TaskResult;

import java.io.UnsupportedEncodingException;
import java.util.List;
import java.util.Map;

/**
 * <p>
 * 告警日志表 服务类
 * </p>
 *
 *
 * @since 2023-05-03
 */
public interface IAlarmLogService extends IService<AlarmLog> {

  void sendNonCoherentMsg1(TaskResult taskResult, double alertValue) throws Exception;

  boolean updateTaskResult(JSONObject jsonObject) throws Exception;

  //静默任务返回报警记录
  boolean createAlarm(JSONObject jsonObject) throws Exception;

  /**********************************
   * 用途说明: 静默监视查询
   * 参数说明 stationId
   * 参数说明 areaId
   * 参数说明 patrolDeviceName
   * 参数说明 monitorType
   * 返回值说明: java.util.List<java.util.Map<java.lang.String,java.lang.Object>>
   ***********************************/
  Page<Map<String, Object>> getAlarmListByType(Page<Map<String, Object>> page, String stationId, String areaId,
                                               String patrolDeviceName, String monitorType);

  /**********************************
  * 用途说明: 根据设备编号查询告警列表
  * 参数说明 page
  * 参数说明 patrolDeviceCode
  * 参数说明 monitorType
  * 参数说明 startDate
  * 参数说明 endDate
  * 返回值说明: com.baomidou.mybatisplus.extension.plugins.pagination.Page<java.util.Map<java.lang.String,java.lang.Object>>
  ***********************************/
  Page<Map<String, Object>> getAlarmListPage(Page<Map<String, Object>> page, String patrolDeviceCode, String monitorType, String startDate, String endDate);

  Page<Map<String, Object>> getAlarmLogPage(Page<Map<String, Object>> page, String stationCode, String taskAlarmType,
                                            String alarmLevel, String checkFlag, String alarmSourceType,String startDate, String endDate);

  boolean setAlarmLogStatus(AlarmLog alarmLog);

  /**********************************
  * 用途说明: 根据告警信息ID查询详情
  * 参数说明 id 告警id
  * 返回值说明: java.util.Map<java.lang.String,java.lang.Object>
  ***********************************/
  Map<String, Object> getAlarmLogById(String id);

  boolean updateDeviceResult(JSONObject jsonObject) throws Exception;

  /**********************************
  * 用途说明: 告警准确率统计
  * 参数说明 stationId 变电站Id
  * 返回值说明: java.util.Map<java.lang.String,java.lang.Object>
  ***********************************/
    Map<String, Object> getConfirmationRate(String stationId);

    /**********************************
    * 用途说明: 查询报警信息
    * 参数说明 stationId
    * 返回值说明: java.util.List<java.util.Map<java.lang.String,java.lang.Object>>
    ***********************************/
    List<Map<String, Object>> getAlarmLogList(String stationId);

    List<AlarmLog> getNotCheckAlarmCount(String stationId);


  /**********************************
   * 用途说明: 生成报警记录
   * 参数说明
   * from  'IEC104','IEC61850'
   * type  'yx','yc'
   * slave_ip   服务器IP
   * address   地址
   * value         值
   * 返回值说明: 无返回值
   ***********************************/
  void doAlaramRecord(String from,String type,String slaveIp,String address,String value);

}
