From d4020168658efdee89a633083cd9c14b06c4d863 Mon Sep 17 00:00:00 2001 From: zhangf <1603559716@qq.com> Date: 星期三, 11 九月 2024 17:09:10 +0800 Subject: [PATCH] 修改消息推送时间间隔 --- src/main/java/com/gkhy/fourierSpecialGasMonitor/service/impl/DataReceiveServiceImpl.java | 58 ++++++++++++++++++++++++++++++++++++++++------------------ 1 files changed, 40 insertions(+), 18 deletions(-) diff --git a/src/main/java/com/gkhy/fourierSpecialGasMonitor/service/impl/DataReceiveServiceImpl.java b/src/main/java/com/gkhy/fourierSpecialGasMonitor/service/impl/DataReceiveServiceImpl.java index 6890cd6..4eb1eb3 100644 --- a/src/main/java/com/gkhy/fourierSpecialGasMonitor/service/impl/DataReceiveServiceImpl.java +++ b/src/main/java/com/gkhy/fourierSpecialGasMonitor/service/impl/DataReceiveServiceImpl.java @@ -5,6 +5,7 @@ import com.gkhy.fourierSpecialGasMonitor.commons.domain.Result; import com.gkhy.fourierSpecialGasMonitor.commons.enums.ForeignResultCode; import com.gkhy.fourierSpecialGasMonitor.commons.enums.ResultCode; +import com.gkhy.fourierSpecialGasMonitor.commons.enums.SystemCacheKeyEnum; import com.gkhy.fourierSpecialGasMonitor.commons.exception.DataReceiveException; import com.gkhy.fourierSpecialGasMonitor.decorator.WarningThresholdUpdateEvent; import com.gkhy.fourierSpecialGasMonitor.entity.*; @@ -40,10 +41,7 @@ import java.text.MessageFormat; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.concurrent.locks.ReentrantLock; import java.util.stream.Collectors; @@ -115,8 +113,13 @@ private static final String warnContentFormat = "【气体监测预警提示】{0} {1}气体浓度连续超标系统判断为{2},请相关负责人及时检查处置。"; + private static final String deviceExcLogFormat = "【设备预警提示】{0} 硬件设备离线。"; + + private static final DateTimeFormatter deviceExcLogFormatter = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH:mm:ss"); + private static final DateTimeFormatter warnLogFormatter = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH:mm:ss"); + private static final String[] DEVICE_EXC_RECEIVER = {"17625323889","18019908965","18899396560"}; @PostConstruct public void init() { @@ -168,6 +171,9 @@ return ForeignResult.success(); } + /** + * 设备预警 + * */ @Override public ForeignResult deviceMonitor(DeviceMonitorReqDTO reqDTO) { if (reqDTO == null) @@ -180,7 +186,7 @@ throw new DataReceiveException(this.getClass(), ForeignResultCode.PARAM_ERROR_NULL.getCode(),"通量数据状态不能为空"); Boolean push = false; List<String> descs = new ArrayList<>(); - if (reqDTO.getHardwareState().size() > 1){ + if (!(reqDTO.getHardwareState().size() == 1 && reqDTO.getHardwareState().get(0) == 0)){ push = true; for (int i = 0; i < reqDTO.getHardwareState().size(); i++) { descs.add(HardwareStateEnum.getValue(reqDTO.getHardwareState().get(i))); @@ -195,31 +201,45 @@ descs.add(GasFluxStateEnum.INVERSION_FAILED_10_MINUTES_NO_DATA.getDesc()); } String message = JSON.toJSONString(reqDTO); - //todo 暂时改为实时推送给前端 + //暂时改为实时推送给前端 try { GasDeviceExcWebsocketServer.sendInfo(message,null); } catch (IOException e) { logger.info("【警告】设备异常提醒推送>>>>>>>>>>>>>>>>>>失败"); } if (push){ - //todo 线上环境还是异常才向前端推送 - //String message = JSON.toJSONString(reqDTO); - //try { - // GasDeviceExcWebsocketServer.sendInfo(message,null); - //} catch (IOException e) { - // logger.info("【警告】设备异常提醒推送>>>>>>>>>>>>>>>>>>失败"); - //} + DeviceExceptionLog lastLog = deviceExceptionLogService.getLastLog(); + LocalDateTime now = LocalDateTime.now(); + if (lastLog == null || now.compareTo(lastLog.getTime().plusHours(1)) >= 0) { + Map<String, String> mesMap = new HashMap<>(); + mesMap.put("message","数据异常,无法进行监测"); + mesMap.put(" level","设备离线"); // todo + List<String> deviceExcReceiver = Arrays.asList(DEVICE_EXC_RECEIVER); + if (!CollectionUtils.isEmpty(deviceExcReceiver)) { + List<String> distinctPhone = deviceExcReceiver.stream().distinct().collect(Collectors.toList()); + logger.info("【气体浓度异常短信发送】-----发送内容:" + "克拉玛依富城数据异常,无法进行监测 气体浓度连续超标,系统判断为设备离线,请相关负责人及时检查处置。" + + " 发送时间: " + LocalDateTime.now()+ " 接收人手机号:" + distinctPhone); + if (!org.springframework.util.StringUtils.isEmpty(smsSendEnabledStatus) && "true".equals(smsSendEnabledStatus)) { + sendMessageUtil.sendMessageCheck(deviceExcReceiver.toArray(new String[deviceExcReceiver.size()]), mesMap); + } + } + } String execInfo = JSON.toJSONString(descs); logger.info("【警告】设备异常,异常原因: "+ execInfo); DeviceExceptionLog log = new DeviceExceptionLog(); - log.setTime(LocalDateTime.now()); + String content = MessageFormat.format(deviceExcLogFormat,deviceExcLogFormatter.format(now)); + log.setContent(content); + log.setTime(now); log.setExecDesc(execInfo); DeviceExceptionLog save = deviceExceptionLogService.save(log); - if (save == null) + if (save == null) { logger.info("【警告】设备异常日志保存>>>>>>>>>>>>>>>>>>失败"); + } + } return ForeignResult.success(); } + private void gasFluxDataCacheAndPush(){ LocalDateTime time = LocalDateTime.now(); @@ -254,7 +274,7 @@ private void execDataCountAndPush(UploadGasConcentrationReqDTO reqDto){ - RBucket<List<GasCategory>> bucket = redissonClient.getBucket("gas_category_cache_info"); + RBucket<List<GasCategory>> bucket = redissonClient.getBucket(SystemCacheKeyEnum.KEY_GAS_CATEGORY.getKey()); List<GasCategory> gasCategoryCache = bucket.get(); if (CollectionUtils.isEmpty(gasCategoryCache)){ gasCategoryCache = gasCategoryService.list(); @@ -309,6 +329,9 @@ } } + /** + * 气体数据--预警信息推送 + * */ private void warnLogGenerateAndExecPush(Integer warnThresholdEnumCode,GasCategory gasCategory,Double value){ if (gasCategory == null) throw new DataReceiveException(this.getClass(), ForeignResultCode.SYSTEM_ERROR_DATABASE_FAIL.getCode(),"该气体不存在于对照表"); @@ -353,8 +376,7 @@ throw new DataReceiveException(this.getClass(), ForeignResultCode.SYSTEM_ERROR_DATABASE_FAIL.getCode(),"预警异常短信接收人保存失败"); Map<String, String> mesMap = new HashMap<>(); mesMap.put("message",warnTime+" "+gasCategory.getName()); - mesMap.put("level",warnThresholdName); - //todo + mesMap.put(" level",warnThresholdName); if (!CollectionUtils.isEmpty(phone)) { List<String> distinctPhone = phone.stream().distinct().collect(Collectors.toList()); logger.info("【气体浓度异常短信发送】-----发送内容:" + content + " 发送时间: " + now + " 接收人手机号:" + distinctPhone); -- Gitblit v1.9.2