Showing
1 changed file
with
544 additions
and
503 deletions
@@ -44,524 +44,565 @@ import java.util.stream.Collectors; | @@ -44,524 +44,565 @@ import java.util.stream.Collectors; | ||
44 | @RequiredArgsConstructor | 44 | @RequiredArgsConstructor |
45 | public class HomePageServiceImpl implements HomePageService { | 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 | default: | 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 | } |