From 22e32104183a26e0414e44ac5f0c9ba805a9e524 Mon Sep 17 00:00:00 2001 From: dengzedong <dengzedong@email> Date: 星期二, 14 一月 2025 09:43:18 +0800 Subject: [PATCH] 获取多个预测项lastTime的double类型数据 --- iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/influxdb/service/impl/InfluxDBServiceImpl.java | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 46 insertions(+), 0 deletions(-) diff --git a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/influxdb/service/impl/InfluxDBServiceImpl.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/influxdb/service/impl/InfluxDBServiceImpl.java index 3e93489..7dd2fc5 100644 --- a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/influxdb/service/impl/InfluxDBServiceImpl.java +++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/influxdb/service/impl/InfluxDBServiceImpl.java @@ -2,6 +2,7 @@ import com.iailab.module.model.influxdb.common.config.InfluxDBInstance; import com.iailab.module.model.influxdb.common.utils.MeasurementUtils; +import com.iailab.module.model.influxdb.pojo.InfluxModelResultByOutPutIdsPOJO; import com.iailab.module.model.influxdb.pojo.InfluxModelResultPOJO; import com.iailab.module.model.influxdb.service.InfluxDBService; import com.iailab.module.model.influxdb.vo.InfluxModelResultVO; @@ -17,6 +18,7 @@ import javax.annotation.PostConstruct; import javax.annotation.Resource; import java.util.*; +import java.util.stream.Collectors; /** * InfluxDB操作类 @@ -80,4 +82,48 @@ } return dataList; } + + @Override + public Map<String, List<InfluxModelResultVO>> queryModelResultsByOutPutIds(InfluxModelResultByOutPutIdsPOJO pojo, Date startTime, Date endTime) { + Calendar calendar = Calendar.getInstance(); + calendar.set(Calendar.MILLISECOND, 0); + String start = startTime.toInstant().toString(); + + if (startTime.getTime() == endTime.getTime()) { + // 如果相等,则engTime加1毫秒,否则influxdb报错(因为influxdb的range函数是左闭右开区间,所以将engTime加一毫秒,才可以查到startTime时间点的数据) + endTime.setTime(endTime.getTime() + 1); + } + String stop = endTime.toInstant().toString(); + + String measurement = MeasurementUtils.getMeasurement(pojo.getType()); + // 拼接OutPutIds + String outPutIdsFilter = pojo.getOutPutIds().stream().map(id -> "r[\"outPutId\"] == \"" + id + "\"").collect(Collectors.joining(" or ")); + StringBuilder sb = new StringBuilder(); + sb.append("from(bucket:\"" + influxDBInstance.getBucket() + "\") "); + sb.append("|> range(start: ").append(start).append(", stop: ").append(stop).append(") "); + sb.append("|> filter(fn: (r) => r[\"_measurement\"] == \"" + measurement + "\")"); + sb.append("|> filter(fn: (r) => r[\"_field\"] == \"value\")"); + sb.append("|> filter(fn: (r) => " + outPutIdsFilter + ")"); + sb.append("|> sort(columns: [\"_time\"]) "); + sb.append("|> yield(name: \"mean\")"); + log.info("influxdbSql===============" + sb); + List<FluxTable> tables = queryApi.query(sb.toString(), influxDBInstance.org); + + Map<String, List<InfluxModelResultVO>> result = new HashMap<>(pojo.getOutPutIds().size()); + for (FluxTable table : tables) { + List<FluxRecord> records = table.getRecords(); + for (FluxRecord record : records) { + String outPutId = record.getValueByKey("outPutId").toString(); + if (result.containsKey(outPutId)) { + result.get(outPutId).add( new InfluxModelResultVO(record.getValueByKey("_value"),record.getTime())); + } else { + List<InfluxModelResultVO> dataList = new ArrayList<>(); + InfluxModelResultVO vo = new InfluxModelResultVO(record.getValueByKey("_value"),record.getTime()); + dataList.add(vo); + result.put(outPutId,dataList); + } + } + } + return result; + } } \ No newline at end of file -- Gitblit v1.9.3