From 5eeac9f272d1228a328cdae46961834f168f5086 Mon Sep 17 00:00:00 2001 From: huangzhen <867217663@qq.com> Date: 星期四, 22 二月 2024 16:57:05 +0800 Subject: [PATCH] 增加设备异常短信接收人 --- src/main/java/com/gkhy/fourierSpecialGasMonitor/schedule/TestSchedule.java | 406 +++++++++++++++++++++++++------------------------- src/main/java/com/gkhy/fourierSpecialGasMonitor/service/impl/DataReceiveServiceImpl.java | 38 +++- src/main/java/com/gkhy/fourierSpecialGasMonitor/service/DeviceExceptionLogService.java | 3 src/main/java/com/gkhy/fourierSpecialGasMonitor/service/impl/DeviceExceptionLogServiceImpl.java | 5 src/main/java/com/gkhy/fourierSpecialGasMonitor/repository/DeviceExceptionLogRepository.java | 4 5 files changed, 239 insertions(+), 217 deletions(-) diff --git a/src/main/java/com/gkhy/fourierSpecialGasMonitor/repository/DeviceExceptionLogRepository.java b/src/main/java/com/gkhy/fourierSpecialGasMonitor/repository/DeviceExceptionLogRepository.java index 94a1bbf..e7062f8 100644 --- a/src/main/java/com/gkhy/fourierSpecialGasMonitor/repository/DeviceExceptionLogRepository.java +++ b/src/main/java/com/gkhy/fourierSpecialGasMonitor/repository/DeviceExceptionLogRepository.java @@ -3,6 +3,7 @@ import com.gkhy.fourierSpecialGasMonitor.entity.DeviceExceptionLog; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaSpecificationExecutor; +import org.springframework.data.jpa.repository.Query; import org.springframework.stereotype.Repository; /** @@ -12,4 +13,7 @@ */ @Repository public interface DeviceExceptionLogRepository extends JpaRepository<DeviceExceptionLog,Long>, JpaSpecificationExecutor<DeviceExceptionLog> { + + @Query(value="SELECT * FROM device_exception_log a ORDER BY a.time DESC LIMIT 1",nativeQuery= true) + DeviceExceptionLog getLastLog(); } \ No newline at end of file diff --git a/src/main/java/com/gkhy/fourierSpecialGasMonitor/schedule/TestSchedule.java b/src/main/java/com/gkhy/fourierSpecialGasMonitor/schedule/TestSchedule.java index bbdc5f9..d4df486 100644 --- a/src/main/java/com/gkhy/fourierSpecialGasMonitor/schedule/TestSchedule.java +++ b/src/main/java/com/gkhy/fourierSpecialGasMonitor/schedule/TestSchedule.java @@ -1,203 +1,203 @@ -//package com.gkhy.fourierSpecialGasMonitor.schedule; -// -//import com.gkhy.fourierSpecialGasMonitor.controller.DataReceiveController; -//import com.gkhy.fourierSpecialGasMonitor.entity.req.DeviceMonitorReqDTO; -//import com.gkhy.fourierSpecialGasMonitor.entity.req.UploadGasConcentrationReqDTO; -//import com.gkhy.fourierSpecialGasMonitor.entity.req.UploadGasFluxReqDTO; -//import com.gkhy.fourierSpecialGasMonitor.service.DataReceiveService; -//import org.slf4j.Logger; -//import org.slf4j.LoggerFactory; -//import org.springframework.beans.factory.annotation.Autowired; -//import org.springframework.scheduling.annotation.Async; -//import org.springframework.scheduling.annotation.Scheduled; -//import org.springframework.stereotype.Component; -// -//import javax.annotation.PostConstruct; -//import java.text.DecimalFormat; -//import java.time.LocalDateTime; -//import java.time.format.DateTimeFormatter; -//import java.util.ArrayList; -//import java.util.List; -//import java.util.Random; -//import java.util.concurrent.TimeUnit; -// -///** -// * @author Mr.huang -// * @decription -// * @date 2023/8/22 13:49 -// */ -//@Component -//public class TestSchedule { -// -// private final Logger logger = LoggerFactory.getLogger(this.getClass()); -// -// @Autowired -// private DataReceiveService dataReceiveService; -// -// private static final DateTimeFormatter execformatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); -// -// -// //@Scheduled(cron = "1 * * * * ?") -// //@Async(value = "SocketTaskExecutor") -// //public void testDeviceMonitor() { -// // logger.info("【硬件设备一分钟一次推送测试】:" + LocalDateTime.now().format(execformatter)); -// // DeviceMonitorReqDTO deviceMonitorReqDTO = new DeviceMonitorReqDTO(); -// // deviceMonitorReqDTO.setTime(LocalDateTime.now()); -// // deviceMonitorReqDTO.setConState(0); -// // deviceMonitorReqDTO.setFluxState(0); -// // List<Integer> list = new ArrayList<>(); -// // list.add(0); -// // deviceMonitorReqDTO.setHardwareState(list); -// // dataReceiveService.deviceMonitor(deviceMonitorReqDTO); -// //} -// -// -// //@Scheduled(cron = "0/30 * * * * ?") -// //@Async(value = "SocketTaskExecutor") -// //public void testGasConcentration() { -// // logger.info("【气体实时浓度推送测试】:"+LocalDateTime.now().format(execformatter)); -// // Random random = new Random(); -// // double randomDouble = random.nextDouble() * 99.9 + 1; // 生成1到100之间的随机双精度数 -// // DecimalFormat decimalFormat = new DecimalFormat("0.0"); -// // String formattedDouble = decimalFormat.format(randomDouble); -// // double result = Double.parseDouble(formattedDouble); -// // UploadGasConcentrationReqDTO dto = new UploadGasConcentrationReqDTO(); -// // dto.setEquipmentId("No-123456"); -// // dto.setTime(LocalDateTime.now()); -// // dto.setType(1); -// // dto.setLng("东经43"); -// // dto.setLat("北纬53"); -// // dto.setAngle("60"); -// // dto.setTemp(26.9); -// // dto.setHumidity(63.3); -// // dto.setWindSpeed(12.3); -// // dto.setWindDirection(56); -// // dto.setPressure(200.0); -// // dto.setGasName01(1); -// // dto.setGasValue01(result); -// // dto.setGasName02(2); -// // dto.setGasValue02(result); -// // dto.setGasName03(3); -// // dto.setGasValue03(result); -// // dto.setGasName04(4); -// // dto.setGasValue04(result); -// // dto.setGasName05(5); -// // dto.setGasValue05(result); -// // dto.setGasName06(6); -// // dto.setGasValue06(result); -// // dto.setGasName07(7); -// // dto.setGasValue07(result); -// // dto.setGasName08(8); -// // dto.setGasValue08(result); -// // dto.setGasName09(9); -// // dto.setGasValue09(result); -// // dto.setGasName10(10); -// // dto.setGasValue10(result); -// // dto.setGasName11(11); -// // dto.setGasValue11(result); -// // dto.setGasName12(12); -// // dto.setGasValue12(result); -// // dto.setGasName13(13); -// // dto.setGasValue13(result); -// // dto.setGasName14(14); -// // dto.setGasValue14(result); -// // dto.setGasName15(15); -// // dto.setGasValue15(result); -// // dto.setGasName16(16); -// // dto.setGasValue16(result); -// // dto.setGasName17(17); -// // dto.setGasValue17(result); -// // dto.setGasName18(18); -// // dto.setGasValue18(result); -// // dto.setGasName19(19); -// // dto.setGasValue19(result); -// // dto.setGasName20(20); -// // dto.setGasValue20(result); -// // dto.setGasName21(21); -// // dto.setGasValue21(result); -// // dto.setGasName22(22); -// // dto.setGasValue22(result); -// // dto.setGasName23(23); -// // dto.setGasValue23(result); -// // dto.setGasName24(24); -// // dto.setGasValue24(result); -// // dto.setGasName25(25); -// // dto.setGasValue25(result); -// // dto.setGasName26(26); -// // dto.setGasValue26(result); -// // dto.setGasName27(27); -// // dto.setGasValue27(result); -// // dto.setGasName28(28); -// // dto.setGasValue28(result); -// // dto.setGasName29(29); -// // dto.setGasValue29(result); -// // dto.setGasName30(30); -// // dto.setGasValue30(result); -// // dataReceiveService.uploadGasConcentration(dto); -// //} -// -// @Autowired -// private DataReceiveController dataReceiveController; -// -// @Scheduled(cron = "0/30 * * * * ?") -// //@Scheduled(cron = "0 0/15 * * * ?") -// @Async(value = "SocketTaskExecutor") -// public void testGasFlux() { -// logger.info("【气体通量推送测试】:"+LocalDateTime.now().format(execformatter)); -// for (int i = 1; i <= 6 ; i++) { -// Random random = new Random(); -// double randomDouble = random.nextDouble() * 99.9 + 1; // 生成1到100之间的随机双精度数 -// DecimalFormat decimalFormat = new DecimalFormat("0.0"); -// String formattedDouble = decimalFormat.format(randomDouble); -// double result = Double.parseDouble(formattedDouble); -// UploadGasFluxReqDTO dto = new UploadGasFluxReqDTO(); -// dto.setEquipmentId("No-123456"); -// dto.setTime(LocalDateTime.now()); -// dto.setAreaId(i); -// dto.setType(1); -// dto.setWindSpeed(12.3); -// dto.setWindDirection(56); -// dto.setGasName01(1); -// dto.setGasValue01(result); -// dto.setGasName02(2); -// dto.setGasValue02(result); -// dto.setGasName03(3); -// dto.setGasValue03(result); -// dto.setGasName04(4); -// dto.setGasValue04(result); -// dto.setGasName05(5); -// dto.setGasValue05(result); -// dto.setGasName06(6); -// dto.setGasValue06(result); -// dto.setGasName07(7); -// dto.setGasValue07(result); -// dto.setGasName08(8); -// dto.setGasValue08(result); -// dto.setGasName09(9); -// dto.setGasValue09(result); -// dto.setGasName10(10); -// dto.setGasValue10(result); -// dto.setGasName11(11); -// dto.setGasValue11(result); -// dto.setGasName12(12); -// dto.setGasValue12(result); -// dto.setGasName13(13); -// dto.setGasValue13(result); -// dto.setGasName14(14); -// dto.setGasValue14(result); -// dto.setGasName15(15); -// dto.setGasValue15(result); -// dto.setGasName16(16); -// dto.setGasValue16(result); -// dto.setGasName17(17); -// dto.setGasValue17(result); -// dto.setGasName18(18); -// dto.setGasValue18(result); -// dto.setGasName19(19); -// dto.setGasValue19(result); -// dto.setGasName20(20); -// dto.setGasValue20(result); -// dataReceiveController.uploadGasFlux(dto); -// } -// } -//} \ No newline at end of file +package com.gkhy.fourierSpecialGasMonitor.schedule; + +import com.gkhy.fourierSpecialGasMonitor.controller.DataReceiveController; +import com.gkhy.fourierSpecialGasMonitor.entity.req.DeviceMonitorReqDTO; +import com.gkhy.fourierSpecialGasMonitor.entity.req.UploadGasConcentrationReqDTO; +import com.gkhy.fourierSpecialGasMonitor.entity.req.UploadGasFluxReqDTO; +import com.gkhy.fourierSpecialGasMonitor.service.DataReceiveService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.Async; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +import javax.annotation.PostConstruct; +import java.text.DecimalFormat; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.List; +import java.util.Random; +import java.util.concurrent.TimeUnit; + +/** + * @author Mr.huang + * @decription + * @date 2023/8/22 13:49 + */ +@Component +public class TestSchedule { + + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + + @Autowired + private DataReceiveService dataReceiveService; + + private static final DateTimeFormatter execformatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + + + @Scheduled(cron = "1 * * * * ?") + @Async(value = "SocketTaskExecutor") + public void testDeviceMonitor() { + logger.info("【硬件设备一分钟一次推送测试】:" + LocalDateTime.now().format(execformatter)); + DeviceMonitorReqDTO deviceMonitorReqDTO = new DeviceMonitorReqDTO(); + deviceMonitorReqDTO.setTime(LocalDateTime.now()); + deviceMonitorReqDTO.setConState(1); + deviceMonitorReqDTO.setFluxState(0); + List<Integer> list = new ArrayList<>(); + list.add(0); + deviceMonitorReqDTO.setHardwareState(list); + dataReceiveService.deviceMonitor(deviceMonitorReqDTO); + } + + + //@Scheduled(cron = "0/30 * * * * ?") + //@Async(value = "SocketTaskExecutor") + //public void testGasConcentration() { + // logger.info("【气体实时浓度推送测试】:"+LocalDateTime.now().format(execformatter)); + // Random random = new Random(); + // double randomDouble = random.nextDouble() * 99.9 + 1; // 生成1到100之间的随机双精度数 + // DecimalFormat decimalFormat = new DecimalFormat("0.0"); + // String formattedDouble = decimalFormat.format(randomDouble); + // double result = Double.parseDouble(formattedDouble); + // UploadGasConcentrationReqDTO dto = new UploadGasConcentrationReqDTO(); + // dto.setEquipmentId("No-123456"); + // dto.setTime(LocalDateTime.now()); + // dto.setType(1); + // dto.setLng("东经43"); + // dto.setLat("北纬53"); + // dto.setAngle("60"); + // dto.setTemp(26.9); + // dto.setHumidity(63.3); + // dto.setWindSpeed(12.3); + // dto.setWindDirection(56); + // dto.setPressure(200.0); + // dto.setGasName01(1); + // dto.setGasValue01(result); + // dto.setGasName02(2); + // dto.setGasValue02(result); + // dto.setGasName03(3); + // dto.setGasValue03(result); + // dto.setGasName04(4); + // dto.setGasValue04(result); + // dto.setGasName05(5); + // dto.setGasValue05(result); + // dto.setGasName06(6); + // dto.setGasValue06(result); + // dto.setGasName07(7); + // dto.setGasValue07(result); + // dto.setGasName08(8); + // dto.setGasValue08(result); + // dto.setGasName09(9); + // dto.setGasValue09(result); + // dto.setGasName10(10); + // dto.setGasValue10(result); + // dto.setGasName11(11); + // dto.setGasValue11(result); + // dto.setGasName12(12); + // dto.setGasValue12(result); + // dto.setGasName13(13); + // dto.setGasValue13(result); + // dto.setGasName14(14); + // dto.setGasValue14(result); + // dto.setGasName15(15); + // dto.setGasValue15(result); + // dto.setGasName16(16); + // dto.setGasValue16(result); + // dto.setGasName17(17); + // dto.setGasValue17(result); + // dto.setGasName18(18); + // dto.setGasValue18(result); + // dto.setGasName19(19); + // dto.setGasValue19(result); + // dto.setGasName20(20); + // dto.setGasValue20(result); + // dto.setGasName21(21); + // dto.setGasValue21(result); + // dto.setGasName22(22); + // dto.setGasValue22(result); + // dto.setGasName23(23); + // dto.setGasValue23(result); + // dto.setGasName24(24); + // dto.setGasValue24(result); + // dto.setGasName25(25); + // dto.setGasValue25(result); + // dto.setGasName26(26); + // dto.setGasValue26(result); + // dto.setGasName27(27); + // dto.setGasValue27(result); + // dto.setGasName28(28); + // dto.setGasValue28(result); + // dto.setGasName29(29); + // dto.setGasValue29(result); + // dto.setGasName30(30); + // dto.setGasValue30(result); + // dataReceiveService.uploadGasConcentration(dto); + //} + + @Autowired + private DataReceiveController dataReceiveController; + + //@Scheduled(cron = "0/30 * * * * ?") + ////@Scheduled(cron = "0 0/15 * * * ?") + //@Async(value = "SocketTaskExecutor") + //public void testGasFlux() { + // logger.info("【气体通量推送测试】:"+LocalDateTime.now().format(execformatter)); + // for (int i = 1; i <= 6 ; i++) { + // Random random = new Random(); + // double randomDouble = random.nextDouble() * 99.9 + 1; // 生成1到100之间的随机双精度数 + // DecimalFormat decimalFormat = new DecimalFormat("0.0"); + // String formattedDouble = decimalFormat.format(randomDouble); + // double result = Double.parseDouble(formattedDouble); + // UploadGasFluxReqDTO dto = new UploadGasFluxReqDTO(); + // dto.setEquipmentId("No-123456"); + // dto.setTime(LocalDateTime.now()); + // dto.setAreaId(i); + // dto.setType(1); + // dto.setWindSpeed(12.3); + // dto.setWindDirection(56); + // dto.setGasName01(1); + // dto.setGasValue01(result); + // dto.setGasName02(2); + // dto.setGasValue02(result); + // dto.setGasName03(3); + // dto.setGasValue03(result); + // dto.setGasName04(4); + // dto.setGasValue04(result); + // dto.setGasName05(5); + // dto.setGasValue05(result); + // dto.setGasName06(6); + // dto.setGasValue06(result); + // dto.setGasName07(7); + // dto.setGasValue07(result); + // dto.setGasName08(8); + // dto.setGasValue08(result); + // dto.setGasName09(9); + // dto.setGasValue09(result); + // dto.setGasName10(10); + // dto.setGasValue10(result); + // dto.setGasName11(11); + // dto.setGasValue11(result); + // dto.setGasName12(12); + // dto.setGasValue12(result); + // dto.setGasName13(13); + // dto.setGasValue13(result); + // dto.setGasName14(14); + // dto.setGasValue14(result); + // dto.setGasName15(15); + // dto.setGasValue15(result); + // dto.setGasName16(16); + // dto.setGasValue16(result); + // dto.setGasName17(17); + // dto.setGasValue17(result); + // dto.setGasName18(18); + // dto.setGasValue18(result); + // dto.setGasName19(19); + // dto.setGasValue19(result); + // dto.setGasName20(20); + // dto.setGasValue20(result); + // dataReceiveController.uploadGasFlux(dto); + // } + //} +} \ No newline at end of file diff --git a/src/main/java/com/gkhy/fourierSpecialGasMonitor/service/DeviceExceptionLogService.java b/src/main/java/com/gkhy/fourierSpecialGasMonitor/service/DeviceExceptionLogService.java index 141b19e..123a731 100644 --- a/src/main/java/com/gkhy/fourierSpecialGasMonitor/service/DeviceExceptionLogService.java +++ b/src/main/java/com/gkhy/fourierSpecialGasMonitor/service/DeviceExceptionLogService.java @@ -15,4 +15,7 @@ Result deviceExcLogPage(PageQuery<DeviceExcLogPageQuery> pageQuery); + DeviceExceptionLog getLastLog(); + + } 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 5ed0334..1d21ddf 100644 --- a/src/main/java/com/gkhy/fourierSpecialGasMonitor/service/impl/DataReceiveServiceImpl.java +++ b/src/main/java/com/gkhy/fourierSpecialGasMonitor/service/impl/DataReceiveServiceImpl.java @@ -40,10 +40,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; @@ -121,6 +118,8 @@ private static final DateTimeFormatter warnLogFormatter = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH:mm:ss"); + @Value("${sms.send.deviceExcReceiver}") + private static final String[] DEVICE_EXC_RECEIVER = {"17625323889","18019908965"}; @PostConstruct public void init() { @@ -206,24 +205,35 @@ 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: 2024/2/22 + 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(); - LocalDateTime now = 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(); } @@ -360,7 +370,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); + mesMap.put(" level",warnThresholdName); //todo if (!CollectionUtils.isEmpty(phone)) { List<String> distinctPhone = phone.stream().distinct().collect(Collectors.toList()); diff --git a/src/main/java/com/gkhy/fourierSpecialGasMonitor/service/impl/DeviceExceptionLogServiceImpl.java b/src/main/java/com/gkhy/fourierSpecialGasMonitor/service/impl/DeviceExceptionLogServiceImpl.java index 0acbeb4..944316e 100644 --- a/src/main/java/com/gkhy/fourierSpecialGasMonitor/service/impl/DeviceExceptionLogServiceImpl.java +++ b/src/main/java/com/gkhy/fourierSpecialGasMonitor/service/impl/DeviceExceptionLogServiceImpl.java @@ -68,4 +68,9 @@ searchResult.setData(pageResult.getContent()); return searchResult; } + + @Override + public DeviceExceptionLog getLastLog() { + return deviceExceptionLogRepository.getLastLog(); + } } \ No newline at end of file -- Gitblit v1.9.2