Browse Source

【功能新增】IoT:增加 alert 告警相关的表结构

YunaiV 6 months ago
parent
commit
d24e3ad773
11 changed files with 222 additions and 1 deletions
  1. 31 0
      yudao-module-iot/yudao-module-iot-api/src/main/java/cn/iocoder/yudao/module/iot/enums/rule/IotAlertConfigReceiveTypeEnum.java
  2. 1 0
      yudao-module-iot/yudao-module-iot-api/src/main/java/cn/iocoder/yudao/module/iot/enums/thingmodel/IotDataSpecsDataTypeEnum.java
  3. 1 0
      yudao-module-iot/yudao-module-iot-api/src/main/java/cn/iocoder/yudao/module/iot/enums/thingmodel/IotThingModelAccessModeEnum.java
  4. 1 0
      yudao-module-iot/yudao-module-iot-api/src/main/java/cn/iocoder/yudao/module/iot/enums/thingmodel/IotThingModelParamDirectionEnum.java
  5. 1 0
      yudao-module-iot/yudao-module-iot-api/src/main/java/cn/iocoder/yudao/module/iot/enums/thingmodel/IotThingModelServiceCallTypeEnum.java
  6. 1 0
      yudao-module-iot/yudao-module-iot-api/src/main/java/cn/iocoder/yudao/module/iot/enums/thingmodel/IotThingModelServiceEventTypeEnum.java
  7. 79 0
      yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/dataobject/rule/IotAlertConfig.java
  8. 78 0
      yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/dataobject/rule/IotAlertRecordDO.java
  9. 1 0
      yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/rule/action/IotRuleSceneAction.java
  10. 28 0
      yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/rule/action/IotRuleSceneAlertAction.java
  11. 0 1
      yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/rule/action/IotRuleSceneDataBridgeAction.java

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

@@ -0,0 +1,31 @@
+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 IotAlertConfigReceiveTypeEnum implements ArrayValuable<Integer> {
+
+    SMS(1), // 短信
+    MAIL(2), // 邮箱
+    NOTIFY(3); // 通知
+
+    private final Integer type;
+
+    public static final Integer[] ARRAYS = Arrays.stream(values()).map(IotAlertConfigReceiveTypeEnum::getType).toArray(Integer[]::new);
+
+    @Override
+    public Integer[] array() {
+        return ARRAYS;
+    }
+
+}

+ 1 - 0
yudao-module-iot/yudao-module-iot-api/src/main/java/cn/iocoder/yudao/module/iot/enums/thingmodel/IotDataSpecsDataTypeEnum.java

@@ -3,6 +3,7 @@ package cn.iocoder.yudao.module.iot.enums.thingmodel;
 import lombok.AllArgsConstructor;
 import lombok.AllArgsConstructor;
 import lombok.Getter;
 import lombok.Getter;
 
 
+// TODO @puhui999:加个 ArrayValuable
 /**
 /**
  * IoT 数据定义的数据类型枚举类
  * IoT 数据定义的数据类型枚举类
  *
  *

+ 1 - 0
yudao-module-iot/yudao-module-iot-api/src/main/java/cn/iocoder/yudao/module/iot/enums/thingmodel/IotThingModelAccessModeEnum.java

@@ -3,6 +3,7 @@ package cn.iocoder.yudao.module.iot.enums.thingmodel;
 import lombok.AllArgsConstructor;
 import lombok.AllArgsConstructor;
 import lombok.Getter;
 import lombok.Getter;
 
 
+// TODO @puhui999:加个 ArrayValuable
 /**
 /**
  * IOT 产品物模型属性读取类型枚举
  * IOT 产品物模型属性读取类型枚举
  *
  *

+ 1 - 0
yudao-module-iot/yudao-module-iot-api/src/main/java/cn/iocoder/yudao/module/iot/enums/thingmodel/IotThingModelParamDirectionEnum.java

@@ -3,6 +3,7 @@ package cn.iocoder.yudao.module.iot.enums.thingmodel;
 import lombok.AllArgsConstructor;
 import lombok.AllArgsConstructor;
 import lombok.Getter;
 import lombok.Getter;
 
 
+// TODO @puhui999:加个 ArrayValuable
 /**
 /**
  * IOT 产品物模型参数是输入参数还是输出参数枚举
  * IOT 产品物模型参数是输入参数还是输出参数枚举
  *
  *

+ 1 - 0
yudao-module-iot/yudao-module-iot-api/src/main/java/cn/iocoder/yudao/module/iot/enums/thingmodel/IotThingModelServiceCallTypeEnum.java

@@ -3,6 +3,7 @@ package cn.iocoder.yudao.module.iot.enums.thingmodel;
 import lombok.AllArgsConstructor;
 import lombok.AllArgsConstructor;
 import lombok.Getter;
 import lombok.Getter;
 
 
+// TODO @puhui999:加个 ArrayValuable
 /**
 /**
  * IOT 产品物模型服务调用方式枚举
  * IOT 产品物模型服务调用方式枚举
  *
  *

+ 1 - 0
yudao-module-iot/yudao-module-iot-api/src/main/java/cn/iocoder/yudao/module/iot/enums/thingmodel/IotThingModelServiceEventTypeEnum.java

@@ -3,6 +3,7 @@ package cn.iocoder.yudao.module.iot.enums.thingmodel;
 import lombok.AllArgsConstructor;
 import lombok.AllArgsConstructor;
 import lombok.Getter;
 import lombok.Getter;
 
 
+// TODO @puhui999:加个 ArrayValuable
 /**
 /**
  * IOT 产品物模型事件类型枚举
  * IOT 产品物模型事件类型枚举
  *
  *

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

@@ -0,0 +1,79 @@
+package cn.iocoder.yudao.module.iot.dal.dataobject.rule;
+
+import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
+import cn.iocoder.yudao.module.iot.enums.rule.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 java.util.List;
+
+/**
+ * IoT 告警配置 DO
+ *
+ * @author 芋道源码
+ */
+@TableName("iot_alert_config")
+@KeySequence("iot_alert_config_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class IotAlertConfig extends BaseDO {
+
+    /**
+     * 配置编号
+     */
+    @TableId
+    private Long id;
+    /**
+     * 配置名称
+     */
+    private String name;
+    /**
+     * 配置描述
+     */
+    private String description;
+    /**
+     * 配置状态
+     *
+     * TODO 数据字典
+     */
+    private Integer level;
+    /**
+     * 配置状态
+     *
+     * 枚举 {@link cn.iocoder.yudao.framework.common.enums.CommonStatusEnum}
+     */
+    private Integer status;
+
+    /**
+     * 关联的规则场景编号数组
+     *
+     * 关联 {@link IotRuleSceneDO#getId()}
+     */
+    @TableField(typeHandler = JacksonTypeHandler.class)
+    private List<Long> ruleSceneIds;
+
+    /**
+     * 接收的用户编号数组
+     *
+     * 关联 {@link AdminUserRespDTO#getId()}
+     */
+    @TableField(typeHandler = JacksonTypeHandler.class)
+    private List<Long> receiveUserIds;
+    /**
+     * 接收的类型数组
+     *
+     * 枚举 {@link IotAlertConfigReceiveTypeEnum}
+     */
+    @TableField(typeHandler = JacksonTypeHandler.class)
+    private List<Integer> receiveTypes;
+
+}

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

