history接口增加199计算量查询历史数据

This commit is contained in:
huguanghan 2024-11-06 17:06:27 +08:00
parent 5984671628
commit e01781e7ba
2 changed files with 93 additions and 7 deletions

View File

@ -610,6 +610,75 @@ public class TDEngineService {
return result;
}
public Map<String, Map<String, Map<String, Object>>> fetchCalHistoryCurve(Long irn, Date startTime, Date endTime, String interval, String calFieldCode) {
SimpleDateFormat SIMPLE_DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date now = new Date();
if (endTime.after(now)) {
endTime = now;
}
Map<String, Map<String, Map<String, Object>>> result = new HashMap<>();
Map<String, Map<String, Object>> valueMap = new HashMap<>();
Map<String, Object> timeValueMap = new HashMap<>();
List<Long> times = new ArrayList<>();
List<Object> objects = new ArrayList<>();
timeValueMap.put("times", times);
timeValueMap.put("values", objects);
valueMap.put(calFieldCode, timeValueMap);
StringBuffer sb = new StringBuffer(2048);
if (!(StrUtil.isNotBlank(interval) && interval.equals("NONE"))) {
String startTimeStr = SIMPLE_DATE_FORMAT.format(startTime);
String endTimeStr = SIMPLE_DATE_FORMAT.format(endTime);
String timeStr = String.format("'%s','%s'", startTimeStr, endTimeStr);
String intervalStr = convertInterval(interval);
sb.append("select _irowts updatetime, interp(datavalue) datavalue");
sb.append(" from c_");
sb.append(irn).append("_").append(calFieldCode);
sb.append(String.format(" range(%s)", timeStr));
sb.append(String.format(" every(%s)", intervalStr));
sb.append(String.format(" FILL(%s)", "PREV"));
sb.append(" order by updatetime");
} else {
sb.append("select updatetime, datavalue");
sb.append(" from ");
sb.append(" from c_");
sb.append(irn).append("_").append(calFieldCode);
sb.append(" where ");
sb.append(String.format(" updatetime >= %d and updatetime < %d ", startTime.getTime(), endTime.getTime()));
sb.append(" order by updatetime");
}
log.debug(sb.toString());
try (Connection conn = hikariDataSource.getConnection();
Statement smt = conn.createStatement();
ResultSet rs = smt.executeQuery(sb.toString())) {
while (rs.next()) {
if (valueMap.get(calFieldCode) == null) {
Map<String, Object> map = new HashMap<>();
List<Long> timeList = new ArrayList<>();
timeList.add(rs.getTimestamp(1).getTime());
List<Object> valueList = new ArrayList<>();
valueList.add(rs.getObject("datavalue"));
map.put("times", timeList);
map.put("values", valueList);
valueMap.put(calFieldCode, map);
} else {
Map<String, Object> map = valueMap.get(calFieldCode);
List<Long> timeList = (List<Long>) map.get("times");
List<Object> values = (List<Object>) map.get("values");
timeList.add(rs.getTimestamp(1).getTime());
values.add(rs.getObject("datavalue"));
}
}
result.put(irn.toString(), valueMap);
} catch (Exception e) {
log.error("获取数据异常", e);
return result;
}
return result;
}
public PageDataInfo<DeviceEventInfo> queryEvent(Integer eventLevel, Long startTime, Long endTime, List<String> deviceCodeList, Integer pageSize, Integer offset, Integer limit) {
List<DeviceEventInfo> result = new ArrayList<>();
StringBuffer sb = new StringBuffer(2048);

View File

@ -144,8 +144,10 @@ public class DataServiceImpl implements DataService {
String iotModelCode = sysIotModelFieldMapper.queryModelCodeByDeviceId(irn);
Map<String, Object> highSpeedFieldMap = highIotFieldMap.get(iotModelCode);
Map<String, Object> lowSpeedFieldMap = lowIotFieldMap.get(iotModelCode);
Map<String, String> calFieldMap = calculateIotFieldMap.get(iotModelCode);
List<String> highSpeedField = new ArrayList<>();
List<String> lowSpeedField = new ArrayList<>();
List<String> calField = new ArrayList<>();
for (String field : attributes) {
if (highSpeedFieldMap.containsKey(field)) {
highSpeedField.add(field);
@ -153,6 +155,9 @@ public class DataServiceImpl implements DataService {
if (lowSpeedFieldMap.containsKey(field)) {
lowSpeedField.add(field);
}
if (calFieldMap.containsKey(field)){
calField.add(field);
}
}
Map<String, Map<String, Map<String, Object>>> result = new HashMap<>();
if (!CollectionUtils.isEmpty(highSpeedField)) {
@ -167,6 +172,18 @@ public class DataServiceImpl implements DataService {
result.get(irn.toString()).putAll(lowHistoryCurve.get(irn.toString()));
}
}
if (!CollectionUtils.isEmpty(calField)){
ListUtil.page(calField,COMMIT_COUNT,list -> {
for (String item : list){
Map<String, Map<String, Map<String, Object>>> calHistoryCurve = tdEngineService.fetchCalHistoryCurve(irn, startTime, endTime, interval, item);
if (result.get(irn.toString()) == null) {
result.putAll(calHistoryCurve);
} else {
result.get(irn.toString()).putAll(calHistoryCurve.get(irn.toString()));
}
}
});
}
return result;
}