From 5399e5bba0d4673c763b90dc50ab38ec29a5dbbe Mon Sep 17 00:00:00 2001 From: YunaiV Date: Tue, 1 Jul 2025 00:33:02 +0800 Subject: [PATCH] =?UTF-8?q?reactor=EF=BC=9A=E3=80=90IoT=20=E7=89=A9?= =?UTF-8?q?=E8=81=94=E7=BD=91=E3=80=91=E8=B0=83=E6=95=B4=20ota=20=E7=9A=84?= =?UTF-8?q?=20task=20=E5=AE=9E=E4=BD=93=E5=AE=9A=E4=B9=89=EF=BC=88?= =?UTF-8?q?=E6=9A=82=E6=97=B6=E6=9C=AA=E5=A4=84=E7=90=86=20controller?= =?UTF-8?q?=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/ota/IotOtaFirmwareController.java | 2 +- .../ota/IotOtaUpgradeRecordController.java | 15 +--- .../ota/IotOtaUpgradeTaskController.java | 6 +- .../record/IotOtaUpgradeRecordRespVO.java | 7 +- .../task/IotOtaUpgradeTaskPageReqVO.java | 14 +--- .../upgrade/task/IotOtaUpgradeTaskRespVO.java | 58 +++----------- .../task/IotOtaUpgradeTaskSaveReqVO.java | 38 ++------- ...taUpgradeTaskDO.java => IotOtaTaskDO.java} | 32 ++++---- ...eRecordDO.java => IotOtaTaskRecordDO.java} | 29 +++---- .../mysql/ota/IotOtaUpgradeRecordMapper.java | 78 ++++--------------- .../mysql/ota/IotOtaUpgradeTaskMapper.java | 24 +++--- ...um.java => IotOtaTaskDeviceScopeEnum.java} | 7 +- ...m.java => IotOtaTaskRecordStatusEnum.java} | 13 ++-- .../iot/enums/ota/IotOtaTaskStatusEnum.java | 35 +++++++++ .../ota/IotOtaUpgradeTaskStatusEnum.java | 35 --------- .../ota/IotOtaUpgradeRecordService.java | 42 +--------- .../ota/IotOtaUpgradeRecordServiceImpl.java | 76 +++++------------- .../service/ota/IotOtaUpgradeTaskService.java | 8 +- .../ota/IotOtaUpgradeTaskServiceImpl.java | 50 ++++++------ 19 files changed, 177 insertions(+), 392 deletions(-) rename yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/dataobject/ota/{IotOtaUpgradeTaskDO.java => IotOtaTaskDO.java} (50%) rename yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/dataobject/ota/{IotOtaUpgradeRecordDO.java => IotOtaTaskRecordDO.java} (62%) rename yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/enums/ota/{IotOtaUpgradeTaskScopeEnum.java => IotOtaTaskDeviceScopeEnum.java} (74%) rename yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/enums/ota/{IotOtaUpgradeRecordStatusEnum.java => IotOtaTaskRecordStatusEnum.java} (68%) create mode 100644 yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/enums/ota/IotOtaTaskStatusEnum.java delete mode 100644 yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/enums/ota/IotOtaUpgradeTaskStatusEnum.java diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/ota/IotOtaFirmwareController.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/ota/IotOtaFirmwareController.java index 6cc3918e8f..a2a5a114e7 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/ota/IotOtaFirmwareController.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/ota/IotOtaFirmwareController.java @@ -21,7 +21,7 @@ import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; @Tag(name = "管理后台 - IoT OTA 固件") @RestController -@RequestMapping("/iot/ota-firmware") +@RequestMapping("/iot/ota/firmware") @Validated public class IotOtaFirmwareController { diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/ota/IotOtaUpgradeRecordController.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/ota/IotOtaUpgradeRecordController.java index f6bc526ac2..855391b28a 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/ota/IotOtaUpgradeRecordController.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/ota/IotOtaUpgradeRecordController.java @@ -5,7 +5,7 @@ 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.ota.vo.upgrade.record.IotOtaUpgradeRecordPageReqVO; import cn.iocoder.yudao.module.iot.controller.admin.ota.vo.upgrade.record.IotOtaUpgradeRecordRespVO; -import cn.iocoder.yudao.module.iot.dal.dataobject.ota.IotOtaUpgradeRecordDO; +import cn.iocoder.yudao.module.iot.dal.dataobject.ota.IotOtaTaskRecordDO; import cn.iocoder.yudao.module.iot.service.ota.IotOtaUpgradeRecordService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; @@ -50,7 +50,7 @@ public class IotOtaUpgradeRecordController { @PreAuthorize("@ss.hasPermission('iot:ota-upgrade-record:query')") public CommonResult> getUpgradeRecordPage( @Valid IotOtaUpgradeRecordPageReqVO pageReqVO) { - PageResult pageResult = upgradeRecordService.getUpgradeRecordPage(pageReqVO); + PageResult pageResult = upgradeRecordService.getUpgradeRecordPage(pageReqVO); return success(BeanUtils.toBean(pageResult, IotOtaUpgradeRecordRespVO.class)); } @@ -59,17 +59,8 @@ public class IotOtaUpgradeRecordController { @PreAuthorize("@ss.hasPermission('iot:ota-upgrade-record:query')") @Parameter(name = "id", description = "升级记录编号", required = true, example = "1024") public CommonResult getUpgradeRecord(@RequestParam("id") Long id) { - IotOtaUpgradeRecordDO upgradeRecord = upgradeRecordService.getUpgradeRecord(id); + IotOtaTaskRecordDO upgradeRecord = upgradeRecordService.getUpgradeRecord(id); return success(BeanUtils.toBean(upgradeRecord, IotOtaUpgradeRecordRespVO.class)); } - @PutMapping("/retry") - @Operation(summary = "重试升级记录") - @PreAuthorize("@ss.hasPermission('iot:ota-upgrade-record:retry')") - @Parameter(name = "id", description = "升级记录编号", required = true, example = "1024") - public CommonResult retryUpgradeRecord(@RequestParam("id") Long id) { - upgradeRecordService.retryUpgradeRecord(id); - return success(true); - } - } diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/ota/IotOtaUpgradeTaskController.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/ota/IotOtaUpgradeTaskController.java index e248e80274..834723700b 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/ota/IotOtaUpgradeTaskController.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/ota/IotOtaUpgradeTaskController.java @@ -6,7 +6,7 @@ import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.module.iot.controller.admin.ota.vo.upgrade.task.IotOtaUpgradeTaskPageReqVO; import cn.iocoder.yudao.module.iot.controller.admin.ota.vo.upgrade.task.IotOtaUpgradeTaskRespVO; import cn.iocoder.yudao.module.iot.controller.admin.ota.vo.upgrade.task.IotOtaUpgradeTaskSaveReqVO; -import cn.iocoder.yudao.module.iot.dal.dataobject.ota.IotOtaUpgradeTaskDO; +import cn.iocoder.yudao.module.iot.dal.dataobject.ota.IotOtaTaskDO; import cn.iocoder.yudao.module.iot.service.ota.IotOtaUpgradeTaskService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; @@ -48,7 +48,7 @@ public class IotOtaUpgradeTaskController { @Operation(summary = "获得升级任务分页") @PreAuthorize(value = "@ss.hasPermission('iot:ota-upgrade-task:query')") public CommonResult> getUpgradeTaskPage(@Valid IotOtaUpgradeTaskPageReqVO pageReqVO) { - PageResult pageResult = upgradeTaskService.getUpgradeTaskPage(pageReqVO); + PageResult pageResult = upgradeTaskService.getUpgradeTaskPage(pageReqVO); return success(BeanUtils.toBean(pageResult, IotOtaUpgradeTaskRespVO.class)); } @@ -57,7 +57,7 @@ public class IotOtaUpgradeTaskController { @Parameter(name = "id", description = "升级任务编号", required = true, example = "1024") @PreAuthorize(value = "@ss.hasPermission('iot:ota-upgrade-task:query')") public CommonResult getUpgradeTask(@RequestParam("id") Long id) { - IotOtaUpgradeTaskDO upgradeTask = upgradeTaskService.getUpgradeTask(id); + IotOtaTaskDO 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/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 index ba2a40aa81..0f7ddc75f6 100644 --- 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 @@ -3,7 +3,8 @@ 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.device.IotDeviceMessageDO; import cn.iocoder.yudao.module.iot.dal.dataobject.ota.IotOtaFirmwareDO; -import cn.iocoder.yudao.module.iot.dal.dataobject.ota.IotOtaUpgradeTaskDO; +import cn.iocoder.yudao.module.iot.dal.dataobject.ota.IotOtaTaskDO; +import cn.iocoder.yudao.module.iot.enums.ota.IotOtaTaskRecordStatusEnum; import com.fhs.core.trans.anno.Trans; import com.fhs.core.trans.constant.TransType; import io.swagger.v3.oas.annotations.media.Schema; @@ -36,7 +37,7 @@ public class IotOtaUpgradeRecordRespVO { /** * 任务编号 *

- * 关联 {@link IotOtaUpgradeTaskDO#getId()} + * 关联 {@link IotOtaTaskDO#getId()} */ @Schema(description = "任务编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") private Long taskId; @@ -77,7 +78,7 @@ public class IotOtaUpgradeRecordRespVO { /** * 升级状态 *

- * 关联 {@link cn.iocoder.yudao.module.iot.enums.ota.IotOtaUpgradeRecordStatusEnum} + * 关联 {@link IotOtaTaskRecordStatusEnum} */ @Schema(description = "升级状态", requiredMode = Schema.RequiredMode.REQUIRED, allowableValues = {"0", "10", "20", "30", "40", "50"}) 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/upgrade/task/IotOtaUpgradeTaskPageReqVO.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/ota/vo/upgrade/task/IotOtaUpgradeTaskPageReqVO.java index 8abdd59370..9ce36b27e3 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/upgrade/task/IotOtaUpgradeTaskPageReqVO.java @@ -9,17 +9,11 @@ import lombok.Data; @Schema(description = "管理后台 - IoT OTA 升级任务分页 Request VO") public class IotOtaUpgradeTaskPageReqVO extends PageParam { - /** - * 任务名称字段,用于描述任务的名称 - */ + @Schema(description = "固件编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + @NotNull(message = "固件编号不能为空") + private Long firmwareId; + @Schema(description = "任务名称", example = "升级任务") private String name; - /** - * 固件编号字段,用于唯一标识固件,不能为空 - */ - @NotNull(message = "固件编号不能为空") - @Schema(description = "固件编号", requiredMode = Schema.RequiredMode.REQUIRED, 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/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 index 6a32522ac3..666e17cb39 100644 --- 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 @@ -1,7 +1,5 @@ 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; @@ -13,69 +11,33 @@ import java.util.List; @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"}) + + @Schema(description = "任务状态", requiredMode = Schema.RequiredMode.REQUIRED) 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/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/upgrade/task/IotOtaUpgradeTaskSaveReqVO.java index e8cdbefa46..ebf49cbe92 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/upgrade/task/IotOtaUpgradeTaskSaveReqVO.java @@ -1,9 +1,7 @@ package cn.iocoder.yudao.module.iot.controller.admin.ota.vo.upgrade.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,27 @@ import lombok.Data; import java.util.List; -@Data @Schema(description = "管理后台 - IoT OTA 升级任务创建/修改 Request VO") +@Data public class IotOtaUpgradeTaskSaveReqVO { - // 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") + @NotNull(message = "升级范围不能为空") + @InEnum(value = IotOtaTaskDeviceScopeEnum.class) private Integer scope; - /** - * 选中的设备编号数组 - *

- * 关联 {@link IotDeviceDO#getId()} - */ - @Schema(description = "选中的设备编号数组", requiredMode = Schema.RequiredMode.REQUIRED, example = "[1,2,3,4]") + @Schema(description = "选中的设备编号数组", requiredMode = Schema.RequiredMode.REQUIRED, example = "1,2,3") private List deviceIds; } diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/dataobject/ota/IotOtaUpgradeTaskDO.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/dataobject/ota/IotOtaTaskDO.java similarity index 50% rename from yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/dataobject/ota/IotOtaUpgradeTaskDO.java rename to yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/dataobject/ota/IotOtaTaskDO.java index 6f59f3f931..d2452950af 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/dataobject/ota/IotOtaUpgradeTaskDO.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/dataobject/ota/IotOtaTaskDO.java @@ -1,31 +1,28 @@ package cn.iocoder.yudao.module.iot.dal.dataobject.ota; import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; -import cn.iocoder.yudao.module.iot.dal.dataobject.device.IotDeviceDO; +import cn.iocoder.yudao.module.iot.enums.ota.IotOtaTaskDeviceScopeEnum; +import cn.iocoder.yudao.module.iot.enums.ota.IotOtaTaskStatusEnum; import com.baomidou.mybatisplus.annotation.KeySequence; -import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; -import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; -import java.util.List; - /** * IoT OTA 升级任务 DO * * @author 芋道源码 */ -@TableName(value = "iot_ota_upgrade_task", autoResultMap = true) -@KeySequence("iot_ota_upgrade_task_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@TableName(value = "iot_ota_task", autoResultMap = true) +@KeySequence("iot_ota_task_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 @Data @Builder @NoArgsConstructor @AllArgsConstructor -public class IotOtaUpgradeTaskDO extends BaseDO { +public class IotOtaTaskDO extends BaseDO { /** * 任务编号 @@ -51,26 +48,23 @@ public class IotOtaUpgradeTaskDO extends BaseDO { /** * 任务状态 *

- * 关联 {@link cn.iocoder.yudao.module.iot.enums.ota.IotOtaUpgradeTaskStatusEnum} + * 关联 {@link IotOtaTaskStatusEnum} */ private Integer status; /** - * 升级范围 + * 设备升级范围 *

- * 关联 {@link cn.iocoder.yudao.module.iot.enums.ota.IotOtaUpgradeTaskScopeEnum} + * 关联 {@link IotOtaTaskDeviceScopeEnum} */ - private Integer scope; + private Integer deviceScope; /** - * 设备数量 + * 设备总数数量 */ - private Long deviceCount; + private Long deviceTotalCount; /** - * 选中的设备编号数组 - *

- * 关联 {@link IotDeviceDO#getId()} + * 设备成功数量 */ - @TableField(typeHandler = JacksonTypeHandler.class) - private List deviceIds; + private Integer deviceSuccessCount; } diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/dataobject/ota/IotOtaUpgradeRecordDO.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/dataobject/ota/IotOtaTaskRecordDO.java similarity index 62% rename from yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/dataobject/ota/IotOtaUpgradeRecordDO.java rename to yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/dataobject/ota/IotOtaTaskRecordDO.java index 02c4a0157f..8cd0173396 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/dataobject/ota/IotOtaUpgradeRecordDO.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/dataobject/ota/IotOtaTaskRecordDO.java @@ -3,6 +3,7 @@ package cn.iocoder.yudao.module.iot.dal.dataobject.ota; import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; import cn.iocoder.yudao.module.iot.dal.dataobject.device.IotDeviceDO; import cn.iocoder.yudao.module.iot.dal.dataobject.device.IotDeviceMessageDO; +import cn.iocoder.yudao.module.iot.enums.ota.IotOtaTaskRecordStatusEnum; import com.baomidou.mybatisplus.annotation.KeySequence; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; @@ -11,17 +12,17 @@ import lombok.*; import java.time.LocalDateTime; /** - * IoT OTA 升级记录 DO + * IoT OTA 升级任务记录 DO * * @author 芋道源码 */ -@TableName(value = "iot_ota_upgrade_record", autoResultMap = true) -@KeySequence("iot_ota_upgrade_record_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@TableName(value = "iot_ota_task_record", autoResultMap = true) +@KeySequence("iot_ota_task_record_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 @Data @Builder @NoArgsConstructor @AllArgsConstructor -public class IotOtaUpgradeRecordDO extends BaseDO { +public class IotOtaTaskRecordDO extends BaseDO { @TableId private Long id; @@ -35,28 +36,16 @@ public class IotOtaUpgradeRecordDO extends BaseDO { /** * 任务编号 * - * 关联 {@link IotOtaUpgradeTaskDO#getId()} + * 关联 {@link IotOtaTaskDO#getId()} */ private Long taskId; - /** - * 产品标识 - * - * 关联 {@link cn.iocoder.yudao.module.iot.dal.dataobject.product.IotProductDO#getId()} - */ - private String productKey; - /** - * 设备名称 - * - * 关联 {@link cn.iocoder.yudao.module.iot.dal.dataobject.device.IotDeviceDO#getId()} - */ - private String deviceName; /** * 设备编号 * - * 关联 {@link cn.iocoder.yudao.module.iot.dal.dataobject.device.IotDeviceDO#getId()} + * 关联 {@link IotDeviceDO#getId()} */ - private String deviceId; + private Long deviceId; /** * 来源的固件编号 * @@ -67,7 +56,7 @@ public class IotOtaUpgradeRecordDO extends BaseDO { /** * 升级状态 * - * 关联 {@link cn.iocoder.yudao.module.iot.enums.ota.IotOtaUpgradeRecordStatusEnum} + * 关联 {@link IotOtaTaskRecordStatusEnum} */ private Integer status; /** diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/mysql/ota/IotOtaUpgradeRecordMapper.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/mysql/ota/IotOtaUpgradeRecordMapper.java index 5e5d8200f4..81bb604c6d 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/mysql/ota/IotOtaUpgradeRecordMapper.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/mysql/ota/IotOtaUpgradeRecordMapper.java @@ -4,7 +4,7 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; import cn.iocoder.yudao.module.iot.controller.admin.ota.vo.upgrade.record.IotOtaUpgradeRecordPageReqVO; -import cn.iocoder.yudao.module.iot.dal.dataobject.ota.IotOtaUpgradeRecordDO; +import cn.iocoder.yudao.module.iot.dal.dataobject.ota.IotOtaTaskRecordDO; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; @@ -14,7 +14,7 @@ import java.util.List; import java.util.Map; @Mapper -public interface IotOtaUpgradeRecordMapper extends BaseMapperX { +public interface IotOtaUpgradeRecordMapper extends BaseMapperX { // TODO @li:selectByFirmwareIdAndTaskIdAndDeviceId;让方法自解释 /** @@ -25,12 +25,12 @@ public interface IotOtaUpgradeRecordMapper extends BaseMapperX() - .eqIfPresent(IotOtaUpgradeRecordDO::getFirmwareId, firmwareId) - .eqIfPresent(IotOtaUpgradeRecordDO::getTaskId, taskId) - .eqIfPresent(IotOtaUpgradeRecordDO::getDeviceId, deviceId)); + return selectOne(new LambdaQueryWrapperX() + .eqIfPresent(IotOtaTaskRecordDO::getFirmwareId, firmwareId) + .eqIfPresent(IotOtaTaskRecordDO::getTaskId, taskId) + .eqIfPresent(IotOtaTaskRecordDO::getDeviceId, deviceId)); } // TODO @li:这个是不是 groupby status 就 ok 拉? @@ -80,12 +80,12 @@ public interface IotOtaUpgradeRecordMapper extends BaseMapperX selectUpgradeRecordPage(IotOtaUpgradeRecordPageReqVO pageReqVO) { + default PageResult selectUpgradeRecordPage(IotOtaUpgradeRecordPageReqVO pageReqVO) { // TODO @li:这里的注释,可以去掉哈;然后下面的“如果”。。。也没必要注释 // 使用LambdaQueryWrapperX构建查询条件,并根据请求参数动态添加查询条件 - return selectPage(pageReqVO, new LambdaQueryWrapperX() - .likeIfPresent(IotOtaUpgradeRecordDO::getDeviceName, pageReqVO.getDeviceName()) // 如果设备名称存在,则添加模糊查询条件 - .eqIfPresent(IotOtaUpgradeRecordDO::getTaskId, pageReqVO.getTaskId())); // 如果任务ID存在,则添加等值查询条件 + return selectPage(pageReqVO, new LambdaQueryWrapperX() + .likeIfPresent(IotOtaTaskRecordDO::getDeviceName, pageReqVO.getDeviceName()) // 如果设备名称存在,则添加模糊查询条件 + .eqIfPresent(IotOtaTaskRecordDO::getTaskId, pageReqVO.getTaskId())); // 如果任务ID存在,则添加等值查询条件 } // TODO @li:这里的注释,可以去掉哈 @@ -101,59 +101,11 @@ public interface IotOtaUpgradeRecordMapper extends BaseMapperX() - .set(IotOtaUpgradeRecordDO::getStatus, setStatus) - .eq(IotOtaUpgradeRecordDO::getTaskId, taskId) - .eq(IotOtaUpgradeRecordDO::getStatus, whereStatus) + update(new LambdaUpdateWrapper() + .set(IotOtaTaskRecordDO::getStatus, setStatus) + .eq(IotOtaTaskRecordDO::getTaskId, taskId) + .eq(IotOtaTaskRecordDO::getStatus, whereStatus) ); } - // TODO @li:参考上面的建议,调整下这个方法 - /** - * 根据状态查询符合条件的升级记录列表 - *

- * 该函数使用LambdaQueryWrapperX构建查询条件,查询指定状态的升级记录。 - * - * @param state 升级记录的状态,用于筛选符合条件的记录 - * @return 返回符合指定状态的升级记录列表,类型为List - */ - default List selectUpgradeRecordListByState(Integer state) { - // 使用LambdaQueryWrapperX构建查询条件,根据状态查询符合条件的升级记录 - return selectList(new LambdaQueryWrapperX() - .eq(IotOtaUpgradeRecordDO::getStatus, state)); - } - - // TODO @li:参考上面的建议,调整下这个方法 - /** - * 更新升级记录状态 - *

- * 该函数用于批量更新指定ID列表中的升级记录状态。通过传入的ID列表和状态值,使用LambdaUpdateWrapper构建更新条件, - * 并执行更新操作。 - * - * @param ids 需要更新的升级记录ID列表,类型为List。传入的ID列表中的记录将被更新。 - * @param status 要更新的状态值,类型为Integer。该值将被设置到符合条件的升级记录中。 - */ - default void updateUpgradeRecordStatus(List ids, Integer status) { - // 使用LambdaUpdateWrapper构建更新条件,设置状态字段,并根据ID列表进行筛选 - update(new LambdaUpdateWrapper() - .set(IotOtaUpgradeRecordDO::getStatus, status) - .in(IotOtaUpgradeRecordDO::getId, ids) - ); - } - - // TODO @li:参考上面的建议,调整下这个方法 - /** - * 根据任务ID查询升级记录列表 - *

- * 该函数通过任务ID查询符合条件的升级记录,并返回查询结果列表。 - * - * @param taskId 任务ID,用于筛选升级记录 - * @return 返回符合条件的升级记录列表,若未找到则返回空列表 - */ - default List selectUpgradeRecordListByTaskId(Long taskId) { - // 使用LambdaQueryWrapperX构建查询条件,根据任务ID查询符合条件的升级记录 - return selectList(new LambdaQueryWrapperX() - .eq(IotOtaUpgradeRecordDO::getTaskId, taskId)); - } - } diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/mysql/ota/IotOtaUpgradeTaskMapper.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/mysql/ota/IotOtaUpgradeTaskMapper.java index d955b13619..db778b2773 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/mysql/ota/IotOtaUpgradeTaskMapper.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/mysql/ota/IotOtaUpgradeTaskMapper.java @@ -4,7 +4,7 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; import cn.iocoder.yudao.module.iot.controller.admin.ota.vo.upgrade.task.IotOtaUpgradeTaskPageReqVO; -import cn.iocoder.yudao.module.iot.dal.dataobject.ota.IotOtaUpgradeTaskDO; +import cn.iocoder.yudao.module.iot.dal.dataobject.ota.IotOtaTaskDO; import org.apache.ibatis.annotations.Mapper; import java.util.List; @@ -15,7 +15,7 @@ import java.util.List; * @author Shelly */ @Mapper -public interface IotOtaUpgradeTaskMapper extends BaseMapperX { +public interface IotOtaUpgradeTaskMapper extends BaseMapperX { /** * 根据固件ID和任务名称查询升级任务列表。 @@ -24,10 +24,10 @@ public interface IotOtaUpgradeTaskMapper extends BaseMapperX selectByFirmwareIdAndName(Long firmwareId, String name) { - return selectList(new LambdaQueryWrapperX() - .eqIfPresent(IotOtaUpgradeTaskDO::getFirmwareId, firmwareId) - .eqIfPresent(IotOtaUpgradeTaskDO::getName, name)); + default List selectByFirmwareIdAndName(Long firmwareId, String name) { + return selectList(new LambdaQueryWrapperX() + .eqIfPresent(IotOtaTaskDO::getFirmwareId, firmwareId) + .eqIfPresent(IotOtaTaskDO::getName, name)); } /** @@ -36,10 +36,10 @@ public interface IotOtaUpgradeTaskMapper extends BaseMapperX selectUpgradeTaskPage(IotOtaUpgradeTaskPageReqVO pageReqVO) { - return selectPage(pageReqVO, new LambdaQueryWrapperX() - .eqIfPresent(IotOtaUpgradeTaskDO::getFirmwareId, pageReqVO.getFirmwareId()) - .likeIfPresent(IotOtaUpgradeTaskDO::getName, pageReqVO.getName())); + default PageResult selectUpgradeTaskPage(IotOtaUpgradeTaskPageReqVO pageReqVO) { + return selectPage(pageReqVO, new LambdaQueryWrapperX() + .eqIfPresent(IotOtaTaskDO::getFirmwareId, pageReqVO.getFirmwareId()) + .likeIfPresent(IotOtaTaskDO::getName, pageReqVO.getName())); } /** @@ -50,8 +50,8 @@ public interface IotOtaUpgradeTaskMapper extends BaseMapperX selectUpgradeTaskByState(Integer status) { - return selectList(IotOtaUpgradeTaskDO::getStatus, status); + default List selectUpgradeTaskByState(Integer status) { + return selectList(IotOtaTaskDO::getStatus, status); } } diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/enums/ota/IotOtaUpgradeTaskScopeEnum.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/enums/ota/IotOtaTaskDeviceScopeEnum.java similarity index 74% rename from yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/enums/ota/IotOtaUpgradeTaskScopeEnum.java rename to yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/enums/ota/IotOtaTaskDeviceScopeEnum.java index 6dccbb041c..d9ec270ed5 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/enums/ota/IotOtaUpgradeTaskScopeEnum.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/enums/ota/IotOtaTaskDeviceScopeEnum.java @@ -7,18 +7,19 @@ import lombok.RequiredArgsConstructor; import java.util.Arrays; /** - * IoT OTA 升级任务的范围枚举 + * IoT OTA 升级任务的设备范围枚举 * * @author haohao */ @RequiredArgsConstructor @Getter -public enum IotOtaUpgradeTaskScopeEnum implements ArrayValuable { +public enum IotOtaTaskDeviceScopeEnum implements ArrayValuable { ALL(1), // 全部设备:只包括当前产品下的设备,不包括未来创建的设备 SELECT(2); // 指定设备 - public static final Integer[] ARRAYS = Arrays.stream(values()).map(IotOtaUpgradeTaskScopeEnum::getScope).toArray(Integer[]::new); + public static final Integer[] ARRAYS = Arrays.stream(values()) + .map(IotOtaTaskDeviceScopeEnum::getScope).toArray(Integer[]::new); /** * 范围 diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/enums/ota/IotOtaUpgradeRecordStatusEnum.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/enums/ota/IotOtaTaskRecordStatusEnum.java similarity index 68% rename from yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/enums/ota/IotOtaUpgradeRecordStatusEnum.java rename to yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/enums/ota/IotOtaTaskRecordStatusEnum.java index e809a7e5b2..c95b033d70 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/enums/ota/IotOtaUpgradeRecordStatusEnum.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/enums/ota/IotOtaTaskRecordStatusEnum.java @@ -8,25 +8,26 @@ import lombok.RequiredArgsConstructor; import java.util.Arrays; /** - * IoT OTA 升级记录的范围枚举 + * IoT OTA 升级任务记录的状态枚举 * - * @author haohao + * @author 芋道源码 */ @RequiredArgsConstructor @Getter -public enum IotOtaUpgradeRecordStatusEnum implements ArrayValuable { +public enum IotOtaTaskRecordStatusEnum implements ArrayValuable { PENDING(0), // 待推送 PUSHED(10), // 已推送 UPGRADING(20), // 升级中 SUCCESS(30), // 升级成功 FAILURE(40), // 升级失败 - CANCELED(50),; // 已取消 + CANCELED(50),; // 升级取消 - public static final Integer[] ARRAYS = Arrays.stream(values()).map(IotOtaUpgradeRecordStatusEnum::getStatus).toArray(Integer[]::new); + public static final Integer[] ARRAYS = Arrays.stream(values()) + .map(IotOtaTaskRecordStatusEnum::getStatus).toArray(Integer[]::new); /** - * 范围 + * 状态 */ private final Integer status; diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/enums/ota/IotOtaTaskStatusEnum.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/enums/ota/IotOtaTaskStatusEnum.java new file mode 100644 index 0000000000..65147027e6 --- /dev/null +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/enums/ota/IotOtaTaskStatusEnum.java @@ -0,0 +1,35 @@ +package cn.iocoder.yudao.module.iot.enums.ota; + +import cn.iocoder.yudao.framework.common.core.ArrayValuable; +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +import java.util.Arrays; + +/** + * IoT OTA 升级任务的状态 + * + * @author 芋道源码 + */ +@RequiredArgsConstructor +@Getter +public enum IotOtaTaskStatusEnum implements ArrayValuable { + + IN_PROGRESS(10), // 进行中(升级中) + COMPLETED(20), // 已完成(包括全部成功、部分成功) + CANCELED(30),; // 已取消(一般是主动取消任务) + + public static final Integer[] ARRAYS = Arrays.stream(values()) + .map(IotOtaTaskStatusEnum::getStatus).toArray(Integer[]::new); + + /** + * 状态 + */ + private final Integer status; + + @Override + public Integer[] array() { + return ARRAYS; + } + +} \ No newline at end of file diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/enums/ota/IotOtaUpgradeTaskStatusEnum.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/enums/ota/IotOtaUpgradeTaskStatusEnum.java deleted file mode 100644 index 78af16cb20..0000000000 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/enums/ota/IotOtaUpgradeTaskStatusEnum.java +++ /dev/null @@ -1,35 +0,0 @@ -package cn.iocoder.yudao.module.iot.enums.ota; - -import cn.iocoder.yudao.framework.common.core.ArrayValuable; -import lombok.Getter; -import lombok.RequiredArgsConstructor; - -import java.util.Arrays; - -/** - * IoT OTA 升级任务的范围枚举 - * - * @author haohao - */ -@RequiredArgsConstructor -@Getter -public enum IotOtaUpgradeTaskStatusEnum implements ArrayValuable { - - IN_PROGRESS(10), // 进行中:升级中 - COMPLETED(20), // 已完成:已结束,全部升级完成 - INCOMPLETE(21), // 未完成:已结束,部分升级完成 - CANCELED(30),; // 已取消:一般是主动取消任务 - - public static final Integer[] ARRAYS = Arrays.stream(values()).map(IotOtaUpgradeTaskStatusEnum::getStatus).toArray(Integer[]::new); - - /** - * 范围 - */ - private final Integer status; - - @Override - public Integer[] array() { - return ARRAYS; - } - -} \ No newline at end of file diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/ota/IotOtaUpgradeRecordService.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/ota/IotOtaUpgradeRecordService.java index cbf900ac0a..c27380d0ab 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/ota/IotOtaUpgradeRecordService.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/ota/IotOtaUpgradeRecordService.java @@ -2,7 +2,7 @@ package cn.iocoder.yudao.module.iot.service.ota; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.module.iot.controller.admin.ota.vo.upgrade.record.IotOtaUpgradeRecordPageReqVO; -import cn.iocoder.yudao.module.iot.dal.dataobject.ota.IotOtaUpgradeRecordDO; +import cn.iocoder.yudao.module.iot.dal.dataobject.ota.IotOtaTaskRecordDO; import jakarta.validation.Valid; import java.util.List; @@ -39,20 +39,13 @@ public interface IotOtaUpgradeRecordService { */ Map getOtaUpgradeRecordStatistics(Long firmwareId); - /** - * 重试指定的 OTA 升级记录 - * - * @param id 需要重试的升级记录的ID。 - */ - void retryUpgradeRecord(Long id); - /** * 获取指定 ID 的 OTA 升级记录的详细信息。 * * @param id 需要查询的升级记录的ID。 * @return 返回包含升级记录详细信息的响应对象。 */ - IotOtaUpgradeRecordDO getUpgradeRecord(Long id); + IotOtaTaskRecordDO getUpgradeRecord(Long id); /** * 分页查询 OTA 升级记录。 @@ -60,7 +53,7 @@ public interface IotOtaUpgradeRecordService { * @param pageReqVO 包含分页查询条件的请求对象,必须经过验证。 * @return 返回包含分页查询结果的响应对象。 */ - PageResult getUpgradeRecordPage(@Valid IotOtaUpgradeRecordPageReqVO pageReqVO); + PageResult getUpgradeRecordPage(@Valid IotOtaUpgradeRecordPageReqVO pageReqVO); /** * 根据任务 ID 取消升级记录 @@ -72,33 +65,4 @@ public interface IotOtaUpgradeRecordService { */ void cancelUpgradeRecordByTaskId(Long taskId); - // TODO @li:不要的方法,可以删除下哈。 - /** - * 根据升级状态获取升级记录列表 - * - * @param state 升级状态,用于筛选符合条件的升级记录 - * @return 返回符合指定状态的升级记录列表,列表中的元素为 {@link IotOtaUpgradeRecordDO} 对象 - */ - List getUpgradeRecordListByState(Integer state); - - /** - * 更新升级记录的状态。 - *

- * 该函数用于批量更新指定升级记录的状态。通过传入的ID列表和状态值,将对应的升级记录的状态更新为指定的值。 - * - * @param ids 需要更新状态的升级记录的ID列表。列表中的每个元素代表一个升级记录的ID。 - * @param status 要更新的状态值。该值应为有效的状态标识符,通常为整数类型。 - */ - void updateUpgradeRecordStatus(List ids, Integer status); - - /** - * 根据任务ID获取升级记录列表 - *

- * 该函数通过给定的任务ID,查询并返回与该任务相关的所有升级记录。 - * - * @param taskId 任务ID,用于指定需要查询的任务 - * @return 返回一个包含升级记录的列表,列表中的每个元素为IotOtaUpgradeRecordDO对象 - */ - List getUpgradeRecordListByTaskId(Long taskId); - } diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/ota/IotOtaUpgradeRecordServiceImpl.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/ota/IotOtaUpgradeRecordServiceImpl.java index 32652a8314..0e6d431e27 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/ota/IotOtaUpgradeRecordServiceImpl.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/ota/IotOtaUpgradeRecordServiceImpl.java @@ -6,14 +6,13 @@ import cn.iocoder.yudao.framework.common.util.object.ObjectUtils; import cn.iocoder.yudao.module.iot.controller.admin.ota.vo.upgrade.record.IotOtaUpgradeRecordPageReqVO; 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.IotOtaUpgradeRecordDO; -import cn.iocoder.yudao.module.iot.dal.dataobject.ota.IotOtaUpgradeTaskDO; +import cn.iocoder.yudao.module.iot.dal.dataobject.ota.IotOtaTaskRecordDO; +import cn.iocoder.yudao.module.iot.dal.dataobject.ota.IotOtaTaskDO; import cn.iocoder.yudao.module.iot.dal.mysql.ota.IotOtaUpgradeRecordMapper; -import cn.iocoder.yudao.module.iot.enums.ota.IotOtaUpgradeRecordStatusEnum; +import cn.iocoder.yudao.module.iot.enums.ota.IotOtaTaskRecordStatusEnum; import cn.iocoder.yudao.module.iot.service.device.IotDeviceService; import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; -import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; @@ -47,18 +46,18 @@ public class IotOtaUpgradeRecordServiceImpl implements IotOtaUpgradeRecordServic deviceIds.forEach(deviceId -> validateUpgradeRecordDuplicate(firmwareId, upgradeTaskId, String.valueOf(deviceId))); // 2. 初始化OTA升级记录列表信息 - IotOtaUpgradeTaskDO upgradeTask = upgradeTaskService.getUpgradeTask(upgradeTaskId); + IotOtaTaskDO upgradeTask = upgradeTaskService.getUpgradeTask(upgradeTaskId); IotOtaFirmwareDO firmware = firmwareService.getOtaFirmware(firmwareId); List deviceList = deviceService.getDeviceListByIdList(deviceIds); - List upgradeRecordList = deviceList.stream().map(device -> { - IotOtaUpgradeRecordDO upgradeRecord = new IotOtaUpgradeRecordDO(); + List upgradeRecordList = deviceList.stream().map(device -> { + IotOtaTaskRecordDO upgradeRecord = new IotOtaTaskRecordDO(); upgradeRecord.setFirmwareId(firmware.getId()); upgradeRecord.setTaskId(upgradeTask.getId()); upgradeRecord.setProductKey(device.getProductKey()); upgradeRecord.setDeviceName(device.getDeviceName()); upgradeRecord.setDeviceId(Convert.toStr(device.getId())); upgradeRecord.setFromFirmwareId(Convert.toLong(device.getFirmwareId())); - upgradeRecord.setStatus(IotOtaUpgradeRecordStatusEnum.PENDING.getStatus()); + upgradeRecord.setStatus(IotOtaTaskRecordStatusEnum.PENDING.getStatus()); upgradeRecord.setProgress(0); return upgradeRecord; }).toList(); @@ -88,14 +87,6 @@ public class IotOtaUpgradeRecordServiceImpl implements IotOtaUpgradeRecordServic entry -> Convert.toLong(entry.getValue()))); } - // TODO @li:1)方法注释,简单写;2)父类写了注释,子类就不用写了。。。 - /** - * 获取指定固件ID的OTA升级记录统计信息。 - * 该方法通过查询数据库,统计不同状态的OTA升级记录数量,并返回一个包含各状态数量的映射。 - * - * @param firmwareId 固件ID,用于指定需要统计的固件升级记录。 - * @return 返回一个Map,其中键为升级记录状态(如PENDING、PUSHED等),值为对应状态的记录数量。 - */ @Override @Transactional public Map getOtaUpgradeRecordStatistics(Long firmwareId) { @@ -109,26 +100,12 @@ public class IotOtaUpgradeRecordServiceImpl implements IotOtaUpgradeRecordServic } @Override - public void retryUpgradeRecord(Long id) { - // 1.1 校验升级记录信息是否存在 - IotOtaUpgradeRecordDO upgradeRecord = validateUpgradeRecordExists(id); - // 1.2 校验升级记录是否可以重新升级 - validateUpgradeRecordCanRetry(upgradeRecord); - - // 2. 将一些数据重置,这样定时任务轮询就可以重启任务 - // TODO @li:更新的时候,wherestatus; - upgradeRecordMapper.updateById(new IotOtaUpgradeRecordDO() - .setId(upgradeRecord.getId()).setProgress(0) - .setStatus(IotOtaUpgradeRecordStatusEnum.PENDING.getStatus())); - } - - @Override - public IotOtaUpgradeRecordDO getUpgradeRecord(Long id) { + public IotOtaTaskRecordDO getUpgradeRecord(Long id) { return upgradeRecordMapper.selectById(id); } @Override - public PageResult getUpgradeRecordPage(IotOtaUpgradeRecordPageReqVO pageReqVO) { + public PageResult getUpgradeRecordPage(IotOtaUpgradeRecordPageReqVO pageReqVO) { return upgradeRecordMapper.selectUpgradeRecordPage(pageReqVO); } @@ -136,23 +113,8 @@ public class IotOtaUpgradeRecordServiceImpl implements IotOtaUpgradeRecordServic public void cancelUpgradeRecordByTaskId(Long taskId) { // 暂定只有待推送的升级记录可以取消 TODO @芋艿:可以看看阿里云,哪些可以取消 upgradeRecordMapper.updateUpgradeRecordStatusByTaskIdAndStatus( - IotOtaUpgradeRecordStatusEnum.CANCELED.getStatus(), taskId, - IotOtaUpgradeRecordStatusEnum.PENDING.getStatus()); - } - - @Override - public List getUpgradeRecordListByState(Integer state) { - return upgradeRecordMapper.selectUpgradeRecordListByState(state); - } - - @Override - public void updateUpgradeRecordStatus(List ids, Integer status) { - upgradeRecordMapper.updateUpgradeRecordStatus(ids, status); - } - - @Override - public List getUpgradeRecordListByTaskId(Long taskId) { - return upgradeRecordMapper.selectUpgradeRecordListByTaskId(taskId); + IotOtaTaskRecordStatusEnum.CANCELED.getStatus(), taskId, + IotOtaTaskRecordStatusEnum.PENDING.getStatus()); } /** @@ -163,9 +125,9 @@ public class IotOtaUpgradeRecordServiceImpl implements IotOtaUpgradeRecordServic * @param id 升级记录的唯一标识符,类型为Long。 * @throws cn.iocoder.yudao.framework.common.exception.ServiceException,则抛出异常,异常类型为OTA_UPGRADE_RECORD_NOT_EXISTS。 */ - private IotOtaUpgradeRecordDO validateUpgradeRecordExists(Long id) { + private IotOtaTaskRecordDO validateUpgradeRecordExists(Long id) { // 根据ID查询升级记录 - IotOtaUpgradeRecordDO upgradeRecord = upgradeRecordMapper.selectById(id); + IotOtaTaskRecordDO upgradeRecord = upgradeRecordMapper.selectById(id); // 如果查询结果为空,抛出异常 if (upgradeRecord == null) { throw exception(OTA_UPGRADE_RECORD_NOT_EXISTS); @@ -185,11 +147,11 @@ public class IotOtaUpgradeRecordServiceImpl implements IotOtaUpgradeRecordServic * @param deviceId 设备ID,用于标识特定的设备 */ private void validateUpgradeRecordDuplicate(Long firmwareId, Long taskId, String deviceId) { - IotOtaUpgradeRecordDO upgradeRecord = upgradeRecordMapper.selectByConditions(firmwareId, taskId, deviceId); + IotOtaTaskRecordDO upgradeRecord = upgradeRecordMapper.selectByConditions(firmwareId, taskId, deviceId); if (upgradeRecord == null) { return; } - if (!Objects.equals(upgradeRecord.getStatus(), IotOtaUpgradeRecordStatusEnum.CANCELED.getStatus())) { + if (!Objects.equals(upgradeRecord.getStatus(), IotOtaTaskRecordStatusEnum.CANCELED.getStatus())) { throw exception(OTA_UPGRADE_RECORD_DUPLICATE); } } @@ -205,11 +167,11 @@ public class IotOtaUpgradeRecordServiceImpl implements IotOtaUpgradeRecordServic * @throws cn.iocoder.yudao.framework.common.exception.ServiceException,则抛出 OTA_UPGRADE_RECORD_CANNOT_RETRY 异常 */ // TODO @li:这种一次性的方法(不复用的),其实一步一定要抽成小方法; - private void validateUpgradeRecordCanRetry(IotOtaUpgradeRecordDO upgradeRecord) { + private void validateUpgradeRecordCanRetry(IotOtaTaskRecordDO upgradeRecord) { if (ObjectUtils.equalsAny(upgradeRecord.getStatus(), - IotOtaUpgradeRecordStatusEnum.PENDING.getStatus(), - IotOtaUpgradeRecordStatusEnum.PUSHED.getStatus(), - IotOtaUpgradeRecordStatusEnum.UPGRADING.getStatus())) { + IotOtaTaskRecordStatusEnum.PENDING.getStatus(), + IotOtaTaskRecordStatusEnum.PUSHED.getStatus(), + IotOtaTaskRecordStatusEnum.UPGRADING.getStatus())) { throw exception(OTA_UPGRADE_RECORD_CANNOT_RETRY); } } diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/ota/IotOtaUpgradeTaskService.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/ota/IotOtaUpgradeTaskService.java index a2a810bf0c..9611d151f3 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/ota/IotOtaUpgradeTaskService.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/ota/IotOtaUpgradeTaskService.java @@ -3,7 +3,7 @@ package cn.iocoder.yudao.module.iot.service.ota; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.module.iot.controller.admin.ota.vo.upgrade.task.IotOtaUpgradeTaskPageReqVO; import cn.iocoder.yudao.module.iot.controller.admin.ota.vo.upgrade.task.IotOtaUpgradeTaskSaveReqVO; -import cn.iocoder.yudao.module.iot.dal.dataobject.ota.IotOtaUpgradeTaskDO; +import cn.iocoder.yudao.module.iot.dal.dataobject.ota.IotOtaTaskDO; import jakarta.validation.Valid; import java.util.List; @@ -36,7 +36,7 @@ public interface IotOtaUpgradeTaskService { * @param id OTA升级任务的ID * @return OTA升级任务的详细信息对象 */ - IotOtaUpgradeTaskDO getUpgradeTask(Long id); + IotOtaTaskDO getUpgradeTask(Long id); /** * 分页查询OTA升级任务 @@ -44,7 +44,7 @@ public interface IotOtaUpgradeTaskService { * @param pageReqVO OTA升级任务的分页查询请求对象,包含查询条件和分页信息 * @return 分页查询结果,包含OTA升级任务列表和总记录数 */ - PageResult getUpgradeTaskPage(@Valid IotOtaUpgradeTaskPageReqVO pageReqVO); + PageResult getUpgradeTaskPage(@Valid IotOtaUpgradeTaskPageReqVO pageReqVO); /** * 根据任务状态获取升级任务列表 @@ -52,7 +52,7 @@ public interface IotOtaUpgradeTaskService { * @param state 任务状态,用于筛选符合条件的升级任务 * @return 返回符合指定状态的升级任务列表,列表中的元素为 IotOtaUpgradeTaskDO 对象 */ - List getUpgradeTaskByState(Integer state); + List getUpgradeTaskByState(Integer state); /** * 更新升级任务的状态。 diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/ota/IotOtaUpgradeTaskServiceImpl.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/ota/IotOtaUpgradeTaskServiceImpl.java index b91fb89dab..a61181d49a 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/ota/IotOtaUpgradeTaskServiceImpl.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/ota/IotOtaUpgradeTaskServiceImpl.java @@ -8,10 +8,10 @@ import cn.iocoder.yudao.module.iot.controller.admin.ota.vo.upgrade.task.IotOtaUp import cn.iocoder.yudao.module.iot.controller.admin.ota.vo.upgrade.task.IotOtaUpgradeTaskSaveReqVO; 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 cn.iocoder.yudao.module.iot.dal.dataobject.ota.IotOtaTaskDO; import cn.iocoder.yudao.module.iot.dal.mysql.ota.IotOtaUpgradeTaskMapper; -import cn.iocoder.yudao.module.iot.enums.ota.IotOtaUpgradeTaskScopeEnum; -import cn.iocoder.yudao.module.iot.enums.ota.IotOtaUpgradeTaskStatusEnum; +import cn.iocoder.yudao.module.iot.enums.ota.IotOtaTaskDeviceScopeEnum; +import cn.iocoder.yudao.module.iot.enums.ota.IotOtaTaskStatusEnum; import cn.iocoder.yudao.module.iot.service.device.IotDeviceService; import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; @@ -61,7 +61,7 @@ public class IotOtaUpgradeTaskServiceImpl implements IotOtaUpgradeTaskService { validateScopeAndDevice(createReqVO.getScope(), createReqVO.getDeviceIds(), firmware.getProductId()); // 2. 保存 OTA 升级任务信息到数据库 - IotOtaUpgradeTaskDO upgradeTask = initOtaUpgradeTask(createReqVO, firmware.getProductId()); + IotOtaTaskDO upgradeTask = initOtaUpgradeTask(createReqVO, firmware.getProductId()); upgradeTaskMapper.insert(upgradeTask); // 3. 生成设备升级记录信息并存储,等待定时任务轮询 @@ -73,16 +73,16 @@ public class IotOtaUpgradeTaskServiceImpl implements IotOtaUpgradeTaskService { @Transactional(rollbackFor = Exception.class) public void cancelUpgradeTask(Long id) { // 1.1 校验升级任务是否存在 - IotOtaUpgradeTaskDO upgradeTask = validateUpgradeTaskExists(id); + IotOtaTaskDO upgradeTask = validateUpgradeTaskExists(id); // 1.2 校验升级任务是否可以取消 // TODO @li:ObjUtil notequals - if (!Objects.equals(upgradeTask.getStatus(), IotOtaUpgradeTaskStatusEnum.IN_PROGRESS.getStatus())) { + if (!Objects.equals(upgradeTask.getStatus(), IotOtaTaskStatusEnum.IN_PROGRESS.getStatus())) { throw exception(OTA_UPGRADE_TASK_CANNOT_CANCEL); } // 2. 更新 OTA 升级任务状态为已取消 - upgradeTaskMapper.updateById(IotOtaUpgradeTaskDO.builder() - .id(id).status(IotOtaUpgradeTaskStatusEnum.CANCELED.getStatus()) + upgradeTaskMapper.updateById(IotOtaTaskDO.builder() + .id(id).status(IotOtaTaskStatusEnum.CANCELED.getStatus()) .build()); // 3. 更新 OTA 升级记录状态为已取消 @@ -90,30 +90,30 @@ public class IotOtaUpgradeTaskServiceImpl implements IotOtaUpgradeTaskService { } @Override - public IotOtaUpgradeTaskDO getUpgradeTask(Long id) { + public IotOtaTaskDO getUpgradeTask(Long id) { return upgradeTaskMapper.selectById(id); } @Override - public PageResult getUpgradeTaskPage(IotOtaUpgradeTaskPageReqVO pageReqVO) { + public PageResult getUpgradeTaskPage(IotOtaUpgradeTaskPageReqVO pageReqVO) { return upgradeTaskMapper.selectUpgradeTaskPage(pageReqVO); } @Override - public List getUpgradeTaskByState(Integer state) { + public List getUpgradeTaskByState(Integer state) { return upgradeTaskMapper.selectUpgradeTaskByState(state); } @Override public void updateUpgradeTaskStatus(Long id, Integer status) { - upgradeTaskMapper.updateById(IotOtaUpgradeTaskDO.builder().id(id).status(status).build()); + upgradeTaskMapper.updateById(IotOtaTaskDO.builder().id(id).status(status).build()); } /** * 校验固件升级任务是否重复 */ private void validateFirmwareTaskDuplicate(Long firmwareId, String taskName) { - List upgradeTaskList = upgradeTaskMapper.selectByFirmwareIdAndName(firmwareId, taskName); + List upgradeTaskList = upgradeTaskMapper.selectByFirmwareIdAndName(firmwareId, taskName); if (CollUtil.isNotEmpty(upgradeTaskList)) { throw exception(OTA_UPGRADE_TASK_NAME_DUPLICATE); } @@ -128,14 +128,14 @@ public class IotOtaUpgradeTaskServiceImpl implements IotOtaUpgradeTaskService { * @throws cn.iocoder.yudao.framework.common.exception.ServiceException,抛出相应的异常 */ private void validateScopeAndDevice(Integer scope, List deviceIds, Long productId) { - if (Objects.equals(scope, IotOtaUpgradeTaskScopeEnum.SELECT.getScope())) { + if (Objects.equals(scope, IotOtaTaskDeviceScopeEnum.SELECT.getScope())) { if (CollUtil.isEmpty(deviceIds)) { throw exception(OTA_UPGRADE_TASK_DEVICE_IDS_EMPTY); } return; } - - if (Objects.equals(scope, IotOtaUpgradeTaskScopeEnum.ALL.getScope())) { + + if (Objects.equals(scope, IotOtaTaskDeviceScopeEnum.ALL.getScope())) { List deviceList = deviceService.getDeviceListByProductId(productId); if (CollUtil.isEmpty(deviceList)) { throw exception(OTA_UPGRADE_TASK_DEVICE_LIST_EMPTY); @@ -146,8 +146,8 @@ public class IotOtaUpgradeTaskServiceImpl implements IotOtaUpgradeTaskService { /** * 验证升级任务是否存在 */ - private IotOtaUpgradeTaskDO validateUpgradeTaskExists(Long id) { - IotOtaUpgradeTaskDO upgradeTask = upgradeTaskMapper.selectById(id); + private IotOtaTaskDO validateUpgradeTaskExists(Long id) { + IotOtaTaskDO upgradeTask = upgradeTaskMapper.selectById(id); if (Objects.isNull(upgradeTask)) { throw exception(OTA_UPGRADE_TASK_NOT_EXISTS); } @@ -157,14 +157,14 @@ public class IotOtaUpgradeTaskServiceImpl implements IotOtaUpgradeTaskService { /** * 初始化升级任务 */ - private IotOtaUpgradeTaskDO initOtaUpgradeTask(IotOtaUpgradeTaskSaveReqVO createReqVO, Long productId) { - IotOtaUpgradeTaskDO upgradeTask = BeanUtils.toBean(createReqVO, IotOtaUpgradeTaskDO.class); - upgradeTask.setDeviceCount(Convert.toLong(CollUtil.size(createReqVO.getDeviceIds()))) - .setStatus(IotOtaUpgradeTaskStatusEnum.IN_PROGRESS.getStatus()); - - if (Objects.equals(createReqVO.getScope(), IotOtaUpgradeTaskScopeEnum.ALL.getScope())) { + private IotOtaTaskDO initOtaUpgradeTask(IotOtaUpgradeTaskSaveReqVO createReqVO, Long productId) { + IotOtaTaskDO upgradeTask = BeanUtils.toBean(createReqVO, IotOtaTaskDO.class); + upgradeTask.setDeviceTotalCount(Convert.toLong(CollUtil.size(createReqVO.getDeviceIds()))) + .setStatus(IotOtaTaskStatusEnum.IN_PROGRESS.getStatus()); + + if (Objects.equals(createReqVO.getScope(), IotOtaTaskDeviceScopeEnum.ALL.getScope())) { List deviceList = deviceService.getDeviceListByProductId(productId); - upgradeTask.setDeviceCount((long) deviceList.size()); + upgradeTask.setDeviceTotalCount((long) deviceList.size()); upgradeTask.setDeviceIds( deviceList.stream().map(IotDeviceDO::getId).collect(Collectors.toList())); }