@@ -0,0 +1,78 @@
+package cn.iocoder.yudao.module.iot.dal.dataobject.rule;
+
+import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
+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.mq.message.IotDeviceMessage;
+import com.baomidou.mybatisplus.annotation.KeySequence;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
+import lombok.*;
+
+/**
+ * IoT 告警记录 DO
+ *
+ * @author 芋道源码
+ */
+@TableName("iot_alert_record")
+@KeySequence("iot_alert_record_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class IotAlertRecordDO extends BaseDO {
+
+    /**
+     * 记录编号
+     */
+    @TableField
+    private Long id;
+    /**
+     * 告警名称
+     *
+     * 冗余 {@link IotAlertConfig#getName()}
+     */
+    private Long configId;
+    /**
+     * 告警名称
+     *
+     * 冗余 {@link IotAlertConfig#getName()}
+     */
+    private String name;
+
+    /**
+     * 产品标识
+     *
+     * 关联 {@link IotProductDO#getProductKey()} ()}
+     */
+    private String productKey;
+    /**
+     * 设备名称
+     *
+     * 冗余 {@link IotDeviceDO#getDeviceName()}
+     */
+    private String deviceName;
+
+    // TODO @芋艿:有没更好的方式
+    /**
+     * 触发的设备消息
+     */
+    @TableField(typeHandler = JacksonTypeHandler.class)
+    private IotDeviceMessage deviceMessage;
+
+    /**
+     * 处理状态
+     *
+     * true - 已处理
+     * false - 未处理
+     */
+    private Boolean processStatus;
+    /**
+     * 处理结果(备注)
+     */
+    private String processRemark;
+
+}

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

@@ -13,6 +13,7 @@ import javax.annotation.Nullable;
  */
  */
 public interface IotRuleSceneAction {
 public interface IotRuleSceneAction {
 
 
+    // TODO @芋艿:groovy 或者 javascript 实现数据的转换;可以考虑基于 hutool 的 ScriptUtil 做
     /**
     /**
      * 执行场景
      * 执行场景
      *
      *

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

@@ -0,0 +1,28 @@
+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;
+
+import javax.annotation.Nullable;
+
+/**
+ * IoT 告警的 {@link IotRuleSceneAction} 实现类
+ *
+ * @author 芋道源码
+ */
+@Component
+public class IotRuleSceneAlertAction implements IotRuleSceneAction {
+
+    @Override
+    public void execute(@Nullable IotDeviceMessage message, IotRuleSceneDO.ActionConfig config) {
+        // TODO @芋艿:待实现
+    }
+
+    @Override
+    public IotRuleSceneActionTypeEnum getType() {
+        return IotRuleSceneActionTypeEnum.ALERT;
+    }
+
+}

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

@@ -60,7 +60,6 @@ public class IotRuleSceneDataBridgeAction implements IotRuleSceneAction {
         }
         }
 
 
         // 2.1 执行 HTTP 请求
         // 2.1 执行 HTTP 请求
-        // TODO @芋艿:groovy 或者 javascript 实现数据的转换;可以考虑基于 hutool 的 ScriptUtil 做
         if (IotDataBridgTypeEnum.HTTP.getType().equals(dataBridge.getType())) {
         if (IotDataBridgTypeEnum.HTTP.getType().equals(dataBridge.getType())) {
             executeHttp(message, (IotDataBridgeDO.HttpConfig) dataBridge.getConfig());
             executeHttp(message, (IotDataBridgeDO.HttpConfig) dataBridge.getConfig());
             return;
             return;