Browse Source

Merge remote-tracking branch 'origin/master'

zhouhao 4 năm trước cách đây
mục cha
commit
4a0f0780a2

+ 1 - 1
docker/run-all/docker-compose.yml

@@ -48,7 +48,7 @@ services:
       POSTGRES_DB: jetlinks
       TZ: Asia/Shanghai
   ui:
-    image: registry.cn-shenzhen.aliyuncs.com/jetlinks/jetlinks-ui-antd:1.8.0
+    image: registry.cn-shenzhen.aliyuncs.com/jetlinks/jetlinks-ui-antd:1.9.0
     container_name: jetlinks-ce-ui
     ports:
       - 9000:80

+ 0 - 21
jetlinks-components/gateway-component/src/main/java/org/jetlinks/community/gateway/DefaultTopicMessage.java

@@ -1,21 +0,0 @@
-package org.jetlinks.community.gateway;
-
-import lombok.AllArgsConstructor;
-import lombok.Getter;
-import lombok.Setter;
-import org.jetlinks.core.message.codec.EncodedMessage;
-import org.jetlinks.core.message.codec.Transport;
-
-@Getter
-@Setter
-@AllArgsConstructor
-class DefaultTopicMessage implements TopicMessage {
-    private String topic;
-
-    private EncodedMessage message;
-
-    public DefaultTopicMessage(String topic,Object message){
-        this.topic=topic;
-
-    }
-}

+ 0 - 11
jetlinks-components/gateway-component/src/main/java/org/jetlinks/community/gateway/DeviceMessageUtils.java

