diff --git a/jetlinks-manager/device-manager/src/main/java/org/jetlinks/community/device/response/DeviceDetail.java b/jetlinks-manager/device-manager/src/main/java/org/jetlinks/community/device/response/DeviceDetail.java index a0e9c227..3b4ca5d6 100644 --- a/jetlinks-manager/device-manager/src/main/java/org/jetlinks/community/device/response/DeviceDetail.java +++ b/jetlinks-manager/device-manager/src/main/java/org/jetlinks/community/device/response/DeviceDetail.java @@ -12,6 +12,8 @@ import org.jetlinks.community.device.enums.DeviceType; import org.jetlinks.core.Values; import org.jetlinks.core.device.DeviceOperator; import org.jetlinks.core.metadata.ConfigPropertyMetadata; +import org.jetlinks.core.metadata.DeviceMetadata; +import org.jetlinks.supports.official.JetLinksDeviceMetadataCodec; import org.springframework.util.CollectionUtils; import org.springframework.util.StringUtils; import reactor.core.publisher.Mono; @@ -127,9 +129,29 @@ public class DeviceDetail { public DeviceDetail notActive() { state = DeviceState.notActive; + initTags(); return this; } + private DeviceMetadata decodeMetadata() { + if (StringUtils.isEmpty(metadata)) { + return null; + } + return JetLinksDeviceMetadataCodec.getInstance().doDecode(metadata); + } + + private void initTags() { + DeviceMetadata metadata = decodeMetadata(); + if (null != metadata) { + with(metadata + .getTags() + .stream() + .map(DeviceTagEntity::of) + .collect(Collectors.toList())); + } + } + + public Mono with(DeviceOperator operator, List configs) { return Mono .zip( @@ -140,7 +162,7 @@ public class DeviceDetail { //T3: 离线时间 operator.getOfflineTime().defaultIfEmpty(0L), //T4: 物模型 - operator.getMetadata(), + operator.getMetadata().switchIfEmpty(Mono.fromSupplier(this::decodeMetadata)), //T5: 真实的配置信息 operator.getSelfConfigs(configs .stream()