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