From c65ab218b14e87489f1594b2d932f7bd54b3ba11 Mon Sep 17 00:00:00 2001
From: zouyu <2723363702@qq.com>
Date: 星期五, 17 十月 2025 13:34:19 +0800
Subject: [PATCH] 数采调整

---
 cnas-device/src/main/java/com/ruoyi/device/service/impl/CollectBridgeServiceImpl.java |  229 ++++++++++++++++++++++++++++++++-------------------------
 1 files changed, 128 insertions(+), 101 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 8fa0b1c..96663aa 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,14 +9,17 @@
 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.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.time.Duration;
 import java.time.Instant;
 import java.time.LocalDateTime;
@@ -35,112 +38,153 @@
 @Slf4j
 public class CollectBridgeServiceImpl extends ServiceImpl<CollectBridgeMapper, CollectBridge> implements CollectBridgeService {
 
+    @Autowired
+    private CollectBridgeMapper collectBridgeMapper;
+
     /**
      * 濉厖閲囬泦鏁版嵁
      * @param jsonObject
      */
     @Override
     public void addBridgeValue(JSONObject jsonObject) {
-        JSONArray dataArray = jsonObject.getJSONArray("data");
-        for (int i = 0; i < dataArray.size(); i++) {
-            JSONObject listInfo = dataArray.getJSONObject(i);
-            // 瀛樺偍鏁版嵁
-            String dataStream = listInfo.getString("dataStream");
-            if (dataStream.equals("DQCS.DQCS.SN")) {
-                JSONArray dataPoints = listInfo.getJSONArray("dataPoints");
-                JSONObject pointsJSONObject = dataPoints.getJSONObject(0);
-                String entrustCode = pointsJSONObject.getString("value");
-                // 瑙f瀽鏃堕棿鎴�
-                Instant instant = Instant.ofEpochMilli(pointsJSONObject.getLong("time"));
-                LocalDateTime collectDate = LocalDateTime.ofInstant(instant, ZoneId.systemDefault());
+//        JSONArray dataArray = jsonObject.getJSONArray("data");
+//        for (int i = 0; i < dataArray.size(); i++) {
+//            JSONObject listInfo = dataArray.getJSONObject(i);
+//            // 瀛樺偍鏁版嵁
+//            String dataStream = listInfo.getString("dataStream");
+//            if (dataStream.equals("DQCS.DQCS.SN")) {
+//                JSONArray dataPoints = listInfo.getJSONArray("dataPoints");
+//                JSONObject pointsJSONObject = dataPoints.getJSONObject(0);
+//                String entrustCode = pointsJSONObject.getString("value");
+//                // 瑙f瀽鏃堕棿鎴�
+//                Instant instant = Instant.ofEpochMilli(pointsJSONObject.getLong("time"));
+//                LocalDateTime collectDate = LocalDateTime.ofInstant(instant, ZoneId.systemDefault());
+//
+//                // 鍏堝瓨鍌ㄧ紪鍙�, 鍚庣画瀛樺偍鍊�
+//                CollectBridge collectBridge = new CollectBridge();
+//                collectBridge.setEntrustCode(entrustCode);
+//                collectBridge.setCollectDate(collectDate);
+//                baseMapper.insert(collectBridge);
+//
+//            }
+//            // 瀵勫瓨鍣ㄥ湴鍧�绛変簬64鑾峰彇缁撴灉鍊�
+//            if (dataStream.equals("DQCS.DQCS.64")) {
+//                JSONArray dataPoints = listInfo.getJSONArray("dataPoints");
+//                JSONObject pointsJSONObject = dataPoints.getJSONObject(0);
+//                String value = pointsJSONObject.getString("value");
+//
+//                if (value.equals("64")) {
+//                    for (int j = 0; j < dataArray.size(); j++) {
+//                        JSONObject listInfo2 = dataArray.getJSONObject(j);
+//                        String dataStream2 = listInfo2.getString("dataStream");
+//                        // 瀵勫瓨鍣ㄥ湴鍧�绛変簬64鑾峰彇缁撴灉鍊�
+//                        if (dataStream2.equals("DQCS.DQCS.DZZ")) {
+//                            JSONArray dataPoints2 = listInfo2.getJSONArray("dataPoints");
+//                            JSONObject pointsJSONObject2 = dataPoints2.getJSONObject(0);
+//                            String collectValue = pointsJSONObject2.getString("value");
+//
+//                            // 瑙f瀽鏃堕棿鎴�
+//                            Instant instant = Instant.ofEpochMilli(pointsJSONObject2.getLong("time"));
+//                            LocalDateTime collectDate = LocalDateTime.ofInstant(instant, ZoneId.systemDefault());
+//
+//                            // 鏌ヨ鏈�鏂颁竴鏉℃暟鎹�
+//                            CollectBridge collectBridge = baseMapper.selectOne(Wrappers.<CollectBridge>lambdaQuery()
+//                                    .orderByDesc(CollectBridge::getCollectDate)
+//                                    .last("limit 1"));
+//
+//                            // 鍒ゆ柇涓ゆ潯鏁版嵁鏄惁鐩稿樊鍦�10鍒嗛挓涔嬪唴鍜屾湁娌℃湁缂栧彿
+//                            if (isWithinTenMinutes(collectDate, collectBridge.getCollectDate()) &&
+//                                    StringUtils.isNotBlank(collectBridge.getEntrustCode())) {
+//                                // 淇敼妫�楠屽��
+//                                collectBridge.setCollectValue(collectValue);
+//                                baseMapper.updateById(collectBridge);
+//                            } else {
+//                                // 鍙瓨鍌ㄥ��
+//                                CollectBridge bridge = new CollectBridge();
+//                                bridge.setCollectValue(collectValue);
+//                                bridge.setCollectDate(collectDate);
+//                                baseMapper.insert(bridge);
+//                            }
+//                        }
+//                    }
+//                }
+//            }
+//        }
+    }
 
-                // 鍏堝瓨鍌ㄧ紪鍙�, 鍚庣画瀛樺偍鍊�
-                CollectBridge collectBridge = new CollectBridge();
-                collectBridge.setEntrustCode(entrustCode);
-                collectBridge.setCollectDate(collectDate);
-                baseMapper.insert(collectBridge);
-
-            }
-            // 瀵勫瓨鍣ㄥ湴鍧�绛変簬64鑾峰彇缁撴灉鍊�
-            if (dataStream.equals("DQCS.DQCS.64")) {
-                JSONArray dataPoints = listInfo.getJSONArray("dataPoints");
-                JSONObject pointsJSONObject = dataPoints.getJSONObject(0);
-                String value = pointsJSONObject.getString("value");
-
-                if (value.equals("64")) {
-                    for (int j = 0; j < dataArray.size(); j++) {
-                        JSONObject listInfo2 = dataArray.getJSONObject(j);
-                        String dataStream2 = listInfo2.getString("dataStream");
-                        // 瀵勫瓨鍣ㄥ湴鍧�绛変簬64鑾峰彇缁撴灉鍊�
-                        if (dataStream2.equals("DQCS.DQCS.DZZ")) {
-                            JSONArray dataPoints2 = listInfo2.getJSONArray("dataPoints");
-                            JSONObject pointsJSONObject2 = dataPoints2.getJSONObject(0);
-                            String collectValue = pointsJSONObject2.getString("value");
-
-                            // 瑙f瀽鏃堕棿鎴�
-                            Instant instant = Instant.ofEpochMilli(pointsJSONObject2.getLong("time"));
-                            LocalDateTime collectDate = LocalDateTime.ofInstant(instant, ZoneId.systemDefault());
-
-                            // 鏌ヨ鏈�鏂颁竴鏉℃暟鎹�
-                            CollectBridge collectBridge = baseMapper.selectOne(Wrappers.<CollectBridge>lambdaQuery()
-                                    .orderByDesc(CollectBridge::getCollectDate)
-                                    .last("limit 1"));
-
-                            // 鍒ゆ柇涓ゆ潯鏁版嵁鏄惁鐩稿樊鍦�10鍒嗛挓涔嬪唴鍜屾湁娌℃湁缂栧彿
-                            if (isWithinTenMinutes(collectDate, collectBridge.getCollectDate()) &&
-                                    StringUtils.isNotBlank(collectBridge.getEntrustCode())) {
-                                // 淇敼妫�楠屽��
-                                collectBridge.setCollectValue(collectValue);
-                                baseMapper.updateById(collectBridge);
-                            } else {
-                                // 鍙瓨鍌ㄥ��
-                                CollectBridge bridge = new CollectBridge();
-                                bridge.setCollectValue(collectValue);
-                                bridge.setCollectDate(collectDate);
-                                baseMapper.insert(bridge);
-                            }
-                        }
-                    }
-                }
+    @Override
+    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());
+            //杩囨护鍑哄寘鍚疄闄呯數闃诲�肩殑瀵硅薄
+            // 澶勭悊 NSDQCS.DQCS.DZZ 鏁版嵁
+            String entrustCode = getValueByDataStream(dataList,DCResistanceMqttConstants.NSDQCS_DQCS_SN);
+            BigDecimal value = new BigDecimal(getValueByDataStream(dataList,DCResistanceMqttConstants.NSDQCS_DQCS_DZZ));
+            Long count = collectBridgeMapper.selectCount(Wrappers.<CollectBridge>lambdaQuery().eq(CollectBridge::getEntrustCode, entrustCode));
+            if(count>0L){
+                collectBridgeMapper.update(null,Wrappers.<CollectBridge>lambdaUpdate()
+                        .set(CollectBridge::getCollectValue,value)
+                        .set(CollectBridge::getLastCollectDate,LocalDateTime.now())
+                        .eq(CollectBridge::getEntrustCode,entrustCode));
+            }else{
+                collectBridgeMapper.insert(new CollectBridge(entrustCode,value,LocalDateTime.now(),LocalDateTime.now()));
             }
         }
     }
 
     @Override
