Showing
1 changed file
with
62 additions
and
132 deletions
... | ... | @@ -31,8 +31,7 @@ import java.util.stream.Collectors; |
31 | 31 | */ |
32 | 32 | @Service |
33 | 33 | @RequiredArgsConstructor |
34 | -public class SceneLinkageServiceImpl extends AbstractBaseService<SceneLinkageMapper, SceneLinkage> | |
35 | - implements SceneLinkageService { | |
34 | +public class SceneLinkageServiceImpl extends AbstractBaseService<SceneLinkageMapper, SceneLinkage> implements SceneLinkageService { | |
36 | 35 | |
37 | 36 | private final SceneLinkageMapper sceneLinkageMapper; |
38 | 37 | private final DeviceMapper deviceMapper; |
... | ... | @@ -43,7 +42,6 @@ public class SceneLinkageServiceImpl extends AbstractBaseService<SceneLinkageMap |
43 | 42 | private final TriggerService triggerService; |
44 | 43 | private final DoConditionService doConditionService; |
45 | 44 | private final DoActionService doActionService; |
46 | - private final UserMapper userMapper; | |
47 | 45 | |
48 | 46 | /** |
49 | 47 | * 增加场景联动,触发器可以多个,执行条件可以多个,执行动作可以多个 |
... | ... | @@ -89,29 +87,15 @@ public class SceneLinkageServiceImpl extends AbstractBaseService<SceneLinkageMap |
89 | 87 | @Override |
90 | 88 | @Transactional |
91 | 89 | public void deleteSceneLinkage(Set<String> ids, String tenantId, String currentUserId) { |
92 | - LambdaQueryWrapper<SceneLinkage> Wrapper = | |
93 | - new QueryWrapper<SceneLinkage>() | |
94 | - .lambda() | |
95 | - .eq(SceneLinkage::getTenantId, tenantId) | |
96 | - .eq(SceneLinkage::getCreator, currentUserId) | |
97 | - .in(SceneLinkage::getId, ids); | |
90 | + LambdaQueryWrapper<SceneLinkage> Wrapper = new QueryWrapper<SceneLinkage>().lambda().eq(SceneLinkage::getTenantId, tenantId).eq(SceneLinkage::getCreator, currentUserId).in(SceneLinkage::getId, ids); | |
98 | 91 | int result = sceneLinkageMapper.delete(Wrapper); |
99 | 92 | if (result != ids.size()) { |
100 | 93 | throw new YtDataValidationException("存在非当前用户创建的场景联动"); |
101 | 94 | } |
102 | 95 | // 删除场景,一并删除数据库触发器,执行条件,执行动作的数据 |
103 | - triggerMapper.delete( | |
104 | - new LambdaQueryWrapper<Trigger>() | |
105 | - .eq(Trigger::getTenantId, tenantId) | |
106 | - .in(Trigger::getSceneLinkageId, ids)); | |
107 | - doConditionMapper.delete( | |
108 | - new LambdaQueryWrapper<DoCondition>() | |
109 | - .eq(DoCondition::getTenantId, tenantId) | |
110 | - .in(DoCondition::getSceneLinkageId, ids)); | |
111 | - doActionMapper.delete( | |
112 | - new LambdaQueryWrapper<DoAction>() | |
113 | - .eq(DoAction::getTenantId, tenantId) | |
114 | - .in(DoAction::getSceneLinkageId, ids)); | |
96 | + triggerMapper.delete(new LambdaQueryWrapper<Trigger>().eq(Trigger::getTenantId, tenantId).in(Trigger::getSceneLinkageId, ids)); | |
97 | + doConditionMapper.delete(new LambdaQueryWrapper<DoCondition>().eq(DoCondition::getTenantId, tenantId).in(DoCondition::getSceneLinkageId, ids)); | |
98 | + doActionMapper.delete(new LambdaQueryWrapper<DoAction>().eq(DoAction::getTenantId, tenantId).in(DoAction::getSceneLinkageId, ids)); | |
115 | 99 | } |
116 | 100 | |
117 | 101 | /** |
... | ... | @@ -180,22 +164,16 @@ public class SceneLinkageServiceImpl extends AbstractBaseService<SceneLinkageMap |
180 | 164 | } |
181 | 165 | |
182 | 166 | // 先删除触发器 |
183 | - triggerMapper.delete( | |
184 | - new QueryWrapper<Trigger>() | |
185 | - .lambda() | |
186 | - .eq(StringUtils.isNoneBlank(sceneLinkage.getId()), Trigger::getSceneLinkageId, sceneLinkage.getId())); | |
167 | + triggerMapper.delete(new QueryWrapper<Trigger>().lambda().eq(StringUtils.isNoneBlank(sceneLinkage.getId()), Trigger::getSceneLinkageId, sceneLinkage.getId())); | |
187 | 168 | |
188 | 169 | |
189 | 170 | // 如果获取的触发器不为空,进行添加操作 |
190 | - if(triggerDTOS != null && !triggerDTOS.isEmpty()){ | |
191 | - List<Trigger> triggers = | |
192 | - triggerDTOS.stream() | |
193 | - .map(triggerDTO -> { | |
194 | - triggerDTO.setTenantId(sceneLinkage.getTenantId()); | |
195 | - triggerDTO.setSceneLinkageId(sceneLinkage.getId()); | |
196 | - return triggerDTO.getEntity(Trigger.class); | |
197 | - }) | |
198 | - .collect(Collectors.toList()); | |
171 | + if (triggerDTOS != null && !triggerDTOS.isEmpty()) { | |
172 | + List<Trigger> triggers = triggerDTOS.stream().map(triggerDTO -> { | |
173 | + triggerDTO.setTenantId(sceneLinkage.getTenantId()); | |
174 | + triggerDTO.setSceneLinkageId(sceneLinkage.getId()); | |
175 | + return triggerDTO.getEntity(Trigger.class); | |
176 | + }).collect(Collectors.toList()); | |
199 | 177 | triggerService.insertBatch(triggers, 1000); |
200 | 178 | } |
201 | 179 | } |
... | ... | @@ -228,26 +206,20 @@ public class SceneLinkageServiceImpl extends AbstractBaseService<SceneLinkageMap |
228 | 206 | } |
229 | 207 | } |
230 | 208 | |
231 | - doActionMapper.delete( | |
232 | - new QueryWrapper<DoAction>() | |
233 | - .lambda() | |
234 | - .eq(StringUtils.isNoneBlank(sceneLinkageDTO.getId()), DoAction::getSceneLinkageId, sceneLinkageDTO.getId())); | |
209 | + doActionMapper.delete(new QueryWrapper<DoAction>().lambda().eq(StringUtils.isNoneBlank(sceneLinkageDTO.getId()), DoAction::getSceneLinkageId, sceneLinkageDTO.getId())); | |
235 | 210 | |
236 | 211 | if (actionDTOS != null && !actionDTOS.isEmpty()) { |
237 | - List<DoAction> collectA = | |
238 | - actionDTOS.stream() | |
239 | - .map(doActionDTO -> { | |
240 | - doActionDTO.setTenantId(sceneLinkageDTO.getTenantId()); | |
241 | - doActionDTO.setSceneLinkageId(sceneLinkageDTO.getId()); | |
242 | - if (ActionTypeEnum.DEVICE_OUT.equals(doActionDTO.getOutTarget())) { | |
243 | - ObjectNode doContext = JacksonUtil.newObjectNode(); | |
244 | - doContext.put("method", "methodThingskit"); | |
245 | - doContext.put("params", doActionDTO.getDoContext()); | |
246 | - doActionDTO.setDoContext(doContext); | |
247 | - } | |
248 | - return doActionDTO.getEntity(DoAction.class); | |
249 | - }) | |
250 | - .collect(Collectors.toList()); | |
212 | + List<DoAction> collectA = actionDTOS.stream().map(doActionDTO -> { | |
213 | + doActionDTO.setTenantId(sceneLinkageDTO.getTenantId()); | |
214 | + doActionDTO.setSceneLinkageId(sceneLinkageDTO.getId()); | |
215 | + if (ActionTypeEnum.DEVICE_OUT.equals(doActionDTO.getOutTarget())) { | |
216 | + ObjectNode doContext = JacksonUtil.newObjectNode(); | |
217 | + doContext.put("method", "methodThingskit"); | |
218 | + doContext.put("params", doActionDTO.getDoContext()); | |
219 | + doActionDTO.setDoContext(doContext); | |
220 | + } | |
221 | + return doActionDTO.getEntity(DoAction.class); | |
222 | + }).collect(Collectors.toList()); | |
251 | 223 | doActionService.insertBatch(collectA, 1000); |
252 | 224 | |
253 | 225 | } |
... | ... | @@ -283,24 +255,17 @@ public class SceneLinkageServiceImpl extends AbstractBaseService<SceneLinkageMap |
283 | 255 | } |
284 | 256 | } |
285 | 257 | |
286 | - doConditionMapper.delete( | |
287 | - new QueryWrapper<DoCondition>() | |
288 | - .lambda() | |
289 | - .eq(StringUtils.isNoneBlank(sceneLinkageDTO.getId()), DoCondition::getSceneLinkageId, sceneLinkageDTO.getId())); | |
258 | + doConditionMapper.delete(new QueryWrapper<DoCondition>().lambda().eq(StringUtils.isNoneBlank(sceneLinkageDTO.getId()), DoCondition::getSceneLinkageId, sceneLinkageDTO.getId())); | |
290 | 259 | |
291 | 260 | |
292 | 261 | // 4.批量新增执行条件 |
293 | 262 | if (conditionDTOS != null && !conditionDTOS.isEmpty()) { |
294 | - List<DoCondition> collectC = | |
295 | - conditionDTOS.stream() | |
296 | - .map(doConditionDTO -> { | |
297 | - | |
298 | - doConditionDTO.setTenantId(sceneLinkageDTO.getTenantId()); | |
299 | - doConditionDTO.setSceneLinkageId(sceneLinkageDTO.getId()); | |
300 | - return doConditionDTO.getEntity(DoCondition.class); | |
301 | - } | |
302 | - ) | |
303 | - .collect(Collectors.toList()); | |
263 | + List<DoCondition> collectC = conditionDTOS.stream().map(doConditionDTO -> { | |
264 | + | |
265 | + doConditionDTO.setTenantId(sceneLinkageDTO.getTenantId()); | |
266 | + doConditionDTO.setSceneLinkageId(sceneLinkageDTO.getId()); | |
267 | + return doConditionDTO.getEntity(DoCondition.class); | |
268 | + }).collect(Collectors.toList()); | |
304 | 269 | doConditionService.insertBatch(collectC, 1000); |
305 | 270 | |
306 | 271 | } |
... | ... | @@ -334,14 +299,7 @@ public class SceneLinkageServiceImpl extends AbstractBaseService<SceneLinkageMap |
334 | 299 | */ |
335 | 300 | @Override |
336 | 301 | public List<SceneLinkageDTO> findSceneLinkage(SceneLinkageDTO sceneLinkageDTO, String tenantId) { |
337 | - List<SceneLinkage> scenelinkageList = | |
338 | - baseMapper.selectList( | |
339 | - new QueryWrapper<SceneLinkage>() | |
340 | - .lambda() | |
341 | - .eq(SceneLinkage::getTenantId, tenantId) | |
342 | - .like(SceneLinkage::getName, sceneLinkageDTO.getName()) | |
343 | - .like(SceneLinkage::getOrganizationId, sceneLinkageDTO.getOrganizationId()) | |
344 | - .like(SceneLinkage::getStatus, sceneLinkageDTO.getStatus())); | |
302 | + List<SceneLinkage> scenelinkageList = baseMapper.selectList(new QueryWrapper<SceneLinkage>().lambda().eq(SceneLinkage::getTenantId, tenantId).like(SceneLinkage::getName, sceneLinkageDTO.getName()).like(SceneLinkage::getOrganizationId, sceneLinkageDTO.getOrganizationId()).like(SceneLinkage::getStatus, sceneLinkageDTO.getStatus())); | |
345 | 303 | return ReflectUtils.sourceToTarget(scenelinkageList, SceneLinkageDTO.class); |
346 | 304 | } |
347 | 305 | |
... | ... | @@ -354,17 +312,10 @@ public class SceneLinkageServiceImpl extends AbstractBaseService<SceneLinkageMap |
354 | 312 | @Override |
355 | 313 | @Transactional(rollbackFor = Exception.class) |
356 | 314 | public void updateSceneStatus(String sceneLinkageId, int status, String tenantId) { |
357 | - Optional.ofNullable( | |
358 | - baseMapper.selectOne( | |
359 | - new QueryWrapper<SceneLinkage>() | |
360 | - .lambda() | |
361 | - .eq(SceneLinkage::getId, sceneLinkageId) | |
362 | - .eq(SceneLinkage::getTenantId, tenantId))) | |
363 | - .ifPresent( | |
364 | - sceneLinkage -> { | |
365 | - sceneLinkage.setStatus(status); | |
366 | - baseMapper.updateById(sceneLinkage); | |
367 | - }); | |
315 | + Optional.ofNullable(baseMapper.selectOne(new QueryWrapper<SceneLinkage>().lambda().eq(SceneLinkage::getId, sceneLinkageId).eq(SceneLinkage::getTenantId, tenantId))).ifPresent(sceneLinkage -> { | |
316 | + sceneLinkage.setStatus(status); | |
317 | + baseMapper.updateById(sceneLinkage); | |
318 | + }); | |
368 | 319 | } |
369 | 320 | |
370 | 321 | /** |
... | ... | @@ -374,32 +325,23 @@ public class SceneLinkageServiceImpl extends AbstractBaseService<SceneLinkageMap |
374 | 325 | * @return 设备集合 |
375 | 326 | */ |
376 | 327 | @Override |
377 | - public List<DeviceDTO> findDeviceList( | |
378 | - String organizationId, String tenantId, String customerId) { | |
328 | + public List<DeviceDTO> findDeviceList(String organizationId, String tenantId, String customerId) { | |
379 | 329 | List<String> organizationFilter = new ArrayList<>(); |
380 | 330 | organizationFilter.add(organizationId); |
381 | 331 | // 查询该组织的所有子类 |
382 | - List<String> orgIds = | |
383 | - organizationMapper.findOrganizationTreeList(tenantId, organizationFilter).stream() | |
384 | - .map(organization -> organization.getId()) | |
385 | - .collect(Collectors.toList()); | |
332 | + List<String> orgIds = organizationMapper.findOrganizationTreeList(tenantId, organizationFilter).stream().map(organization -> organization.getId()).collect(Collectors.toList()); | |
386 | 333 | // 拿到当前组织ids所包含的设备集合 |
387 | 334 | if (orgIds.isEmpty()) { |
388 | 335 | throw new YtDataValidationException(ErrorMessage.ORGANIZATION_NOT_EXTIED.getMessage()); |
389 | 336 | } |
390 | - List<YtDevice> orgDevices = | |
391 | - deviceMapper.selectList( | |
392 | - new QueryWrapper<YtDevice>().lambda().in(YtDevice::getOrganizationId, orgIds)); | |
337 | + List<YtDevice> orgDevices = deviceMapper.selectList(new QueryWrapper<YtDevice>().lambda().in(YtDevice::getOrganizationId, orgIds)); | |
393 | 338 | |
394 | 339 | |
395 | 340 | List<String> customerDevices = deviceMapper.findDeviceIdsByCustomerId(customerId); |
396 | 341 | if (customerDevices == null || customerDevices.isEmpty()) { |
397 | 342 | return null; |
398 | 343 | } |
399 | - List<DeviceDTO> result = orgDevices.stream() | |
400 | - .filter(f -> customerDevices.contains(f.getTbDeviceId())) | |
401 | - .map(device -> device.getDTO(DeviceDTO.class)) | |
402 | - .collect(Collectors.toList()); | |
344 | + List<DeviceDTO> result = orgDevices.stream().filter(f -> customerDevices.contains(f.getTbDeviceId())).map(device -> device.getDTO(DeviceDTO.class)).collect(Collectors.toList()); | |
403 | 345 | |
404 | 346 | |
405 | 347 | return result; |
... | ... | @@ -416,29 +358,26 @@ public class SceneLinkageServiceImpl extends AbstractBaseService<SceneLinkageMap |
416 | 358 | */ |
417 | 359 | @Override |
418 | 360 | public JsonNode getRuleNodeConfig(String currentSceneId, String tenantId, String customerId, Integer state) { |
419 | - String ruleTyp = "org.thingsboard.rule.engine.filter.TbSceneReactNode"; | |
420 | - List<SceneLinkage> runningScenes = baseMapper.selectList( | |
421 | - new QueryWrapper<SceneLinkage>() | |
422 | - .lambda() | |
423 | - .eq(SceneLinkage::getTenantId, tenantId) | |
424 | - .eq(SceneLinkage::getStatus, FastIotConstants.StateValue.ENABLE) | |
425 | - ); | |
361 | + List<SceneLinkage> runningScenes = baseMapper.selectList(new QueryWrapper<SceneLinkage>().lambda().eq(SceneLinkage::getTenantId, tenantId).eq(SceneLinkage::getStatus, FastIotConstants.StateValue.ENABLE)); | |
426 | 362 | Set<String> enableIds = new HashSet<>(); |
427 | 363 | Map<String, String> sceneInform = new HashMap<>(); |
428 | 364 | for (SceneLinkage item : runningScenes) { |
429 | 365 | enableIds.add(item.getId()); |
430 | - sceneInform.put(item.getId(),item.getName()); | |
366 | + sceneInform.put(item.getId(), item.getName()); | |
431 | 367 | } |
432 | - enableIds.add(currentSceneId); | |
368 | + SceneLinkage self = baseMapper.selectById(currentSceneId); | |
433 | 369 | if (state == FastIotConstants.StateValue.DISABLE) { |
434 | 370 | enableIds.remove(currentSceneId); |
371 | + sceneInform.remove(currentSceneId); | |
372 | + } else { | |
373 | + enableIds.add(currentSceneId); | |
374 | + sceneInform.put(currentSceneId, self.getName()); | |
435 | 375 | } |
436 | 376 | |
437 | 377 | if (enableIds.size() <= 0) { |
438 | 378 | return null; |
439 | 379 | } |
440 | 380 | |
441 | - SceneLinkage self = baseMapper.selectById(currentSceneId); | |
442 | 381 | List<DeviceDTO> organizationDevices = findDeviceList(self.getOrganizationId(), tenantId, customerId); |
443 | 382 | List<String> allDevices = new ArrayList<>(); |
444 | 383 | for (DeviceDTO item : organizationDevices) { |
... | ... | @@ -448,40 +387,34 @@ public class SceneLinkageServiceImpl extends AbstractBaseService<SceneLinkageMap |
448 | 387 | |
449 | 388 | Map<String, List<String>> matchedDevices = new HashMap<>(); |
450 | 389 | |
451 | - List<Trigger> triggers = triggerMapper.selectList( | |
452 | - new QueryWrapper<Trigger>() | |
453 | - .lambda() | |
454 | - .eq(Trigger::getTenantId, tenantId) | |
455 | - .eq(Trigger::getTriggerType, TriggerTypeEnum.DEVICE_TRIGGER) | |
456 | - .in(Trigger::getSceneLinkageId, enableIds) | |
457 | - ); | |
390 | + List<Trigger> triggers = triggerMapper.selectList(new QueryWrapper<Trigger>().lambda().eq(Trigger::getTenantId, tenantId).eq(Trigger::getTriggerType, TriggerTypeEnum.DEVICE_TRIGGER).in(Trigger::getSceneLinkageId, enableIds)); | |
458 | 391 | |
459 | 392 | |
460 | - triggers.forEach(trigger ->{ | |
393 | + triggers.forEach(trigger -> { | |
461 | 394 | String scenId = trigger.getSceneLinkageId(); |
462 | 395 | List<String> devices = trigger.getEntityId(); |
463 | - if(ScopeEnum.ALL.equals(trigger)){ | |
396 | + if (ScopeEnum.ALL.equals(trigger.getEntityType()) && currentSceneId.equals(scenId)) { | |
464 | 397 | trigger.setEntityId(allDevices); |
465 | 398 | triggerMapper.updateById(trigger); |
466 | 399 | devices = allDevices; |
467 | 400 | } |
468 | - deviceSceneMap(matchedDevices,devices , scenId); | |
401 | + deviceSceneMap(matchedDevices, devices, scenId); | |
469 | 402 | }); |
470 | 403 | |
471 | - List<DoCondition> conditions = doConditionMapper.selectList(new QueryWrapper<DoCondition>().lambda() | |
472 | - .eq(DoCondition::getSceneLinkageId, currentSceneId) | |
473 | - .eq(DoCondition::getEntityType,ScopeEnum.ALL)); | |
404 | + List<DoCondition> conditions = doConditionMapper.selectList(new QueryWrapper<DoCondition>().lambda().eq(DoCondition::getSceneLinkageId, currentSceneId).eq(DoCondition::getEntityType, ScopeEnum.ALL)); | |
474 | 405 | conditions.forEach(item -> { |
475 | - item.setEntityId(allDevices); | |
476 | - doConditionMapper.updateById(item); | |
406 | + if (currentSceneId.equals(item.getSceneLinkageId())) { | |
407 | + item.setEntityId(allDevices); | |
408 | + doConditionMapper.updateById(item); | |
409 | + } | |
477 | 410 | }); |
478 | 411 | |
479 | - List<DoAction> actions = doActionMapper.selectList(new QueryWrapper<DoAction>().lambda() | |
480 | - .eq(DoAction::getSceneLinkageId, currentSceneId) | |
481 | - .eq(DoAction::getEntityType,ScopeEnum.ALL)); | |
412 | + List<DoAction> actions = doActionMapper.selectList(new QueryWrapper<DoAction>().lambda().eq(DoAction::getSceneLinkageId, currentSceneId).eq(DoAction::getEntityType, ScopeEnum.ALL)); | |
482 | 413 | actions.forEach(item -> { |
483 | - item.setDeviceId(allDevices); | |
484 | - doActionMapper.updateById(item); | |
414 | + if (currentSceneId.equals(item.getSceneLinkageId())) { | |
415 | + item.setDeviceId(allDevices); | |
416 | + doActionMapper.updateById(item); | |
417 | + } | |
485 | 418 | }); |
486 | 419 | |
487 | 420 | if (matchedDevices.isEmpty()) { |
... | ... | @@ -493,8 +426,6 @@ public class SceneLinkageServiceImpl extends AbstractBaseService<SceneLinkageMap |
493 | 426 | engineConfig.put("names", sceneInform); |
494 | 427 | |
495 | 428 | |
496 | - | |
497 | - | |
498 | 429 | return JacksonUtil.convertValue(engineConfig, JsonNode.class); |
499 | 430 | } |
500 | 431 | |
... | ... | @@ -521,8 +452,7 @@ public class SceneLinkageServiceImpl extends AbstractBaseService<SceneLinkageMap |
521 | 452 | |
522 | 453 | private List<String> getQueryOrganizationIds(String tenantId, List<String> organizationIds) { |
523 | 454 | // 查询该组织的所有子类 |
524 | - List<OrganizationDTO> organizationDTOS = | |
525 | - organizationMapper.findOrganizationTreeList(tenantId, organizationIds); | |
455 | + List<OrganizationDTO> organizationDTOS = organizationMapper.findOrganizationTreeList(tenantId, organizationIds); | |
526 | 456 | // 遍历组织id |
527 | 457 | List<String> queryOrganizationIds = new ArrayList<>(); |
528 | 458 | organizationDTOS.forEach(item -> queryOrganizationIds.add(item.getId())); | ... | ... |