From 8502fb2a1648d1453f96b4288d68c16dfcf5bae5 Mon Sep 17 00:00:00 2001
From: baoshiwei <baoshiwei@shlanbao.cn>
Date: 星期一, 12 五月 2025 16:19:49 +0800
Subject: [PATCH] feat(data): 新增mqtt电表数据解析和写入,新增opcua电表和温湿度计数据解析和写入

---
 src/main/java/com/zhitan/influxdb/InfluxdbRepository.java |   30 ++++++++++++++++++++++++++++++
 1 files changed, 30 insertions(+), 0 deletions(-)

diff --git a/src/main/java/com/zhitan/influxdb/InfluxdbRepository.java b/src/main/java/com/zhitan/influxdb/InfluxdbRepository.java
index b55ef44..8835285 100644
--- a/src/main/java/com/zhitan/influxdb/InfluxdbRepository.java
+++ b/src/main/java/com/zhitan/influxdb/InfluxdbRepository.java
@@ -5,6 +5,8 @@
 import com.influxdb.client.InfluxDBClientFactory;
 import com.influxdb.client.WriteApiBlocking;
 import com.influxdb.client.write.Point;
+import com.influxdb.query.FluxRecord;
+import com.influxdb.query.FluxTable;
 import com.zhitan.config.influxdb.InfluxdbConfig;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -73,4 +75,32 @@
         WriteApiBlocking writeApi = client.getWriteApiBlocking();
         writeApi.writePoints(points);
     }
+
+    public double getLastPoint(String measurement, String tag, String s) {
+        if (client == null || !config.isEnable()) {
+            log.warn("InfluxDB client is not initialized or disabled.");
+            return 0;
+        }
+
+        String query = String.format("from(bucket: \"%s\") " +
+                "|> range(start: -1h) " +
+                "|> filter(fn: (r) => r._measurement == \"%s\" and r._field == \"value\") " +
+                "|> filter(fn: (r) => r.tag == \"%s\") " +
+                "|> last()", config.getBucket(), measurement, s);
+
+        List<FluxTable> tables = client.getQueryApi().query(query, config.getOrg());
+
+        if (tables != null && !tables.isEmpty()) {
+            List<FluxRecord> records = tables.get(0).getRecords();
+            if (records != null && !records.isEmpty()) {
+                FluxRecord record = records.get(0);
+                double value = (double) record.getValue();
+
+                return value;
+            }
+        }
+
+        log.warn("No data found for measurement: {}, tag: {}, field: {}", measurement, tag, s);
+        return 0;
+    }
 }

--
Gitblit v1.9.3