getUpgradeTask(@RequestParam("id") Long id) {
- IotOtaUpgradeTaskDO upgradeTask = upgradeTaskService.getUpgradeTask(id);
- return success(BeanUtils.toBean(upgradeTask, IotOtaUpgradeTaskRespVO.class));
- }
-
-}
diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/ota/vo/firmware/IotOtaFirmwareCreateReqVO.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/ota/vo/firmware/IotOtaFirmwareCreateReqVO.java
index 3d8299c..544cce0 100644
--- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/ota/vo/firmware/IotOtaFirmwareCreateReqVO.java
+++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/ota/vo/firmware/IotOtaFirmwareCreateReqVO.java
@@ -4,6 +4,7 @@ import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
+import org.hibernate.validator.constraints.URL;
@Schema(description = "管理后台 - IoT OTA 固件创建 Request VO")
@Data
@@ -22,17 +23,11 @@ public class IotOtaFirmwareCreateReqVO {
@Schema(description = "产品编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
@NotNull(message = "产品编号不能为空")
- private String productId;
+ private Long productId;
- @Schema(description = "签名方式", example = "MD5")
- // TODO @li:是不是必传哈
- private String signMethod;
-
- @Schema(description = "固件文件 URL", requiredMode = Schema.RequiredMode.REQUIRED, example = "https://www.iocoder.cn/yudao-firmware.zip")
+ @Schema(description = "固件文件 URL", requiredMode = Schema.RequiredMode.REQUIRED, example = "https://www.iocoder.cn/1.zip")
@NotEmpty(message = "固件文件 URL 不能为空")
+ @URL(message = "固件文件 URL 格式错误")
private String fileUrl;
- @Schema(description = "自定义信息,建议使用 JSON 格式", example = "{\"key1\":\"value1\",\"key2\":\"value2\"}")
- private String information;
-
}
diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/ota/vo/firmware/IotOtaFirmwarePageReqVO.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/ota/vo/firmware/IotOtaFirmwarePageReqVO.java
index baa7410..589ed00 100644
--- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/ota/vo/firmware/IotOtaFirmwarePageReqVO.java
+++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/ota/vo/firmware/IotOtaFirmwarePageReqVO.java
@@ -3,21 +3,24 @@ package cn.iocoder.yudao.module.iot.controller.admin.ota.vo.firmware;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.time.LocalDateTime;
+
+import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
-@Data
@Schema(description = "管理后台 - IoT OTA 固件分页 Request VO")
+@Data
public class IotOtaFirmwarePageReqVO extends PageParam {
- /**
- * 固件名称
- */
@Schema(description = "固件名称", example = "智能开关固件")
private String name;
- /**
- * 产品标识
- */
@Schema(description = "产品标识", example = "1024")
private String productId;
+ @Schema(description = "创建时间", example = "[2022-07-01 00:00:00, 2022-07-01 23:59:59]")
+ @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+ private LocalDateTime[] createTime;
+
}
diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/ota/vo/firmware/IotOtaFirmwareRespVO.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/ota/vo/firmware/IotOtaFirmwareRespVO.java
index 1bcc359..d6fdbf7 100644
--- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/ota/vo/firmware/IotOtaFirmwareRespVO.java
+++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/ota/vo/firmware/IotOtaFirmwareRespVO.java
@@ -1,83 +1,49 @@
package cn.iocoder.yudao.module.iot.controller.admin.ota.vo.firmware;
-import cn.iocoder.yudao.module.iot.dal.dataobject.product.IotProductDO;
-import com.fhs.core.trans.anno.Trans;
-import com.fhs.core.trans.constant.TransType;
import com.fhs.core.trans.vo.VO;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
-@Data
+import java.time.LocalDateTime;
+
@Schema(description = "管理后台 - IoT OTA 固件 Response VO")
+@Data
public class IotOtaFirmwareRespVO implements VO {
- /**
- * 固件编号
- */
@Schema(description = "固件编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
private Long id;
- /**
- * 固件名称
- */
- @Schema(description = "固件名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "OTA固件")
+
+ @Schema(description = "固件名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "OTA 固件")
private String name;
- /**
- * 固件描述
- */
+
@Schema(description = "固件描述")
private String description;
- /**
- * 版本号
- */
+
@Schema(description = "版本号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1.0.0")
private String version;
- /**
- * 产品编号
- *
- * 关联 {@link cn.iocoder.yudao.module.iot.dal.dataobject.product.IotProductDO#getId()}
- */
@Schema(description = "产品编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
- @Trans(type = TransType.SIMPLE, target = IotProductDO.class, fields = {"name"}, refs = {"productName"})
- private String productId;
- /**
- * 产品标识
- *
- * 冗余 {@link cn.iocoder.yudao.module.iot.dal.dataobject.product.IotProductDO#getProductKey()}
- */
- @Schema(description = "产品标识", requiredMode = Schema.RequiredMode.REQUIRED, example = "iot-product-key")
- private String productKey;
- /**
- * 产品名称
- */
- @Schema(description = "产品名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "OTA产品")
+ private Long productId;
+
+ @Schema(description = "产品名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "智能设备")
private String productName;
- /**
- * 签名方式
- *
- * 例如说:MD5、SHA256
- */
- @Schema(description = "签名方式", example = "MD5")
- private String signMethod;
- /**
- * 固件文件签名
- */
- @Schema(description = "固件文件签名", example = "1024")
- private String fileSign;
- /**
- * 固件文件大小
- */
+
+ @Schema(description = "固件文件 URL", requiredMode = Schema.RequiredMode.REQUIRED, example = "https://www.iocoder.cn/firmware.bin")
+ private String fileUrl;
+
@Schema(description = "固件文件大小", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
private Long fileSize;
- /**
- * 固件文件 URL
- */
- @Schema(description = "固件文件 URL", requiredMode = Schema.RequiredMode.REQUIRED, example = "https://www.iocoder.cn")
- private String fileUrl;
- /**
- * 自定义信息,建议使用 JSON 格式
- */
- @Schema(description = "自定义信息,建议使用 JSON 格式")
- private String information;
+
+ @Schema(description = "固件文件签名算法", example = "MD5")
+ private String fileDigestAlgorithm;
+
+ @Schema(description = "固件文件签名结果", example = "d41d8cd98f00b204e9800998ecf8427e")
+ private String fileDigestValue;
+
+ @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
+ private LocalDateTime createTime;
+
+ @Schema(description = "更新时间", requiredMode = Schema.RequiredMode.REQUIRED)
+ private LocalDateTime updateTime;
}
diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/ota/vo/firmware/IotOtaFirmwareUpdateReqVO.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/ota/vo/firmware/IotOtaFirmwareUpdateReqVO.java
index 2a594b2..57b53bb 100644
--- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/ota/vo/firmware/IotOtaFirmwareUpdateReqVO.java
+++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/ota/vo/firmware/IotOtaFirmwareUpdateReqVO.java
@@ -1,7 +1,6 @@
package cn.iocoder.yudao.module.iot.controller.admin.ota.vo.firmware;
import io.swagger.v3.oas.annotations.media.Schema;
-import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
@@ -13,9 +12,7 @@ public class IotOtaFirmwareUpdateReqVO {
@NotNull(message = "固件编号不能为空")
private Long id;
- // TODO @li:name 是不是可以飞必传哈
- @Schema(description = "固件名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "智能开关固件")
- @NotEmpty(message = "固件名称不能为空")
+ @Schema(description = "固件名称", example = "智能开关固件")
private String name;
@Schema(description = "固件描述", example = "某品牌型号固件,测试用")
diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/ota/vo/upgrade/task/IotOtaUpgradeTaskSaveReqVO.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/ota/vo/task/IotOtaTaskCreateReqVO.java
index e8cdbef..65bc07c 100644
--- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/ota/vo/upgrade/task/IotOtaUpgradeTaskSaveReqVO.java
+++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/ota/vo/task/IotOtaTaskCreateReqVO.java
@@ -1,9 +1,7 @@
-package cn.iocoder.yudao.module.iot.controller.admin.ota.vo.upgrade.task;
+package cn.iocoder.yudao.module.iot.controller.admin.ota.vo.task;
import cn.iocoder.yudao.framework.common.validation.InEnum;
-import cn.iocoder.yudao.module.iot.dal.dataobject.device.IotDeviceDO;
-import cn.iocoder.yudao.module.iot.dal.dataobject.ota.IotOtaFirmwareDO;
-import cn.iocoder.yudao.module.iot.enums.ota.IotOtaUpgradeTaskScopeEnum;
+import cn.iocoder.yudao.module.iot.enums.ota.IotOtaTaskDeviceScopeEnum;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
@@ -11,51 +9,29 @@ import lombok.Data;
import java.util.List;
+@Schema(description = "管理后台 - IoT OTA 升级任务创建 Request VO")
@Data
-@Schema(description = "管理后台 - IoT OTA 升级任务创建/修改 Request VO")
-public class IotOtaUpgradeTaskSaveReqVO {
+public class IotOtaTaskCreateReqVO {
- // TODO @li:已经有注解,不用重复注释
- // TODO @li: @Schema 写在参数校验前面。先有定义;其他的,也检查下;
-
- /**
- * 任务名称
- */
@NotEmpty(message = "任务名称不能为空")
@Schema(description = "任务名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "升级任务")
private String name;
- /**
- * 任务描述
- */
@Schema(description = "任务描述", example = "升级任务")
private String description;
- /**
- * 固件编号
- *
- * 关联 {@link IotOtaFirmwareDO#getId()}
- */
- @NotNull(message = "固件编号不能为空")
@Schema(description = "固件编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
+ @NotNull(message = "固件编号不能为空")
private Long firmwareId;
- /**
- * 升级范围
- *
- * 关联 {@link cn.iocoder.yudao.module.iot.enums.ota.IotOtaUpgradeTaskScopeEnum}
- */
- @NotNull(message = "升级范围不能为空")
- @InEnum(value = IotOtaUpgradeTaskScopeEnum.class)
@Schema(description = "升级范围", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
- private Integer scope;
-
- /**
- * 选中的设备编号数组
- *
- * 关联 {@link IotDeviceDO#getId()}
- */
- @Schema(description = "选中的设备编号数组", requiredMode = Schema.RequiredMode.REQUIRED, example = "[1,2,3,4]")
+ @NotNull(message = "升级范围不能为空")
+ @InEnum(value = IotOtaTaskDeviceScopeEnum.class)
+ private Integer deviceScope;
+
+ @Schema(description = "选中的设备编号数组", requiredMode = Schema.RequiredMode.REQUIRED, example = "1,2,3")
private List deviceIds;
+ // TODO @li:如果 deviceScope 等于 2 时,deviceIds 校验非空;
+
}
diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/ota/vo/upgrade/task/IotOtaUpgradeTaskPageReqVO.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/ota/vo/task/IotOtaTaskPageReqVO.java
index 8abdd59..4638f1a 100644
--- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/ota/vo/upgrade/task/IotOtaUpgradeTaskPageReqVO.java
+++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/ota/vo/task/IotOtaTaskPageReqVO.java
@@ -1,25 +1,17 @@
-package cn.iocoder.yudao.module.iot.controller.admin.ota.vo.upgrade.task;
+package cn.iocoder.yudao.module.iot.controller.admin.ota.vo.task;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import io.swagger.v3.oas.annotations.media.Schema;
-import jakarta.validation.constraints.NotNull;
import lombok.Data;
-@Data
@Schema(description = "管理后台 - IoT OTA 升级任务分页 Request VO")
-public class IotOtaUpgradeTaskPageReqVO extends PageParam {
+@Data
+public class IotOtaTaskPageReqVO extends PageParam {
- /**
- * 任务名称字段,用于描述任务的名称
- */
@Schema(description = "任务名称", example = "升级任务")
private String name;
- /**
- * 固件编号字段,用于唯一标识固件,不能为空
- */
- @NotNull(message = "固件编号不能为空")
- @Schema(description = "固件编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
+ @Schema(description = "固件编号", example = "1024")
private Long firmwareId;
}
diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/ota/vo/task/IotOtaTaskRespVO.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/ota/vo/task/IotOtaTaskRespVO.java
new file mode 100644
index 0000000..247f7c6
--- /dev/null
+++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/ota/vo/task/IotOtaTaskRespVO.java
@@ -0,0 +1,40 @@
+package cn.iocoder.yudao.module.iot.controller.admin.ota.vo.task;
+
+import com.fhs.core.trans.vo.VO;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+@Schema(description = "管理后台 - IoT OTA 升级任务 Response VO")
+@Data
+public class IotOtaTaskRespVO implements VO {
+
+ @Schema(description = "任务编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
+ private Long id;
+
+ @Schema(description = "任务名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "升级任务")
+ private String name;
+
+ @Schema(description = "任务描述", example = "升级任务")
+ private String description;
+
+ @Schema(description = "固件编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
+ private Long firmwareId;
+
+ @Schema(description = "任务状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "10")
+ private Integer status;
+
+ @Schema(description = "升级范围", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+ private Integer deviceScope;
+
+ @Schema(description = "设备总共数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
+ private Integer deviceTotalCount;
+
+ @Schema(description = "设备成功数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "66")
+ private Integer deviceSuccessCount;
+
+ @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED, example = "2022-07-08 07:30:00")
+ private LocalDateTime createTime;
+
+}
diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/ota/vo/task/record/IotOtaTaskRecordPageReqVO.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/ota/vo/task/record/IotOtaTaskRecordPageReqVO.java
new file mode 100644
index 0000000..00c6fe7
--- /dev/null
+++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/ota/vo/task/record/IotOtaTaskRecordPageReqVO.java
@@ -0,0 +1,20 @@
+package cn.iocoder.yudao.module.iot.controller.admin.ota.vo.task.record;
+
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+import cn.iocoder.yudao.framework.common.validation.InEnum;
+import cn.iocoder.yudao.module.iot.enums.ota.IotOtaTaskRecordStatusEnum;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+@Schema(description = "管理后台 - IoT OTA 升级记录分页 Request VO")
+@Data
+public class IotOtaTaskRecordPageReqVO extends PageParam {
+
+ @Schema(description = "升级任务编号", example = "1024")
+ private Long taskId;
+
+ @Schema(description = "升级记录状态", example = "5")
+ @InEnum(IotOtaTaskRecordStatusEnum.class)
+ private Integer status;
+
+}
diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/ota/vo/task/record/IotOtaTaskRecordRespVO.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/ota/vo/task/record/IotOtaTaskRecordRespVO.java
new file mode 100644
index 0000000..f7ab1ed
--- /dev/null
+++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/ota/vo/task/record/IotOtaTaskRecordRespVO.java
@@ -0,0 +1,48 @@
+package cn.iocoder.yudao.module.iot.controller.admin.ota.vo.task.record;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+@Schema(description = "管理后台 - IoT OTA 升级任务记录 Response VO")
+@Data
+public class IotOtaTaskRecordRespVO {
+
+ @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
+ private Long id;
+
+ @Schema(description = "固件编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
+ private Long firmwareId;
+
+ @Schema(description = "任务编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "2048")
+ private Long taskId;
+
+ @Schema(description = "设备编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
+ private Long deviceId;
+
+ @Schema(description = "设备名称", example = "智能开关")
+ private String deviceName;
+
+ @Schema(description = "来源的固件编号", example = "1023")
+ private Long fromFirmwareId;
+
+ @Schema(description = "来源固件版本", example = "1.0.0")
+ private String fromFirmwareVersion;
+
+ @Schema(description = "升级状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+ private Integer status;
+
+ @Schema(description = "升级进度,百分比", requiredMode = Schema.RequiredMode.REQUIRED, example = "50")
+ private Integer progress;
+
+ @Schema(description = "升级进度描述", example = "正在下载固件...")
+ private String description;
+
+ @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
+ private LocalDateTime createTime;
+
+ @Schema(description = "更新时间", requiredMode = Schema.RequiredMode.REQUIRED)
+ private LocalDateTime updateTime;
+
+}
diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/ota/vo/upgrade/record/IotOtaUpgradeRecordPageReqVO.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/ota/vo/upgrade/record/IotOtaUpgradeRecordPageReqVO.java
deleted file mode 100644
index cf74cbb..0000000
--- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/ota/vo/upgrade/record/IotOtaUpgradeRecordPageReqVO.java
+++ /dev/null
@@ -1,30 +0,0 @@
-package cn.iocoder.yudao.module.iot.controller.admin.ota.vo.upgrade.record;
-
-import cn.iocoder.yudao.framework.common.pojo.PageParam;
-import io.swagger.v3.oas.annotations.media.Schema;
-import jakarta.validation.constraints.NotNull;
-import lombok.Data;
-
-@Data
-@Schema(description = "管理后台 - IoT OTA 升级记录分页 Request VO")
-public class IotOtaUpgradeRecordPageReqVO extends PageParam {
-
- // TODO @li:已经有注解,不用重复注释
- /**
- * 升级任务编号字段。
- *
- * 该字段用于标识升级任务的唯一编号,不能为空。
- */
- @Schema(description = "升级任务编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
- @NotNull(message = "升级任务编号不能为空")
- private Long taskId;
-
- /**
- * 设备标识字段。
- *
- * 该字段用于标识设备的名称,通常用于区分不同的设备。
- */
- @Schema(description = "设备标识", requiredMode = Schema.RequiredMode.REQUIRED, example = "摄像头A1-1")
- private String deviceName;
-
-}
diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/ota/vo/upgrade/record/IotOtaUpgradeRecordRespVO.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/ota/vo/upgrade/record/IotOtaUpgradeRecordRespVO.java
deleted file mode 100644
index d770374..0000000
--- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/ota/vo/upgrade/record/IotOtaUpgradeRecordRespVO.java
+++ /dev/null
@@ -1,107 +0,0 @@
-package cn.iocoder.yudao.module.iot.controller.admin.ota.vo.upgrade.record;
-
-import cn.iocoder.yudao.module.iot.dal.dataobject.device.IotDeviceDO;
-import cn.iocoder.yudao.module.iot.dal.dataobject.ota.IotOtaFirmwareDO;
-import cn.iocoder.yudao.module.iot.dal.dataobject.ota.IotOtaUpgradeTaskDO;
-import com.fhs.core.trans.anno.Trans;
-import com.fhs.core.trans.constant.TransType;
-import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.Data;
-
-import java.time.LocalDateTime;
-
-@Data
-@Schema(description = "管理后台 - IoT OTA 升级记录 Response VO")
-public class IotOtaUpgradeRecordRespVO {
-
- /**
- * 升级记录编号
- */
- @Schema(description = "升级记录编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
- private Long id;
- /**
- * 固件编号
- *
- * 关联 {@link IotOtaFirmwareDO#getId()}
- */
- @Schema(description = "固件编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
- @Trans(type = TransType.SIMPLE, target = IotOtaFirmwareDO.class, fields = {"version"}, refs = {"firmwareVersion"})
- private Long firmwareId;
- /**
- * 固件版本
- */
- @Schema(description = "固件版本", requiredMode = Schema.RequiredMode.REQUIRED, example = "v1.0.0")
- private String firmwareVersion;
- /**
- * 任务编号
- *
- * 关联 {@link IotOtaUpgradeTaskDO#getId()}
- */
- @Schema(description = "任务编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
- private Long taskId;
- /**
- * 产品标识
- *
- * 关联 {@link cn.iocoder.yudao.module.iot.dal.dataobject.product.IotProductDO#getId()}
- */
- @Schema(description = "产品标识", requiredMode = Schema.RequiredMode.REQUIRED, example = "iot")
- private String productKey;
- /**
- * 设备名称
- *
- * 关联 {@link cn.iocoder.yudao.module.iot.dal.dataobject.device.IotDeviceDO#getId()}
- */
- @Schema(description = "设备名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "iot")
- private String deviceName;
- /**
- * 设备编号
- *
- * 关联 {@link cn.iocoder.yudao.module.iot.dal.dataobject.device.IotDeviceDO#getId()}
- */
- @Schema(description = "设备编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
- private String deviceId;
- /**
- * 来源的固件编号
- *
- * 关联 {@link IotDeviceDO#getFirmwareId()}
- */
- @Schema(description = "来源的固件编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
- @Trans(type = TransType.SIMPLE, target = IotOtaFirmwareDO.class, fields = {"version"}, refs = {"fromFirmwareVersion"})
- private Long fromFirmwareId;
- /**
- * 来源的固件版本
- */
- @Schema(description = "来源的固件版本", requiredMode = Schema.RequiredMode.REQUIRED, example = "v1.0.0")
- private String fromFirmwareVersion;
- /**
- * 升级状态
- *
- * 关联 {@link cn.iocoder.yudao.module.iot.enums.ota.IotOtaUpgradeRecordStatusEnum}
- */
- @Schema(description = "升级状态", requiredMode = Schema.RequiredMode.REQUIRED, allowableValues = {"0", "10", "20", "30", "40", "50"})
- private Integer status;
- /**
- * 升级进度,百分比
- */
- @Schema(description = "升级进度,百分比", requiredMode = Schema.RequiredMode.REQUIRED, example = "10")
- private Integer progress;
- /**
- * 升级进度描述
- *
- * 注意,只记录设备最后一次的升级进度描述
- * 如果想看历史记录,可以查看 {@link cn.iocoder.yudao.module.iot.dal.dataobject.device.IotDeviceLogDO} 设备日志
- */
- @Schema(description = "升级进度描述", requiredMode = Schema.RequiredMode.REQUIRED, example = "10")
- private String description;
- /**
- * 升级开始时间
- */
- @Schema(description = "升级开始时间", requiredMode = Schema.RequiredMode.REQUIRED, example = "2022-07-08 07:30:00")
- private LocalDateTime startTime;
- /**
- * 升级结束时间
- */
- @Schema(description = "升级结束时间", requiredMode = Schema.RequiredMode.REQUIRED, example = "2022-07-08 07:30:00")
- private LocalDateTime endTime;
-
-}
diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/ota/vo/upgrade/task/IotOtaUpgradeTaskRespVO.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/ota/vo/upgrade/task/IotOtaUpgradeTaskRespVO.java
deleted file mode 100644
index 6a32522..0000000
--- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/ota/vo/upgrade/task/IotOtaUpgradeTaskRespVO.java
+++ /dev/null
@@ -1,82 +0,0 @@
-package cn.iocoder.yudao.module.iot.controller.admin.ota.vo.upgrade.task;
-
-import cn.iocoder.yudao.module.iot.dal.dataobject.device.IotDeviceDO;
-import cn.iocoder.yudao.module.iot.dal.dataobject.ota.IotOtaFirmwareDO;
-import com.fhs.core.trans.vo.VO;
-import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.Data;
-
-import java.time.LocalDateTime;
-import java.util.List;
-
-@Data
-@Schema(description = "管理后台 - IoT OTA 升级任务 Response VO")
-public class IotOtaUpgradeTaskRespVO implements VO {
-
- /**
- * 任务编号
- */
- @Schema(description = "任务编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
- private Long id;
- /**
- * 任务名称
- */
- @Schema(description = "任务名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "升级任务")
- private String name;
- /**
- * 任务描述
- */
- @Schema(description = "任务描述", example = "升级任务")
- private String description;
- /**
- * 固件编号
- *
- * 关联 {@link IotOtaFirmwareDO#getId()}
- */
- @Schema(description = "固件编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
- private Long firmwareId;
- /**
- * 任务状态
- *
- * 关联 {@link cn.iocoder.yudao.module.iot.enums.ota.IotOtaUpgradeTaskStatusEnum}
- */
- @Schema(description = "任务状态", requiredMode = Schema.RequiredMode.REQUIRED, allowableValues = {"10", "20", "21", "30"})
- private Integer status;
- /**
- * 任务状态名称
- */
- @Schema(description = "任务状态名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "进行中")
- private String statusName;
- /**
- * 升级范围
- *
- * 关联 {@link cn.iocoder.yudao.module.iot.enums.ota.IotOtaUpgradeTaskScopeEnum}
- */
- @Schema(description = "升级范围", requiredMode = Schema.RequiredMode.REQUIRED, allowableValues = {"1", "2"})
- private Integer scope;
- /**
- * 设备数量
- */
- @Schema(description = "设备数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
- private Long deviceCount;
- /**
- * 选中的设备编号数组
- *
- * 关联 {@link IotDeviceDO#getId()}
- */
- @Schema(description = "选中的设备编号数组", example = "1024")
- private List deviceIds;
- /**
- * 选中的设备名字数组
- *
- * 关联 {@link IotDeviceDO#getDeviceName()}
- */
- @Schema(description = "选中的设备名字数组", example = "1024")
- private List deviceNames;
- /**
- * 创建时间
- */
- @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED, example = "2022-07-08 07:30:00")
- private LocalDateTime createTime;
-
-}
diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/plugin/PluginConfigController.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/plugin/PluginConfigController.java
deleted file mode 100644
index e21b102..0000000
--- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/plugin/PluginConfigController.java
+++ /dev/null
@@ -1,90 +0,0 @@
-package cn.iocoder.yudao.module.iot.controller.admin.plugin;
-
-import cn.iocoder.yudao.framework.common.pojo.CommonResult;
-import cn.iocoder.yudao.framework.common.pojo.PageResult;
-import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
-import cn.iocoder.yudao.module.iot.controller.admin.plugin.vo.config.PluginConfigImportReqVO;
-import cn.iocoder.yudao.module.iot.controller.admin.plugin.vo.config.PluginConfigPageReqVO;
-import cn.iocoder.yudao.module.iot.controller.admin.plugin.vo.config.PluginConfigRespVO;
-import cn.iocoder.yudao.module.iot.controller.admin.plugin.vo.config.PluginConfigSaveReqVO;
-import cn.iocoder.yudao.module.iot.controller.admin.plugin.vo.config.PluginConfigStatusReqVO;
-import cn.iocoder.yudao.module.iot.dal.dataobject.plugin.IotPluginConfigDO;
-import cn.iocoder.yudao.module.iot.service.plugin.IotPluginConfigService;
-import io.swagger.v3.oas.annotations.Operation;
-import io.swagger.v3.oas.annotations.Parameter;
-import io.swagger.v3.oas.annotations.tags.Tag;
-import jakarta.annotation.Resource;
-import jakarta.validation.Valid;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.*;
-
-import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
-
-@Tag(name = "管理后台 - IoT 插件配置")
-@RestController
-@RequestMapping("/iot/plugin-config")
-@Validated
-public class PluginConfigController {
-
- @Resource
- private IotPluginConfigService pluginConfigService;
-
- @PostMapping("/create")
- @Operation(summary = "创建插件配置")
- @PreAuthorize("@ss.hasPermission('iot:plugin-config:create')")
- public CommonResult createPluginConfig(@Valid @RequestBody PluginConfigSaveReqVO createReqVO) {
- return success(pluginConfigService.createPluginConfig(createReqVO));
- }
-
- @PutMapping("/update")
- @Operation(summary = "更新插件配置")
- @PreAuthorize("@ss.hasPermission('iot:plugin-config:update')")
- public CommonResult updatePluginConfig(@Valid @RequestBody PluginConfigSaveReqVO updateReqVO) {
- pluginConfigService.updatePluginConfig(updateReqVO);
- return success(true);
- }
-
- @DeleteMapping("/delete")
- @Operation(summary = "删除插件配置")
- @Parameter(name = "id", description = "编号", required = true)
- @PreAuthorize("@ss.hasPermission('iot:plugin-config:delete')")
- public CommonResult deletePluginConfig(@RequestParam("id") Long id) {
- pluginConfigService.deletePluginConfig(id);
- return success(true);
- }
-
- @GetMapping("/get")
- @Operation(summary = "获得插件配置")
- @Parameter(name = "id", description = "编号", required = true, example = "1024")
- @PreAuthorize("@ss.hasPermission('iot:plugin-config:query')")
- public CommonResult getPluginConfig(@RequestParam("id") Long id) {
- IotPluginConfigDO pluginConfig = pluginConfigService.getPluginConfig(id);
- return success(BeanUtils.toBean(pluginConfig, PluginConfigRespVO.class));
- }
-
- @GetMapping("/page")
- @Operation(summary = "获得插件配置分页")
- @PreAuthorize("@ss.hasPermission('iot:plugin-config:query')")
- public CommonResult> getPluginConfigPage(@Valid PluginConfigPageReqVO pageReqVO) {
- PageResult pageResult = pluginConfigService.getPluginConfigPage(pageReqVO);
- return success(BeanUtils.toBean(pageResult, PluginConfigRespVO.class));
- }
-
- @PostMapping("/upload-file")
- @Operation(summary = "上传插件文件")
- @PreAuthorize("@ss.hasPermission('iot:plugin-config:update')")
- public CommonResult uploadFile(@Valid PluginConfigImportReqVO reqVO) {
- pluginConfigService.uploadFile(reqVO.getId(), reqVO.getFile());
- return success(true);
- }
-
- @PutMapping("/update-status")
- @Operation(summary = "修改插件状态")
- @PreAuthorize("@ss.hasPermission('iot:plugin-config:update')")
- public CommonResult updatePluginConfigStatus(@Valid @RequestBody PluginConfigStatusReqVO reqVO) {
- pluginConfigService.updatePluginStatus(reqVO.getId(), reqVO.getStatus());
- return success(true);
- }
-
-}
\ No newline at end of file
diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/plugin/vo/config/PluginConfigImportReqVO.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/plugin/vo/config/PluginConfigImportReqVO.java
deleted file mode 100644
index b9b277a..0000000
--- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/plugin/vo/config/PluginConfigImportReqVO.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package cn.iocoder.yudao.module.iot.controller.admin.plugin.vo.config;
-
-import io.swagger.v3.oas.annotations.media.Schema;
-import jakarta.validation.constraints.NotNull;
-import lombok.Data;
-import org.springframework.web.multipart.MultipartFile;
-
-@Schema(description = "管理后台 - IoT 插件上传 Request VO")
-@Data
-public class PluginConfigImportReqVO {
-
- @Schema(description = "主键 ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "11546")
- private Long id;
-
- @Schema(description = "插件文件", requiredMode = Schema.RequiredMode.REQUIRED)
- @NotNull(message = "插件文件不能为空")
- private MultipartFile file;
-
-}
\ No newline at end of file
diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/plugin/vo/config/PluginConfigPageReqVO.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/plugin/vo/config/PluginConfigPageReqVO.java
deleted file mode 100644
index 1666d5d..0000000
--- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/plugin/vo/config/PluginConfigPageReqVO.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package cn.iocoder.yudao.module.iot.controller.admin.plugin.vo.config;
-
-import cn.iocoder.yudao.framework.common.pojo.PageParam;
-import cn.iocoder.yudao.framework.common.validation.InEnum;
-import cn.iocoder.yudao.module.iot.enums.plugin.IotPluginStatusEnum;
-import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.Data;
-
-@Schema(description = "管理后台 - IoT 插件配置分页 Request VO")
-@Data
-public class PluginConfigPageReqVO extends PageParam {
-
- @Schema(description = "插件名称", example = "http")
- private String name;
-
- @Schema(description = "状态", example = "1")
- @InEnum(IotPluginStatusEnum.class)
- private Integer status;
-
-}
\ No newline at end of file
diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/plugin/vo/config/PluginConfigRespVO.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/plugin/vo/config/PluginConfigRespVO.java
deleted file mode 100644
index 2b8c4dc..0000000
--- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/plugin/vo/config/PluginConfigRespVO.java
+++ /dev/null
@@ -1,54 +0,0 @@
-package cn.iocoder.yudao.module.iot.controller.admin.plugin.vo.config;
-
-import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.Data;
-
-import java.time.LocalDateTime;
-
-@Schema(description = "管理后台 - IoT 插件配置 Response VO")
-@Data
-public class PluginConfigRespVO {
-
- @Schema(description = "主键 ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "11546")
- private Long id;
-
- @Schema(description = "插件包标识符", requiredMode = Schema.RequiredMode.REQUIRED, example = "24627")
- private String pluginKey;
-
- @Schema(description = "插件名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "赵六")
- private String name;
-
- @Schema(description = "描述", example = "你猜")
- private String description;
-
- @Schema(description = "部署方式", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
- private Integer deployType;
-
- @Schema(description = "插件包文件名", requiredMode = Schema.RequiredMode.REQUIRED)
- private String fileName;
-
- @Schema(description = "插件版本", requiredMode = Schema.RequiredMode.REQUIRED)
- private String version;
-
- @Schema(description = "插件类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
- private Integer type;
-
- @Schema(description = "设备插件协议类型")
- private String protocol;
-
- @Schema(description = "状态", requiredMode = Schema.RequiredMode.REQUIRED)
- private Integer status;
-
- @Schema(description = "插件配置项描述信息")
- private String configSchema;
-
- @Schema(description = "插件配置信息")
- private String config;
-
- @Schema(description = "插件脚本")
- private String script;
-
- @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
- private LocalDateTime createTime;
-
-}
\ No newline at end of file
diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/plugin/vo/config/PluginConfigSaveReqVO.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/plugin/vo/config/PluginConfigSaveReqVO.java
deleted file mode 100644
index e48869d..0000000
--- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/plugin/vo/config/PluginConfigSaveReqVO.java
+++ /dev/null
@@ -1,56 +0,0 @@
-package cn.iocoder.yudao.module.iot.controller.admin.plugin.vo.config;
-
-import cn.iocoder.yudao.framework.common.validation.InEnum;
-import cn.iocoder.yudao.module.iot.enums.plugin.IotPluginStatusEnum;
-import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.Data;
-
-@Schema(description = "管理后台 - IoT 插件配置新增/修改 Request VO")
-@Data
-public class PluginConfigSaveReqVO {
-
- // TODO @haohao:新增的字段有点多,每个都需要哇?
-
- // TODO @haohao:一些枚举字段,需要加枚举校验。例如说,deployType、status、type 等
-
- @Schema(description = "主键编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "11546")
- private Long id;
-
- @Schema(description = "插件包标识符", requiredMode = Schema.RequiredMode.REQUIRED, example = "24627")
- private String pluginKey;
-
- @Schema(description = "插件名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "赵六")
- private String name;
-
- @Schema(description = "描述", example = "你猜")
- private String description;
-
- @Schema(description = "部署方式", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
- private Integer deployType;
-
- @Schema(description = "插件包文件名", requiredMode = Schema.RequiredMode.REQUIRED)
- private String fileName;
-
- @Schema(description = "插件版本", requiredMode = Schema.RequiredMode.REQUIRED)
- private String version;
-
- @Schema(description = "插件类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
- private Integer type;
-
- @Schema(description = "设备插件协议类型")
- private String protocol;
-
- @Schema(description = "状态", requiredMode = Schema.RequiredMode.REQUIRED)
- @InEnum(IotPluginStatusEnum.class)
- private Integer status;
-
- @Schema(description = "插件配置项描述信息")
- private String configSchema;
-
- @Schema(description = "插件配置信息")
- private String config;
-
- @Schema(description = "插件脚本")
- private String script;
-
-}
\ No newline at end of file
diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/plugin/vo/config/PluginConfigStatusReqVO.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/plugin/vo/config/PluginConfigStatusReqVO.java
deleted file mode 100644
index eae4aa0..0000000
--- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/plugin/vo/config/PluginConfigStatusReqVO.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package cn.iocoder.yudao.module.iot.controller.admin.plugin.vo.config;
-
-import cn.iocoder.yudao.framework.common.validation.InEnum;
-import cn.iocoder.yudao.module.iot.enums.plugin.IotPluginStatusEnum;
-import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.Data;
-
-@Schema(description = "管理后台 - IoT 插件配置状态 Request VO")
-@Data
-public class PluginConfigStatusReqVO {
-
- @Schema(description = "主键编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "11546")
- private Long id;
-
- @Schema(description = "状态", requiredMode = Schema.RequiredMode.REQUIRED)
- @InEnum(IotPluginStatusEnum.class)
- private Integer status;
-
-}
\ No newline at end of file
diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/plugin/vo/instance/PluginInstancePageReqVO.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/plugin/vo/instance/PluginInstancePageReqVO.java
deleted file mode 100644
index e58b888..0000000
--- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/plugin/vo/instance/PluginInstancePageReqVO.java
+++ /dev/null
@@ -1,35 +0,0 @@
-package cn.iocoder.yudao.module.iot.controller.admin.plugin.vo.instance;
-
-import lombok.*;
-import io.swagger.v3.oas.annotations.media.Schema;
-import cn.iocoder.yudao.framework.common.pojo.PageParam;
-import org.springframework.format.annotation.DateTimeFormat;
-import java.time.LocalDateTime;
-
-import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
-
-// TODO @haohao:后续需要使用下
-@Schema(description = "管理后台 - IoT 插件实例分页 Request VO")
-@Data
-public class PluginInstancePageReqVO extends PageParam {
-
- @Schema(description = "插件主程序编号", example = "23738")
- private String mainId;
-
- @Schema(description = "插件id", example = "26498")
- private Long pluginId;
-
- @Schema(description = "插件主程序所在ip")
- private String ip;
-
- @Schema(description = "插件主程序端口")
- private Integer port;
-
- @Schema(description = "心跳时间,心路时间超过30秒需要剔除")
- private Long heartbeatAt;
-
- @Schema(description = "创建时间")
- @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
- private LocalDateTime[] createTime;
-
-}
\ No newline at end of file
diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/plugin/vo/instance/PluginInstanceRespVO.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/plugin/vo/instance/PluginInstanceRespVO.java
deleted file mode 100644
index cba59fd..0000000
--- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/plugin/vo/instance/PluginInstanceRespVO.java
+++ /dev/null
@@ -1,34 +0,0 @@
-package cn.iocoder.yudao.module.iot.controller.admin.plugin.vo.instance;
-
-import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.Data;
-
-import java.time.LocalDateTime;
-
-// TODO @haohao:后续需要使用下
-@Schema(description = "管理后台 - IoT 插件实例 Response VO")
-@Data
-public class PluginInstanceRespVO {
-
- @Schema(description = "主键编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "23864")
- private Long id;
-
- @Schema(description = "插件主程序id", requiredMode = Schema.RequiredMode.REQUIRED, example = "23738")
- private String mainId;
-
- @Schema(description = "插件id", requiredMode = Schema.RequiredMode.REQUIRED, example = "26498")
- private Long pluginId;
-
- @Schema(description = "插件主程序所在ip", requiredMode = Schema.RequiredMode.REQUIRED)
- private String ip;
-
- @Schema(description = "插件主程序端口", requiredMode = Schema.RequiredMode.REQUIRED)
- private Integer port;
-
- @Schema(description = "心跳时间,心路时间超过30秒需要剔除", requiredMode = Schema.RequiredMode.REQUIRED)
- private Long heartbeatAt;
-
- @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
- private LocalDateTime createTime;
-
-}
\ No newline at end of file
diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/product/IotProductController.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/product/IotProductController.java
index 2d8c856..39eec84 100644
--- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/product/IotProductController.java
+++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/product/IotProductController.java
@@ -84,6 +84,27 @@ public class IotProductController {
@PreAuthorize("@ss.hasPermission('iot:product:query')")
public CommonResult getProduct(@RequestParam("id") Long id) {
IotProductDO product = productService.getProduct(id);
+ if (product == null) {
+ return success(null);
+ }
+ // 拼接数据
+ IotProductCategoryDO category = categoryService.getProductCategory(product.getCategoryId());
+ return success(BeanUtils.toBean(product, IotProductRespVO.class, bean -> {
+ if (category != null) {
+ bean.setCategoryName(category.getName());
+ }
+ }));
+ }
+
+ @GetMapping("/get-by-key")
+ @Operation(summary = "通过 ProductKey 获得产品")
+ @Parameter(name = "productKey", description = "产品Key", required = true, example = "abc123")
+ @PreAuthorize("@ss.hasPermission('iot:product:query')")
+ public CommonResult getProductByKey(@RequestParam("productKey") String productKey) {
+ IotProductDO product = productService.getProductByProductKey(productKey);
+ if (product == null) {
+ return success(null);
+ }
// 拼接数据
IotProductCategoryDO category = categoryService.getProductCategory(product.getCategoryId());
return success(BeanUtils.toBean(product, IotProductRespVO.class, bean -> {
@@ -122,11 +143,11 @@ public class IotProductController {
@GetMapping("/simple-list")
@Operation(summary = "获取产品的精简信息列表", description = "主要用于前端的下拉选项")
- public CommonResult> getSimpleProductList() {
+ public CommonResult> getProductSimpleList() {
List list = productService.getProductList();
return success(convertList(list, product -> // 只返回 id、name 字段
new IotProductRespVO().setId(product.getId()).setName(product.getName())
- .setDeviceType(product.getDeviceType())));
+ .setDeviceType(product.getDeviceType()).setLocationType(product.getLocationType())));
}
}
\ No newline at end of file
diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/product/vo/product/IotProductRespVO.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/product/vo/product/IotProductRespVO.java
index 0455334..99effda 100644
--- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/product/vo/product/IotProductRespVO.java
+++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/product/vo/product/IotProductRespVO.java
@@ -61,24 +61,15 @@ public class IotProductRespVO {
@DictFormat(DictTypeConstants.NET_TYPE)
private Integer netType;
- @Schema(description = "接入网关协议", example = "2")
- @ExcelProperty(value = "接入网关协议", converter = DictConvert.class)
- @DictFormat(DictTypeConstants.PROTOCOL_TYPE)
- private Integer protocolType;
+ @Schema(description = "定位方式", example = "2")
+ @ExcelProperty(value = "定位方式", converter = DictConvert.class)
+ @DictFormat(DictTypeConstants.LOCATION_TYPE)
+ private Integer locationType;
- @Schema(description = "协议编号(脚本解析 id)", requiredMode = Schema.RequiredMode.REQUIRED, example = "13177")
- @ExcelProperty("协议编号(脚本解析 id)")
- private Long protocolId;
-
- @Schema(description = "数据格式")
+ @Schema(description = "数据格式", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
@ExcelProperty(value = "数据格式", converter = DictConvert.class)
- @DictFormat(DictTypeConstants.DATA_FORMAT)
- private Integer dataFormat;
-
- @Schema(description = "数据校验级别", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
- @ExcelProperty(value = "数据校验级别", converter = DictConvert.class)
- @DictFormat(DictTypeConstants.VALIDATE_TYPE)
- private Integer validateType;
+ @DictFormat(DictTypeConstants.CODEC_TYPE)
+ private String codecType;
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
@ExcelProperty("创建时间")
diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/product/vo/product/IotProductSaveReqVO.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/product/vo/product/IotProductSaveReqVO.java
index 268ab7c..5f8cb00 100644
--- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/product/vo/product/IotProductSaveReqVO.java
+++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/product/vo/product/IotProductSaveReqVO.java
@@ -1,7 +1,9 @@
package cn.iocoder.yudao.module.iot.controller.admin.product.vo.product;
import cn.iocoder.yudao.framework.common.validation.InEnum;
-import cn.iocoder.yudao.module.iot.enums.product.*;
+import cn.iocoder.yudao.module.iot.enums.product.IotLocationTypeEnum;
+import cn.iocoder.yudao.module.iot.enums.product.IotNetTypeEnum;
+import cn.iocoder.yudao.module.iot.enums.product.IotProductDeviceTypeEnum;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
@@ -43,18 +45,12 @@ public class IotProductSaveReqVO {
@InEnum(value = IotNetTypeEnum.class, message = "联网方式必须是 {value}")
private Integer netType;
- @Schema(description = "接入网关协议", requiredMode = Schema.RequiredMode.REQUIRED, example = "0")
- @InEnum(value = IotProtocolTypeEnum.class, message = "接入网关协议必须是 {value}")
- private Integer protocolType;
+ @Schema(description = "定位类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "0")
+ @InEnum(value = IotLocationTypeEnum.class, message = "定位方式必须是 {value}")
+ private Integer locationType;
- @Schema(description = "数据格式", requiredMode = Schema.RequiredMode.REQUIRED, example = "0")
- @InEnum(value = IotDataFormatEnum.class, message = "数据格式必须是 {value}")
- @NotNull(message = "数据格式不能为空")
- private Integer dataFormat;
-
- @Schema(description = "数据校验级别", requiredMode = Schema.RequiredMode.REQUIRED, example = "0")
- @InEnum(value = IotValidateTypeEnum.class, message = "数据校验级别必须是 {value}")
- @NotNull(message = "数据校验级别不能为空")
- private Integer validateType;
+ @Schema(description = "数据格式", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
+ @NotEmpty(message = "数据格式不能为空")
+ private String codecType;
}
\ No newline at end of file
diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/rule/IotDataBridgeController.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/rule/IotDataBridgeController.java
deleted file mode 100644
index 95e50a4..0000000
--- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/rule/IotDataBridgeController.java
+++ /dev/null
@@ -1,72 +0,0 @@
-package cn.iocoder.yudao.module.iot.controller.admin.rule;
-
-import cn.iocoder.yudao.framework.common.pojo.CommonResult;
-import cn.iocoder.yudao.framework.common.pojo.PageResult;
-import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
-import cn.iocoder.yudao.module.iot.controller.admin.rule.vo.databridge.IotDataBridgePageReqVO;
-import cn.iocoder.yudao.module.iot.controller.admin.rule.vo.databridge.IotDataBridgeRespVO;
-import cn.iocoder.yudao.module.iot.controller.admin.rule.vo.databridge.IotDataBridgeSaveReqVO;
-import cn.iocoder.yudao.module.iot.dal.dataobject.rule.IotDataBridgeDO;
-import cn.iocoder.yudao.module.iot.service.rule.IotDataBridgeService;
-import io.swagger.v3.oas.annotations.Operation;
-import io.swagger.v3.oas.annotations.Parameter;
-import io.swagger.v3.oas.annotations.tags.Tag;
-import jakarta.annotation.Resource;
-import jakarta.validation.Valid;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.*;
-
-import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
-
-@Tag(name = "管理后台 - IoT 数据桥梁")
-@RestController
-@RequestMapping("/iot/data-bridge")
-@Validated
-public class IotDataBridgeController {
-
- @Resource
- private IotDataBridgeService dataBridgeService;
-
- @PostMapping("/create")
- @Operation(summary = "创建数据桥梁")
- @PreAuthorize("@ss.hasPermission('iot:data-bridge:create')")
- public CommonResult createDataBridge(@Valid @RequestBody IotDataBridgeSaveReqVO createReqVO) {
- return success(dataBridgeService.createDataBridge(createReqVO));
- }
-
- @PutMapping("/update")
- @Operation(summary = "更新数据桥梁")
- @PreAuthorize("@ss.hasPermission('iot:data-bridge:update')")
- public CommonResult updateDataBridge(@Valid @RequestBody IotDataBridgeSaveReqVO updateReqVO) {
- dataBridgeService.updateDataBridge(updateReqVO);
- return success(true);
- }
-
- @DeleteMapping("/delete")
- @Operation(summary = "删除数据桥梁")
- @Parameter(name = "id", description = "编号", required = true)
- @PreAuthorize("@ss.hasPermission('iot:data-bridge:delete')")
- public CommonResult deleteDataBridge(@RequestParam("id") Long id) {
- dataBridgeService.deleteDataBridge(id);
- return success(true);
- }
-
- @GetMapping("/get")
- @Operation(summary = "获得数据桥梁")
- @Parameter(name = "id", description = "编号", required = true, example = "1024")
- @PreAuthorize("@ss.hasPermission('iot:data-bridge:query')")
- public CommonResult getDataBridge(@RequestParam("id") Long id) {
- IotDataBridgeDO dataBridge = dataBridgeService.getDataBridge(id);
- return success(BeanUtils.toBean(dataBridge, IotDataBridgeRespVO.class));
- }
-
- @GetMapping("/page")
- @Operation(summary = "获得数据桥梁分页")
- @PreAuthorize("@ss.hasPermission('iot:data-bridge:query')")
- public CommonResult> getDataBridgePage(@Valid IotDataBridgePageReqVO pageReqVO) {
- PageResult pageResult = dataBridgeService.getDataBridgePage(pageReqVO);
- return success(BeanUtils.toBean(pageResult, IotDataBridgeRespVO.class));
- }
-
-}
\ No newline at end of file
diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/rule/IotDataRuleController.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/rule/IotDataRuleController.java
new file mode 100644
index 0000000..f7e64b1
--- /dev/null
+++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/rule/IotDataRuleController.java
@@ -0,0 +1,72 @@
+package cn.iocoder.yudao.module.iot.controller.admin.rule;
+
+import cn.iocoder.yudao.framework.common.pojo.CommonResult;
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+import cn.iocoder.yudao.module.iot.controller.admin.rule.vo.data.rule.IotDataRulePageReqVO;
+import cn.iocoder.yudao.module.iot.controller.admin.rule.vo.data.rule.IotDataRuleRespVO;
+import cn.iocoder.yudao.module.iot.controller.admin.rule.vo.data.rule.IotDataRuleSaveReqVO;
+import cn.iocoder.yudao.module.iot.dal.dataobject.rule.IotDataRuleDO;
+import cn.iocoder.yudao.module.iot.service.rule.data.IotDataRuleService;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import jakarta.annotation.Resource;
+import jakarta.validation.Valid;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
+
+@Tag(name = "管理后台 - IoT 数据流转规则")
+@RestController
+@RequestMapping("/iot/data-rule")
+@Validated
+public class IotDataRuleController {
+
+ @Resource
+ private IotDataRuleService dataRuleService;
+
+ @PostMapping("/create")
+ @Operation(summary = "创建数据流转规则")
+ @PreAuthorize("@ss.hasPermission('iot:data-rule:create')")
+ public CommonResult createDataRule(@Valid @RequestBody IotDataRuleSaveReqVO createReqVO) {
+ return success(dataRuleService.createDataRule(createReqVO));
+ }
+
+ @PutMapping("/update")
+ @Operation(summary = "更新数据流转规则")
+ @PreAuthorize("@ss.hasPermission('iot:data-rule:update')")
+ public CommonResult updateDataRule(@Valid @RequestBody IotDataRuleSaveReqVO updateReqVO) {
+ dataRuleService.updateDataRule(updateReqVO);
+ return success(true);
+ }
+
+ @DeleteMapping("/delete")
+ @Operation(summary = "删除数据流转规则")
+ @Parameter(name = "id", description = "编号", required = true)
+ @PreAuthorize("@ss.hasPermission('iot:data-rule:delete')")
+ public CommonResult deleteDataRule(@RequestParam("id") Long id) {
+ dataRuleService.deleteDataRule(id);
+ return success(true);
+ }
+
+ @GetMapping("/get")
+ @Operation(summary = "获得数据流转规则")
+ @Parameter(name = "id", description = "编号", required = true, example = "1024")
+ @PreAuthorize("@ss.hasPermission('iot:data-rule:query')")
+ public CommonResult getDataRule(@RequestParam("id") Long id) {
+ IotDataRuleDO dataRule = dataRuleService.getDataRule(id);
+ return success(BeanUtils.toBean(dataRule, IotDataRuleRespVO.class));
+ }
+
+ @GetMapping("/page")
+ @Operation(summary = "获得数据流转规则分页")
+ @PreAuthorize("@ss.hasPermission('iot:data-rule:query')")
+ public CommonResult> getDataRulePage(@Valid IotDataRulePageReqVO pageReqVO) {
+ PageResult pageResult = dataRuleService.getDataRulePage(pageReqVO);
+ return success(BeanUtils.toBean(pageResult, IotDataRuleRespVO.class));
+ }
+
+}
\ No newline at end of file
diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/rule/IotDataSinkController.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/rule/IotDataSinkController.java
new file mode 100644
index 0000000..6e1aae7
--- /dev/null
+++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/rule/IotDataSinkController.java
@@ -0,0 +1,84 @@
+package cn.iocoder.yudao.module.iot.controller.admin.rule;
+
+import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
+import cn.iocoder.yudao.framework.common.pojo.CommonResult;
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+import cn.iocoder.yudao.module.iot.controller.admin.rule.vo.data.sink.IotDataSinkPageReqVO;
+import cn.iocoder.yudao.module.iot.controller.admin.rule.vo.data.sink.IotDataSinkRespVO;
+import cn.iocoder.yudao.module.iot.controller.admin.rule.vo.data.sink.IotDataSinkSaveReqVO;
+import cn.iocoder.yudao.module.iot.dal.dataobject.rule.IotDataSinkDO;
+import cn.iocoder.yudao.module.iot.service.rule.data.IotDataSinkService;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import jakarta.annotation.Resource;
+import jakarta.validation.Valid;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
+import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList;
+
+@Tag(name = "管理后台 - IoT 数据流转目的")
+@RestController
+@RequestMapping("/iot/data-sink")
+@Validated
+public class IotDataSinkController {
+
+ @Resource
+ private IotDataSinkService dataSinkService;
+
+ @PostMapping("/create")
+ @Operation(summary = "创建数据目的")
+ @PreAuthorize("@ss.hasPermission('iot:data-sink:create')")
+ public CommonResult createDataSink(@Valid @RequestBody IotDataSinkSaveReqVO createReqVO) {
+ return success(dataSinkService.createDataSink(createReqVO));
+ }
+
+ @PutMapping("/update")
+ @Operation(summary = "更新数据目的")
+ @PreAuthorize("@ss.hasPermission('iot:data-sink:update')")
+ public CommonResult updateDataSink(@Valid @RequestBody IotDataSinkSaveReqVO updateReqVO) {
+ dataSinkService.updateDataSink(updateReqVO);
+ return success(true);
+ }
+
+ @DeleteMapping("/delete")
+ @Operation(summary = "删除数据目的")
+ @Parameter(name = "id", description = "编号", required = true)
+ @PreAuthorize("@ss.hasPermission('iot:data-sink:delete')")
+ public CommonResult deleteDataSink(@RequestParam("id") Long id) {
+ dataSinkService.deleteDataSink(id);
+ return success(true);
+ }
+
+ @GetMapping("/get")
+ @Operation(summary = "获得数据目的")
+ @Parameter(name = "id", description = "编号", required = true, example = "1024")
+ @PreAuthorize("@ss.hasPermission('iot:data-sink:query')")
+ public CommonResult getDataSink(@RequestParam("id") Long id) {
+ IotDataSinkDO sink = dataSinkService.getDataSink(id);
+ return success(BeanUtils.toBean(sink, IotDataSinkRespVO.class));
+ }
+
+ @GetMapping("/page")
+ @Operation(summary = "获得数据目的分页")
+ @PreAuthorize("@ss.hasPermission('iot:data-sink:query')")
+ public CommonResult> getDataSinkPage(@Valid IotDataSinkPageReqVO pageReqVO) {
+ PageResult pageResult = dataSinkService.getDataSinkPage(pageReqVO);
+ return success(BeanUtils.toBean(pageResult, IotDataSinkRespVO.class));
+ }
+
+ @GetMapping("/simple-list")
+ @Operation(summary = "获取数据目的的精简信息列表", description = "主要用于前端的下拉选项")
+ public CommonResult> getDataSinkSimpleList() {
+ List list = dataSinkService.getDataSinkListByStatus(CommonStatusEnum.ENABLE.getStatus());
+ return success(convertList(list, sink -> // 只返回 id、name 字段
+ new IotDataSinkRespVO().setId(sink.getId()).setName(sink.getName())));
+ }
+
+}
diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/rule/IotRuleSceneController.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/rule/IotRuleSceneController.java
deleted file mode 100644
index 04e2f45..0000000
--- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/rule/IotRuleSceneController.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package cn.iocoder.yudao.module.iot.controller.admin.rule;
-
-import cn.iocoder.yudao.module.iot.service.rule.IotRuleSceneService;
-import io.swagger.v3.oas.annotations.tags.Tag;
-import jakarta.annotation.Resource;
-import jakarta.annotation.security.PermitAll;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-@Tag(name = "管理后台 - IoT 规则场景")
-@RestController
-@RequestMapping("/iot/rule-scene")
-@Validated
-public class IotRuleSceneController {
-
- @Resource
- private IotRuleSceneService ruleSceneService;
-
- @GetMapping("/test")
- @PermitAll
- public void test() {
- ruleSceneService.test();
- }
-
-}
diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/rule/IotSceneRuleController.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/rule/IotSceneRuleController.java
new file mode 100644
index 0000000..57d71be
--- /dev/null
+++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/rule/IotSceneRuleController.java
@@ -0,0 +1,93 @@
+package cn.iocoder.yudao.module.iot.controller.admin.rule;
+
+import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
+import cn.iocoder.yudao.framework.common.pojo.CommonResult;
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+import cn.iocoder.yudao.module.iot.controller.admin.rule.vo.scene.IotSceneRulePageReqVO;
+import cn.iocoder.yudao.module.iot.controller.admin.rule.vo.scene.IotSceneRuleRespVO;
+import cn.iocoder.yudao.module.iot.controller.admin.rule.vo.scene.IotSceneRuleSaveReqVO;
+import cn.iocoder.yudao.module.iot.controller.admin.rule.vo.scene.IotSceneRuleUpdateStatusReqVO;
+import cn.iocoder.yudao.module.iot.dal.dataobject.rule.IotSceneRuleDO;
+import cn.iocoder.yudao.module.iot.service.rule.scene.IotSceneRuleService;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import jakarta.annotation.Resource;
+import jakarta.validation.Valid;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
+import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList;
+
+@Tag(name = "管理后台 - IoT 场景联动")
+@RestController
+@RequestMapping("/iot/scene-rule")
+@Validated
+public class IotSceneRuleController {
+
+ @Resource
+ private IotSceneRuleService sceneRuleService;
+
+ @PostMapping("/create")
+ @Operation(summary = "创建场景联动")
+ @PreAuthorize("@ss.hasPermission('iot:scene-rule:create')")
+ public CommonResult createSceneRule(@Valid @RequestBody IotSceneRuleSaveReqVO createReqVO) {
+ return success(sceneRuleService.createSceneRule(createReqVO));
+ }
+
+ @PutMapping("/update")
+ @Operation(summary = "更新场景联动")
+ @PreAuthorize("@ss.hasPermission('iot:scene-rule:update')")
+ public CommonResult updateSceneRule(@Valid @RequestBody IotSceneRuleSaveReqVO updateReqVO) {
+ sceneRuleService.updateSceneRule(updateReqVO);
+ return success(true);
+ }
+
+ @PutMapping("/update-status")
+ @Operation(summary = "更新场景联动状态")
+ @PreAuthorize("@ss.hasPermission('iot:scene-rule:update')")
+ public CommonResult updateSceneRuleStatus(@Valid @RequestBody IotSceneRuleUpdateStatusReqVO updateReqVO) {
+ sceneRuleService.updateSceneRuleStatus(updateReqVO.getId(), updateReqVO.getStatus());
+ return success(true);
+ }
+
+ @DeleteMapping("/delete")
+ @Operation(summary = "删除场景联动")
+ @Parameter(name = "id", description = "编号", required = true)
+ @PreAuthorize("@ss.hasPermission('iot:scene-rule:delete')")
+ public CommonResult deleteSceneRule(@RequestParam("id") Long id) {
+ sceneRuleService.deleteSceneRule(id);
+ return success(true);
+ }
+
+ @GetMapping("/get")
+ @Operation(summary = "获得场景联动")
+ @Parameter(name = "id", description = "编号", required = true, example = "1024")
+ @PreAuthorize("@ss.hasPermission('iot:scene-rule:query')")
+ public CommonResult getSceneRule(@RequestParam("id") Long id) {
+ IotSceneRuleDO sceneRule = sceneRuleService.getSceneRule(id);
+ return success(BeanUtils.toBean(sceneRule, IotSceneRuleRespVO.class));
+ }
+
+ @GetMapping("/page")
+ @Operation(summary = "获得场景联动分页")
+ @PreAuthorize("@ss.hasPermission('iot:scene-rule:query')")
+ public CommonResult> getSceneRulePage(@Valid IotSceneRulePageReqVO pageReqVO) {
+ PageResult pageResult = sceneRuleService.getSceneRulePage(pageReqVO);
+ return success(BeanUtils.toBean(pageResult, IotSceneRuleRespVO.class));
+ }
+
+ @GetMapping("/simple-list")
+ @Operation(summary = "获取场景联动的精简信息列表", description = "主要用于前端的下拉选项")
+ public CommonResult> getSceneRuleSimpleList() {
+ List list = sceneRuleService.getSceneRuleListByStatus(CommonStatusEnum.ENABLE.getStatus());
+ return success(convertList(list, scene -> // 只返回 id、name 字段
+ new IotSceneRuleRespVO().setId(scene.getId()).setName(scene.getName())));
+ }
+
+}
diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/rule/vo/data/package-info.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/rule/vo/data/package-info.java
new file mode 100644
index 0000000..6be90cf
--- /dev/null
+++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/rule/vo/data/package-info.java
@@ -0,0 +1 @@
+package cn.iocoder.yudao.module.iot.controller.admin.rule.vo.data;
\ No newline at end of file
diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/rule/vo/data/rule/IotDataRulePageReqVO.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/rule/vo/data/rule/IotDataRulePageReqVO.java
new file mode 100644
index 0000000..8e21c79
--- /dev/null
+++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/rule/vo/data/rule/IotDataRulePageReqVO.java
@@ -0,0 +1,26 @@
+package cn.iocoder.yudao.module.iot.controller.admin.rule.vo.data.rule;
+
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.time.LocalDateTime;
+
+import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
+
+@Schema(description = "管理后台 - IoT 数据流转规则分页 Request VO")
+@Data
+public class IotDataRulePageReqVO extends PageParam {
+
+ @Schema(description = "数据流转规则名称", example = "芋艿")
+ private String name;
+
+ @Schema(description = "数据流转规则状态", example = "1")
+ private Integer status;
+
+ @Schema(description = "创建时间")
+ @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+ private LocalDateTime[] createTime;
+
+}
\ No newline at end of file
diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/rule/vo/data/rule/IotDataRuleRespVO.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/rule/vo/data/rule/IotDataRuleRespVO.java
new file mode 100644
index 0000000..3427370
--- /dev/null
+++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/rule/vo/data/rule/IotDataRuleRespVO.java
@@ -0,0 +1,35 @@
+package cn.iocoder.yudao.module.iot.controller.admin.rule.vo.data.rule;
+
+import cn.iocoder.yudao.module.iot.dal.dataobject.rule.IotDataRuleDO;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+import java.util.List;
+
+@Schema(description = "管理后台 - IoT 数据流转规则 Response VO")
+@Data
+public class IotDataRuleRespVO {
+
+ @Schema(description = "数据流转规则编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "8540")
+ private Long id;
+
+ @Schema(description = "数据流转规则名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋艿")
+ private String name;
+
+ @Schema(description = "数据流转规则描述", example = "你猜")
+ private String description;
+
+ @Schema(description = "数据流转规则状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+ private Integer status;
+
+ @Schema(description = "数据源配置数组", requiredMode = Schema.RequiredMode.REQUIRED)
+ private List sourceConfigs;
+
+ @Schema(description = "数据目的编号数组", requiredMode = Schema.RequiredMode.REQUIRED)
+ private List sinkIds;
+
+ @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
+ private LocalDateTime createTime;
+
+}
\ No newline at end of file
diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/rule/vo/data/rule/IotDataRuleSaveReqVO.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/rule/vo/data/rule/IotDataRuleSaveReqVO.java
new file mode 100644
index 0000000..47748c6
--- /dev/null
+++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/rule/vo/data/rule/IotDataRuleSaveReqVO.java
@@ -0,0 +1,40 @@
+package cn.iocoder.yudao.module.iot.controller.admin.rule.vo.data.rule;
+
+import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
+import cn.iocoder.yudao.framework.common.validation.InEnum;
+import cn.iocoder.yudao.module.iot.dal.dataobject.rule.IotDataRuleDO;
+import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotEmpty;
+import jakarta.validation.constraints.NotNull;
+import lombok.Data;
+
+import java.util.List;
+
+@Schema(description = "管理后台 - IoT 数据流转规则新增/修改 Request VO")
+@Data
+public class IotDataRuleSaveReqVO {
+
+ @Schema(description = "数据流转规则编号", example = "8540")
+ private Long id;
+
+ @Schema(description = "数据流转规则名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋艿")
+ @NotEmpty(message = "数据流转规则名称不能为空")
+ private String name;
+
+ @Schema(description = "数据流转规则描述", example = "你猜")
+ private String description;
+
+ @Schema(description = "数据流转规则状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+ @NotNull(message = "数据流转规则状态不能为空")
+ @InEnum(CommonStatusEnum.class)
+ private Integer status;
+
+ @Schema(description = "数据源配置数组", requiredMode = Schema.RequiredMode.REQUIRED)
+ @NotEmpty(message = "数据源配置数组不能为空")
+ private List sourceConfigs;
+
+ @Schema(description = "数据目的编号数组", requiredMode = Schema.RequiredMode.REQUIRED)
+ @NotEmpty(message = "数据目的编号数组不能为空")
+ private List sinkIds;
+
+}
\ No newline at end of file
diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/rule/vo/databridge/IotDataBridgePageReqVO.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/rule/vo/data/sink/IotDataSinkPageReqVO.java
index e4dc36e..06bbecc 100644
--- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/rule/vo/databridge/IotDataBridgePageReqVO.java
+++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/rule/vo/data/sink/IotDataSinkPageReqVO.java
@@ -1,4 +1,4 @@
-package cn.iocoder.yudao.module.iot.controller.admin.rule.vo.databridge;
+package cn.iocoder.yudao.module.iot.controller.admin.rule.vo.data.sink;
import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
@@ -11,14 +11,14 @@ import java.time.LocalDateTime;
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
-@Schema(description = "管理后台 - IoT 数据桥梁分页 Request VO")
+@Schema(description = "管理后台 - IoT 数据流转目的分页 Request VO")
@Data
-public class IotDataBridgePageReqVO extends PageParam {
+public class IotDataSinkPageReqVO extends PageParam {
- @Schema(description = "桥梁名称", example = "赵六")
+ @Schema(description = "数据目的名称", example = "赵六")
private String name;
- @Schema(description = "桥梁状态", example = "1")
+ @Schema(description = "数据目的状态", example = "2")
@InEnum(CommonStatusEnum.class)
private Integer status;
diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/rule/vo/data/sink/IotDataSinkRespVO.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/rule/vo/data/sink/IotDataSinkRespVO.java
new file mode 100644
index 0000000..0ced03c
--- /dev/null
+++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/rule/vo/data/sink/IotDataSinkRespVO.java
@@ -0,0 +1,34 @@
+package cn.iocoder.yudao.module.iot.controller.admin.rule.vo.data.sink;
+
+import cn.iocoder.yudao.module.iot.dal.dataobject.rule.config.IotAbstractDataSinkConfig;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+@Schema(description = "管理后台 - IoT 数据流转目的 Response VO")
+@Data
+public class IotDataSinkRespVO {
+
+ @Schema(description = "数据目的编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "18564")
+ private Long id;
+
+ @Schema(description = "数据目的名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "赵六")
+ private String name;
+
+ @Schema(description = "数据目的描述", example = "随便")
+ private String description;
+
+ @Schema(description = "数据目的状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+ private Integer status;
+
+ @Schema(description = "数据目的类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+ private Integer type;
+
+ @Schema(description = "数据目的配置")
+ private IotAbstractDataSinkConfig config;
+
+ @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
+ private LocalDateTime createTime;
+
+}
\ No newline at end of file
diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/rule/vo/data/sink/IotDataSinkSaveReqVO.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/rule/vo/data/sink/IotDataSinkSaveReqVO.java
new file mode 100644
index 0000000..b0e49de
--- /dev/null
+++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/rule/vo/data/sink/IotDataSinkSaveReqVO.java
@@ -0,0 +1,40 @@
+package cn.iocoder.yudao.module.iot.controller.admin.rule.vo.data.sink;
+
+import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
+import cn.iocoder.yudao.framework.common.validation.InEnum;
+import cn.iocoder.yudao.module.iot.dal.dataobject.rule.config.IotAbstractDataSinkConfig;
+import cn.iocoder.yudao.module.iot.enums.rule.IotDataSinkTypeEnum;
+import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotEmpty;
+import jakarta.validation.constraints.NotNull;
+import lombok.Data;
+
+@Schema(description = "管理后台 - IoT 数据流转目的新增/修改 Request VO")
+@Data
+public class IotDataSinkSaveReqVO {
+
+ @Schema(description = "数据目的编号", example = "18564")
+ private Long id;
+
+ @Schema(description = "数据目的名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "赵六")
+ @NotEmpty(message = "数据目的名称不能为空")
+ private String name;
+
+ @Schema(description = "数据目的描述", example = "随便")
+ private String description;
+
+ @Schema(description = "数据目的状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+ @NotNull(message = "数据目的状态不能为空")
+ @InEnum(CommonStatusEnum.class)
+ private Integer status;
+
+ @Schema(description = "数据目的类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+ @NotNull(message = "数据目的类型不能为空")
+ @InEnum(IotDataSinkTypeEnum.class)
+ private Integer type;
+
+ @Schema(description = "数据目的配置")
+ @NotNull(message = "数据目的配置不能为空")
+ private IotAbstractDataSinkConfig config;
+
+}
\ No newline at end of file
diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/rule/vo/databridge/IotDataBridgeRespVO.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/rule/vo/databridge/IotDataBridgeRespVO.java
deleted file mode 100644
index 38e04b2..0000000
--- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/rule/vo/databridge/IotDataBridgeRespVO.java
+++ /dev/null
@@ -1,37 +0,0 @@
-package cn.iocoder.yudao.module.iot.controller.admin.rule.vo.databridge;
-
-import cn.iocoder.yudao.module.iot.controller.admin.rule.vo.databridge.config.IotDataBridgeAbstractConfig;
-import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.Data;
-
-import java.time.LocalDateTime;
-
-@Schema(description = "管理后台 - IoT 数据桥梁 Response VO")
-@Data
-public class IotDataBridgeRespVO {
-
- @Schema(description = "桥梁编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "18564")
- private Long id;
-
- @Schema(description = "桥梁名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "赵六")
- private String name;
-
- @Schema(description = "桥梁描述", example = "随便")
- private String description;
-
- @Schema(description = "桥梁状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
- private Integer status;
-
- @Schema(description = "桥梁方向", requiredMode = Schema.RequiredMode.REQUIRED)
- private Integer direction;
-
- @Schema(description = "桥梁类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
- private Integer type;
-
- @Schema(description = "桥梁配置")
- private IotDataBridgeAbstractConfig config;
-
- @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
- private LocalDateTime createTime;
-
-}
\ No newline at end of file
diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/rule/vo/databridge/IotDataBridgeSaveReqVO.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/rule/vo/databridge/IotDataBridgeSaveReqVO.java
deleted file mode 100644
index 8441701..0000000
--- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/rule/vo/databridge/IotDataBridgeSaveReqVO.java
+++ /dev/null
@@ -1,46 +0,0 @@
-package cn.iocoder.yudao.module.iot.controller.admin.rule.vo.databridge;
-
-import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
-import cn.iocoder.yudao.framework.common.validation.InEnum;
-import cn.iocoder.yudao.module.iot.controller.admin.rule.vo.databridge.config.IotDataBridgeAbstractConfig;
-import cn.iocoder.yudao.module.iot.enums.rule.IotDataBridgeDirectionEnum;
-import cn.iocoder.yudao.module.iot.enums.rule.IotDataBridgeTypeEnum;
-import io.swagger.v3.oas.annotations.media.Schema;
-import jakarta.validation.constraints.NotEmpty;
-import jakarta.validation.constraints.NotNull;
-import lombok.Data;
-
-@Schema(description = "管理后台 - IoT 数据桥梁新增/修改 Request VO")
-@Data
-public class IotDataBridgeSaveReqVO {
-
- @Schema(description = "桥梁编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "18564")
- private Long id;
-
- @Schema(description = "桥梁名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "赵六")
- @NotEmpty(message = "桥梁名称不能为空")
- private String name;
-
- @Schema(description = "桥梁描述", example = "随便")
- private String description;
-
- @Schema(description = "桥梁状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
- @NotNull(message = "桥梁状态不能为空")
- @InEnum(CommonStatusEnum.class)
- private Integer status;
-
- @Schema(description = "桥梁方向", requiredMode = Schema.RequiredMode.REQUIRED)
- @NotNull(message = "桥梁方向不能为空")
- @InEnum(IotDataBridgeDirectionEnum.class)
- private Integer direction;
-
- @Schema(description = "桥梁类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
- @NotNull(message = "桥梁类型不能为空")
- @InEnum(IotDataBridgeTypeEnum.class)
- private Integer type;
-
- @Schema(description = "桥梁配置")
- @NotNull(message = "桥梁配置不能为空")
- private IotDataBridgeAbstractConfig config;
-
-}
\ No newline at end of file
diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/rule/vo/package-info.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/rule/vo/package-info.java
deleted file mode 100644
index f397e0a..0000000
--- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/rule/vo/package-info.java
+++ /dev/null
@@ -1,2 +0,0 @@
-// TODO @芋艿:占位
-package cn.iocoder.yudao.module.iot.controller.admin.rule.vo;
\ No newline at end of file
diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/rule/vo/scene/IotSceneRulePageReqVO.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/rule/vo/scene/IotSceneRulePageReqVO.java
new file mode 100644
index 0000000..8345004
--- /dev/null
+++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/rule/vo/scene/IotSceneRulePageReqVO.java
@@ -0,0 +1,36 @@
+package cn.iocoder.yudao.module.iot.controller.admin.rule.vo.scene;
+
+import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+import cn.iocoder.yudao.framework.common.validation.InEnum;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.ToString;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.time.LocalDateTime;
+
+import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
+
+@Schema(description = "管理后台 - IoT 场景联动分页 Request VO")
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+public class IotSceneRulePageReqVO extends PageParam {
+
+ @Schema(description = "场景名称", example = "赵六")
+ private String name;
+
+ @Schema(description = "场景描述", example = "你猜")
+ private String description;
+
+ @Schema(description = "场景状态", example = "1")
+ @InEnum(CommonStatusEnum.class)
+ private Integer status;
+
+ @Schema(description = "创建时间")
+ @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+ private LocalDateTime[] createTime;
+
+}
\ No newline at end of file
diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/rule/vo/scene/IotSceneRuleRespVO.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/rule/vo/scene/IotSceneRuleRespVO.java
new file mode 100644
index 0000000..835ef62
--- /dev/null
+++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/rule/vo/scene/IotSceneRuleRespVO.java
@@ -0,0 +1,35 @@
+package cn.iocoder.yudao.module.iot.controller.admin.rule.vo.scene;
+
+import cn.iocoder.yudao.module.iot.dal.dataobject.rule.IotSceneRuleDO;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+import java.util.List;
+
+@Schema(description = "管理后台 - IoT 场景联动 Response VO")
+@Data
+public class IotSceneRuleRespVO {
+
+ @Schema(description = "场景编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "15865")
+ private Long id;
+
+ @Schema(description = "场景名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "赵六")
+ private String name;
+
+ @Schema(description = "场景描述", example = "你猜")
+ private String description;
+
+ @Schema(description = "场景状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+ private Integer status;
+
+ @Schema(description = "触发器数组", requiredMode = Schema.RequiredMode.REQUIRED)
+ private List triggers;
+
+ @Schema(description = "执行器数组", requiredMode = Schema.RequiredMode.REQUIRED)
+ private List actions;
+
+ @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
+ private LocalDateTime createTime;
+
+}
\ No newline at end of file
diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/rule/vo/scene/IotSceneRuleSaveReqVO.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/rule/vo/scene/IotSceneRuleSaveReqVO.java
new file mode 100644
index 0000000..4a5f1ed
--- /dev/null
+++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/rule/vo/scene/IotSceneRuleSaveReqVO.java
@@ -0,0 +1,40 @@
+package cn.iocoder.yudao.module.iot.controller.admin.rule.vo.scene;
+
+import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
+import cn.iocoder.yudao.framework.common.validation.InEnum;
+import cn.iocoder.yudao.module.iot.dal.dataobject.rule.IotSceneRuleDO;
+import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotEmpty;
+import jakarta.validation.constraints.NotNull;
+import lombok.Data;
+
+import java.util.List;
+
+@Schema(description = "管理后台 - IoT 场景联动新增/修改 Request VO")
+@Data
+public class IotSceneRuleSaveReqVO {
+
+ @Schema(description = "场景编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "15865")
+ private Long id;
+
+ @Schema(description = "场景名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "赵六")
+ @NotEmpty(message = "场景名称不能为空")
+ private String name;
+
+ @Schema(description = "场景描述", example = "你猜")
+ private String description;
+
+ @Schema(description = "场景状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
+ @NotNull(message = "场景状态不能为空")
+ @InEnum(CommonStatusEnum.class)
+ private Integer status;
+
+ @Schema(description = "触发器数组", requiredMode = Schema.RequiredMode.REQUIRED)
+ @NotEmpty(message = "触发器数组不能为空")
+ private List triggers;
+
+ @Schema(description = "执行器数组", requiredMode = Schema.RequiredMode.REQUIRED)
+ @NotEmpty(message = "执行器数组不能为空")
+ private List actions;
+
+}
\ No newline at end of file
diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/rule/vo/scene/IotSceneRuleUpdateStatusReqVO.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/rule/vo/scene/IotSceneRuleUpdateStatusReqVO.java
new file mode 100644
index 0000000..ea3721f
--- /dev/null
+++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/rule/vo/scene/IotSceneRuleUpdateStatusReqVO.java
@@ -0,0 +1,22 @@
+package cn.iocoder.yudao.module.iot.controller.admin.rule.vo.scene;
+
+import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
+import cn.iocoder.yudao.framework.common.validation.InEnum;
+import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotNull;
+import lombok.Data;
+
+@Schema(description = "管理后台 - IoT 场景联动更新状态 Request VO")
+@Data
+public class IotSceneRuleUpdateStatusReqVO {
+
+ @Schema(description = "场景联动编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
+ @NotNull(message = "场景联动编号不能为空")
+ private Long id;
+
+ @Schema(description = "状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "0")
+ @NotNull(message = "状态不能为空")
+ @InEnum(value = CommonStatusEnum.class, message = "修改状态必须是 {value}")
+ private Integer status;
+
+}
diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/statistics/IotStatisticsController.http b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/statistics/IotStatisticsController.http
new file mode 100644
index 0000000..b8cb6b5
--- /dev/null
+++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/statistics/IotStatisticsController.http
@@ -0,0 +1,11 @@
+### 请求 /iot/statistics/get-device-message-summary-by-date 接口(小时)
+GET {{baseUrl}}/iot/statistics/get-device-message-summary-by-date?interval=0×[0]=2025-06-13 00:00:00×[1]=2025-06-14 23:59:59
+Content-Type: application/json
+tenant-id: {{adminTenantId}}
+Authorization: Bearer {{token}}
+
+### 请求 /iot/statistics/get-device-message-summary-by-date 接口(天)
+GET {{baseUrl}}/iot/statistics/get-device-message-summary-by-date?interval=1×[0]=2025-06-13 00:00:00×[1]=2025-06-14 23:59:59
+Content-Type: application/json
+tenant-id: {{adminTenantId}}
+Authorization: Bearer {{token}}
diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/statistics/IotStatisticsController.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/statistics/IotStatisticsController.java
index a9c1956..22837c4 100644
--- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/statistics/IotStatisticsController.java
+++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/statistics/IotStatisticsController.java
@@ -1,12 +1,13 @@
package cn.iocoder.yudao.module.iot.controller.admin.statistics;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
-import cn.iocoder.yudao.module.iot.controller.admin.statistics.vo.IotStatisticsDeviceMessageSummaryRespVO;
-import cn.iocoder.yudao.module.iot.controller.admin.statistics.vo.IotStatisticsReqVO;
+import cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils;
+import cn.iocoder.yudao.module.iot.controller.admin.statistics.vo.IotStatisticsDeviceMessageReqVO;
+import cn.iocoder.yudao.module.iot.controller.admin.statistics.vo.IotStatisticsDeviceMessageSummaryByDateRespVO;
import cn.iocoder.yudao.module.iot.controller.admin.statistics.vo.IotStatisticsSummaryRespVO;
-import cn.iocoder.yudao.module.iot.enums.device.IotDeviceStateEnum;
+import cn.iocoder.yudao.module.iot.core.enums.IotDeviceStateEnum;
import cn.iocoder.yudao.module.iot.service.device.IotDeviceService;
-import cn.iocoder.yudao.module.iot.service.device.data.IotDeviceLogService;
+import cn.iocoder.yudao.module.iot.service.device.message.IotDeviceMessageService;
import cn.iocoder.yudao.module.iot.service.product.IotProductCategoryService;
import cn.iocoder.yudao.module.iot.service.product.IotProductService;
import io.swagger.v3.oas.annotations.Operation;
@@ -19,9 +20,10 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.time.LocalDateTime;
+import java.util.List;
import java.util.Map;
-import static cn.iocoder.yudao.framework.common.pojo.CommonResult.*;
+import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
@Tag(name = "管理后台 - IoT 数据统计")
@RestController
@@ -36,24 +38,23 @@ public class IotStatisticsController {
@Resource
private IotProductService productService;
@Resource
- private IotDeviceLogService deviceLogService;
+ private IotDeviceMessageService deviceMessageService;
@GetMapping("/get-summary")
- @Operation(summary = "获取 IoT 数据统计")
- public CommonResult getIotStatisticsSummary(){
+ @Operation(summary = "获取全局的数据统计")
+ public CommonResult getStatisticsSummary(){
IotStatisticsSummaryRespVO respVO = new IotStatisticsSummaryRespVO();
// 1.1 获取总数
respVO.setProductCategoryCount(productCategoryService.getProductCategoryCount(null));
respVO.setProductCount(productService.getProductCount(null));
respVO.setDeviceCount(deviceService.getDeviceCount(null));
- respVO.setDeviceMessageCount(deviceLogService.getDeviceLogCount(null));
+ respVO.setDeviceMessageCount(deviceMessageService.getDeviceMessageCount(null));
// 1.2 获取今日新增数量
- // TODO @super:使用 LocalDateTimeUtils.getToday()
- LocalDateTime todayStart = LocalDateTime.now().withHour(0).withMinute(0).withSecond(0);
+ LocalDateTime todayStart = LocalDateTimeUtils.getToday();
respVO.setProductCategoryTodayCount(productCategoryService.getProductCategoryCount(todayStart));
respVO.setProductTodayCount(productService.getProductCount(todayStart));
respVO.setDeviceTodayCount(deviceService.getDeviceCount(todayStart));
- respVO.setDeviceMessageTodayCount(deviceLogService.getDeviceLogCount(todayStart));
+ respVO.setDeviceMessageTodayCount(deviceMessageService.getDeviceMessageCount(todayStart));
// 2. 获取各个品类下设备数量统计
respVO.setProductCategoryDeviceCounts(productCategoryService.getProductCategoryDeviceCountMap());
@@ -66,14 +67,11 @@ public class IotStatisticsController {
return success(respVO);
}
- // TODO @super:要不干掉 IotStatisticsReqVO 参数,直接使用 @RequestParam 接收,简单一些。
- @GetMapping("/get-log-summary")
- @Operation(summary = "获取 IoT 设备上下行消息数据统计")
- public CommonResult getIotStatisticsDeviceMessageSummary(
- @Valid IotStatisticsReqVO reqVO) {
- return success(new IotStatisticsDeviceMessageSummaryRespVO()
- .setDownstreamCounts(deviceLogService.getDeviceLogUpCountByHour(null, reqVO.getStartTime(), reqVO.getEndTime()))
- .setDownstreamCounts((deviceLogService.getDeviceLogDownCountByHour(null, reqVO.getStartTime(), reqVO.getEndTime()))));
+ @GetMapping("/get-device-message-summary-by-date")
+ @Operation(summary = "获取设备消息的数据统计")
+ public CommonResult> getDeviceMessageSummaryByDate(
+ @Valid IotStatisticsDeviceMessageReqVO reqVO) {
+ return success(deviceMessageService.getDeviceMessageSummaryByDate(reqVO));
}
}
diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/statistics/vo/IotStatisticsDeviceMessageReqVO.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/statistics/vo/IotStatisticsDeviceMessageReqVO.java
new file mode 100644
index 0000000..73f83e7
--- /dev/null
+++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/statistics/vo/IotStatisticsDeviceMessageReqVO.java
@@ -0,0 +1,27 @@
+package cn.iocoder.yudao.module.iot.controller.admin.statistics.vo;
+
+import cn.iocoder.yudao.framework.common.enums.DateIntervalEnum;
+import cn.iocoder.yudao.framework.common.validation.InEnum;
+import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.Size;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.time.LocalDateTime;
+
+import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
+
+@Schema(description = "管理后台 - IoT 设备消息数量统计 Response VO")
+@Data
+public class IotStatisticsDeviceMessageReqVO {
+
+ @Schema(description = "时间间隔类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+ @InEnum(value = DateIntervalEnum.class, message = "时间间隔类型,必须是 {value}")
+ private Integer interval;
+
+ @Schema(description = "时间范围", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
+ @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+ @Size(min = 2, max = 2, message = "请选择时间范围")
+ private LocalDateTime[] times;
+
+}
diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/statistics/vo/IotStatisticsDeviceMessageSummaryByDateRespVO.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/statistics/vo/IotStatisticsDeviceMessageSummaryByDateRespVO.java
new file mode 100644
index 0000000..9c605dd
--- /dev/null
+++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/statistics/vo/IotStatisticsDeviceMessageSummaryByDateRespVO.java
@@ -0,0 +1,19 @@
+package cn.iocoder.yudao.module.iot.controller.admin.statistics.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+@Schema(description = "管理后台 - IoT 设备消息数量统计 Response VO")
+@Data
+public class IotStatisticsDeviceMessageSummaryByDateRespVO {
+
+ @Schema(description = "时间轴", requiredMode = Schema.RequiredMode.REQUIRED, example = "202401")
+ private String time;
+
+ @Schema(description = "上行消息数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "10")
+ private Integer upstreamCount;
+
+ @Schema(description = "上行消息数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "20")
+ private Integer downstreamCount;
+
+}
diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/statistics/vo/IotStatisticsDeviceMessageSummaryRespVO.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/statistics/vo/IotStatisticsDeviceMessageSummaryRespVO.java
deleted file mode 100644
index 15d2abc..0000000
--- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/statistics/vo/IotStatisticsDeviceMessageSummaryRespVO.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package cn.iocoder.yudao.module.iot.controller.admin.statistics.vo;
-
-import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.Data;
-
-import java.util.List;
-import java.util.Map;
-
-@Schema(description = "管理后台 - IoT 设备上下行消息数量统计 Response VO")
-@Data
-public class IotStatisticsDeviceMessageSummaryRespVO {
-
- @Schema(description = "每小时上行数据数量统计")
- private List