-    public void addBridgeValueByNS(String jsonStr) {
+    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<DCResistanceMqttVO> dataList = JSONArray.parseObject(dataMap.get("data").toString(), new TypeReference<List<DCResistanceMqttVO>>(){}.getType());
-            //杩囨护鍑哄寘鍚疄闄呯數闃诲�肩殑瀵硅薄
-            // 澶勭悊 NSDQCS.DQCS.DZZ 鏁版嵁
-            processSingleValueDataStream(dataList, DCResistanceMqttConstants.NSDQCS_DQCS_DZZ);
-            // 澶勭悊 NSTSSC.TSSC.WY 鏁版嵁
-            processThreeTimesValueDataStream(dataList, DCResistanceMqttConstants.NSTSSC_TSSC_WY);
-//            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());
-//            }
+            List<DeviceMqttVO> dataList = JSONArray.parseObject(dataMap.get("data").toString(), new TypeReference<List<DeviceMqttVO>>(){}.getType());
+            // 浼搁暱鐜囷細澶勭悊 NSTSSC.TSSC.SCL 鏁版嵁
+            processMultipleValueDataStream(dataList, ElongationMqttConstants.NSTSSC_TSSC_SCL,3,10.0);
         }
     }
+
     /**
-     * 澶勭悊鍗曞�兼暟鎹祦鐨勬暟鎹苟淇濆瓨鍒� Redis
+     * 鑾峰彇mqtt娑堟伅浣撲腑瀵瑰簲鏍囪瘑鐨勫��
      * @param dataList 鏁版嵁鍒楄〃
      * @param dataStream 鏁版嵁娴佹爣璇�
      */
