From 4e6ba796be67ccbefb8e0f8f61bbfa12d8e0df6d Mon Sep 17 00:00:00 2001
From: huangzhen <867217663@qq.com>
Date: 星期四, 04 一月 2024 09:53:51 +0800
Subject: [PATCH] 新增功能

---
 src/main/java/com/gkhy/fourierSpecialGasMonitor/service/impl/DataReceiveServiceImpl.java        |   11 +++
 src/main/java/com/gkhy/fourierSpecialGasMonitor/enums/GasFluxStateEnum.java                     |    2 
 src/main/java/com/gkhy/fourierSpecialGasMonitor/entity/DeviceExceptionLog.java                  |    2 
 src/main/java/com/gkhy/fourierSpecialGasMonitor/entity/query/DeviceExcLogPageQuery.java         |   18 ++++++
 src/main/java/com/gkhy/fourierSpecialGasMonitor/service/DeviceExceptionLogService.java          |    6 ++
 src/main/java/com/gkhy/fourierSpecialGasMonitor/service/impl/DeviceExceptionLogServiceImpl.java |   49 ++++++++++++++++
 src/main/java/com/gkhy/fourierSpecialGasMonitor/controller/DeviceExcLogController.java          |   39 +++++++++++++
 src/main/java/com/gkhy/fourierSpecialGasMonitor/schedule/HeartbeatSchedule.java                 |   22 +++++-
 8 files changed, 140 insertions(+), 9 deletions(-)

