From d5e714fecf9cba48c1a225e6eb53078cdad647c7 Mon Sep 17 00:00:00 2001
From: yaowanxin <3588231647@qq.com>
Date: 星期四, 31 七月 2025 13:55:19 +0800
Subject: [PATCH] 获取redis数据,接收前端数据存reids

---
 cnas-device/src/main/java/com/ruoyi/device/utils/DataAcquisition.java |   72 +++++++++++++++++++++++++++++++++++
 1 files changed, 71 insertions(+), 1 deletions(-)

diff --git a/cnas-device/src/main/java/com/ruoyi/device/utils/DataAcquisition.java b/cnas-device/src/main/java/com/ruoyi/device/utils/DataAcquisition.java
index 87867f3..c717dd4 100644
--- a/cnas-device/src/main/java/com/ruoyi/device/utils/DataAcquisition.java
+++ b/cnas-device/src/main/java/com/ruoyi/device/utils/DataAcquisition.java
@@ -7,6 +7,8 @@
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.ruoyi.common.utils.RedisUtil;
+import com.ruoyi.device.constant.DCResistanceMqttConstants;
 import com.ruoyi.device.dto.DeviceCollectionDto;
 import com.ruoyi.device.pojo.DataConfig;
 import com.ruoyi.device.pojo.Device;
@@ -147,6 +149,9 @@
                 case ".png":
                     map = readPngString(data, userMap, device);
                     break;
+                case ".mqtt":
+                    map = getActualResistanceValueAsMap(userMap, device);
+                    break;
                 default:
                     map = null;
                     break;
@@ -159,6 +164,71 @@
             return map;
         }
     }
+    /**
+     * 浠� Redis 涓幏鍙栧疄闄呯數闃诲�硷紝骞朵互閿�煎褰㈠紡杩斿洖
+     * @param dataConfig 鏁版嵁閰嶇疆淇℃伅
+     * @param device 璁惧淇℃伅
+     * @return 鍖呭惈瀹為檯鐢甸樆鍊煎鐞嗙粨鏋滅殑閿�煎锛涜嫢鏈幏鍙栧埌鏈夋晥鏁版嵁鍒欒繑鍥炵┖ Map
+     */
+    public static Map<String, Object> getActualResistanceValueAsMap(Map<String, List<DataConfig>> dataConfig, Device device) {
+        Map<String, Object> map = new HashMap<>();
+        if (ObjectUtils.isEmpty(dataConfig)) {
+            return map;
+        }
+        dataConfig.forEach((k, v) -> {
+            AtomicInteger numberOfDataEntries = new AtomicInteger();
+            List<Object> list = new ArrayList<>();
+            for (int config = 0; config < v.size(); config++) {
+                String refery = getRefer(v.get(config).getRefery());
+                // 浠� Redis 涓幏鍙栧��
+                Object value = RedisUtil.get(refery);
+                if (ObjectUtils.isNotEmpty(value)) {
+                    if (value instanceof String && ((String) value).startsWith("[") && ((String) value).endsWith("]")) {
+                        try {
+                            // 瑙f瀽 JSON 鏁扮粍瀛楃涓蹭负 List<BigDecimal>
+                            List<BigDecimal> values = JSONArray.parseArray((String) value, BigDecimal.class);
+                            list.addAll(values);
+                            numberOfDataEntries.addAndGet(values.size());
+                        } catch (Exception e) {
+                            // 瑙f瀽澶辫触锛岃褰曢敊璇棩蹇楋紝浣跨敤鍘熷瓧绗︿覆鍊�
+                            System.err.println("瑙f瀽 Redis 杩斿洖鐨� JSON 鏁扮粍澶辫触: " + value);
+                            list.add(value);
+                            numberOfDataEntries.addAndGet(1);
+                        }
+                    } else {
+                        numberOfDataEntries.addAndGet(1);
+                        list.add(value);
+
+                    }
+                }
+            }
+            // 鎷兼帴鏁伴噰閰嶇疆
+            List<Object> result = new ArrayList<>();
+            for (int i = 0; i < numberOfDataEntries.get(); i++) {
+                StringBuilder aggregate = new StringBuilder();
+                for (int j = 0; j < v.size(); j++) {
+                    int index;
+                    if (j == 0) {
+                        index = i;
+                    } else {
+                        index = numberOfDataEntries.get() + i;
+                    }
+                    if (index < list.size()) {
+                        aggregate.append(list.get(index).toString()).append(",");
+                    }
+                }
+                if (aggregate.length() > 0) {
+                    aggregate.setLength(aggregate.length() - 1);
+                }
+                result.add(aggregate.toString());
+            }
+            // 杩涜鍏紡璁$畻
+            Object resultValue = calculationFormula(result, v.get(0), k, device);
+            map.put(k, resultValue);
+        });
+        return map;
+    }
+
 
     public static Map<String, Object> createFrequency(String entrustCode, String sampleCode, Map<String, Object> map) {
         Set<String> set = new LinkedHashSet<>();
@@ -506,7 +576,7 @@
             listResult.addAll(list);
         }
         // 涓轰簡缁欏墠绔仛鏁版嵁鍖哄垎
-        if (listResult.size() > 1) {
+        if (listResult.size() >= 1) {
             hashMap.put("result", listResult);
         } else {
             hashMap.put("result", listResult.get(0).toString());

--
Gitblit v1.9.3