Commit eb2aebff477a4cb9cf0ea62079bac47cd455eb3a

Authored by 云中非
1 parent 9edbf48f

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

@@ -59,13 +59,7 @@ public class HomePageServiceImpl implements HomePageService { @@ -59,13 +59,7 @@ public class HomePageServiceImpl implements HomePageService {
59 private final YtUserService ytUserService; 59 private final YtUserService ytUserService;
60 60
61 @Override 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,18 +84,13 @@ public class HomePageServiceImpl implements HomePageService {
90 if (StringUtils.isNotEmpty(customerId)) { 84 if (StringUtils.isNotEmpty(customerId)) {
91 // 查询customerId 85 // 查询customerId
92 queryMap.put("customerId", customerId); 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 if (baseHomePageTopList.size() > FastIotConstants.MagicNumber.ZERO) { 89 if (baseHomePageTopList.size() > FastIotConstants.MagicNumber.ZERO) {
100 messageInfo.setMessageCount(baseHomePageTopList.get(0).getSumCount()); 90 messageInfo.setMessageCount(baseHomePageTopList.get(0).getSumCount());
101 messageInfo.setTodayMessageAdd(baseHomePageTopList.get(0).getTodayAdd()); 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 if (alarmList.size() > FastIotConstants.MagicNumber.ZERO) { 94 if (alarmList.size() > FastIotConstants.MagicNumber.ZERO) {
106 alarm.setSumCount(alarmList.get(0).getSumCount()); 95 alarm.setSumCount(alarmList.get(0).getSumCount());
107 alarm.setTodayAdd(alarmList.get(0).getTodayAdd()); 96 alarm.setTodayAdd(alarmList.get(0).getTodayAdd());
@@ -125,13 +114,7 @@ public class HomePageServiceImpl implements HomePageService { @@ -125,13 +114,7 @@ public class HomePageServiceImpl implements HomePageService {
125 } 114 }
126 115
127 @Override 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 List<CompletableFuture<TsValue>> futures = new ArrayList<>(); 118 List<CompletableFuture<TsValue>> futures = new ArrayList<>();
136 interval = interval < 7200000 ? 7200000 : interval; 119 interval = interval < 7200000 ? 7200000 : interval;
137 long stepTs = startTs; 120 long stepTs = startTs;
@@ -139,22 +122,16 @@ public class HomePageServiceImpl implements HomePageService { @@ -139,22 +122,16 @@ public class HomePageServiceImpl implements HomePageService {
139 long tempStartTs = stepTs; 122 long tempStartTs = stepTs;
140 long tempEndTs = stepTs + interval; 123 long tempEndTs = stepTs + interval;
141 long ts = tempStartTs + (tempEndTs - tempStartTs) / 2; 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 CompletableFuture<TsValue> tsValueCompletableFuture = null; 127 CompletableFuture<TsValue> tsValueCompletableFuture = null;
147 //客户查询的是告警统计 消息统计 128 //客户查询的是告警统计 消息统计
148 if (isCustomer) { 129 if (isCustomer) {
149 if (trend == TrendType.CUSTOMER_ALARM_STATISTICAL) { 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 if (trend == TrendType.CUSTOMER_MESSAGE_STATISTICAL) { 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 } else { 136 } else {
160 if (trend == TrendType.TENANT_TREND) { 137 if (trend == TrendType.TENANT_TREND) {
@@ -169,19 +146,14 @@ public class HomePageServiceImpl implements HomePageService { @@ -169,19 +146,14 @@ public class HomePageServiceImpl implements HomePageService {
169 } 146 }
170 final DeferredResult<List<TsValue>> deferredResult = new DeferredResult<>(); 147 final DeferredResult<List<TsValue>> deferredResult = new DeferredResult<>();
171 if (futures.size() > FastIotConstants.MagicNumber.ZERO) { 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 return deferredResult; 158 return deferredResult;
187 } 159 }
@@ -190,28 +162,20 @@ public class HomePageServiceImpl implements HomePageService { @@ -190,28 +162,20 @@ public class HomePageServiceImpl implements HomePageService {
190 public DeferredResult<List<TenantTransportMessageDTO>> getTop10() { 162 public DeferredResult<List<TenantTransportMessageDTO>> getTop10() {
191 List<TenantDTO> tenants = tenantService.getAllTenant(); 163 List<TenantDTO> tenants = tenantService.getAllTenant();
192 List<CompletableFuture<TenantTransportMessageDTO>> futures = new ArrayList<>(); 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 final DeferredResult<List<TenantTransportMessageDTO>> deferredResult = new DeferredResult<>(); 169 final DeferredResult<List<TenantTransportMessageDTO>> deferredResult = new DeferredResult<>();
199 if (futures.size() > FastIotConstants.MagicNumber.ZERO) { 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 } else { 179 } else {
216 List<TenantTransportMessageDTO> result = new ArrayList<>(); 180 List<TenantTransportMessageDTO> result = new ArrayList<>();
217 deferredResult.setResult(result); 181 deferredResult.setResult(result);
@@ -221,36 +185,25 @@ public class HomePageServiceImpl implements HomePageService { @@ -221,36 +185,25 @@ public class HomePageServiceImpl implements HomePageService {
221 185
222 @Override 186 @Override
223 @Async 187 @Async
224 - public CompletableFuture<TenantTransportMessageDTO> getTransportMessageByTenantId(  
225 - TenantId tenantId, String tenantName) { 188 + public CompletableFuture<TenantTransportMessageDTO> getTransportMessageByTenantId(TenantId tenantId, String tenantName) {
226 List<EntityKey> latestValues = new ArrayList<>(); 189 List<EntityKey> latestValues = new ArrayList<>();
227 latestValues.add(new EntityKey(EntityKeyType.TIME_SERIES, "transportMsgCount")); 190 latestValues.add(new EntityKey(EntityKeyType.TIME_SERIES, "transportMsgCount"));
228 ApiUsageState apiUsageState = apiUsageStateService.findTenantApiUsageState(tenantId); 191 ApiUsageState apiUsageState = apiUsageStateService.findTenantApiUsageState(tenantId);
229 PageData<EntityData> pageData = queryEntityData(apiUsageState.getId(), tenantId, null, latestValues); 192 PageData<EntityData> pageData = queryEntityData(apiUsageState.getId(), tenantId, null, latestValues);
230 Map<EntityKeyType, Map<String, TsValue>> latest = pageData.getData().get(0).getLatest(); 193 Map<EntityKeyType, Map<String, TsValue>> latest = pageData.getData().get(0).getLatest();
231 TenantTransportMessageDTO transportMessage = new TenantTransportMessageDTO(); 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 return CompletableFuture.supplyAsync(() -> transportMessage); 207 return CompletableFuture.supplyAsync(() -> transportMessage);
255 } 208 }
256 209
@@ -262,60 +215,64 @@ public class HomePageServiceImpl implements HomePageService { @@ -262,60 +215,64 @@ public class HomePageServiceImpl implements HomePageService {
262 */ 215 */
263 private void setDeviceInfoData(List<DeviceDTO> deviceList, HomeDeviceInfoDTO homeDeviceInfoDTO) { 216 private void setDeviceInfoData(List<DeviceDTO> deviceList, HomeDeviceInfoDTO homeDeviceInfoDTO) {
264 homeDeviceInfoDTO.setSumCount(deviceList.size()); 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 * @return 244 * @return
293 */ 245 */
294 - private List<TenantDTO> getTenantInfo(){ 246 + private List<TenantDTO> getTenantInfo() {
295 List<TenantDTO> tenants = tenantService.getAllTenant(); 247 List<TenantDTO> tenants = tenantService.getAllTenant();
296 return tenants; 248 return tenants;
297 } 249 }
298 250
299 /** 251 /**
300 * 获取当前用户权限下的客户信息 252 * 获取当前用户权限下的客户信息
  253 + *
301 * @return 254 * @return
302 */ 255 */
303 - private List<UserDTO> getCustomerInfo(){ 256 + private List<UserDTO> getCustomerInfo() {
304 List<UserDTO> userList = userMapper.getUserCountByRoleType(RoleEnum.CUSTOMER_USER); 257 List<UserDTO> userList = userMapper.getUserCountByRoleType(RoleEnum.CUSTOMER_USER);
305 return userList; 258 return userList;
306 } 259 }
307 - private List<TenantDTO> getApiUsageInfo(){ 260 +
  261 + private List<TenantDTO> getApiUsageInfo() {
308 List<TenantDTO> tenants = tenantService.getAllTenant(); 262 List<TenantDTO> tenants = tenantService.getAllTenant();
309 return tenants; 263 return tenants;
310 } 264 }
311 - private List<TenantDTO> getDeviceInfo(){ 265 +
  266 + private List<TenantDTO> getDeviceInfo() {
312 List<TenantDTO> tenants = tenantService.getAllTenant(); 267 List<TenantDTO> tenants = tenantService.getAllTenant();
313 return tenants; 268 return tenants;
314 } 269 }
315 - private List<TenantDTO> getAlarmInfo(){ 270 +
  271 + private List<TenantDTO> getAlarmInfo() {
316 List<TenantDTO> tenants = tenantService.getAllTenant(); 272 List<TenantDTO> tenants = tenantService.getAllTenant();
317 return tenants; 273 return tenants;
318 } 274 }
  275 +
319 /** 276 /**
320 * 设置租户返回信息 277 * 设置租户返回信息
321 * 278 *
@@ -323,17 +280,9 @@ public class HomePageServiceImpl implements HomePageService { @@ -323,17 +280,9 @@ public class HomePageServiceImpl implements HomePageService {
323 * @param startTime 今日开始时间 280 * @param startTime 今日开始时间
324 * @param endTime 今日结束时间 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 List<TenantDTO> tenants = tenantService.getAllTenant(); 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 int sumCount = tenants.size(); 286 int sumCount = tenants.size();
338 BaseHomePageTop baseHomePageTop = new BaseHomePageTop(sumCount, todayAdd); 287 BaseHomePageTop baseHomePageTop = new BaseHomePageTop(sumCount, todayAdd);
339 homePageLeftTopDTO.setTenantInfo(baseHomePageTop); 288 homePageLeftTopDTO.setTenantInfo(baseHomePageTop);
@@ -346,9 +295,7 @@ public class HomePageServiceImpl implements HomePageService { @@ -346,9 +295,7 @@ public class HomePageServiceImpl implements HomePageService {
346 * @param messageInfo 消息 295 * @param messageInfo 消息
347 * @param alarm 告警 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 List<EntityKey> entityFields = new ArrayList<>(); 299 List<EntityKey> entityFields = new ArrayList<>();
353 entityFields.add(new EntityKey(EntityKeyType.ENTITY_FIELD, "name")); 300 entityFields.add(new EntityKey(EntityKeyType.ENTITY_FIELD, "name"));
354 entityFields.add(new EntityKey(EntityKeyType.ENTITY_FIELD, "label")); 301 entityFields.add(new EntityKey(EntityKeyType.ENTITY_FIELD, "label"));
@@ -362,40 +309,31 @@ public class HomePageServiceImpl implements HomePageService { @@ -362,40 +309,31 @@ public class HomePageServiceImpl implements HomePageService {
362 ApiUsageState apiUsageState = apiUsageStateService.findTenantApiUsageState(currentTenantId); 309 ApiUsageState apiUsageState = apiUsageStateService.findTenantApiUsageState(currentTenantId);
363 PageData<EntityData> pageData = queryEntityData(apiUsageState.getId(), currentTenantId, entityFields, latestValues); 310 PageData<EntityData> pageData = queryEntityData(apiUsageState.getId(), currentTenantId, entityFields, latestValues);
364 Map<EntityKeyType, Map<String, TsValue>> latest = pageData.getData().get(0).getLatest(); 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,101 +346,97 @@ public class HomePageServiceImpl implements HomePageService {
408 * @throws ExecutionException 异常 346 * @throws ExecutionException 异常
409 * @throws InterruptedException 异常 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 * @return 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 CustomerId customerId = new CustomerId(EntityId.NULL_UUID); 386 CustomerId customerId = new CustomerId(EntityId.NULL_UUID);
467 387
468 EntityKey key = new EntityKey(EntityKeyType.ENTITY_FIELD, "createdTime"); 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 SingleEntityFilter singleEntityFilter = new SingleEntityFilter(); 393 SingleEntityFilter singleEntityFilter = new SingleEntityFilter();
477 singleEntityFilter.setSingleEntity(entityId); 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 return entityService.findEntityDataByQuery(currentTenantId, customerId, query); 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 * @param homePageLeftTopDTO 首页顶部返回 429 * @param homePageLeftTopDTO 首页顶部返回
489 * @param startTime 今日开始时间 430 * @param startTime 今日开始时间
490 * @param endTime 今日结束时间 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 List<UserDTO> userList = userMapper.getUserCountByRoleType(RoleEnum.CUSTOMER_USER); 434 List<UserDTO> userList = userMapper.getUserCountByRoleType(RoleEnum.CUSTOMER_USER);
495 int sumCount = userList != null ? userList.size() : FastIotConstants.MagicNumber.ZERO; 435 int sumCount = userList != null ? userList.size() : FastIotConstants.MagicNumber.ZERO;
496 436
497 int todayAdd = FastIotConstants.MagicNumber.ZERO; 437 int todayAdd = FastIotConstants.MagicNumber.ZERO;
498 if (userList != null && userList.size() > FastIotConstants.MagicNumber.ZERO) { 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 BaseHomePageTop baseHomePageTop = new BaseHomePageTop(sumCount, todayAdd); 441 BaseHomePageTop baseHomePageTop = new BaseHomePageTop(sumCount, todayAdd);
508 homePageLeftTopDTO.setCustomerInfo(baseHomePageTop); 442 homePageLeftTopDTO.setCustomerInfo(baseHomePageTop);
@@ -510,41 +444,31 @@ public class HomePageServiceImpl implements HomePageService { @@ -510,41 +444,31 @@ public class HomePageServiceImpl implements HomePageService {
510 444
511 private SettableFuture<List<TsValue>> setFutures(List<CompletableFuture<TsValue>> tsFutures) { 445 private SettableFuture<List<TsValue>> setFutures(List<CompletableFuture<TsValue>> tsFutures) {
512 SettableFuture<List<TsValue>> listenableFuture = SettableFuture.create(); 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 return listenableFuture; 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 SettableFuture<List<TenantTransportMessageDTO>> listenableFuture = SettableFuture.create(); 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 return listenableFuture; 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 return new FutureCallback<>() { 472 return new FutureCallback<>() {
549 @Override 473 @Override
550 public void onSuccess(@Nullable List<TsValue> tsValues) { 474 public void onSuccess(@Nullable List<TsValue> tsValues) {
@@ -558,8 +482,7 @@ public class HomePageServiceImpl implements HomePageService { @@ -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 return new FutureCallback<>() { 486 return new FutureCallback<>() {
564 @Override 487 @Override
565 public void onSuccess(@Nullable List<TenantTransportMessageDTO> values) { 488 public void onSuccess(@Nullable List<TenantTransportMessageDTO> values) {
@@ -568,8 +491,7 @@ public class HomePageServiceImpl implements HomePageService { @@ -568,8 +491,7 @@ public class HomePageServiceImpl implements HomePageService {
568 int length = values.size() - FastIotConstants.MagicNumber.ONE; 491 int length = values.size() - FastIotConstants.MagicNumber.ONE;
569 for (int i = FastIotConstants.MagicNumber.ZERO; i < length; i++) { 492 for (int i = FastIotConstants.MagicNumber.ZERO; i < length; i++) {
570 for (int j = FastIotConstants.MagicNumber.ZERO; j < length - i; j++) { 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 String name = values.get(j).getName(); 495 String name = values.get(j).getName();
574 Long count = values.get(j).getCount(); 496 Long count = values.get(j).getCount();
575 values.get(j).setName(values.get(j + FastIotConstants.MagicNumber.ONE).getName()); 497 values.get(j).setName(values.get(j + FastIotConstants.MagicNumber.ONE).getName());
@@ -579,11 +501,7 @@ public class HomePageServiceImpl implements HomePageService { @@ -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 response.setResult(values); 506 response.setResult(values);
589 } 507 }
@@ -595,8 +513,7 @@ public class HomePageServiceImpl implements HomePageService { @@ -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 Integer value; 517 Integer value;
601 if (trend == TrendType.CUSTOMER_MESSAGE_STATISTICAL) { 518 if (trend == TrendType.CUSTOMER_MESSAGE_STATISTICAL) {
602 value = deviceMapper.findDeviceMessageInfoByTs(customerId, startTs, endTs); 519 value = deviceMapper.findDeviceMessageInfoByTs(customerId, startTs, endTs);