Parcourir la source

feat:新增多功能设备上下限设置
feat:修复危险公众号不报警

黄渊昊 il y a 3 semaines
Parent
commit
0badb450a7
18 fichiers modifiés avec 312 ajouts et 21 suppressions
  1. 80 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/core/alarm/bean/SensorThreshold.java
  2. 10 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/core/alarm/offline/DeviceOfflineDetectionService.java
  3. 25 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/core/alarm/service/check/DefaultSensorAlarmChecker.java
  4. 2 1
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/core/alarm/service/messagepush/RedisSensorAlarmMessagePushService.java
  5. 1 1
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/core/bean/influxdb/SensorData.java
  6. 1 1
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/core/config/JfcloudColdChainConstants.java
  7. 8 8
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/core/service/dataprocess/dataclean/impl/WifiEvnSevenInOne.java
  8. 41 10
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordevice/entity/MonitorDevice.java
  9. 17 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordevice/param/MonitorDeviceAddParam.java
  10. 17 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordevice/param/MonitorDeviceEditParam.java
  11. 17 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordevicetype/entity/MonitorDeviceType.java
  12. 17 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordevicetype/param/MonitorDeviceTypeAddParam.java
  13. 17 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordevicetype/param/MonitorDeviceTypeEditParam.java
  14. 17 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitortargetregion/entity/MonitorTargetRegion.java
  15. 17 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitortargetregion/param/MonitorTargetRegionAddParam.java
  16. 17 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitortargetregion/param/MonitorTargetRegionEditParam.java
  17. 6 0
      snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/push/utils/PushUtil.java
  18. 2 0
      snowy-web-app/src/main/resources/application.properties

+ 80 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/core/alarm/bean/SensorThreshold.java

@@ -63,6 +63,70 @@ public class SensorThreshold {
     @JsonSerialize(using = FloatNullToDashSerializer.class)
     @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "#.00")
     private Float co2Down;
