influxDB2.2( 三 )

@Service@Slf4jpublic class InfluxQueryService {  @Autowired private ObjectMapper objectMapper;  @Autowired private InfluxRepository influxRepository;  /**   * 监测数据查询   *   * @param start 起始范围时间点   * @param end 结束范围时间点   * @param every 时间片   * @param filterList 筛选条件集合(集合内元素例:pointName>csd-001)   * @param clazz 去除数据时map对象映射的类对象   * @param sort 时间字段排序规则   */  public <T> List<T> findMonitoringDataInFluxDB(      String start,      String end,      String every,      List<String> filterList,      Class<? extends T> clazz,      boolean sort) {    // mainTag和 subTag需要特殊处理,将逗号替换成"|"正则表达    filterList =        filterList.stream()            .map(filter -> StringUtils.replace(filter, ",", "|"))            .collect(Collectors.toList());    SearchParams<T> searchParams = new SearchParams<>();    searchParams.setStart(start);    searchParams.setEnd(end);    searchParams.setEvery(every);    searchParams.setFilterList(filterList);    searchParams.setMapClazz(clazz);    searchParams.setSortRule(sort);    List<FluxTable> fluxTableList = influxRepository.findMonitoringData(searchParams);    return mapFluxData(fluxTableList, clazz);  }  /**   * 解析原始数据   *   * @param data 原始数据   */  public <T> List<T> mapFluxData(List<FluxTable> data, Class<? extends T> clazz) {    List<T> result = new LinkedList<>();    for (FluxTable ft : data) {      List<FluxRecord> records = ft.getRecords();      for (FluxRecord rc : records) {        try {          T originData =              objectMapper.readValue(objectMapper.writeValueAsString(rc.getValues()), clazz);          result.add(originData);        } catch (JsonProcessingException e) {          log.error("influx查询数据转换为DTO时解析出错");          throw new RuntimeException(e);        }      }    }    return result;  }}业务Service构造查询条件,并提供相应的:查询结果实体 => 实体之间的转换方法
/**   * 设备指标监测值   *   * @param start 起始范围时间点   * @param end 结束范围时间点   * @param every 时间片   * @param tagName 设备id   */  public List<MonDataDTO> getMonitoringData(      String start, String end, String every, String tagName) {    // 筛选条件    List<String> filterList = new ArrayList<>();    filterList.add("_measurement> == \"monitoring_data\"");    filterList.add("tagName> =~/" + tagName + "/");    // 处理时间参数    String startDate;    String endDate;    LocalDate startLocalDate = LocalDate.parse(start).plusDays(-1);    // 一天内的数据 (开始时间的前一天的23点 , 到结束时间的23点 , 时区原因查询时时间减去8小时)    // 跨天的数据(开始和结束时间减8小时)    String endTime = (start.equals(end) ? "T15:00:00Z" : "T16:00:00Z");    startDate = startLocalDate + endTime;    endDate = end + endTime;    List<MonDataDTO> dataInFluxDB =        influxQueryService.findMonitoringDataInFluxDB(            startDate, endDate, every, filterList, MonDataDTO.class, false);    return dataInFluxDB;  }

推荐阅读