diff --git a/src/main/java/com/gkhy/fourierSpecialGasMonitor/controller/DeviceExcLogController.java b/src/main/java/com/gkhy/fourierSpecialGasMonitor/controller/DeviceExcLogController.java
new file mode 100644
index 0000000..4b61bb8
--- /dev/null
+++ b/src/main/java/com/gkhy/fourierSpecialGasMonitor/controller/DeviceExcLogController.java
@@ -0,0 +1,39 @@
+package com.gkhy.fourierSpecialGasMonitor.controller;
+
+import com.gkhy.fourierSpecialGasMonitor.commons.domain.Result;
+import com.gkhy.fourierSpecialGasMonitor.commons.model.PageQuery;
+import com.gkhy.fourierSpecialGasMonitor.entity.query.DeviceExcLogPageQuery;
+import com.gkhy.fourierSpecialGasMonitor.entity.query.GasAtmospherePageQuery;
+import com.gkhy.fourierSpecialGasMonitor.entity.query.GasFluxPageQuery;
+import com.gkhy.fourierSpecialGasMonitor.entity.query.GasPageQuery;
+import com.gkhy.fourierSpecialGasMonitor.entity.req.GasAtmosphereLineChartReqDTO;
+import com.gkhy.fourierSpecialGasMonitor.entity.req.GasFluxLineChartReqDTO;
+import com.gkhy.fourierSpecialGasMonitor.entity.req.GasLineChartReqDTO;
+import com.gkhy.fourierSpecialGasMonitor.service.DeviceExceptionLogService;
+import com.gkhy.fourierSpecialGasMonitor.service.MonitorDataService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+
+/**
+ * @author Mr.huang
+ * @decription
+ * @date 2023/8/10 9:06
+ */
+@RestController
+@RequestMapping("/deviceExcLog")
+public class DeviceExcLogController {
+
+    @Resource
+    private DeviceExceptionLogService deviceExceptionLogService;
+
+    @PostMapping("/page")
+    public Result deviceExcLogPage(@RequestBody PageQuery<DeviceExcLogPageQuery> pageQuery){
+        Result result = deviceExceptionLogService.deviceExcLogPage(pageQuery);
+        return result;
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/com/gkhy/fourierSpecialGasMonitor/entity/DeviceExceptionLog.java b/src/main/java/com/gkhy/fourierSpecialGasMonitor/entity/DeviceExceptionLog.java
index 7abf2f5..e4d5a45 100644
--- a/src/main/java/com/gkhy/fourierSpecialGasMonitor/entity/DeviceExceptionLog.java
+++ b/src/main/java/com/gkhy/fourierSpecialGasMonitor/entity/DeviceExceptionLog.java
@@ -19,6 +19,8 @@
     @GeneratedValue(strategy = GenerationType.IDENTITY)
     private Integer id;
 
+    private String content;
+
     private LocalDateTime time;
 
     private String execDesc;
diff --git a/src/main/java/com/gkhy/fourierSpecialGasMonitor/entity/query/DeviceExcLogPageQuery.java b/src/main/java/com/gkhy/fourierSpecialGasMonitor/entity/query/DeviceExcLogPageQuery.java
new file mode 100644
index 0000000..170be65
--- /dev/null
+++ b/src/main/java/com/gkhy/fourierSpecialGasMonitor/entity/query/DeviceExcLogPageQuery.java
@@ -0,0 +1,18 @@
+package com.gkhy.fourierSpecialGasMonitor.entity.query;
+
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+/**
+ * @author Mr.huang
+ * @decription
+ * @date 2023/8/10 10:52
+ */
+@Data
+public class DeviceExcLogPageQuery {
+
+    private LocalDateTime startTime;
+
+    private LocalDateTime endTime;
+}
\ No newline at end of file
diff --git a/src/main/java/com/gkhy/fourierSpecialGasMonitor/enums/GasFluxStateEnum.java b/src/main/java/com/gkhy/fourierSpecialGasMonitor/enums/GasFluxStateEnum.java
index 5703f1b..05dddf6 100644
--- a/src/main/java/com/gkhy/fourierSpecialGasMonitor/enums/GasFluxStateEnum.java
+++ b/src/main/java/com/gkhy/fourierSpecialGasMonitor/enums/GasFluxStateEnum.java
@@ -8,7 +8,7 @@
 
 
     NORMAL((Integer) 0, "正常"),
-    INVERSION_FAILED_10_MINUTES_NO_DATA((Integer) 1, "现场设备连续5min无数据")
+    INVERSION_FAILED_10_MINUTES_NO_DATA((Integer) 1, "反演失败,现场连续10min无数据")
     ;
 
     private Integer state;
diff --git a/src/main/java/com/gkhy/fourierSpecialGasMonitor/schedule/HeartbeatSchedule.java b/src/main/java/com/gkhy/fourierSpecialGasMonitor/schedule/HeartbeatSchedule.java
index 33ea153..f0c9d01 100644
--- a/src/main/java/com/gkhy/fourierSpecialGasMonitor/schedule/HeartbeatSchedule.java
+++ b/src/main/java/com/gkhy/fourierSpecialGasMonitor/schedule/HeartbeatSchedule.java
@@ -18,7 +18,9 @@
 import org.springframework.stereotype.Component;
 
 import java.io.IOException;
+import java.text.MessageFormat;
 import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
 
 /**
  * @author Mr.huang
@@ -42,9 +44,13 @@
 
     private final Logger logger = LoggerFactory.getLogger(this.getClass());
 
+    private static final String deviceExcLogFormat = "【设备预警提示】{0} 硬件设备离线。";
+
+    private static final DateTimeFormatter deviceExcLogFormatter = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH:mm:ss");
 
 
-    @Scheduled(cron = "0/30 * * * * ?")
+
+    @Scheduled(cron = "0 0/1 * * * ?")
     @Async(value = "SocketTaskExecutor")
     public void gasConcentrationStatus() {
         GasConcentration gasConcentration = gasConcentrationService.getLastData();
@@ -53,9 +59,12 @@
             if (LocalDateTime.now().compareTo(lastReceiveTime) > 0){
                 try {
                     heartbeatExcWebsocketServer.sendInfo(HeartbeatExecEnum.GAS_CONCENTRATION.getStatus()+"",null);
-                    logger.info(HeartbeatExecEnum.GAS_CONCENTRATION.getDesc());
+                    //logger.info(HeartbeatExecEnum.GAS_CONCENTRATION.getDesc());
                     DeviceExceptionLog deviceExceptionLog = new DeviceExceptionLog();
-                    deviceExceptionLog.setTime(LocalDateTime.now());
+                    LocalDateTime now = LocalDateTime.now();
+                    String content  = MessageFormat.format(deviceExcLogFormat,deviceExcLogFormatter.format(now));
+                    deviceExceptionLog.setTime(now);
+                    deviceExceptionLog.setContent(content);
                     deviceExceptionLog.setExecDesc(HeartbeatExecEnum.GAS_CONCENTRATION.getDesc());
                     DeviceExceptionLog save =  deviceExceptionLogService.save(deviceExceptionLog);
                     if (save == null)
@@ -76,9 +85,12 @@
             if (LocalDateTime.now().compareTo(lastReceiveTime) > 0){
                 try {
                     heartbeatExcWebsocketServer.sendInfo(HeartbeatExecEnum.GAS_FLUX.getStatus()+"",null);
-                    logger.info(HeartbeatExecEnum.GAS_FLUX.getDesc());
+                    //logger.info(HeartbeatExecEnum.GAS_FLUX.getDesc());
                     DeviceExceptionLog deviceExceptionLog = new DeviceExceptionLog();
-                    deviceExceptionLog.setTime(LocalDateTime.now());
+                    LocalDateTime now = LocalDateTime.now();
+                    String content  = MessageFormat.format(deviceExcLogFormat,deviceExcLogFormatter.format(now));
+                    deviceExceptionLog.setTime(now);
+                    deviceExceptionLog.setContent(content);
                     deviceExceptionLog.setExecDesc(HeartbeatExecEnum.GAS_FLUX.getDesc());
                     DeviceExceptionLog save =  deviceExceptionLogService.save(deviceExceptionLog);
                     if (save == null)
diff --git a/src/main/java/com/gkhy/fourierSpecialGasMonitor/service/DeviceExceptionLogService.java b/src/main/java/com/gkhy/fourierSpecialGasMonitor/service/DeviceExceptionLogService.java
index 7b91b30..141b19e 100644
--- a/src/main/java/com/gkhy/fourierSpecialGasMonitor/service/DeviceExceptionLogService.java
+++ b/src/main/java/com/gkhy/fourierSpecialGasMonitor/service/DeviceExceptionLogService.java
@@ -1,6 +1,9 @@
 package com.gkhy.fourierSpecialGasMonitor.service;
 
+import com.gkhy.fourierSpecialGasMonitor.commons.domain.Result;
+import com.gkhy.fourierSpecialGasMonitor.commons.model.PageQuery;
 import com.gkhy.fourierSpecialGasMonitor.entity.DeviceExceptionLog;
+import com.gkhy.fourierSpecialGasMonitor.entity.query.DeviceExcLogPageQuery;
 
 /**
  * @author Mr.huang
@@ -9,4 +12,7 @@
  */
 public interface DeviceExceptionLogService {
     DeviceExceptionLog save(DeviceExceptionLog log);
+
+    Result deviceExcLogPage(PageQuery<DeviceExcLogPageQuery> pageQuery);
+
 }
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..5ed0334 100644
--- a/src/main/java/com/gkhy/fourierSpecialGasMonitor/service/impl/DataReceiveServiceImpl.java
+++ b/src/main/java/com/gkhy/fourierSpecialGasMonitor/service/impl/DataReceiveServiceImpl.java
@@ -115,6 +115,10 @@
 
     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");
 
 
@@ -180,7 +184,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)));
@@ -212,7 +216,10 @@
             String execInfo = JSON.toJSONString(descs);
             logger.info("【警告】设备异常,异常原因: "+ execInfo);
             DeviceExceptionLog log = new DeviceExceptionLog();
