huangzhen
2024-02-22 5eeac9f272d1228a328cdae46961834f168f5086
增加设备异常短信接收人
已修改5个文件
332 ■■■■ 文件已修改
src/main/java/com/gkhy/fourierSpecialGasMonitor/repository/DeviceExceptionLogRepository.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/gkhy/fourierSpecialGasMonitor/schedule/TestSchedule.java 284 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/gkhy/fourierSpecialGasMonitor/service/DeviceExceptionLogService.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/gkhy/fourierSpecialGasMonitor/service/impl/DataReceiveServiceImpl.java 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/gkhy/fourierSpecialGasMonitor/service/impl/DeviceExceptionLogServiceImpl.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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();
}
src/main/java/com/gkhy/fourierSpecialGasMonitor/schedule/TestSchedule.java
@@ -1,144 +1,144 @@
//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;
//
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")
@@ -200,4 +200,4 @@
//            dataReceiveController.uploadGasFlux(dto);
//        }
//    }
//}
}
src/main/java/com/gkhy/fourierSpecialGasMonitor/service/DeviceExceptionLogService.java
@@ -15,4 +15,7 @@
    Result deviceExcLogPage(PageQuery<DeviceExcLogPageQuery> pageQuery);
    DeviceExceptionLog getLastLog();
}
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,25 +205,36 @@
            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();
    }
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();
    }
}