package com.zy.acs.hex.controller; import com.influxdb.v3.client.PointValues; import com.zy.acs.framework.common.R; import com.zy.acs.hex.domain.DeviceLog; import com.zy.component.influxdb.service.InfluxDBService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.util.MultiValueMap; import org.springframework.web.bind.annotation.*; import java.lang.reflect.Field; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.stream.Stream; @RestController @Slf4j @RequestMapping(value = "/deviceLog") public class DeviceLogController { @Autowired private InfluxDBService influxDBService; /** * 查询最新的十条数据 * * @return */ @GetMapping(value = "/query") @ResponseBody public R query(@RequestParam(required = false, defaultValue = "device") String measurement, @RequestParam(required = false) Map conditions, @RequestParam(required = false, defaultValue = "100") Integer limit, @RequestParam(required = false, defaultValue = "time") String orderBy, @RequestParam(required = false, defaultValue = "DESC") String orderDirection) { return R.ok(getData(measurement, conditions, limit, orderBy, orderDirection)); } /** * 通用查询方法,支持动态条件 */ private List getData(String measurement, Map conditions,int limit, String orderBy, String orderDirection) { // 构建查询语句 StringBuilder sqlBuilder = new StringBuilder("SELECT * FROM ").append(measurement).append(" WHERE 1=1"); Map params = new HashMap<>(); // 动态添加条件 if (conditions != null && !conditions.isEmpty()) { if (conditions.get("startTime") != null) { if (conditions.get("startTime") != null) { sqlBuilder.append(" AND ").append("time").append(" >= :").append("startTime"); params.put("startTime", conditions.get("startTime")); } }else if (conditions.get("endTime") != null) { if (conditions.get("endTime") != null) { sqlBuilder.append(" AND ").append("time").append(" <= :").append("endTime"); params.put("endTime", conditions.get("endTime")); } }else { conditions.forEach((key, value) -> { if (value != null) { sqlBuilder.append(" AND ").append(key).append(" = :").append(key); params.put(key, value); } }); } } // 添加排序和限制 sqlBuilder.append(" ORDER BY ").append(orderBy).append(" ").append(orderDirection); sqlBuilder.append(" LIMIT :limit"); params.put("limit", limit); return influxDBService.queryPoints(sqlBuilder.toString(),params, DeviceLog.class); } }