diff --git a/jetlinks-manager/device-manager/src/main/java/org/jetlinks/community/device/entity/DeviceInstanceEntity.java b/jetlinks-manager/device-manager/src/main/java/org/jetlinks/community/device/entity/DeviceInstanceEntity.java index 464f128e..8e202e67 100644 --- a/jetlinks-manager/device-manager/src/main/java/org/jetlinks/community/device/entity/DeviceInstanceEntity.java +++ b/jetlinks-manager/device-manager/src/main/java/org/jetlinks/community/device/entity/DeviceInstanceEntity.java @@ -8,12 +8,19 @@ import org.hswebframework.web.api.crud.entity.RecordCreationEntity; import org.hswebframework.web.crud.generator.Generators; import org.hswebframework.web.validator.CreateGroup; import org.jetlinks.community.device.enums.DeviceState; +import org.jetlinks.core.device.DeviceConfigKey; +import org.jetlinks.core.device.DeviceInfo; +import org.jetlinks.core.device.DeviceOperator; +import org.springframework.util.CollectionUtils; +import org.springframework.util.StringUtils; +import reactor.core.publisher.Mono; import javax.persistence.Column; import javax.persistence.GeneratedValue; import javax.persistence.Table; import javax.validation.constraints.NotBlank; import java.sql.JDBCType; +import java.util.Collections; import java.util.Map; @Getter @@ -37,7 +44,7 @@ public class DeviceInstanceEntity extends GenericEntity implements Recor private String describe; @Comment("产品id") - @Column(name = "product_id",length = 32) + @Column(name = "product_id", length = 32) @NotBlank(message = "产品ID不能为空", groups = CreateGroup.class) private String productId; @@ -84,4 +91,20 @@ public class DeviceInstanceEntity extends GenericEntity implements Recor @Column(name = "parent_id", length = 32) @Comment("父级设备ID") private String parentId; + + public DeviceInfo toDeviceInfo() { + DeviceInfo info = org.jetlinks.core.device.DeviceInfo.builder() + .id(this.getId()) + .productId(this.getProductId()) + .build() + .addConfig(DeviceConfigKey.parentGatewayId, this.getParentId()); + + if (!CollectionUtils.isEmpty(configuration)) { + configuration.forEach(info::addConfig); + } + if (StringUtils.hasText(deriveMetadata)) { + info.addConfig(DeviceConfigKey.metadata, deriveMetadata); + } + return info; + } } diff --git a/jetlinks-manager/device-manager/src/main/java/org/jetlinks/community/device/service/LocalDeviceInstanceService.java b/jetlinks-manager/device-manager/src/main/java/org/jetlinks/community/device/service/LocalDeviceInstanceService.java index f52f9f4a..d05fb770 100644 --- a/jetlinks-manager/device-manager/src/main/java/org/jetlinks/community/device/service/LocalDeviceInstanceService.java +++ b/jetlinks-manager/device-manager/src/main/java/org/jetlinks/community/device/service/LocalDeviceInstanceService.java @@ -166,26 +166,21 @@ public class LocalDeviceInstanceService extends GenericReactiveCrudService deploy(Flux flux) { return flux - .flatMap(instance -> - registry.register(org.jetlinks.core.device.DeviceInfo.builder() - .id(instance.getId()) - .productId(instance.getProductId()) - .build() - .addConfig(DeviceConfigKey.parentGatewayId, instance.getParentId())) - //设置其他配置信息 - .flatMap(deviceOperator -> deviceOperator.getState() - .flatMap(r -> { - if (r.equals(org.jetlinks.core.device.DeviceState.unknown) || - r.equals(org.jetlinks.core.device.DeviceState.noActive)) { - instance.setState(DeviceState.offline); - return deviceOperator.putState(org.jetlinks.core.device.DeviceState.offline); - } - instance.setState(DeviceState.of(r)); - return Mono.just(true); - }) - .flatMap(success -> success ? Mono.just(deviceOperator) : Mono.empty()) - ) - .thenReturn(instance)) + .flatMap(instance -> registry + .register(instance.toDeviceInfo()) + .flatMap(deviceOperator -> deviceOperator.getState() + .flatMap(r -> { + if (r.equals(org.jetlinks.core.device.DeviceState.unknown) || + r.equals(org.jetlinks.core.device.DeviceState.noActive)) { + instance.setState(DeviceState.offline); + return deviceOperator.putState(org.jetlinks.core.device.DeviceState.offline); + } + instance.setState(DeviceState.of(r)); + return Mono.just(true); + }) + .flatMap(success -> success ? Mono.just(deviceOperator) : Mono.empty()) + ) + .thenReturn(instance)) .buffer(50) .publishOn(Schedulers.single()) .flatMap(all -> Flux.fromIterable(all)