diff --git a/yudao-module-iot/pom.xml b/yudao-module-iot/pom.xml
index 074c42e17a..97df8e5185 100644
--- a/yudao-module-iot/pom.xml
+++ b/yudao-module-iot/pom.xml
@@ -7,7 +7,6 @@
${revision}
- yudao-module-iot-api
yudao-module-iot-biz
yudao-module-iot-core
yudao-module-iot-gateway
diff --git a/yudao-module-iot/yudao-module-iot-api/pom.xml b/yudao-module-iot/yudao-module-iot-api/pom.xml
deleted file mode 100644
index ef65715aae..0000000000
--- a/yudao-module-iot/yudao-module-iot-api/pom.xml
+++ /dev/null
@@ -1,53 +0,0 @@
-
-
-
- yudao-module-iot
- cn.iocoder.boot
- ${revision}
-
- 4.0.0
- yudao-module-iot-api
- jar
-
- ${project.artifactId}
-
-
- 物联网 模块 API,暴露给其它模块调用
-
-
-
-
- cn.iocoder.boot
- yudao-common
-
-
-
-
- org.springframework
- spring-web
- provided
-
-
-
-
- com.fasterxml.jackson.core
- jackson-databind
- provided
-
-
-
-
-
-
-
-
-
- org.springframework.boot
- spring-boot-starter-validation
- true
-
-
-
-
diff --git a/yudao-module-iot/yudao-module-iot-api/src/main/java/cn/iocoder/yudao/module/iot/api/device/dto/control/upstream/IotDeviceEventReportReqDTO.java b/yudao-module-iot/yudao-module-iot-api/src/main/java/cn/iocoder/yudao/module/iot/api/device/dto/control/upstream/IotDeviceEventReportReqDTO.java
deleted file mode 100644
index 34e6283d90..0000000000
--- a/yudao-module-iot/yudao-module-iot-api/src/main/java/cn/iocoder/yudao/module/iot/api/device/dto/control/upstream/IotDeviceEventReportReqDTO.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package cn.iocoder.yudao.module.iot.api.device.dto.control.upstream;
-
-import jakarta.validation.constraints.NotEmpty;
-import lombok.Data;
-
-import java.util.Map;
-
-/**
- * IoT 设备【事件】上报 Request DTO
- *
- * @author 芋道源码
- */
-@Data
-public class IotDeviceEventReportReqDTO extends IotDeviceUpstreamAbstractReqDTO {
-
- /**
- * 事件标识
- */
- @NotEmpty(message = "事件标识不能为空")
- private String identifier;
- /**
- * 事件参数
- */
- private Map params;
-
-}
diff --git a/yudao-module-iot/yudao-module-iot-api/src/main/java/cn/iocoder/yudao/module/iot/api/device/dto/control/upstream/IotDevicePropertyReportReqDTO.java b/yudao-module-iot/yudao-module-iot-api/src/main/java/cn/iocoder/yudao/module/iot/api/device/dto/control/upstream/IotDevicePropertyReportReqDTO.java
deleted file mode 100644
index 4a276bd226..0000000000
--- a/yudao-module-iot/yudao-module-iot-api/src/main/java/cn/iocoder/yudao/module/iot/api/device/dto/control/upstream/IotDevicePropertyReportReqDTO.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package cn.iocoder.yudao.module.iot.api.device.dto.control.upstream;
-
-import jakarta.validation.constraints.NotEmpty;
-import lombok.Data;
-
-import java.util.Map;
-
-/**
- * IoT 设备【属性】上报 Request DTO
- *
- * @author 芋道源码
- */
-@Data
-public class IotDevicePropertyReportReqDTO extends IotDeviceUpstreamAbstractReqDTO {
-
- /**
- * 属性参数
- */
- @NotEmpty(message = "属性参数不能为空")
- private Map properties;
-
-}
\ No newline at end of file
diff --git a/yudao-module-iot/yudao-module-iot-api/src/main/java/cn/iocoder/yudao/module/iot/api/device/dto/control/upstream/IotDeviceUpstreamAbstractReqDTO.java b/yudao-module-iot/yudao-module-iot-api/src/main/java/cn/iocoder/yudao/module/iot/api/device/dto/control/upstream/IotDeviceUpstreamAbstractReqDTO.java
deleted file mode 100644
index a0c8ce92ac..0000000000
--- a/yudao-module-iot/yudao-module-iot-api/src/main/java/cn/iocoder/yudao/module/iot/api/device/dto/control/upstream/IotDeviceUpstreamAbstractReqDTO.java
+++ /dev/null
@@ -1,45 +0,0 @@
-package cn.iocoder.yudao.module.iot.api.device.dto.control.upstream;
-
-import cn.iocoder.yudao.framework.common.util.json.databind.TimestampLocalDateTimeSerializer;
-import com.fasterxml.jackson.databind.annotation.JsonSerialize;
-import jakarta.validation.constraints.NotEmpty;
-import lombok.Data;
-
-import java.time.LocalDateTime;
-
-/**
- * IoT 设备上行的抽象 Request DTO
- *
- * @author 芋道源码
- */
-@Data
-public abstract class IotDeviceUpstreamAbstractReqDTO {
-
- /**
- * 请求编号
- */
- private String requestId;
-
- /**
- * 插件实例的进程编号
- */
- private String processId;
-
- /**
- * 产品标识
- */
- @NotEmpty(message = "产品标识不能为空")
- private String productKey;
- /**
- * 设备名称
- */
- @NotEmpty(message = "设备名称不能为空")
- private String deviceName;
-
- /**
- * 上报时间
- */
- @JsonSerialize(using = TimestampLocalDateTimeSerializer.class) // 解决 iot plugins 序列化 LocalDateTime 是数组,导致无法解析的问题
- private LocalDateTime reportTime;
-
-}
diff --git a/yudao-module-iot/yudao-module-iot-biz/pom.xml b/yudao-module-iot/yudao-module-iot-biz/pom.xml
index aca7e303f0..1f83a7acb2 100644
--- a/yudao-module-iot/yudao-module-iot-biz/pom.xml
+++ b/yudao-module-iot/yudao-module-iot-biz/pom.xml
@@ -23,11 +23,6 @@
yudao-module-system
${revision}
-
- cn.iocoder.boot
- yudao-module-iot-api
- ${revision}
-
cn.iocoder.boot
yudao-module-iot-core
diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/dataobject/rule/IotAlertConfigDO.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/dataobject/alert/IotAlertConfigDO.java
similarity index 60%
rename from yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/dataobject/rule/IotAlertConfigDO.java
rename to yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/dataobject/alert/IotAlertConfigDO.java
index 14e7d741fe..b7e5fd781c 100644
--- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/dataobject/rule/IotAlertConfigDO.java
+++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/dataobject/alert/IotAlertConfigDO.java
@@ -1,14 +1,21 @@
-package cn.iocoder.yudao.module.iot.dal.dataobject.rule;
+package cn.iocoder.yudao.module.iot.dal.dataobject.alert;
+import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
-import cn.iocoder.yudao.module.iot.enums.rule.IotAlertConfigReceiveTypeEnum;
+import cn.iocoder.yudao.framework.mybatis.core.type.IntegerListTypeHandler;
+import cn.iocoder.yudao.framework.mybatis.core.type.LongListTypeHandler;
+import cn.iocoder.yudao.module.iot.dal.dataobject.rule.IotRuleSceneDO;
+import cn.iocoder.yudao.module.iot.enums.DictTypeConstants;
+import cn.iocoder.yudao.module.iot.enums.alert.IotAlertConfigReceiveTypeEnum;
import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
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 lombok.*;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
import java.util.List;
@@ -41,37 +48,37 @@ public class IotAlertConfigDO extends BaseDO {
/**
* 配置状态
*
- * TODO 数据字典
+ * 字典 {@link DictTypeConstants#ALERT_LEVEL}
*/
private Integer level;
/**
* 配置状态
*
- * 枚举 {@link cn.iocoder.yudao.framework.common.enums.CommonStatusEnum}
+ * 枚举 {@link CommonStatusEnum}
*/
private Integer status;
/**
- * 关联的规则场景编号数组
+ * 关联的场景联动规则编号数组
*
* 关联 {@link IotRuleSceneDO#getId()}
*/
- @TableField(typeHandler = JacksonTypeHandler.class)
- private List ruleSceneIds;
+ @TableField(typeHandler = LongListTypeHandler.class)
+ private List sceneRuleIds;
/**
* 接收的用户编号数组
*
* 关联 {@link AdminUserRespDTO#getId()}
*/
- @TableField(typeHandler = JacksonTypeHandler.class)
+ @TableField(typeHandler = LongListTypeHandler.class)
private List receiveUserIds;
/**
* 接收的类型数组
*
* 枚举 {@link IotAlertConfigReceiveTypeEnum}
*/
- @TableField(typeHandler = JacksonTypeHandler.class)
+ @TableField(typeHandler = IntegerListTypeHandler.class)
private List receiveTypes;
}
diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/dataobject/rule/IotAlertRecordDO.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/dataobject/alert/IotAlertRecordDO.java
similarity index 83%
rename from yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/dataobject/rule/IotAlertRecordDO.java
rename to yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/dataobject/alert/IotAlertRecordDO.java
index 43a1c6360f..7b5202d244 100644
--- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/dataobject/rule/IotAlertRecordDO.java
+++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/dataobject/alert/IotAlertRecordDO.java
@@ -1,4 +1,4 @@
-package cn.iocoder.yudao.module.iot.dal.dataobject.rule;
+package cn.iocoder.yudao.module.iot.dal.dataobject.alert;
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
import cn.iocoder.yudao.module.iot.core.mq.message.IotDeviceMessage;
@@ -45,17 +45,17 @@ public class IotAlertRecordDO extends BaseDO {
private String name;
/**
- * 产品标识
+ * 产品编号
*
- * 关联 {@link IotProductDO#getProductKey()} ()}
+ * 关联 {@link IotProductDO#getId()}
*/
- private String productKey;
+ private Long productId;
/**
- * 设备名称
+ * 设备编号
*
- * 冗余 {@link IotDeviceDO#getDeviceName()}
+ * 关联 {@link IotDeviceDO#getId()}
*/
- private String deviceName;
+ private String deviceId;
// TODO @芋艿:有没更好的方式
/**
@@ -64,7 +64,6 @@ public class IotAlertRecordDO extends BaseDO {
@TableField(typeHandler = JacksonTypeHandler.class)
private IotDeviceMessage deviceMessage;
- // TODO @芋艿:换成枚举,枚举对应 ApiErrorLogProcessStatusEnum
/**
* 处理状态
*
diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/dataobject/rule/IotSceneRuleDO.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/dataobject/rule/IotSceneRuleDO.java
index 78eb7fb11b..a65e0f3cf2 100644
--- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/dataobject/rule/IotSceneRuleDO.java
+++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/dataobject/rule/IotSceneRuleDO.java
@@ -3,6 +3,7 @@ package cn.iocoder.yudao.module.iot.dal.dataobject.rule;
import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
import cn.iocoder.yudao.framework.tenant.core.db.TenantBaseDO;
import cn.iocoder.yudao.module.iot.core.mq.message.IotDeviceMessage;
+import cn.iocoder.yudao.module.iot.dal.dataobject.alert.IotAlertConfigDO;
import cn.iocoder.yudao.module.iot.dal.dataobject.device.IotDeviceDO;
import cn.iocoder.yudao.module.iot.dal.dataobject.product.IotProductDO;
import cn.iocoder.yudao.module.iot.dal.dataobject.thingmodel.IotThingModelDO;
diff --git a/yudao-module-iot/yudao-module-iot-api/src/main/java/cn/iocoder/yudao/module/iot/enums/DictTypeConstants.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/enums/DictTypeConstants.java
similarity index 88%
rename from yudao-module-iot/yudao-module-iot-api/src/main/java/cn/iocoder/yudao/module/iot/enums/DictTypeConstants.java
rename to yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/enums/DictTypeConstants.java
index 37c8044211..b7750bd0b0 100644
--- a/yudao-module-iot/yudao-module-iot-api/src/main/java/cn/iocoder/yudao/module/iot/enums/DictTypeConstants.java
+++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/enums/DictTypeConstants.java
@@ -14,5 +14,6 @@ public class DictTypeConstants {
public static final String DEVICE_STATE = "iot_device_state";
+ public static final String ALERT_LEVEL = "iot_alert_level";
}
diff --git a/yudao-module-iot/yudao-module-iot-api/src/main/java/cn/iocoder/yudao/module/iot/enums/ErrorCodeConstants.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/enums/ErrorCodeConstants.java
similarity index 100%
rename from yudao-module-iot/yudao-module-iot-api/src/main/java/cn/iocoder/yudao/module/iot/enums/ErrorCodeConstants.java
rename to yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/enums/ErrorCodeConstants.java
diff --git a/yudao-module-iot/yudao-module-iot-api/src/main/java/cn/iocoder/yudao/module/iot/enums/rule/IotAlertConfigReceiveTypeEnum.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/enums/alert/IotAlertConfigReceiveTypeEnum.java
similarity index 93%
rename from yudao-module-iot/yudao-module-iot-api/src/main/java/cn/iocoder/yudao/module/iot/enums/rule/IotAlertConfigReceiveTypeEnum.java
rename to yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/enums/alert/IotAlertConfigReceiveTypeEnum.java
index 3fdd53234b..0f3315ba21 100644
--- a/yudao-module-iot/yudao-module-iot-api/src/main/java/cn/iocoder/yudao/module/iot/enums/rule/IotAlertConfigReceiveTypeEnum.java
+++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/enums/alert/IotAlertConfigReceiveTypeEnum.java
@@ -1,4 +1,4 @@
-package cn.iocoder.yudao.module.iot.enums.rule;
+package cn.iocoder.yudao.module.iot.enums.alert;
import cn.iocoder.yudao.framework.common.core.ArrayValuable;
import lombok.Getter;
diff --git a/yudao-module-iot/yudao-module-iot-api/src/main/java/cn/iocoder/yudao/module/iot/enums/device/IotDeviceMessageIdentifierEnum.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/enums/device/IotDeviceMessageIdentifierEnum.java
similarity index 100%
rename from yudao-module-iot/yudao-module-iot-api/src/main/java/cn/iocoder/yudao/module/iot/enums/device/IotDeviceMessageIdentifierEnum.java
rename to yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/enums/device/IotDeviceMessageIdentifierEnum.java
diff --git a/yudao-module-iot/yudao-module-iot-api/src/main/java/cn/iocoder/yudao/module/iot/enums/device/IotDeviceMessageTypeEnum.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/enums/device/IotDeviceMessageTypeEnum.java
similarity index 100%
rename from yudao-module-iot/yudao-module-iot-api/src/main/java/cn/iocoder/yudao/module/iot/enums/device/IotDeviceMessageTypeEnum.java
rename to yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/enums/device/IotDeviceMessageTypeEnum.java
diff --git a/yudao-module-iot/yudao-module-iot-api/src/main/java/cn/iocoder/yudao/module/iot/enums/ota/IotOtaUpgradeRecordStatusEnum.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/enums/ota/IotOtaUpgradeRecordStatusEnum.java
similarity index 100%
rename from yudao-module-iot/yudao-module-iot-api/src/main/java/cn/iocoder/yudao/module/iot/enums/ota/IotOtaUpgradeRecordStatusEnum.java
rename to yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/enums/ota/IotOtaUpgradeRecordStatusEnum.java
diff --git a/yudao-module-iot/yudao-module-iot-api/src/main/java/cn/iocoder/yudao/module/iot/enums/ota/IotOtaUpgradeTaskScopeEnum.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/enums/ota/IotOtaUpgradeTaskScopeEnum.java
similarity index 100%
rename from yudao-module-iot/yudao-module-iot-api/src/main/java/cn/iocoder/yudao/module/iot/enums/ota/IotOtaUpgradeTaskScopeEnum.java
rename to yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/enums/ota/IotOtaUpgradeTaskScopeEnum.java
diff --git a/yudao-module-iot/yudao-module-iot-api/src/main/java/cn/iocoder/yudao/module/iot/enums/ota/IotOtaUpgradeTaskStatusEnum.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/enums/ota/IotOtaUpgradeTaskStatusEnum.java
similarity index 100%
rename from yudao-module-iot/yudao-module-iot-api/src/main/java/cn/iocoder/yudao/module/iot/enums/ota/IotOtaUpgradeTaskStatusEnum.java
rename to yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/enums/ota/IotOtaUpgradeTaskStatusEnum.java
diff --git a/yudao-module-iot/yudao-module-iot-api/src/main/java/cn/iocoder/yudao/module/iot/enums/product/IotNetTypeEnum.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/enums/product/IotNetTypeEnum.java
similarity index 100%
rename from yudao-module-iot/yudao-module-iot-api/src/main/java/cn/iocoder/yudao/module/iot/enums/product/IotNetTypeEnum.java
rename to yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/enums/product/IotNetTypeEnum.java
diff --git a/yudao-module-iot/yudao-module-iot-api/src/main/java/cn/iocoder/yudao/module/iot/enums/product/IotProductDeviceTypeEnum.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/enums/product/IotProductDeviceTypeEnum.java
similarity index 100%
rename from yudao-module-iot/yudao-module-iot-api/src/main/java/cn/iocoder/yudao/module/iot/enums/product/IotProductDeviceTypeEnum.java
rename to yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/enums/product/IotProductDeviceTypeEnum.java
diff --git a/yudao-module-iot/yudao-module-iot-api/src/main/java/cn/iocoder/yudao/module/iot/enums/product/IotProductStatusEnum.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/enums/product/IotProductStatusEnum.java
similarity index 100%
rename from yudao-module-iot/yudao-module-iot-api/src/main/java/cn/iocoder/yudao/module/iot/enums/product/IotProductStatusEnum.java
rename to yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/enums/product/IotProductStatusEnum.java
diff --git a/yudao-module-iot/yudao-module-iot-api/src/main/java/cn/iocoder/yudao/module/iot/enums/rule/IotDataSinkTypeEnum.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/enums/rule/IotDataSinkTypeEnum.java
similarity index 63%
rename from yudao-module-iot/yudao-module-iot-api/src/main/java/cn/iocoder/yudao/module/iot/enums/rule/IotDataSinkTypeEnum.java
rename to yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/enums/rule/IotDataSinkTypeEnum.java
index ed341c618b..33b3558775 100644
--- a/yudao-module-iot/yudao-module-iot-api/src/main/java/cn/iocoder/yudao/module/iot/enums/rule/IotDataSinkTypeEnum.java
+++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/enums/rule/IotDataSinkTypeEnum.java
@@ -16,14 +16,13 @@ import java.util.Arrays;
public enum IotDataSinkTypeEnum implements ArrayValuable {
HTTP(1, "HTTP"),
- TCP(2, "TCP"),
- WEBSOCKET(3, "WebSocket"),
+ TCP(2, "TCP"), // TODO @puhui999:待实现;
+ WEBSOCKET(3, "WebSocket"), // TODO @puhui999:待实现;
- MQTT(10, "MQTT"),
+ MQTT(10, "MQTT"), // TODO 待实现;
- DATABASE(20, "Database"),
- // TODO @芋艿:改成 Redis;通过 execute 通用化;
- REDIS_STREAM(21, "Redis Stream"),
+ DATABASE(20, "Database"), // TODO @puhui999:待实现;可以简单点,对应的表名是什么,字段先固定了。
+ REDIS_STREAM(21, "Redis Stream"), // TODO @puhui999:改成 Redis;然后枚举不同的数据结构?这样,枚举就可以是 Redis 了
ROCKETMQ(30, "RocketMQ"),
RABBITMQ(31, "RabbitMQ"),
diff --git a/yudao-module-iot/yudao-module-iot-api/src/main/java/cn/iocoder/yudao/module/iot/enums/rule/IotRuleSceneActionTypeEnum.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/enums/rule/IotRuleSceneActionTypeEnum.java
similarity index 100%
rename from yudao-module-iot/yudao-module-iot-api/src/main/java/cn/iocoder/yudao/module/iot/enums/rule/IotRuleSceneActionTypeEnum.java
rename to yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/enums/rule/IotRuleSceneActionTypeEnum.java
diff --git a/yudao-module-iot/yudao-module-iot-api/src/main/java/cn/iocoder/yudao/module/iot/enums/rule/IotRuleSceneConditionOperatorEnum.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/enums/rule/IotRuleSceneConditionOperatorEnum.java
similarity index 100%
rename from yudao-module-iot/yudao-module-iot-api/src/main/java/cn/iocoder/yudao/module/iot/enums/rule/IotRuleSceneConditionOperatorEnum.java
rename to yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/enums/rule/IotRuleSceneConditionOperatorEnum.java
diff --git a/yudao-module-iot/yudao-module-iot-api/src/main/java/cn/iocoder/yudao/module/iot/enums/rule/IotRuleSceneConditionTypeEnum.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/enums/rule/IotRuleSceneConditionTypeEnum.java
similarity index 100%
rename from yudao-module-iot/yudao-module-iot-api/src/main/java/cn/iocoder/yudao/module/iot/enums/rule/IotRuleSceneConditionTypeEnum.java
rename to yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/enums/rule/IotRuleSceneConditionTypeEnum.java
diff --git a/yudao-module-iot/yudao-module-iot-api/src/main/java/cn/iocoder/yudao/module/iot/enums/rule/IotRuleSceneTriggerTypeEnum.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/enums/rule/IotRuleSceneTriggerTypeEnum.java
similarity index 100%
rename from yudao-module-iot/yudao-module-iot-api/src/main/java/cn/iocoder/yudao/module/iot/enums/rule/IotRuleSceneTriggerTypeEnum.java
rename to yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/enums/rule/IotRuleSceneTriggerTypeEnum.java
diff --git a/yudao-module-iot/yudao-module-iot-api/src/main/java/cn/iocoder/yudao/module/iot/enums/thingmodel/IotDataSpecsDataTypeEnum.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/enums/thingmodel/IotDataSpecsDataTypeEnum.java
similarity index 100%
rename from yudao-module-iot/yudao-module-iot-api/src/main/java/cn/iocoder/yudao/module/iot/enums/thingmodel/IotDataSpecsDataTypeEnum.java
rename to yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/enums/thingmodel/IotDataSpecsDataTypeEnum.java
diff --git a/yudao-module-iot/yudao-module-iot-api/src/main/java/cn/iocoder/yudao/module/iot/enums/thingmodel/IotThingModelAccessModeEnum.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/enums/thingmodel/IotThingModelAccessModeEnum.java
similarity index 100%
rename from yudao-module-iot/yudao-module-iot-api/src/main/java/cn/iocoder/yudao/module/iot/enums/thingmodel/IotThingModelAccessModeEnum.java
rename to yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/enums/thingmodel/IotThingModelAccessModeEnum.java
diff --git a/yudao-module-iot/yudao-module-iot-api/src/main/java/cn/iocoder/yudao/module/iot/enums/thingmodel/IotThingModelParamDirectionEnum.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/enums/thingmodel/IotThingModelParamDirectionEnum.java
similarity index 100%
rename from yudao-module-iot/yudao-module-iot-api/src/main/java/cn/iocoder/yudao/module/iot/enums/thingmodel/IotThingModelParamDirectionEnum.java
rename to yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/enums/thingmodel/IotThingModelParamDirectionEnum.java
diff --git a/yudao-module-iot/yudao-module-iot-api/src/main/java/cn/iocoder/yudao/module/iot/enums/thingmodel/IotThingModelServiceCallTypeEnum.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/enums/thingmodel/IotThingModelServiceCallTypeEnum.java
similarity index 100%
rename from yudao-module-iot/yudao-module-iot-api/src/main/java/cn/iocoder/yudao/module/iot/enums/thingmodel/IotThingModelServiceCallTypeEnum.java
rename to yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/enums/thingmodel/IotThingModelServiceCallTypeEnum.java
diff --git a/yudao-module-iot/yudao-module-iot-api/src/main/java/cn/iocoder/yudao/module/iot/enums/thingmodel/IotThingModelServiceEventTypeEnum.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/enums/thingmodel/IotThingModelServiceEventTypeEnum.java
similarity index 100%
rename from yudao-module-iot/yudao-module-iot-api/src/main/java/cn/iocoder/yudao/module/iot/enums/thingmodel/IotThingModelServiceEventTypeEnum.java
rename to yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/enums/thingmodel/IotThingModelServiceEventTypeEnum.java
diff --git a/yudao-module-iot/yudao-module-iot-api/src/main/java/cn/iocoder/yudao/module/iot/enums/thingmodel/IotThingModelTypeEnum.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/enums/thingmodel/IotThingModelTypeEnum.java
similarity index 100%
rename from yudao-module-iot/yudao-module-iot-api/src/main/java/cn/iocoder/yudao/module/iot/enums/thingmodel/IotThingModelTypeEnum.java
rename to yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/enums/thingmodel/IotThingModelTypeEnum.java
diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/mq/consumer/device/IotDeviceMessageSubscriber.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/mq/consumer/device/IotDeviceMessageSubscriber.java
index 3eaa019fd2..c6e0ba4221 100644
--- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/mq/consumer/device/IotDeviceMessageSubscriber.java
+++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/mq/consumer/device/IotDeviceMessageSubscriber.java
@@ -1,7 +1,6 @@
package cn.iocoder.yudao.module.iot.mq.consumer.device;
import cn.hutool.core.util.ObjectUtil;
-import cn.iocoder.yudao.framework.common.util.object.ObjectUtils;
import cn.iocoder.yudao.framework.tenant.core.util.TenantUtils;
import cn.iocoder.yudao.module.iot.core.enums.IotDeviceMessageMethodEnum;
import cn.iocoder.yudao.module.iot.core.enums.IotDeviceStateEnum;
@@ -19,6 +18,7 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import java.time.LocalDateTime;
+import java.util.Objects;
/**
* 针对 {@link IotDeviceMessage} 的业务处理器:调用 method 对应的逻辑。例如说:
@@ -83,15 +83,14 @@ public class IotDeviceMessageSubscriber implements IotMessageSubscriber ObjectUtils.equalsAny(config.getDeviceId(), deviceId, IotDeviceDO.DEVICE_ID_ALL)
- && (StrUtil.isNotEmpty(config.getMethod()) || ObjUtil.equal(config.getMethod(), method))
+ && Objects.equals(config.getMethod(), method)
&& (StrUtil.isEmpty(config.getIdentifier()) || ObjUtil.equal(config.getIdentifier(), identifier)));
if (found != null) {
matchedRules.add(new IotDataRuleDO().setId(rule.getId()).setSinkIds(rule.getSinkIds()));
diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/rule/data/action/IotHttpDataSinkAction.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/rule/data/action/IotHttpDataSinkAction.java
index c23e346dbf..3f4b8eb028 100644
--- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/rule/data/action/IotHttpDataSinkAction.java
+++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/rule/data/action/IotHttpDataSinkAction.java
@@ -18,6 +18,8 @@ import org.springframework.web.util.UriComponentsBuilder;
import java.util.HashMap;
import java.util.Map;
+import static cn.iocoder.yudao.framework.web.core.util.WebFrameworkUtils.HEADER_TENANT_ID;
+
/**
* HTTP 的 {@link IotDataRuleAction} 实现类
*
@@ -36,6 +38,7 @@ public class IotHttpDataSinkAction implements IotDataRuleAction {
}
@Override
+ @SuppressWarnings("unchecked")
public void execute(IotDeviceMessage message, IotDataSinkDO dataSink) {
IotDataSinkHttpConfig config = (IotDataSinkHttpConfig) dataSink.getConfig();
Assert.notNull(config, "配置({})不能为空", dataSink.getId());
@@ -49,8 +52,7 @@ public class IotHttpDataSinkAction implements IotDataRuleAction {
if (CollUtil.isNotEmpty(config.getHeaders())) {
config.getHeaders().putAll(config.getHeaders());
}
- // TODO @puhui999:@yunai:可能需要通过设备查询到租户,然后 set
-// headers.add(HEADER_TENANT_ID, message.getTenantId().toString());
+ headers.add(HEADER_TENANT_ID, message.getTenantId().toString());
// 1.2 构建 URL
UriComponentsBuilder uriBuilder = UriComponentsBuilder.fromUriString(config.getUrl());
if (CollUtil.isNotEmpty(config.getQuery())) {
@@ -72,18 +74,17 @@ public class IotHttpDataSinkAction implements IotDataRuleAction {
requestEntity = new HttpEntity<>(JsonUtils.toJsonString(requestBody), headers);
}
- // 2.1 发送请求
+ // 2. 发送请求
responseEntity = restTemplate.exchange(url, method, requestEntity, String.class);
- // 2.2 记录日志
if (responseEntity.getStatusCode().is2xxSuccessful()) {
- log.info("[executeHttp][message({}) config({}) url({}) method({}) requestEntity({}) 请求成功({})]",
+ log.info("[execute][message({}) config({}) url({}) method({}) requestEntity({}) 请求成功({})]",
message, config, url, method, requestEntity, responseEntity);
} else {
- log.error("[executeHttp][message({}) config({}) url({}) method({}) requestEntity({}) 请求失败({})]",
+ log.error("[execute][message({}) config({}) url({}) method({}) requestEntity({}) 请求失败({})]",
message, config, url, method, requestEntity, responseEntity);
}
} catch (Exception e) {
- log.error("[executeHttp][message({}) config({}) url({}) method({}) requestEntity({}) 请求异常({})]",
+ log.error("[execute][message({}) config({}) url({}) method({}) requestEntity({}) 请求异常({})]",
message, config, url, method, requestEntity, responseEntity, e);
}
}
diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/rule/data/action/IotKafkaDataRuleAction.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/rule/data/action/IotKafkaDataRuleAction.java
index 5bbbe07b4b..6d85798bff 100644
--- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/rule/data/action/IotKafkaDataRuleAction.java
+++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/rule/data/action/IotKafkaDataRuleAction.java
@@ -1,5 +1,6 @@
package cn.iocoder.yudao.module.iot.service.rule.data.action;
+import cn.iocoder.yudao.framework.common.util.json.JsonUtils;
import cn.iocoder.yudao.module.iot.dal.dataobject.rule.config.IotDataSinkKafkaConfig;
import cn.iocoder.yudao.module.iot.core.mq.message.IotDeviceMessage;
import cn.iocoder.yudao.module.iot.enums.rule.IotDataSinkTypeEnum;
@@ -9,6 +10,7 @@ import org.apache.kafka.common.serialization.StringSerializer;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.kafka.core.DefaultKafkaProducerFactory;
import org.springframework.kafka.core.KafkaTemplate;
+import org.springframework.kafka.support.SendResult;
import org.springframework.stereotype.Component;
import java.time.Duration;
@@ -36,13 +38,27 @@ public class IotKafkaDataRuleAction extends
@Override
public void execute(IotDeviceMessage message, IotDataSinkKafkaConfig config) throws Exception {
- // 1. 获取或创建 KafkaTemplate
- KafkaTemplate kafkaTemplate = getProducer(config);
+ try {
+ // 1. 获取或创建 KafkaTemplate
+ KafkaTemplate kafkaTemplate = getProducer(config);
- // 2. 发送消息并等待结果
- kafkaTemplate.send(config.getTopic(), message.toString())
- .get(SEND_TIMEOUT.getSeconds(), TimeUnit.SECONDS); // 添加超时等待
- log.info("[execute0][message({}) 发送成功]", message);
+ // 2. 发送消息并等待结果
+ SendResult sendResult = kafkaTemplate.send(config.getTopic(), JsonUtils.toJsonString(message))
+ .get(SEND_TIMEOUT.getSeconds(), TimeUnit.SECONDS);
+ // 3. 处理发送结果
+ if (sendResult != null && sendResult.getRecordMetadata() != null) {
+ log.info("[execute][message({}) config({}) 发送成功,结果: partition={}, offset={}, timestamp={}]",
+ message, config,
+ sendResult.getRecordMetadata().partition(),
+ sendResult.getRecordMetadata().offset(),
+ sendResult.getRecordMetadata().timestamp());
+ } else {
+ log.warn("[execute][message({}) config({}) 发送结果为空]", message, config);
+ }
+ } catch (Exception e) {
+ log.error("[execute][message({}) config({}) 发送失败]", message, config, e);
+ throw e;
+ }
}
@Override
diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/rule/data/action/IotRabbitMQDataRuleAction.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/rule/data/action/IotRabbitMQDataRuleAction.java
index 89d3500c6a..075871a376 100644
--- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/rule/data/action/IotRabbitMQDataRuleAction.java
+++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/rule/data/action/IotRabbitMQDataRuleAction.java
@@ -1,7 +1,8 @@
package cn.iocoder.yudao.module.iot.service.rule.data.action;
-import cn.iocoder.yudao.module.iot.dal.dataobject.rule.config.IotDataSinkRabbitMQConfig;
+import cn.iocoder.yudao.framework.common.util.json.JsonUtils;
import cn.iocoder.yudao.module.iot.core.mq.message.IotDeviceMessage;
+import cn.iocoder.yudao.module.iot.dal.dataobject.rule.config.IotDataSinkRabbitMQConfig;
import cn.iocoder.yudao.module.iot.enums.rule.IotDataSinkTypeEnum;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
@@ -10,8 +11,6 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.stereotype.Component;
-import java.nio.charset.StandardCharsets;
-
/**
* RabbitMQ 的 {@link IotDataRuleAction} 实现类
*
@@ -20,8 +19,8 @@ import java.nio.charset.StandardCharsets;
@ConditionalOnClass(name = "com.rabbitmq.client.Channel")
@Component
@Slf4j
-public class IotRabbitMQDataRuleAction extends
- IotDataRuleCacheableAction {
+public class IotRabbitMQDataRuleAction
+ extends IotDataRuleCacheableAction {
@Override
public Integer getType() {
@@ -30,17 +29,22 @@ public class IotRabbitMQDataRuleAction extends
@Override
public void execute(IotDeviceMessage message, IotDataSinkRabbitMQConfig config) throws Exception {
- // 1.1 获取或创建 Channel
- Channel channel = getProducer(config);
- // 1.2 声明交换机、队列和绑定关系
- channel.exchangeDeclare(config.getExchange(), "direct", true);
- channel.queueDeclare(config.getQueue(), true, false, false, null);
- channel.queueBind(config.getQueue(), config.getExchange(), config.getRoutingKey());
+ try {
+ // 1.1 获取或创建 Channel
+ Channel channel = getProducer(config);
+ // 1.2 声明交换机、队列和绑定关系
+ channel.exchangeDeclare(config.getExchange(), "direct", true);
+ channel.queueDeclare(config.getQueue(), true, false, false, null);
+ channel.queueBind(config.getQueue(), config.getExchange(), config.getRoutingKey());
- // 2. 发送消息
- channel.basicPublish(config.getExchange(), config.getRoutingKey(), null,
- message.toString().getBytes(StandardCharsets.UTF_8));
- log.info("[executeRabbitMQ][message({}) config({}) 发送成功]", message, config);
+ // 2. 发送消息
+ channel.basicPublish(config.getExchange(), config.getRoutingKey(), null,
+ JsonUtils.toJsonByte(message));
+ log.info("[execute][message({}) config({}) 发送成功]", message, config);
+ } catch (Exception e) {
+ log.error("[execute][message({}) config({}) 发送失败]", message, config, e);
+ throw e;
+ }
}
@Override
diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/rule/data/action/IotRedisStreamRuleAction.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/rule/data/action/IotRedisStreamRuleAction.java
index 9870c7d464..d3bb81c8e9 100644
--- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/rule/data/action/IotRedisStreamRuleAction.java
+++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/rule/data/action/IotRedisStreamRuleAction.java
@@ -1,6 +1,7 @@
package cn.iocoder.yudao.module.iot.service.rule.data.action;
import cn.hutool.core.util.StrUtil;
+import cn.iocoder.yudao.framework.common.util.json.JsonUtils;
import cn.iocoder.yudao.module.iot.dal.dataobject.rule.config.IotDataSinkRedisStreamConfig;
import cn.iocoder.yudao.module.iot.core.mq.message.IotDeviceMessage;
import cn.iocoder.yudao.module.iot.enums.rule.IotDataSinkTypeEnum;
@@ -38,10 +39,10 @@ public class IotRedisStreamRuleAction extends
RedisTemplate redisTemplate = getProducer(config);
// 2. 创建并发送 Stream 记录
- ObjectRecord record = StreamRecords.newRecord()
- .ofObject(message).withStreamKey(config.getTopic());
+ ObjectRecord record = StreamRecords.newRecord()
+ .ofObject(JsonUtils.toJsonString(message)).withStreamKey(config.getTopic());
String recordId = String.valueOf(redisTemplate.opsForStream().add(record));
- log.info("[executeRedisStream][消息发送成功] messageId: {}, config: {}", recordId, config);
+ log.info("[execute][消息发送成功] messageId: {}, config: {}", recordId, config);
}
@Override
@@ -56,11 +57,11 @@ public class IotRedisStreamRuleAction extends
serverConfig.setPassword(config.getPassword());
}
- // 创建 RedisTemplate 并配置
+ // 2.1 创建 RedisTemplate 并配置
RedissonClient redisson = Redisson.create(redissonConfig);
RedisTemplate template = new RedisTemplate<>();
template.setConnectionFactory(new RedissonConnectionFactory(redisson));
- // 设置序列化器
+ // 2.2 设置序列化器
template.setKeySerializer(RedisSerializer.string());
template.setHashKeySerializer(RedisSerializer.string());
template.setValueSerializer(RedisSerializer.json());
diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/rule/data/action/IotRocketMQDataRuleAction.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/rule/data/action/IotRocketMQDataRuleAction.java
index 1a212ec5ea..d73205c6df 100644
--- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/rule/data/action/IotRocketMQDataRuleAction.java
+++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/rule/data/action/IotRocketMQDataRuleAction.java
@@ -1,14 +1,14 @@
package cn.iocoder.yudao.module.iot.service.rule.data.action;
-import cn.iocoder.yudao.module.iot.dal.dataobject.rule.config.IotDataSinkRocketMQConfig;
+import cn.iocoder.yudao.framework.common.util.json.JsonUtils;
import cn.iocoder.yudao.module.iot.core.mq.message.IotDeviceMessage;
+import cn.iocoder.yudao.module.iot.dal.dataobject.rule.config.IotDataSinkRocketMQConfig;
import cn.iocoder.yudao.module.iot.enums.rule.IotDataSinkTypeEnum;
import lombok.extern.slf4j.Slf4j;
import org.apache.rocketmq.client.producer.DefaultMQProducer;
import org.apache.rocketmq.client.producer.SendResult;
import org.apache.rocketmq.client.producer.SendStatus;
import org.apache.rocketmq.common.message.Message;
-import org.apache.rocketmq.remoting.common.RemotingHelper;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.stereotype.Component;
@@ -33,19 +33,15 @@ public class IotRocketMQDataRuleAction extends
// 1. 获取或创建 Producer
DefaultMQProducer producer = getProducer(config);
- // 2.1 创建消息对象,指定Topic、Tag和消息体
- Message msg = new Message(
- config.getTopic(),
- config.getTags(),
- message.toString().getBytes(RemotingHelper.DEFAULT_CHARSET)
- );
+ // 2.1 创建消息对象,指定 Topic、Tag 和消息体
+ Message msg = new Message(config.getTopic(), config.getTags(), JsonUtils.toJsonByte(message));
// 2.2 发送同步消息并处理结果
SendResult sendResult = producer.send(msg);
// 2.3 处理发送结果
if (SendStatus.SEND_OK.equals(sendResult.getSendStatus())) {
- log.info("[executeRocketMQ][message({}) config({}) 发送成功,结果({})]", message, config, sendResult);
+ log.info("[execute][message({}) config({}) 发送成功,结果({})]", message, config, sendResult);
} else {
- log.error("[executeRocketMQ][message({}) config({}) 发送失败,结果({})]", message, config, sendResult);
+ log.error("[execute][message({}) config({}) 发送失败,结果({})]", message, config, sendResult);
}
}
diff --git a/yudao-module-iot/yudao-module-iot-biz/src/test/java/cn/iocoder/yudao/module/iot/service/rule/action/databridge/IotDataBridgeExecuteTest.java b/yudao-module-iot/yudao-module-iot-biz/src/test/java/cn/iocoder/yudao/module/iot/service/rule/action/databridge/IotDataBridgeExecuteTest.java
index a1f7700394..5394008022 100644
--- a/yudao-module-iot/yudao-module-iot-biz/src/test/java/cn/iocoder/yudao/module/iot/service/rule/action/databridge/IotDataBridgeExecuteTest.java
+++ b/yudao-module-iot/yudao-module-iot-biz/src/test/java/cn/iocoder/yudao/module/iot/service/rule/action/databridge/IotDataBridgeExecuteTest.java
@@ -39,6 +39,7 @@ public class IotDataBridgeExecuteTest extends BaseMockitoUnitTest {
@BeforeEach
public void setUp() {
+ // TODO @芋艿:@puhui999:需要调整下;
// 创建共享的测试消息
//message = IotDeviceMessage.builder().messageId("TEST-001").reportTime(LocalDateTime.now())
// .productKey("testProduct").deviceName("testDevice")
diff --git a/yudao-module-iot/yudao-module-iot-core/src/main/java/cn/iocoder/yudao/module/iot/core/enums/IotDeviceMessageMethodEnum.java b/yudao-module-iot/yudao-module-iot-core/src/main/java/cn/iocoder/yudao/module/iot/core/enums/IotDeviceMessageMethodEnum.java
index 92fe71f033..cb343e33ec 100644
--- a/yudao-module-iot/yudao-module-iot-core/src/main/java/cn/iocoder/yudao/module/iot/core/enums/IotDeviceMessageMethodEnum.java
+++ b/yudao-module-iot/yudao-module-iot-core/src/main/java/cn/iocoder/yudao/module/iot/core/enums/IotDeviceMessageMethodEnum.java
@@ -19,10 +19,6 @@ public enum IotDeviceMessageMethodEnum implements ArrayValuable {
// ========== 设备状态 ==========
- // TODO @芋艿:要合并下;thing.state.update
- STATE_ONLINE("thing.state.online", "设备上线", true),
- STATE_OFFLINE("thing.state.offline", "设备下线", true),
-
STATE_UPDATE("thing.state.update", "设备状态更新", true),
// ========== 设备属性 ==========
@@ -52,7 +48,7 @@ public enum IotDeviceMessageMethodEnum implements ArrayValuable {
/**
* 不进行 reply 回复的方法集合
*/
- public static final Set REPLY_DISABLED = Set.of(STATE_ONLINE.getMethod(), STATE_OFFLINE.getMethod());
+ public static final Set REPLY_DISABLED = Set.of(STATE_UPDATE.getMethod());
private final String method;
diff --git a/yudao-module-iot/yudao-module-iot-core/src/main/java/cn/iocoder/yudao/module/iot/core/mq/message/IotDeviceMessage.java b/yudao-module-iot/yudao-module-iot-core/src/main/java/cn/iocoder/yudao/module/iot/core/mq/message/IotDeviceMessage.java
index 046e75f61f..01af310081 100644
--- a/yudao-module-iot/yudao-module-iot-core/src/main/java/cn/iocoder/yudao/module/iot/core/mq/message/IotDeviceMessage.java
+++ b/yudao-module-iot/yudao-module-iot-core/src/main/java/cn/iocoder/yudao/module/iot/core/mq/message/IotDeviceMessage.java
@@ -1,7 +1,9 @@
package cn.iocoder.yudao.module.iot.core.mq.message;
+import cn.hutool.core.map.MapUtil;
import cn.iocoder.yudao.framework.common.exception.enums.GlobalErrorCodeConstants;
import cn.iocoder.yudao.module.iot.core.enums.IotDeviceMessageMethodEnum;
+import cn.iocoder.yudao.module.iot.core.enums.IotDeviceStateEnum;
import cn.iocoder.yudao.module.iot.core.util.IotDeviceMessageUtils;
import lombok.AllArgsConstructor;
import lombok.Builder;
@@ -128,12 +130,14 @@ public class IotDeviceMessage {
// ========== 核心方法:在 of 基础方法之上,添加对应 method ==========
- public static IotDeviceMessage buildStateOnline() {
- return requestOf(IotDeviceMessageMethodEnum.STATE_ONLINE.getMethod());
+ public static IotDeviceMessage buildStateUpdateOnline() {
+ return requestOf(IotDeviceMessageMethodEnum.STATE_UPDATE.getMethod(),
+ MapUtil.of("state", IotDeviceStateEnum.ONLINE.getState()));
}
public static IotDeviceMessage buildStateOffline() {
- return requestOf(IotDeviceMessageMethodEnum.STATE_OFFLINE.getMethod());
+ return requestOf(IotDeviceMessageMethodEnum.STATE_UPDATE.getMethod(),
+ MapUtil.of("state", IotDeviceStateEnum.OFFLINE.getState()));
}
}
diff --git a/yudao-module-iot/yudao-module-iot-core/src/main/java/cn/iocoder/yudao/module/iot/core/util/IotDeviceMessageUtils.java b/yudao-module-iot/yudao-module-iot-core/src/main/java/cn/iocoder/yudao/module/iot/core/util/IotDeviceMessageUtils.java
index a82d4139c8..5b7778ea0c 100644
--- a/yudao-module-iot/yudao-module-iot-core/src/main/java/cn/iocoder/yudao/module/iot/core/util/IotDeviceMessageUtils.java
+++ b/yudao-module-iot/yudao-module-iot-core/src/main/java/cn/iocoder/yudao/module/iot/core/util/IotDeviceMessageUtils.java
@@ -55,11 +55,16 @@ public class IotDeviceMessageUtils {
*/
@SuppressWarnings("unchecked")
public static String getIdentifier(IotDeviceMessage message) {
+ if (message.getParams() == null) {
+ return null;
+ }
if (StrUtil.equalsAny(message.getMethod(), IotDeviceMessageMethodEnum.EVENT_POST.getMethod(),
- message.getMethod(), IotDeviceMessageMethodEnum.SERVICE_INVOKE.getMethod())
- && message.getParams() != null) {
+ IotDeviceMessageMethodEnum.SERVICE_INVOKE.getMethod())) {
Map params = (Map) message.getParams();
return MapUtil.getStr(params, "identifier");
+ } else if (StrUtil.equalsAny(message.getMethod(), IotDeviceMessageMethodEnum.STATE_UPDATE.getMethod())) {
+ Map params = (Map) message.getParams();
+ return MapUtil.getStr(params, "state");
}
return null;
}
diff --git a/yudao-module-iot/yudao-module-iot-gateway/src/main/java/cn/iocoder/yudao/module/iot/gateway/protocol/emqx/router/IotEmqxAuthEventHandler.java b/yudao-module-iot/yudao-module-iot-gateway/src/main/java/cn/iocoder/yudao/module/iot/gateway/protocol/emqx/router/IotEmqxAuthEventHandler.java
index 6bf33e2b76..d6957bd52f 100644
--- a/yudao-module-iot/yudao-module-iot-gateway/src/main/java/cn/iocoder/yudao/module/iot/gateway/protocol/emqx/router/IotEmqxAuthEventHandler.java
+++ b/yudao-module-iot/yudao-module-iot-gateway/src/main/java/cn/iocoder/yudao/module/iot/gateway/protocol/emqx/router/IotEmqxAuthEventHandler.java
@@ -209,7 +209,7 @@ public class IotEmqxAuthEventHandler {
try {
// 2. 构建设备状态消息
- IotDeviceMessage message = online ? IotDeviceMessage.buildStateOnline()
+ IotDeviceMessage message = online ? IotDeviceMessage.buildStateUpdateOnline()
: IotDeviceMessage.buildStateOffline();
// 3. 发送设备状态消息
diff --git a/yudao-module-iot/yudao-module-iot-gateway/src/main/java/cn/iocoder/yudao/module/iot/gateway/protocol/http/router/IotHttpAuthHandler.java b/yudao-module-iot/yudao-module-iot-gateway/src/main/java/cn/iocoder/yudao/module/iot/gateway/protocol/http/router/IotHttpAuthHandler.java
index 7b2e923349..e6a52cdf0f 100644
--- a/yudao-module-iot/yudao-module-iot-gateway/src/main/java/cn/iocoder/yudao/module/iot/gateway/protocol/http/router/IotHttpAuthHandler.java
+++ b/yudao-module-iot/yudao-module-iot-gateway/src/main/java/cn/iocoder/yudao/module/iot/gateway/protocol/http/router/IotHttpAuthHandler.java
@@ -78,7 +78,7 @@ public class IotHttpAuthHandler extends IotHttpAbstractHandler {
Assert.notBlank(token, "生成 token 不能为空位");
// 3. 执行上线
- IotDeviceMessage message = IotDeviceMessage.buildStateOnline();
+ IotDeviceMessage message = IotDeviceMessage.buildStateUpdateOnline();
deviceMessageService.sendDeviceMessage(message,
deviceInfo.getProductKey(), deviceInfo.getDeviceName(), protocol.getServerId());