Commit 4749d93d0e4b12dbfe772d9fa97b3c3ce442b061

Authored by YunaiV
1 parent 5399e5bb

reactor:【IoT 物联网】调整 ota 的 task 实体定义(暂时未处理 controller)x2

Showing 14 changed files with 205 additions and 348 deletions
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/ota/IotOtaUpgradeTaskController.java renamed to yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/ota/IotOtaTaskController.java
... ... @@ -3,11 +3,11 @@ package cn.iocoder.yudao.module.iot.controller.admin.ota;
3 3 import cn.iocoder.yudao.framework.common.pojo.CommonResult;
4 4 import cn.iocoder.yudao.framework.common.pojo.PageResult;
5 5 import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
6   -import cn.iocoder.yudao.module.iot.controller.admin.ota.vo.upgrade.task.IotOtaUpgradeTaskPageReqVO;
7   -import cn.iocoder.yudao.module.iot.controller.admin.ota.vo.upgrade.task.IotOtaUpgradeTaskRespVO;
8   -import cn.iocoder.yudao.module.iot.controller.admin.ota.vo.upgrade.task.IotOtaUpgradeTaskSaveReqVO;
  6 +import cn.iocoder.yudao.module.iot.controller.admin.ota.vo.task.IotOtaTaskPageReqVO;
  7 +import cn.iocoder.yudao.module.iot.controller.admin.ota.vo.task.IotOtaTaskRespVO;
  8 +import cn.iocoder.yudao.module.iot.controller.admin.ota.vo.task.IotOtaTaskCreateReqVO;
9 9 import cn.iocoder.yudao.module.iot.dal.dataobject.ota.IotOtaTaskDO;
10   -import cn.iocoder.yudao.module.iot.service.ota.IotOtaUpgradeTaskService;
  10 +import cn.iocoder.yudao.module.iot.service.ota.IotOtaTaskService;
11 11 import io.swagger.v3.oas.annotations.Operation;
12 12 import io.swagger.v3.oas.annotations.Parameter;
13 13 import io.swagger.v3.oas.annotations.tags.Tag;
... ... @@ -21,44 +21,44 @@ import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
21 21  
22 22 @Tag(name = "管理后台 - IoT OTA 升级任务")
23 23 @RestController
24   -@RequestMapping("/iot/ota-upgrade-task")
  24 +@RequestMapping("/iot/ota/task")
