Commit 8cf8af1f6d2dc490da99e386afc4775f3d36c36d

Authored by YunaiV
1 parent ebfe35c7

【代码评审】IoT:固件管理

Showing 29 changed files with 128 additions and 82 deletions
yudao-module-iot/yudao-module-iot-api/src/main/java/cn/iocoder/yudao/module/iot/enums/ErrorCodeConstants.java
@@ -52,14 +52,17 @@ public interface ErrorCodeConstants { @@ -52,14 +52,17 @@ public interface ErrorCodeConstants {
52 // ========== 插件实例 1-050-007-000 ========== 52 // ========== 插件实例 1-050-007-000 ==========
53 53
54 // ========== 固件相关 1-050-008-000 ========== 54 // ========== 固件相关 1-050-008-000 ==========
  55 +
55 ErrorCode OTA_FIRMWARE_NOT_EXISTS = new ErrorCode(1_050_008_000, "固件信息不存在"); 56 ErrorCode OTA_FIRMWARE_NOT_EXISTS = new ErrorCode(1_050_008_000, "固件信息不存在");
56 ErrorCode OTA_FIRMWARE_PRODUCT_VERSION_DUPLICATE = new ErrorCode(1_050_008_001, "产品版本号重复"); 57 ErrorCode OTA_FIRMWARE_PRODUCT_VERSION_DUPLICATE = new ErrorCode(1_050_008_001, "产品版本号重复");
57 58
  59 + // TODO @li:1_050_008_100,这样有点间隔?
58 ErrorCode OTA_UPGRADE_TASK_NOT_EXISTS = new ErrorCode(1_050_008_002, "升级任务不存在"); 60 ErrorCode OTA_UPGRADE_TASK_NOT_EXISTS = new ErrorCode(1_050_008_002, "升级任务不存在");
59 ErrorCode OTA_UPGRADE_TASK_NAME_DUPLICATE = new ErrorCode(1_050_008_003, "升级任务名称重复"); 61 ErrorCode OTA_UPGRADE_TASK_NAME_DUPLICATE = new ErrorCode(1_050_008_003, "升级任务名称重复");
60 ErrorCode OTA_UPGRADE_TASK_PARAMS_INVALID = new ErrorCode(1_050_008_004, "升级任务参数无效"); 62 ErrorCode OTA_UPGRADE_TASK_PARAMS_INVALID = new ErrorCode(1_050_008_004, "升级任务参数无效");
61 ErrorCode OTA_UPGRADE_TASK_CANNOT_CANCEL = new ErrorCode(1_050_008_005, "升级任务不能取消"); 63 ErrorCode OTA_UPGRADE_TASK_CANNOT_CANCEL = new ErrorCode(1_050_008_005, "升级任务不能取消");
62 64
  65 + // TODO @li:1_050_008_200
63 ErrorCode OTA_UPGRADE_RECORD_NOT_EXISTS = new ErrorCode(1_050_008_006, "升级记录不存在"); 66 ErrorCode OTA_UPGRADE_RECORD_NOT_EXISTS = new ErrorCode(1_050_008_006, "升级记录不存在");
64 ErrorCode OTA_UPGRADE_RECORD_DUPLICATE = new ErrorCode(1_050_008_007, "升级记录重复"); 67 ErrorCode OTA_UPGRADE_RECORD_DUPLICATE = new ErrorCode(1_050_008_007, "升级记录重复");
65 ErrorCode OTA_UPGRADE_RECORD_CANNOT_RETRY = new ErrorCode(1_050_008_008, "升级记录不能重试"); 68 ErrorCode OTA_UPGRADE_RECORD_CANNOT_RETRY = new ErrorCode(1_050_008_008, "升级记录不能重试");
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; @@ -21,7 +21,7 @@ import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
21 21
22 @Validated 22 @Validated
23 @RestController 23 @RestController
24 -@Tag(name = "管理后台 - IoT OTA固件") 24 +@Tag(name = "管理后台 - IoT OTA 固件")
25 @RequestMapping("/iot/ota-firmware") 25 @RequestMapping("/iot/ota-firmware")
26 public class IotOtaFirmwareController { 26 public class IotOtaFirmwareController {
27 27
@@ -29,14 +29,14 @@ public class IotOtaFirmwareController { @@ -29,14 +29,14 @@ public class IotOtaFirmwareController {
29 private IotOtaFirmwareService otaFirmwareService; 29 private IotOtaFirmwareService otaFirmwareService;
30 30
31 @PostMapping("/create") 31 @PostMapping("/create")
32 - @Operation(summary = "创建OTA固件") 32 + @Operation(summary = "创建 OTA 固件")
33 @PreAuthorize("@ss.hasPermission('iot:ota-firmware:create')") 33 @PreAuthorize("@ss.hasPermission('iot:ota-firmware:create')")
34 public CommonResult<Long> createOtaFirmware(@Valid @RequestBody IotOtaFirmwareCreateReqVO createReqVO) { 34 public CommonResult<Long> createOtaFirmware(@Valid @RequestBody IotOtaFirmwareCreateReqVO createReqVO) {
35 return success(otaFirmwareService.createOtaFirmware(createReqVO)); 35 return success(otaFirmwareService.createOtaFirmware(createReqVO));
36 } 36 }
37 37
38 @PutMapping("/update") 38 @PutMapping("/update")
39 - @Operation(summary = "更新OTA固件") 39 + @Operation(summary = "更新 OTA 固件")
40 @PreAuthorize("@ss.hasPermission('iot:ota-firmware:update')") 40 @PreAuthorize("@ss.hasPermission('iot:ota-firmware:update')")
41 public CommonResult<Boolean> updateOtaFirmware(@Valid @RequestBody IotOtaFirmwareUpdateReqVO updateReqVO) { 41 public CommonResult<Boolean> updateOtaFirmware(@Valid @RequestBody IotOtaFirmwareUpdateReqVO updateReqVO) {
42 otaFirmwareService.updateOtaFirmware(updateReqVO); 42 otaFirmwareService.updateOtaFirmware(updateReqVO);
@@ -44,7 +44,7 @@ public class IotOtaFirmwareController { @@ -44,7 +44,7 @@ public class IotOtaFirmwareController {
44 } 44 }
45 45
46 @GetMapping("/get") 46 @GetMapping("/get")
47 - @Operation(summary = "获得OTA固件") 47 + @Operation(summary = "获得 OTA 固件")
48 @PreAuthorize("@ss.hasPermission('iot:ota-firmware:query')") 48 @PreAuthorize("@ss.hasPermission('iot:ota-firmware:query')")
49 public CommonResult<IotOtaFirmwareRespVO> getOtaFirmware(@RequestParam("id") Long id) { 49 public CommonResult<IotOtaFirmwareRespVO> getOtaFirmware(@RequestParam("id") Long id) {
50 IotOtaFirmwareDO otaFirmware = otaFirmwareService.getOtaFirmware(id); 50 IotOtaFirmwareDO otaFirmware = otaFirmwareService.getOtaFirmware(id);
@@ -52,7 +52,7 @@ public class IotOtaFirmwareController { @@ -52,7 +52,7 @@ public class IotOtaFirmwareController {
52 } 52 }
53 53
54 @GetMapping("/page") 54 @GetMapping("/page")
55 - @Operation(summary = "获得OTA固件分页") 55 + @Operation(summary = "获得 OTA 固件分页")
56 @PreAuthorize("@ss.hasPermission('iot:ota-firmware:query')") 56 @PreAuthorize("@ss.hasPermission('iot:ota-firmware:query')")
57 public CommonResult<PageResult<IotOtaFirmwareRespVO>> getOtaFirmwarePage(@Valid IotOtaFirmwarePageReqVO pageReqVO) { 57 public CommonResult<PageResult<IotOtaFirmwareRespVO>> getOtaFirmwarePage(@Valid IotOtaFirmwarePageReqVO pageReqVO) {
58 PageResult<IotOtaFirmwareDO> pageResult = otaFirmwareService.getOtaFirmwarePage(pageReqVO); 58 PageResult<IotOtaFirmwareDO> pageResult = otaFirmwareService.getOtaFirmwarePage(pageReqVO);
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/ota/IotOtaUpgradeRecordController.java
@@ -22,21 +22,13 @@ import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; @@ -22,21 +22,13 @@ import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
22 22
23 @Validated 23 @Validated
24 @RestController 24 @RestController
25 -@Tag(name = "管理后台 - OTA升级记录") 25 +@Tag(name = "管理后台 - OTA 升级记录")
26 @RequestMapping("/iot/ota-upgrade-record") 26 @RequestMapping("/iot/ota-upgrade-record")
27 public class IotOtaUpgradeRecordController { 27 public class IotOtaUpgradeRecordController {
28 28
29 @Resource 29 @Resource
30 private IotOtaUpgradeRecordService upgradeRecordService; 30 private IotOtaUpgradeRecordService upgradeRecordService;
31 31
32 - @GetMapping("/get-count")  
33 - @Operation(summary = "获得升级记录 分页 tab count")  
34 - @PreAuthorize("@ss.hasPermission('iot:ota-upgrade-record:query')")  
35 - public CommonResult<Map<Integer, Long>> getOtaUpgradeRecordCount(  
36 - @Valid IotOtaUpgradeRecordPageReqVO pageReqVO) {  
37 - return success(upgradeRecordService.getOtaUpgradeRecordCount(pageReqVO));  
38 - }  
39 -  
40 @GetMapping("/get-statistics") 32 @GetMapping("/get-statistics")
41 @Operation(summary = "固件升级设备统计") 33 @Operation(summary = "固件升级设备统计")
42 @PreAuthorize("@ss.hasPermission('iot:ota-upgrade-record:query')") 34 @PreAuthorize("@ss.hasPermission('iot:ota-upgrade-record:query')")
@@ -46,6 +38,14 @@ public class IotOtaUpgradeRecordController { @@ -46,6 +38,14 @@ public class IotOtaUpgradeRecordController {
46 return success(upgradeRecordService.getOtaUpgradeRecordStatistics(firmwareId)); 38 return success(upgradeRecordService.getOtaUpgradeRecordStatistics(firmwareId));
47 } 39 }
48 40
  41 + @GetMapping("/get-count")
  42 + @Operation(summary = "获得升级记录分页 tab 数量")
  43 + @PreAuthorize("@ss.hasPermission('iot:ota-upgrade-record:query')")
  44 + public CommonResult<Map<Integer, Long>> getOtaUpgradeRecordCount(
  45 + @Valid IotOtaUpgradeRecordPageReqVO pageReqVO) {
  46 + return success(upgradeRecordService.getOtaUpgradeRecordCount(pageReqVO));
  47 + }
  48 +
49 @GetMapping("/page") 49 @GetMapping("/page")
50 @Operation(summary = "获得升级记录分页") 50 @Operation(summary = "获得升级记录分页")
51 @PreAuthorize("@ss.hasPermission('iot:ota-upgrade-record:query')") 51 @PreAuthorize("@ss.hasPermission('iot:ota-upgrade-record:query')")
@@ -64,6 +64,7 @@ public class IotOtaUpgradeRecordController { @@ -64,6 +64,7 @@ public class IotOtaUpgradeRecordController {
64 return success(BeanUtils.toBean(upgradeRecord, IotOtaUpgradeRecordRespVO.class)); 64 return success(BeanUtils.toBean(upgradeRecord, IotOtaUpgradeRecordRespVO.class));
65 } 65 }
66 66
  67 + // TODO @li:使用 Putmapping
67 @PostMapping("/retry") 68 @PostMapping("/retry")
68 @Operation(summary = "重试升级记录") 69 @Operation(summary = "重试升级记录")
69 @PreAuthorize("@ss.hasPermission('iot:ota-upgrade-record:retry')") 70 @PreAuthorize("@ss.hasPermission('iot:ota-upgrade-record:retry')")
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/ota/IotOtaUpgradeTaskController.java
@@ -44,6 +44,7 @@ public class IotOtaUpgradeTaskController { @@ -44,6 +44,7 @@ public class IotOtaUpgradeTaskController {
44 return success(true); 44 return success(true);
45 } 45 }
46 46
  47 + // TODO @li:get 接口,不是 @RequestBody 哈
47 @GetMapping("/page") 48 @GetMapping("/page")
48 @Operation(summary = "获得升级任务分页") 49 @Operation(summary = "获得升级任务分页")
49 @PreAuthorize(value = "@ss.hasPermission('iot:ota-upgrade-task:query')") 50 @PreAuthorize(value = "@ss.hasPermission('iot:ota-upgrade-task:query')")
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/ota/vo/firmware/IotOtaFirmwareCommonReqVO.java
@@ -6,6 +6,7 @@ import lombok.Data; @@ -6,6 +6,7 @@ import lombok.Data;
6 6
7 import static io.swagger.v3.oas.annotations.media.Schema.RequiredMode.REQUIRED; 7 import static io.swagger.v3.oas.annotations.media.Schema.RequiredMode.REQUIRED;
8 8
  9 +// TODO @li:因为 create 和 update 可以公用的字段比较少,建议不用 IotOtaFirmwareCommonReqVO
9 @Data 10 @Data
10 @Schema(description = "管理后台 - OTA固件信息 Request VO") 11 @Schema(description = "管理后台 - OTA固件信息 Request VO")
11 public class IotOtaFirmwareCommonReqVO { 12 public class IotOtaFirmwareCommonReqVO {
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/ota/vo/firmware/IotOtaFirmwareCreateReqVO.java
@@ -7,10 +7,13 @@ import lombok.Data; @@ -7,10 +7,13 @@ import lombok.Data;
7 7
8 import static io.swagger.v3.oas.annotations.media.Schema.RequiredMode.REQUIRED; 8 import static io.swagger.v3.oas.annotations.media.Schema.RequiredMode.REQUIRED;
9 9
10 -@Data 10 +// TODO @li:中英文之间,有个空格。中文写作习惯哈。
11 @Schema(description = "管理后台 - OTA固件创建 Request VO") 11 @Schema(description = "管理后台 - OTA固件创建 Request VO")
  12 +@Data
12 public class IotOtaFirmwareCreateReqVO extends IotOtaFirmwareCommonReqVO { 13 public class IotOtaFirmwareCreateReqVO extends IotOtaFirmwareCommonReqVO {
13 14
  15 + // TODO @li:因为有了注解,注释可以不写哈
  16 + // TODO @li:swagger 注解,写在 validator 注解之前,保持项目统一哈。
14 /** 17 /**
15 * 版本号 18 * 版本号
16 */ 19 */
@@ -27,6 +30,7 @@ public class IotOtaFirmwareCreateReqVO extends IotOtaFirmwareCommonReqVO { @@ -27,6 +30,7 @@ public class IotOtaFirmwareCreateReqVO extends IotOtaFirmwareCommonReqVO {
27 @Schema(description = "产品编号", requiredMode = REQUIRED, example = "1024") 30 @Schema(description = "产品编号", requiredMode = REQUIRED, example = "1024")
28 private String productId; 31 private String productId;
29 32
  33 + // TODO @li:productId 即可,而 productKey 通过 productId 查询
30 /** 34 /**
31 * 产品标识 35 * 产品标识
32 * <p> 36 * <p>
@@ -44,6 +48,8 @@ public class IotOtaFirmwareCreateReqVO extends IotOtaFirmwareCommonReqVO { @@ -44,6 +48,8 @@ public class IotOtaFirmwareCreateReqVO extends IotOtaFirmwareCommonReqVO {
44 @Schema(description = "签名方式", example = "MD5") 48 @Schema(description = "签名方式", example = "MD5")
45 private String signMethod; 49 private String signMethod;
46 50
  51 + // TODO @li:fileSign、fileSize 通过后端下载文件,计算出来。对前端屏蔽这个细节。
  52 +
47 /** 53 /**
48 * 固件文件签名 54 * 固件文件签名
49 */ 55 */
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/ota/vo/firmware/IotOtaFirmwarePageReqVO.java
@@ -5,7 +5,7 @@ import io.swagger.v3.oas.annotations.media.Schema; @@ -5,7 +5,7 @@ import io.swagger.v3.oas.annotations.media.Schema;
5 import lombok.Data; 5 import lombok.Data;
6 6
7 @Data 7 @Data
8 -@Schema(description = "管理后台 - OTA固件分页 Request VO") 8 +@Schema(description = "管理后台 - OTA 固件分页 Request VO")
9 public class IotOtaFirmwarePageReqVO extends PageParam { 9 public class IotOtaFirmwarePageReqVO extends PageParam {
10 10
11 /** 11 /**
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/ota/vo/firmware/IotOtaFirmwareRespVO.java
@@ -10,7 +10,7 @@ import lombok.Data; @@ -10,7 +10,7 @@ import lombok.Data;
10 import static io.swagger.v3.oas.annotations.media.Schema.RequiredMode.REQUIRED; 10 import static io.swagger.v3.oas.annotations.media.Schema.RequiredMode.REQUIRED;
11 11
12 @Data 12 @Data
13 -@Schema(description = "管理后台 - OTA固件 Response VO") 13 +@Schema(description = "管理后台 - OTA 固件 Response VO")
14 public class IotOtaFirmwareRespVO implements VO { 14 public class IotOtaFirmwareRespVO implements VO {
15 15
16 /** 16 /**
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/ota/vo/upgrade/record/IotOtaUpgradeRecordPageReqVO.java
@@ -11,6 +11,7 @@ import static io.swagger.v3.oas.annotations.media.Schema.RequiredMode.REQUIRED; @@ -11,6 +11,7 @@ import static io.swagger.v3.oas.annotations.media.Schema.RequiredMode.REQUIRED;
11 @Schema(description = "管理后台 - OTA升级记录分页 Request VO") 11 @Schema(description = "管理后台 - OTA升级记录分页 Request VO")
12 public class IotOtaUpgradeRecordPageReqVO extends PageParam { 12 public class IotOtaUpgradeRecordPageReqVO extends PageParam {
13 13
  14 + // TODO @li:使用 IotOtaUpgradeRecordStatusEnum 枚举哈
14 /** 15 /**
15 * 待处理状态 16 * 待处理状态
16 */ 17 */
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/ota/vo/upgrade/task/IotOtaUpgradeTaskSaveReqVO.java
@@ -57,6 +57,7 @@ public class IotOtaUpgradeTaskSaveReqVO { @@ -57,6 +57,7 @@ public class IotOtaUpgradeTaskSaveReqVO {
57 @Schema(description = "选中的设备编号数组", requiredMode = REQUIRED, example = "[1,2,3,4]") 57 @Schema(description = "选中的设备编号数组", requiredMode = REQUIRED, example = "[1,2,3,4]")
58 private List<Long> deviceIds; 58 private List<Long> deviceIds;
59 59
  60 + // TODO @li:通过 deviceIds 查询 deviceNames,前端不传递哈
60 /** 61 /**
61 * 选中的设备名字数组 62 * 选中的设备名字数组
62 * <p> 63 * <p>
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/convert/ota/IotOtaUpgradeRecordConvert.java
@@ -5,7 +5,7 @@ import cn.iocoder.yudao.module.iot.dal.dataobject.device.IotDeviceDO; @@ -5,7 +5,7 @@ import cn.iocoder.yudao.module.iot.dal.dataobject.device.IotDeviceDO;
5 import cn.iocoder.yudao.module.iot.dal.dataobject.ota.IotOtaFirmwareDO; 5 import cn.iocoder.yudao.module.iot.dal.dataobject.ota.IotOtaFirmwareDO;
6 import cn.iocoder.yudao.module.iot.dal.dataobject.ota.IotOtaUpgradeTaskDO; 6 import cn.iocoder.yudao.module.iot.dal.dataobject.ota.IotOtaUpgradeTaskDO;
7 import cn.iocoder.yudao.module.iot.enums.ota.IotOtaUpgradeRecordStatusEnum; 7 import cn.iocoder.yudao.module.iot.enums.ota.IotOtaUpgradeRecordStatusEnum;
8 -import cn.iocoder.yudao.module.iot.service.ota.bo.upgrade.record.IotOtaUpgradeRecordCreateReqBO; 8 +import cn.iocoder.yudao.module.iot.service.ota.bo.IotOtaUpgradeRecordCreateReqBO;
9 import org.mapstruct.Mapper; 9 import org.mapstruct.Mapper;
10 import org.mapstruct.factory.Mappers; 10 import org.mapstruct.factory.Mappers;
11 11
@@ -16,6 +16,7 @@ public interface IotOtaUpgradeRecordConvert { @@ -16,6 +16,7 @@ public interface IotOtaUpgradeRecordConvert {
16 16
17 IotOtaUpgradeRecordConvert INSTANCE = Mappers.getMapper(IotOtaUpgradeRecordConvert.class); 17 IotOtaUpgradeRecordConvert INSTANCE = Mappers.getMapper(IotOtaUpgradeRecordConvert.class);
18 18
  19 + // TODO @li:一般情况下,这种 convert 直接写 service 就好啦。不用特别写一个哈
19 default List<IotOtaUpgradeRecordCreateReqBO> convertBOList(IotOtaUpgradeTaskDO upgradeTask, IotOtaFirmwareDO firmware, List<IotDeviceDO> deviceList) { 20 default List<IotOtaUpgradeRecordCreateReqBO> convertBOList(IotOtaUpgradeTaskDO upgradeTask, IotOtaFirmwareDO firmware, List<IotDeviceDO> deviceList) {
20 return deviceList.stream().map(device -> { 21 return deviceList.stream().map(device -> {
21 IotOtaUpgradeRecordCreateReqBO createReqBO = new IotOtaUpgradeRecordCreateReqBO(); 22 IotOtaUpgradeRecordCreateReqBO createReqBO = new IotOtaUpgradeRecordCreateReqBO();
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/dataobject/ota/IotOtaUpgradeTaskDO.java
@@ -70,6 +70,8 @@ public class IotOtaUpgradeTaskDO extends BaseDO { @@ -70,6 +70,8 @@ public class IotOtaUpgradeTaskDO extends BaseDO {
70 */ 70 */
71 @TableField(typeHandler = JacksonTypeHandler.class) 71 @TableField(typeHandler = JacksonTypeHandler.class)
72 private List<Long> deviceIds; 72 private List<Long> deviceIds;
  73 +
  74 + // TODO @li:这个通过查询,不用冗余
73 /** 75 /**
74 * 选中的设备名字数组 76 * 选中的设备名字数组
75 * <p> 77 * <p>
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/mysql/device/IotDeviceMapper.java
@@ -66,8 +66,7 @@ public interface IotDeviceMapper extends BaseMapperX&lt;IotDeviceDO&gt; { @@ -66,8 +66,7 @@ public interface IotDeviceMapper extends BaseMapperX&lt;IotDeviceDO&gt; {
66 66
67 default Long selectCountByGroupId(Long groupId) { 67 default Long selectCountByGroupId(Long groupId) {
68 return selectCount(new LambdaQueryWrapperX<IotDeviceDO>() 68 return selectCount(new LambdaQueryWrapperX<IotDeviceDO>()
69 - .apply("FIND_IN_SET(" + groupId + ",group_ids) > 0")  
70 - .orderByDesc(IotDeviceDO::getId)); 69 + .apply("FIND_IN_SET(" + groupId + ",group_ids) > 0"));
71 } 70 }
72 71
73 } 72 }
74 \ No newline at end of file 73 \ No newline at end of file
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/mysql/ota/IotOtaFirmwareMapper.java
@@ -9,6 +9,7 @@ import org.apache.ibatis.annotations.Mapper; @@ -9,6 +9,7 @@ import org.apache.ibatis.annotations.Mapper;
9 9
10 import java.util.List; 10 import java.util.List;
11 11
  12 +// TODO @li:这里的注释,可以去掉哈,多了点点
12 /** 13 /**
13 * IotOtaFirmwareMapper 接口用于操作 IotOtaFirmwareDO 实体类对应的数据库表。 14 * IotOtaFirmwareMapper 接口用于操作 IotOtaFirmwareDO 实体类对应的数据库表。
14 * 该接口继承自 BaseMapperX,提供了基本的 CRUD 操作,并扩展了特定查询方法。 15 * 该接口继承自 BaseMapperX,提供了基本的 CRUD 操作,并扩展了特定查询方法。
@@ -24,9 +25,8 @@ public interface IotOtaFirmwareMapper extends BaseMapperX&lt;IotOtaFirmwareDO&gt; { @@ -24,9 +25,8 @@ public interface IotOtaFirmwareMapper extends BaseMapperX&lt;IotOtaFirmwareDO&gt; {
24 * @return 返回符合条件的固件信息列表。 25 * @return 返回符合条件的固件信息列表。
25 */ 26 */
26 default List<IotOtaFirmwareDO> selectByProductIdAndVersion(String productId, String version) { 27 default List<IotOtaFirmwareDO> selectByProductIdAndVersion(String productId, String version) {
27 - return selectList(new LambdaQueryWrapperX<IotOtaFirmwareDO>()  
28 - .eq(IotOtaFirmwareDO::getProductId, productId)  
29 - .eq(IotOtaFirmwareDO::getVersion, version)); 28 + return selectList(IotOtaFirmwareDO::getProductId, productId,
  29 + IotOtaFirmwareDO::getVersion, version);
30 } 30 }
31 31
32 /** 32 /**
@@ -36,11 +36,10 @@ public interface IotOtaFirmwareMapper extends BaseMapperX&lt;IotOtaFirmwareDO&gt; { @@ -36,11 +36,10 @@ public interface IotOtaFirmwareMapper extends BaseMapperX&lt;IotOtaFirmwareDO&gt; {
36 * @return 返回分页查询结果,包含符合条件的固件信息列表。 36 * @return 返回分页查询结果,包含符合条件的固件信息列表。
37 */ 37 */
38 default PageResult<IotOtaFirmwareDO> selectPage(IotOtaFirmwarePageReqVO pageReqVO) { 38 default PageResult<IotOtaFirmwareDO> selectPage(IotOtaFirmwarePageReqVO pageReqVO) {
39 - return selectPage(pageReqVO,  
40 - new LambdaQueryWrapperX<IotOtaFirmwareDO>()  
41 - .likeIfPresent(IotOtaFirmwareDO::getName, pageReqVO.getName())  
42 - .eqIfPresent(IotOtaFirmwareDO::getProductId, pageReqVO.getProductId())  
43 - .orderByDesc(IotOtaFirmwareDO::getCreateTime)); 39 + return selectPage(pageReqVO, new LambdaQueryWrapperX<IotOtaFirmwareDO>()
  40 + .likeIfPresent(IotOtaFirmwareDO::getName, pageReqVO.getName())
  41 + .eqIfPresent(IotOtaFirmwareDO::getProductId, pageReqVO.getProductId())
  42 + .orderByDesc(IotOtaFirmwareDO::getCreateTime));
44 } 43 }
45 44
46 } 45 }
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/mysql/ota/IotOtaUpgradeRecordMapper.java
@@ -12,8 +12,9 @@ import org.apache.ibatis.annotations.Param; @@ -12,8 +12,9 @@ import org.apache.ibatis.annotations.Param;
12 12
13 import java.util.List; 13 import java.util.List;
14 14
  15 +// TODO @li:这里的注释,可以去掉哈,多了点点
15 /** 16 /**
16 - * OTA升级记录 Mapper 接口 17 + * OTA 升级记录 Mapper 接口
17 */ 18 */
18 @Mapper 19 @Mapper
19 public interface IotOtaUpgradeRecordMapper extends BaseMapperX<IotOtaUpgradeRecordDO> { 20 public interface IotOtaUpgradeRecordMapper extends BaseMapperX<IotOtaUpgradeRecordDO> {
@@ -78,6 +79,7 @@ public interface IotOtaUpgradeRecordMapper extends BaseMapperX&lt;IotOtaUpgradeReco @@ -78,6 +79,7 @@ public interface IotOtaUpgradeRecordMapper extends BaseMapperX&lt;IotOtaUpgradeReco
78 */ 79 */
79 default void cancelUpgradeRecordByTaskId(Long taskId) { 80 default void cancelUpgradeRecordByTaskId(Long taskId) {
80 // 使用LambdaUpdateWrapper构建更新条件,将状态为“待处理”的记录更新为“已取消” 81 // 使用LambdaUpdateWrapper构建更新条件,将状态为“待处理”的记录更新为“已取消”
  82 + // TODO @li:哪些可以更新,通过 service 传递。mapper 尽量不要有逻辑
81 update(new LambdaUpdateWrapper<IotOtaUpgradeRecordDO>() 83 update(new LambdaUpdateWrapper<IotOtaUpgradeRecordDO>()
82 .set(IotOtaUpgradeRecordDO::getStatus, IotOtaUpgradeRecordStatusEnum.CANCELED.getStatus()) 84 .set(IotOtaUpgradeRecordDO::getStatus, IotOtaUpgradeRecordStatusEnum.CANCELED.getStatus())
83 .eq(IotOtaUpgradeRecordDO::getTaskId, taskId) 85 .eq(IotOtaUpgradeRecordDO::getTaskId, taskId)
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/mysql/ota/IotOtaUpgradeTaskMapper.java
@@ -9,6 +9,7 @@ import org.apache.ibatis.annotations.Mapper; @@ -9,6 +9,7 @@ import org.apache.ibatis.annotations.Mapper;
9 9
10 import java.util.List; 10 import java.util.List;
11 11
  12 +// TODO @li:这里的注释,可以去掉哈,多了点点
12 /** 13 /**
13 * IotOtaUpgradeTaskMapper 接口用于操作 IotOtaUpgradeTaskDO 数据库表。 14 * IotOtaUpgradeTaskMapper 接口用于操作 IotOtaUpgradeTaskDO 数据库表。
14 * 该接口继承自 BaseMapperX,提供了基本的数据库操作方法。 15 * 该接口继承自 BaseMapperX,提供了基本的数据库操作方法。
@@ -46,13 +47,11 @@ public interface IotOtaUpgradeTaskMapper extends BaseMapperX&lt;IotOtaUpgradeTaskDO @@ -46,13 +47,11 @@ public interface IotOtaUpgradeTaskMapper extends BaseMapperX&lt;IotOtaUpgradeTaskDO
46 * <p> 47 * <p>
47 * 该函数通过传入的任务状态,查询数据库中符合条件的升级任务列表。 48 * 该函数通过传入的任务状态,查询数据库中符合条件的升级任务列表。
48 * 49 *
49 - * @param state 任务状态,用于筛选升级任务的状态值 50 + * @param status 任务状态,用于筛选升级任务的状态值
50 * @return 返回符合条件的升级任务列表,列表中的每个元素为 IotOtaUpgradeTaskDO 对象 51 * @return 返回符合条件的升级任务列表,列表中的每个元素为 IotOtaUpgradeTaskDO 对象
51 */ 52 */
52 - default List<IotOtaUpgradeTaskDO> selectUpgradeTaskByState(Integer state) {  
53 - // 使用 LambdaQueryWrapperX 构建查询条件,筛选出状态等于指定值的升级任务  
54 - return selectList(new LambdaQueryWrapperX<IotOtaUpgradeTaskDO>()  
55 - .eq(IotOtaUpgradeTaskDO::getStatus, state)); 53 + default List<IotOtaUpgradeTaskDO> selectUpgradeTaskByState(Integer status) {
  54 + return selectList(IotOtaUpgradeTaskDO::getStatus, status);
56 } 55 }
57 56
58 57
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/job/ota/IotOtaUpgradeRecordJob.java
@@ -19,13 +19,14 @@ public class IotOtaUpgradeRecordJob implements JobHandler { @@ -19,13 +19,14 @@ public class IotOtaUpgradeRecordJob implements JobHandler {
19 @Override 19 @Override
20 @TenantJob 20 @TenantJob
21 public String execute(String param) throws Exception { 21 public String execute(String param) throws Exception {
22 - // 1.查询待处理的升级记录 22 + // 1. 查询待处理的升级记录
23 List<IotOtaUpgradeRecordDO> upgradeRecords = upgradeRecordService 23 List<IotOtaUpgradeRecordDO> upgradeRecords = upgradeRecordService
24 .getUpgradeRecordListByState(IotOtaUpgradeRecordStatusEnum.PENDING.getStatus()); 24 .getUpgradeRecordListByState(IotOtaUpgradeRecordStatusEnum.PENDING.getStatus());
25 25
26 // TODO @芋艿 2.执行升级动作 26 // TODO @芋艿 2.执行升级动作
  27 + // TODO @li:应该是逐条 push,逐条更新。不用批量哈
27 28
28 - // 3.最终,更新升级记录状态 29 + // 3. 最终,更新升级记录状态
29 List<Long> ids = upgradeRecords.stream().map(IotOtaUpgradeRecordDO::getId).toList(); 30 List<Long> ids = upgradeRecords.stream().map(IotOtaUpgradeRecordDO::getId).toList();
30 upgradeRecordService.updateUpgradeRecordStatus(ids, IotOtaUpgradeRecordStatusEnum.PUSHED.getStatus()); 31 upgradeRecordService.updateUpgradeRecordStatus(ids, IotOtaUpgradeRecordStatusEnum.PUSHED.getStatus());
31 return ""; 32 return "";
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/job/ota/IotOtaUpgradeTaskJob.java
@@ -15,6 +15,7 @@ import org.springframework.stereotype.Component; @@ -15,6 +15,7 @@ import org.springframework.stereotype.Component;
15 15
16 import java.util.List; 16 import java.util.List;
17 17
  18 +// TODO @li:也不用通过 job 去统计。可以通过 record update status 后,主动去更新 task 的状态。
18 @Slf4j 19 @Slf4j
19 @Component 20 @Component
20 public class IotOtaUpgradeTaskJob implements JobHandler { 21 public class IotOtaUpgradeTaskJob implements JobHandler {
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/ota/IotOtaFirmwareService.java
@@ -7,6 +7,7 @@ import cn.iocoder.yudao.module.iot.controller.admin.ota.vo.firmware.IotOtaFirmwa @@ -7,6 +7,7 @@ import cn.iocoder.yudao.module.iot.controller.admin.ota.vo.firmware.IotOtaFirmwa
7 import cn.iocoder.yudao.module.iot.dal.dataobject.ota.IotOtaFirmwareDO; 7 import cn.iocoder.yudao.module.iot.dal.dataobject.ota.IotOtaFirmwareDO;
8 import jakarta.validation.Valid; 8 import jakarta.validation.Valid;
9 9
  10 +// TODO @li:类、方法注释有点冗余,可以参考别的模块哈
10 /** 11 /**
11 * OTA固件管理服务接口 12 * OTA固件管理服务接口
12 * 提供OTA固件的创建、更新和查询等功能 13 * 提供OTA固件的创建、更新和查询等功能
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/ota/IotOtaFirmwareServiceImpl.java
@@ -29,18 +29,22 @@ public class IotOtaFirmwareServiceImpl implements IotOtaFirmwareService { @@ -29,18 +29,22 @@ public class IotOtaFirmwareServiceImpl implements IotOtaFirmwareService {
29 29
30 @Override 30 @Override
31 public Long createOtaFirmware(IotOtaFirmwareCreateReqVO saveReqVO) { 31 public Long createOtaFirmware(IotOtaFirmwareCreateReqVO saveReqVO) {
32 - // 1.校验固件产品id+版本号不能重复 32 + // 1. 校验固件产品 + 版本号不能重复
  33 + // TODO @li:需要考虑设备也存在
33 validateProductAndVersionDuplicate(saveReqVO.getProductId(), saveReqVO.getVersion()); 34 validateProductAndVersionDuplicate(saveReqVO.getProductId(), saveReqVO.getVersion());
  35 +
34 // 2.转化数据格式,准备存储到数据库中 36 // 2.转化数据格式,准备存储到数据库中
35 - IotOtaFirmwareDO otaFirmware = BeanUtils.toBean(saveReqVO, IotOtaFirmwareDO.class);  
36 - otaFirmwareMapper.insert(otaFirmware);  
37 - return otaFirmware.getId(); 37 + IotOtaFirmwareDO firmware = BeanUtils.toBean(saveReqVO, IotOtaFirmwareDO.class);
  38 + otaFirmwareMapper.insert(firmware);
  39 + return firmware.getId();
38 } 40 }
39 41
40 @Override 42 @Override
41 public void updateOtaFirmware(IotOtaFirmwareUpdateReqVO updateReqVO) { 43 public void updateOtaFirmware(IotOtaFirmwareUpdateReqVO updateReqVO) {
  44 + // TODO @li:如果序号只有一个,直接写 1. 更好哈
42 // 1.1. 校验存在 45 // 1.1. 校验存在
43 validateFirmwareExists(updateReqVO.getId()); 46 validateFirmwareExists(updateReqVO.getId());
  47 +
44 // 2. 更新数据 48 // 2. 更新数据
45 IotOtaFirmwareDO updateObj = BeanUtils.toBean(updateReqVO, IotOtaFirmwareDO.class); 49 IotOtaFirmwareDO updateObj = BeanUtils.toBean(updateReqVO, IotOtaFirmwareDO.class);
46 otaFirmwareMapper.updateById(updateObj); 50 otaFirmwareMapper.updateById(updateObj);
@@ -58,11 +62,11 @@ public class IotOtaFirmwareServiceImpl implements IotOtaFirmwareService { @@ -58,11 +62,11 @@ public class IotOtaFirmwareServiceImpl implements IotOtaFirmwareService {
58 62
59 @Override 63 @Override
60 public IotOtaFirmwareDO validateFirmwareExists(Long id) { 64 public IotOtaFirmwareDO validateFirmwareExists(Long id) {
61 - IotOtaFirmwareDO otaFirmware = otaFirmwareMapper.selectById(id);  
62 - if (otaFirmware == null) { 65 + IotOtaFirmwareDO firmware = otaFirmwareMapper.selectById(id);
  66 + if (firmware == null) {
63 throw exception(OTA_FIRMWARE_NOT_EXISTS); 67 throw exception(OTA_FIRMWARE_NOT_EXISTS);
64 } 68 }
65 - return otaFirmware; 69 + return firmware;
66 } 70 }
67 71
68 /** 72 /**
@@ -80,6 +84,7 @@ public class IotOtaFirmwareServiceImpl implements IotOtaFirmwareService { @@ -80,6 +84,7 @@ public class IotOtaFirmwareServiceImpl implements IotOtaFirmwareService {
80 // 查询数据库中是否存在具有相同产品ID和版本号的固件信息 84 // 查询数据库中是否存在具有相同产品ID和版本号的固件信息
81 List<IotOtaFirmwareDO> list = otaFirmwareMapper.selectByProductIdAndVersion(productId, version); 85 List<IotOtaFirmwareDO> list = otaFirmwareMapper.selectByProductIdAndVersion(productId, version);
82 // 如果查询结果非空且不为null,则抛出异常,提示固件信息已存在 86 // 如果查询结果非空且不为null,则抛出异常,提示固件信息已存在
  87 + // TODO @li:使用 isNotEmpty 这种 方法,简化
83 if (Objects.nonNull(list) && !list.isEmpty()) { 88 if (Objects.nonNull(list) && !list.isEmpty()) {
84 throw exception(OTA_FIRMWARE_PRODUCT_VERSION_DUPLICATE); 89 throw exception(OTA_FIRMWARE_PRODUCT_VERSION_DUPLICATE);
85 } 90 }
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/ota/IotOtaUpgradeRecordService.java
@@ -3,8 +3,8 @@ package cn.iocoder.yudao.module.iot.service.ota; @@ -3,8 +3,8 @@ package cn.iocoder.yudao.module.iot.service.ota;
3 import cn.iocoder.yudao.framework.common.pojo.PageResult; 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.upgrade.record.IotOtaUpgradeRecordPageReqVO;
5 import cn.iocoder.yudao.module.iot.dal.dataobject.ota.IotOtaUpgradeRecordDO; 5 import cn.iocoder.yudao.module.iot.dal.dataobject.ota.IotOtaUpgradeRecordDO;
6 -import cn.iocoder.yudao.module.iot.service.ota.bo.upgrade.record.IotOtaUpgradeRecordCreateReqBO;  
7 -import cn.iocoder.yudao.module.iot.service.ota.bo.upgrade.record.IotOtaUpgradeRecordUpdateReqBO; 6 +import cn.iocoder.yudao.module.iot.service.ota.bo.IotOtaUpgradeRecordCreateReqBO;
  7 +import cn.iocoder.yudao.module.iot.service.ota.bo.IotOtaUpgradeRecordUpdateReqBO;
8 import jakarta.validation.Valid; 8 import jakarta.validation.Valid;
9 9
10 import java.util.List; 10 import java.util.List;
@@ -16,18 +16,21 @@ import java.util.Map; @@ -16,18 +16,21 @@ import java.util.Map;
16 */ 16 */
17 public interface IotOtaUpgradeRecordService { 17 public interface IotOtaUpgradeRecordService {
18 18
  19 + // TODO @createOtaUpgradeRecordBatch 哈,需要补充方法里,缺少 Ota 关键字的
  20 +
19 /** 21 /**
20 * 批量创建物联网OTA升级记录 22 * 批量创建物联网OTA升级记录
21 * <p> 23 * <p>
22 * 该函数用于处理一组物联网OTA升级记录的创建请求,并将这些记录批量保存到系统中。 24 * 该函数用于处理一组物联网OTA升级记录的创建请求,并将这些记录批量保存到系统中。
23 * 25 *
24 - * @param saveList 包含多个物联网OTA升级记录创建请求的列表,每个请求对象都经过校验(@Valid注解确保) 26 + * @param createList 包含多个物联网OTA升级记录创建请求的列表,每个请求对象都经过校验(@Valid注解确保)
25 * 列表中的每个元素都是IotOtaUpgradeRecordCreateReqBO类型的对象,表示一个独立的升级记录创建请求。 27 * 列表中的每个元素都是IotOtaUpgradeRecordCreateReqBO类型的对象,表示一个独立的升级记录创建请求。
26 */ 28 */
27 - void createUpgradeRecordBatch(@Valid List<IotOtaUpgradeRecordCreateReqBO> saveList); 29 + void createUpgradeRecordBatch(@Valid List<IotOtaUpgradeRecordCreateReqBO> createList);
28 30
  31 + // TODO @li:尽量避免写比较大的通用 update。而是根据场景提供,这样才能收敛
29 /** 32 /**
30 - * 更新现有的OTA升级记录。 33 + * 更新现有的 OTA 升级记录
31 * 34 *
32 * @param updateReqBO 包含更新升级记录所需信息的请求对象,必须经过验证。 35 * @param updateReqBO 包含更新升级记录所需信息的请求对象,必须经过验证。
33 */ 36 */
@@ -36,14 +39,14 @@ public interface IotOtaUpgradeRecordService { @@ -36,14 +39,14 @@ public interface IotOtaUpgradeRecordService {
36 /** 39 /**
37 * 获取OTA升级记录的数量统计。 40 * 获取OTA升级记录的数量统计。
38 * 41 *
39 - * @return 返回一个Map,其中键为状态码,值为对应状态的升级记录数量。 42 + * @return 返回一个 Map,其中键为状态码,值为对应状态的升级记录数量
40 */ 43 */
41 Map<Integer, Long> getOtaUpgradeRecordCount(@Valid IotOtaUpgradeRecordPageReqVO pageReqVO); 44 Map<Integer, Long> getOtaUpgradeRecordCount(@Valid IotOtaUpgradeRecordPageReqVO pageReqVO);
42 45
43 /** 46 /**
44 - * 获取OTA升级记录的统计信息。 47 + * 获取 OTA 升级记录的统计信息。
45 * 48 *
46 - * @return 返回一个Map,其中键为状态码,值为对应状态的升级记录统计信息。 49 + * @return 返回一个 Map,其中键为状态码,值为对应状态的升级记录统计信息
47 */ 50 */
48 Map<Integer, Long> getOtaUpgradeRecordStatistics(Long firmwareId); 51 Map<Integer, Long> getOtaUpgradeRecordStatistics(Long firmwareId);
49 52
@@ -68,8 +71,7 @@ public interface IotOtaUpgradeRecordService { @@ -68,8 +71,7 @@ public interface IotOtaUpgradeRecordService {
68 * @param pageReqVO 包含分页查询条件的请求对象,必须经过验证。 71 * @param pageReqVO 包含分页查询条件的请求对象,必须经过验证。
69 * @return 返回包含分页查询结果的响应对象。 72 * @return 返回包含分页查询结果的响应对象。
70 */ 73 */
71 - PageResult<IotOtaUpgradeRecordDO> getUpgradeRecordPage(  
72 - @Valid IotOtaUpgradeRecordPageReqVO pageReqVO); 74 + PageResult<IotOtaUpgradeRecordDO> getUpgradeRecordPage(@Valid IotOtaUpgradeRecordPageReqVO pageReqVO);
73 75
74 /** 76 /**
75 * 根据任务ID取消升级记录。 77 * 根据任务ID取消升级记录。
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/ota/IotOtaUpgradeRecordServiceImpl.java
@@ -7,8 +7,8 @@ import cn.iocoder.yudao.module.iot.controller.admin.ota.vo.upgrade.record.IotOta @@ -7,8 +7,8 @@ import cn.iocoder.yudao.module.iot.controller.admin.ota.vo.upgrade.record.IotOta
7 import cn.iocoder.yudao.module.iot.dal.dataobject.ota.IotOtaUpgradeRecordDO; 7 import cn.iocoder.yudao.module.iot.dal.dataobject.ota.IotOtaUpgradeRecordDO;
8 import cn.iocoder.yudao.module.iot.dal.mysql.ota.IotOtaUpgradeRecordMapper; 8 import cn.iocoder.yudao.module.iot.dal.mysql.ota.IotOtaUpgradeRecordMapper;
9 import cn.iocoder.yudao.module.iot.enums.ota.IotOtaUpgradeRecordStatusEnum; 9 import cn.iocoder.yudao.module.iot.enums.ota.IotOtaUpgradeRecordStatusEnum;
10 -import cn.iocoder.yudao.module.iot.service.ota.bo.upgrade.record.IotOtaUpgradeRecordCreateReqBO;  
11 -import cn.iocoder.yudao.module.iot.service.ota.bo.upgrade.record.IotOtaUpgradeRecordUpdateReqBO; 10 +import cn.iocoder.yudao.module.iot.service.ota.bo.IotOtaUpgradeRecordCreateReqBO;
  11 +import cn.iocoder.yudao.module.iot.service.ota.bo.IotOtaUpgradeRecordUpdateReqBO;
12 import jakarta.annotation.Resource; 12 import jakarta.annotation.Resource;
13 import lombok.extern.slf4j.Slf4j; 13 import lombok.extern.slf4j.Slf4j;
14 import org.springframework.stereotype.Service; 14 import org.springframework.stereotype.Service;
@@ -30,21 +30,22 @@ public class IotOtaUpgradeRecordServiceImpl implements IotOtaUpgradeRecordServic @@ -30,21 +30,22 @@ public class IotOtaUpgradeRecordServiceImpl implements IotOtaUpgradeRecordServic
30 private IotOtaUpgradeRecordMapper upgradeRecordMapper; 30 private IotOtaUpgradeRecordMapper upgradeRecordMapper;
31 31
32 @Override 32 @Override
33 - public void createUpgradeRecordBatch(List<IotOtaUpgradeRecordCreateReqBO> saveList) { 33 + public void createUpgradeRecordBatch(List<IotOtaUpgradeRecordCreateReqBO> createList) {
34 // 1. 批量校验参数信息 34 // 1. 批量校验参数信息
35 - saveList.forEach(saveBO -> validateUpgradeRecordDuplicate(saveBO.getFirmwareId(), saveBO.getTaskId(), saveBO.getDeviceId()));  
36 - // 2.将数据转化成数据库存储的格式  
37 - List<IotOtaUpgradeRecordDO> upgradeRecords = BeanUtils.toBean(saveList, IotOtaUpgradeRecordDO.class);  
38 - // 3.将数据批量存储到数据库里 35 + createList.forEach(saveBO -> validateUpgradeRecordDuplicate(saveBO.getFirmwareId(), saveBO.getTaskId(), saveBO.getDeviceId()));
  36 +
  37 + // 2. 将数据批量存储到数据库里
  38 + List<IotOtaUpgradeRecordDO> upgradeRecords = BeanUtils.toBean(createList, IotOtaUpgradeRecordDO.class);
39 upgradeRecordMapper.insertBatch(upgradeRecords); 39 upgradeRecordMapper.insertBatch(upgradeRecords);
40 } 40 }
41 41
42 @Override 42 @Override
43 @Transactional 43 @Transactional
44 public void updateUpgradeRecord(IotOtaUpgradeRecordUpdateReqBO updateReqBO) { 44 public void updateUpgradeRecord(IotOtaUpgradeRecordUpdateReqBO updateReqBO) {
45 - // 1.校验升级记录信息是否存在 45 + // 1. 校验升级记录信息是否存在
46 validateUpgradeRecordExists(updateReqBO.getId()); 46 validateUpgradeRecordExists(updateReqBO.getId());
47 - // 2.将数据转化成数据库存储的格式 47 +
  48 + // 2. 将数据转化成数据库存储的格式
48 IotOtaUpgradeRecordDO updateRecord = BeanUtils.toBean(updateReqBO, IotOtaUpgradeRecordDO.class); 49 IotOtaUpgradeRecordDO updateRecord = BeanUtils.toBean(updateReqBO, IotOtaUpgradeRecordDO.class);
49 upgradeRecordMapper.updateById(updateRecord); 50 upgradeRecordMapper.updateById(updateRecord);
50 // TODO @芋艿: 更新升级记录触发的其他Action 51 // TODO @芋艿: 更新升级记录触发的其他Action
@@ -61,6 +62,7 @@ public class IotOtaUpgradeRecordServiceImpl implements IotOtaUpgradeRecordServic @@ -61,6 +62,7 @@ public class IotOtaUpgradeRecordServiceImpl implements IotOtaUpgradeRecordServic
61 @Transactional 62 @Transactional
62 public Map<Integer, Long> getOtaUpgradeRecordCount(IotOtaUpgradeRecordPageReqVO pageReqVO) { 63 public Map<Integer, Long> getOtaUpgradeRecordCount(IotOtaUpgradeRecordPageReqVO pageReqVO) {
63 // 分别查询不同状态的OTA升级记录数量 64 // 分别查询不同状态的OTA升级记录数量
  65 + // TODO @li: 通过 groupby 统计下;
64 Long pending = upgradeRecordMapper.getOtaUpgradeRecordCount(pageReqVO.getTaskId(), pageReqVO.getDeviceName(), IotOtaUpgradeRecordStatusEnum.PENDING.getStatus()); 66 Long pending = upgradeRecordMapper.getOtaUpgradeRecordCount(pageReqVO.getTaskId(), pageReqVO.getDeviceName(), IotOtaUpgradeRecordStatusEnum.PENDING.getStatus());
65 Long pushed = upgradeRecordMapper.getOtaUpgradeRecordCount(pageReqVO.getTaskId(), pageReqVO.getDeviceName(), IotOtaUpgradeRecordStatusEnum.PUSHED.getStatus()); 67 Long pushed = upgradeRecordMapper.getOtaUpgradeRecordCount(pageReqVO.getTaskId(), pageReqVO.getDeviceName(), IotOtaUpgradeRecordStatusEnum.PUSHED.getStatus());
66 Long upgrading = upgradeRecordMapper.getOtaUpgradeRecordCount(pageReqVO.getTaskId(), pageReqVO.getDeviceName(), IotOtaUpgradeRecordStatusEnum.UPGRADING.getStatus()); 68 Long upgrading = upgradeRecordMapper.getOtaUpgradeRecordCount(pageReqVO.getTaskId(), pageReqVO.getDeviceName(), IotOtaUpgradeRecordStatusEnum.UPGRADING.getStatus());
@@ -68,6 +70,7 @@ public class IotOtaUpgradeRecordServiceImpl implements IotOtaUpgradeRecordServic @@ -68,6 +70,7 @@ public class IotOtaUpgradeRecordServiceImpl implements IotOtaUpgradeRecordServic
68 Long failure = upgradeRecordMapper.getOtaUpgradeRecordCount(pageReqVO.getTaskId(), pageReqVO.getDeviceName(), IotOtaUpgradeRecordStatusEnum.FAILURE.getStatus()); 70 Long failure = upgradeRecordMapper.getOtaUpgradeRecordCount(pageReqVO.getTaskId(), pageReqVO.getDeviceName(), IotOtaUpgradeRecordStatusEnum.FAILURE.getStatus());
69 Long canceled = upgradeRecordMapper.getOtaUpgradeRecordCount(pageReqVO.getTaskId(), pageReqVO.getDeviceName(), IotOtaUpgradeRecordStatusEnum.CANCELED.getStatus()); 71 Long canceled = upgradeRecordMapper.getOtaUpgradeRecordCount(pageReqVO.getTaskId(), pageReqVO.getDeviceName(), IotOtaUpgradeRecordStatusEnum.CANCELED.getStatus());
70 // 将各状态的数量封装到Map中返回 72 // 将各状态的数量封装到Map中返回
  73 + // TODO @li:使用 MapUtil,因为 Map.of 是 jdk9 才有,后续不好同步到 master 的 jdk8;
71 return Map.of(IotOtaUpgradeRecordPageReqVO.PENDING, pending, 74 return Map.of(IotOtaUpgradeRecordPageReqVO.PENDING, pending,
72 IotOtaUpgradeRecordPageReqVO.PUSHED, pushed, 75 IotOtaUpgradeRecordPageReqVO.PUSHED, pushed,
73 IotOtaUpgradeRecordPageReqVO.UPGRADING, upgrading, 76 IotOtaUpgradeRecordPageReqVO.UPGRADING, upgrading,
@@ -87,6 +90,7 @@ public class IotOtaUpgradeRecordServiceImpl implements IotOtaUpgradeRecordServic @@ -87,6 +90,7 @@ public class IotOtaUpgradeRecordServiceImpl implements IotOtaUpgradeRecordServic
87 @Transactional 90 @Transactional
88 public Map<Integer, Long> getOtaUpgradeRecordStatistics(Long firmwareId) { 91 public Map<Integer, Long> getOtaUpgradeRecordStatistics(Long firmwareId) {
89 // 查询并统计不同状态的OTA升级记录数量 92 // 查询并统计不同状态的OTA升级记录数量
  93 + // TODO @li: 通过 groupby 统计下;
90 Long pending = upgradeRecordMapper.getOtaUpgradeRecordStatistics(firmwareId, IotOtaUpgradeRecordStatusEnum.PENDING.getStatus()); 94 Long pending = upgradeRecordMapper.getOtaUpgradeRecordStatistics(firmwareId, IotOtaUpgradeRecordStatusEnum.PENDING.getStatus());
91 Long pushed = upgradeRecordMapper.getOtaUpgradeRecordStatistics(firmwareId, IotOtaUpgradeRecordStatusEnum.PUSHED.getStatus()); 95 Long pushed = upgradeRecordMapper.getOtaUpgradeRecordStatistics(firmwareId, IotOtaUpgradeRecordStatusEnum.PUSHED.getStatus());
92 Long upgrading = upgradeRecordMapper.getOtaUpgradeRecordStatistics(firmwareId, IotOtaUpgradeRecordStatusEnum.UPGRADING.getStatus()); 96 Long upgrading = upgradeRecordMapper.getOtaUpgradeRecordStatistics(firmwareId, IotOtaUpgradeRecordStatusEnum.UPGRADING.getStatus());
@@ -108,6 +112,7 @@ public class IotOtaUpgradeRecordServiceImpl implements IotOtaUpgradeRecordServic @@ -108,6 +112,7 @@ public class IotOtaUpgradeRecordServiceImpl implements IotOtaUpgradeRecordServic
108 IotOtaUpgradeRecordDO upgradeRecord = validateUpgradeRecordExists(id); 112 IotOtaUpgradeRecordDO upgradeRecord = validateUpgradeRecordExists(id);
109 // 1.2.校验升级记录是否可以重新升级 113 // 1.2.校验升级记录是否可以重新升级
110 validateUpgradeRecordCanRetry(upgradeRecord); 114 validateUpgradeRecordCanRetry(upgradeRecord);
  115 +
111 // 2.将一些数据重置,这样定时任务轮询就可以重启任务 116 // 2.将一些数据重置,这样定时任务轮询就可以重启任务
112 upgradeRecordMapper.updateById(new IotOtaUpgradeRecordDO() 117 upgradeRecordMapper.updateById(new IotOtaUpgradeRecordDO()
113 .setId(upgradeRecord.getId()).setProgress(0) 118 .setId(upgradeRecord.getId()).setProgress(0)
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/ota/IotOtaUpgradeTaskService.java
@@ -8,6 +8,7 @@ import jakarta.validation.Valid; @@ -8,6 +8,7 @@ import jakarta.validation.Valid;
8 8
9 import java.util.List; 9 import java.util.List;
10 10
  11 +// TODO @li:类、方法注释有点冗余,可以参考别的模块哈
11 /** 12 /**
12 * IoT OTA升级任务服务接口 13 * IoT OTA升级任务服务接口
13 * 提供OTA升级任务的创建、取消和查询功能 14 * 提供OTA升级任务的创建、取消和查询功能
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/ota/IotOtaUpgradeTaskServiceImpl.java
@@ -13,7 +13,7 @@ import cn.iocoder.yudao.module.iot.dal.mysql.ota.IotOtaUpgradeTaskMapper; @@ -13,7 +13,7 @@ import cn.iocoder.yudao.module.iot.dal.mysql.ota.IotOtaUpgradeTaskMapper;
13 import cn.iocoder.yudao.module.iot.enums.ota.IotOtaUpgradeTaskScopeEnum; 13 import cn.iocoder.yudao.module.iot.enums.ota.IotOtaUpgradeTaskScopeEnum;
14 import cn.iocoder.yudao.module.iot.enums.ota.IotOtaUpgradeTaskStatusEnum; 14 import cn.iocoder.yudao.module.iot.enums.ota.IotOtaUpgradeTaskStatusEnum;
15 import cn.iocoder.yudao.module.iot.service.device.IotDeviceService; 15 import cn.iocoder.yudao.module.iot.service.device.IotDeviceService;
16 -import cn.iocoder.yudao.module.iot.service.ota.bo.upgrade.record.IotOtaUpgradeRecordCreateReqBO; 16 +import cn.iocoder.yudao.module.iot.service.ota.bo.IotOtaUpgradeRecordCreateReqBO;
17 import jakarta.annotation.Resource; 17 import jakarta.annotation.Resource;
18 import lombok.extern.slf4j.Slf4j; 18 import lombok.extern.slf4j.Slf4j;
19 import org.springframework.context.annotation.Lazy; 19 import org.springframework.context.annotation.Lazy;
@@ -34,31 +34,37 @@ public class IotOtaUpgradeTaskServiceImpl implements IotOtaUpgradeTaskService { @@ -34,31 +34,37 @@ public class IotOtaUpgradeTaskServiceImpl implements IotOtaUpgradeTaskService {
34 34
35 @Resource 35 @Resource
36 private IotOtaUpgradeTaskMapper upgradeTaskMapper; 36 private IotOtaUpgradeTaskMapper upgradeTaskMapper;
37 - @Lazy 37 +
38 @Resource 38 @Resource
39 - private IotDeviceService deviceService;  
40 @Lazy 39 @Lazy
  40 + private IotDeviceService deviceService;
41 @Resource 41 @Resource
42 - private IotOtaFirmwareService firmwareService;  
43 @Lazy 42 @Lazy
  43 + private IotOtaFirmwareService firmwareService;
44 @Resource 44 @Resource
  45 + @Lazy
45 private IotOtaUpgradeRecordService upgradeRecordService; 46 private IotOtaUpgradeRecordService upgradeRecordService;
46 47
47 @Override 48 @Override
48 @Transactional(rollbackFor = Exception.class) 49 @Transactional(rollbackFor = Exception.class)
49 public Long createUpgradeTask(IotOtaUpgradeTaskSaveReqVO createReqVO) { 50 public Long createUpgradeTask(IotOtaUpgradeTaskSaveReqVO createReqVO) {
50 - // 1.1.校验同一固件的升级任务名称不重复 51 + // 1.1 校验同一固件的升级任务名称不重复
51 validateFirmwareTaskDuplicate(createReqVO.getFirmwareId(), createReqVO.getName()); 52 validateFirmwareTaskDuplicate(createReqVO.getFirmwareId(), createReqVO.getName());
52 - // 1.2.校验固件信息是否存在 53 + // 1.2 校验固件信息是否存在
53 IotOtaFirmwareDO firmware = firmwareService.validateFirmwareExists(createReqVO.getFirmwareId()); 54 IotOtaFirmwareDO firmware = firmwareService.validateFirmwareExists(createReqVO.getFirmwareId());
54 - // 1.3.校验升级范围=2(指定设备时),deviceIds deviceNames不为空并且长度相等 55 + // 1.3 校验升级范围=2(指定设备时),deviceIds deviceNames不为空并且长度相等
  56 + // TODO @li:deviceNames 应该后端查询
55 validateScopeAndDevice(createReqVO.getScope(), createReqVO.getDeviceIds(), createReqVO.getDeviceNames()); 57 validateScopeAndDevice(createReqVO.getScope(), createReqVO.getDeviceIds(), createReqVO.getDeviceNames());
56 - // 2.初始化OTA升级任务信息 58 + // TODO @li:如果全部范围,但是没设备可以升级,需要报错
  59 +
  60 + // 2. 保存 OTA 升级任务信息到数据库
57 IotOtaUpgradeTaskDO upgradeTask = initUpgradeTask(createReqVO, firmware.getProductId()); 61 IotOtaUpgradeTaskDO upgradeTask = initUpgradeTask(createReqVO, firmware.getProductId());
58 - // 3.保存OTA升级任务信息到数据库  
59 upgradeTaskMapper.insert(upgradeTask); 62 upgradeTaskMapper.insert(upgradeTask);
60 - // 4.生成设备升级记录信息并存储,等待定时任务轮询  
61 - List<IotOtaUpgradeRecordCreateReqBO> upgradeRecordList = initUpgradeRecordList(upgradeTask, firmware, createReqVO.getDeviceIds()); 63 +
  64 + // 3. 生成设备升级记录信息并存储,等待定时任务轮询
  65 + List<IotOtaUpgradeRecordCreateReqBO> upgradeRecordList = initUpgradeRecordList(
  66 + upgradeTask, firmware, createReqVO.getDeviceIds());
  67 + // TODO @li:只需要传递 deviceIds、firewareId、剩余的 upgradeRecordService 里面自己处理;这样,后续 record 加字段,都不需要透传太多;解耦
62 upgradeRecordService.createUpgradeRecordBatch(upgradeRecordList); 68 upgradeRecordService.createUpgradeRecordBatch(upgradeRecordList);
63 // TODO @芋艿: 创建任务触发的其他Action 69 // TODO @芋艿: 创建任务触发的其他Action
64 return upgradeTask.getId(); 70 return upgradeTask.getId();
@@ -67,15 +73,17 @@ public class IotOtaUpgradeTaskServiceImpl implements IotOtaUpgradeTaskService { @@ -67,15 +73,17 @@ public class IotOtaUpgradeTaskServiceImpl implements IotOtaUpgradeTaskService {
67 @Override 73 @Override
68 @Transactional(rollbackFor = Exception.class) 74 @Transactional(rollbackFor = Exception.class)
69 public void cancelUpgradeTask(Long id) { 75 public void cancelUpgradeTask(Long id) {
70 - // 1.1.校验升级任务是否存在 76 + // 1.1 校验升级任务是否存在
71 IotOtaUpgradeTaskDO upgradeTask = validateUpgradeTaskExists(id); 77 IotOtaUpgradeTaskDO upgradeTask = validateUpgradeTaskExists(id);
72 - // 1.2.校验升级任务是否可以取消 78 + // 1.2 校验升级任务是否可以取消
  79 + // TODO @li:这种一次性的,可以不考虑拆分方法
73 validateUpgradeTaskCanCancel(upgradeTask); 80 validateUpgradeTaskCanCancel(upgradeTask);
74 - // 2.更新OTA升级任务状态为已取消 81 +
  82 + // 2. 更新 OTA 升级任务状态为已取消
75 upgradeTaskMapper.updateById(IotOtaUpgradeTaskDO.builder() 83 upgradeTaskMapper.updateById(IotOtaUpgradeTaskDO.builder()
76 .id(id).status(IotOtaUpgradeTaskStatusEnum.CANCELED.getStatus()) 84 .id(id).status(IotOtaUpgradeTaskStatusEnum.CANCELED.getStatus())
77 .build()); 85 .build());
78 - // 3.更新OTA升级记录状态为已取消 86 + // 3. 更新 OTA 升级记录状态为已取消
79 upgradeRecordService.cancelUpgradeRecordByTaskId(id); 87 upgradeRecordService.cancelUpgradeRecordByTaskId(id);
80 // TODO @芋艿: 取消任务触发的其他Action 88 // TODO @芋艿: 取消任务触发的其他Action
81 } 89 }
@@ -176,6 +184,7 @@ public class IotOtaUpgradeTaskServiceImpl implements IotOtaUpgradeTaskService { @@ -176,6 +184,7 @@ public class IotOtaUpgradeTaskServiceImpl implements IotOtaUpgradeTaskService {
176 } 184 }
177 } 185 }
178 186
  187 + // TODO @li:一次性,不复用的,可以直接写在对应的逻辑里;
179 /** 188 /**
180 * 初始化升级任务 189 * 初始化升级任务
181 * <p> 190 * <p>
@@ -189,6 +198,7 @@ public class IotOtaUpgradeTaskServiceImpl implements IotOtaUpgradeTaskService { @@ -189,6 +198,7 @@ public class IotOtaUpgradeTaskServiceImpl implements IotOtaUpgradeTaskService {
189 private IotOtaUpgradeTaskDO initUpgradeTask(IotOtaUpgradeTaskSaveReqVO createReqVO, String productId) { 198 private IotOtaUpgradeTaskDO initUpgradeTask(IotOtaUpgradeTaskSaveReqVO createReqVO, String productId) {
190 // 配置各项参数 199 // 配置各项参数
191 IotOtaUpgradeTaskDO upgradeTask = IotOtaUpgradeTaskDO.builder() 200 IotOtaUpgradeTaskDO upgradeTask = IotOtaUpgradeTaskDO.builder()
  201 + // TODO @li:不用每个占一行。最好相同类型的,放在一行里;
192 .name(createReqVO.getName()) 202 .name(createReqVO.getName())
193 .description(createReqVO.getDescription()) 203 .description(createReqVO.getDescription())
194 .firmwareId(createReqVO.getFirmwareId()) 204 .firmwareId(createReqVO.getFirmwareId())
@@ -219,7 +229,10 @@ public class IotOtaUpgradeTaskServiceImpl implements IotOtaUpgradeTaskService { @@ -219,7 +229,10 @@ public class IotOtaUpgradeTaskServiceImpl implements IotOtaUpgradeTaskService {
219 * @param deviceIds 设备ID列表,仅在升级任务范围为选择设备时使用 229 * @param deviceIds 设备ID列表,仅在升级任务范围为选择设备时使用
220 * @return 升级记录请求对象列表,包含每个设备的升级记录信息 230 * @return 升级记录请求对象列表,包含每个设备的升级记录信息
221 */ 231 */
222 - private List<IotOtaUpgradeRecordCreateReqBO> initUpgradeRecordList(IotOtaUpgradeTaskDO upgradeTask, IotOtaFirmwareDO firmware, List<Long> deviceIds) { 232 + private List<IotOtaUpgradeRecordCreateReqBO> initUpgradeRecordList(
  233 + IotOtaUpgradeTaskDO upgradeTask, IotOtaFirmwareDO firmware, List<Long> deviceIds) {
  234 + // TODO @li:需要考虑,如果创建多个任务,相互之间不能重复;
  235 + // 1)指定设备的时候,进行校验;2)如果是全部,则过滤其它已经发起的;;;;;另外,需要排除掉 cancel 的哈。因为 cancal 之后,还可以发起
223 // 根据升级任务的范围确定设备列表 236 // 根据升级任务的范围确定设备列表
224 List<IotDeviceDO> deviceList; 237 List<IotDeviceDO> deviceList;
225 if (Objects.equals(upgradeTask.getScope(), IotOtaUpgradeTaskScopeEnum.SELECT.getScope())) { 238 if (Objects.equals(upgradeTask.getScope(), IotOtaUpgradeTaskScopeEnum.SELECT.getScope())) {
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/ota/bo/upgrade/record/IotOtaUpgradeRecordCreateReqBO.java renamed to yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/ota/bo/IotOtaUpgradeRecordCreateReqBO.java
1 -package cn.iocoder.yudao.module.iot.service.ota.bo.upgrade.record; 1 +package cn.iocoder.yudao.module.iot.service.ota.bo;
2 2
3 import cn.iocoder.yudao.module.iot.dal.dataobject.device.IotDeviceDO; 3 import cn.iocoder.yudao.module.iot.dal.dataobject.device.IotDeviceDO;
4 import cn.iocoder.yudao.module.iot.dal.dataobject.ota.IotOtaFirmwareDO; 4 import cn.iocoder.yudao.module.iot.dal.dataobject.ota.IotOtaFirmwareDO;
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/ota/bo/upgrade/record/IotOtaUpgradeRecordUpdateReqBO.java renamed to yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/ota/bo/IotOtaUpgradeRecordUpdateReqBO.java
1 -package cn.iocoder.yudao.module.iot.service.ota.bo.upgrade.record; 1 +package cn.iocoder.yudao.module.iot.service.ota.bo;
2 2
3 import cn.iocoder.yudao.framework.common.validation.InEnum; 3 import cn.iocoder.yudao.framework.common.validation.InEnum;
4 import cn.iocoder.yudao.module.iot.enums.ota.IotOtaUpgradeRecordStatusEnum; 4 import cn.iocoder.yudao.module.iot.enums.ota.IotOtaUpgradeRecordStatusEnum;
@@ -11,6 +11,7 @@ import java.time.LocalDateTime; @@ -11,6 +11,7 @@ import java.time.LocalDateTime;
11 11
12 import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; 12 import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
13 13
  14 +// TODO @li:这个类,貌似没用?
14 @Data 15 @Data
15 public class IotOtaUpgradeRecordUpdateReqBO { 16 public class IotOtaUpgradeRecordUpdateReqBO {
16 17
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/ota/bo/package-info.java deleted
1 -package cn.iocoder.yudao.module.iot.service.ota.bo;  
2 \ No newline at end of file 0 \ No newline at end of file
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/ota/bo/upgrade/package-info.java deleted
1 -package cn.iocoder.yudao.module.iot.service.ota.bo.upgrade;  
2 \ No newline at end of file 0 \ No newline at end of file
yudao-module-iot/yudao-module-iot-biz/src/main/resources/mapper/ota/IotOtaUpgradeRecordMapper.xml
@@ -4,6 +4,7 @@ @@ -4,6 +4,7 @@
4 "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> 4 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
5 <mapper namespace="cn.iocoder.yudao.module.iot.dal.mysql.ota.IotOtaUpgradeRecordMapper"> 5 <mapper namespace="cn.iocoder.yudao.module.iot.dal.mysql.ota.IotOtaUpgradeRecordMapper">
6 6
  7 + <!-- TODO @li:看看是不是可以通过 mybatis plus 写哈,更好适配多 db -->
7 <select id="getOtaUpgradeRecordCount" resultType="java.lang.Long"> 8 <select id="getOtaUpgradeRecordCount" resultType="java.lang.Long">
8 select count(*) 9 select count(*)
9 from iot_ota_upgrade_record 10 from iot_ota_upgrade_record
@@ -12,6 +13,7 @@ @@ -12,6 +13,7 @@
12 and status = #{status} 13 and status = #{status}
13 </select> 14 </select>
14 15
  16 + <!-- TODO @li:看看是不是可以通过 mybatis plus 写哈,更好适配多 db -->
15 <select id="getOtaUpgradeRecordStatistics" resultType="java.lang.Long"> 17 <select id="getOtaUpgradeRecordStatistics" resultType="java.lang.Long">
16 select count(*) 18 select count(*)
17 from iot_ota_upgrade_record 19 from iot_ota_upgrade_record