Showing
1 changed file
with
544 additions
and
503 deletions
... | ... | @@ -44,524 +44,565 @@ import java.util.stream.Collectors; |
44 | 44 | @RequiredArgsConstructor |
45 | 45 | public class HomePageServiceImpl implements HomePageService { |
46 | 46 | |
47 | - private final DeviceMapper deviceMapper; | |
48 | - | |
49 | - private final YtTenantService tenantService; | |
50 | - | |
51 | - private final UserMapper userMapper; | |
52 | - | |
53 | - private final EntityService entityService; | |
54 | - | |
55 | - private final ApiUsageStateService apiUsageStateService; | |
56 | - | |
57 | - private final TimeseriesService timeseriesService; | |
58 | - | |
59 | - private final YtUserService ytUserService; | |
60 | - | |
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 { | |
69 | - // 如果当前用户是超级管理员或平台管理员,查询所有的设备数量、租户数量、客户数量 | |
70 | - // 如果当前用户是租户管理员,查询租户下的所有设备、告警、消息量 | |
71 | - // 如果当前用户是客户,查询客户可以查看的设备、告警、消息量 | |
72 | - HomePageLeftTopDTO homePageLeftTopDTO = new HomePageLeftTopDTO(); | |
73 | - HomeDeviceInfoDTO homeDeviceInfo; | |
74 | - LocalDateTime nowTime = LocalDateTime.now(); | |
75 | - LocalDateTime startTime = LocalDateTime.of(nowTime.toLocalDate(), LocalTime.MIN); | |
76 | - LocalDateTime endTime = LocalDateTime.of(nowTime.toLocalDate(), LocalTime.MAX); | |
77 | - HomePageTopMessage messageInfo = new HomePageTopMessage(FastIotConstants.MagicNumber.ZERO); | |
78 | - BaseHomePageTop alarm = new BaseHomePageTop(FastIotConstants.MagicNumber.ZERO); | |
79 | - Map<String, Object> queryMap = new HashMap<>(); | |
80 | - List<DeviceDTO> deviceList; | |
81 | - if (isPtSysAdmin || isPtAdmin) { | |
82 | - setTenantInfoData(homePageLeftTopDTO, startTime, endTime); | |
83 | - setCustomerInfoData(homePageLeftTopDTO, startTime, endTime); | |
84 | - } else if (isTenantAdmin) { | |
85 | - queryMap.put("tenantId", tenantId); | |
86 | - setAlarmAndMessageInfo(tenantId, messageInfo, alarm); | |
87 | - | |
88 | - } else { | |
89 | - String customerId = userMapper.findCustomerIdByUserId(currentUserId); | |
90 | - if (StringUtils.isNotEmpty(customerId)) { | |
91 | - // 查询customerId | |
92 | - 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); | |
99 | - if (baseHomePageTopList.size() > FastIotConstants.MagicNumber.ZERO) { | |
100 | - messageInfo.setMessageCount(baseHomePageTopList.get(0).getSumCount()); | |
101 | - messageInfo.setTodayMessageAdd(baseHomePageTopList.get(0).getTodayAdd()); | |
47 | + private final DeviceMapper deviceMapper; | |
48 | + | |
49 | + private final YtTenantService tenantService; | |
50 | + | |
51 | + private final UserMapper userMapper; | |
52 | + | |
53 | + private final EntityService entityService; | |
54 | + | |
55 | + private final ApiUsageStateService apiUsageStateService; | |
56 | + | |
57 | + private final TimeseriesService timeseriesService; | |
58 | + | |
59 | + private final YtUserService ytUserService; | |
60 | + | |
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 { | |
69 | + // 如果当前用户是超级管理员或平台管理员,查询所有的设备数量、租户数量、客户数量 | |
70 | + // 如果当前用户是租户管理员,查询租户下的所有设备、告警、消息量 | |
71 | + // 如果当前用户是客户,查询客户可以查看的设备、告警、消息量 | |
72 | + HomePageLeftTopDTO homePageLeftTopDTO = new HomePageLeftTopDTO(); | |
73 | + HomeDeviceInfoDTO homeDeviceInfo; | |
74 | + LocalDateTime nowTime = LocalDateTime.now(); | |
75 | + LocalDateTime startTime = LocalDateTime.of(nowTime.toLocalDate(), LocalTime.MIN); | |
76 | + LocalDateTime endTime = LocalDateTime.of(nowTime.toLocalDate(), LocalTime.MAX); | |
77 | + HomePageTopMessage messageInfo = new HomePageTopMessage(FastIotConstants.MagicNumber.ZERO); | |
78 | + BaseHomePageTop alarm = new BaseHomePageTop(FastIotConstants.MagicNumber.ZERO); | |
79 | + Map<String, Object> queryMap = new HashMap<>(); | |
80 | + List<DeviceDTO> deviceList; | |
81 | + if (isPtSysAdmin || isPtAdmin) { | |
82 | + setTenantInfoData(homePageLeftTopDTO, startTime, endTime); | |
83 | + setCustomerInfoData(homePageLeftTopDTO, startTime, endTime); | |
84 | + } else if (isTenantAdmin) { | |
85 | + queryMap.put("tenantId", tenantId); | |
86 | + setAlarmAndMessageInfo(tenantId, messageInfo, alarm); | |
87 | + | |
88 | + } else { | |
89 | + String customerId = userMapper.findCustomerIdByUserId(currentUserId); | |
90 | + if (StringUtils.isNotEmpty(customerId)) { | |
91 | + // 查询customerId | |
92 | + 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); | |
99 | + if (baseHomePageTopList.size() > FastIotConstants.MagicNumber.ZERO) { | |
100 | + messageInfo.setMessageCount(baseHomePageTopList.get(0).getSumCount()); | |
101 | + messageInfo.setTodayMessageAdd(baseHomePageTopList.get(0).getTodayAdd()); | |
102 | + } | |
103 | + List<BaseHomePageTop> alarmList = | |
104 | + deviceMapper.findDeviceAlarmInfoByCustomer(startTs, customerId); | |
105 | + if (alarmList.size() > FastIotConstants.MagicNumber.ZERO) { | |
106 | + alarm.setSumCount(alarmList.get(0).getSumCount()); | |
107 | + alarm.setTodayAdd(alarmList.get(0).getTodayAdd()); | |
108 | + } | |
109 | + } | |
102 | 110 | } |
103 | - List<BaseHomePageTop> alarmList = | |
104 | - deviceMapper.findDeviceAlarmInfoByCustomer(startTs, customerId); | |
105 | - if (alarmList.size() > FastIotConstants.MagicNumber.ZERO) { | |
106 | - alarm.setSumCount(alarmList.get(0).getSumCount()); | |
107 | - alarm.setTodayAdd(alarmList.get(0).getTodayAdd()); | |
111 | + deviceList = deviceMapper.findDevices(queryMap); | |
112 | + homeDeviceInfo = new HomeDeviceInfoDTO(FastIotConstants.MagicNumber.ZERO); | |
113 | + if (null != deviceList) { | |
114 | + setDeviceInfoData(deviceList, homeDeviceInfo); | |
108 | 115 | } |
109 | - } | |
116 | + homePageLeftTopDTO.setDeviceInfo(homeDeviceInfo); | |
117 | + homePageLeftTopDTO.setMessageInfo(messageInfo); | |
118 | + homePageLeftTopDTO.setAlarmInfo(alarm); | |
119 | + return homePageLeftTopDTO; | |
110 | 120 | } |
111 | - deviceList = deviceMapper.findDevices(queryMap); | |
112 | - homeDeviceInfo = new HomeDeviceInfoDTO(FastIotConstants.MagicNumber.ZERO); | |
113 | - if (null != deviceList) { | |
114 | - setDeviceInfoData(deviceList, homeDeviceInfo); | |
121 | + | |
122 | + @Override | |
123 | + public YtPageData<TenantDTO> getHomePageRightInfo(Map<String, Object> queryMap) { | |
124 | + return tenantService.getCurrentMonthExpireTenantPage(queryMap); | |
115 | 125 | } |
116 | - homePageLeftTopDTO.setDeviceInfo(homeDeviceInfo); | |
117 | - homePageLeftTopDTO.setMessageInfo(messageInfo); | |
118 | - homePageLeftTopDTO.setAlarmInfo(alarm); | |
119 | - return homePageLeftTopDTO; | |
120 | - } | |
121 | - | |
122 | - @Override | |
123 | - public YtPageData<TenantDTO> getHomePageRightInfo(Map<String, Object> queryMap) { | |
124 | - return tenantService.getCurrentMonthExpireTenantPage(queryMap); | |
125 | - } | |
126 | - | |
127 | - @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) { | |
135 | - List<CompletableFuture<TsValue>> futures = new ArrayList<>(); | |
136 | - interval = interval < 7200000 ? 7200000 : interval; | |
137 | - long stepTs = startTs; | |
138 | - while (stepTs < endTs) { | |
139 | - long tempStartTs = stepTs; | |
140 | - long tempEndTs = stepTs + interval; | |
141 | - 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)); | |
146 | - CompletableFuture<TsValue> tsValueCompletableFuture = null; | |
147 | - //客户查询的是告警统计 消息统计 | |
148 | - if (isCustomer) { | |
149 | - if (trend == TrendType.CUSTOMER_ALARM_STATISTICAL) { | |
150 | - tsValueCompletableFuture = | |
151 | - findDeviceInfoByTs( | |
152 | - customerId, tempStartTs, tempEndTs, ts, TrendType.CUSTOMER_ALARM_STATISTICAL); | |
153 | - } | |
154 | - if (trend == TrendType.CUSTOMER_MESSAGE_STATISTICAL) { | |
155 | - tsValueCompletableFuture = | |
156 | - findDeviceInfoByTs( | |
157 | - customerId, tempStartTs, tempEndTs, ts, TrendType.CUSTOMER_MESSAGE_STATISTICAL); | |
126 | + | |
127 | + @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) { | |
135 | + List<CompletableFuture<TsValue>> futures = new ArrayList<>(); | |
136 | + interval = interval < 7200000 ? 7200000 : interval; | |
137 | + long stepTs = startTs; | |
138 | + while (stepTs < endTs) { | |
139 | + long tempStartTs = stepTs; | |
140 | + long tempEndTs = stepTs + interval; | |
141 | + 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)); | |
146 | + CompletableFuture<TsValue> tsValueCompletableFuture = null; | |
147 | + //客户查询的是告警统计 消息统计 | |
148 | + if (isCustomer) { | |
149 | + if (trend == TrendType.CUSTOMER_ALARM_STATISTICAL) { | |
150 | + tsValueCompletableFuture = | |
151 | + findDeviceInfoByTs( | |
152 | + customerId, tempStartTs, tempEndTs, ts, TrendType.CUSTOMER_ALARM_STATISTICAL); | |
153 | + } | |
154 | + if (trend == TrendType.CUSTOMER_MESSAGE_STATISTICAL) { | |
155 | + tsValueCompletableFuture = | |
156 | + findDeviceInfoByTs( | |
157 | + customerId, tempStartTs, tempEndTs, ts, TrendType.CUSTOMER_MESSAGE_STATISTICAL); | |
158 | + } | |
159 | + } else { | |
160 | + if (trend == TrendType.TENANT_TREND) { | |
161 | + tsValueCompletableFuture = tenantService.findTenantsByTs(startTime, endTime, ts); | |
162 | + } | |
163 | + if (trend == TrendType.CUSTOMER_TREND) { | |
164 | + tsValueCompletableFuture = ytUserService.findUsersAsyncByTs(startTime, endTime, ts); | |
165 | + } | |
166 | + } | |
167 | + futures.add(tsValueCompletableFuture); | |
168 | + stepTs = tempEndTs; | |
158 | 169 | } |
159 | - } else { | |
160 | - if (trend == TrendType.TENANT_TREND) { | |
161 | - tsValueCompletableFuture = tenantService.findTenantsByTs(startTime, endTime, ts); | |
170 | + final DeferredResult<List<TsValue>> deferredResult = new DeferredResult<>(); | |
171 | + 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()); | |
162 | 185 | } |
163 | - if (trend == TrendType.CUSTOMER_TREND) { | |
164 | - tsValueCompletableFuture = ytUserService.findUsersAsyncByTs(startTime, endTime, ts); | |
186 | + return deferredResult; | |
187 | + } | |
188 | + | |
189 | + @Override | |
190 | + public DeferredResult<List<TenantTransportMessageDTO>> getTop10() { | |
191 | + List<TenantDTO> tenants = tenantService.getAllTenant(); | |
192 | + 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 | + }); | |
198 | + final DeferredResult<List<TenantTransportMessageDTO>> deferredResult = new DeferredResult<>(); | |
199 | + 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()); | |
215 | + } else { | |
216 | + List<TenantTransportMessageDTO> result = new ArrayList<>(); | |
217 | + deferredResult.setResult(result); | |
165 | 218 | } |
166 | - } | |
167 | - futures.add(tsValueCompletableFuture); | |
168 | - stepTs = tempEndTs; | |
219 | + return deferredResult; | |
169 | 220 | } |
170 | - final DeferredResult<List<TsValue>> deferredResult = new DeferredResult<>(); | |
171 | - 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()); | |
221 | + | |
222 | + @Override | |
223 | + @Async | |
224 | + public CompletableFuture<TenantTransportMessageDTO> getTransportMessageByTenantId( | |
225 | + TenantId tenantId, String tenantName) { | |
226 | + List<EntityKey> latestValues = new ArrayList<>(); | |
227 | + latestValues.add(new EntityKey(EntityKeyType.TIME_SERIES, "transportMsgCount")); | |
228 | + ApiUsageState apiUsageState = apiUsageStateService.findTenantApiUsageState(tenantId); | |
229 | + PageData<EntityData> pageData = queryEntityData(apiUsageState.getId(), tenantId, null, latestValues); | |
230 | + Map<EntityKeyType, Map<String, TsValue>> latest = pageData.getData().get(0).getLatest(); | |
231 | + 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 | + }); | |
254 | + return CompletableFuture.supplyAsync(() -> transportMessage); | |
185 | 255 | } |
186 | - return deferredResult; | |
187 | - } | |
188 | - | |
189 | - @Override | |
190 | - public DeferredResult<List<TenantTransportMessageDTO>> getTop10() { | |
191 | - List<TenantDTO> tenants = tenantService.getAllTenant(); | |
192 | - 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 | - }); | |
198 | - final DeferredResult<List<TenantTransportMessageDTO>> deferredResult = new DeferredResult<>(); | |
199 | - 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()); | |
215 | - } else { | |
216 | - List<TenantTransportMessageDTO> result = new ArrayList<>(); | |
217 | - deferredResult.setResult(result); | |
256 | + | |
257 | + /** | |
258 | + * 设置设备相关的数据 | |
259 | + * | |
260 | + * @param deviceList 拥有的设备 | |
261 | + * @param homeDeviceInfoDTO 首页信息 | |
262 | + */ | |
263 | + private void setDeviceInfoData(List<DeviceDTO> deviceList, HomeDeviceInfoDTO homeDeviceInfoDTO) { | |
264 | + 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 | + }); | |
288 | + } | |
289 | + | |
290 | + /** | |
291 | + * 获取当前用户权限下的租户信息 | |
292 | + * @return | |
293 | + */ | |
294 | + private List<TenantDTO> getTenantInfo(){ | |
295 | + List<TenantDTO> tenants = tenantService.getAllTenant(); | |
296 | + return tenants; | |
218 | 297 | } |
219 | - return deferredResult; | |
220 | - } | |
221 | - | |
222 | - @Override | |
223 | - @Async | |
224 | - public CompletableFuture<TenantTransportMessageDTO> getTransportMessageByTenantId( | |
225 | - TenantId tenantId, String tenantName) { | |
226 | - List<EntityKey> latestValues = new ArrayList<>(); | |
227 | - latestValues.add(new EntityKey(EntityKeyType.TIME_SERIES, "transportMsgCount")); | |
228 | - PageData<EntityData> pageData = queryEntityData(tenantId, null, latestValues); | |
229 | - Map<EntityKeyType, Map<String, TsValue>> latest = pageData.getData().get(0).getLatest(); | |
230 | - TenantTransportMessageDTO transportMessage = new TenantTransportMessageDTO(); | |
231 | - latest | |
232 | - .keySet() | |
233 | - .forEach( | |
234 | - item -> { | |
235 | - if (item.equals(EntityKeyType.TIME_SERIES)) { | |
236 | - Map<String, TsValue> tsValueMap = latest.get(item); | |
237 | - tsValueMap | |
238 | - .keySet() | |
239 | - .forEach( | |
240 | - mapKey -> { | |
241 | - Long value = | |
242 | - Long.valueOf( | |
243 | - tsValueMap.get(mapKey).getValue().isEmpty() | |
244 | - ? FastIotConstants.MagicNumber.ZERO + "" | |
245 | - : tsValueMap.get(mapKey).getValue()); | |
246 | - if (mapKey.equals("transportMsgCount")) { | |
247 | - transportMessage.setName(tenantName); | |
248 | - transportMessage.setCount(value); | |
249 | - } | |
298 | + | |
299 | + /** | |
300 | + * 获取当前用户权限下的客户信息 | |
301 | + * @return | |
302 | + */ | |
303 | + private List<UserDTO> getCustomerInfo(){ | |
304 | + List<UserDTO> userList = userMapper.getUserCountByRoleType(RoleEnum.CUSTOMER_USER); | |
305 | + return userList; | |
306 | + } | |
307 | + private List<TenantDTO> getApiUsageInfo(){ | |
308 | + List<TenantDTO> tenants = tenantService.getAllTenant(); | |
309 | + return tenants; | |
310 | + } | |
311 | + private List<TenantDTO> getDeviceInfo(){ | |
312 | + List<TenantDTO> tenants = tenantService.getAllTenant(); | |
313 | + return tenants; | |
314 | + } | |
315 | + private List<TenantDTO> getAlarmInfo(){ | |
316 | + List<TenantDTO> tenants = tenantService.getAllTenant(); | |
317 | + return tenants; | |
318 | + } | |
319 | + /** | |
320 | + * 设置租户返回信息 | |
321 | + * | |
322 | + * @param homePageLeftTopDTO 首页顶部返回 | |
323 | + * @param startTime 今日开始时间 | |
324 | + * @param endTime 今日结束时间 | |
325 | + */ | |
326 | + private void setTenantInfoData( | |
327 | + HomePageLeftTopDTO homePageLeftTopDTO, LocalDateTime startTime, LocalDateTime endTime) { | |
328 | + 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(); | |
337 | + int sumCount = tenants.size(); | |
338 | + BaseHomePageTop baseHomePageTop = new BaseHomePageTop(sumCount, todayAdd); | |
339 | + homePageLeftTopDTO.setTenantInfo(baseHomePageTop); | |
340 | + } | |
341 | + | |
342 | + /** | |
343 | + * 设置首页的告警和消息 | |
344 | + * | |
345 | + * @param tenantId 租户ID | |
346 | + * @param messageInfo 消息 | |
347 | + * @param alarm 告警 | |
348 | + */ | |
349 | + private void setAlarmAndMessageInfo( | |
350 | + String tenantId, HomePageTopMessage messageInfo, BaseHomePageTop alarm) | |
351 | + throws ExecutionException, InterruptedException { | |
352 | + List<EntityKey> entityFields = new ArrayList<>(); | |
353 | + entityFields.add(new EntityKey(EntityKeyType.ENTITY_FIELD, "name")); | |
354 | + entityFields.add(new EntityKey(EntityKeyType.ENTITY_FIELD, "label")); | |
355 | + entityFields.add(new EntityKey(EntityKeyType.ENTITY_FIELD, "additionalInfo")); | |
356 | + List<EntityKey> latestValues = new ArrayList<>(); | |
357 | + latestValues.add(new EntityKey(EntityKeyType.TIME_SERIES, "transportMsgCount")); | |
358 | + latestValues.add(new EntityKey(EntityKeyType.TIME_SERIES, "transportDataPointsCount")); | |
359 | + latestValues.add(new EntityKey(EntityKeyType.TIME_SERIES, "createdAlarmsCount")); | |
360 | + | |
361 | + TenantId currentTenantId = new TenantId(UUID.fromString(tenantId)); | |
362 | + ApiUsageState apiUsageState = apiUsageStateService.findTenantApiUsageState(currentTenantId); | |
363 | + PageData<EntityData> pageData = queryEntityData(apiUsageState.getId(), currentTenantId, entityFields, latestValues); | |
364 | + 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 | + } | |
250 | 395 | }); |
251 | - } | |
252 | - }); | |
253 | - return CompletableFuture.supplyAsync(() -> transportMessage); | |
254 | - } | |
255 | - | |
256 | - /** | |
257 | - * 设置设备相关的数据 | |
258 | - * | |
259 | - * @param deviceList 拥有的设备 | |
260 | - * @param homeDeviceInfoDTO 首页信息 | |
261 | - */ | |
262 | - private void setDeviceInfoData(List<DeviceDTO> deviceList, HomeDeviceInfoDTO homeDeviceInfoDTO) { | |
263 | - homeDeviceInfoDTO.setSumCount(deviceList.size()); | |
264 | - deviceList.forEach( | |
265 | - ytDevice -> { | |
266 | - int basicNum = FastIotConstants.MagicNumber.ONE; | |
267 | - ZoneOffset zoneOffset = ZoneOffset.of("+8"); | |
268 | - LocalDateTime todayZeroTime = LocalDateTime.of(LocalDate.now(), LocalTime.MIN); | |
269 | - if (ytDevice.getCreateTime().atZone(zoneOffset).toInstant().toEpochMilli() | |
270 | - >= todayZeroTime.toInstant(zoneOffset).toEpochMilli()) { | |
271 | - homeDeviceInfoDTO.setTodayAdd(homeDeviceInfoDTO.getTodayAdd() + basicNum); | |
272 | - } | |
273 | - switch (ytDevice.getDeviceState()) { | |
274 | - case OFFLINE: | |
275 | - homeDeviceInfoDTO.setOffLine(homeDeviceInfoDTO.getOffLine() + basicNum); | |
276 | - break; | |
277 | - case ONLINE: | |
278 | - homeDeviceInfoDTO.setOnLine(homeDeviceInfoDTO.getOnLine() + basicNum); | |
279 | - break; | |
280 | - case INACTIVE: | |
281 | - homeDeviceInfoDTO.setInActive(homeDeviceInfoDTO.getInActive() + basicNum); | |
282 | - break; | |
283 | - default: | |
284 | - break; | |
285 | - } | |
286 | - }); | |
287 | - } | |
288 | - | |
289 | - /** | |
290 | - * 设置租户返回信息 | |
291 | - * | |
292 | - * @param homePageLeftTopDTO 首页顶部返回 | |
293 | - * @param startTime 今日开始时间 | |
294 | - * @param endTime 今日结束时间 | |
295 | - */ | |
296 | - private void setTenantInfoData( | |
297 | - HomePageLeftTopDTO homePageLeftTopDTO, LocalDateTime startTime, LocalDateTime endTime) { | |
298 | - List<TenantDTO> tenants = tenantService.getAllTenant(); | |
299 | - int todayAdd = | |
300 | - (int) | |
301 | - tenants.stream() | |
302 | - .filter( | |
303 | - tenant -> | |
304 | - tenant.getCreateTime().isAfter(startTime) | |
305 | - && tenant.getCreateTime().isBefore(endTime)) | |
306 | - .count(); | |
307 | - int sumCount = tenants.size(); | |
308 | - BaseHomePageTop baseHomePageTop = new BaseHomePageTop(sumCount, todayAdd); | |
309 | - homePageLeftTopDTO.setTenantInfo(baseHomePageTop); | |
310 | - } | |
311 | - | |
312 | - /** | |
313 | - * 设置首页的告警和消息 | |
314 | - * | |
315 | - * @param tenantId 租户ID | |
316 | - * @param messageInfo 消息 | |
317 | - * @param alarm 告警 | |
318 | - */ | |
319 | - private void setAlarmAndMessageInfo( | |
320 | - String tenantId, HomePageTopMessage messageInfo, BaseHomePageTop alarm) | |
321 | - throws ExecutionException, InterruptedException { | |
322 | - List<EntityKey> entityFields = new ArrayList<>(); | |
323 | - entityFields.add(new EntityKey(EntityKeyType.ENTITY_FIELD, "name")); | |
324 | - entityFields.add(new EntityKey(EntityKeyType.ENTITY_FIELD, "label")); | |
325 | - entityFields.add(new EntityKey(EntityKeyType.ENTITY_FIELD, "additionalInfo")); | |
326 | - List<EntityKey> latestValues = new ArrayList<>(); | |
327 | - latestValues.add(new EntityKey(EntityKeyType.TIME_SERIES, "transportMsgCount")); | |
328 | - latestValues.add(new EntityKey(EntityKeyType.TIME_SERIES, "transportDataPointsCount")); | |
329 | - latestValues.add(new EntityKey(EntityKeyType.TIME_SERIES, "createdAlarmsCount")); | |
330 | - | |
331 | - TenantId currentTenantId = new TenantId(UUID.fromString(tenantId)); | |
332 | - ApiUsageState apiUsageState = apiUsageStateService.findTenantApiUsageState(currentTenantId); | |
333 | - PageData<EntityData> pageData = queryEntityData(currentTenantId, entityFields, latestValues); | |
334 | - Map<EntityKeyType, Map<String, TsValue>> latest = pageData.getData().get(0).getLatest(); | |
335 | - latest | |
336 | - .keySet() | |
337 | - .forEach( | |
338 | - item -> { | |
339 | - if (item.equals(EntityKeyType.TIME_SERIES)) { | |
340 | - Map<String, TsValue> tsValueMap = latest.get(item); | |
341 | - tsValueMap | |
342 | - .keySet() | |
343 | - .forEach( | |
344 | - mapKey -> { | |
345 | - String tsValue = tsValueMap.get(mapKey).getValue(); | |
346 | - Integer value = | |
347 | - StringUtils.isEmpty(tsValue) | |
348 | - ? FastIotConstants.MagicNumber.ZERO | |
349 | - : Integer.parseInt(tsValue); | |
350 | - switch (mapKey) { | |
351 | - case "createdAlarmsCount": | |
352 | - alarm.setSumCount(value); | |
353 | - break; | |
354 | - case "transportMsgCount": | |
355 | - messageInfo.setMessageCount(value); | |
356 | - break; | |
357 | - case "transportDataPointsCount": | |
358 | - messageInfo.setDataPointsCount(value); | |
359 | - break; | |
396 | + | |
397 | + // 查询今日数据 | |
398 | + setTodayAlarmAndMessageInfo(currentTenantId, apiUsageState, messageInfo, alarm); | |
399 | + } | |
400 | + | |
401 | + /** | |
402 | + * 设置今日告警和今日消息 | |
403 | + * | |
404 | + * @param currentTenantId 当前租户 | |
405 | + * @param apiUsageState api调用统计 | |
406 | + * @param messageInfo 消息 | |
407 | + * @param alarm 告警 | |
408 | + * @throws ExecutionException 异常 | |
409 | + * @throws InterruptedException 异常 | |
410 | + */ | |
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; | |
360 | 450 | default: |
361 | - break; | |
362 | - } | |
363 | - }); | |
364 | - } | |
365 | - }); | |
366 | - | |
367 | - // 查询今日数据 | |
368 | - setTodayAlarmAndMessageInfo(currentTenantId, apiUsageState, messageInfo, alarm); | |
369 | - } | |
370 | - | |
371 | - /** | |
372 | - * 设置今日告警和今日消息 | |
373 | - * | |
374 | - * @param currentTenantId 当前租户 | |
375 | - * @param apiUsageState api调用统计 | |
376 | - * @param messageInfo 消息 | |
377 | - * @param alarm 告警 | |
378 | - * @throws ExecutionException 异常 | |
379 | - * @throws InterruptedException 异常 | |
380 | - */ | |
381 | - private void setTodayAlarmAndMessageInfo( | |
382 | - TenantId currentTenantId, | |
383 | - ApiUsageState apiUsageState, | |
384 | - HomePageTopMessage messageInfo, | |
385 | - BaseHomePageTop alarm) | |
386 | - throws ExecutionException, InterruptedException { | |
387 | - List<ReadTsKvQuery> queries = new ArrayList<>(); | |
388 | - long startTs = | |
389 | - LocalDateTime.of(LocalDateTime.now().toLocalDate(), LocalTime.MIN) | |
390 | - .toInstant(ZoneOffset.of("+8")) | |
391 | - .toEpochMilli(); | |
392 | - long endTs = LocalDateTime.now().toInstant(ZoneOffset.of("+8")).toEpochMilli(); | |
393 | - int interval = 7200000; | |
394 | - int limit = (int) ((endTs - startTs) / interval) + FastIotConstants.MagicNumber.ONE; | |
395 | - queries.add( | |
396 | - new BaseReadTsKvQuery( | |
397 | - "transportMsgCountHourly", startTs, endTs, interval, limit, Aggregation.SUM)); | |
398 | - queries.add( | |
399 | - new BaseReadTsKvQuery( | |
400 | - "transportDataPointsCountHourly", startTs, endTs, interval, limit, Aggregation.SUM)); | |
401 | - queries.add( | |
402 | - new BaseReadTsKvQuery( | |
403 | - "createdAlarmsCountHourly", startTs, endTs, interval, limit, Aggregation.SUM)); | |
404 | - List<TsKvEntry> tsKv = | |
405 | - timeseriesService.findAll(currentTenantId, apiUsageState.getId(), queries).get(); | |
406 | - tsKv.forEach( | |
407 | - tsKvEntry -> { | |
408 | - if (tsKvEntry.getLongValue().isPresent()) { | |
409 | - int count = tsKvEntry.getLongValue().get().intValue(); | |
410 | - switch (tsKvEntry.getKey()) { | |
411 | - case "transportMsgCountHourly": | |
412 | - messageInfo.setTodayMessageAdd(count + messageInfo.getTodayMessageAdd()); | |
413 | - break; | |
414 | - case "transportDataPointsCountHourly": | |
415 | - messageInfo.setTodayDataPointsAdd(count + messageInfo.getTodayDataPointsAdd()); | |
416 | - break; | |
417 | - case "createdAlarmsCountHourly": | |
418 | - alarm.setTodayAdd(count + alarm.getTodayAdd()); | |
419 | - break; | |
420 | - default: | |
421 | - break; | |
451 | + break; | |
452 | + } | |
453 | + } | |
454 | + }); | |
455 | + } | |
456 | + | |
457 | + /** | |
458 | + * 查询实体的运行数据 | |
459 | + * @param entityId 实体ID,例如:设备、用户、流量统计等 | |
460 | + * @param currentTenantId 租户ID | |
461 | + * @param entityFields 查询的实体字段 | |
462 | + * @param latestValues 查询的运行数据字段,例如:遥测数据、操作记录等。 | |
463 | + * @return | |
464 | + */ | |
465 | + private PageData<EntityData> queryEntityData(EntityId entityId,TenantId currentTenantId, List<EntityKey> entityFields, List<EntityKey> latestValues) { | |
466 | + CustomerId customerId = new CustomerId(EntityId.NULL_UUID); | |
467 | + | |
468 | + EntityKey key = new EntityKey(EntityKeyType.ENTITY_FIELD, "createdTime"); | |
469 | + EntityDataSortOrder sortOrder = | |
470 | + new EntityDataSortOrder(key, EntityDataSortOrder.Direction.DESC); | |
471 | + | |
472 | + EntityDataPageLink pageLink = | |
473 | + new EntityDataPageLink( | |
474 | + FastIotConstants.MagicNumber.ONE, FastIotConstants.MagicNumber.ZERO, null, sortOrder); | |
475 | + | |
476 | + SingleEntityFilter singleEntityFilter = new SingleEntityFilter(); | |
477 | + singleEntityFilter.setSingleEntity(entityId); | |
478 | + | |
479 | + EntityDataQuery query = | |
480 | + new EntityDataQuery(singleEntityFilter, pageLink, entityFields, latestValues, null); | |
481 | + | |
482 | + return entityService.findEntityDataByQuery(currentTenantId, customerId, query); | |
483 | + } | |
484 | + | |
485 | + /** | |
486 | + * 设置客户返回信息 | |
487 | + * | |
488 | + * @param homePageLeftTopDTO 首页顶部返回 | |
489 | + * @param startTime 今日开始时间 | |
490 | + * @param endTime 今日结束时间 | |
491 | + */ | |
492 | + private void setCustomerInfoData( | |
493 | + HomePageLeftTopDTO homePageLeftTopDTO, LocalDateTime startTime, LocalDateTime endTime) { | |
494 | + List<UserDTO> userList = userMapper.getUserCountByRoleType(RoleEnum.CUSTOMER_USER); | |
495 | + int sumCount = userList != null ? userList.size() : FastIotConstants.MagicNumber.ZERO; | |
496 | + | |
497 | + int todayAdd = FastIotConstants.MagicNumber.ZERO; | |
498 | + 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(); | |
506 | + } | |
507 | + BaseHomePageTop baseHomePageTop = new BaseHomePageTop(sumCount, todayAdd); | |
508 | + homePageLeftTopDTO.setCustomerInfo(baseHomePageTop); | |
509 | + } | |
510 | + | |
511 | + private SettableFuture<List<TsValue>> setFutures(List<CompletableFuture<TsValue>> tsFutures) { | |
512 | + 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 | + }); | |
525 | + return listenableFuture; | |
526 | + } | |
527 | + | |
528 | + private SettableFuture<List<TenantTransportMessageDTO>> settableFuture( | |
529 | + List<CompletableFuture<TenantTransportMessageDTO>> tsFutures) { | |
530 | + 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 | + }); | |
543 | + return listenableFuture; | |
544 | + } | |
545 | + | |
546 | + private FutureCallback<List<TsValue>> getTsValueCallback( | |
547 | + final DeferredResult<List<TsValue>> response) { | |
548 | + return new FutureCallback<>() { | |
549 | + @Override | |
550 | + public void onSuccess(@Nullable List<TsValue> tsValues) { | |
551 | + response.setResult(tsValues); | |
552 | + } | |
553 | + | |
554 | + @Override | |
555 | + public void onFailure(Throwable throwable) { | |
556 | + response.setResult(null); | |
422 | 557 | } |
423 | - } | |
424 | - }); | |
425 | - } | |
426 | - | |
427 | - private PageData<EntityData> queryEntityData( | |
428 | - TenantId currentTenantId, List<EntityKey> entityFields, List<EntityKey> latestValues) { | |
429 | - CustomerId customerId = new CustomerId(EntityId.NULL_UUID); | |
430 | - EntityKey key = new EntityKey(EntityKeyType.ENTITY_FIELD, "createdTime"); | |
431 | - EntityDataSortOrder sortOrder = | |
432 | - new EntityDataSortOrder(key, EntityDataSortOrder.Direction.DESC); | |
433 | - EntityDataPageLink pageLink = | |
434 | - new EntityDataPageLink( | |
435 | - FastIotConstants.MagicNumber.ONE, FastIotConstants.MagicNumber.ZERO, null, sortOrder); | |
436 | - SingleEntityFilter singleEntityFilter = new SingleEntityFilter(); | |
437 | - ApiUsageState apiUsageState = apiUsageStateService.findTenantApiUsageState(currentTenantId); | |
438 | - singleEntityFilter.setSingleEntity(apiUsageState.getId()); | |
439 | - | |
440 | - EntityDataQuery query = | |
441 | - new EntityDataQuery(singleEntityFilter, pageLink, entityFields, latestValues, null); | |
442 | - return entityService.findEntityDataByQuery(currentTenantId, customerId, query); | |
443 | - } | |
444 | - /** | |
445 | - * 设置客户返回信息 | |
446 | - * | |
447 | - * @param homePageLeftTopDTO 首页顶部返回 | |
448 | - * @param startTime 今日开始时间 | |
449 | - * @param endTime 今日结束时间 | |
450 | - */ | |
451 | - private void setCustomerInfoData( | |
452 | - HomePageLeftTopDTO homePageLeftTopDTO, LocalDateTime startTime, LocalDateTime endTime) { | |
453 | - List<UserDTO> userList = userMapper.getUserCountByRoleType(RoleEnum.CUSTOMER_USER); | |
454 | - int sumCount = userList != null ? userList.size() : FastIotConstants.MagicNumber.ZERO; | |
455 | - | |
456 | - int todayAdd = FastIotConstants.MagicNumber.ZERO; | |
457 | - if (userList != null && userList.size() > FastIotConstants.MagicNumber.ZERO) { | |
458 | - todayAdd += | |
459 | - userList.stream() | |
460 | - .filter( | |
461 | - userDTO -> | |
462 | - userDTO.getCreateTime().isAfter(startTime) | |
463 | - && userDTO.getCreateTime().isBefore(endTime)) | |
464 | - .count(); | |
558 | + }; | |
465 | 559 | } |
466 | - BaseHomePageTop baseHomePageTop = new BaseHomePageTop(sumCount, todayAdd); | |
467 | - homePageLeftTopDTO.setCustomerInfo(baseHomePageTop); | |
468 | - } | |
469 | - | |
470 | - private SettableFuture<List<TsValue>> setFutures(List<CompletableFuture<TsValue>> tsFutures) { | |
471 | - SettableFuture<List<TsValue>> listenableFuture = SettableFuture.create(); | |
472 | - CompletableFuture<List<TsValue>> entities = | |
473 | - CompletableFuture.allOf(tsFutures.toArray(new CompletableFuture[tsFutures.size()])) | |
474 | - .thenApply( | |
475 | - v -> tsFutures.stream().map(CompletableFuture::join).collect(Collectors.toList())); | |
476 | - entities.whenComplete( | |
477 | - (tsValues, throwable) -> { | |
478 | - if (throwable != null) { | |
479 | - listenableFuture.setException(throwable); | |
480 | - } else { | |
481 | - listenableFuture.set(tsValues); | |
482 | - } | |
483 | - }); | |
484 | - return listenableFuture; | |
485 | - } | |
486 | - | |
487 | - private SettableFuture<List<TenantTransportMessageDTO>> settableFuture( | |
488 | - List<CompletableFuture<TenantTransportMessageDTO>> tsFutures) { | |
489 | - SettableFuture<List<TenantTransportMessageDTO>> listenableFuture = SettableFuture.create(); | |
490 | - CompletableFuture<List<TenantTransportMessageDTO>> entities = | |
491 | - CompletableFuture.allOf(tsFutures.toArray(new CompletableFuture[tsFutures.size()])) | |
492 | - .thenApply( | |
493 | - v -> tsFutures.stream().map(CompletableFuture::join).collect(Collectors.toList())); | |
494 | - entities.whenComplete( | |
495 | - (tsValues, throwable) -> { | |
496 | - if (throwable != null) { | |
497 | - listenableFuture.setException(throwable); | |
498 | - } else { | |
499 | - listenableFuture.set(tsValues); | |
500 | - } | |
501 | - }); | |
502 | - return listenableFuture; | |
503 | - } | |
504 | - | |
505 | - private FutureCallback<List<TsValue>> getTsValueCallback( | |
506 | - final DeferredResult<List<TsValue>> response) { | |
507 | - return new FutureCallback<>() { | |
508 | - @Override | |
509 | - public void onSuccess(@Nullable List<TsValue> tsValues) { | |
510 | - response.setResult(tsValues); | |
511 | - } | |
512 | - | |
513 | - @Override | |
514 | - public void onFailure(Throwable throwable) { | |
515 | - response.setResult(null); | |
516 | - } | |
517 | - }; | |
518 | - } | |
519 | - | |
520 | - private FutureCallback<List<TenantTransportMessageDTO>> getTransportMessageCallback( | |
521 | - final DeferredResult<List<TenantTransportMessageDTO>> response) { | |
522 | - return new FutureCallback<>() { | |
523 | - @Override | |
524 | - public void onSuccess(@Nullable List<TenantTransportMessageDTO> values) { | |
525 | - // sort | |
526 | - if (null != values && values.size() > FastIotConstants.MagicNumber.ZERO) { | |
527 | - int length = values.size() - FastIotConstants.MagicNumber.ONE; | |
528 | - for (int i = FastIotConstants.MagicNumber.ZERO; i < length; i++) { | |
529 | - for (int j = FastIotConstants.MagicNumber.ZERO; j < length - i; j++) { | |
530 | - if (values.get(j).getCount() | |
531 | - < values.get(j + FastIotConstants.MagicNumber.ONE).getCount()) { | |
532 | - String name = values.get(j).getName(); | |
533 | - Long count = values.get(j).getCount(); | |
534 | - values.get(j).setName(values.get(j + FastIotConstants.MagicNumber.ONE).getName()); | |
535 | - values.get(j).setCount(values.get(j + FastIotConstants.MagicNumber.ONE).getCount()); | |
536 | - values.get(j + FastIotConstants.MagicNumber.ONE).setName(name); | |
537 | - values.get(j + FastIotConstants.MagicNumber.ONE).setCount(count); | |
538 | - } | |
560 | + | |
561 | + private FutureCallback<List<TenantTransportMessageDTO>> getTransportMessageCallback( | |
562 | + final DeferredResult<List<TenantTransportMessageDTO>> response) { | |
563 | + return new FutureCallback<>() { | |
564 | + @Override | |
565 | + public void onSuccess(@Nullable List<TenantTransportMessageDTO> values) { | |
566 | + // sort | |
567 | + if (null != values && values.size() > FastIotConstants.MagicNumber.ZERO) { | |
568 | + int length = values.size() - FastIotConstants.MagicNumber.ONE; | |
569 | + for (int i = FastIotConstants.MagicNumber.ZERO; i < length; i++) { | |
570 | + for (int j = FastIotConstants.MagicNumber.ZERO; j < length - i; j++) { | |
571 | + if (values.get(j).getCount() | |
572 | + < values.get(j + FastIotConstants.MagicNumber.ONE).getCount()) { | |
573 | + String name = values.get(j).getName(); | |
574 | + Long count = values.get(j).getCount(); | |
575 | + values.get(j).setName(values.get(j + FastIotConstants.MagicNumber.ONE).getName()); | |
576 | + values.get(j).setCount(values.get(j + FastIotConstants.MagicNumber.ONE).getCount()); | |
577 | + values.get(j + FastIotConstants.MagicNumber.ONE).setName(name); | |
578 | + values.get(j + FastIotConstants.MagicNumber.ONE).setCount(count); | |
579 | + } | |
580 | + } | |
581 | + } | |
582 | + values = | |
583 | + values.size() > FastIotConstants.MagicNumber.TEN | |
584 | + ? values.subList( | |
585 | + FastIotConstants.MagicNumber.ZERO, FastIotConstants.MagicNumber.TEN) | |
586 | + : values; | |
587 | + } | |
588 | + response.setResult(values); | |
589 | + } | |
590 | + | |
591 | + @Override | |
592 | + public void onFailure(Throwable throwable) { | |
593 | + response.setResult(null); | |
539 | 594 | } |
540 | - } | |
541 | - values = | |
542 | - values.size() > FastIotConstants.MagicNumber.TEN | |
543 | - ? values.subList( | |
544 | - FastIotConstants.MagicNumber.ZERO, FastIotConstants.MagicNumber.TEN) | |
545 | - : values; | |
595 | + }; | |
596 | + } | |
597 | + | |
598 | + private CompletableFuture<TsValue> findDeviceInfoByTs( | |
599 | + String customerId, Long startTs, Long endTs, long ts, TrendType trend) { | |
600 | + Integer value; | |
601 | + if (trend == TrendType.CUSTOMER_MESSAGE_STATISTICAL) { | |
602 | + value = deviceMapper.findDeviceMessageInfoByTs(customerId, startTs, endTs); | |
603 | + } else { | |
604 | + value = deviceMapper.findDeviceAlarmInfoByCreatedTime(customerId, startTs, endTs); | |
546 | 605 | } |
547 | - response.setResult(values); | |
548 | - } | |
549 | - | |
550 | - @Override | |
551 | - public void onFailure(Throwable throwable) { | |
552 | - response.setResult(null); | |
553 | - } | |
554 | - }; | |
555 | - } | |
556 | - | |
557 | - private CompletableFuture<TsValue> findDeviceInfoByTs( | |
558 | - String customerId, Long startTs, Long endTs, long ts, TrendType trend) { | |
559 | - Integer value; | |
560 | - if (trend == TrendType.CUSTOMER_MESSAGE_STATISTICAL) { | |
561 | - value = deviceMapper.findDeviceMessageInfoByTs(customerId, startTs, endTs); | |
562 | - } else { | |
563 | - value = deviceMapper.findDeviceAlarmInfoByCreatedTime(customerId, startTs, endTs); | |
606 | + return CompletableFuture.supplyAsync(() -> new TsValue(ts, String.valueOf(value))); | |
564 | 607 | } |
565 | - return CompletableFuture.supplyAsync(() -> new TsValue(ts, String.valueOf(value))); | |
566 | - } | |
567 | 608 | } | ... | ... |