From fbc2429987b5d9a645349fabeb2960948d07fef4 Mon Sep 17 00:00:00 2001
From: zouyu <2723363702@qq.com>
Date: 星期一, 24 十一月 2025 12:48:59 +0800
Subject: [PATCH] 伸长率、电阻数采对接新Iot平台数据

---
 cnas-device/src/main/java/com/ruoyi/device/service/impl/CollectBridgeServiceImpl.java |   77 +++++++++++++++++++++++++-------------
 1 files changed, 50 insertions(+), 27 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 5968267..4d35e6d 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
@@ -17,13 +17,12 @@
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.time.Duration;
-import java.time.Instant;
 import java.time.LocalDateTime;
-import java.time.ZoneId;
 import java.util.List;
 import java.util.Map;
 import java.util.Objects;
@@ -113,16 +112,17 @@
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public void dcResistanceDataAnalysis(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());
+        if(CollectionUtil.isNotEmpty(dataMap)){
             //杩囨护鍑哄寘鍚疄闄呯數闃诲�肩殑瀵硅薄
-            String entrustCode = getValueByDataStream(dataList,DCResistanceMqttConstants.NSDQCS_DQCS_SN);
-            BigDecimal zxdzzValue = new BigDecimal(getValueByDataStream(dataList,DCResistanceMqttConstants.NSDQCS_DQCS_ZXDZZ));
-            BigDecimal fxdzzValue = new BigDecimal(getValueByDataStream(dataList,DCResistanceMqttConstants.NSDQCS_DQCS_FXDZZ));
+            String entrustCode = getValueByDataStream(dataMap,DCResistanceMqttConstants.NSDQCS_DQCS_SN);
+            String deviceCode = getValueByDataStream(dataMap,DCResistanceMqttConstants.deviceName);
+            BigDecimal zxdzzValue = new BigDecimal(getValueByDataStream(dataMap,DCResistanceMqttConstants.NSDQCS_DQCS_ZXDZZ));
+            BigDecimal fxdzzValue = new BigDecimal(getValueByDataStream(dataMap,DCResistanceMqttConstants.NSDQCS_DQCS_FXDZZ));
 //            BigDecimal testLength = new BigDecimal(getValueByDataStream(dataList,DCResistanceMqttConstants.NSDQCS_DQCS_CD));
-            Double tempValue = new BigDecimal(getValueByDataStream(dataList,DCResistanceMqttConstants.NSDQCS_DQCS_WD)).setScale(2, RoundingMode.HALF_UP).doubleValue();
+            Double tempValue = new BigDecimal(getValueByDataStream(dataMap,DCResistanceMqttConstants.NSDQCS_DQCS_WD)).setScale(2, RoundingMode.HALF_UP).doubleValue();
             //璁$畻骞冲潎鐢甸樆鍊�
             BigDecimal value = zxdzzValue.abs().add(fxdzzValue.abs()).divide(BigDecimal.valueOf(2L), RoundingMode.HALF_UP);
             Long count = collectBridgeMapper.selectCount(Wrappers.<CollectBridge>lambdaQuery().eq(CollectBridge::getEntrustCode, entrustCode));
@@ -131,9 +131,10 @@
                         .set(CollectBridge::getCollectValue,value)
                         .set(CollectBridge::getCollectTemperature,tempValue)
                         .set(CollectBridge::getLastCollectDate,LocalDateTime.now())
+                        .eq(CollectBridge::getDeviceCode,deviceCode)
                         .eq(CollectBridge::getEntrustCode,entrustCode));
             }else{
-                collectBridgeMapper.insert(new CollectBridge(entrustCode,value,tempValue,LocalDateTime.now(),LocalDateTime.now()));
+                collectBridgeMapper.insert(new CollectBridge(entrustCode,deviceCode,value,tempValue,LocalDateTime.now(),LocalDateTime.now()));
             }
         }
     }
@@ -141,41 +142,35 @@
     @Override
     public void elongationDataAnalysis(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());
+        if(CollectionUtil.isNotEmpty(dataMap)){
             // 浼搁暱鐜囷細澶勭悊 NSTSSC.TSSC.SCL 鏁版嵁
-            processMultipleValueDataStream(dataList, ElongationMqttConstants.NSTSSC_TSSC_SCL,3,10.0);
+            processMultipleValueDataStream(dataMap, ElongationMqttConstants.NSTSSC_TSSC_SCL,3,10.0);
         }
     }
 
     /**
      * 鑾峰彇mqtt娑堟伅浣撲腑瀵瑰簲鏍囪瘑鐨勫��
-     * @param dataList 鏁版嵁鍒楄〃
+     * @param dataMap 鏁版嵁鍒楄〃
      * @param dataStream 鏁版嵁娴佹爣璇�
      */
