Эх сурвалжийг харах

【代码优化】IoT:增加 IotDataBridgeDO 数据桥梁的定义

YunaiV 6 сар өмнө
parent
commit
5e71d1fc85

+ 30 - 0
yudao-module-iot/yudao-module-iot-api/src/main/java/cn/iocoder/yudao/module/iot/enums/rule/IotDataBridgDirectionEnum.java

@@ -0,0 +1,30 @@
+package cn.iocoder.yudao.module.iot.enums.rule;
+
+import cn.iocoder.yudao.framework.common.core.ArrayValuable;
+import lombok.Getter;
+import lombok.RequiredArgsConstructor;
+
+import java.util.Arrays;
+
+/**
+ * Iot 数据桥接的方向枚举
+ *
+ * @author 芋道源码
+ */
+@RequiredArgsConstructor
+@Getter
+public enum IotDataBridgDirectionEnum implements ArrayValuable<Integer> {
+
+    INPUT(1), // 输入
+    OUTPUT(2); // 输出
+
+    private final Integer type;
+
+    public static final Integer[] ARRAYS = Arrays.stream(values()).map(IotDataBridgDirectionEnum::getType).toArray(Integer[]::new);
+
+    @Override
+    public Integer[] array() {
+        return ARRAYS;
+    }
+
+}

+ 41 - 0
yudao-module-iot/yudao-module-iot-api/src/main/java/cn/iocoder/yudao/module/iot/enums/rule/IotDataBridgTypeEnum.java

@@ -0,0 +1,41 @@
+package cn.iocoder.yudao.module.iot.enums.rule;
+
+import cn.iocoder.yudao.framework.common.core.ArrayValuable;
+import lombok.Getter;
+import lombok.RequiredArgsConstructor;
+
+import java.util.Arrays;
+
+/**
+ * Iot 数据桥接的类型枚举
+ *
+ * @author 芋道源码
+ */
+@RequiredArgsConstructor
+@Getter
+public enum IotDataBridgTypeEnum implements ArrayValuable<Integer> {
+
+    HTTP(1),
+    TCP(2),
+    WEBSOCKET(3),
+
+    MQTT(10),
+
+    DATABASE(20),
+    REDIS(21),
+
+    ROCKETMQ(30),
+    RABBITMQ(31),
+    KAFKA(32)
+    ;
+
+    private final Integer type;
+
+    public static final Integer[] ARRAYS = Arrays.stream(values()).map(IotDataBridgTypeEnum::getType).toArray(Integer[]::new);
+
+    @Override
+    public Integer[] array() {
+        return ARRAYS;
+    }
+
+}

+ 140 - 0
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/dataobject/rule/IotDataBridgeDO.java

@@ -0,0 +1,140 @@
+package cn.iocoder.yudao.module.iot.dal.dataobject.rule;
+
+import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
+import com.baomidou.mybatisplus.annotation.KeySequence;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
+import com.fasterxml.jackson.annotation.JsonTypeInfo;
+import lombok.*;
+
+import java.util.Map;
+
+/**
+ * IoT 数据桥梁 DO
+ *
+ * @author 芋道源码
+ */
+@TableName("iot_data_bridge")
+@KeySequence("iot_data_bridge_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class IotDataBridgeDO extends BaseDO {
+
+    /**
+     * 桥梁编号
+     */
+    @TableId
+    private Long id;
+    /**
+     * 桥梁名称
+     */
+    private String name;
+    /**
+     * 桥梁描述
+     */
+    private String description;
+    /**
+     * 桥梁状态
+     *
+     * 枚举 {@link cn.iocoder.yudao.framework.common.enums.CommonStatusEnum}
+     */
+    private Integer status;
+    /**
+     * 桥梁方向
+     *
+     * 枚举 {@link cn.iocoder.yudao.module.iot.enums.rule.IotDataBridgDirectionEnum}
+     */
+    private Integer direction;
+
+    /**
+     * 桥梁类型
+     *
+     * 枚举 {@link cn.iocoder.yudao.module.iot.enums.rule.IotDataBridgTypeEnum}
+     */
+    private Integer type;
+
+    /**
+     * 桥梁配置
+     */
+    @TableField(typeHandler = JacksonTypeHandler.class)
+    private Config config;
+
+    /**
+     * 文件客户端的配置
+     * 不同实现的客户端,需要不同的配置,通过子类来定义
+     *
+     * @author 芋道源码
+     */
+    @JsonTypeInfo(use = JsonTypeInfo.Id.CLASS)
+    // @JsonTypeInfo 注解的作用,Jackson 多态
+    // 1. 序列化到时数据库时,增加 @class 属性。
+    // 2. 反序列化到内存对象时,通过 @class 属性,可以创建出正确的类型
+    public interface Config {
+    }
+
+    /**
+     * HTTP 配置
+     */
+    @Data
+    public static class HttpConfig implements Config {
+
+        /**
+         * 请求 URL
+         */
+        private String url;
+        /**
+         * 请求方法
+         */
+        private String method;
+        /**
+         * 请求头
+         */
+        private Map<String, String> headers;
+        /**
+         * 请求参数
+         */
+        private Map<String, String> query;
+        /**
+         * 请求体
+         */
+        private String body;
+
+    }
+
+    /**
+     * MQTT 配置
+     */
+    @Data
+    public static class MqttConfig implements Config {
+
+        /**
+         * MQTT 服务器地址
+         */
+        private String url;
+        /**
+         * 用户名
+         */
+        private String username;
+        /**
+         * 密码
+         */
+        private String password;
+        /**
+         * 客户端编号
+         */
+        private String clientId;
+        /**
+         * 主题
+         */
+        private String topic;
+
+    }
+
+
+}

+ 33 - 0
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/rule/action/IotRuleSceneDataBridgeAction.java

@@ -0,0 +1,33 @@
+package cn.iocoder.yudao.module.iot.service.rule.action;
+
+import cn.iocoder.yudao.module.iot.dal.dataobject.rule.IotRuleSceneDO;
+import cn.iocoder.yudao.module.iot.enums.rule.IotRuleSceneActionTypeEnum;
+import cn.iocoder.yudao.module.iot.mq.message.IotDeviceMessage;
+import org.springframework.stereotype.Component;
+
+/**
+ * IoT 数据桥梁的 {@link IotRuleSceneAction} 实现类
+ *
+ * @author 芋道源码
+ */
+@Component
+public class IotRuleSceneDataBridgeAction implements IotRuleSceneAction {
+
+    @Override
+    public void execute(IotDeviceMessage message, IotRuleSceneDO.ActionConfig config) {
+        // TODO @芋艿:http
+        // TODO @芋艿:mq-redis
+        // TODO @芋艿:mq-数据库
+        // TODO @芋艿:kafka
+        // TODO @芋艿:rocketmq
+        // TODO @芋艿:rabbitmq
+        // TODO @芋艿:mqtt
+        // TODO @芋艿:tcp
+    }
+
+    @Override
+    public IotRuleSceneActionTypeEnum getType() {
+        return IotRuleSceneActionTypeEnum.DATA_BRIDGE;
+    }
+
+}