소스 검색

优化设备自动注册

zhou-hao 4 년 전
부모
커밋
8c8257edad
1개의 변경된 파일12개의 추가작업 그리고 11개의 파일을 삭제
  1. 12 11
      jetlinks-manager/device-manager/src/main/java/org/jetlinks/community/device/service/LocalDeviceInstanceService.java

+ 12 - 11
jetlinks-manager/device-manager/src/main/java/org/jetlinks/community/device/service/LocalDeviceInstanceService.java

@@ -549,18 +549,19 @@ public class LocalDeviceInstanceService extends GenericReactiveCrudService<Devic
         String childId = message.getChildDeviceId();
         Message childMessage = message.getChildDeviceMessage();
         if (childMessage instanceof DeviceRegisterMessage) {
-            return registry.getDevice(message.getDeviceId())
+
+            return registry
+                .getDevice(childId)
+                .switchIfEmpty(Mono.defer(() -> doAutoRegister(((DeviceRegisterMessage) childMessage))))
+                .flatMap(dev -> dev.setConfig(DeviceConfigKey.parentGatewayId, message.getDeviceId()).thenReturn(dev))
                 .flatMap(DeviceOperator::getState)
-                .flatMap(state -> createUpdate()
-                    .set(DeviceInstanceEntity::getParentId, message.getDeviceId())
-                    .set(DeviceInstanceEntity::getState, DeviceState.of(state))
-                    .where(DeviceInstanceEntity::getId, childId)
-                    .execute()
-                    .then(registry
-                        .getDevice(childId)
-                        .switchIfEmpty(Mono.defer(() -> doAutoRegister(((DeviceRegisterMessage) childMessage))))
-                        .flatMap(dev -> dev.setConfig(DeviceConfigKey.parentGatewayId, message.getDeviceId())))
-                    .then());
+                .flatMap(state ->
+                    createUpdate()
+                        .set(DeviceInstanceEntity::getParentId, message.getDeviceId())
+                        .set(DeviceInstanceEntity::getState, DeviceState.of(state))
+                        .where(DeviceInstanceEntity::getId, childId)
+                        .execute()
+                ).then();
         }
         return Mono.empty();
     }