Showing
1 changed file
with
183 additions
and
266 deletions
... | ... | @@ -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); | ... | ... |