Procházet zdrojové kódy

完善mqtt上报数据

xucaiqin před 1 rokem
rodič
revize
aa7b2b18ab

+ 0 - 50
iot-module/iot-module-data/iot-module-data-biz/src/main/java/com/middle/platform/data/biz/service/mqtt/FuncPerEnum.java

@@ -1,50 +0,0 @@
-package com.middle.platform.data.biz.service.mqtt;
-
-import com.middle.platform.data.api.constant.TopicConstant;
-import com.middle.platform.data.biz.service.mqtt.strategy.AttrReportStrategy;
-import com.middle.platform.data.biz.service.mqtt.strategy.EventReportStrategy;
-import lombok.AllArgsConstructor;
-import lombok.Getter;
-import org.apache.commons.lang3.StringUtils;
-
-/**
- * 功能权限 枚举
- *
- * @author xucaiqin
- * @date 2023-12-22 11:37:56
- */
-@Getter
-@AllArgsConstructor
-public enum FuncPerEnum {
-    ATTR_PUB(TopicConstant.ATTR_PUB, AttrReportStrategy.class.getSimpleName()),
-    EVENT_PUB(TopicConstant.EVENT_PUB, EventReportStrategy.class.getSimpleName()),
-    ;
-    private final String func;
-    private final String name;
-
-    /**
-     * 通过功能权限
-     *
-     * @param func 功能权限
-     *             <p>
-     *             属性上报字典-1
-     *             发布-1
-     *             订阅-2
-     *             发布订阅-3
-     *             如:属性上报-发布 具体为对应的值 1-1
-     *             </p>
-     * @return 策略类字符串
-     */
-    public static String strategy(String func) {
-        for (FuncPerEnum value : FuncPerEnum.values()) {
-            if (StringUtils.equals(value.getFunc(), func)) {
-                String beanName = value.getName();
-                char[] chars = beanName.toCharArray();
-                chars[0] += 32;
-                return String.valueOf(chars);
-            }
-        }
-        return null;
-    }
-
-}

+ 1 - 2
iot-module/iot-module-data/iot-module-data-biz/src/main/java/com/middle/platform/data/biz/service/mqtt/MqttService.java

@@ -1,7 +1,6 @@
 package com.middle.platform.data.biz.service.mqtt;
 
 import com.middle.platform.data.biz.config.MqttConfig;
-import com.middle.platform.data.biz.utils.MqttTopicUtil;
 import jakarta.annotation.Resource;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.context.annotation.Bean;
