diff --git a/das/src/main/java/com/das/modules/data/service/TDEngineService.java b/das/src/main/java/com/das/modules/data/service/TDEngineService.java index ab6db4a4..761716f6 100644 --- a/das/src/main/java/com/das/modules/data/service/TDEngineService.java +++ b/das/src/main/java/com/das/modules/data/service/TDEngineService.java @@ -610,6 +610,75 @@ public class TDEngineService { return result; } + public Map>> 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>> result = new HashMap<>(); + Map> valueMap = new HashMap<>(); + Map timeValueMap = new HashMap<>(); + List times = new ArrayList<>(); + List 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 map = new HashMap<>(); + List timeList = new ArrayList<>(); + timeList.add(rs.getTimestamp(1).getTime()); + List valueList = new ArrayList<>(); + valueList.add(rs.getObject("datavalue")); + map.put("times", timeList); + map.put("values", valueList); + valueMap.put(calFieldCode, map); + } else { + Map map = valueMap.get(calFieldCode); + List timeList = (List) map.get("times"); + List values = (List) 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 queryEvent(Integer eventLevel, Long startTime, Long endTime, List deviceCodeList, Integer pageSize, Integer offset, Integer limit) { List result = new ArrayList<>(); StringBuffer sb = new StringBuffer(2048); @@ -630,18 +699,18 @@ public class TDEngineService { } } sb.append(" order by t.event_time"); - if (pageSize == null){ - if (limit == null){ + if (pageSize == null) { + if (limit == null) { sb.append(" desc limit 100"); total = 100; - }else { + } else { sb.append(" desc limit ").append(limit); total = limit; } } - if (pageSize != null){ + if (pageSize != null) { sb.append(" limit ").append(offset).append(",").append(pageSize); - total = getEventCount(eventLevel,startTime,endTime,deviceCodeList); + total = getEventCount(eventLevel, startTime, endTime, deviceCodeList); } log.debug(sb.toString()); @@ -670,7 +739,7 @@ public class TDEngineService { return PageDataInfo.build(result, total); } - private Integer getEventCount(Integer eventLevel, Long startTime, Long endTime, List deviceCodeList){ + private Integer getEventCount(Integer eventLevel, Long startTime, Long endTime, List deviceCodeList) { List result = new ArrayList<>(); StringBuffer sb = new StringBuffer(2048); sb.append("select count(t.*) as total from event_info t where "); @@ -689,7 +758,7 @@ public class TDEngineService { } } log.debug(sb.toString()); - Integer total = null; + Integer total = null; try (Connection conn = hikariDataSource.getConnection(); Statement smt = conn.createStatement(); ResultSet rs = smt.executeQuery(sb.toString())) { diff --git a/das/src/main/java/com/das/modules/data/service/impl/DataServiceImpl.java b/das/src/main/java/com/das/modules/data/service/impl/DataServiceImpl.java index 88c3a566..853424cf 100644 --- a/das/src/main/java/com/das/modules/data/service/impl/DataServiceImpl.java +++ b/das/src/main/java/com/das/modules/data/service/impl/DataServiceImpl.java @@ -144,8 +144,10 @@ public class DataServiceImpl implements DataService { String iotModelCode = sysIotModelFieldMapper.queryModelCodeByDeviceId(irn); Map highSpeedFieldMap = highIotFieldMap.get(iotModelCode); Map lowSpeedFieldMap = lowIotFieldMap.get(iotModelCode); + Map calFieldMap = calculateIotFieldMap.get(iotModelCode); List highSpeedField = new ArrayList<>(); List lowSpeedField = new ArrayList<>(); + List 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>> 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>> 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; }