+    
+    @JsonSerialize(using = FloatNullToDashSerializer.class)
+    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "#.00")
+    private Float tvocUp;
+    
+    @JsonSerialize(using = FloatNullToDashSerializer.class)
+    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "#.00")
+    private Float tvocDown;
+    
+    @JsonSerialize(using = FloatNullToDashSerializer.class)
+    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "#.00")
+    private Float o2Up;
+    
+    @JsonSerialize(using = FloatNullToDashSerializer.class)
+    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "#.00")
+    private Float o2Down;
+    
+    @JsonSerialize(using = FloatNullToDashSerializer.class)
+    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "#.00")
+    private Float n2Up;
+    
+    @JsonSerialize(using = FloatNullToDashSerializer.class)
+    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "#.00")
+    private Float n2Down;
+    
+    @JsonSerialize(using = FloatNullToDashSerializer.class)
+    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "#.00")
+    private Float pressureUp;
+    
+    @JsonSerialize(using = FloatNullToDashSerializer.class)
+    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "#.00")
+    private Float pressureDown;
+    
+    @JsonSerialize(using = FloatNullToDashSerializer.class)
+    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "#.00")
+    private Float ch2oUp;
+    
+    @JsonSerialize(using = FloatNullToDashSerializer.class)
+    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "#.00")
+    private Float ch2oDown;
+    
+    @JsonSerialize(using = FloatNullToDashSerializer.class)
+    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "#.00")
+    private Float illuminanceUp;
+    
+    @JsonSerialize(using = FloatNullToDashSerializer.class)
+    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "#.00")
+    private Float illuminanceDown;
+    
+    @JsonSerialize(using = FloatNullToDashSerializer.class)
+    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "#.00")
+    private Float pm25Up;
+    
+    @JsonSerialize(using = FloatNullToDashSerializer.class)
+    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "#.00")
+    private Float pm25Down;
+    
+    @JsonSerialize(using = FloatNullToDashSerializer.class)
+    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "#.00")
+    private Float pm10Up;
+    
+    @JsonSerialize(using = FloatNullToDashSerializer.class)
+    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "#.00")
+    private Float pm10Down;
 
     /**
      * 低电量报警下限
@@ -88,5 +152,21 @@ public class SensorThreshold {
         this.temperatureDown = monitorTargetRegion.getTemperatureDown();
         this.temperatureUp = monitorTargetRegion.getTemperatureUp();
         this.batteryDown = monitorTargetRegion.getBatteryDown();
+        this.tvocUp = monitorTargetRegion.getTvocUp();
+        this.tvocDown = monitorTargetRegion.getTvocDown();
+        this.o2Up = monitorTargetRegion.getO2Up();
+        this.o2Down = monitorTargetRegion.getO2Down();
+        this.n2Up = monitorTargetRegion.getN2Up();
+        this.n2Down = monitorTargetRegion.getN2Down();
+        this.pressureUp = monitorTargetRegion.getPressureUp();
+        this.pressureDown = monitorTargetRegion.getPressureDown();
+        this.ch2oUp = monitorTargetRegion.getCh2oUp();
+        this.ch2oDown = monitorTargetRegion.getCh2oDown();
+        this.illuminanceUp = monitorTargetRegion.getIlluminanceUp();
+        this.illuminanceDown = monitorTargetRegion.getIlluminanceDown();
+        this.pm25Up = monitorTargetRegion.getPm25Up();
+        this.pm25Down = monitorTargetRegion.getPm25Down();
+        this.pm10Up = monitorTargetRegion.getPm10Up();
+        this.pm10Down = monitorTargetRegion.getPm10Down();
     }
 }

+ 10 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/core/alarm/offline/DeviceOfflineDetectionService.java

@@ -1,5 +1,6 @@
 package vip.xiaonuo.coldchain.core.alarm.offline;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.jetbrains.annotations.NotNull;
@@ -15,6 +16,7 @@ import vip.xiaonuo.coldchain.core.alarm.service.messagepush.RedisSensorAlarmMess
 import vip.xiaonuo.coldchain.core.event.SensorAlarmEvent;
 import vip.xiaonuo.coldchain.core.renke.config.JfcloudColdChainServerProperties;
 import vip.xiaonuo.coldchain.modular.monitordevice.service.MonitorDeviceService;
+import vip.xiaonuo.coldchain.modular.monitortarget.entity.MonitorTarget;
 import vip.xiaonuo.coldchain.modular.monitortarget.enums.MonitorStatusEnum;
 import vip.xiaonuo.coldchain.modular.monitortarget.service.MonitorTargetService;
 import vip.xiaonuo.coldchain.modular.monitortargetregion.entity.MonitorTargetRegion;
@@ -89,6 +91,14 @@ public class DeviceOfflineDetectionService {
                 processDevice(key, now, OFFLINE_THRESHOLD_MINUTES, deviceCodes);
             }
         }
+        // 如果冰箱下没有点位,修改状态为离线
+        monitorTargetService.list().forEach(monitorTarget -> {
+            List<MonitorTargetRegion> regionList = monitorTargetRegionService.getRegionListByTargetId(monitorTarget.getId());
+            if (regionList.isEmpty()) {
+                monitorTarget.setStatus(MonitorStatusEnum.OFF.getCode());
+                monitorTargetService.updateById(monitorTarget);
+            }
+        });
         // 获取所有设备代码
         Set<String> allSensorCodes = monitorDeviceService.getAllDeviceCodes();
         // 创建新的集合,避免修改原始集合

+ 25 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/core/alarm/service/check/DefaultSensorAlarmChecker.java

@@ -61,6 +61,31 @@ public class DefaultSensorAlarmChecker implements SensorAlarmChecker {
         if (noNull(sensorData.getCo2())) {
             alarmTriggered |= checkThreshold(sensorData.getCo2(), threshold.getCo2Up(), threshold.getCo2Down(), "二氧化碳", monitorTargetRegion);
         }
+        // TVOC、O2、N2、pressure、CH2O、illuminance、PM2.5、PM10
+        if (noNull(sensorData.getTvoc())) {
+            alarmTriggered |= checkThreshold(sensorData.getTvoc(), threshold.getTvocUp(), threshold.getTvocDown(), "TVOC", monitorTargetRegion);
+        }
+        if (noNull(sensorData.getCh2o())) {
+            alarmTriggered |= checkThreshold(sensorData.getCh2o(), threshold.getCh2oUp(), threshold.getCh2oDown(), "一氧化碳", monitorTargetRegion);
+        }
+        if (noNull(sensorData.getO2())) {
+            alarmTriggered |= checkThreshold(sensorData.getO2(), threshold.getO2Up(), threshold.getO2Down(), "氧气", monitorTargetRegion);
+        }
+        if (noNull(sensorData.getN2())) {
+            alarmTriggered |= checkThreshold(sensorData.getN2(), threshold.getN2Up(), threshold.getN2Down(), "氮气", monitorTargetRegion);
+        }
+        if (noNull(sensorData.getPressure())) {
+            alarmTriggered |= checkThreshold(sensorData.getPressure(), threshold.getPressureUp(), threshold.getPressureDown(), "压力", monitorTargetRegion);
+        }
+        if (noNull(sensorData.getPm25())) {
+            alarmTriggered |= checkThreshold(sensorData.getPm25(), threshold.getPm25Up(), threshold.getPm25Down(), "PM2.5", monitorTargetRegion);
+        }
+        if (noNull(sensorData.getPm10())) {
+            alarmTriggered |= checkThreshold(sensorData.getPm10(), threshold.getPm10Up(), threshold.getPm10Down(), "PM10", monitorTargetRegion);
+        }
+        if (noNull(sensorData.getIlluminance())) {
+            alarmTriggered |= checkThreshold(sensorData.getIlluminance(), threshold.getIlluminanceUp(), threshold.getIlluminanceDown(), "光照", monitorTargetRegion);
+        }
         if (noNull(sensorData.getBattery())) {
             alarmTriggered |= checkThreshold(sensorData.getBattery(), null, threshold.getBatteryDown(), "电量", monitorTargetRegion);
         }

+ 2 - 1
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/core/alarm/service/messagepush/RedisSensorAlarmMessagePushService.java

@@ -160,7 +160,8 @@ public class RedisSensorAlarmMessagePushService {
             }
             List<Object> pushTimes = redisTemplate.opsForList().range(k, 0, -1);
             long currentTime = System.currentTimeMillis();
-            pushTimes.removeIf(time -> currentTime - (Long) time > JfcloudColdChainConstants.MESS_PUSH_TIME_WINDOW);
+//            pushTimes.removeIf(time -> currentTime - (Long) time > JfcloudColdChainConstants.MESS_PUSH_TIME_WINDOW);
+            pushTimes.removeIf(time -> currentTime - (Long) time > 3 * 60 * 1000);
             return pushTimes.size() >= JfcloudColdChainConstants.MESS_PUSH_MAX_PUSH_COUNT;
         }
         return false;

+ 1 - 1
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/core/bean/influxdb/SensorData.java

@@ -65,7 +65,7 @@ public class SensorData extends JfcloudInFluxEntity {
 
     @Column(name = "illuminance")
     @JsonSerialize(using = FloatNullToDashSerializer.class)
-    private Integer illuminance;
+    private Float illuminance;
 
     @Column(name = "tvoc")
     @JsonSerialize(using = FloatNullToDashSerializer.class)

+ 1 - 1
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/core/config/JfcloudColdChainConstants.java

@@ -67,7 +67,7 @@ public interface JfcloudColdChainConstants {
     /**
      * 消息推送限制的时间窗口,单位为毫秒(10分钟)
      */