@@ -28,7 +27,7 @@ public class MqttService {
             log.info("topic {}", topic);
             log.info("payload {}", payload);
 
-            MqttTopicStrategy mqttTopicStrategy = mqttStrategyFactory.getByTopic(MqttTopicUtil.replaceTopic(topic));
+            MqttTopicStrategy mqttTopicStrategy = mqttStrategyFactory.getByTopic(topic);
             if (Objects.nonNull(mqttTopicStrategy)) {
                 mqttTopicStrategy.dealMsg(topic, payload);
             }

+ 2 - 3
iot-module/iot-module-data/iot-module-data-biz/src/main/java/com/middle/platform/data/biz/service/mqtt/MqttStrategyFactory.java

@@ -9,8 +9,7 @@ import java.util.Map;
 public class MqttStrategyFactory {
     @Resource
     private Map<String, MqttTopicStrategy> mqttTopicStrategyMap;
-    @Resource
-    private StrategyAnalyze strategyAnalyze;
+
 
     /**
      * 通过topic名称获取对应解析策略
@@ -19,7 +18,7 @@ public class MqttStrategyFactory {
      * @return
      */
     public MqttTopicStrategy getByTopic(String topic) {
-        return mqttTopicStrategyMap.get(strategyAnalyze.getByTopic(topic));
+        return mqttTopicStrategyMap.get(Strategy.strategy(topic));
     }
 
 }

+ 2 - 23
iot-module/iot-module-data/iot-module-data-biz/src/main/java/com/middle/platform/data/biz/service/mqtt/MqttTopicInit.java

@@ -1,40 +1,19 @@
 package com.middle.platform.data.biz.service.mqtt;
 
-import com.alibaba.fastjson.JSONObject;
 import com.middle.platform.data.biz.service.mqtt.impl.DynamicTopic;
-import com.middle.platform.manage.api.feign.ProductApi;
-import com.middle.platform.manage.api.pojo.TopicVo;
-import com.middle.platform.redis.constant.CacheConstant;
-import com.middle.platform.redis.service.CacheService;
 import jakarta.annotation.Resource;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Component;
-import org.springframework.util.CollectionUtils;
-
-import java.util.List;
-import java.util.Map;
-import java.util.stream.Collectors;
 
 @Component
 @Slf4j
 public class MqttTopicInit {
-    @Resource
-    private ProductApi productApi;
     @Resource
     private DynamicTopic dynamicTopic;
-    @Resource
-    private CacheService cacheService;
 
     public void init() {
-        List<TopicVo> topicVos = productApi.productTopic();
-
-        if (!CollectionUtils.isEmpty(topicVos)) {
-            log.info("初始化订阅:{}", JSONObject.toJSONString(topicVos));
-            Map<String, Object> map = topicVos.stream().collect(Collectors.toMap(a -> String.format(CacheConstant.TOPIC_CACHE, a.getUrl()), b -> b.getFunc() + String.valueOf(b.getPermission()), (a, b) -> a));
-            cacheService.multiSetKey(map);
-            dynamicTopic.addTopic(topicVos.stream().map(TopicVo::getUrl).collect(Collectors.toList()));
-        }
+        dynamicTopic.addTopic(TopicDefault.ATTR_UP, 0);
+        dynamicTopic.addTopic(TopicDefault.EVENT_UP, 0);
     }
 
-
 }

+ 42 - 0
iot-module/iot-module-data/iot-module-data-biz/src/main/java/com/middle/platform/data/biz/service/mqtt/Strategy.java

@@ -0,0 +1,42 @@
+package com.middle.platform.data.biz.service.mqtt;
+
+import cn.hutool.core.util.StrUtil;
+import com.middle.platform.data.biz.service.mqtt.strategy.AttrReportStrategy;
+import com.middle.platform.data.biz.service.mqtt.strategy.EventReportStrategy;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * topic解析为指定策略类名称
+ *
+ * @author xucaiqin
+ * @date 2023-12-22 11:37:56
+ */
+@Getter
+@AllArgsConstructor
+public enum Strategy {
+    ATTR_PUB(TopicDefault.ATTR_UP, AttrReportStrategy.class.getSimpleName()),
+    EVENT_PUB(TopicDefault.EVENT_UP, EventReportStrategy.class.getSimpleName()),
+    ;
+    private final String topic;
+    private final String strategy;
+
+    /**
+     * 通过功能权限
+     *
+     * @param topic topic
+     * @return 策略类字符串
+     */
+    public static String strategy(String topic) {
+        for (Strategy value : Strategy.values()) {
+            if (StrUtil.endWith(topic, StrUtil.removePrefix(value.getTopic(), TopicDefault.PREFIX))) {
+                String beanName = value.getStrategy();
+                char[] chars = beanName.toCharArray();
+                chars[0] += 32;
+                return String.valueOf(chars);
+            }
+        }
+        return null;
+    }
+
+}

+ 21 - 0
iot-module/iot-module-data/iot-module-data-biz/src/main/java/com/middle/platform/data/biz/service/mqtt/TopicDefault.java

@@ -0,0 +1,21 @@
+package com.middle.platform.data.biz.service.mqtt;
+
+/**
+ * 功能权限 枚举
+ *
+ * @author xucaiqin
+ * @date 2023-12-22 11:37:56
+ */
+public class TopicDefault {
+    public static final String PREFIX = "/iot/+/+";
+    //属性上报
+    public static final String ATTR_UP = PREFIX + "/property/post";
+    //属性上报回复
+    public static final String ATTR_DOWN = PREFIX + "/property/post_reply";
+    //事件上报
+    public static final String EVENT_UP = PREFIX + "/event/post";
+    //事件上报回复
+    public static final String EVENT_DOWN = PREFIX + "/event/post_reply";
+
+
+}

+ 1 - 1
iot-module/iot-module-data/iot-module-data-biz/src/main/java/com/middle/platform/data/biz/service/mqtt/strategy/EventReportStrategy.java

@@ -13,7 +13,7 @@ public class EventReportStrategy implements MqttTopicStrategy {
 
     @Override
     public void dealMsg(String guid,Object msg) {
-        log.debug("属性上报数据:{}", msg);
+        log.debug("事件上报数据:{}", msg);
 
     }
 }

+ 1 - 9
iot-module/iot-module-data/iot-module-data-biz/src/main/java/com/middle/platform/data/biz/utils/MqttTopicUtil.java

@@ -1,8 +1,5 @@
 package com.middle.platform.data.biz.utils;
 
-import org.apache.commons.lang3.StringUtils;
-
-import java.util.Optional;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
@@ -41,10 +38,5 @@ public class MqttTopicUtil {
         return null;
     }
 
-    public static String replaceTopic(String topic) {
-        return Optional.ofNullable(topic).map(t -> {
-            String s = StringUtils.startsWith(t, "/") ? "(/[^/]+/[^/]+)/[^/]+" : "([^/]+/[^/]+)/[^/]+";
-            return t.replaceFirst(s, "$1/+");
-        }).orElse(topic);
-    }
+
 }