-    private void processSingleValueDataStream(List<DCResistanceMqttVO> dataList, String dataStream) {
-        DCResistanceMqttVO dcResistanceMqttVO = dataList.stream()
+    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(dcResistanceMqttVO)){
-            List<DCResistanceMqttVO.DataPoint> dataPoints = dcResistanceMqttVO.getDataPoints();
-            BigDecimal value = CollectionUtil.isNotEmpty(dataPoints)?dataPoints.get(0).getValue():BigDecimal.ZERO;
-            // 淇濆瓨鍗曚釜鍊煎埌 redis
-            RedisUtil.set(dataStream, value.doubleValue());
+        if(Objects.nonNull(deviceMqttVO)){
+            List<DeviceMqttVO.DataPoint> dataPoints = deviceMqttVO.getDataPoints();
+            return CollectionUtil.isNotEmpty(dataPoints)?dataPoints.get(0).getValue():"";
         }
+        return "";
+    }
+
+    /**
+     * 澶勭悊闇�瑕佷繚瀛樺涓�肩殑鏁版嵁娴侊紝骞朵繚瀛樺埌 Redis
+     * @param dataList 鏁版嵁鍒楄〃
+     * @param dataStream 鏁版嵁娴佹爣璇�
+     * @param maxSize 淇濆瓨鐨勬渶澶т釜鏁�
+     * @param minVal 瀛樺偍鏁版嵁鐨勬渶灏忓�硷紝浣庝簬璇ュ�煎垯璺宠繃锛�-1浠h〃涓嶉檺鍒�
+     */
+    private void processMultipleValueDataStream(List<DeviceMqttVO> dataList, 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();
+        //濡傛灉鏈�灏忓�间笉涓虹┖涓斾笉涓�-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,System.currentTimeMillis(),value);
     }
 
     /**
@@ -148,7 +192,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();
@@ -167,24 +211,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