Commit eb2aebff477a4cb9cf0ea62079bac47cd455eb3a

Authored by 云中非
1 parent 9edbf48f

refactor: 今日遥测数据提取为接口

... ... @@ -59,13 +59,7 @@ public class HomePageServiceImpl implements HomePageService {
59 59 private final YtUserService ytUserService;
60 60
61 61 @Override
62   - public HomePageLeftTopDTO getHomePageLeftTopInfo(
63   - boolean isPtSysAdmin,
64   - boolean isPtAdmin,
65   - boolean isTenantAdmin,
66   - String tenantId,
67   - String currentUserId)
68   - throws ExecutionException, InterruptedException {
  62 + public HomePageLeftTopDTO getHomePageLeftTopInfo(boolean isPtSysAdmin, boolean isPtAdmin, boolean isTenantAdmin, String tenantId, String currentUserId) throws ExecutionException, InterruptedException {
69 63 // 如果当前用户是超级管理员或平台管理员,查询所有的设备数量、租户数量、客户数量
70 64 // 如果当前用户是租户管理员,查询租户下的所有设备、告警、消息量
71 65 // 如果当前用户是客户,查询客户可以查看的设备、告警、消息量
... ... @@ -90,18 +84,13 @@ public class HomePageServiceImpl implements HomePageService {
90 84 if (StringUtils.isNotEmpty(customerId)) {
91 85 // 查询customerId
92 86 queryMap.put("customerId", customerId);
93   - long startTs =
94   - LocalDateTime.of(LocalDateTime.now().toLocalDate(), LocalTime.MIN)
95   - .toInstant(ZoneOffset.of("+8"))
96   - .toEpochMilli();
97   - List<BaseHomePageTop> baseHomePageTopList =
98   - deviceMapper.findDeviceMessageInfo(startTs, customerId);
  87 + long startTs = startTime.toInstant(ZoneOffset.of("+8")).toEpochMilli();
  88 + List<BaseHomePageTop> baseHomePageTopList = deviceMapper.findDeviceMessageInfo(startTs, customerId);
99 89 if (baseHomePageTopList.size() > FastIotConstants.MagicNumber.ZERO) {
100 90 messageInfo.setMessageCount(baseHomePageTopList.get(0).getSumCount());
101 91 messageInfo.setTodayMessageAdd(baseHomePageTopList.get(0).getTodayAdd());
102 92 }
103   - List<BaseHomePageTop> alarmList =
104   - deviceMapper.findDeviceAlarmInfoByCustomer(startTs, customerId);
  93 + List<BaseHomePageTop> alarmList = deviceMapper.findDeviceAlarmInfoByCustomer(startTs, customerId);
105 94 if (alarmList.size() > FastIotConstants.MagicNumber.ZERO) {
106 95 alarm.setSumCount(alarmList.get(0).getSumCount());
107 96 alarm.setTodayAdd(alarmList.get(0).getTodayAdd());
... ... @@ -125,13 +114,7 @@ public class HomePageServiceImpl implements HomePageService {
125 114 }
126 115
127 116 @Override
128   - public DeferredResult<List<TsValue>> getHomePageLeftBottomInfo(
129   - String customerId,
130   - long startTs,
131   - long endTs,
132   - long interval,
133   - TrendType trend,
134   - boolean isCustomer) {
  117 + public DeferredResult<List<TsValue>> getHomePageLeftBottomInfo(String customerId, long startTs, long endTs, long interval, TrendType trend, boolean isCustomer) {
135 118 List<CompletableFuture<TsValue>> futures = new ArrayList<>();
136 119 interval = interval < 7200000 ? 7200000 : interval;
137 120 long stepTs = startTs;
... ... @@ -139,22 +122,16 @@ public class HomePageServiceImpl implements HomePageService {
139 122 long tempStartTs = stepTs;
140 123 long tempEndTs = stepTs + interval;
141 124 long ts = tempStartTs + (tempEndTs - tempStartTs) / 2;
142   - LocalDateTime startTime =
143   - LocalDateTime.ofEpochSecond(tempStartTs / 1000, 0, ZoneOffset.ofHours(8));
144   - LocalDateTime endTime =
145   - LocalDateTime.ofEpochSecond(tempEndTs / 1000, 0, ZoneOffset.ofHours(8));
  125 + LocalDateTime startTime = LocalDateTime.ofEpochSecond(tempStartTs / 1000, 0, ZoneOffset.ofHours(8));
  126 + LocalDateTime endTime = LocalDateTime.ofEpochSecond(tempEndTs / 1000, 0, ZoneOffset.ofHours(8));
146 127 CompletableFuture<TsValue> tsValueCompletableFuture = null;
147 128 //客户查询的是告警统计 消息统计
148 129 if (isCustomer) {
149 130 if (trend == TrendType.CUSTOMER_ALARM_STATISTICAL) {
150   - tsValueCompletableFuture =
151   - findDeviceInfoByTs(
152   - customerId, tempStartTs, tempEndTs, ts, TrendType.CUSTOMER_ALARM_STATISTICAL);
  131 + tsValueCompletableFuture = findDeviceInfoByTs(customerId, tempStartTs, tempEndTs, ts, TrendType.CUSTOMER_ALARM_STATISTICAL);
153 132 }
154 133 if (trend == TrendType.CUSTOMER_MESSAGE_STATISTICAL) {
155   - tsValueCompletableFuture =
156   - findDeviceInfoByTs(
157   - customerId, tempStartTs, tempEndTs, ts, TrendType.CUSTOMER_MESSAGE_STATISTICAL);
  134 + tsValueCompletableFuture = findDeviceInfoByTs(customerId, tempStartTs, tempEndTs, ts, TrendType.CUSTOMER_MESSAGE_STATISTICAL);
158 135 }
159 136 } else {
160 137 if (trend == TrendType.TENANT_TREND) {
... ... @@ -169,19 +146,14 @@ public class HomePageServiceImpl implements HomePageService {
169 146 }
170 147 final DeferredResult<List<TsValue>> deferredResult = new DeferredResult<>();
171 148 if (futures.size() > FastIotConstants.MagicNumber.ZERO) {
172   - ListenableFuture<List<TsValue>> listenableFuture =
173   - Futures.transform(
174   - setFutures(futures),
175   - tsValues -> {
176   - if (tsValues != null && !tsValues.isEmpty()) {
177   - return tsValues;
178   - } else {
179   - return null;
180   - }
181   - },
182   - MoreExecutors.directExecutor());
183   - Futures.addCallback(
184   - listenableFuture, getTsValueCallback(deferredResult), MoreExecutors.directExecutor());
  149 + ListenableFuture<List<TsValue>> listenableFuture = Futures.transform(setFutures(futures), tsValues -> {
  150 + if (tsValues != null && !tsValues.isEmpty()) {
  151 + return tsValues;
  152 + } else {
  153 + return null;
  154 + }
  155 + }, MoreExecutors.directExecutor());
  156 + Futures.addCallback(listenableFuture, getTsValueCallback(deferredResult), MoreExecutors.directExecutor());
185 157 }
186 158 return deferredResult;
187 159 }
... ... @@ -190,28 +162,20 @@ public class HomePageServiceImpl implements HomePageService {
190 162 public DeferredResult<List<TenantTransportMessageDTO>> getTop10() {
191 163 List<TenantDTO> tenants = tenantService.getAllTenant();
192 164 List<CompletableFuture<TenantTransportMessageDTO>> futures = new ArrayList<>();
193   - tenants.forEach(
194   - tenant -> {
195   - TenantId tenantId = new TenantId(UUID.fromString(tenant.getTenantId()));
196   - futures.add(getTransportMessageByTenantId(tenantId, tenant.getName()));
197   - });
  165 + tenants.forEach(tenant -> {
  166 + TenantId tenantId = new TenantId(UUID.fromString(tenant.getTenantId()));
  167 + futures.add(getTransportMessageByTenantId(tenantId, tenant.getName()));
  168 + });
198 169 final DeferredResult<List<TenantTransportMessageDTO>> deferredResult = new DeferredResult<>();
199 170 if (futures.size() > FastIotConstants.MagicNumber.ZERO) {
200   - ListenableFuture<List<TenantTransportMessageDTO>> listenableFuture =
201   - Futures.transform(
202   - settableFuture(futures),
203   - transportMessage -> {
204   - if (transportMessage != null && !transportMessage.isEmpty()) {
205   - return transportMessage;
206   - } else {
207   - return null;
208   - }
209   - },
210   - MoreExecutors.directExecutor());
211   - Futures.addCallback(
212   - listenableFuture,
213   - getTransportMessageCallback(deferredResult),
214   - MoreExecutors.directExecutor());
  171 + ListenableFuture<List<TenantTransportMessageDTO>> listenableFuture = Futures.transform(settableFuture(futures), transportMessage -> {
  172 + if (transportMessage != null && !transportMessage.isEmpty()) {
  173 + return transportMessage;
  174 + } else {
  175 + return null;
  176 + }
  177 + }, MoreExecutors.directExecutor());
  178 + Futures.addCallback(listenableFuture, getTransportMessageCallback(deferredResult), MoreExecutors.directExecutor());
215 179 } else {
216 180 List<TenantTransportMessageDTO> result = new ArrayList<>();
217 181 deferredResult.setResult(result);
... ... @@ -221,36 +185,25 @@ public class HomePageServiceImpl implements HomePageService {
221 185
222 186 @Override
223 187 @Async
224   - public CompletableFuture<TenantTransportMessageDTO> getTransportMessageByTenantId(
225   - TenantId tenantId, String tenantName) {
  188 + public CompletableFuture<TenantTransportMessageDTO> getTransportMessageByTenantId(TenantId tenantId, String tenantName) {
226 189 List<EntityKey> latestValues = new ArrayList<>();
227 190 latestValues.add(new EntityKey(EntityKeyType.TIME_SERIES, "transportMsgCount"));
228 191 ApiUsageState apiUsageState = apiUsageStateService.findTenantApiUsageState(tenantId);
229 192 PageData<EntityData> pageData = queryEntityData(apiUsageState.getId(), tenantId, null, latestValues);
230 193 Map<EntityKeyType, Map<String, TsValue>> latest = pageData.getData().get(0).getLatest();
231 194 TenantTransportMessageDTO transportMessage = new TenantTransportMessageDTO();
232   - latest
233   - .keySet()
234   - .forEach(
235   - item -> {
236   - if (item.equals(EntityKeyType.TIME_SERIES)) {
237   - Map<String, TsValue> tsValueMap = latest.get(item);
238   - tsValueMap
239   - .keySet()
240   - .forEach(
241   - mapKey -> {
242   - Long value =
243   - Long.valueOf(
244   - tsValueMap.get(mapKey).getValue().isEmpty()
245   - ? FastIotConstants.MagicNumber.ZERO + ""
246   - : tsValueMap.get(mapKey).getValue());
247   - if (mapKey.equals("transportMsgCount")) {
248   - transportMessage.setName(tenantName);
249   - transportMessage.setCount(value);
250   - }
251   - });
252   - }
253   - });
  195 + latest.keySet().forEach(item -> {
  196 + if (item.equals(EntityKeyType.TIME_SERIES)) {
  197 + Map<String, TsValue> tsValueMap = latest.get(item);
  198 + tsValueMap.keySet().forEach(mapKey -> {
  199 + Long value = Long.valueOf(tsValueMap.get(mapKey).getValue().isEmpty() ? FastIotConstants.MagicNumber.ZERO + "" : tsValueMap.get(mapKey).getValue());
  200 + if (mapKey.equals("transportMsgCount")) {
  201 + transportMessage.setName(tenantName);
  202 + transportMessage.setCount(value);
  203 + }
  204 + });
  205 + }
  206 + });
254 207 return CompletableFuture.supplyAsync(() -> transportMessage);
255 208 }
256 209
... ... @@ -262,60 +215,64 @@ public class HomePageServiceImpl implements HomePageService {
262 215 */
263 216 private void setDeviceInfoData(List<DeviceDTO> deviceList, HomeDeviceInfoDTO homeDeviceInfoDTO) {
264 217 homeDeviceInfoDTO.setSumCount(deviceList.size());
265   - deviceList.forEach(
266   - ytDevice -> {
267   - int basicNum = FastIotConstants.MagicNumber.ONE;
268   - ZoneOffset zoneOffset = ZoneOffset.of("+8");
269   - LocalDateTime todayZeroTime = LocalDateTime.of(LocalDate.now(), LocalTime.MIN);
270   - if (ytDevice.getCreateTime().atZone(zoneOffset).toInstant().toEpochMilli()
271   - >= todayZeroTime.toInstant(zoneOffset).toEpochMilli()) {
272   - homeDeviceInfoDTO.setTodayAdd(homeDeviceInfoDTO.getTodayAdd() + basicNum);
273   - }
274   - switch (ytDevice.getDeviceState()) {
275   - case OFFLINE:
276   - homeDeviceInfoDTO.setOffLine(homeDeviceInfoDTO.getOffLine() + basicNum);
277   - break;
278   - case ONLINE:
279   - homeDeviceInfoDTO.setOnLine(homeDeviceInfoDTO.getOnLine() + basicNum);
280   - break;
281   - case INACTIVE:
282   - homeDeviceInfoDTO.setInActive(homeDeviceInfoDTO.getInActive() + basicNum);
283   - break;
284   - default:
285   - break;
286   - }
287   - });
  218 + deviceList.forEach(ytDevice -> {
  219 + int basicNum = FastIotConstants.MagicNumber.ONE;
  220 + ZoneOffset zoneOffset = ZoneOffset.of("+8");
  221 + LocalDateTime todayZeroTime = LocalDateTime.of(LocalDate.now(), LocalTime.MIN);
  222 + if (ytDevice.getCreateTime().atZone(zoneOffset).toInstant().toEpochMilli() >= todayZeroTime.toInstant(zoneOffset).toEpochMilli()) {
  223 + homeDeviceInfoDTO.setTodayAdd(homeDeviceInfoDTO.getTodayAdd() + basicNum);
  224 + }
  225 + switch (ytDevice.getDeviceState()) {
  226 + case OFFLINE:
  227 + homeDeviceInfoDTO.setOffLine(homeDeviceInfoDTO.getOffLine() + basicNum);
  228 + break;
  229 + case ONLINE:
  230 + homeDeviceInfoDTO.setOnLine(homeDeviceInfoDTO.getOnLine() + basicNum);
  231 + break;
  232 + case INACTIVE:
  233 + homeDeviceInfoDTO.setInActive(homeDeviceInfoDTO.getInActive() + basicNum);
  234 + break;
  235 + default:
  236 + break;
  237 + }
  238 + });
288 239 }
289 240
290 241 /**
291 242 * 获取当前用户权限下的租户信息
  243 + *
292 244 * @return
293 245 */
294   - private List<TenantDTO> getTenantInfo(){
  246 + private List<TenantDTO> getTenantInfo() {
295 247 List<TenantDTO> tenants = tenantService.getAllTenant();
296 248 return tenants;
297 249 }
298 250
299 251 /**
300 252 * 获取当前用户权限下的客户信息
  253 + *
301 254 * @return
302 255 */
303   - private List<UserDTO> getCustomerInfo(){
  256 + private List<UserDTO> getCustomerInfo() {
304 257 List<UserDTO> userList = userMapper.getUserCountByRoleType(RoleEnum.CUSTOMER_USER);
305 258 return userList;
306 259 }
307   - private List<TenantDTO> getApiUsageInfo(){
  260 +
  261 + private List<TenantDTO> getApiUsageInfo() {
308 262 List<TenantDTO> tenants = tenantService.getAllTenant();
309 263 return tenants;
310 264 }
311   - private List<TenantDTO> getDeviceInfo(){
  265 +
  266 + private List<TenantDTO> getDeviceInfo() {
312 267 List<TenantDTO> tenants = tenantService.getAllTenant();
313 268 return tenants;
314 269 }
315   - private List<TenantDTO> getAlarmInfo(){
  270 +
  271 + private List<TenantDTO> getAlarmInfo() {
316 272 List<TenantDTO> tenants = tenantService.getAllTenant();
317 273 return tenants;
318 274 }
  275 +
319 276 /**
320 277 * 设置租户返回信息
321 278 *
... ... @@ -323,17 +280,9 @@ public class HomePageServiceImpl implements HomePageService {
323 280 * @param startTime 今日开始时间
324 281 * @param endTime 今日结束时间
325 282 */
326   - private void setTenantInfoData(
327   - HomePageLeftTopDTO homePageLeftTopDTO, LocalDateTime startTime, LocalDateTime endTime) {
  283 + private void setTenantInfoData(HomePageLeftTopDTO homePageLeftTopDTO, LocalDateTime startTime, LocalDateTime endTime) {
328 284 List<TenantDTO> tenants = tenantService.getAllTenant();
329   - int todayAdd =
330   - (int)
331   - tenants.stream()
332   - .filter(
333   - tenant ->
334   - tenant.getCreateTime().isAfter(startTime)
335   - && tenant.getCreateTime().isBefore(endTime))
336   - .count();
  285 + int todayAdd = (int) tenants.stream().filter(tenant -> tenant.getCreateTime().isAfter(startTime) && tenant.getCreateTime().isBefore(endTime)).count();
337 286 int sumCount = tenants.size();
338 287 BaseHomePageTop baseHomePageTop = new BaseHomePageTop(sumCount, todayAdd);
339 288 homePageLeftTopDTO.setTenantInfo(baseHomePageTop);
... ... @@ -346,9 +295,7 @@ public class HomePageServiceImpl implements HomePageService {
346 295 * @param messageInfo 消息
347 296 * @param alarm 告警
348 297 */
349   - private void setAlarmAndMessageInfo(
350   - String tenantId, HomePageTopMessage messageInfo, BaseHomePageTop alarm)
351   - throws ExecutionException, InterruptedException {
  298 + private void setAlarmAndMessageInfo(String tenantId, HomePageTopMessage messageInfo, BaseHomePageTop alarm) throws ExecutionException, InterruptedException {
352 299 List<EntityKey> entityFields = new ArrayList<>();
353 300 entityFields.add(new EntityKey(EntityKeyType.ENTITY_FIELD, "name"));
354 301 entityFields.add(new EntityKey(EntityKeyType.ENTITY_FIELD, "label"));
... ... @@ -362,40 +309,31 @@ public class HomePageServiceImpl implements HomePageService {
362 309 ApiUsageState apiUsageState = apiUsageStateService.findTenantApiUsageState(currentTenantId);
363 310 PageData<EntityData> pageData = queryEntityData(apiUsageState.getId(), currentTenantId, entityFields, latestValues);
364 311 Map<EntityKeyType, Map<String, TsValue>> latest = pageData.getData().get(0).getLatest();
365   - latest
366   - .keySet()
367   - .forEach(
368   - item -> {
369   - if (item.equals(EntityKeyType.TIME_SERIES)) {
370   - Map<String, TsValue> tsValueMap = latest.get(item);
371   - tsValueMap
372   - .keySet()
373   - .forEach(
374   - mapKey -> {
375   - String tsValue = tsValueMap.get(mapKey).getValue();
376   - Integer value =
377   - StringUtils.isEmpty(tsValue)
378   - ? FastIotConstants.MagicNumber.ZERO
379   - : Integer.parseInt(tsValue);
380   - switch (mapKey) {
381   - case "createdAlarmsCount":
382   - alarm.setSumCount(value);
383   - break;
384   - case "transportMsgCount":
385   - messageInfo.setMessageCount(value);
386   - break;
387   - case "transportDataPointsCount":
388   - messageInfo.setDataPointsCount(value);
389   - break;
390   - default:
391   - break;
392   - }
393   - });
394   - }
395   - });
  312 + latest.keySet().forEach(item -> {
  313 + if (item.equals(EntityKeyType.TIME_SERIES)) {
  314 + Map<String, TsValue> tsValueMap = latest.get(item);
  315 + tsValueMap.keySet().forEach(mapKey -> {
  316 + String tsValue = tsValueMap.get(mapKey).getValue();
  317 + Integer value = StringUtils.isEmpty(tsValue) ? FastIotConstants.MagicNumber.ZERO : Integer.parseInt(tsValue);
  318 + switch (mapKey) {
  319 + case "createdAlarmsCount":
  320 + alarm.setSumCount(value);
  321 + break;
  322 + case "transportMsgCount":
  323 + messageInfo.setMessageCount(value);
  324 + break;
  325 + case "transportDataPointsCount":
  326 + messageInfo.setDataPointsCount(value);
  327 + break;
  328 + default:
  329 + break;
  330 + }
  331 + });
  332 + }
  333 + });
396 334
397 335 // 查询今日数据
398   - setTodayAlarmAndMessageInfo(currentTenantId, apiUsageState, messageInfo, alarm);
  336 + setTodayAlarmAndMessageInfo(currentTenantId, apiUsageState.getId(), messageInfo, alarm);
399 337 }
400 338
401 339 /**
... ... @@ -408,101 +346,97 @@ public class HomePageServiceImpl implements HomePageService {
408 346 * @throws ExecutionException 异常
409 347 * @throws InterruptedException 异常
410 348 */
411   - private void setTodayAlarmAndMessageInfo(
412   - TenantId currentTenantId,
413   - ApiUsageState apiUsageState,
414   - HomePageTopMessage messageInfo,
415   - BaseHomePageTop alarm)
416   - throws ExecutionException, InterruptedException {
417   - List<ReadTsKvQuery> queries = new ArrayList<>();
418   - long startTs =
419   - LocalDateTime.of(LocalDateTime.now().toLocalDate(), LocalTime.MIN)
420   - .toInstant(ZoneOffset.of("+8"))
421   - .toEpochMilli();
422   - long endTs = LocalDateTime.now().toInstant(ZoneOffset.of("+8")).toEpochMilli();
423   - int interval = 7200000;
424   - int limit = (int) ((endTs - startTs) / interval) + FastIotConstants.MagicNumber.ONE;
425   - queries.add(
426   - new BaseReadTsKvQuery(
427   - "transportMsgCountHourly", startTs, endTs, interval, limit, Aggregation.SUM));
428   - queries.add(
429   - new BaseReadTsKvQuery(
430   - "transportDataPointsCountHourly", startTs, endTs, interval, limit, Aggregation.SUM));
431   - queries.add(
432   - new BaseReadTsKvQuery(
433   - "createdAlarmsCountHourly", startTs, endTs, interval, limit, Aggregation.SUM));
434   - List<TsKvEntry> tsKv =
435   - timeseriesService.findAll(currentTenantId, apiUsageState.getId(), queries).get();
436   - tsKv.forEach(
437   - tsKvEntry -> {
438   - if (tsKvEntry.getLongValue().isPresent()) {
439   - int count = tsKvEntry.getLongValue().get().intValue();
440   - switch (tsKvEntry.getKey()) {
441   - case "transportMsgCountHourly":
442   - messageInfo.setTodayMessageAdd(count + messageInfo.getTodayMessageAdd());
443   - break;
444   - case "transportDataPointsCountHourly":
445   - messageInfo.setTodayDataPointsAdd(count + messageInfo.getTodayDataPointsAdd());
446   - break;
447   - case "createdAlarmsCountHourly":
448   - alarm.setTodayAdd(count + alarm.getTodayAdd());
449   - break;
450   - default:
451   - break;
452   - }
453   - }
454   - });
  349 + private void setTodayAlarmAndMessageInfo(TenantId currentTenantId, EntityId apiUsageState, HomePageTopMessage messageInfo, BaseHomePageTop alarm) throws ExecutionException, InterruptedException {
  350 + Map<String, Aggregation> queries = new HashMap<>();
  351 + queries.put("transportMsgCountHourly", Aggregation.SUM);
  352 + queries.put("transportDataPointsCountHourly", Aggregation.SUM);
  353 + queries.put("createdAlarmsCountHourly", Aggregation.SUM);
  354 +
  355 + List<TsKvEntry> tsKv = queryEntityTimeseries(apiUsageState, currentTenantId, queries);
  356 + tsKv.forEach(tsKvEntry -> {
  357 + if (tsKvEntry.getLongValue().isPresent()) {
  358 + int count = tsKvEntry.getLongValue().get().intValue();
  359 + switch (tsKvEntry.getKey()) {
  360 + case "transportMsgCountHourly":
  361 + messageInfo.setTodayMessageAdd(count + messageInfo.getTodayMessageAdd());
  362 + break;
  363 + case "transportDataPointsCountHourly":
  364 + messageInfo.setTodayDataPointsAdd(count + messageInfo.getTodayDataPointsAdd());
  365 + break;
  366 + case "createdAlarmsCountHourly":
  367 + alarm.setTodayAdd(count + alarm.getTodayAdd());
  368 + break;
  369 + default:
  370 + break;
  371 + }
  372 + }
  373 + });
455 374 }
456 375
457 376 /**
458 377 * 查询实体的运行数据
459   - * @param entityId 实体ID,例如:设备、用户、流量统计等
460   - * @param currentTenantId 租户ID
461   - * @param entityFields 查询的实体字段
462   - * @param latestValues 查询的运行数据字段,例如:遥测数据、操作记录等。
  378 + *
  379 + * @param entityId 实体ID,例如:设备、用户、流量统计等
  380 + * @param currentTenantId 租户ID
  381 + * @param entityFields 查询的实体字段
  382 + * @param latestValues 查询的运行数据字段,例如:遥测数据、操作记录等。
463 383 * @return
464 384 */
465   - private PageData<EntityData> queryEntityData(EntityId entityId,TenantId currentTenantId, List<EntityKey> entityFields, List<EntityKey> latestValues) {
  385 + private PageData<EntityData> queryEntityData(EntityId entityId, TenantId currentTenantId, List<EntityKey> entityFields, List<EntityKey> latestValues) {
466 386 CustomerId customerId = new CustomerId(EntityId.NULL_UUID);
467 387
468 388 EntityKey key = new EntityKey(EntityKeyType.ENTITY_FIELD, "createdTime");
469   - EntityDataSortOrder sortOrder =
470   - new EntityDataSortOrder(key, EntityDataSortOrder.Direction.DESC);
  389 + EntityDataSortOrder sortOrder = new EntityDataSortOrder(key, EntityDataSortOrder.Direction.DESC);
471 390
472   - EntityDataPageLink pageLink =
473   - new EntityDataPageLink(
474   - FastIotConstants.MagicNumber.ONE, FastIotConstants.MagicNumber.ZERO, null, sortOrder);
  391 + EntityDataPageLink pageLink = new EntityDataPageLink(FastIotConstants.MagicNumber.ONE, FastIotConstants.MagicNumber.ZERO, null, sortOrder);
475 392
476 393 SingleEntityFilter singleEntityFilter = new SingleEntityFilter();
477 394 singleEntityFilter.setSingleEntity(entityId);
478 395
479   - EntityDataQuery query =
480   - new EntityDataQuery(singleEntityFilter, pageLink, entityFields, latestValues, null);
  396 + EntityDataQuery query = new EntityDataQuery(singleEntityFilter, pageLink, entityFields, latestValues, null);
481 397
482 398 return entityService.findEntityDataByQuery(currentTenantId, customerId, query);
483 399 }
484 400
485 401 /**
  402 + * 查询实体当天遥测数据的统计信息
  403 + *
  404 + * @param entityId 实体ID,例如:设备、用户、流量统计等
  405 + * @param currentTenantId 租户ID
  406 + * @param statics 统计内容,包括需要统计的指标名、数据聚合的算法
  407 + * 统计的时间区间、数据聚合的时间窗口、
  408 + * @return
  409 + * @throws ExecutionException
  410 + * @throws InterruptedException
  411 + */
  412 + private List<TsKvEntry> queryEntityTimeseries(EntityId entityId, TenantId currentTenantId, Map<String, Aggregation> statics) throws ExecutionException, InterruptedException {
  413 + long startTs = LocalDateTime.of(LocalDateTime.now().toLocalDate(), LocalTime.MIN).toInstant(ZoneOffset.of("+8")).toEpochMilli();
  414 + long endTs = LocalDateTime.now().toInstant(ZoneOffset.of("+8")).toEpochMilli();
  415 + int interval = 7200000;
  416 + int limit = (int) ((endTs - startTs) / interval) + FastIotConstants.MagicNumber.ONE;
  417 +
  418 + List<ReadTsKvQuery> queries = new ArrayList<>();
  419 + for (String key : statics.keySet()) {
  420 + queries.add(new BaseReadTsKvQuery(key, startTs, endTs, interval, limit, statics.get(key)));
  421 + }
  422 + List<TsKvEntry> tsKv = timeseriesService.findAll(currentTenantId, entityId, queries).get();
  423 + return tsKv;
  424 + }
  425 +
  426 + /**
486 427 * 设置客户返回信息
487 428 *
488 429 * @param homePageLeftTopDTO 首页顶部返回
489 430 * @param startTime 今日开始时间
490 431 * @param endTime 今日结束时间
491 432 */
492   - private void setCustomerInfoData(
493   - HomePageLeftTopDTO homePageLeftTopDTO, LocalDateTime startTime, LocalDateTime endTime) {
  433 + private void setCustomerInfoData(HomePageLeftTopDTO homePageLeftTopDTO, LocalDateTime startTime, LocalDateTime endTime) {
494 434 List<UserDTO> userList = userMapper.getUserCountByRoleType(RoleEnum.CUSTOMER_USER);
495 435 int sumCount = userList != null ? userList.size() : FastIotConstants.MagicNumber.ZERO;
496 436
497 437 int todayAdd = FastIotConstants.MagicNumber.ZERO;
498 438 if (userList != null && userList.size() > FastIotConstants.MagicNumber.ZERO) {
499   - todayAdd +=
500   - userList.stream()
501   - .filter(
502   - userDTO ->
503   - userDTO.getCreateTime().isAfter(startTime)
504   - && userDTO.getCreateTime().isBefore(endTime))
505   - .count();
  439 + todayAdd += userList.stream().filter(userDTO -> userDTO.getCreateTime().isAfter(startTime) && userDTO.getCreateTime().isBefore(endTime)).count();
506 440 }
507 441 BaseHomePageTop baseHomePageTop = new BaseHomePageTop(sumCount, todayAdd);
508 442 homePageLeftTopDTO.setCustomerInfo(baseHomePageTop);
... ... @@ -510,41 +444,31 @@ public class HomePageServiceImpl implements HomePageService {
510 444
511 445 private SettableFuture<List<TsValue>> setFutures(List<CompletableFuture<TsValue>> tsFutures) {
512 446 SettableFuture<List<TsValue>> listenableFuture = SettableFuture.create();
513   - CompletableFuture<List<TsValue>> entities =
514   - CompletableFuture.allOf(tsFutures.toArray(new CompletableFuture[tsFutures.size()]))
515   - .thenApply(
516   - v -> tsFutures.stream().map(CompletableFuture::join).collect(Collectors.toList()));
517   - entities.whenComplete(
518   - (tsValues, throwable) -> {
519   - if (throwable != null) {
520   - listenableFuture.setException(throwable);
521   - } else {
522   - listenableFuture.set(tsValues);
523   - }
524   - });
  447 + CompletableFuture<List<TsValue>> entities = CompletableFuture.allOf(tsFutures.toArray(new CompletableFuture[tsFutures.size()])).thenApply(v -> tsFutures.stream().map(CompletableFuture::join).collect(Collectors.toList()));
  448 + entities.whenComplete((tsValues, throwable) -> {
  449 + if (throwable != null) {
  450 + listenableFuture.setException(throwable);
  451 + } else {
  452 + listenableFuture.set(tsValues);
  453 + }
  454 + });
525 455 return listenableFuture;
526 456 }
527 457
528   - private SettableFuture<List<TenantTransportMessageDTO>> settableFuture(
529   - List<CompletableFuture<TenantTransportMessageDTO>> tsFutures) {
  458 + private SettableFuture<List<TenantTransportMessageDTO>> settableFuture(List<CompletableFuture<TenantTransportMessageDTO>> tsFutures) {
530 459 SettableFuture<List<TenantTransportMessageDTO>> listenableFuture = SettableFuture.create();
531   - CompletableFuture<List<TenantTransportMessageDTO>> entities =
532   - CompletableFuture.allOf(tsFutures.toArray(new CompletableFuture[tsFutures.size()]))
533   - .thenApply(
534   - v -> tsFutures.stream().map(CompletableFuture::join).collect(Collectors.toList()));
535   - entities.whenComplete(
536   - (tsValues, throwable) -> {
537   - if (throwable != null) {
538   - listenableFuture.setException(throwable);
539   - } else {
540   - listenableFuture.set(tsValues);
541   - }
542   - });
  460 + CompletableFuture<List<TenantTransportMessageDTO>> entities = CompletableFuture.allOf(tsFutures.toArray(new CompletableFuture[tsFutures.size()])).thenApply(v -> tsFutures.stream().map(CompletableFuture::join).collect(Collectors.toList()));
  461 + entities.whenComplete((tsValues, throwable) -> {
  462 + if (throwable != null) {
  463 + listenableFuture.setException(throwable);
  464 + } else {
  465 + listenableFuture.set(tsValues);
  466 + }
  467 + });
543 468 return listenableFuture;
544 469 }
545 470
546   - private FutureCallback<List<TsValue>> getTsValueCallback(
547   - final DeferredResult<List<TsValue>> response) {
  471 + private FutureCallback<List<TsValue>> getTsValueCallback(final DeferredResult<List<TsValue>> response) {
548 472 return new FutureCallback<>() {
549 473 @Override
550 474 public void onSuccess(@Nullable List<TsValue> tsValues) {
... ... @@ -558,8 +482,7 @@ public class HomePageServiceImpl implements HomePageService {
558 482 };
559 483 }
560 484
561   - private FutureCallback<List<TenantTransportMessageDTO>> getTransportMessageCallback(
562   - final DeferredResult<List<TenantTransportMessageDTO>> response) {
  485 + private FutureCallback<List<TenantTransportMessageDTO>> getTransportMessageCallback(final DeferredResult<List<TenantTransportMessageDTO>> response) {
563 486 return new FutureCallback<>() {
564 487 @Override
565 488 public void onSuccess(@Nullable List<TenantTransportMessageDTO> values) {
... ... @@ -568,8 +491,7 @@ public class HomePageServiceImpl implements HomePageService {
568 491 int length = values.size() - FastIotConstants.MagicNumber.ONE;
569 492 for (int i = FastIotConstants.MagicNumber.ZERO; i < length; i++) {
570 493 for (int j = FastIotConstants.MagicNumber.ZERO; j < length - i; j++) {
571   - if (values.get(j).getCount()
572   - < values.get(j + FastIotConstants.MagicNumber.ONE).getCount()) {
  494 + if (values.get(j).getCount() < values.get(j + FastIotConstants.MagicNumber.ONE).getCount()) {
573 495 String name = values.get(j).getName();
574 496 Long count = values.get(j).getCount();
575 497 values.get(j).setName(values.get(j + FastIotConstants.MagicNumber.ONE).getName());
... ... @@ -579,11 +501,7 @@ public class HomePageServiceImpl implements HomePageService {
579 501 }
580 502 }
581 503 }
582   - values =
583   - values.size() > FastIotConstants.MagicNumber.TEN
584   - ? values.subList(
585   - FastIotConstants.MagicNumber.ZERO, FastIotConstants.MagicNumber.TEN)
586   - : values;
  504 + values = values.size() > FastIotConstants.MagicNumber.TEN ? values.subList(FastIotConstants.MagicNumber.ZERO, FastIotConstants.MagicNumber.TEN) : values;
587 505 }
588 506 response.setResult(values);
589 507 }
... ... @@ -595,8 +513,7 @@ public class HomePageServiceImpl implements HomePageService {
595 513 };
596 514 }
597 515
598   - private CompletableFuture<TsValue> findDeviceInfoByTs(
599   - String customerId, Long startTs, Long endTs, long ts, TrendType trend) {
  516 + private CompletableFuture<TsValue> findDeviceInfoByTs(String customerId, Long startTs, Long endTs, long ts, TrendType trend) {
600 517 Integer value;
601 518 if (trend == TrendType.CUSTOMER_MESSAGE_STATISTICAL) {
602 519 value = deviceMapper.findDeviceMessageInfoByTs(customerId, startTs, endTs);
... ...