From 318ebac926b9627a683c4ab90d4e2b7451b1e573 Mon Sep 17 00:00:00 2001
From: baoshiwei <baoshiwei@shlanbao.cn>
Date: 星期三, 18 六月 2025 13:43:55 +0800
Subject: [PATCH] feat(engine): 新增全厂总电量统计功能

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

diff --git a/src/main/java/com/zhitan/engine/influxdb/InfluxdbRepository.java b/src/main/java/com/zhitan/engine/influxdb/InfluxdbRepository.java
index 9e669e5..b0fc9f7 100644
--- a/src/main/java/com/zhitan/engine/influxdb/InfluxdbRepository.java
+++ b/src/main/java/com/zhitan/engine/influxdb/InfluxdbRepository.java
@@ -7,6 +7,7 @@
 import com.influxdb.client.WriteApiBlocking;
 import com.influxdb.client.domain.HealthCheck;
 import com.influxdb.client.domain.WritePrecision;
+import com.influxdb.client.write.Point;
 import com.zhitan.engine.enums.CollectionModes;
 import com.zhitan.engine.enums.GroupTimeType;
 import com.zhitan.engine.enums.Quality;
@@ -76,6 +77,16 @@
         write.writeMeasurements(WritePrecision.MS, writePoints);
     }
 
+    /**
+     * 鍐欏叆鍗曚釜鐐逛綅
+     */
+    public void writePoint(Point point) {
+        if (null == point) {
+            return;
+        }
+        WriteApiBlocking writeApi = client.getWriteApiBlocking();
+        writeApi.writePoint(point);
+    }
     public TagValue query(String tagCode, Date time) {
         List<TagValue> values = query(Collections.singletonList(tagCode), time);
         return !values.isEmpty() ? values.get(0) : new TagValue();
@@ -303,6 +314,9 @@
                         config.getMeasurement(), field, startTime, endTime);
                 return 0.0;
             }
+            if (field.contains("total_A")) {
+                System.out.println(values);
+            }
 
             // 璁$畻绱鍊硷紙鏈�鍚庝竴涓�煎噺鍘荤涓�涓�硷級
             Object firstValue = values.get(0);
@@ -323,4 +337,32 @@
             return 0.0;
         }
     }
+
+    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