From 7c5e1ef7db84731610d5616b2ee7e6e63abd886d Mon Sep 17 00:00:00 2001
From: zouyu <2723363702@qq.com>
Date: 星期五, 01 八月 2025 13:21:02 +0800
Subject: [PATCH] mqtt回调方法调整

---
 cnas-device/src/main/java/com/ruoyi/device/service/impl/CollectBridgeServiceImpl.java |   65 +++++++++++++++++---------------
 1 files changed, 35 insertions(+), 30 deletions(-)

diff --git a/cnas-device/src/main/java/com/ruoyi/device/service/impl/CollectBridgeServiceImpl.java b/cnas-device/src/main/java/com/ruoyi/device/service/impl/CollectBridgeServiceImpl.java
index f952d2b..874a419 100644
--- a/cnas-device/src/main/java/com/ruoyi/device/service/impl/CollectBridgeServiceImpl.java
+++ b/cnas-device/src/main/java/com/ruoyi/device/service/impl/CollectBridgeServiceImpl.java
@@ -13,7 +13,7 @@
 import com.ruoyi.device.mapper.CollectBridgeMapper;
 import com.ruoyi.device.pojo.CollectBridge;
 import com.ruoyi.device.service.CollectBridgeService;
-import com.ruoyi.device.vo.DCResistanceMqttVO;
+import com.ruoyi.device.vo.DeviceMqttVO;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 
@@ -111,10 +111,11 @@
     public void addBridgeValueByNS(String jsonStr) {
         Map<String, Object> dataMap = JSONObject.parseObject(jsonStr, new TypeReference<Map<String, Object>>(){}.getType());
         if(CollectionUtil.isNotEmpty(dataMap) && Objects.nonNull(dataMap.get("data"))){
-            List<DCResistanceMqttVO> dataList = JSONArray.parseObject(dataMap.get("data").toString(), new TypeReference<List<DCResistanceMqttVO>>(){}.getType());
+            List<DeviceMqttVO> dataList = JSONArray.parseObject(dataMap.get("data").toString(), new TypeReference<List<DeviceMqttVO>>(){}.getType());
             //杩囨护鍑哄寘鍚疄闄呯數闃诲�肩殑瀵硅薄
             // 澶勭悊 NSDQCS.DQCS.DZZ 鏁版嵁
-            processSingleValueDataStream(dataList, DCResistanceMqttConstants.NSDQCS_DQCS_DZZ);
+            Double value = getValueByDataStream(dataList,DCResistanceMqttConstants.NSDQCS_DQCS_DZZ);
+            RedisUtil.set(DCResistanceMqttConstants.NSDQCS_DQCS_DZZ, value);
         }
     }
 
@@ -122,28 +123,49 @@
     public void addBridgeValueByNSD(String jsonStr) {
         Map<String, Object> dataMap = JSONObject.parseObject(jsonStr, new TypeReference<Map<String, Object>>(){}.getType());
         if(CollectionUtil.isNotEmpty(dataMap) && Objects.nonNull(dataMap.get("data"))){
-            List<DCResistanceMqttVO> dataList = JSONArray.parseObject(dataMap.get("data").toString(), new TypeReference<List<DCResistanceMqttVO>>(){}.getType());
+            List<DeviceMqttVO> dataList = JSONArray.parseObject(dataMap.get("data").toString(), new TypeReference<List<DeviceMqttVO>>(){}.getType());
             //杩囨护鍑哄寘鍚疄闄呯數闃诲�肩殑瀵硅薄
             // 澶勭悊 NSTSSC.TSSC.WY 鏁版嵁
-            processThreeTimesValueDataStream(dataList, ElongationMqttConstants.NSTSSC_TSSC_WY);
+            processMultipleValueDataStream(dataList, ElongationMqttConstants.NSTSSC_TSSC_WY,3);
         }
     }
 
     /**
-     * 澶勭悊鍗曞�兼暟鎹祦鐨勬暟鎹苟淇濆瓨鍒� Redis
+     * 鑾峰彇mqtt娑堟伅浣撲腑瀵瑰簲鏍囪瘑鐨勫��
      * @param dataList 鏁版嵁鍒楄〃
      * @param dataStream 鏁版嵁娴佹爣璇�
      */
