package com.huatek.busi.service;

import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;

import com.github.pagehelper.PageInfo;
import com.huatek.busi.dto.BusiEqmWarningDto;
import com.huatek.busi.dto.EquipmentInfoDto;
import com.huatek.busi.entity.BusiEqmWarning;
import com.huatek.busi.vo.BusiEqmWarningVo;
import com.huatek.busi.vo.warning.BusiHomePageWarningVo;

/**
 * 设备预警表 Service
 *
 * @author anker_cheng
 * @date Jun 26, 2019 3:31:53 PM
 */
public interface BusiEqmWarningService {

    /**
     * 保存
     *
     * @param busiEqmWarning
     * @return
     */
    int save(BusiEqmWarning busiEqmWarning);

    BusiEqmWarning saveBusiEqmWarning(EquipmentInfoDto equipmentInfo, String eqType, String gzType, String cacMonitorTypeCode,
        LocalDateTime warningTime, String warningMsg,String warningFlag);

    BusiEqmWarning saveBusiEqmCableWarning(EquipmentInfoDto equipmentInfo, String eqType, String gzType, String cacMonitorTypeCode,
                                      LocalDateTime warningTime, String warningMsg,String warningFlag,String runState);

    int saveBusiEqmWarningInfo(BusiEqmWarning busiEqmWarning, String warningInfo);

    /**
     * 分页查找查找 设备预警表
     *
     * @param busiEqmWarningDto
     *            设备预警表Dto
     * @return PageInfo<BusiEqmWarningVo> 设备预警表List
     */
    PageInfo<BusiEqmWarningVo> findBusiEqmWarningPage(BusiEqmWarningDto busiEqmWarningDto);

    /**
     * 分页查找查找 设备预警表
     *
     * @param busiEqmWarningDto
     *            设备预警表Dto
     * @return PageInfo<BusiEqmWarningVo> 设备预警表List
     */
    PageInfo<BusiEqmWarningVo> queryThresholdList(BusiEqmWarningDto busiEqmWarningDto);


    /**
     * 获取告警信息
     * @param busiEqmWarningDto
     * @return
     */
    List<BusiEqmWarningVo> findBusiEqmWarningList(BusiEqmWarningDto busiEqmWarningDto);


    /**
     * 故障处理
     *
     * @param token
     *            token
     * @param warningIds
     *            故障ID数组
     * @param warningType
     *            故障类型
     * @param dealMsg
     *            处理结果
     */
    void doDeal(String token, List<String> warningIds, String warningType, String dealMsg);

    /**
     * 故障转检修
     *
     * @param token
     *            token
     * @param warningIds
     *            故障ID数组
     * @param dealMsg
     *            处理结果
     */
    void toRepair(String token, List<String> warningIds, String dealMsg);

    /**
     * 一键清除
     * @param token
     * @param dto
     * @return
     */
    Map<String, Object> dowholeDeal(String token,BusiEqmWarningDto dto);

    /**
     * 单个告警处理
     * @param token
     * @param dto
     * @return
     */
    Map<String, Object> dosingleDeal(String token,BusiEqmWarningDto dto);

    /**
     * 按时间获取最近的告警列表
     *
     * @param busiEqmWarningDto
     *            BusiEqmWarningDto
     * @return 告警列表
     */
    PageInfo<BusiHomePageWarningVo> findCurrentWarningList(BusiEqmWarningDto busiEqmWarningDto);


    PageInfo<BusiHomePageWarningVo> findCurrentWarningBySensorCodeList(BusiEqmWarningDto busiEqmWarningDto);



    /**
     * 统计告警次数
     *
     * @param param
     * @return
     */
    Integer getBusiEqmWarningCount(Map<String, Object> param);

    /**
     * 统计sensor误报率
     *
     * @param sensorCode
     *            传感器编码
     * @param startTime
     *            开始时间
     * @param endTime
     *            结束时间
     * @return 误报率格式化后字符串（没带%，但是数值已经乘100）
     */
    String getFalseAlarmRateBySensor(String sensorCode, LocalDateTime startTime, LocalDateTime endTime);

    /**
     * 统计主设备误报率
     *
     * @param mainTreeId
     *            站点设备树ID
     * @param startTime
     *            开始时间
     * @param endTime
     *            结束时间
     * @return 误报率格式化后字符串（没带%，但是数值已经乘100）
     */
    String getFalseAlarmRateByMainTreeId(String mainTreeId, LocalDateTime startTime, LocalDateTime endTime);
//
//    /**
//     * 获取误报率
//     *
//     * @param param
//     *            参数
//     * @return 误报率百分比
//     */
//    String getFalseAlarmRate(Map<String, Object> param);

    /**
     * 根据告警ID集合查询故障单是否处理
     * @param warningIds
     * @return
     */
    List<BusiEqmWarning> isFinishedEqmMalfunction(List<String> warningIds);

    BusiEqmWarningVo findBusiEqmWarningById(String id);

    boolean testWarringAdd(BusiEqmWarningDto busiEqmWarningDto);

    boolean warringEvaluating(String eqType,String gzType,String warningMsg,String mainTreeId,String sensorName);

}
