潘志宝
2025-05-21 2bc3ed0691bf942da7c44dea1ffb5747aa9a2fc4
iailab-module-data/iailab-module-data-biz/src/main/java/com/iailab/module/data/influxdb/service/impl/InfluxDBServiceImpl.java
@@ -26,6 +26,7 @@
import com.influxdb.query.FluxTable;
import com.influxdb.query.InfluxQLQueryResult;
import lombok.extern.slf4j.Slf4j;
import javax.annotation.Resource;
import org.springframework.beans.factory.annotation.Autowired;
@@ -124,7 +125,7 @@
        }
        if (!CollectionUtils.isEmpty(tagValues)) {
            tagValues.forEach(item -> {
                log.info("bucket==="+ influxDBInstance.getBucket() + ",org===" + influxDBInstance.org);
                log.info("bucket===" + influxDBInstance.getBucket() + ",org===" + influxDBInstance.org);
                writeApi.writeMeasurement(influxDBInstance.getBucket(), influxDBInstance.org, WritePrecision.MS, item);
            });
        }
@@ -144,8 +145,8 @@
        calendar.set(Calendar.MILLISECOND, 0);
        // String start = startTime.getTime() - calendar.getTime().getTime() + "ms";
        String start = startTime.getTime() - calendar.getTime().getTime() - pas_ms + "ms";
        if (endTime==null){
            endTime= new Date();
        if (endTime == null) {
            endTime = new Date();
        }
        String stop = endTime.getTime() - calendar.getTime().getTime() + "ms";
@@ -239,7 +240,7 @@
        List<Map<String, Object>> list = data.get(queryDto.getTagIds().get(0));
        //导出
        try{
        try {
            String sheetTitle = "采集数据";
            String[] title = new String[]{"值", "时间"};
            ExcelUtil.exportPointValue(sheetTitle, title, new ArrayList<>(list), response);
@@ -277,7 +278,7 @@
        //提取list
        List<Map<String, Object>> list = data.get(queryDto.getPointNos().get(0));
        for(Map<String, Object> map : list){
        for (Map<String, Object> map : list) {
            PointValueExportVO dto = new PointValueExportVO();
            dto.setDatatime(map.get("time").toString());
            dto.setDatavalue(map.get("value").toString());
@@ -304,7 +305,9 @@
            sql.append("'");
            InfluxQLQueryResult data = influxQLQueryApi.query(new InfluxQLQuery(sql.toString(), influxDBInstance.getBucket()));
            Object value = data.getResults().get(0).getSeries().get(0).getValues().get(0).getValueByKey("last");
            result.put(point.getPoint(), value);
            if (value != null) {
                result.put(point.getPoint(), value);
            }
        }
        return result;
    }
@@ -314,7 +317,7 @@
        if (influxQLQueryApi == null) {
            influxQLQueryApi = influxDBInstance.getClient().getInfluxQLQueryApi();
        }
        long utcMillis = startTime.getTime() -rawOffset;
        long utcMillis = startTime.getTime() - rawOffset;
        String utsStart = DateUtils.format(new Date(utcMillis), DateUtils.FORMAT_YEAR_MONTH_DAY);
        log.info("utsStart=" + utsStart);
        String measurement = PointValueUtils.getMeasurement(point.getType());
@@ -323,7 +326,83 @@
        sql.append(measurement);
        sql.append(" WHERE point = '");
        sql.append(point.getPoint());
        sql.append("' AND time >= '" + utsStart +"'");
        sql.append("' AND time >= '" + utsStart + "'");
        InfluxQLQueryResult data = influxQLQueryApi.query(new InfluxQLQuery(sql.toString(), influxDBInstance.getBucket()));
        if (data == null) {
            return null;
        }
        return data.getResults().get(0).getSeries().get(0).getValues().get(0).getValues()[1];
    }
    @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;
        }
        String timeM = valueList.get(0).get(TIME).toString();
        double valueM = new BigDecimal(valueList.get(0).get(VALUE).toString()).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
        for (Map<String, Object> item : valueList) {
            double valueI = new BigDecimal(item.get(VALUE).toString()).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
            if (valueI >= valueM ) {
                valueM = valueI;
                timeM = item.get(TIME).toString();
            }
        }
        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();
        }
        long utcMillisS = startTime.getTime() - rawOffset;
        String utsStart = DateUtils.format(new Date(utcMillisS), DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND);
        log.info("utsStart=" + utsStart);
        long utcMillisE = endTime.getTime() - rawOffset;
        String utsEnd = DateUtils.format(new Date(utcMillisE), DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND);
        log.info("utsEnd=" + utsEnd);
        String measurement = PointValueUtils.getMeasurement(point.getType());
        StringBuilder sql = new StringBuilder();
        sql.append("SELECT MAX(value) FROM ");
        sql.append(measurement);
        sql.append(" WHERE point = '");
        sql.append(point.getPoint());
        sql.append("' AND time >= '" + utsStart);
        sql.append("' AND time <= '" + utsEnd + "'");
        InfluxQLQueryResult data = influxQLQueryApi.query(new InfluxQLQuery(sql.toString(), influxDBInstance.getBucket()));
        if (data == null) {
            return null;
        }
        return data.getResults().get(0).getSeries().get(0).getValues().get(0).getValues()[1];
    }
    @Override
    public Object queryPointMinValueRange(InfluxPointValuePOJO point, Date startTime, Date endTime) {
        if (influxQLQueryApi == null) {
            influxQLQueryApi = influxDBInstance.getClient().getInfluxQLQueryApi();
        }
        long utcMillisS = startTime.getTime() - rawOffset;
        String utsStart = DateUtils.format(new Date(utcMillisS), DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND);
        log.info("utsStart=" + utsStart);
        long utcMillisE = endTime.getTime() - rawOffset;
        String utsEnd = DateUtils.format(new Date(utcMillisE), DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND);
        log.info("utsEnd=" + utsEnd);
        String measurement = PointValueUtils.getMeasurement(point.getType());
        StringBuilder sql = new StringBuilder();
        sql.append("SELECT MIN(value) FROM ");
        sql.append(measurement);
        sql.append(" WHERE point = '");
        sql.append(point.getPoint());
        sql.append("' AND time >= '" + utsStart);
        sql.append("' AND time <= '" + utsEnd + "'");
        InfluxQLQueryResult data = influxQLQueryApi.query(new InfluxQLQuery(sql.toString(), influxDBInstance.getBucket()));
        if (data == null) {
            return null;
@@ -350,9 +429,9 @@
        Map<String, List<Map<String, Object>>> result = new HashMap<>();
        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.getTime() - calendar.getTime().getTime() - pas_ms) + "ms";
        if (endTime == null) {
            endTime = new Date();
        }
        String stop = endTime.getTime() - calendar.getTime().getTime() + "ms";