-    private String 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();
-            return CollectionUtil.isNotEmpty(dataPoints)?dataPoints.get(0).getValue():"";
+    private String getValueByDataStream(Map<String,Object> dataMap, String dataStream) {
+        try{
+            return dataMap.get(dataStream).toString();
+        }catch (Exception e){
+            return "";
         }
-        return "";
     }
 
     /**
      * 澶勭悊闇�瑕佷繚瀛樺涓�肩殑鏁版嵁娴侊紝骞朵繚瀛樺埌 Redis
-     * @param dataList 鏁版嵁鍒楄〃
+     * @param dataMap 鏁版嵁鍒楄〃
      * @param dataStream 鏁版嵁娴佹爣璇�
      * @param maxSize 淇濆瓨鐨勬渶澶т釜鏁�
      * @param minVal 瀛樺偍鏁版嵁鐨勬渶灏忓�硷紝浣庝簬璇ュ�煎垯璺宠繃锛�-1浠h〃涓嶉檺鍒�
      */
-    private void processMultipleValueDataStream(List<DeviceMqttVO> dataList, String dataStream,int maxSize,Double minVal){
+    private void processMultipleValueDataStream(Map<String,Object> dataMap, String dataStream,int maxSize,Double minVal){
         // 绛涢�夊嚭褰撳墠鏁版嵁娴佸搴旂殑鏁版嵁
-        Double value = Double.parseDouble(getValueByDataStream(dataList, dataStream));
-//        Double value = BigDecimal.valueOf(Math.random()*100).setScale(7, RoundingMode.HALF_EVEN).doubleValue();
+        Double value = Double.parseDouble(getValueByDataStream(dataMap, dataStream));
         //濡傛灉鏈�灏忓�间笉涓虹┖涓斾笉涓�-1锛岃幏鍙栧埌鐨勫�煎皬浜庢渶灏忓�煎垯璺宠繃涓嶅仛澶勭悊
         if(Objects.nonNull(minVal)&&minVal!=-1&&value<minVal){
             return;
@@ -189,7 +184,35 @@
                 RedisUtil.delZSetRange(dataStream,0,0);
             }
         }
-        RedisUtil.addZSet(dataStream,System.currentTimeMillis(),value);
+        String deviceCode = getValueByDataStream(dataMap,ElongationMqttConstants.deviceName);
+        RedisUtil.addZSet(dataStream+"."+deviceCode,System.currentTimeMillis(),value);
+    }
+
+    /**
+     * 澶勭悊闇�瑕佷繚瀛樺涓�肩殑鏁版嵁娴侊紝骞朵繚瀛樺埌 Redis
+     * @param dataMap 鏁版嵁鍒楄〃
+     * @param dataStream 鏁版嵁娴佹爣璇�
+     * @param maxSize 淇濆瓨鐨勬渶澶т釜鏁�
+     * @param minVal 瀛樺偍鏁版嵁鐨勬渶灏忓�硷紝浣庝簬璇ュ�煎垯璺宠繃锛�-1浠h〃涓嶉檺鍒�
+     * @param deviceCode 璁惧缂栧彿
+     */
+    private void processMultipleValueDataStream(Map<String,Object> dataMap, String dataStream,int maxSize,Double minVal,String deviceCode){
+        // 绛涢�夊嚭褰撳墠鏁版嵁娴佸搴旂殑鏁版嵁
+        Double value = Double.parseDouble(dataMap.get(dataStream).toString());
+        //濡傛灉鏈�灏忓�间笉涓虹┖涓斾笉涓�-1锛岃幏鍙栧埌鐨勫�煎皬浜庢渶灏忓�煎垯璺宠繃涓嶅仛澶勭悊
+        if(Objects.nonNull(minVal)&&minVal!=-1&&value<minVal){
+            return;
+        }
+        //鍒ゆ柇key鏄惁瀛樺湪
+        boolean existKey = RedisUtil.hasKey(dataStream);
+        if(existKey){
+            long zSetSize = RedisUtil.getZSetSize(dataStream);
+            //濡傛灉鏁版嵁闀垮害瓒呰繃鏈�澶т釜鏁帮紝鍒欏垹闄ゅ垎鏁版渶浣庣殑鏁版嵁
+            if(zSetSize>=maxSize){
+                RedisUtil.delZSetRange(dataStream,0,0);
+            }
+        }
+        RedisUtil.addZSet(dataStream+"."+deviceCode,System.currentTimeMillis(),value);
     }
 
     /**

--
Gitblit v1.9.3