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/utils/DataAcquisition.java | 73 ++++++++++++++++++++++++++++++++++++
1 files changed, 72 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 360eae6..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<>();
@@ -266,6 +336,7 @@
AtomicInteger numberOfDataEntries = new AtomicInteger();
List<Object> list = new ArrayList<>();
for (int config = 0; config < v.size(); config++) {
+// String refery = v.get(config).getRefery();
String refery = getRefer(v.get(config).getRefery());
for (int i = 0; i < dataList.size(); i++) {
JSONObject jsonObject1 = JSON.parseObject(dataList.get(i).toString());
@@ -505,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