-            log.setTime(LocalDateTime.now());
+            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)
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 6be49cc..0acbeb4 100644
--- a/src/main/java/com/gkhy/fourierSpecialGasMonitor/service/impl/DeviceExceptionLogServiceImpl.java
+++ b/src/main/java/com/gkhy/fourierSpecialGasMonitor/service/impl/DeviceExceptionLogServiceImpl.java
@@ -1,10 +1,32 @@
 package com.gkhy.fourierSpecialGasMonitor.service.impl;
 
+import com.gkhy.fourierSpecialGasMonitor.commons.domain.Result;
+import com.gkhy.fourierSpecialGasMonitor.commons.domain.SearchResult;
+import com.gkhy.fourierSpecialGasMonitor.commons.model.PageQuery;
 import com.gkhy.fourierSpecialGasMonitor.entity.DeviceExceptionLog;
+import com.gkhy.fourierSpecialGasMonitor.entity.GasConcentration;
+import com.gkhy.fourierSpecialGasMonitor.entity.query.DeviceExcLogPageQuery;
+import com.gkhy.fourierSpecialGasMonitor.entity.query.GasPageQuery;
+import com.gkhy.fourierSpecialGasMonitor.entity.resp.GasPageRespDTO;
 import com.gkhy.fourierSpecialGasMonitor.repository.DeviceExceptionLogRepository;
 import com.gkhy.fourierSpecialGasMonitor.service.DeviceExceptionLogService;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.PageRequest;