-    private void processSingleValueDataStream(List<DCResistanceMqttVO> dataList, String dataStream) {
-        DCResistanceMqttVO dcResistanceMqttVO = dataList.stream()
+    private Double getValueByDataStream(List<DeviceMqttVO> dataList, String dataStream) {
+        DeviceMqttVO deviceMqttVO = dataList.stream()
                 .filter(f -> StringUtils.equals(f.getDataStream(), dataStream))
                 .findFirst()
                 .orElse(null);
-        if(Objects.nonNull(dcResistanceMqttVO)){
-            List<DCResistanceMqttVO.DataPoint> dataPoints = dcResistanceMqttVO.getDataPoints();
+        if(Objects.nonNull(deviceMqttVO)){
+            List<DeviceMqttVO.DataPoint> dataPoints = deviceMqttVO.getDataPoints();
             BigDecimal value = CollectionUtil.isNotEmpty(dataPoints)?dataPoints.get(0).getValue():BigDecimal.ZERO;
-            // 淇濆瓨鍗曚釜鍊煎埌 redis
-            RedisUtil.set(dataStream, value.doubleValue());
+            return value.doubleValue();
+        }
+        return 0.0;
+    }
+
+    /**
+     * 澶勭悊闇�瑕佷繚瀛樺涓�肩殑鏁版嵁娴侊紝骞朵繚瀛樺埌 Redis
+     * @param dataList 鏁版嵁鍒楄〃
+     * @param dataStream 鏁版嵁娴佹爣璇�
+     * @param maxSize 淇濆瓨鐨勬渶澶т釜鏁�
+     */
+    private void processMultipleValueDataStream(List<DeviceMqttVO> dataList, String dataStream,int maxSize){
+        // 绛涢�夊嚭褰撳墠鏁版嵁娴佸搴旂殑鏁版嵁
+        Double value = getValueByDataStream(dataList, dataStream);
+        //鍒ゆ柇key鏄惁瀛樺湪
+        boolean existKey = RedisUtil.hasKey(dataStream);
+        if(existKey){
+            long listSize = RedisUtil.lGetListSize(dataStream);
+            if(listSize<maxSize){
+                RedisUtil.lSet(dataStream,value);
+            }
+        }else{
+            RedisUtil.lSet(dataStream,value);
         }
     }
 
@@ -152,7 +174,7 @@
      * @param dataList 鏁版嵁鍒楄〃
      * @param dataStream 鏁版嵁娴佹爣璇�
      */
-    private void processThreeTimesValueDataStream(List<DCResistanceMqttVO> dataList, String dataStream) {
+    private void processThreeTimesValueDataStream(List<DeviceMqttVO> dataList, String dataStream) {
         // 浠� Redis 鑾峰彇宸插瓨鍌ㄧ殑鍊�
         Object valueFromRedis = RedisUtil.get(dataStream);
         JSONArray valueArray = new JSONArray();
@@ -171,24 +193,7 @@
             }
         }
 
-        // 绛涢�夊嚭褰撳墠鏁版嵁娴佸搴旂殑鏁版嵁
-        DCResistanceMqttVO dcResistanceMqttVO = dataList.stream()
-                .filter(f -> StringUtils.equals(f.getDataStream(), dataStream))
-                .findFirst()
-                .orElse(null);
 
-        if (Objects.nonNull(dcResistanceMqttVO)) {
-            List<DCResistanceMqttVO.DataPoint> dataPoints = dcResistanceMqttVO.getDataPoints();
-            if (CollectionUtil.isNotEmpty(dataPoints)) {
-                BigDecimal value = dataPoints.get(0).getValue();
-                valueArray.add(value.doubleValue());
-
-                // 鍙繚鐣欐渶鏂扮殑涓変釜鍊�
-                if (valueArray.size() > 3) {
-                    valueArray.remove(0);
-                }
-            }
-        }
 
         // 灏嗘洿鏂板悗鐨勫�间繚瀛樺埌 Redis
         RedisUtil.set(dataStream, valueArray.toJSONString());

--
Gitblit v1.9.3