获取重要信息列表 - 基于时间筛选告警信息
/**
- 获取重要信息列表
- @param hour 小时数,可选参数
- @return API列表响应,包含AlarmInfo对象列表
*/
public ApiListResponse
importantInfoList(@ApiParam(value = '小时', required = false) @RequestParam(required = false) String hour) { int hourData = 8; // 如果传入的小时数不为空,则将其转换为整数 if (StringUtils.isNotBlank(hour)) { try { hourData = Integer.parseInt(hour); } catch (Exception ex) { ex.printStackTrace(); } } // 初始化告警信息列表和其他所需列表 List alarmInfos = new ArrayList<>(); List alarmInfoList = alarmInfoService.queryLatestAlarmGroupBy(); List relations = faultNormalRelationService.list(); List terminals = terminalService.list(); // 循环遍历终端列表和故障/正常关系列表 for (Terminal terminal : terminals) { for (FaultNormalRelation relation : relations) { // 获取当前终端的最后一条故障信息 AlarmInfo faultInfo = alarmInfoList.stream().filter(m -> m.getTerminalName().equalsIgnoreCase(relation.getFaultCode()) && m.getTerminalId().equals(terminal.getId())).findFirst().orElse(null); // 获取当前终端的最后一条正常信息 AlarmInfo normalInfo = alarmInfoList.stream().filter(m -> m.getTerminalName().equalsIgnoreCase(relation.getRecoverCode()) && m.getTerminalId().equals(terminal.getId())).findFirst().orElse(null); if (faultInfo != null) { if (normalInfo != null) { // 如果存在正常信息 if (faultInfo.getCreateTime().getTime() > normalInfo.getCreateTime().getTime()) { // 获取正常信息后第一条故障信息 FaultInfo fault = faultInfoService.selectByCode(relation.getFaultCode().substring(2)); AlarmInfo firstFaultInfo = alarmInfoService.lambdaQuery().eq(AlarmInfo::getTerminalId, terminal.getId()).eq(AlarmInfo::getFaultInfoId, fault.getId()).ge(AlarmInfo::getCreateTime, normalInfo.getCreateTime()).orderByAsc(AlarmInfo::getCreateTime).last('limit 1').one(); // 计算正常后第一条故障信息距离现在的时间是否大于等于传入的小时数,若是则添加到告警信息列表 if (DateUtil.between(new Date(), firstFaultInfo.getCreateTime(), DateUnit.HOUR) >= hourData) { alarmInfos.add(firstFaultInfo); } } } else { // 如果不存在正常信息,则查找第一条故障信息 FaultInfo fault = faultInfoService.selectByCode(relation.getFaultCode().substring(2)); AlarmInfo firstFaultInfo = alarmInfoService.lambdaQuery().eq(AlarmInfo::getTerminalId, terminal.getId()).eq(AlarmInfo::getFaultInfoId, fault.getId()).orderByAsc(AlarmInfo::getCreateTime).last('limit 1').one(); // 计算第一条故障信息距离现在的时间是否大于等于传入的小时数,若是则添加到告警信息列表 if (DateUtil.between(new Date(), firstFaultInfo.getCreateTime(), DateUnit.HOUR) >= hourData) { alarmInfos.add(firstFaultInfo); } } } } } // 返回API列表响应,包含告警信息列表 return ApiListResponse.success(alarmInfos); }
原文地址: https://www.cveoy.top/t/topic/m8WT 著作权归作者所有。请勿转载和采集!