+import org.springframework.data.domain.Pageable;
+import org.springframework.data.domain.Sort;
+import org.springframework.data.jpa.domain.Specification;
 import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import javax.persistence.criteria.CriteriaBuilder;
+import javax.persistence.criteria.CriteriaQuery;
+import javax.persistence.criteria.Predicate;
+import javax.persistence.criteria.Root;
+import java.time.LocalDateTime;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
 
 /**
  * @author Mr.huang
@@ -14,11 +36,36 @@
 @Service
 public class DeviceExceptionLogServiceImpl implements DeviceExceptionLogService {
 
-    @Autowired
+    @Resource
     private DeviceExceptionLogRepository deviceExceptionLogRepository;
 
     @Override
     public DeviceExceptionLog save(DeviceExceptionLog log) {
         return deviceExceptionLogRepository.save(log);
     }
+
+    @Override
+    public Result deviceExcLogPage(PageQuery<DeviceExcLogPageQuery> pageQuery) {
+        SearchResult<List<DeviceExceptionLog>> searchResult = new SearchResult<>();
+        searchResult.setPageIndex(pageQuery.getPageIndex());
+        searchResult.setPageSize(pageQuery.getPageSize());
+        searchResult.setSuccess();
+        Pageable pageable = PageRequest.of(pageQuery.getPageIndex()-1, pageQuery.getPageSize(), Sort.Direction.DESC, "time");
+        Specification<DeviceExceptionLog> specification = new Specification<DeviceExceptionLog>() {
+            @Override
+            public Predicate toPredicate(Root root, CriteriaQuery query, CriteriaBuilder criteriaBuilder) {
+                Set<Predicate> predicateList = new HashSet<>();
+                DeviceExcLogPageQuery searchParams = pageQuery.getSearchParams();
+                if (searchParams != null && searchParams.getStartTime() != null && searchParams.getEndTime() != null){
+                    predicateList.add(criteriaBuilder.between(root.get("time").as(LocalDateTime.class),searchParams.getStartTime(),searchParams.getEndTime()));
+                }
+                return criteriaBuilder.and(predicateList.toArray(new Predicate[predicateList.size()]));
+            }
+        };
+        Page<DeviceExceptionLog> pageResult = deviceExceptionLogRepository.findAll(specification,pageable);
+        searchResult.setTotal(pageResult.getTotalElements());
+        searchResult.setPages(pageResult.getTotalPages());
+        searchResult.setData(pageResult.getContent());
+        return searchResult;
+    }
 }
\ No newline at end of file

--
Gitblit v1.9.2