Browse Source

fix: 公众号关联

jackzhou 9 months ago
parent
commit
f3d7162220

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

@@ -37,9 +37,6 @@ public class SensorAlarm extends CommonEntity {
     @Schema(description = "告警值,表示触发告警的实际数值,例如超标的温度值")
     @Schema(description = "告警值,表示触发告警的实际数值,例如超标的温度值")
     private float value;
     private float value;
 
 
-    /**
-     * 告警接收人,存储告警通知的接收用户信息
-     */
     /**
     /**
      * 告警接收人,存储告警通知的接收用户信息
      * 告警接收人,存储告警通知的接收用户信息
      */
      */

+ 1 - 1
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/core/alarm/bean/SensorAlarmUser.java

@@ -17,7 +17,7 @@ public class SensorAlarmUser {
     private String userId;
     private String userId;
 
 
     /**
     /**
-     * 用户的OpenID,通常用于与外部系统(如微信、钉钉等)进行集成,便于推送消息
+     * 用户的微信公众号OpenID,通常用于与外部系统(如微信、钉钉等)进行集成,便于推送消息
      */
      */
     private String openId;
     private String openId;
 
 

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

@@ -5,6 +5,7 @@ import com.fasterxml.jackson.databind.annotation.JsonSerialize;
 import io.swagger.v3.oas.annotations.media.Schema;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
 import lombok.Data;
 import vip.xiaonuo.coldchain.modular.app.param.FloatNullToDashSerializer;
 import vip.xiaonuo.coldchain.modular.app.param.FloatNullToDashSerializer;
+import vip.xiaonuo.coldchain.modular.monitortargetregion.entity.MonitorTargetRegion;
 
 
 /**
 /**
  * @author jackzhou
  * @author jackzhou
@@ -61,4 +62,20 @@ public class SensorThreshold {
     @JsonSerialize(using = FloatNullToDashSerializer.class)
     @JsonSerialize(using = FloatNullToDashSerializer.class)
     @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "#.00")
     @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "#.00")
     private Float co2Down;
     private Float co2Down;
+
+    @Schema(description = "设备探头信息")
+    private MonitorTargetRegion monitorTargetRegion;
+
+    public SensorThreshold() {
+    }
+
+    public SensorThreshold(MonitorTargetRegion monitorTargetRegion) {
+        this.monitorTargetRegion = monitorTargetRegion;
+        this.co2Down = monitorTargetRegion.getCo2Down();
+        this.co2Up = monitorTargetRegion.getCo2Up();
+        this.humidityDown = monitorTargetRegion.getHumidityDown();
+        this.humidityUp = monitorTargetRegion.getHumidityUp();
+        this.temperatureDown = monitorTargetRegion.getTemperatureDown();
+        this.temperatureUp = monitorTargetRegion.getTemperatureUp();
+    }
 }
 }

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

@@ -29,25 +29,24 @@ public class DefaultSensorAlarmChecker implements SensorAlarmChecker {
         if (sensorData == null) {
         if (sensorData == null) {
             throw new IllegalArgumentException("传感器数据不能为空!");
             throw new IllegalArgumentException("传感器数据不能为空!");
         }
         }
-
         // 获取传感器阈值配置
         // 获取传感器阈值配置
         SensorThreshold threshold = thresholdService.getThresholdBySensorId(sensorData.getDeviceId(), sensorData.getRoads());
         SensorThreshold threshold = thresholdService.getThresholdBySensorId(sensorData.getDeviceId(), sensorData.getRoads());
         if (threshold == null) {
         if (threshold == null) {
             log.warn("没有找到设备 {} 的阈值配置", sensorData.getDeviceId());
             log.warn("没有找到设备 {} 的阈值配置", sensorData.getDeviceId());
             return false;
             return false;
         }
         }
+        final  String deviceName = threshold.getMonitorTargetRegion().getDeviceName();
         // 检查传感器数据并触发报警
         // 检查传感器数据并触发报警
         boolean alarmTriggered = false;
         boolean alarmTriggered = false;
         if (sensorData.getTemperature() != null) {
         if (sensorData.getTemperature() != null) {
-            alarmTriggered = checkThreshold(sensorData.getTemperature(), threshold.getTemperatureUp(), threshold.getTemperatureDown(), "温度", sensorData);
+            alarmTriggered = checkThreshold(sensorData.getTemperature(), threshold.getTemperatureUp(), threshold.getTemperatureDown(), "温度", deviceName);
         }
         }
         if (sensorData.getHumidity() != null) {
         if (sensorData.getHumidity() != null) {
-            alarmTriggered |= checkThreshold(sensorData.getHumidity(), threshold.getHumidityUp(), threshold.getHumidityDown(), "湿度", sensorData);
+            alarmTriggered |= checkThreshold(sensorData.getHumidity(), threshold.getHumidityUp(), threshold.getHumidityDown(), "湿度", deviceName);
         }
         }
         if (sensorData.getCo2() != null) {
         if (sensorData.getCo2() != null) {
-            alarmTriggered |= checkThreshold(sensorData.getCo2(), threshold.getCo2Up(), threshold.getCo2Down(), "二氧化碳", sensorData);
+            alarmTriggered |= checkThreshold(sensorData.getCo2(), threshold.getCo2Up(), threshold.getCo2Down(), "二氧化碳", deviceName);
         }
         }
-
         return alarmTriggered;
         return alarmTriggered;
     }
     }
 
 
@@ -58,12 +57,11 @@ public class DefaultSensorAlarmChecker implements SensorAlarmChecker {
      * @param upperThreshold 阈值上限
      * @param upperThreshold 阈值上限
      * @param lowerThreshold 阈值下限
      * @param lowerThreshold 阈值下限
      * @param type           数据类型(温度、湿度、二氧化碳)
      * @param type           数据类型(温度、湿度、二氧化碳)
-     * @param sensorData     传感器数据
+     * @param deviceName     设备名称
      * @return 是否触发报警
      * @return 是否触发报警
      */
      */
-    private boolean checkThreshold(Float value, Float upperThreshold, Float lowerThreshold, String type, SensorData sensorData) {
+    private boolean checkThreshold(Float value, Float upperThreshold, Float lowerThreshold, String type, String deviceName) {
         boolean alarmTriggered = false;
         boolean alarmTriggered = false;
-        String deviceName = "设备名称";
         String time = DATE_FORMAT.format(new Date()); // 获取当前时间
         String time = DATE_FORMAT.format(new Date()); // 获取当前时间
         String unit = getUnit(type);
         String unit = getUnit(type);
         if (value > upperThreshold) {
         if (value > upperThreshold) {
@@ -138,15 +136,11 @@ public class DefaultSensorAlarmChecker implements SensorAlarmChecker {
     }
     }
 
 
     private String getUnit(String sensorType) {
     private String getUnit(String sensorType) {
-        switch (sensorType) {
-            case "温度":
-                return "°C";
-            case "湿度":
-                return "%";
-            case "二氧化碳":
-                return "ppm";
-            default:
-                return "";
-        }
+        return switch (sensorType) {
+            case "温度" -> "°C";
+            case "湿度" -> "%";
+            case "二氧化碳" -> "ppm";
+            default -> "";
+        };
     }
     }
 }
 }

+ 4 - 2
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/core/alarm/service/messagepush/impl/WechatMessagePushService.java

@@ -23,11 +23,13 @@ public class WechatMessagePushService implements MessagePushService {
     @Override
     @Override
     public boolean sendAlarmMessage(SensorAlarm alarm, SensorAlarmUser user) {
     public boolean sendAlarmMessage(SensorAlarm alarm, SensorAlarmUser user) {
         String message = alarm.getMessage();
         String message = alarm.getMessage();
-        List<String> myList = Lists.newArrayList("oltp26fXeljOKUxYGhAx_dRqVAak", "oltp26cDdkiAAsualbzKMyiZbJrU");
-        PushParam pushParam = new PushParam("1.0");
+
+        PushParam pushParam = new PushParam(alarm.getValue()+"");
         pushParam.setContext(message);
         pushParam.setContext(message);
         pushParam.setDeviceName(alarm.getSource());
         pushParam.setDeviceName(alarm.getSource());
         pushParam.setNoticeTime(new Date());
         pushParam.setNoticeTime(new Date());
+        pushParam.setType(alarm.getAlarmType());
+        //推送到公众号
         String pushCode = PushUtil.push(pushParam);
         String pushCode = PushUtil.push(pushParam);
         alarm.setWeixinRequestCode(pushCode);
         alarm.setWeixinRequestCode(pushCode);
         return !StrUtil.isBlank(pushCode);
         return !StrUtil.isBlank(pushCode);

+ 1 - 5
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/core/alarm/service/threshold/SensorThresholdService.java

@@ -8,7 +8,6 @@ package vip.xiaonuo.coldchain.core.alarm.service.threshold;
  * @date 2024/11/25 17:13:50
  * @date 2024/11/25 17:13:50
  */
  */
 
 
-import cn.hutool.core.bean.BeanUtil;
 import lombok.RequiredArgsConstructor;
 import lombok.RequiredArgsConstructor;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 import vip.xiaonuo.coldchain.core.alarm.bean.SensorThreshold;
 import vip.xiaonuo.coldchain.core.alarm.bean.SensorThreshold;
@@ -29,9 +28,6 @@ public class SensorThresholdService implements ThresholdService {
         if (oneByDeviceCodeAndSensorNo == null) {
         if (oneByDeviceCodeAndSensorNo == null) {
             return null;
             return null;
         }
         }
-        SensorThreshold sensorThreshold = new SensorThreshold();
-        BeanUtil.copyProperties(oneByDeviceCodeAndSensorNo, sensorThreshold);
-        return sensorThreshold;
-
+        return new SensorThreshold(oneByDeviceCodeAndSensorNo);
     }
     }
 }
 }

+ 0 - 1
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/core/event/SensorAlarmEventListener.java

@@ -30,7 +30,6 @@ public class SensorAlarmEventListener {
     @Async
     @Async
     @EventListener
     @EventListener
     public void handleSensorAlarmEvent(SensorAlarmEvent event) {
     public void handleSensorAlarmEvent(SensorAlarmEvent event) {
-
         sensorAlarmMessagePushService.pushAlarmMessage(event.getSensorAlarm());
         sensorAlarmMessagePushService.pushAlarmMessage(event.getSensorAlarm());
     }
     }
 }
 }

+ 10 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitortarget/entity/MonitorTarget.java

@@ -15,9 +15,12 @@ package vip.xiaonuo.coldchain.modular.monitortarget.entity;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.google.common.collect.Lists;
 import io.swagger.v3.oas.annotations.media.Schema;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Getter;
 import lombok.Getter;
 import lombok.Setter;
 import lombok.Setter;
+import vip.xiaonuo.coldchain.core.alarm.bean.SensorAlarmUser;
+import vip.xiaonuo.coldchain.core.handler.SensorAlarmUserTypeHandler;
 import vip.xiaonuo.coldchain.modular.monitortargetregion.entity.MonitorTargetRegion;
 import vip.xiaonuo.coldchain.modular.monitortargetregion.entity.MonitorTargetRegion;
 
 
 import java.util.Date;
 import java.util.Date;
@@ -112,4 +115,11 @@ public class MonitorTarget {
      */
      */
     @Schema(description = "最近登录时间")
     @Schema(description = "最近登录时间")
     private Date lastLoginTime;
     private Date lastLoginTime;
+
+    /**
+     * 告警接收人,存储告警通知的接收用户信息
+     */
+    @TableField(value = "alarm_users", typeHandler = SensorAlarmUserTypeHandler.class)
+    @Schema(description = "告警接收人,存储告警通知的接收用户信息")
+    private List<SensorAlarmUser> alarmUsers = Lists.newArrayList();
 }
 }

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

@@ -18,12 +18,16 @@ import com.baomidou.mybatisplus.annotation.TableName;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.fasterxml.jackson.databind.annotation.JsonSerialize;
 import com.fasterxml.jackson.databind.annotation.JsonSerialize;
 
 
+import com.google.common.collect.Lists;
 import io.swagger.v3.oas.annotations.media.Schema;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Getter;
 import lombok.Getter;
 import lombok.Setter;
 import lombok.Setter;
+import vip.xiaonuo.coldchain.core.alarm.bean.SensorAlarmUser;
+import vip.xiaonuo.coldchain.core.handler.SensorAlarmUserTypeHandler;
 import vip.xiaonuo.coldchain.modular.app.param.FloatNullToDashSerializer;
 import vip.xiaonuo.coldchain.modular.app.param.FloatNullToDashSerializer;
 
 
 import java.util.Date;
 import java.util.Date;
+import java.util.List;
 
 
 /**
 /**
  * 区域管理实体
  * 区域管理实体
@@ -35,7 +39,6 @@ import java.util.Date;
 @Setter
 @Setter
 @TableName("monitor_target_region")
 @TableName("monitor_target_region")
 public class MonitorTargetRegion {
 public class MonitorTargetRegion {
-
     /**
     /**
      * 区域唯一标识符,UUID
      * 区域唯一标识符,UUID
      */
      */
@@ -182,4 +185,11 @@ public class MonitorTargetRegion {
     @Schema(description = "监控设备名称")
     @Schema(description = "监控设备名称")
     private String deviceName;
     private String deviceName;
 
 
+    /**
+     * 告警接收人,存储告警通知的接收用户信息
+     */
+    @TableField(value = "alarm_users", typeHandler = SensorAlarmUserTypeHandler.class)
+    @Schema(description = "告警接收人,存储告警通知的接收用户信息")
+    private List<SensorAlarmUser> alarmUsers = Lists.newArrayList();
+
 }
 }

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

@@ -11,6 +11,7 @@ import me.chanjar.weixin.mp.config.impl.WxMpDefaultConfigImpl;
 import vip.xiaonuo.coldchain.modular.push.config.PushConfigure;
 import vip.xiaonuo.coldchain.modular.push.config.PushConfigure;
 import vip.xiaonuo.coldchain.modular.push.param.PushParam;
 import vip.xiaonuo.coldchain.modular.push.param.PushParam;
 
 
+import java.util.Date;
 import java.util.Objects;
 import java.util.Objects;
 
 
 /**
 /**