25 25 @Validated
26   -public class IotOtaUpgradeTaskController {
  26 +public class IotOtaTaskController {
27 27  
28 28 @Resource
29   - private IotOtaUpgradeTaskService upgradeTaskService;
  29 + private IotOtaTaskService otaTaskService;
30 30  
31 31 @PostMapping("/create")
32   - @Operation(summary = "创建升级任务")
33   - @PreAuthorize(value = "@ss.hasPermission('iot:ota-upgrade-task:create')")
34   - public CommonResult<Long> createUpgradeTask(@Valid @RequestBody IotOtaUpgradeTaskSaveReqVO createReqVO) {
35   - return success(upgradeTaskService.createUpgradeTask(createReqVO));
  32 + @Operation(summary = "创建 OTA 升级任务")
  33 + @PreAuthorize(value = "@ss.hasPermission('iot:ota-task:create')")
  34 + public CommonResult<Long> createOtaTask(@Valid @RequestBody IotOtaTaskCreateReqVO createReqVO) {
  35 + return success(otaTaskService.createOtaTask(createReqVO));
36 36 }
37 37  
38 38 @PostMapping("/cancel")
39   - @Operation(summary = "取消升级任务")
  39 + @Operation(summary = "取消 OTA 升级任务")
40 40 @Parameter(name = "id", description = "升级任务编号", required = true)
41   - @PreAuthorize(value = "@ss.hasPermission('iot:ota-upgrade-task:cancel')")
42   - public CommonResult<Boolean> cancelUpgradeTask(@RequestParam("id") Long id) {
43   - upgradeTaskService.cancelUpgradeTask(id);
  41 + @PreAuthorize(value = "@ss.hasPermission('iot:ota-task:cancel')")
  42 + public CommonResult<Boolean> cancelOtaTask(@RequestParam("id") Long id) {
  43 + otaTaskService.cancelOtaTask(id);
44 44 return success(true);
45 45 }
46 46  
47 47 @GetMapping("/page")
48   - @Operation(summary = "获得升级任务分页")
49   - @PreAuthorize(value = "@ss.hasPermission('iot:ota-upgrade-task:query')")
50   - public CommonResult<PageResult<IotOtaUpgradeTaskRespVO>> getUpgradeTaskPage(@Valid IotOtaUpgradeTaskPageReqVO pageReqVO) {
51   - PageResult<IotOtaTaskDO> pageResult = upgradeTaskService.getUpgradeTaskPage(pageReqVO);
52   - return success(BeanUtils.toBean(pageResult, IotOtaUpgradeTaskRespVO.class));
  48 + @Operation(summary = "获得 OTA 升级任务分页")
  49 + @PreAuthorize(value = "@ss.hasPermission('iot:ota-task:query')")
  50 + public CommonResult<PageResult<IotOtaTaskRespVO>> getOtaTaskPage(@Valid IotOtaTaskPageReqVO pageReqVO) {
  51 + PageResult<IotOtaTaskDO> pageResult = otaTaskService.getOtaTaskPage(pageReqVO);
  52 + return success(BeanUtils.toBean(pageResult, IotOtaTaskRespVO.class));
53 53 }
54 54  
55 55 @GetMapping("/get")
56   - @Operation(summary = "获得升级任务")
  56 + @Operation(summary = "获得 OTA 升级任务")
57 57 @Parameter(name = "id", description = "升级任务编号", required = true, example = "1024")
58   - @PreAuthorize(value = "@ss.hasPermission('iot:ota-upgrade-task:query')")
59   - public CommonResult<IotOtaUpgradeTaskRespVO> getUpgradeTask(@RequestParam("id") Long id) {
60   - IotOtaTaskDO upgradeTask = upgradeTaskService.getUpgradeTask(id);
61   - return success(BeanUtils.toBean(upgradeTask, IotOtaUpgradeTaskRespVO.class));
  58 + @PreAuthorize(value = "@ss.hasPermission('iot:ota-task:query')")
  59 + public CommonResult<IotOtaTaskRespVO> getOtaTask(@RequestParam("id") Long id) {
  60 + IotOtaTaskDO upgradeTask = otaTaskService.getOtaTask(id);
  61 + return success(BeanUtils.toBean(upgradeTask, IotOtaTaskRespVO.class));
62 62 }
63 63  
64 64 }
... ...
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/ota/IotOtaUpgradeRecordController.java renamed to yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/ota/IotOtaTaskRecordController.java
... ... @@ -3,10 +3,10 @@ package cn.iocoder.yudao.module.iot.controller.admin.ota;
3 3 import cn.iocoder.yudao.framework.common.pojo.CommonResult;
4 4 import cn.iocoder.yudao.framework.common.pojo.PageResult;
5 5 import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
6   -import cn.iocoder.yudao.module.iot.controller.admin.ota.vo.upgrade.record.IotOtaUpgradeRecordPageReqVO;
7   -import cn.iocoder.yudao.module.iot.controller.admin.ota.vo.upgrade.record.IotOtaUpgradeRecordRespVO;
  6 +import cn.iocoder.yudao.module.iot.controller.admin.ota.vo.task.record.IotOtaTaskRecordPageReqVO;
  7 +import cn.iocoder.yudao.module.iot.controller.admin.ota.vo.task.record.IotOtaTaskRecordRespVO;
8 8 import cn.iocoder.yudao.module.iot.dal.dataobject.ota.IotOtaTaskRecordDO;
9   -import cn.iocoder.yudao.module.iot.service.ota.IotOtaUpgradeRecordService;
  9 +import cn.iocoder.yudao.module.iot.service.ota.IotOtaTaskRecordService;
10 10 import io.swagger.v3.oas.annotations.Operation;
11 11 import io.swagger.v3.oas.annotations.Parameter;
12 12 import io.swagger.v3.oas.annotations.tags.Tag;
... ... @@ -20,47 +20,46 @@ import java.util.Map;
20 20  
21 21 import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
22 22  
23   -@Tag(name = "管理后台 - IoT OTA 升级记录")
  23 +@Tag(name = "管理后台 - IoT OTA 升级任务记录")
24 24 @RestController
25   -@RequestMapping("/iot/ota-upgrade-record")
  25 +@RequestMapping("/iot/ota/task-record")
26 26 @Validated
27   -public class IotOtaUpgradeRecordController {
  27 +public class IotOtaTaskRecordController {
28 28  
29 29 @Resource
30   - private IotOtaUpgradeRecordService upgradeRecordService;
  30 + private IotOtaTaskRecordService otaTaskRecordService;
31 31  
32 32 @GetMapping("/get-statistics")
33 33 @Operation(summary = "固件升级设备统计")
34   - @PreAuthorize("@ss.hasPermission('iot:ota-upgrade-record:query')")
  34 + @PreAuthorize("@ss.hasPermission('iot:ota-task-record:query')")
35 35 @Parameter(name = "firmwareId", description = "固件编号", required = true, example = "1024")
36   - public CommonResult<Map<Integer, Long>> getOtaUpgradeRecordStatistics(@RequestParam(value = "firmwareId") Long firmwareId) {
37   - return success(upgradeRecordService.getOtaUpgradeRecordStatistics(firmwareId));
  36 + public CommonResult<Map<Integer, Long>> getOtaTaskRecordStatistics(@RequestParam(value = "firmwareId") Long firmwareId) {
  37 + return success(otaTaskRecordService.getOtaTaskRecordStatistics(firmwareId));
38 38 }
39 39  
40 40 @GetMapping("/get-count")
41 41 @Operation(summary = "获得升级记录分页 tab 数量")
42   - @PreAuthorize("@ss.hasPermission('iot:ota-upgrade-record:query')")
43   - public CommonResult<Map<Integer, Long>> getOtaUpgradeRecordCount(
44   - @Valid IotOtaUpgradeRecordPageReqVO pageReqVO) {
45   - return success(upgradeRecordService.getOtaUpgradeRecordCount(pageReqVO));
  42 + @PreAuthorize("@ss.hasPermission('iot:ota-task-record:query')")
  43 + public CommonResult<Map<Integer, Long>> getOtaTaskRecordCount(@Valid IotOtaTaskRecordPageReqVO pageReqVO) {
  44 + return success(otaTaskRecordService.getOtaTaskRecordCount(pageReqVO));
46 45 }
47 46  
48 47 @GetMapping("/page")
49 48 @Operation(summary = "获得升级记录分页")
50 49 @PreAuthorize("@ss.hasPermission('iot:ota-upgrade-record:query')")
51   - public CommonResult<PageResult<IotOtaUpgradeRecordRespVO>> getUpgradeRecordPage(
52   - @Valid IotOtaUpgradeRecordPageReqVO pageReqVO) {
53   - PageResult<IotOtaTaskRecordDO> pageResult = upgradeRecordService.getUpgradeRecordPage(pageReqVO);
54   - return success(BeanUtils.toBean(pageResult, IotOtaUpgradeRecordRespVO.class));
  50 + public CommonResult<PageResult<IotOtaTaskRecordRespVO>> getOtaTaskRecordPage(
  51 + @Valid IotOtaTaskRecordPageReqVO pageReqVO) {
  52 + PageResult<IotOtaTaskRecordDO> pageResult = otaTaskRecordService.getOtaTaskRecordPage(pageReqVO);
  53 + return success(BeanUtils.toBean(pageResult, IotOtaTaskRecordRespVO.class));
55 54 }
56 55  
57 56 @GetMapping("/get")
58 57 @Operation(summary = "获得升级记录")
59 58 @PreAuthorize("@ss.hasPermission('iot:ota-upgrade-record:query')")
60 59 @Parameter(name = "id", description = "升级记录编号", required = true, example = "1024")
61   - public CommonResult<IotOtaUpgradeRecordRespVO> getUpgradeRecord(@RequestParam("id") Long id) {
62   - IotOtaTaskRecordDO upgradeRecord = upgradeRecordService.getUpgradeRecord(id);
63   - return success(BeanUtils.toBean(upgradeRecord, IotOtaUpgradeRecordRespVO.class));
  60 + public CommonResult<IotOtaTaskRecordRespVO> getOtaTaskRecord(@RequestParam("id") Long id) {
  61 + IotOtaTaskRecordDO upgradeRecord = otaTaskRecordService.getOtaTaskRecord(id);
  62 + return success(BeanUtils.toBean(upgradeRecord, IotOtaTaskRecordRespVO.class));
64 63 }
65 64  
66 65 }
... ...
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/ota/vo/upgrade/task/IotOtaUpgradeTaskSaveReqVO.java renamed to yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/ota/vo/task/IotOtaTaskCreateReqVO.java
1   -package cn.iocoder.yudao.module.iot.controller.admin.ota.vo.upgrade.task;
  1 +package cn.iocoder.yudao.module.iot.controller.admin.ota.vo.task;
2 2  
3 3 import cn.iocoder.yudao.framework.common.validation.InEnum;
4 4 import cn.iocoder.yudao.module.iot.enums.ota.IotOtaTaskDeviceScopeEnum;
... ... @@ -9,9 +9,9 @@ import lombok.Data;
9 9  
10 10 import java.util.List;
11 11  
12   -@Schema(description = "管理后台 - IoT OTA 升级任务创建/修改 Request VO")
  12 +@Schema(description = "管理后台 - IoT OTA 升级任务创建 Request VO")
13 13 @Data
14   -public class IotOtaUpgradeTaskSaveReqVO {
  14 +public class IotOtaTaskCreateReqVO {
15 15  
16 16 @NotEmpty(message = "任务名称不能为空")
17 17 @Schema(description = "任务名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "升级任务")
... ... @@ -27,7 +27,7 @@ public class IotOtaUpgradeTaskSaveReqVO {
27 27 @Schema(description = "升级范围", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
28 28 @NotNull(message = "升级范围不能为空")
29 29 @InEnum(value = IotOtaTaskDeviceScopeEnum.class)
30   - private Integer scope;
  30 + private Integer deviceScope;
31 31  
32 32 @Schema(description = "选中的设备编号数组", requiredMode = Schema.RequiredMode.REQUIRED, example = "1,2,3")
33 33 private List<Long> deviceIds;
... ...
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/ota/vo/upgrade/task/IotOtaUpgradeTaskPageReqVO.java renamed to yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/ota/vo/task/IotOtaTaskPageReqVO.java
1   -package cn.iocoder.yudao.module.iot.controller.admin.ota.vo.upgrade.task;
  1 +package cn.iocoder.yudao.module.iot.controller.admin.ota.vo.task;
2 2  
3 3 import cn.iocoder.yudao.framework.common.pojo.PageParam;
4 4 import io.swagger.v3.oas.annotations.media.Schema;
5   -import jakarta.validation.constraints.NotNull;
6 5 import lombok.Data;
7 6  
8   -@Data
9 7 @Schema(description = "管理后台 - IoT OTA 升级任务分页 Request VO")
10   -public class IotOtaUpgradeTaskPageReqVO extends PageParam {
11   -
12   - @Schema(description = "固件编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
13   - @NotNull(message = "固件编号不能为空")
14   - private Long firmwareId;
  8 +@Data
  9 +public class IotOtaTaskPageReqVO extends PageParam {
15 10  
16 11 @Schema(description = "任务名称", example = "升级任务")
17 12 private String name;
18 13  
  14 + @Schema(description = "固件编号", example = "1024")
  15 + private Long firmwareId;
  16 +
19 17 }
... ...
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/ota/vo/upgrade/task/IotOtaUpgradeTaskRespVO.java renamed to yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/ota/vo/task/IotOtaTaskRespVO.java
1   -package cn.iocoder.yudao.module.iot.controller.admin.ota.vo.upgrade.task;
  1 +package cn.iocoder.yudao.module.iot.controller.admin.ota.vo.task;
2 2  
3 3 import com.fhs.core.trans.vo.VO;
4 4 import io.swagger.v3.oas.annotations.media.Schema;
5 5 import lombok.Data;
6 6  
7 7 import java.time.LocalDateTime;
8   -import java.util.List;
9 8  
10   -@Data
11 9 @Schema(description = "管理后台 - IoT OTA 升级任务 Response VO")
12   -public class IotOtaUpgradeTaskRespVO implements VO {
  10 +@Data
  11 +public class IotOtaTaskRespVO implements VO {
13 12  
14 13 @Schema(description = "任务编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
15 14 private Long id;
... ... @@ -23,20 +22,17 @@ public class IotOtaUpgradeTaskRespVO implements VO {
23 22 @Schema(description = "固件编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
24 23 private Long firmwareId;
25 24  
26   - @Schema(description = "任务状态", requiredMode = Schema.RequiredMode.REQUIRED)
  25 + @Schema(description = "任务状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "10")
27 26 private Integer status;
28 27  
29   - @Schema(description = "升级范围", requiredMode = Schema.RequiredMode.REQUIRED, allowableValues = {"1", "2"})
30   - private Integer scope;
31   -
32   - @Schema(description = "设备数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
33   - private Long deviceCount;
  28 + @Schema(description = "升级范围", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
  29 + private Integer deviceScope;
34 30  
35   - @Schema(description = "选中的设备编号数组", example = "1024")
36   - private List<Long> deviceIds;
  31 + @Schema(description = "设备总共数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
  32 + private Integer deviceTotalCount;
37 33  
38   - @Schema(description = "选中的设备名字数组", example = "1024")
39   - private List<String> deviceNames;
  34 + @Schema(description = "设备成功数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "66")
  35 + private Integer deviceSuccessCount;
40 36  
41 37 @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED, example = "2022-07-08 07:30:00")
42 38 private LocalDateTime createTime;
... ...
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/ota/vo/upgrade/record/IotOtaUpgradeRecordPageReqVO.java renamed to yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/ota/vo/task/record/IotOtaTaskRecordPageReqVO.java
1   -package cn.iocoder.yudao.module.iot.controller.admin.ota.vo.upgrade.record;
  1 +package cn.iocoder.yudao.module.iot.controller.admin.ota.vo.task.record;
2 2  
3 3 import cn.iocoder.yudao.framework.common.pojo.PageParam;
4 4 import io.swagger.v3.oas.annotations.media.Schema;
5 5 import jakarta.validation.constraints.NotNull;
6 6 import lombok.Data;
7 7  
8   -@Data
9 8 @Schema(description = "管理后台 - IoT OTA 升级记录分页 Request VO")
10   -public class IotOtaUpgradeRecordPageReqVO extends PageParam {
  9 +@Data
  10 +public class IotOtaTaskRecordPageReqVO extends PageParam {
11 11  
12   - // TODO @li:已经有注解,不用重复注释
13   - /**
14   - * 升级任务编号字段。
15   - * <p>
16   - * 该字段用于标识升级任务的唯一编号,不能为空。
17   - */
  12 + // TODO @芋艿:分页条件字段梳理;
18 13 @Schema(description = "升级任务编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
19 14 @NotNull(message = "升级任务编号不能为空")
20 15 private Long taskId;
21 16  
22   - /**
23   - * 设备标识字段。
24   - * <p>
25   - * 该字段用于标识设备的名称,通常用于区分不同的设备。
26   - */
27 17 @Schema(description = "设备标识", requiredMode = Schema.RequiredMode.REQUIRED, example = "摄像头A1-1")
28 18 private String deviceName;
29 19  
... ...
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/ota/vo/upgrade/record/IotOtaUpgradeRecordRespVO.java renamed to yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/ota/vo/task/record/IotOtaTaskRecordRespVO.java
1   -package cn.iocoder.yudao.module.iot.controller.admin.ota.vo.upgrade.record;
2   -
3   -import cn.iocoder.yudao.module.iot.dal.dataobject.device.IotDeviceDO;
4   -import cn.iocoder.yudao.module.iot.dal.dataobject.device.IotDeviceMessageDO;
5   -import cn.iocoder.yudao.module.iot.dal.dataobject.ota.IotOtaFirmwareDO;
6   -import cn.iocoder.yudao.module.iot.dal.dataobject.ota.IotOtaTaskDO;
7   -import cn.iocoder.yudao.module.iot.enums.ota.IotOtaTaskRecordStatusEnum;
8   -import com.fhs.core.trans.anno.Trans;
9   -import com.fhs.core.trans.constant.TransType;
  1 +package cn.iocoder.yudao.module.iot.controller.admin.ota.vo.task.record;
  2 +
10 3 import io.swagger.v3.oas.annotations.media.Schema;
11 4 import lombok.Data;
12 5  
13 6 import java.time.LocalDateTime;
14 7  
15   -@Data
16 8 @Schema(description = "管理后台 - IoT OTA 升级记录 Response VO")
17   -public class IotOtaUpgradeRecordRespVO {
  9 +@Data
  10 +public class IotOtaTaskRecordRespVO {
  11 +
  12 + // TODO @芋艿:梳理字段
18 13  
19   - /**
20   - * 升级记录编号
21   - */
22 14 @Schema(description = "升级记录编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
23 15 private Long id;
24   - /**
25   - * 固件编号
26   - * <p>
27   - * 关联 {@link IotOtaFirmwareDO#getId()}
28   - */
  16 +
29 17 @Schema(description = "固件编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
30   - @Trans(type = TransType.SIMPLE, target = IotOtaFirmwareDO.class, fields = {"version"}, refs = {"firmwareVersion"})
31 18 private Long firmwareId;
32   - /**
33   - * 固件版本
34   - */
  19 +
35 20 @Schema(description = "固件版本", requiredMode = Schema.RequiredMode.REQUIRED, example = "v1.0.0")
36 21 private String firmwareVersion;
37   - /**
38   - * 任务编号
39   - * <p>
40   - * 关联 {@link IotOtaTaskDO#getId()}
41   - */
  22 +
42 23 @Schema(description = "任务编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
43 24 private Long taskId;
44   - /**
45   - * 产品标识
46   - * <p>
47   - * 关联 {@link cn.iocoder.yudao.module.iot.dal.dataobject.product.IotProductDO#getId()}
48   - */
  25 +
49 26 @Schema(description = "产品标识", requiredMode = Schema.RequiredMode.REQUIRED, example = "iot")
50 27 private String productKey;
51   - /**
52   - * 设备名称
53   - * <p>
54   - * 关联 {@link cn.iocoder.yudao.module.iot.dal.dataobject.device.IotDeviceDO#getId()}
55   - */
  28 +
56 29 @Schema(description = "设备名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "iot")
57 30 private String deviceName;
58   - /**
59   - * 设备编号
60   - * <p>
61   - * 关联 {@link cn.iocoder.yudao.module.iot.dal.dataobject.device.IotDeviceDO#getId()}
62   - */
  31 +
63 32 @Schema(description = "设备编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
64 33 private String deviceId;
65   - /**
66   - * 来源的固件编号
67   - * <p>
68   - * 关联 {@link IotDeviceDO#getFirmwareId()}
69   - */
  34 +
70 35 @Schema(description = "来源的固件编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
71   - @Trans(type = TransType.SIMPLE, target = IotOtaFirmwareDO.class, fields = {"version"}, refs = {"fromFirmwareVersion"})
72 36 private Long fromFirmwareId;
73   - /**
74   - * 来源的固件版本
75   - */
  37 +
76 38 @Schema(description = "来源的固件版本", requiredMode = Schema.RequiredMode.REQUIRED, example = "v1.0.0")
77 39 private String fromFirmwareVersion;
78   - /**
79   - * 升级状态
80   - * <p>
81   - * 关联 {@link IotOtaTaskRecordStatusEnum}
82   - */
83   - @Schema(description = "升级状态", requiredMode = Schema.RequiredMode.REQUIRED, allowableValues = {"0", "10", "20", "30", "40", "50"})
  40 +
  41 + @Schema(description = "升级状态", requiredMode = Schema.RequiredMode.REQUIRED)
84 42 private Integer status;
85   - /**
86   - * 升级进度,百分比
87   - */
  43 +
88 44 @Schema(description = "升级进度,百分比", requiredMode = Schema.RequiredMode.REQUIRED, example = "10")
89 45 private Integer progress;
90   - /**
91   - * 升级进度描述
92   - * <p>
93   - * 注意,只记录设备最后一次的升级进度描述
94   - * 如果想看历史记录,可以查看 {@link IotDeviceMessageDO} 设备日志
95   - */
  46 +
96 47 @Schema(description = "升级进度描述", requiredMode = Schema.RequiredMode.REQUIRED, example = "10")
97 48 private String description;
98   - /**
99   - * 升级开始时间
100   - */
101   - @Schema(description = "升级开始时间", requiredMode = Schema.RequiredMode.REQUIRED, example = "2022-07-08 07:30:00")
  49 +
  50 + @Schema(description = "升级开始时间", requiredMode = Schema.RequiredMode.REQUIRED)
102 51 private LocalDateTime startTime;
103   - /**
104   - * 升级结束时间
105   - */
106   - @Schema(description = "升级结束时间", requiredMode = Schema.RequiredMode.REQUIRED, example = "2022-07-08 07:30:00")
  52 +
  53 + @Schema(description = "升级结束时间", requiredMode = Schema.RequiredMode.REQUIRED)
107 54 private LocalDateTime endTime;
108 55  
109 56 }
... ...
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/mysql/ota/IotOtaUpgradeTaskMapper.java renamed to yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/mysql/ota/IotOtaTaskMapper.java
... ... @@ -3,55 +3,30 @@ package cn.iocoder.yudao.module.iot.dal.mysql.ota;
3 3 import cn.iocoder.yudao.framework.common.pojo.PageResult;
4 4 import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
5 5 import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
6   -import cn.iocoder.yudao.module.iot.controller.admin.ota.vo.upgrade.task.IotOtaUpgradeTaskPageReqVO;
  6 +import cn.iocoder.yudao.module.iot.controller.admin.ota.vo.task.IotOtaTaskPageReqVO;
7 7 import cn.iocoder.yudao.module.iot.dal.dataobject.ota.IotOtaTaskDO;
8 8 import org.apache.ibatis.annotations.Mapper;
9 9  
10 10 import java.util.List;
11 11  
12 12 /**
13   - * OTA 升级任务Mapper
  13 + * OTA 升级任务 Mapper
14 14 *
15 15 * @author Shelly
16 16 */
17 17 @Mapper
18   -public interface IotOtaUpgradeTaskMapper extends BaseMapperX<IotOtaTaskDO> {
  18 +public interface IotOtaTaskMapper extends BaseMapperX<IotOtaTaskDO> {
19 19  
20   - /**
21   - * 根据固件ID和任务名称查询升级任务列表。
22   - *
23   - * @param firmwareId 固件ID,用于筛选升级任务
24   - * @param name 任务名称,用于筛选升级任务
25   - * @return 符合条件的升级任务列表
26   - */
27 20 default List<IotOtaTaskDO> selectByFirmwareIdAndName(Long firmwareId, String name) {
28 21 return selectList(new LambdaQueryWrapperX<IotOtaTaskDO>()
29 22 .eqIfPresent(IotOtaTaskDO::getFirmwareId, firmwareId)
30 23 .eqIfPresent(IotOtaTaskDO::getName, name));
31 24 }
32 25  
33   - /**
34   - * 分页查询升级任务列表,支持根据固件ID和任务名称进行筛选。
35   - *
36   - * @param pageReqVO 分页查询请求对象,包含分页参数和筛选条件
37   - * @return 分页结果,包含符合条件的升级任务列表
38   - */
39   - default PageResult<IotOtaTaskDO> selectUpgradeTaskPage(IotOtaUpgradeTaskPageReqVO pageReqVO) {
  26 + default PageResult<IotOtaTaskDO> selectUpgradeTaskPage(IotOtaTaskPageReqVO pageReqVO) {
40 27 return selectPage(pageReqVO, new LambdaQueryWrapperX<IotOtaTaskDO>()
41 28 .eqIfPresent(IotOtaTaskDO::getFirmwareId, pageReqVO.getFirmwareId())
42 29 .likeIfPresent(IotOtaTaskDO::getName, pageReqVO.getName()));
43 30 }
44 31  
45   - /**
46   - * 根据任务状态查询升级任务列表
47   - * <p>
48   - * 该函数通过传入的任务状态,查询数据库中符合条件的升级任务列表。
49   - *
50   - * @param status 任务状态,用于筛选升级任务的状态值
51   - * @return 返回符合条件的升级任务列表,列表中的每个元素为 IotOtaUpgradeTaskDO 对象
52   - */
53   - default List<IotOtaTaskDO> selectUpgradeTaskByState(Integer status) {
54   - return selectList(IotOtaTaskDO::getStatus, status);
55   - }
56   -
57 32 }
... ...
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/mysql/ota/IotOtaUpgradeRecordMapper.java
... ... @@ -3,7 +3,7 @@ package cn.iocoder.yudao.module.iot.dal.mysql.ota;
3 3 import cn.iocoder.yudao.framework.common.pojo.PageResult;
4 4 import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
5 5 import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
6   -import cn.iocoder.yudao.module.iot.controller.admin.ota.vo.upgrade.record.IotOtaUpgradeRecordPageReqVO;
  6 +import cn.iocoder.yudao.module.iot.controller.admin.ota.vo.task.record.IotOtaTaskRecordPageReqVO;
7 7 import cn.iocoder.yudao.module.iot.dal.dataobject.ota.IotOtaTaskRecordDO;
8 8 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
9 9 import org.apache.ibatis.annotations.Mapper;
... ... @@ -80,11 +80,11 @@ public interface IotOtaUpgradeRecordMapper extends BaseMapperX&lt;IotOtaTaskRecordD
80 80 * @return 返回分页查询结果,包含符合条件的 OTA升级记录列表
81 81 */
82 82 // TODO @li:selectPage 就 ok 拉。
83   - default PageResult<IotOtaTaskRecordDO> selectUpgradeRecordPage(IotOtaUpgradeRecordPageReqVO pageReqVO) {
  83 + default PageResult<IotOtaTaskRecordDO> selectUpgradeRecordPage(IotOtaTaskRecordPageReqVO pageReqVO) {
84 84 // TODO @li:这里的注释,可以去掉哈;然后下面的“如果”。。。也没必要注释
85 85 // 使用LambdaQueryWrapperX构建查询条件,并根据请求参数动态添加查询条件
86 86 return selectPage(pageReqVO, new LambdaQueryWrapperX<IotOtaTaskRecordDO>()
87   - .likeIfPresent(IotOtaTaskRecordDO::getDeviceName, pageReqVO.getDeviceName()) // 如果设备名称存在,则添加模糊查询条件
  87 +// .likeIfPresent(IotOtaTaskRecordDO::getDeviceName, pageReqVO.getDeviceName()) // 如果设备名称存在,则添加模糊查询条件
88 88 .eqIfPresent(IotOtaTaskRecordDO::getTaskId, pageReqVO.getTaskId())); // 如果任务ID存在,则添加等值查询条件
89 89 }
90 90  
... ...
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/ota/IotOtaUpgradeRecordService.java renamed to yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/ota/IotOtaTaskRecordService.java
1 1 package cn.iocoder.yudao.module.iot.service.ota;
2 2  
3 3 import cn.iocoder.yudao.framework.common.pojo.PageResult;
4   -import cn.iocoder.yudao.module.iot.controller.admin.ota.vo.upgrade.record.IotOtaUpgradeRecordPageReqVO;
  4 +import cn.iocoder.yudao.module.iot.controller.admin.ota.vo.task.record.IotOtaTaskRecordPageReqVO;
5 5 import cn.iocoder.yudao.module.iot.dal.dataobject.ota.IotOtaTaskRecordDO;
6 6 import jakarta.validation.Valid;
7 7  
... ... @@ -13,7 +13,7 @@ import java.util.Map;
13 13 * IotOtaUpgradeRecordService 接口定义了与物联网设备OTA升级记录相关的操作。
14 14 * 该接口提供了创建、更新、查询、统计和重试升级记录的功能。
15 15 */
16   -public interface IotOtaUpgradeRecordService {
  16 +public interface IotOtaTaskRecordService {
17 17  
18 18 /**
19 19 * 批量创建 OTA 升级记录
... ... @@ -23,37 +23,37 @@ public interface IotOtaUpgradeRecordService {
23 23 * @param firmwareId 固件ID,表示要升级到的固件版本。
24 24 * @param upgradeTaskId 升级任务ID,表示此次升级任务的唯一标识。
25 25 */
26   - void createOtaUpgradeRecordBatch(List<Long> deviceIds, Long firmwareId, Long upgradeTaskId);
  26 + void createOtaTaskRecordBatch(List<Long> deviceIds, Long firmwareId, Long upgradeTaskId);
27 27  
28 28 /**
29 29 * 获取 OTA 升级记录的数量统计
30 30 *
31 31 * @return 返回一个 Map,其中键为状态码,值为对应状态的升级记录数量
32 32 */
33   - Map<Integer, Long> getOtaUpgradeRecordCount(@Valid IotOtaUpgradeRecordPageReqVO pageReqVO);
  33 + Map<Integer, Long> getOtaTaskRecordCount(@Valid IotOtaTaskRecordPageReqVO pageReqVO);
34 34  
35 35 /**
36   - * 获取 OTA 升级记录的统计信息。
  36 + * 获取 OTA 升级记录的统计信息
37 37 *
38 38 * @return 返回一个 Map,其中键为状态码,值为对应状态的升级记录统计信息
39 39 */
40   - Map<Integer, Long> getOtaUpgradeRecordStatistics(Long firmwareId);
  40 + Map<Integer, Long> getOtaTaskRecordStatistics(Long firmwareId);
41 41  
42 42 /**
43   - * 获取指定 ID 的 OTA 升级记录的详细信息。
  43 + * 获取指定 ID 的 OTA 升级记录的详细信息
44 44 *
45   - * @param id 需要查询的升级记录的ID。
46   - * @return 返回包含升级记录详细信息的响应对象。
  45 + * @param id 需要查询的升级记录的 ID
  46 + * @return 返回包含升级记录详细信息的响应对象
47 47 */
48   - IotOtaTaskRecordDO getUpgradeRecord(Long id);
  48 + IotOtaTaskRecordDO getOtaTaskRecord(Long id);
49 49  
50 50 /**
51   - * 分页查询 OTA 升级记录。
  51 + * 分页查询 OTA 升级记录
52 52 *
53 53 * @param pageReqVO 包含分页查询条件的请求对象,必须经过验证。
54 54 * @return 返回包含分页查询结果的响应对象。
55 55 */
56   - PageResult<IotOtaTaskRecordDO> getUpgradeRecordPage(@Valid IotOtaUpgradeRecordPageReqVO pageReqVO);
  56 + PageResult<IotOtaTaskRecordDO> getOtaTaskRecordPage(@Valid IotOtaTaskRecordPageReqVO pageReqVO);
57 57  
58 58 /**
59 59 * 根据任务 ID 取消升级记录
... ...
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/ota/IotOtaUpgradeRecordServiceImpl.java renamed to yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/ota/IotOtaTaskRecordServiceImpl.java
... ... @@ -3,7 +3,7 @@ package cn.iocoder.yudao.module.iot.service.ota;
3 3 import cn.hutool.core.convert.Convert;
4 4 import cn.iocoder.yudao.framework.common.pojo.PageResult;
5 5 import cn.iocoder.yudao.framework.common.util.object.ObjectUtils;
6   -import cn.iocoder.yudao.module.iot.controller.admin.ota.vo.upgrade.record.IotOtaUpgradeRecordPageReqVO;
  6 +import cn.iocoder.yudao.module.iot.controller.admin.ota.vo.task.record.IotOtaTaskRecordPageReqVO;
7 7 import cn.iocoder.yudao.module.iot.dal.dataobject.device.IotDeviceDO;
8 8 import cn.iocoder.yudao.module.iot.dal.dataobject.ota.IotOtaFirmwareDO;
9 9 import cn.iocoder.yudao.module.iot.dal.dataobject.ota.IotOtaTaskRecordDO;
... ... @@ -29,40 +29,39 @@ import static cn.iocoder.yudao.module.iot.enums.ErrorCodeConstants.*;
29 29 @Slf4j
30 30 @Service
31 31 @Validated
32   -public class IotOtaUpgradeRecordServiceImpl implements IotOtaUpgradeRecordService {
  32 +public class IotOtaTaskRecordServiceImpl implements IotOtaTaskRecordService {
33 33  
34 34 @Resource
35   - private IotOtaUpgradeRecordMapper upgradeRecordMapper;
  35 + private IotOtaUpgradeRecordMapper iotOtaUpgradeRecordMapper;
  36 +
36 37 @Resource
37 38 private IotDeviceService deviceService;
38 39 @Resource
39 40 private IotOtaFirmwareService firmwareService;
40 41 @Resource
41   - private IotOtaUpgradeTaskService upgradeTaskService;
  42 + private IotOtaTaskService upgradeTaskService;
42 43  
43 44 @Override
44   - public void createOtaUpgradeRecordBatch(List<Long> deviceIds, Long firmwareId, Long upgradeTaskId) {
  45 + public void createOtaTaskRecordBatch(List<Long> deviceIds, Long firmwareId, Long upgradeTaskId) {
45 46 // 1. 校验升级记录信息是否存在,并且已经取消的任务可以重新开始
46 47 deviceIds.forEach(deviceId -> validateUpgradeRecordDuplicate(firmwareId, upgradeTaskId, String.valueOf(deviceId)));
47 48  
48 49 // 2. 初始化OTA升级记录列表信息
49   - IotOtaTaskDO upgradeTask = upgradeTaskService.getUpgradeTask(upgradeTaskId);
  50 + IotOtaTaskDO upgradeTask = upgradeTaskService.getOtaTask(upgradeTaskId);
50 51 IotOtaFirmwareDO firmware = firmwareService.getOtaFirmware(firmwareId);
51 52 List<IotDeviceDO> deviceList = deviceService.getDeviceListByIdList(deviceIds);
52 53 List<IotOtaTaskRecordDO> upgradeRecordList = deviceList.stream().map(device -> {
53 54 IotOtaTaskRecordDO upgradeRecord = new IotOtaTaskRecordDO();
54 55 upgradeRecord.setFirmwareId(firmware.getId());
55 56 upgradeRecord.setTaskId(upgradeTask.getId());
56   - upgradeRecord.setProductKey(device.getProductKey());
57   - upgradeRecord.setDeviceName(device.getDeviceName());
58   - upgradeRecord.setDeviceId(Convert.toStr(device.getId()));
  57 + upgradeRecord.setDeviceId(device.getId());
59 58 upgradeRecord.setFromFirmwareId(Convert.toLong(device.getFirmwareId()));
60 59 upgradeRecord.setStatus(IotOtaTaskRecordStatusEnum.PENDING.getStatus());
61 60 upgradeRecord.setProgress(0);
62 61 return upgradeRecord;
63 62 }).toList();
64 63 // 3. 保存数据
65   - upgradeRecordMapper.insertBatch(upgradeRecordList);
  64 + iotOtaUpgradeRecordMapper.insertBatch(upgradeRecordList);
66 65 // TODO @芋艿:在这里需要处理推送升级任务的逻辑
67 66 }
68 67  
... ... @@ -76,9 +75,9 @@ public class IotOtaUpgradeRecordServiceImpl implements IotOtaUpgradeRecordServic
76 75 */
77 76 @Override
78 77 @Transactional
79   - public Map<Integer, Long> getOtaUpgradeRecordCount(IotOtaUpgradeRecordPageReqVO pageReqVO) {
  78 + public Map<Integer, Long> getOtaTaskRecordCount(IotOtaTaskRecordPageReqVO pageReqVO) {
80 79 // 分别查询不同状态的OTA升级记录数量
81   - List<Map<String, Object>> upgradeRecordCountList = upgradeRecordMapper.selectOtaUpgradeRecordCount(
  80 + List<Map<String, Object>> upgradeRecordCountList = iotOtaUpgradeRecordMapper.selectOtaUpgradeRecordCount(
82 81 pageReqVO.getTaskId(), pageReqVO.getDeviceName());
83 82 Map<String, Object> upgradeRecordCountMap = ObjectUtils.defaultIfNull(upgradeRecordCountList.get(0));
84 83 Objects.requireNonNull(upgradeRecordCountMap);
... ... @@ -89,9 +88,9 @@ public class IotOtaUpgradeRecordServiceImpl implements IotOtaUpgradeRecordServic
89 88  
90 89 @Override
91 90 @Transactional
92   - public Map<Integer, Long> getOtaUpgradeRecordStatistics(Long firmwareId) {
  91 + public Map<Integer, Long> getOtaTaskRecordStatistics(Long firmwareId) {
93 92 // 查询并统计不同状态的OTA升级记录数量
94   - List<Map<String, Object>> upgradeRecordStatisticsList = upgradeRecordMapper.selectOtaUpgradeRecordStatistics(firmwareId);
  93 + List<Map<String, Object>> upgradeRecordStatisticsList = iotOtaUpgradeRecordMapper.selectOtaUpgradeRecordStatistics(firmwareId);
95 94 Map<String, Object> upgradeRecordStatisticsMap = ObjectUtils.defaultIfNull(upgradeRecordStatisticsList.get(0));
96 95 Objects.requireNonNull(upgradeRecordStatisticsMap);
97 96 return upgradeRecordStatisticsMap.entrySet().stream().collect(Collectors.toMap(
... ... @@ -100,19 +99,19 @@ public class IotOtaUpgradeRecordServiceImpl implements IotOtaUpgradeRecordServic
100 99 }
101 100  
102 101 @Override
103   - public IotOtaTaskRecordDO getUpgradeRecord(Long id) {
104   - return upgradeRecordMapper.selectById(id);
  102 + public IotOtaTaskRecordDO getOtaTaskRecord(Long id) {
  103 + return iotOtaUpgradeRecordMapper.selectById(id);
105 104 }
106 105  
107 106 @Override
108   - public PageResult<IotOtaTaskRecordDO> getUpgradeRecordPage(IotOtaUpgradeRecordPageReqVO pageReqVO) {
109   - return upgradeRecordMapper.selectUpgradeRecordPage(pageReqVO);
  107 + public PageResult<IotOtaTaskRecordDO> getOtaTaskRecordPage(IotOtaTaskRecordPageReqVO pageReqVO) {
  108 + return iotOtaUpgradeRecordMapper.selectUpgradeRecordPage(pageReqVO);
110 109 }
111 110  
112 111 @Override
113 112 public void cancelUpgradeRecordByTaskId(Long taskId) {
114 113 // 暂定只有待推送的升级记录可以取消 TODO @芋艿:可以看看阿里云,哪些可以取消
115   - upgradeRecordMapper.updateUpgradeRecordStatusByTaskIdAndStatus(
  114 + iotOtaUpgradeRecordMapper.updateUpgradeRecordStatusByTaskIdAndStatus(
116 115 IotOtaTaskRecordStatusEnum.CANCELED.getStatus(), taskId,
117 116 IotOtaTaskRecordStatusEnum.PENDING.getStatus());
118 117 }
... ... @@ -127,7 +126,7 @@ public class IotOtaUpgradeRecordServiceImpl implements IotOtaUpgradeRecordServic
127 126 */
128 127 private IotOtaTaskRecordDO validateUpgradeRecordExists(Long id) {
129 128 // 根据ID查询升级记录
130   - IotOtaTaskRecordDO upgradeRecord = upgradeRecordMapper.selectById(id);
  129 + IotOtaTaskRecordDO upgradeRecord = iotOtaUpgradeRecordMapper.selectById(id);
131 130 // 如果查询结果为空,抛出异常
132 131 if (upgradeRecord == null) {
133 132 throw exception(OTA_UPGRADE_RECORD_NOT_EXISTS);
... ... @@ -147,7 +146,7 @@ public class IotOtaUpgradeRecordServiceImpl implements IotOtaUpgradeRecordServic
147 146 * @param deviceId 设备ID,用于标识特定的设备
148 147 */
149 148 private void validateUpgradeRecordDuplicate(Long firmwareId, Long taskId, String deviceId) {
150   - IotOtaTaskRecordDO upgradeRecord = upgradeRecordMapper.selectByConditions(firmwareId, taskId, deviceId);
  149 + IotOtaTaskRecordDO upgradeRecord = iotOtaUpgradeRecordMapper.selectByConditions(firmwareId, taskId, deviceId);
151 150 if (upgradeRecord == null) {
152 151 return;
153 152 }
... ...
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/ota/IotOtaTaskService.java 0 → 100644
  1 +package cn.iocoder.yudao.module.iot.service.ota;
  2 +
  3 +import cn.iocoder.yudao.framework.common.pojo.PageResult;
  4 +import cn.iocoder.yudao.module.iot.controller.admin.ota.vo.task.IotOtaTaskCreateReqVO;
  5 +import cn.iocoder.yudao.module.iot.controller.admin.ota.vo.task.IotOtaTaskPageReqVO;
  6 +import cn.iocoder.yudao.module.iot.dal.dataobject.ota.IotOtaTaskDO;
  7 +import jakarta.validation.Valid;
  8 +
  9 +/**
  10 + * IoT OTA 升级任务 Service 接口
  11 + *
  12 + * @author Shelly Chan
  13 + */
  14 +public interface IotOtaTaskService {
  15 +
  16 + /**
  17 + * 创建 OTA升 级任务
  18 + *
  19 + * @param createReqVO 创建请求对象
  20 + * @return 升级任务编号
  21 + */
  22 + Long createOtaTask(@Valid IotOtaTaskCreateReqVO createReqVO);
  23 +
  24 + /**
  25 + * 取消 OTA 升级任务
  26 + *
  27 + * @param id 升级任务编号
  28 + */
  29 + void cancelOtaTask(Long id);
  30 +
  31 + /**
  32 + * 获取 OTA 升级任务
  33 + *
  34 + * @param id 升级任务编号
  35 + * @return 升级任务
  36 + */
  37 + IotOtaTaskDO getOtaTask(Long id);
  38 +
  39 + /**
  40 + * 分页查询 OTA 升级任务
  41 + *
  42 + * @param pageReqVO 分页查询请求
  43 + * @return 升级任务分页结果
  44 + */
  45 + PageResult<IotOtaTaskDO> getOtaTaskPage(@Valid IotOtaTaskPageReqVO pageReqVO);
  46 +
  47 +}
... ...
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/ota/IotOtaUpgradeTaskServiceImpl.java renamed to yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/ota/IotOtaTaskServiceImpl.java
... ... @@ -4,12 +4,12 @@ import cn.hutool.core.collection.CollUtil;
4 4 import cn.hutool.core.convert.Convert;
5 5 import cn.iocoder.yudao.framework.common.pojo.PageResult;
6 6 import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
7   -import cn.iocoder.yudao.module.iot.controller.admin.ota.vo.upgrade.task.IotOtaUpgradeTaskPageReqVO;
8   -import cn.iocoder.yudao.module.iot.controller.admin.ota.vo.upgrade.task.IotOtaUpgradeTaskSaveReqVO;
  7 +import cn.iocoder.yudao.module.iot.controller.admin.ota.vo.task.IotOtaTaskCreateReqVO;
  8 +import cn.iocoder.yudao.module.iot.controller.admin.ota.vo.task.IotOtaTaskPageReqVO;
9 9 import cn.iocoder.yudao.module.iot.dal.dataobject.device.IotDeviceDO;
10 10 import cn.iocoder.yudao.module.iot.dal.dataobject.ota.IotOtaFirmwareDO;
11 11 import cn.iocoder.yudao.module.iot.dal.dataobject.ota.IotOtaTaskDO;
12   -import cn.iocoder.yudao.module.iot.dal.mysql.ota.IotOtaUpgradeTaskMapper;
  12 +import cn.iocoder.yudao.module.iot.dal.mysql.ota.IotOtaTaskMapper;
13 13 import cn.iocoder.yudao.module.iot.enums.ota.IotOtaTaskDeviceScopeEnum;
14 14 import cn.iocoder.yudao.module.iot.enums.ota.IotOtaTaskStatusEnum;
15 15 import cn.iocoder.yudao.module.iot.service.device.IotDeviceService;
... ... @@ -22,56 +22,54 @@ import org.springframework.validation.annotation.Validated;
22 22  
23 23 import java.util.List;
24 24 import java.util.Objects;
25   -import java.util.stream.Collectors;
26 25  
27 26 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
28 27 import static cn.iocoder.yudao.module.iot.enums.ErrorCodeConstants.*;
29 28  
30 29 /**
31   - * IoT OTA升级任务 Service 实现类
  30 + * IoT OTA 升级任务 Service 实现类
32 31 *
33 32 * @author Shelly Chan
34 33 */
35 34 @Service
36 35 @Validated
37 36 @Slf4j
38   -public class IotOtaUpgradeTaskServiceImpl implements IotOtaUpgradeTaskService {
  37 +public class IotOtaTaskServiceImpl implements IotOtaTaskService {
39 38  
40 39 @Resource
41   - private IotOtaUpgradeTaskMapper upgradeTaskMapper;
  40 + private IotOtaTaskMapper otaTaskMapper;
42 41  
43 42 @Resource
44   - @Lazy
45 43 private IotDeviceService deviceService;
46 44 @Resource
47   - @Lazy
48   - private IotOtaFirmwareService firmwareService;
  45 + private IotOtaFirmwareService otaFirmwareService;
49 46 @Resource
50   - @Lazy
51   - private IotOtaUpgradeRecordService upgradeRecordService;
  47 + @Lazy // 延迟,避免循环依赖报错
  48 + private IotOtaTaskRecordService otaUpgradeRecordService;
52 49  
53 50 @Override
54 51 @Transactional(rollbackFor = Exception.class)
55   - public Long createUpgradeTask(IotOtaUpgradeTaskSaveReqVO createReqVO) {
  52 + public Long createOtaTask(IotOtaTaskCreateReqVO createReqVO) {
56 53 // 1.1 校验同一固件的升级任务名称不重复
57 54 validateFirmwareTaskDuplicate(createReqVO.getFirmwareId(), createReqVO.getName());
58 55 // 1.2 校验固件信息是否存在
59   - IotOtaFirmwareDO firmware = firmwareService.validateFirmwareExists(createReqVO.getFirmwareId());
  56 + IotOtaFirmwareDO firmware = otaFirmwareService.validateFirmwareExists(createReqVO.getFirmwareId());
60 57 // 1.3 补全设备范围信息,并且校验是否又设备可以升级,如果没有设备可以升级,则报错
61   - validateScopeAndDevice(createReqVO.getScope(), createReqVO.getDeviceIds(), firmware.getProductId());
  58 + validateScopeAndDevice(createReqVO.getDeviceScope(), createReqVO.getDeviceIds(), firmware.getProductId());
62 59  
63 60 // 2. 保存 OTA 升级任务信息到数据库
64 61 IotOtaTaskDO upgradeTask = initOtaUpgradeTask(createReqVO, firmware.getProductId());
65   - upgradeTaskMapper.insert(upgradeTask);
  62 + otaTaskMapper.insert(upgradeTask);
66 63  
67 64 // 3. 生成设备升级记录信息并存储,等待定时任务轮询
68   - upgradeRecordService.createOtaUpgradeRecordBatch(upgradeTask.getDeviceIds(), firmware.getId(), upgradeTask.getId());
  65 + // TODO @芋艿:在处理;
  66 +// otaUpgradeRecordService.createOtaUpgradeRecordBatch(upgradeTask.getDeviceIds(), firmware.getId(), upgradeTask.getId());
69 67 return upgradeTask.getId();
70 68 }
71 69  
72 70 @Override
73 71 @Transactional(rollbackFor = Exception.class)
74   - public void cancelUpgradeTask(Long id) {
  72 + public void cancelOtaTask(Long id) {
75 73 // 1.1 校验升级任务是否存在
76 74 IotOtaTaskDO upgradeTask = validateUpgradeTaskExists(id);
77 75 // 1.2 校验升级任务是否可以取消
... ... @@ -81,52 +79,34 @@ public class IotOtaUpgradeTaskServiceImpl implements IotOtaUpgradeTaskService {
81 79 }
82 80  
83 81 // 2. 更新 OTA 升级任务状态为已取消
84   - upgradeTaskMapper.updateById(IotOtaTaskDO.builder()
  82 + otaTaskMapper.updateById(IotOtaTaskDO.builder()
85 83 .id(id).status(IotOtaTaskStatusEnum.CANCELED.getStatus())
86 84 .build());
87 85  
88 86 // 3. 更新 OTA 升级记录状态为已取消
89   - upgradeRecordService.cancelUpgradeRecordByTaskId(id);
  87 + otaUpgradeRecordService.cancelUpgradeRecordByTaskId(id);
90 88 }
91 89  
92 90 @Override
93   - public IotOtaTaskDO getUpgradeTask(Long id) {
94   - return upgradeTaskMapper.selectById(id);
  91 + public IotOtaTaskDO getOtaTask(Long id) {
  92 + return otaTaskMapper.selectById(id);
95 93 }
96 94  
97 95 @Override
98   - public PageResult<IotOtaTaskDO> getUpgradeTaskPage(IotOtaUpgradeTaskPageReqVO pageReqVO) {
99   - return upgradeTaskMapper.selectUpgradeTaskPage(pageReqVO);
100   - }
101   -
102   - @Override
103   - public List<IotOtaTaskDO> getUpgradeTaskByState(Integer state) {
104   - return upgradeTaskMapper.selectUpgradeTaskByState(state);
105   - }
106   -
107   - @Override
108   - public void updateUpgradeTaskStatus(Long id, Integer status) {
109   - upgradeTaskMapper.updateById(IotOtaTaskDO.builder().id(id).status(status).build());
  96 + public PageResult<IotOtaTaskDO> getOtaTaskPage(IotOtaTaskPageReqVO pageReqVO) {
  97 + return otaTaskMapper.selectUpgradeTaskPage(pageReqVO);
110 98 }
111 99  
112 100 /**
113 101 * 校验固件升级任务是否重复
114 102 */
115 103 private void validateFirmwareTaskDuplicate(Long firmwareId, String taskName) {
116   - List<IotOtaTaskDO> upgradeTaskList = upgradeTaskMapper.selectByFirmwareIdAndName(firmwareId, taskName);
  104 + List<IotOtaTaskDO> upgradeTaskList = otaTaskMapper.selectByFirmwareIdAndName(firmwareId, taskName);
117 105 if (CollUtil.isNotEmpty(upgradeTaskList)) {
118 106 throw exception(OTA_UPGRADE_TASK_NAME_DUPLICATE);
119 107 }
120 108 }
121 109  
122   - /**
123   - * 验证升级任务的范围和设备列表的有效性。
124   - *
125   - * @param scope 升级任务的范围,参考 IotOtaUpgradeTaskScopeEnum 枚举值
126   - * @param deviceIds 设备ID列表,当范围为"选择设备"时,该列表不能为空
127   - * @param productId 产品ID,当范围为"所有设备"时,用于获取设备列表
128   - * @throws cn.iocoder.yudao.framework.common.exception.ServiceException,抛出相应的异常
129   - */
130 110 private void validateScopeAndDevice(Integer scope, List<Long> deviceIds, Long productId) {
131 111 if (Objects.equals(scope, IotOtaTaskDeviceScopeEnum.SELECT.getScope())) {
132 112 if (CollUtil.isEmpty(deviceIds)) {
... ... @@ -143,30 +123,24 @@ public class IotOtaUpgradeTaskServiceImpl implements IotOtaUpgradeTaskService {
143 123 }
144 124 }
145 125  
146   - /**
147   - * 验证升级任务是否存在
148   - */
149 126 private IotOtaTaskDO validateUpgradeTaskExists(Long id) {
150   - IotOtaTaskDO upgradeTask = upgradeTaskMapper.selectById(id);
  127 + IotOtaTaskDO upgradeTask = otaTaskMapper.selectById(id);
151 128 if (Objects.isNull(upgradeTask)) {
152 129 throw exception(OTA_UPGRADE_TASK_NOT_EXISTS);
153 130 }
154 131 return upgradeTask;
155 132 }
156 133  
157   - /**
158   - * 初始化升级任务
159   - */
160   - private IotOtaTaskDO initOtaUpgradeTask(IotOtaUpgradeTaskSaveReqVO createReqVO, Long productId) {
  134 + private IotOtaTaskDO initOtaUpgradeTask(IotOtaTaskCreateReqVO createReqVO, Long productId) {
161 135 IotOtaTaskDO upgradeTask = BeanUtils.toBean(createReqVO, IotOtaTaskDO.class);
162 136 upgradeTask.setDeviceTotalCount(Convert.toLong(CollUtil.size(createReqVO.getDeviceIds())))
163 137 .setStatus(IotOtaTaskStatusEnum.IN_PROGRESS.getStatus());
164 138  
165   - if (Objects.equals(createReqVO.getScope(), IotOtaTaskDeviceScopeEnum.ALL.getScope())) {
  139 + if (Objects.equals(createReqVO.getDeviceScope(), IotOtaTaskDeviceScopeEnum.ALL.getScope())) {
166 140 List<IotDeviceDO> deviceList = deviceService.getDeviceListByProductId(productId);
167 141 upgradeTask.setDeviceTotalCount((long) deviceList.size());
168   - upgradeTask.setDeviceIds(
169   - deviceList.stream().map(IotDeviceDO::getId).collect(Collectors.toList()));
  142 +// upgradeTask.setDeviceIds(
  143 +// deviceList.stream().map(IotDeviceDO::getId).collect(Collectors.toList()));
170 144 }
171 145 return upgradeTask;
172 146 }
... ...
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/ota/IotOtaUpgradeTaskService.java deleted
1   -package cn.iocoder.yudao.module.iot.service.ota;
2   -
3   -import cn.iocoder.yudao.framework.common.pojo.PageResult;
4   -import cn.iocoder.yudao.module.iot.controller.admin.ota.vo.upgrade.task.IotOtaUpgradeTaskPageReqVO;
5   -import cn.iocoder.yudao.module.iot.controller.admin.ota.vo.upgrade.task.IotOtaUpgradeTaskSaveReqVO;
6   -import cn.iocoder.yudao.module.iot.dal.dataobject.ota.IotOtaTaskDO;
7   -import jakarta.validation.Valid;
8   -
9   -import java.util.List;
10   -
11   -/**
12   - * IoT OTA升级任务 Service 接口
13   - *
14   - * @author Shelly Chan
15   - */
16   -public interface IotOtaUpgradeTaskService {
17   -
18   - /**
19   - * 创建OTA升级任务
20   - *
21   - * @param createReqVO OTA升级任务的创建请求对象,包含创建任务所需的信息
22   - * @return 创建成功的OTA升级任务的ID
23   - */
24   - Long createUpgradeTask(@Valid IotOtaUpgradeTaskSaveReqVO createReqVO);
25   -
26   - /**
27   - * 取消OTA升级任务
28   - *
29   - * @param id 要取消的OTA升级任务的ID
30   - */
31   - void cancelUpgradeTask(Long id);
32   -
33   - /**
34   - * 根据ID获取OTA升级任务的详细信息
35   - *
36   - * @param id OTA升级任务的ID
37   - * @return OTA升级任务的详细信息对象
38   - */
39   - IotOtaTaskDO getUpgradeTask(Long id);
40   -
41   - /**
42   - * 分页查询OTA升级任务
43   - *
44   - * @param pageReqVO OTA升级任务的分页查询请求对象,包含查询条件和分页信息
45   - * @return 分页查询结果,包含OTA升级任务列表和总记录数
46   - */
47   - PageResult<IotOtaTaskDO> getUpgradeTaskPage(@Valid IotOtaUpgradeTaskPageReqVO pageReqVO);
48   -
49   - /**
50   - * 根据任务状态获取升级任务列表
51   - *
52   - * @param state 任务状态,用于筛选符合条件的升级任务
53   - * @return 返回符合指定状态的升级任务列表,列表中的元素为 IotOtaUpgradeTaskDO 对象
54   - */
55   - List<IotOtaTaskDO> getUpgradeTaskByState(Integer state);
56   -
57   - /**
58   - * 更新升级任务的状态。
59   - * <p>
60   - * 该函数用于根据任务ID更新指定升级任务的状态。通常用于在任务执行过程中
61   - * 更新任务的状态,例如从“进行中”变为“已完成”或“失败”。
62   - *
63   - * @param id 升级任务的唯一标识符,类型为Long。不能为null。
64   - * @param status 要更新的任务状态,类型为Integer。通常表示任务的状态码,如0表示未开始,1表示进行中,2表示已完成等。
65   - */
66   - void updateUpgradeTaskStatus(Long id, Integer status);
67   -
68   -}