From b7ae52e1e2bd1e8ba11e0ea9007bba7ee166929b Mon Sep 17 00:00:00 2001
From: 潘志宝 <979469083@qq.com>
Date: 星期一, 19 五月 2025 10:47:30 +0800
Subject: [PATCH] 查询最大值(带时间)

---
 iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/api/point/DataPointApiImpl.java                |   21 +++++++++++++++++++++
 iailab-module-data/iailab-module-data-api/src/main/java/com/iailab/module/data/api/point/DataPointApi.java                    |    4 ++++
 iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/influxdb/service/InfluxDBService.java          |    2 ++
 iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/influxdb/service/impl/InfluxDBServiceImpl.java |   24 ++++++++++++++++++++++++
 4 files changed, 51 insertions(+), 0 deletions(-)

diff --git a/iailab-module-data/iailab-module-data-api/src/main/java/com/iailab/module/data/api/point/DataPointApi.java b/iailab-module-data/iailab-module-data-api/src/main/java/com/iailab/module/data/api/point/DataPointApi.java
index 99305d2..eebb893 100644
--- a/iailab-module-data/iailab-module-data-api/src/main/java/com/iailab/module/data/api/point/DataPointApi.java
+++ b/iailab-module-data/iailab-module-data-api/src/main/java/com/iailab/module/data/api/point/DataPointApi.java
@@ -51,6 +51,10 @@
     @Operation(summary = "查询最大值")
     Map<String, Object> queryPointMaxValue(@RequestBody ApiPointValueQueryDTO queryDto);
 
+    @PostMapping(PREFIX + "/query-point/max-time-value")
+    @Operation(summary = "查询最大值(带时间)")
+    Map<String, Object> queryPointMaxTimeValue(ApiPointValueQueryDTO queryDto);
+
     @PostMapping(PREFIX + "/query-point/max-value-range")
     @Operation(summary = "查询最大值")
     Map<String, Object> queryPointMaxValueRange(@RequestBody ApiPointValueQueryDTO queryDto);
diff --git a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/api/point/DataPointApiImpl.java b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/api/point/DataPointApiImpl.java
index cddf15e..f50db22 100644
--- a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/api/point/DataPointApiImpl.java
+++ b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/api/point/DataPointApiImpl.java
@@ -89,6 +89,27 @@
     }
 
     @Override
+    public Map<String, Object> queryPointMaxTimeValue(ApiPointValueQueryDTO queryDto) {
+        Map<String, Object> result = new HashMap<>();
+        if (StringUtils.isEmpty(queryDto.getPointNo())) {
+            return null;
+        }
+        if (queryDto.getStart() == null) {
+            return null;
+        }
+        if (queryDto.getEnd() == null) {
+            queryDto.setEnd(new Date());
+        }
+        DaPointDTO daPointDTO = daPointService.getByNo(queryDto.getPointNo());
+        InfluxPointValuePOJO pojo = new InfluxPointValuePOJO();
+        pojo.setPoint(queryDto.getPointNo());
+        pojo.setType(daPointDTO.getDataType());
+        Object val = influxDBService.queryPointMaxTimeValue(pojo, queryDto.getStart(), queryDto.getEnd());
+        result.put(queryDto.getPointNo(), val);
+        return result;
+    }
+
+    @Override
     public Map<String, Object> queryPointMaxValueRange(ApiPointValueQueryDTO queryDto) {
         Map<String, Object> result = new HashMap<>();
         if (StringUtils.isEmpty(queryDto.getPointNo())) {
diff --git a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/influxdb/service/InfluxDBService.java b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/influxdb/service/InfluxDBService.java
index 1b17aab..94a2ac9 100644
--- a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/influxdb/service/InfluxDBService.java
+++ b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/influxdb/service/InfluxDBService.java
@@ -41,6 +41,8 @@
 
     Object queryPointMaxValue(InfluxPointValuePOJO point, Date startTime);
 
+    Map<String, Object> queryPointMaxTimeValue(InfluxPointValuePOJO point, Date startTime, Date endTime);
+
     List<PointValueExportVO> exportPointValue(ApiPointValueQueryDTO queryDto);
 
     Object queryPointMaxValueRange(InfluxPointValuePOJO point, Date startTime, Date endTime);
diff --git a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/influxdb/service/impl/InfluxDBServiceImpl.java b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/influxdb/service/impl/InfluxDBServiceImpl.java
index b6babc7..1e80c4a 100644
--- a/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/influxdb/service/impl/InfluxDBServiceImpl.java
+++ b/iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/influxdb/service/impl/InfluxDBServiceImpl.java
@@ -335,6 +335,30 @@
     }
 
     @Override
+    public Map<String, Object> queryPointMaxTimeValue(InfluxPointValuePOJO point, Date startTime, Date endTime) {
+        Map<String, Object> result = new HashMap<>(2);
+        List<Map<String, Object>> valueList = this.queryPointValues(point, startTime, endTime);
+        if (CollectionUtils.isEmpty(valueList)) {
+            return null;
+        }
+
+        double valueL = new BigDecimal(valueList.get(0).get(VALUE).toString()).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
+        Date timeM =DateUtils.parse(valueList.get(0).get(TIME).toString(), DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND);
+        double valueM = valueL;
+        for (Map<String, Object> item : valueList) {
+            double valueI = new BigDecimal(item.get(VALUE).toString()).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
+            if (valueI >= valueL ) {
+                valueM = valueI;
+                timeM = DateUtils.parse(item.get(TIME).toString(), DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND);
+            }
+            valueL = valueI;
+        }
+        result.put(TIME, timeM);
+        result.put(VALUE, valueM);
+        return result;
+    }
+
+    @Override
     public Object queryPointMaxValueRange(InfluxPointValuePOJO point, Date startTime, Date endTime) {
         if (influxQLQueryApi == null) {
             influxQLQueryApi = influxDBInstance.getClient().getInfluxQLQueryApi();

--
Gitblit v1.9.3