Переглянути джерело

设备标签增加类型转换

zhou-hao 4 роки тому
батько
коміт
d317f37ee4

+ 17 - 0
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<String> {
         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);
     }

+ 2 - 2
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;