history接口增加199计算量查询历史数据
This commit is contained in:
parent
5984671628
commit
e01781e7ba
@ -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);
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user