diff --git a/jetlinks-manager/device-manager/src/main/java/org/jetlinks/community/device/entity/DeviceTagEntity.java b/jetlinks-manager/device-manager/src/main/java/org/jetlinks/community/device/entity/DeviceTagEntity.java index ed9f7720..ca2f8b88 100644 --- a/jetlinks-manager/device-manager/src/main/java/org/jetlinks/community/device/entity/DeviceTagEntity.java +++ b/jetlinks-manager/device-manager/src/main/java/org/jetlinks/community/device/entity/DeviceTagEntity.java @@ -11,6 +11,8 @@ import org.hswebframework.web.api.crud.entity.GenericEntity; import org.hswebframework.web.crud.annotation.EnableEntityEvent; import org.hswebframework.web.crud.generator.Generators; import org.hswebframework.web.validator.CreateGroup; +import org.jetlinks.core.metadata.Converter; +import org.jetlinks.core.metadata.DataType; import org.jetlinks.core.metadata.PropertyMetadata; import javax.persistence.Column; @@ -73,6 +75,21 @@ public class DeviceTagEntity extends GenericEntity { return entity; } + public static DeviceTagEntity of(PropertyMetadata property, Object value) { + DeviceTagEntity tag = of(property); + + DataType type = property.getValueType(); + if (type instanceof Converter) { + Object newValue = ((Converter) type).convert(value); + if (newValue != null) { + value = newValue; + } + } + tag.setValue(String.valueOf(value)); + return tag; + } + + public static String createTagId(String deviceId, String key) { return DigestUtils.md5Hex(deviceId + ":" + key); } diff --git a/jetlinks-manager/device-manager/src/main/java/org/jetlinks/community/device/service/DeviceMessageBusinessHandler.java b/jetlinks-manager/device-manager/src/main/java/org/jetlinks/community/device/service/DeviceMessageBusinessHandler.java index 2b6dee04..a5fe8621 100644 --- a/jetlinks-manager/device-manager/src/main/java/org/jetlinks/community/device/service/DeviceMessageBusinessHandler.java +++ b/jetlinks-manager/device-manager/src/main/java/org/jetlinks/community/device/service/DeviceMessageBusinessHandler.java @@ -163,7 +163,7 @@ public class DeviceMessageBusinessHandler { .map(e -> { DeviceTagEntity tagEntity = metadata .getTag(e.getKey()) - .map(DeviceTagEntity::of) + .map(tagMeta -> DeviceTagEntity.of(tagMeta, e.getValue())) .orElseGet(() -> { DeviceTagEntity entity = new DeviceTagEntity(); entity.setKey(e.getKey()); @@ -171,9 +171,9 @@ public class DeviceMessageBusinessHandler { entity.setName(e.getKey()); entity.setCreateTime(new Date()); entity.setDescription("设备上报"); + entity.setValue(String.valueOf(e.getValue())); return entity; }); - tagEntity.setValue(String.valueOf(e.getValue())); tagEntity.setDeviceId(deviceId); tagEntity.setId(DeviceTagEntity.createTagId(deviceId, tagEntity.getKey())); return tagEntity;