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

This commit is contained in:
YunaiV 2025-02-03 13:25:47 +08:00
parent 48cfcdadc1
commit 5e71d1fc85
4 changed files with 244 additions and 0 deletions

View File

@ -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;
}
}

View File

@ -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;
}
}

View File

@ -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") // 用于 OraclePostgreSQLKingbaseDB2H2 数据库的主键自增如果是 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;
}
}

View File

@ -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;
}
}