@@ -15,17 +15,6 @@ import java.util.Optional;
 
 public class DeviceMessageUtils {
 
-    @SuppressWarnings("all")
-    public static Optional<DeviceMessage> convert(TopicMessage message){
-        Object nativeMessage = message.convertMessage();
-        if (nativeMessage instanceof DeviceMessage) {
-            return Optional.of((DeviceMessage)nativeMessage);
-        } else if (nativeMessage instanceof Map) {
-            return MessageType.convertMessage(((Map<String, Object>) nativeMessage));
-        }
-        return Optional.empty();
-    }
-
     public static Optional<DeviceMessage> convert(TopicPayload message) {
         return Optional.of(message.decode(DeviceMessage.class));
     }

+ 0 - 66
jetlinks-components/gateway-component/src/main/java/org/jetlinks/community/gateway/TopicMessage.java

@@ -1,66 +0,0 @@
-package org.jetlinks.community.gateway;
-
-import com.alibaba.fastjson.JSON;
-import io.netty.buffer.ByteBufUtil;
-import org.jetlinks.core.message.codec.EncodedMessage;
-import org.jetlinks.supports.utils.MqttTopicUtils;
-
-import javax.annotation.Nonnull;
-import java.nio.charset.StandardCharsets;
-import java.util.Map;
-
-@Deprecated
-public interface TopicMessage {
-
-    /**
-     * 主题: 格式为: /group/1/user/1, 支持通配符: **(多层路径),*(单层路径)
-     *
-     * <pre>
-     *     /group/** , /group/下的全部topic.包括子目录
-     *     /group/1/* , /group/1/下的topic. 不包括子目录
-     * </pre>
-     *
-     * @return topic
-     */
-    @Nonnull
-    String getTopic();
-
-    /**
-     * @return 已编码的消息
-     * @see org.jetlinks.core.message.codec.MqttMessage
-     */
-    @Nonnull
-    EncodedMessage getMessage();
-
-    default Map<String, String> getTopicVars(String pattern) {
-        return MqttTopicUtils.getPathVariables(pattern, getTopic());
-    }
-
-    default Object convertMessage() {
-        if (getMessage() instanceof EncodableMessage) {
-            return ((EncodableMessage) getMessage()).getNativePayload();
-        }
-        byte[] payload = getMessage().payloadAsBytes();
-        //maybe json
-        if (/* { }*/(payload[0] == 123 && payload[payload.length - 1] == 125)
-            || /* [ ] */(payload[0] == 91 && payload[payload.length - 1] == 93)
-        ) {
-            return JSON.parseObject(new String(payload));
-        }
-        if (ByteBufUtil.isText(getMessage().getPayload(), StandardCharsets.UTF_8)) {
-            return getMessage().payloadAsString();
-        }
-        return payload;
-    }
-
-    static TopicMessage of(String topic, EncodedMessage message) {
-        return new DefaultTopicMessage(topic, message);
-    }
-
-    static TopicMessage of(String topic, Object payload) {
-        if (payload instanceof EncodedMessage) {
-            return of(topic, ((EncodedMessage) payload));
-        }
-        return of(topic, EncodableMessage.of(payload));
-    }
-}

+ 0 - 57
jetlinks-components/gateway-component/src/main/java/org/jetlinks/community/gateway/TopicMessageWrap.java

@@ -1,57 +0,0 @@
-package org.jetlinks.community.gateway;
-
-import io.netty.buffer.ByteBuf;
-import org.jetlinks.core.NativePayload;
-import org.jetlinks.core.Payload;
-import org.jetlinks.core.event.TopicPayload;
-import org.jetlinks.core.message.codec.EncodedMessage;
-
-import javax.annotation.Nonnull;
-
-public class TopicMessageWrap implements TopicMessage {
-
-    private String topic;
-
-    private EncodedMessage message;
-
-    public static TopicMessageWrap wrap(TopicPayload topicPayload) {
-        Payload payload = topicPayload.getPayload();
-       TopicMessageWrap wrap = new TopicMessageWrap();
-        wrap.topic = topicPayload.getTopic();
-        if (payload instanceof NativePayload) {
-            wrap.message = new EncodableMessage() {
-                @Override
-                public Object getNativePayload() {
-                    return ((NativePayload<?>) payload).getNativeObject();
-                }
-
-                @Nonnull
-                @Override
-                public ByteBuf getPayload() {
-                    return payload.getBody();
-                }
-            };
-        } else {
-            wrap.message = new EncodedMessage() {
-                @Nonnull
-                @Override
-                public ByteBuf getPayload() {
-                    return payload.getBody();
-                }
-            };
-        }
-        return wrap;
-    }
-
-    @Nonnull
-    @Override
-    public String getTopic() {
-        return topic;
-    }
-
-    @Nonnull
-    @Override
-    public EncodedMessage getMessage() {
-        return message;
-    }
-}

+ 0 - 73
jetlinks-components/gateway-component/src/main/java/org/jetlinks/community/gateway/rule/TopicMessageCodec.java

@@ -1,73 +0,0 @@
-package org.jetlinks.community.gateway.rule;
-
-import io.netty.buffer.ByteBuf;
-import lombok.Getter;
-import lombok.Setter;
-import org.jetlinks.community.gateway.TopicMessage;
-import org.jetlinks.rule.engine.api.RuleData;
-import org.jetlinks.rule.engine.api.RuleDataCodec;
-import org.jetlinks.rule.engine.api.RuleDataCodecs;
-import org.jetlinks.rule.engine.executor.PayloadType;
-import reactor.core.publisher.Flux;
-import reactor.core.publisher.Mono;
-
-import java.util.HashMap;
-import java.util.Map;
-
-public class TopicMessageCodec implements RuleDataCodec<TopicMessage> {
-
-    private static final TopicMessageCodec INSTANCE = new TopicMessageCodec();
-
-    static {
-        RuleDataCodecs.register(TopicMessage.class, INSTANCE);
-    }
-
-    public static void register() {
-    }
-
-
-    public static TopicMessageCodec getInstance() {
-        return INSTANCE;
-    }
-
-    @Override
-    public Map<String, Object> encode(TopicMessage data, Feature... features) {
-
-        ByteBuf payload = data.getMessage().getPayload();
-        PayloadType payloadType = PayloadType.valueOf(data.getMessage().getPayloadType().name());
-
-        Map<String, Object> map = new HashMap<>();
-        map.put("topic", data.getTopic());
-        map.put("message", payloadType.read(payload));
-        return map;
-    }
-
-    @Override
-    public Flux<TopicMessage> decode(RuleData data, Feature... features) {
-
-        return Mono.fromSupplier(() -> Feature.find(TopicFeature.class, features)
-            .map(TopicFeature::getTopics)
-            .orElseThrow(() -> new UnsupportedOperationException("topics not found")))
-            .flatMapMany(Flux::just)
-            .flatMap(topic -> data
-                .dataToMap()
-                .map(map -> TopicMessage.of(topic, map)));
-    }
-
-
-    public static TopicFeature feature(String... topics) {
-        return new TopicFeature(topics);
-    }
-
-    @Getter
-    @Setter
-    public static class TopicFeature implements RuleDataCodec.Feature {
-
-        private String[] topics;
-
-        public TopicFeature(String... topics) {
-            this.topics = topics;
-        }
-    }
-
-}

+ 0 - 7
jetlinks-components/gateway-component/src/main/java/org/jetlinks/community/gateway/spring/ProxyMessageListener.java

@@ -3,8 +3,6 @@ package org.jetlinks.community.gateway.spring;
 import lombok.extern.slf4j.Slf4j;
 import org.hswebframework.web.bean.FastBeanCopier;
 import org.hswebframework.web.proxy.Proxy;
-import org.jetlinks.community.gateway.TopicMessage;
-import org.jetlinks.community.gateway.TopicMessageWrap;
 import org.jetlinks.core.NativePayload;
 import org.jetlinks.core.Payload;
 import org.jetlinks.core.codec.Codecs;
@@ -17,7 +15,6 @@ import reactor.core.publisher.Mono;
 
 import java.lang.reflect.Method;
 import java.util.StringJoiner;
-import java.util.concurrent.atomic.AtomicReference;
 import java.util.function.BiFunction;
 
 @Slf4j
@@ -80,10 +77,6 @@ class ProxyMessageListener implements MessageListener {
             return message;
         }
         try {
-            if (paramType.equals(TopicMessage.class)) {
-                log.warn("TopicMessage已弃用,请替换为TopicPayload! {}", method);
-                return TopicMessageWrap.wrap(message);
-            }
             Payload payload = message.getPayload();
             Object decodedPayload;
             if (payload instanceof NativePayload) {

+ 22 - 9
jetlinks-manager/device-manager/src/main/java/org/jetlinks/community/device/web/DeviceInstanceController.java

@@ -744,20 +744,33 @@ public class DeviceInstanceController implements
     @Operation(summary = "更新物模型")
     public Mono<Void> updateMetadata(@PathVariable String id,
                                      @RequestBody Mono<String> metadata) {
-
-        return Mono
-            .zip(
-                registry.getDevice(id),
-                metadata
-            )
-            .flatMap(tp2 -> service
+        return metadata
+            .flatMap(metadata_ -> service
                 .createUpdate()
-                .set(DeviceInstanceEntity::getDeriveMetadata, tp2.getT2())
+                .set(DeviceInstanceEntity::getDeriveMetadata, metadata_)
                 .where(DeviceInstanceEntity::getId, id)
                 .execute()
-                .then(tp2.getT1().updateMetadata(tp2.getT2())))
+                .then(registry.getDevice(id))
+                .flatMap(device -> device.updateMetadata(metadata_)))
             .then();
     }
 
+    //重置设备物模型
+    @DeleteMapping(value = "/{id}/metadata")
+    @SaveAction
+    @Operation(summary = "重置物模型")
+    public Mono<Void> resetMetadata(@PathVariable String id) {
+
+        return registry
+            .getDevice(id)
+            .flatMap(DeviceOperator::resetMetadata)
+            .then(service
+                      .createUpdate()
+                      .setNull(DeviceInstanceEntity::getDeriveMetadata)
+                      .where(DeviceInstanceEntity::getId, id)
+                      .execute()
+                      .then());
+    }
+
 
 }

+ 0 - 28
jetlinks-manager/network-manager/src/main/java/org/jetlinks/community/network/manager/web/response/TopicMessageResponse.java

@@ -1,28 +0,0 @@
-package org.jetlinks.community.network.manager.web.response;
-
-import lombok.Getter;
-import lombok.Setter;
-import org.jetlinks.community.gateway.TopicMessage;
-
-import java.nio.charset.StandardCharsets;
-
-@Getter
-@Setter
-public class TopicMessageResponse {
-
-    private String topic;
-
-    private Object message;
-
-    public static TopicMessageResponse of(TopicMessage topicMessage) {
-        TopicMessageResponse response = new TopicMessageResponse();
-        response.setTopic(topicMessage.getTopic());
-        response.setMessage(topicMessage.getMessage().getPayload().toString(StandardCharsets.UTF_8));
-        return response;
-    }
-
-    public TopicMessage toTopicMessage() {
-        return TopicMessage.of(this.topic, this.message);
-    }
-
-}

+ 6 - 0
jetlinks-standalone/pom.xml

@@ -64,6 +64,12 @@
             <artifactId>guava</artifactId>
         </dependency>
 
+        <dependency>
+            <groupId>org.hswebframework.web</groupId>
+            <artifactId>hsweb-system-dictionary</artifactId>
+            <version>${hsweb.framework.version}</version>
+        </dependency>
+
         <dependency>
             <groupId>io.netty</groupId>
             <artifactId>netty-transport-native-epoll</artifactId>

+ 7 - 3
jetlinks-standalone/src/main/java/org/jetlinks/community/standalone/configuration/protocol/AutoDownloadJarProtocolSupportLoader.java

@@ -77,8 +77,10 @@ public class AutoDownloadJarProtocolSupportLoader extends JarProtocolSupportLoad
         ProtocolSupportDefinition newDef = FastBeanCopier.copy(definition, new ProtocolSupportDefinition());
 
         Map<String, Object> config = newDef.getConfiguration();
-        String location = Optional.ofNullable(config.get("location"))
-            .map(String::valueOf).orElseThrow(() -> new IllegalArgumentException("location"));
+        String location = Optional
+            .ofNullable(config.get("location"))
+            .map(String::valueOf)
+            .orElseThrow(() -> new IllegalArgumentException("configuration.location不能为空"));
 
         if (location.startsWith("http")) {
             String urlMd5 = DigestUtils.md5Hex(location);
@@ -88,7 +90,8 @@ public class AutoDownloadJarProtocolSupportLoader extends JarProtocolSupportLoad
                 config.put("location", file.getAbsolutePath());
                 return super
                     .load(newDef)
-                    .subscribeOn(Schedulers.elastic());
+                    .subscribeOn(Schedulers.elastic())
+                    .doOnError(err -> file.delete());
             }
             return webClient
                 .get()
@@ -105,6 +108,7 @@ public class AutoDownloadJarProtocolSupportLoader extends JarProtocolSupportLoad
                 .doOnNext(path -> config.put("location", path))
                 .then(super.load(newDef))
                 .timeout(loadTimeout, Mono.error(() -> new TimeoutException("获取协议文件失败:" + location)))
+                .doOnError(err -> file.delete())
                 ;
         }
         return super.load(newDef);

+ 1 - 1
pom.xml

@@ -19,7 +19,7 @@
         <spring.boot.version>2.3.8.RELEASE</spring.boot.version>
         <java.version>1.8</java.version>
         <project.build.jdk>${java.version}</project.build.jdk>
-        <hsweb.framework.version>4.0.9</hsweb.framework.version>
+        <hsweb.framework.version>4.0.10-SNAPSHOT</hsweb.framework.version>
         <easyorm.version>4.0.10-SNAPSHOT</easyorm.version>
         <hsweb.expands.version>3.0.2</hsweb.expands.version>
         <jetlinks.version>1.1.6-SNAPSHOT</jetlinks.version>