-    long MESS_PUSH_TIME_WINDOW = 1 * 60 * 1000;
+    long MESS_PUSH_TIME_WINDOW = 10 * 60 * 1000;
     /**
      * redis 缓存用户推送消息频率限制
      */

+ 8 - 8
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/core/service/dataprocess/dataclean/impl/WifiEvnSevenInOne.java

@@ -26,27 +26,27 @@ public class WifiEvnSevenInOne extends AbsRenkeMonitorDataProcessor {
         for (NodeData nodeData : nodeList) {
             switch (nodeData.getNodeId()) {
                 case 1:
-                    sensorData.setPm10(floatValue(nodeData.getTem()));
-                    sensorData.setPm25(floatValue(nodeData.getHum()));
+                    sensorData.setPm10(floatValue(nodeData.getTem() * 10));
+                    sensorData.setPm25(floatValue(nodeData.getHum() * 10));
                     break;
                 case 2:
                     sensorData.setHumidity(floatValue(nodeData.getHum()));
                     sensorData.setTemperature(floatValue(nodeData.getTem()));
                     break;
                 case 3:
-                    sensorData.setPressure(floatValue(nodeData.getTem() / 10));
+                    sensorData.setPressure(floatValue(nodeData.getTem()));
                     break;
                 case 4:
-                    sensorData.setIlluminance((nodeData.getSignedInt32Value()));
+                    sensorData.setIlluminance(((Number) nodeData.getSignedInt32Value()).floatValue());
                     break;
                 case 5:
-                    sensorData.setTvoc(floatValue(nodeData.getHum()));
+                    sensorData.setTvoc(floatValue((float) (nodeData.getHum() * 10 * (58 / 22.4) / 1000)));
                     break;
                 case 6:
-                    sensorData.setCo2(floatValue(nodeData.getTem()));
+                    sensorData.setCo2(floatValue(nodeData.getTem() * 10));
                     break;
                 case 7:
-                    sensorData.setCh2o(floatValue(nodeData.getTem() / 100));
+                    sensorData.setCh2o(floatValue(nodeData.getTem() / 10));
                     break;
                 case 8:
                     sensorData.setO3(floatValue(nodeData.getTem()));
@@ -82,7 +82,7 @@ public class WifiEvnSevenInOne extends AbsRenkeMonitorDataProcessor {
                     sensorData.setOdor(floatValue(nodeData.getTem()));
                     break;
                 case 19:
-                    sensorData.setTsp(floatValue(nodeData.getTem()));
+                    sensorData.setTsp(floatValue(nodeData.getTem() * 10));
                     break;
                 case 20:
                     sensorData.setSmoke(floatValue(nodeData.getTem()));

+ 41 - 10
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordevice/entity/MonitorDevice.java

@@ -37,8 +37,8 @@ import java.util.List;
  **/
 @Getter
 @Setter
-@TableName(value ="monitor_device", autoResultMap = true)
-public class MonitorDevice  extends OrgEntity {
+@TableName(value = "monitor_device", autoResultMap = true)
+public class MonitorDevice extends OrgEntity {
 
     /**
      * 设备唯一标识符,UUID
@@ -146,7 +146,7 @@ public class MonitorDevice  extends OrgEntity {
      * 设备参数信息
      */
     @Schema(description = "设备参数信息")
-    @TableField(value = "parameters",typeHandler = ParamItemTypeHandler.class)
+    @TableField(value = "parameters", typeHandler = ParamItemTypeHandler.class)
     private List<ParamItem> parameters;
 //    private String parameters;
 
@@ -157,31 +157,62 @@ public class MonitorDevice  extends OrgEntity {
     @TableField(exist = false)
     private String typeName;
 
-    /** 报警上限 */
+    /**
+     * 报警上限
+     */
     @Schema(description = "报警上限")
     private Float temperatureUp;
 
-    /** 报警上限 */
+    /**
+     * 报警上限
+     */
     @Schema(description = "报警上限")
     private Float humidityUp;
 
-    /** 报警上限 */
+    /**
+     * 报警上限
+     */
     @Schema(description = "报警上限")
     private Float co2Up;
 
-    /** 报警下限 */
+    /**
+     * 报警下限
+     */
     @Schema(description = "报警下限")
     private Float temperatureDown;
 
-    /** 报警下限 */
+    /**
+     * 报警下限
+     */
     @Schema(description = "报警下限")
     private Float humidityDown;
 
-    /** 报警下限 */
+    /**
+     * 报警下限
+     */
     @Schema(description = "报警下限")
     private Float co2Down;
 
-    /** 供电类型 */
+    /**
+     * 供电类型
+     */
     @Schema(description = "供电类型")
     private String powerType;
+
+    private Float tvocUp;
+    private Float tvocDown;
+    private Float o2Up;
+    private Float o2Down;
+    private Float n2Up;
+    private Float n2Down;
+    private Float pressureUp;
+    private Float pressureDown;
+    private Float ch2oUp;
+    private Float ch2oDown;
+    private Float illuminanceUp;
+    private Float illuminanceDown;
+    private Float pm25Up;
+    private Float pm25Down;
+    private Float pm10Up;
+    private Float pm10Down;
 }

+ 17 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordevice/param/MonitorDeviceAddParam.java

@@ -144,4 +144,21 @@ public class MonitorDeviceAddParam {
     /** 供电类型 */
     @Schema(description = "供电类型")
     private String powerType;
+
+    private Float tvocUp;
+    private Float tvocDown;
+    private Float o2Up;
+    private Float o2Down;
+    private Float n2Up;
+    private Float n2Down;
+    private Float pressureUp;
+    private Float pressureDown;
+    private Float ch2oUp;
+    private Float ch2oDown;
+    private Float illuminanceUp;
+    private Float illuminanceDown;
+    private Float pm25Up;
+    private Float pm25Down;
+    private Float pm10Up;
+    private Float pm10Down;
 }

+ 17 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordevice/param/MonitorDeviceEditParam.java

@@ -141,4 +141,21 @@ public class MonitorDeviceEditParam {
     /** 供电类型 */
     @Schema(description = "供电类型")
     private String powerType;
+
+    private Float tvocUp;
+    private Float tvocDown;
+    private Float o2Up;
+    private Float o2Down;
+    private Float n2Up;
+    private Float n2Down;
+    private Float pressureUp;
+    private Float pressureDown;
+    private Float ch2oUp;
+    private Float ch2oDown;
+    private Float illuminanceUp;
+    private Float illuminanceDown;
+    private Float pm25Up;
+    private Float pm25Down;
+    private Float pm10Up;
+    private Float pm10Down;
 }

+ 17 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordevicetype/entity/MonitorDeviceType.java

@@ -114,4 +114,21 @@ public class MonitorDeviceType extends CommonEntity {
     /** 厂家 */
     @Schema(description = "厂家")
     private String factory;
+
+    private Float tvocUp;
+    private Float tvocDown;
+    private Float o2Up;
+    private Float o2Down;
+    private Float n2Up;
+    private Float n2Down;
+    private Float pressureUp;
+    private Float pressureDown;
+    private Float ch2oUp;
+    private Float ch2oDown;
+    private Float illuminanceUp;
+    private Float illuminanceDown;
+    private Float pm25Up;
+    private Float pm25Down;
+    private Float pm10Up;
+    private Float pm10Down;
 }

+ 17 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordevicetype/param/MonitorDeviceTypeAddParam.java

@@ -103,4 +103,21 @@ public class MonitorDeviceTypeAddParam {
     /** 厂家 */
     @Schema(description = "厂家")
     private String factory;
+
+    private Float tvocUp;
+    private Float tvocDown;
+    private Float o2Up;
+    private Float o2Down;
+    private Float n2Up;
+    private Float n2Down;
+    private Float pressureUp;
+    private Float pressureDown;
+    private Float ch2oUp;
+    private Float ch2oDown;
+    private Float illuminanceUp;
+    private Float illuminanceDown;
+    private Float pm25Up;
+    private Float pm25Down;
+    private Float pm10Up;
+    private Float pm10Down;
 }

+ 17 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitordevicetype/param/MonitorDeviceTypeEditParam.java

@@ -104,4 +104,21 @@ public class MonitorDeviceTypeEditParam {
     /** 厂家 */
     @Schema(description = "厂家")
     private String factory;
+
+    private Float tvocUp;
+    private Float tvocDown;
+    private Float o2Up;
+    private Float o2Down;
+    private Float n2Up;
+    private Float n2Down;
+    private Float pressureUp;
+    private Float pressureDown;
+    private Float ch2oUp;
+    private Float ch2oDown;
+    private Float illuminanceUp;
+    private Float illuminanceDown;
+    private Float pm25Up;
+    private Float pm25Down;
+    private Float pm10Up;
+    private Float pm10Down;
 }

+ 17 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitortargetregion/entity/MonitorTargetRegion.java

@@ -231,6 +231,23 @@ public class MonitorTargetRegion extends OrgEntity {
     @TableField(exist = false)
     private DelayInfo delayInfo;
 
+    private Float tvocUp;
+    private Float tvocDown;
+    private Float o2Up;
+    private Float o2Down;
+    private Float n2Up;
+    private Float n2Down;
+    private Float pressureUp;
+    private Float pressureDown;
+    private Float ch2oUp;
+    private Float ch2oDown;
+    private Float illuminanceUp;
+    private Float illuminanceDown;
+    private Float pm25Up;
+    private Float pm25Down;
+    private Float pm10Up;
+    private Float pm10Down;
+
     public void setTemperatureUp(Float temperatureUp) {
         this.temperatureUp = temperatureUp;
     }

+ 17 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitortargetregion/param/MonitorTargetRegionAddParam.java

@@ -193,4 +193,21 @@ public class MonitorTargetRegionAddParam {
      */
     @Schema(description = "预警通知")
     private String enabled;
+
+    private Float tvocUp;
+    private Float tvocDown;
+    private Float o2Up;
+    private Float o2Down;
+    private Float n2Up;
+    private Float n2Down;
+    private Float pressureUp;
+    private Float pressureDown;
+    private Float ch2oUp;
+    private Float ch2oDown;
+    private Float illuminanceUp;
+    private Float illuminanceDown;
+    private Float pm25Up;
+    private Float pm25Down;
+    private Float pm10Up;
+    private Float pm10Down;
 }

+ 17 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitortargetregion/param/MonitorTargetRegionEditParam.java

@@ -195,4 +195,21 @@ public class MonitorTargetRegionEditParam {
      */
     @Schema(description = "预警通知")
     private String enabled;
+
+    private Float tvocUp;
+    private Float tvocDown;
+    private Float o2Up;
+    private Float o2Down;
+    private Float n2Up;
+    private Float n2Down;
+    private Float pressureUp;
+    private Float pressureDown;
+    private Float ch2oUp;
+    private Float ch2oDown;
+    private Float illuminanceUp;
+    private Float illuminanceDown;
+    private Float pm25Up;
+    private Float pm25Down;
+    private Float pm10Up;
+    private Float pm10Down;
 }

+ 6 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/push/utils/PushUtil.java

@@ -22,6 +22,7 @@ import vip.xiaonuo.coldchain.modular.push.param.AlarmRecoverPushParam;
 import vip.xiaonuo.coldchain.modular.push.param.OfflinePushParam;
 import vip.xiaonuo.coldchain.modular.push.param.OnlinePushParam;
 
+import java.time.Duration;
 import java.time.LocalDateTime;
 import java.util.*;
 
@@ -149,6 +150,11 @@ public class PushUtil {
             if (Objects.isNull(pushParam.getType())) {
                 pushParam.setType(" ");
             }
+            long minutes = (long) Math.ceil(
+                    Duration.between(pushParam.getFirstAlarmTime().toInstant(),
+                            pushParam.getRecoverTime().toInstant()).getSeconds() / 60.0
+            );
+            pushParam.setType(pushParam.getType() + "(告警时长:" + minutes + "分钟)");
             templateMessage.addData(new WxMpTemplateData("thing4", pushParam.getType()));
             //告警值
             if (StrUtil.isBlank(pushParam.getValue())) {

+ 2 - 0
snowy-web-app/src/main/resources/application.properties

@@ -270,9 +270,11 @@ qp.appKey=CdiC6zSNR
 qp.appSecret=a098d282b91211efbca452540055385a
 
 airnow.save.enable=true
+#airnow.save.enable=false
 #airnow.save.crno=0/10 * * * * ?
 airnow.save.crno=0 0/1 * * * ?
 
 private.flag=false
+#private.flag=true
 private.cron=0 0/5 * * * ?
 #private.cron=0/5 * * * * ?