From 79550c2f0b8304357cea79aa26b51be300861f8b Mon Sep 17 00:00:00 2001 From: dengzedong <dengzedong@email> Date: 星期一, 07 四月 2025 17:46:30 +0800 Subject: [PATCH] getPreDoubleData 如果小于天粒度,则从下个时间粒度开始 --- iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/influxdb/service/impl/InfluxDBServiceImpl.java | 63 ++++++++++++++++++++++++++++--- 1 files changed, 57 insertions(+), 6 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 a491c35..06ab102 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操作类 @@ -48,13 +50,18 @@ @Override public List<InfluxModelResultVO> queryModelResults(InfluxModelResultPOJO pojo, Date startTime, Date endTime) { - Calendar calendar = Calendar.getInstance(); - calendar.set(Calendar.MILLISECOND, 0); - String start = startTime.getTime() - calendar.getTime().getTime() + "ms"; - if (endTime==null){ - endTime= new Date(); + 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.getTime() - calendar.getTime().getTime() + "ms"; + + // 结束时间默认追加10s + Calendar calendar = Calendar.getInstance(); + calendar.setTime(endTime); + calendar.add(Calendar.MILLISECOND, 10 * 1000 + 1); + String stop = calendar.getTime().toInstant().toString(); List<InfluxModelResultVO> dataList = new ArrayList<>(); String measurement = MeasurementUtils.getMeasurement(pojo.getType()); @@ -78,4 +85,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