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 |   94 ++++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 85 insertions(+), 9 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 6024f31..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
@@ -9,10 +9,11 @@
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ruoyi.common.utils.RedisUtil;
 import com.ruoyi.device.constant.DCResistanceMqttConstants;
+import com.ruoyi.device.constant.ElongationMqttConstants;
 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;
 
@@ -110,18 +111,93 @@
     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());
             //杩囨护鍑哄寘鍚疄闄呯數闃诲�肩殑瀵硅薄
-            DCResistanceMqttVO dcResistanceMqttVO = dataList.stream().filter(f -> StringUtils.equals(f.getDataStream(), DCResistanceMqttConstants.NSDQCS_DQCS_DZZ)).findFirst().orElse(null);
-            if(Objects.nonNull(dcResistanceMqttVO)){
-                List<DCResistanceMqttVO.DataPoint> dataPoints = dcResistanceMqttVO.getDataPoints();
-                BigDecimal value = CollectionUtil.isNotEmpty(dataPoints)?dataPoints.get(0).getValue():BigDecimal.ZERO;
-                //淇濆瓨瀹為檯鐢甸樆鍊煎埌redis
-                RedisUtil.set(DCResistanceMqttConstants.NSDQCS_DQCS_DZZ,value.doubleValue());
-            }
+            // 澶勭悊 NSDQCS.DQCS.DZZ 鏁版嵁
+            Double value = getValueByDataStream(dataList,DCResistanceMqttConstants.NSDQCS_DQCS_DZZ);
+            RedisUtil.set(DCResistanceMqttConstants.NSDQCS_DQCS_DZZ, value);
         }
     }
 
+    @Override
+    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<DeviceMqttVO> dataList = JSONArray.parseObject(dataMap.get("data").toString(), new TypeReference<List<DeviceMqttVO>>(){}.getType());
+            //杩囨护鍑哄寘鍚疄闄呯數闃诲�肩殑瀵硅薄
+            // 澶勭悊 NSTSSC.TSSC.WY 鏁版嵁
+            processMultipleValueDataStream(dataList, ElongationMqttConstants.NSTSSC_TSSC_WY,3);
+        }
+    }
+
+    /**
+     * 鑾峰彇mqtt娑堟伅浣撲腑瀵瑰簲鏍囪瘑鐨勫��
+     * @param dataList 鏁版嵁鍒楄〃
+     * @param dataStream 鏁版嵁娴佹爣璇�
+     */
+    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(deviceMqttVO)){
+            List<DeviceMqttVO.DataPoint> dataPoints = deviceMqttVO.getDataPoints();
+            BigDecimal value = CollectionUtil.isNotEmpty(dataPoints)?dataPoints.get(0).getValue():BigDecimal.ZERO;
+            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);
+        }
+    }
+
+    /**
+     * 澶勭悊闇�瑕佽幏鍙栦笁娆′笉鍚屽�肩殑鏁版嵁娴侊紝骞朵繚瀛樺埌 Redis
+     * @param dataList 鏁版嵁鍒楄〃
+     * @param dataStream 鏁版嵁娴佹爣璇�
+     */
+    private void processThreeTimesValueDataStream(List<DeviceMqttVO> dataList, String dataStream) {
+        // 浠� Redis 鑾峰彇宸插瓨鍌ㄧ殑鍊�
+        Object valueFromRedis = RedisUtil.get(dataStream);
+        JSONArray valueArray = new JSONArray();
+
+        if (valueFromRedis != null) {
+            if (valueFromRedis instanceof String) {
+                try {
+                    valueArray = JSONArray.parseArray((String) valueFromRedis);
+                } catch (Exception e) {
+                    // 濡傛灉瑙f瀽澶辫触锛岃鏄� Redis 涓殑鍊煎彲鑳戒笉鏄悎娉曠殑 JSON 鏁扮粍锛屽垱寤虹┖鏁扮粍
+                    valueArray = new JSONArray();
+                }
+            } else if (valueFromRedis instanceof Double) {
+                // 濡傛灉鏄� Double 绫诲瀷锛屽皢鍏舵坊鍔犲埌鏁扮粍涓�
+                valueArray.add(valueFromRedis);
+            }
+        }
+
+
+
+        // 灏嗘洿鏂板悗鐨勫�间繚瀛樺埌 Redis
+        RedisUtil.set(dataStream, valueArray.toJSONString());
+    }
     public static boolean isWithinTenMinutes(LocalDateTime dateTime1, LocalDateTime dateTime2) {
         Duration duration = Duration.between(dateTime1, dateTime2);
         long minutesDifference = Math.abs(duration.toMinutes());

--
Gitblit v1.9.3