Commit 44d7d623b33514d7391ce1a3bc8a99cc3bf18425
1 parent
08ff69d5
【代码评审】IoT:OTA 的实现
Showing
15 changed files
with
73 additions
and
59 deletions
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/ota/vo/firmware/IotOtaFirmwareCreateReqVO.java
| @@ -27,6 +27,7 @@ public class IotOtaFirmwareCreateReqVO { | @@ -27,6 +27,7 @@ public class IotOtaFirmwareCreateReqVO { | ||
| 27 | private String productId; | 27 | private String productId; |
| 28 | 28 | ||
| 29 | @Schema(description = "签名方式", example = "MD5") | 29 | @Schema(description = "签名方式", example = "MD5") |
| 30 | + // TODO @li:是不是必传哈 | ||
| 30 | private String signMethod; | 31 | private String signMethod; |
| 31 | 32 | ||
| 32 | @Schema(description = "固件文件 URL", requiredMode = REQUIRED, example = "https://www.iocoder.cn/yudao-firmware.zip") | 33 | @Schema(description = "固件文件 URL", requiredMode = REQUIRED, example = "https://www.iocoder.cn/yudao-firmware.zip") |
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/ota/vo/firmware/IotOtaFirmwareUpdateReqVO.java
| @@ -7,7 +7,7 @@ import lombok.Data; | @@ -7,7 +7,7 @@ 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 | -@Schema(description = "管理后台 - OTA固件更新 Request VO") | 10 | +@Schema(description = "管理后台 - OTA 固件更新 Request VO") |
| 11 | @Data | 11 | @Data |
| 12 | public class IotOtaFirmwareUpdateReqVO { | 12 | public class IotOtaFirmwareUpdateReqVO { |
| 13 | 13 | ||
| @@ -15,6 +15,7 @@ public class IotOtaFirmwareUpdateReqVO { | @@ -15,6 +15,7 @@ public class IotOtaFirmwareUpdateReqVO { | ||
| 15 | @NotNull(message = "固件编号不能为空") | 15 | @NotNull(message = "固件编号不能为空") |
| 16 | private Long id; | 16 | private Long id; |
| 17 | 17 | ||
| 18 | + // TODO @li:name 是不是可以飞必传哈 | ||
| 18 | @Schema(description = "固件名称", requiredMode = REQUIRED, example = "智能开关固件") | 19 | @Schema(description = "固件名称", requiredMode = REQUIRED, example = "智能开关固件") |
| 19 | @NotEmpty(message = "固件名称不能为空") | 20 | @NotEmpty(message = "固件名称不能为空") |
| 20 | private String name; | 21 | private String name; |
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/ota/vo/upgrade/record/IotOtaUpgradeRecordPageReqVO.java
| @@ -8,16 +8,17 @@ import lombok.Data; | @@ -8,16 +8,17 @@ import lombok.Data; | ||
| 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 | @Data |
| 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:已经有注解,不用重复注释 | ||
| 14 | /** | 15 | /** |
| 15 | * 升级任务编号字段。 | 16 | * 升级任务编号字段。 |
| 16 | * <p> | 17 | * <p> |
| 17 | * 该字段用于标识升级任务的唯一编号,不能为空。 | 18 | * 该字段用于标识升级任务的唯一编号,不能为空。 |
| 18 | */ | 19 | */ |
| 19 | - @NotNull(message = "升级任务编号不能为空") | ||
| 20 | @Schema(description = "升级任务编号", requiredMode = REQUIRED, example = "1024") | 20 | @Schema(description = "升级任务编号", requiredMode = REQUIRED, example = "1024") |
| 21 | + @NotNull(message = "升级任务编号不能为空") | ||
| 21 | private Long taskId; | 22 | private Long taskId; |
| 22 | 23 | ||
| 23 | /** | 24 | /** |
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/ota/vo/upgrade/task/IotOtaUpgradeTaskSaveReqVO.java
| @@ -14,9 +14,12 @@ import java.util.List; | @@ -14,9 +14,12 @@ import java.util.List; | ||
| 14 | import static io.swagger.v3.oas.annotations.media.Schema.RequiredMode.REQUIRED; | 14 | import static io.swagger.v3.oas.annotations.media.Schema.RequiredMode.REQUIRED; |
| 15 | 15 | ||
| 16 | @Data | 16 | @Data |
| 17 | -@Schema(description = "管理后台 - OTA升级任务创建/修改 Request VO") | 17 | +@Schema(description = "管理后台 - OTA 升级任务创建/修改 Request VO") |
| 18 | public class IotOtaUpgradeTaskSaveReqVO { | 18 | public class IotOtaUpgradeTaskSaveReqVO { |
| 19 | 19 | ||
| 20 | + // TODO @li:已经有注解,不用重复注释 | ||
| 21 | + // TODO @li: @Schema 写在参数校验前面。先有定义;其他的,也检查下; | ||
| 22 | + | ||
| 20 | /** | 23 | /** |
| 21 | * 任务名称 | 24 | * 任务名称 |
| 22 | */ | 25 | */ |
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/convert/ota/IotOtaUpgradeRecordConvert.java deleted
| 1 | -package cn.iocoder.yudao.module.iot.convert.ota; | ||
| 2 | - | ||
| 3 | -import org.mapstruct.Mapper; | ||
| 4 | -import org.mapstruct.factory.Mappers; | ||
| 5 | - | ||
| 6 | -@Mapper | ||
| 7 | -public interface IotOtaUpgradeRecordConvert { | ||
| 8 | - | ||
| 9 | - IotOtaUpgradeRecordConvert INSTANCE = Mappers.getMapper(IotOtaUpgradeRecordConvert.class); | ||
| 10 | - | ||
| 11 | -} |
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/dataobject/ota/IotOtaFirmwareDO.java
| @@ -46,6 +46,7 @@ public class IotOtaFirmwareDO extends BaseDO { | @@ -46,6 +46,7 @@ public class IotOtaFirmwareDO extends BaseDO { | ||
| 46 | * | 46 | * |
| 47 | * 关联 {@link cn.iocoder.yudao.module.iot.dal.dataobject.product.IotProductDO#getId()} | 47 | * 关联 {@link cn.iocoder.yudao.module.iot.dal.dataobject.product.IotProductDO#getId()} |
| 48 | */ | 48 | */ |
| 49 | + // TODO @li:帮我改成 Long 哈,写错了 | ||
| 49 | private String productId; | 50 | private String productId; |
| 50 | /** | 51 | /** |
| 51 | * 产品标识 | 52 | * 产品标识 |
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/mysql/ota/IotOtaFirmwareMapper.java
| @@ -9,11 +9,7 @@ import org.apache.ibatis.annotations.Mapper; | @@ -9,11 +9,7 @@ import org.apache.ibatis.annotations.Mapper; | ||
| 9 | 9 | ||
| 10 | import java.util.List; | 10 | import java.util.List; |
| 11 | 11 | ||
| 12 | -/** | ||
| 13 | - * OTA固件 Mapper | ||
| 14 | - * | ||
| 15 | - * @author Shelly | ||
| 16 | - */ | 12 | +// TODO @li:参考 IotOtaUpgradeRecordMapper 的写法 |
| 17 | @Mapper | 13 | @Mapper |
| 18 | public interface IotOtaFirmwareMapper extends BaseMapperX<IotOtaFirmwareDO> { | 14 | public interface IotOtaFirmwareMapper extends BaseMapperX<IotOtaFirmwareDO> { |
| 19 | 15 |
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/mysql/ota/IotOtaUpgradeRecordMapper.java
| @@ -13,14 +13,10 @@ import org.apache.ibatis.annotations.Select; | @@ -13,14 +13,10 @@ import org.apache.ibatis.annotations.Select; | ||
| 13 | import java.util.List; | 13 | import java.util.List; |
| 14 | import java.util.Map; | 14 | import java.util.Map; |
| 15 | 15 | ||
| 16 | -/** | ||
| 17 | - * OTA 升级记录 Mapper | ||
| 18 | - * | ||
| 19 | - * @author Shelly | ||
| 20 | - */ | ||
| 21 | @Mapper | 16 | @Mapper |
| 22 | public interface IotOtaUpgradeRecordMapper extends BaseMapperX<IotOtaUpgradeRecordDO> { | 17 | public interface IotOtaUpgradeRecordMapper extends BaseMapperX<IotOtaUpgradeRecordDO> { |
| 23 | 18 | ||
| 19 | + // TODO @li:selectByFirmwareIdAndTaskIdAndDeviceId;让方法自解释 | ||
| 24 | /** | 20 | /** |
| 25 | * 根据条件查询单个OTA升级记录 | 21 | * 根据条件查询单个OTA升级记录 |
| 26 | * | 22 | * |
| @@ -37,6 +33,7 @@ public interface IotOtaUpgradeRecordMapper extends BaseMapperX<IotOtaUpgradeReco | @@ -37,6 +33,7 @@ public interface IotOtaUpgradeRecordMapper extends BaseMapperX<IotOtaUpgradeReco | ||
| 37 | .eqIfPresent(IotOtaUpgradeRecordDO::getDeviceId, deviceId)); | 33 | .eqIfPresent(IotOtaUpgradeRecordDO::getDeviceId, deviceId)); |
| 38 | } | 34 | } |
| 39 | 35 | ||
| 36 | + // TODO @li:这个是不是 groupby status 就 ok 拉? | ||
| 40 | /** | 37 | /** |
| 41 | * 根据任务ID和设备名称查询OTA升级记录的状态统计信息。 | 38 | * 根据任务ID和设备名称查询OTA升级记录的状态统计信息。 |
| 42 | * 该函数通过SQL查询统计不同状态(0到5)的记录数量,并返回一个包含统计结果的Map列表。 | 39 | * 该函数通过SQL查询统计不同状态(0到5)的记录数量,并返回一个包含统计结果的Map列表。 |
| @@ -75,19 +72,23 @@ public interface IotOtaUpgradeRecordMapper extends BaseMapperX<IotOtaUpgradeReco | @@ -75,19 +72,23 @@ public interface IotOtaUpgradeRecordMapper extends BaseMapperX<IotOtaUpgradeReco | ||
| 75 | "where firmware_id = #{firmwareId}") | 72 | "where firmware_id = #{firmwareId}") |
| 76 | List<Map<String, Object>> selectOtaUpgradeRecordStatistics(Long firmwareId); | 73 | List<Map<String, Object>> selectOtaUpgradeRecordStatistics(Long firmwareId); |
| 77 | 74 | ||
| 75 | + // TODO @li:这里的注释,可以去掉哈 | ||
| 78 | /** | 76 | /** |
| 79 | * 根据分页查询条件获取IOT OTA升级记录的分页结果 | 77 | * 根据分页查询条件获取IOT OTA升级记录的分页结果 |
| 80 | * | 78 | * |
| 81 | * @param pageReqVO 分页查询请求参数,包含设备名称、任务ID等查询条件 | 79 | * @param pageReqVO 分页查询请求参数,包含设备名称、任务ID等查询条件 |
| 82 | * @return 返回分页查询结果,包含符合条件的IOT OTA升级记录列表 | 80 | * @return 返回分页查询结果,包含符合条件的IOT OTA升级记录列表 |
| 83 | */ | 81 | */ |
| 82 | + // TODO @li:selectPage 就 ok 拉。 | ||
| 84 | default PageResult<IotOtaUpgradeRecordDO> selectUpgradeRecordPage(IotOtaUpgradeRecordPageReqVO pageReqVO) { | 83 | default PageResult<IotOtaUpgradeRecordDO> selectUpgradeRecordPage(IotOtaUpgradeRecordPageReqVO pageReqVO) { |
| 84 | + // TODO @li:这里的注释,可以去掉哈;然后下面的“如果”。。。也没必要注释 | ||
| 85 | // 使用LambdaQueryWrapperX构建查询条件,并根据请求参数动态添加查询条件 | 85 | // 使用LambdaQueryWrapperX构建查询条件,并根据请求参数动态添加查询条件 |
| 86 | return selectPage(pageReqVO, new LambdaQueryWrapperX<IotOtaUpgradeRecordDO>() | 86 | return selectPage(pageReqVO, new LambdaQueryWrapperX<IotOtaUpgradeRecordDO>() |
| 87 | .likeIfPresent(IotOtaUpgradeRecordDO::getDeviceName, pageReqVO.getDeviceName()) // 如果设备名称存在,则添加模糊查询条件 | 87 | .likeIfPresent(IotOtaUpgradeRecordDO::getDeviceName, pageReqVO.getDeviceName()) // 如果设备名称存在,则添加模糊查询条件 |
| 88 | .eqIfPresent(IotOtaUpgradeRecordDO::getTaskId, pageReqVO.getTaskId())); // 如果任务ID存在,则添加等值查询条件 | 88 | .eqIfPresent(IotOtaUpgradeRecordDO::getTaskId, pageReqVO.getTaskId())); // 如果任务ID存在,则添加等值查询条件 |
| 89 | } | 89 | } |
| 90 | 90 | ||
| 91 | + // TODO @li:这里的注释,可以去掉哈 | ||
| 91 | /** | 92 | /** |
| 92 | * 根据任务ID和状态更新升级记录的状态 | 93 | * 根据任务ID和状态更新升级记录的状态 |
| 93 | * <p> | 94 | * <p> |
| @@ -97,6 +98,7 @@ public interface IotOtaUpgradeRecordMapper extends BaseMapperX<IotOtaUpgradeReco | @@ -97,6 +98,7 @@ public interface IotOtaUpgradeRecordMapper extends BaseMapperX<IotOtaUpgradeReco | ||
| 97 | * @param taskId 要更新的升级记录对应的任务ID,类型为Long | 98 | * @param taskId 要更新的升级记录对应的任务ID,类型为Long |
| 98 | * @param whereStatus 用于筛选升级记录的当前状态值,类型为Integer | 99 | * @param whereStatus 用于筛选升级记录的当前状态值,类型为Integer |
| 99 | */ | 100 | */ |
| 101 | + // TODO @li:改成 updateByTaskIdAndStatus(taskId, status, IotOtaUpgradeRecordDO) 更通用一些。 | ||
| 100 | default void updateUpgradeRecordStatusByTaskIdAndStatus(Integer setStatus, Long taskId, Integer whereStatus) { | 102 | default void updateUpgradeRecordStatusByTaskIdAndStatus(Integer setStatus, Long taskId, Integer whereStatus) { |
| 101 | // 使用LambdaUpdateWrapper构建更新条件,将指定状态的记录更新为指定状态 | 103 | // 使用LambdaUpdateWrapper构建更新条件,将指定状态的记录更新为指定状态 |
| 102 | update(new LambdaUpdateWrapper<IotOtaUpgradeRecordDO>() | 104 | update(new LambdaUpdateWrapper<IotOtaUpgradeRecordDO>() |
| @@ -106,6 +108,7 @@ public interface IotOtaUpgradeRecordMapper extends BaseMapperX<IotOtaUpgradeReco | @@ -106,6 +108,7 @@ public interface IotOtaUpgradeRecordMapper extends BaseMapperX<IotOtaUpgradeReco | ||
| 106 | ); | 108 | ); |
| 107 | } | 109 | } |
| 108 | 110 | ||
| 111 | + // TODO @li:参考上面的建议,调整下这个方法 | ||
| 109 | /** | 112 | /** |
| 110 | * 根据状态查询符合条件的升级记录列表 | 113 | * 根据状态查询符合条件的升级记录列表 |
| 111 | * <p> | 114 | * <p> |
| @@ -120,6 +123,7 @@ public interface IotOtaUpgradeRecordMapper extends BaseMapperX<IotOtaUpgradeReco | @@ -120,6 +123,7 @@ public interface IotOtaUpgradeRecordMapper extends BaseMapperX<IotOtaUpgradeReco | ||
| 120 | .eq(IotOtaUpgradeRecordDO::getStatus, state)); | 123 | .eq(IotOtaUpgradeRecordDO::getStatus, state)); |
| 121 | } | 124 | } |
| 122 | 125 | ||
| 126 | + // TODO @li:参考上面的建议,调整下这个方法 | ||
| 123 | /** | 127 | /** |
| 124 | * 更新升级记录状态 | 128 | * 更新升级记录状态 |
| 125 | * <p> | 129 | * <p> |
| @@ -137,6 +141,7 @@ public interface IotOtaUpgradeRecordMapper extends BaseMapperX<IotOtaUpgradeReco | @@ -137,6 +141,7 @@ public interface IotOtaUpgradeRecordMapper extends BaseMapperX<IotOtaUpgradeReco | ||
| 137 | ); | 141 | ); |
| 138 | } | 142 | } |
| 139 | 143 | ||
| 144 | + // TODO @li:参考上面的建议,调整下这个方法 | ||
| 140 | /** | 145 | /** |
| 141 | * 根据任务ID查询升级记录列表 | 146 | * 根据任务ID查询升级记录列表 |
| 142 | * <p> | 147 | * <p> |
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/mysql/plugin/IotPluginInstanceMapper.java
| @@ -8,6 +8,7 @@ import org.apache.ibatis.annotations.Mapper; | @@ -8,6 +8,7 @@ import org.apache.ibatis.annotations.Mapper; | ||
| 8 | import java.time.LocalDateTime; | 8 | import java.time.LocalDateTime; |
| 9 | import java.util.List; | 9 | import java.util.List; |
| 10 | 10 | ||
| 11 | +// TODO @li:参考 IotOtaUpgradeRecordMapper 的写法 | ||
| 11 | @Mapper | 12 | @Mapper |
| 12 | public interface IotPluginInstanceMapper extends BaseMapperX<IotPluginInstanceDO> { | 13 | public interface IotPluginInstanceMapper extends BaseMapperX<IotPluginInstanceDO> { |
| 13 | 14 |
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:注释写的有点冗余,可以看看别的模块哈。= = AI 生成的注释,有的时候太啰嗦了,需要处理下的哈 | ||
| 10 | /** | 11 | /** |
| 11 | * OTA 固件管理 Service | 12 | * OTA 固件管理 Service |
| 12 | * | 13 | * |
| @@ -15,7 +16,7 @@ import jakarta.validation.Valid; | @@ -15,7 +16,7 @@ import jakarta.validation.Valid; | ||
| 15 | public interface IotOtaFirmwareService { | 16 | public interface IotOtaFirmwareService { |
| 16 | 17 | ||
| 17 | /** | 18 | /** |
| 18 | - * 创建OTA固件 | 19 | + * 创建 OTA 固件 |
| 19 | * | 20 | * |
| 20 | * @param saveReqVO OTA固件保存请求对象,包含固件的相关信息 | 21 | * @param saveReqVO OTA固件保存请求对象,包含固件的相关信息 |
| 21 | * @return 返回新创建的固件的ID | 22 | * @return 返回新创建的固件的ID |
| @@ -23,14 +24,14 @@ public interface IotOtaFirmwareService { | @@ -23,14 +24,14 @@ public interface IotOtaFirmwareService { | ||
| 23 | Long createOtaFirmware(@Valid IotOtaFirmwareCreateReqVO saveReqVO); | 24 | Long createOtaFirmware(@Valid IotOtaFirmwareCreateReqVO saveReqVO); |
| 24 | 25 | ||
| 25 | /** | 26 | /** |
| 26 | - * 更新OTA固件信息 | 27 | + * 更新 OTA 固件信息 |
| 27 | * | 28 | * |
| 28 | * @param updateReqVO OTA固件保存请求对象,包含需要更新的固件信息 | 29 | * @param updateReqVO OTA固件保存请求对象,包含需要更新的固件信息 |
| 29 | */ | 30 | */ |
| 30 | void updateOtaFirmware(@Valid IotOtaFirmwareUpdateReqVO updateReqVO); | 31 | void updateOtaFirmware(@Valid IotOtaFirmwareUpdateReqVO updateReqVO); |
| 31 | 32 | ||
| 32 | /** | 33 | /** |
| 33 | - * 根据ID获取OTA固件信息 | 34 | + * 根据 ID 获取 OTA 固件信息 |
| 34 | * | 35 | * |
| 35 | * @param id OTA固件的唯一标识符 | 36 | * @param id OTA固件的唯一标识符 |
| 36 | * @return 返回OTA固件的详细信息对象 | 37 | * @return 返回OTA固件的详细信息对象 |
| @@ -38,7 +39,7 @@ public interface IotOtaFirmwareService { | @@ -38,7 +39,7 @@ public interface IotOtaFirmwareService { | ||
| 38 | IotOtaFirmwareDO getOtaFirmware(Long id); | 39 | IotOtaFirmwareDO getOtaFirmware(Long id); |
| 39 | 40 | ||
| 40 | /** | 41 | /** |
| 41 | - * 分页查询OTA固件信息 | 42 | + * 分页查询 OTA 固件信息 |
| 42 | * | 43 | * |
| 43 | * @param pageReqVO 包含分页查询条件的请求对象 | 44 | * @param pageReqVO 包含分页查询条件的请求对象 |
| 44 | * @return 返回分页查询结果,包含固件信息列表和分页信息 | 45 | * @return 返回分页查询结果,包含固件信息列表和分页信息 |
| @@ -46,7 +47,7 @@ public interface IotOtaFirmwareService { | @@ -46,7 +47,7 @@ public interface IotOtaFirmwareService { | ||
| 46 | PageResult<IotOtaFirmwareDO> getOtaFirmwarePage(@Valid IotOtaFirmwarePageReqVO pageReqVO); | 47 | PageResult<IotOtaFirmwareDO> getOtaFirmwarePage(@Valid IotOtaFirmwarePageReqVO pageReqVO); |
| 47 | 48 | ||
| 48 | /** | 49 | /** |
| 49 | - * 验证物联网OTA固件是否存在 | 50 | + * 验证物联网 OTA 固件是否存在 |
| 50 | * | 51 | * |
| 51 | * @param id 固件的唯一标识符 | 52 | * @param id 固件的唯一标识符 |
| 52 | * 该方法用于检查系统中是否存在与给定ID关联的物联网OTA固件信息 | 53 | * 该方法用于检查系统中是否存在与给定ID关联的物联网OTA固件信息 |
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/ota/IotOtaFirmwareServiceImpl.java
| @@ -39,13 +39,14 @@ public class IotOtaFirmwareServiceImpl implements IotOtaFirmwareService { | @@ -39,13 +39,14 @@ public class IotOtaFirmwareServiceImpl implements IotOtaFirmwareService { | ||
| 39 | public Long createOtaFirmware(IotOtaFirmwareCreateReqVO saveReqVO) { | 39 | public Long createOtaFirmware(IotOtaFirmwareCreateReqVO saveReqVO) { |
| 40 | // 1. 校验固件产品 + 版本号不能重复 | 40 | // 1. 校验固件产品 + 版本号不能重复 |
| 41 | validateProductAndVersionDuplicate(saveReqVO.getProductId(), saveReqVO.getVersion()); | 41 | validateProductAndVersionDuplicate(saveReqVO.getProductId(), saveReqVO.getVersion()); |
| 42 | + | ||
| 42 | // 2.1.转化数据格式,准备存储到数据库中 | 43 | // 2.1.转化数据格式,准备存储到数据库中 |
| 43 | IotOtaFirmwareDO firmware = BeanUtils.toBean(saveReqVO, IotOtaFirmwareDO.class); | 44 | IotOtaFirmwareDO firmware = BeanUtils.toBean(saveReqVO, IotOtaFirmwareDO.class); |
| 44 | // 2.2.查询ProductKey | 45 | // 2.2.查询ProductKey |
| 46 | + // TODO @li:productService.getProduct(Convert.toLong(firmware.getProductId())) 放到 1. 后面,先做参考校验。逻辑两段:1)先参数校验;2)构建对象 + 存储 | ||
| 45 | IotProductDO product = productService.getProduct(Convert.toLong(firmware.getProductId())); | 47 | IotProductDO product = productService.getProduct(Convert.toLong(firmware.getProductId())); |
| 46 | firmware.setProductKey(Objects.requireNonNull(product).getProductKey()); | 48 | firmware.setProductKey(Objects.requireNonNull(product).getProductKey()); |
| 47 | // TODO @芋艿: 附件、附件签名等属性的计算 | 49 | // TODO @芋艿: 附件、附件签名等属性的计算 |
| 48 | - | ||
| 49 | otaFirmwareMapper.insert(firmware); | 50 | otaFirmwareMapper.insert(firmware); |
| 50 | return firmware.getId(); | 51 | return firmware.getId(); |
| 51 | } | 52 | } |
| @@ -79,6 +80,7 @@ public class IotOtaFirmwareServiceImpl implements IotOtaFirmwareService { | @@ -79,6 +80,7 @@ public class IotOtaFirmwareServiceImpl implements IotOtaFirmwareService { | ||
| 79 | return firmware; | 80 | return firmware; |
| 80 | } | 81 | } |
| 81 | 82 | ||
| 83 | + // TODO @li:注释有点冗余 | ||
| 82 | /** | 84 | /** |
| 83 | * 验证产品和版本号是否重复 | 85 | * 验证产品和版本号是否重复 |
| 84 | * <p> | 86 | * <p> |
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/ota/IotOtaUpgradeRecordService.java
| @@ -8,6 +8,7 @@ import jakarta.validation.Valid; | @@ -8,6 +8,7 @@ import jakarta.validation.Valid; | ||
| 8 | import java.util.List; | 8 | import java.util.List; |
| 9 | import java.util.Map; | 9 | import java.util.Map; |
| 10 | 10 | ||
| 11 | +// TODO @li:注释写的有点冗余,可以看看别的模块哈。= = AI 生成的注释,有的时候太啰嗦了,需要处理下的哈 | ||
| 11 | /** | 12 | /** |
| 12 | * IotOtaUpgradeRecordService 接口定义了与物联网设备OTA升级记录相关的操作。 | 13 | * IotOtaUpgradeRecordService 接口定义了与物联网设备OTA升级记录相关的操作。 |
| 13 | * 该接口提供了创建、更新、查询、统计和重试升级记录的功能。 | 14 | * 该接口提供了创建、更新、查询、统计和重试升级记录的功能。 |
| @@ -15,7 +16,7 @@ import java.util.Map; | @@ -15,7 +16,7 @@ import java.util.Map; | ||
| 15 | public interface IotOtaUpgradeRecordService { | 16 | public interface IotOtaUpgradeRecordService { |
| 16 | 17 | ||
| 17 | /** | 18 | /** |
| 18 | - * 批量创建OTA升级记录。 | 19 | + * 批量创建 OTA 升级记录 |
| 19 | * 该函数用于为指定的设备列表、固件ID和升级任务ID创建OTA升级记录。 | 20 | * 该函数用于为指定的设备列表、固件ID和升级任务ID创建OTA升级记录。 |
| 20 | * | 21 | * |
| 21 | * @param deviceIds 设备ID列表,表示需要升级的设备集合。 | 22 | * @param deviceIds 设备ID列表,表示需要升级的设备集合。 |
| @@ -25,7 +26,7 @@ public interface IotOtaUpgradeRecordService { | @@ -25,7 +26,7 @@ public interface IotOtaUpgradeRecordService { | ||
| 25 | void createOtaUpgradeRecordBatch(List<Long> deviceIds, Long firmwareId, Long upgradeTaskId); | 26 | void createOtaUpgradeRecordBatch(List<Long> deviceIds, Long firmwareId, Long upgradeTaskId); |
| 26 | 27 | ||
| 27 | /** | 28 | /** |
| 28 | - * 获取OTA升级记录的数量统计。 | 29 | + * 获取 OTA 升级记录的数量统计 |
| 29 | * | 30 | * |
| 30 | * @return 返回一个 Map,其中键为状态码,值为对应状态的升级记录数量 | 31 | * @return 返回一个 Map,其中键为状态码,值为对应状态的升级记录数量 |
| 31 | */ | 32 | */ |
| @@ -39,14 +40,14 @@ public interface IotOtaUpgradeRecordService { | @@ -39,14 +40,14 @@ public interface IotOtaUpgradeRecordService { | ||
| 39 | Map<Integer, Long> getOtaUpgradeRecordStatistics(Long firmwareId); | 40 | Map<Integer, Long> getOtaUpgradeRecordStatistics(Long firmwareId); |
| 40 | 41 | ||
| 41 | /** | 42 | /** |
| 42 | - * 重试指定的OTA升级记录。 | 43 | + * 重试指定的 OTA 升级记录 |
| 43 | * | 44 | * |
| 44 | * @param id 需要重试的升级记录的ID。 | 45 | * @param id 需要重试的升级记录的ID。 |
| 45 | */ | 46 | */ |
| 46 | void retryUpgradeRecord(Long id); | 47 | void retryUpgradeRecord(Long id); |
| 47 | 48 | ||
| 48 | /** | 49 | /** |
| 49 | - * 获取指定ID的OTA升级记录的详细信息。 | 50 | + * 获取指定 ID 的 OTA 升级记录的详细信息。 |
| 50 | * | 51 | * |
| 51 | * @param id 需要查询的升级记录的ID。 | 52 | * @param id 需要查询的升级记录的ID。 |
| 52 | * @return 返回包含升级记录详细信息的响应对象。 | 53 | * @return 返回包含升级记录详细信息的响应对象。 |
| @@ -54,7 +55,7 @@ public interface IotOtaUpgradeRecordService { | @@ -54,7 +55,7 @@ public interface IotOtaUpgradeRecordService { | ||
| 54 | IotOtaUpgradeRecordDO getUpgradeRecord(Long id); | 55 | IotOtaUpgradeRecordDO getUpgradeRecord(Long id); |
| 55 | 56 | ||
| 56 | /** | 57 | /** |
| 57 | - * 分页查询OTA升级记录。 | 58 | + * 分页查询 OTA 升级记录。 |
| 58 | * | 59 | * |
| 59 | * @param pageReqVO 包含分页查询条件的请求对象,必须经过验证。 | 60 | * @param pageReqVO 包含分页查询条件的请求对象,必须经过验证。 |
| 60 | * @return 返回包含分页查询结果的响应对象。 | 61 | * @return 返回包含分页查询结果的响应对象。 |
| @@ -62,7 +63,7 @@ public interface IotOtaUpgradeRecordService { | @@ -62,7 +63,7 @@ public interface IotOtaUpgradeRecordService { | ||
| 62 | PageResult<IotOtaUpgradeRecordDO> getUpgradeRecordPage(@Valid IotOtaUpgradeRecordPageReqVO pageReqVO); | 63 | PageResult<IotOtaUpgradeRecordDO> getUpgradeRecordPage(@Valid IotOtaUpgradeRecordPageReqVO pageReqVO); |
| 63 | 64 | ||
| 64 | /** | 65 | /** |
| 65 | - * 根据任务ID取消升级记录。 | 66 | + * 根据任务 ID 取消升级记录 |
| 66 | * <p> | 67 | * <p> |
| 67 | * 该函数用于根据给定的任务ID,取消与该任务相关的升级记录。通常用于在任务执行失败或用户手动取消时, | 68 | * 该函数用于根据给定的任务ID,取消与该任务相关的升级记录。通常用于在任务执行失败或用户手动取消时, |
| 68 | * 清理或标记相关的升级记录为取消状态。 | 69 | * 清理或标记相关的升级记录为取消状态。 |
| @@ -71,6 +72,7 @@ public interface IotOtaUpgradeRecordService { | @@ -71,6 +72,7 @@ public interface IotOtaUpgradeRecordService { | ||
| 71 | */ | 72 | */ |
| 72 | void cancelUpgradeRecordByTaskId(Long taskId); | 73 | void cancelUpgradeRecordByTaskId(Long taskId); |
| 73 | 74 | ||
| 75 | + // TODO @li:不要的方法,可以删除下哈。 | ||
| 74 | /** | 76 | /** |
| 75 | * 根据升级状态获取升级记录列表 | 77 | * 根据升级状态获取升级记录列表 |
| 76 | * | 78 | * |
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/ota/IotOtaUpgradeRecordServiceImpl.java
| @@ -25,8 +25,8 @@ import java.util.stream.Collectors; | @@ -25,8 +25,8 @@ import java.util.stream.Collectors; | ||
| 25 | 25 | ||
| 26 | import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; | 26 | import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; |
| 27 | import static cn.iocoder.yudao.module.iot.enums.ErrorCodeConstants.*; | 27 | import static cn.iocoder.yudao.module.iot.enums.ErrorCodeConstants.*; |
| 28 | -import static cn.iocoder.yudao.module.iot.enums.ota.IotOtaUpgradeRecordStatusEnum.CANCELED; | ||
| 29 | 28 | ||
| 29 | +// TODO @li:@Service、@Validated、@Slf4j,先用关键注解;2)类注释,简单写 | ||
| 30 | @Slf4j | 30 | @Slf4j |
| 31 | @Service | 31 | @Service |
| 32 | @Validated | 32 | @Validated |
| @@ -34,6 +34,7 @@ public class IotOtaUpgradeRecordServiceImpl implements IotOtaUpgradeRecordServic | @@ -34,6 +34,7 @@ public class IotOtaUpgradeRecordServiceImpl implements IotOtaUpgradeRecordServic | ||
| 34 | 34 | ||
| 35 | @Resource | 35 | @Resource |
| 36 | private IotOtaUpgradeRecordMapper upgradeRecordMapper; | 36 | private IotOtaUpgradeRecordMapper upgradeRecordMapper; |
| 37 | + // TODO @li:1)@Resource 写在 @Lazy 之前,先用关键注解;2)有必要的情况下,在写 @Lazy 注解。 | ||
| 37 | @Lazy | 38 | @Lazy |
| 38 | @Resource | 39 | @Resource |
| 39 | private IotDeviceService deviceService; | 40 | private IotDeviceService deviceService; |
| @@ -46,8 +47,10 @@ public class IotOtaUpgradeRecordServiceImpl implements IotOtaUpgradeRecordServic | @@ -46,8 +47,10 @@ public class IotOtaUpgradeRecordServiceImpl implements IotOtaUpgradeRecordServic | ||
| 46 | 47 | ||
| 47 | @Override | 48 | @Override |
| 48 | public void createOtaUpgradeRecordBatch(List<Long> deviceIds, Long firmwareId, Long upgradeTaskId) { | 49 | public void createOtaUpgradeRecordBatch(List<Long> deviceIds, Long firmwareId, Long upgradeTaskId) { |
| 49 | - // 1.校验升级记录信息是否存在,并且已经取消的任务可以重新开始 | 50 | + // 1. 校验升级记录信息是否存在,并且已经取消的任务可以重新开始 |
| 51 | + // TODO @li:批量查询。。 | ||
| 50 | deviceIds.forEach(deviceId -> validateUpgradeRecordDuplicate(firmwareId, upgradeTaskId, String.valueOf(deviceId))); | 52 | deviceIds.forEach(deviceId -> validateUpgradeRecordDuplicate(firmwareId, upgradeTaskId, String.valueOf(deviceId))); |
| 53 | + | ||
| 51 | // 2.初始化OTA升级记录列表信息 | 54 | // 2.初始化OTA升级记录列表信息 |
| 52 | IotOtaUpgradeTaskDO upgradeTask = upgradeTaskService.getUpgradeTask(upgradeTaskId); | 55 | IotOtaUpgradeTaskDO upgradeTask = upgradeTaskService.getUpgradeTask(upgradeTaskId); |
| 53 | IotOtaFirmwareDO firmware = firmwareService.getOtaFirmware(firmwareId); | 56 | IotOtaFirmwareDO firmware = firmwareService.getOtaFirmware(firmwareId); |
| @@ -70,6 +73,7 @@ public class IotOtaUpgradeRecordServiceImpl implements IotOtaUpgradeRecordServic | @@ -70,6 +73,7 @@ public class IotOtaUpgradeRecordServiceImpl implements IotOtaUpgradeRecordServic | ||
| 70 | 73 | ||
| 71 | } | 74 | } |
| 72 | 75 | ||
| 76 | + // TODO @li:1)方法注释,简单写;2)父类写了注释,子类就不用写了。。。 | ||
| 73 | /** | 77 | /** |
| 74 | * 获取OTA升级记录的数量统计。 | 78 | * 获取OTA升级记录的数量统计。 |
| 75 | * 该方法根据传入的查询条件,统计不同状态的OTA升级记录数量,并返回一个包含各状态数量的映射。 | 79 | * 该方法根据传入的查询条件,统计不同状态的OTA升级记录数量,并返回一个包含各状态数量的映射。 |
| @@ -87,10 +91,10 @@ public class IotOtaUpgradeRecordServiceImpl implements IotOtaUpgradeRecordServic | @@ -87,10 +91,10 @@ public class IotOtaUpgradeRecordServiceImpl implements IotOtaUpgradeRecordServic | ||
| 87 | Objects.requireNonNull(upgradeRecordCountMap); | 91 | Objects.requireNonNull(upgradeRecordCountMap); |
| 88 | return upgradeRecordCountMap.entrySet().stream().collect(Collectors.toMap( | 92 | return upgradeRecordCountMap.entrySet().stream().collect(Collectors.toMap( |
| 89 | entry -> Convert.toInt(entry.getKey()), | 93 | entry -> Convert.toInt(entry.getKey()), |
| 90 | - entry -> Convert.toLong(entry.getValue()) | ||
| 91 | - )); | 94 | + entry -> Convert.toLong(entry.getValue()))); |
| 92 | } | 95 | } |
| 93 | 96 | ||
| 97 | + // TODO @li:1)方法注释,简单写;2)父类写了注释,子类就不用写了。。。 | ||
| 94 | /** | 98 | /** |
| 95 | * 获取指定固件ID的OTA升级记录统计信息。 | 99 | * 获取指定固件ID的OTA升级记录统计信息。 |
| 96 | * 该方法通过查询数据库,统计不同状态的OTA升级记录数量,并返回一个包含各状态数量的映射。 | 100 | * 该方法通过查询数据库,统计不同状态的OTA升级记录数量,并返回一个包含各状态数量的映射。 |
| @@ -107,8 +111,7 @@ public class IotOtaUpgradeRecordServiceImpl implements IotOtaUpgradeRecordServic | @@ -107,8 +111,7 @@ public class IotOtaUpgradeRecordServiceImpl implements IotOtaUpgradeRecordServic | ||
| 107 | Objects.requireNonNull(upgradeRecordStatisticsMap); | 111 | Objects.requireNonNull(upgradeRecordStatisticsMap); |
| 108 | return upgradeRecordStatisticsMap.entrySet().stream().collect(Collectors.toMap( | 112 | return upgradeRecordStatisticsMap.entrySet().stream().collect(Collectors.toMap( |
| 109 | entry -> Convert.toInt(entry.getKey()), | 113 | entry -> Convert.toInt(entry.getKey()), |
| 110 | - entry -> Convert.toLong(entry.getValue()) | ||
| 111 | - )); | 114 | + entry -> Convert.toLong(entry.getValue()))); |
| 112 | } | 115 | } |
| 113 | 116 | ||
| 114 | @Override | 117 | @Override |
| @@ -118,7 +121,8 @@ public class IotOtaUpgradeRecordServiceImpl implements IotOtaUpgradeRecordServic | @@ -118,7 +121,8 @@ public class IotOtaUpgradeRecordServiceImpl implements IotOtaUpgradeRecordServic | ||
| 118 | // 1.2.校验升级记录是否可以重新升级 | 121 | // 1.2.校验升级记录是否可以重新升级 |
| 119 | validateUpgradeRecordCanRetry(upgradeRecord); | 122 | validateUpgradeRecordCanRetry(upgradeRecord); |
| 120 | 123 | ||
| 121 | - // 2.将一些数据重置,这样定时任务轮询就可以重启任务 | 124 | + // 2. 将一些数据重置,这样定时任务轮询就可以重启任务 |
| 125 | + // TODO @li:更新的时候,wherestatus; | ||
| 122 | upgradeRecordMapper.updateById(new IotOtaUpgradeRecordDO() | 126 | upgradeRecordMapper.updateById(new IotOtaUpgradeRecordDO() |
| 123 | .setId(upgradeRecord.getId()).setProgress(0) | 127 | .setId(upgradeRecord.getId()).setProgress(0) |
| 124 | .setStatus(IotOtaUpgradeRecordStatusEnum.PENDING.getStatus())); | 128 | .setStatus(IotOtaUpgradeRecordStatusEnum.PENDING.getStatus())); |
| @@ -136,9 +140,9 @@ public class IotOtaUpgradeRecordServiceImpl implements IotOtaUpgradeRecordServic | @@ -136,9 +140,9 @@ public class IotOtaUpgradeRecordServiceImpl implements IotOtaUpgradeRecordServic | ||
| 136 | 140 | ||
| 137 | @Override | 141 | @Override |
| 138 | public void cancelUpgradeRecordByTaskId(Long taskId) { | 142 | public void cancelUpgradeRecordByTaskId(Long taskId) { |
| 139 | - // 暂定只有待推送的升级记录可以取消 | 143 | + // 暂定只有待推送的升级记录可以取消 TODO @芋艿:可以看看阿里云,哪些可以取消 |
| 140 | upgradeRecordMapper.updateUpgradeRecordStatusByTaskIdAndStatus( | 144 | upgradeRecordMapper.updateUpgradeRecordStatusByTaskIdAndStatus( |
| 141 | - CANCELED.getStatus(), taskId, | 145 | + IotOtaUpgradeRecordStatusEnum.CANCELED.getStatus(), taskId, |
| 142 | IotOtaUpgradeRecordStatusEnum.PENDING.getStatus()); | 146 | IotOtaUpgradeRecordStatusEnum.PENDING.getStatus()); |
| 143 | } | 147 | } |
| 144 | 148 | ||
| @@ -175,6 +179,7 @@ public class IotOtaUpgradeRecordServiceImpl implements IotOtaUpgradeRecordServic | @@ -175,6 +179,7 @@ public class IotOtaUpgradeRecordServiceImpl implements IotOtaUpgradeRecordServic | ||
| 175 | return upgradeRecord; | 179 | return upgradeRecord; |
| 176 | } | 180 | } |
| 177 | 181 | ||
| 182 | + // TODO @li:注释有点冗余 | ||
| 178 | /** | 183 | /** |
| 179 | * 校验固件升级记录是否重复。 | 184 | * 校验固件升级记录是否重复。 |
| 180 | * <p> | 185 | * <p> |
| @@ -189,13 +194,17 @@ public class IotOtaUpgradeRecordServiceImpl implements IotOtaUpgradeRecordServic | @@ -189,13 +194,17 @@ public class IotOtaUpgradeRecordServiceImpl implements IotOtaUpgradeRecordServic | ||
| 189 | // 根据条件查询升级记录 | 194 | // 根据条件查询升级记录 |
| 190 | IotOtaUpgradeRecordDO upgradeRecord = upgradeRecordMapper.selectByConditions(firmwareId, taskId, deviceId); | 195 | IotOtaUpgradeRecordDO upgradeRecord = upgradeRecordMapper.selectByConditions(firmwareId, taskId, deviceId); |
| 191 | // 如果查询到升级记录且状态不是已取消,则抛出异常 | 196 | // 如果查询到升级记录且状态不是已取消,则抛出异常 |
| 197 | + // TODO @li:if return,减少括号层级; | ||
| 198 | + // TODO @li:ObjUtil.notEquals,尽量不用 !取否逻辑; | ||
| 192 | if (upgradeRecord != null) { | 199 | if (upgradeRecord != null) { |
| 193 | - if (!CANCELED.getStatus().equals(upgradeRecord.getStatus())) { | 200 | + if (!IotOtaUpgradeRecordStatusEnum.CANCELED.getStatus().equals(upgradeRecord.getStatus())) { |
| 201 | + // TODO @li:提示的时候,需要把 deviceName 给提示出来,不然用户不知道哪个重复啦。 | ||
| 194 | throw exception(OTA_UPGRADE_RECORD_DUPLICATE); | 202 | throw exception(OTA_UPGRADE_RECORD_DUPLICATE); |
| 195 | } | 203 | } |
| 196 | } | 204 | } |
| 197 | } | 205 | } |
| 198 | 206 | ||
| 207 | + // TODO @li:注释有点冗余 | ||
| 199 | /** | 208 | /** |
| 200 | * 验证升级记录是否可以重试。 | 209 | * 验证升级记录是否可以重试。 |
| 201 | * <p> | 210 | * <p> |
| @@ -205,6 +214,7 @@ public class IotOtaUpgradeRecordServiceImpl implements IotOtaUpgradeRecordServic | @@ -205,6 +214,7 @@ public class IotOtaUpgradeRecordServiceImpl implements IotOtaUpgradeRecordServic | ||
| 205 | * @param upgradeRecord 需要验证的升级记录对象,类型为 IotOtaUpgradeRecordDO | 214 | * @param upgradeRecord 需要验证的升级记录对象,类型为 IotOtaUpgradeRecordDO |
| 206 | * @throws cn.iocoder.yudao.framework.common.exception.ServiceException,则抛出 OTA_UPGRADE_RECORD_CANNOT_RETRY 异常 | 215 | * @throws cn.iocoder.yudao.framework.common.exception.ServiceException,则抛出 OTA_UPGRADE_RECORD_CANNOT_RETRY 异常 |
| 207 | */ | 216 | */ |
| 217 | + // TODO @li:这种一次性的方法(不复用的),其实一步一定要抽成小方法; | ||
| 208 | private void validateUpgradeRecordCanRetry(IotOtaUpgradeRecordDO upgradeRecord) { | 218 | private void validateUpgradeRecordCanRetry(IotOtaUpgradeRecordDO upgradeRecord) { |
| 209 | // 检查升级记录的状态是否为 PENDING、PUSHED 或 UPGRADING | 219 | // 检查升级记录的状态是否为 PENDING、PUSHED 或 UPGRADING |
| 210 | if (ObjectUtils.equalsAny(upgradeRecord.getStatus(), | 220 | if (ObjectUtils.equalsAny(upgradeRecord.getStatus(), |
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/ota/IotOtaUpgradeTaskServiceImpl.java
| @@ -27,6 +27,7 @@ import java.util.stream.Collectors; | @@ -27,6 +27,7 @@ import java.util.stream.Collectors; | ||
| 27 | import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; | 27 | import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; |
| 28 | import static cn.iocoder.yudao.module.iot.enums.ErrorCodeConstants.*; | 28 | import static cn.iocoder.yudao.module.iot.enums.ErrorCodeConstants.*; |
| 29 | 29 | ||
| 30 | +// TODO @li:完善注释、注解顺序 | ||
| 30 | @Slf4j | 31 | @Slf4j |
| 31 | @Service | 32 | @Service |
| 32 | @Validated | 33 | @Validated |
| @@ -54,9 +55,11 @@ public class IotOtaUpgradeTaskServiceImpl implements IotOtaUpgradeTaskService { | @@ -54,9 +55,11 @@ public class IotOtaUpgradeTaskServiceImpl implements IotOtaUpgradeTaskService { | ||
| 54 | IotOtaFirmwareDO firmware = firmwareService.validateFirmwareExists(createReqVO.getFirmwareId()); | 55 | IotOtaFirmwareDO firmware = firmwareService.validateFirmwareExists(createReqVO.getFirmwareId()); |
| 55 | // 1.3 补全设备范围信息,并且校验是否又设备可以升级,如果没有设备可以升级,则报错 | 56 | // 1.3 补全设备范围信息,并且校验是否又设备可以升级,如果没有设备可以升级,则报错 |
| 56 | validateScopeAndDevice(createReqVO.getScope(), createReqVO.getDeviceIds(), firmware.getProductId()); | 57 | validateScopeAndDevice(createReqVO.getScope(), createReqVO.getDeviceIds(), firmware.getProductId()); |
| 58 | + | ||
| 57 | // 2. 保存 OTA 升级任务信息到数据库 | 59 | // 2. 保存 OTA 升级任务信息到数据库 |
| 58 | IotOtaUpgradeTaskDO upgradeTask = initOtaUpgradeTask(createReqVO, firmware.getProductId()); | 60 | IotOtaUpgradeTaskDO upgradeTask = initOtaUpgradeTask(createReqVO, firmware.getProductId()); |
| 59 | upgradeTaskMapper.insert(upgradeTask); | 61 | upgradeTaskMapper.insert(upgradeTask); |
| 62 | + | ||
| 60 | // 3. 生成设备升级记录信息并存储,等待定时任务轮询 | 63 | // 3. 生成设备升级记录信息并存储,等待定时任务轮询 |
| 61 | upgradeRecordService.createOtaUpgradeRecordBatch(upgradeTask.getDeviceIds(), firmware.getId(), upgradeTask.getId()); | 64 | upgradeRecordService.createOtaUpgradeRecordBatch(upgradeTask.getDeviceIds(), firmware.getId(), upgradeTask.getId()); |
| 62 | return upgradeTask.getId(); | 65 | return upgradeTask.getId(); |
| @@ -68,15 +71,16 @@ public class IotOtaUpgradeTaskServiceImpl implements IotOtaUpgradeTaskService { | @@ -68,15 +71,16 @@ public class IotOtaUpgradeTaskServiceImpl implements IotOtaUpgradeTaskService { | ||
| 68 | // 1.1 校验升级任务是否存在 | 71 | // 1.1 校验升级任务是否存在 |
| 69 | IotOtaUpgradeTaskDO upgradeTask = validateUpgradeTaskExists(id); | 72 | IotOtaUpgradeTaskDO upgradeTask = validateUpgradeTaskExists(id); |
| 70 | // 1.2 校验升级任务是否可以取消 | 73 | // 1.2 校验升级任务是否可以取消 |
| 71 | - // 检查升级任务的状态是否为进行中,只有此状态下的任务才允许取消 | 74 | + // TODO @li:ObjUtil notequals |
| 72 | if (!Objects.equals(upgradeTask.getStatus(), IotOtaUpgradeTaskStatusEnum.IN_PROGRESS.getStatus())) { | 75 | if (!Objects.equals(upgradeTask.getStatus(), IotOtaUpgradeTaskStatusEnum.IN_PROGRESS.getStatus())) { |
| 73 | - // 只有进行中的任务才可以取消 | ||
| 74 | throw exception(OTA_UPGRADE_TASK_CANNOT_CANCEL); | 76 | throw exception(OTA_UPGRADE_TASK_CANNOT_CANCEL); |
| 75 | } | 77 | } |
| 78 | + | ||
| 76 | // 2. 更新 OTA 升级任务状态为已取消 | 79 | // 2. 更新 OTA 升级任务状态为已取消 |
| 77 | upgradeTaskMapper.updateById(IotOtaUpgradeTaskDO.builder() | 80 | upgradeTaskMapper.updateById(IotOtaUpgradeTaskDO.builder() |
| 78 | .id(id).status(IotOtaUpgradeTaskStatusEnum.CANCELED.getStatus()) | 81 | .id(id).status(IotOtaUpgradeTaskStatusEnum.CANCELED.getStatus()) |
| 79 | .build()); | 82 | .build()); |
| 83 | + | ||
| 80 | // 3. 更新 OTA 升级记录状态为已取消 | 84 | // 3. 更新 OTA 升级记录状态为已取消 |
| 81 | upgradeRecordService.cancelUpgradeRecordByTaskId(id); | 85 | upgradeRecordService.cancelUpgradeRecordByTaskId(id); |
| 82 | } | 86 | } |
| @@ -98,11 +102,10 @@ public class IotOtaUpgradeTaskServiceImpl implements IotOtaUpgradeTaskService { | @@ -98,11 +102,10 @@ public class IotOtaUpgradeTaskServiceImpl implements IotOtaUpgradeTaskService { | ||
| 98 | 102 | ||
| 99 | @Override | 103 | @Override |
| 100 | public void updateUpgradeTaskStatus(Long id, Integer status) { | 104 | public void updateUpgradeTaskStatus(Long id, Integer status) { |
| 101 | - upgradeTaskMapper.updateById(IotOtaUpgradeTaskDO.builder() | ||
| 102 | - .id(id).status(status) | ||
| 103 | - .build()); | 105 | + upgradeTaskMapper.updateById(IotOtaUpgradeTaskDO.builder().id(id).status(status).build()); |
| 104 | } | 106 | } |
| 105 | 107 | ||
| 108 | + // TODO @li:注释有点冗余 | ||
| 106 | /** | 109 | /** |
| 107 | * 校验固件升级任务是否重复 | 110 | * 校验固件升级任务是否重复 |
| 108 | * <p> | 111 | * <p> |
| @@ -123,6 +126,7 @@ public class IotOtaUpgradeTaskServiceImpl implements IotOtaUpgradeTaskService { | @@ -123,6 +126,7 @@ public class IotOtaUpgradeTaskServiceImpl implements IotOtaUpgradeTaskService { | ||
| 123 | } | 126 | } |
| 124 | } | 127 | } |
| 125 | 128 | ||
| 129 | + // TODO @li:注释有点冗余 | ||
| 126 | /** | 130 | /** |
| 127 | * 验证升级任务的范围和设备列表的有效性。 | 131 | * 验证升级任务的范围和设备列表的有效性。 |
| 128 | * <p> | 132 | * <p> |
| @@ -135,6 +139,7 @@ public class IotOtaUpgradeTaskServiceImpl implements IotOtaUpgradeTaskService { | @@ -135,6 +139,7 @@ public class IotOtaUpgradeTaskServiceImpl implements IotOtaUpgradeTaskService { | ||
| 135 | * @throws cn.iocoder.yudao.framework.common.exception.ServiceException,抛出相应的异常 | 139 | * @throws cn.iocoder.yudao.framework.common.exception.ServiceException,抛出相应的异常 |
| 136 | */ | 140 | */ |
| 137 | private void validateScopeAndDevice(Integer scope, List<Long> deviceIds, String productId) { | 141 | private void validateScopeAndDevice(Integer scope, List<Long> deviceIds, String productId) { |
| 142 | + // TODO @li:if return | ||
| 138 | // 验证范围为“选择设备”时,设备列表不能为空 | 143 | // 验证范围为“选择设备”时,设备列表不能为空 |
| 139 | if (Objects.equals(scope, IotOtaUpgradeTaskScopeEnum.SELECT.getScope())) { | 144 | if (Objects.equals(scope, IotOtaUpgradeTaskScopeEnum.SELECT.getScope())) { |
| 140 | if (CollUtil.isEmpty(deviceIds)) { | 145 | if (CollUtil.isEmpty(deviceIds)) { |
| @@ -149,6 +154,7 @@ public class IotOtaUpgradeTaskServiceImpl implements IotOtaUpgradeTaskService { | @@ -149,6 +154,7 @@ public class IotOtaUpgradeTaskServiceImpl implements IotOtaUpgradeTaskService { | ||
| 149 | } | 154 | } |
| 150 | } | 155 | } |
| 151 | 156 | ||
| 157 | + // TODO @li:注释有点冗余 | ||
| 152 | /** | 158 | /** |
| 153 | * 验证升级任务是否存在 | 159 | * 验证升级任务是否存在 |
| 154 | * <p> | 160 | * <p> |
| @@ -167,6 +173,7 @@ public class IotOtaUpgradeTaskServiceImpl implements IotOtaUpgradeTaskService { | @@ -167,6 +173,7 @@ public class IotOtaUpgradeTaskServiceImpl implements IotOtaUpgradeTaskService { | ||
| 167 | return upgradeTask; | 173 | return upgradeTask; |
| 168 | } | 174 | } |
| 169 | 175 | ||
| 176 | + // TODO @li:注释有点冗余 | ||
| 170 | /** | 177 | /** |
| 171 | * 初始化升级任务 | 178 | * 初始化升级任务 |
| 172 | * <p> | 179 | * <p> |
| @@ -177,6 +184,7 @@ public class IotOtaUpgradeTaskServiceImpl implements IotOtaUpgradeTaskService { | @@ -177,6 +184,7 @@ public class IotOtaUpgradeTaskServiceImpl implements IotOtaUpgradeTaskService { | ||
| 177 | * @param createReqVO 升级任务保存请求对象,包含创建升级任务所需的信息 | 184 | * @param createReqVO 升级任务保存请求对象,包含创建升级任务所需的信息 |
| 178 | * @return 返回初始化后的升级任务对象 | 185 | * @return 返回初始化后的升级任务对象 |
| 179 | */ | 186 | */ |
| 187 | + // TODO @li:一次性的方法,不用特别抽小方法 | ||
| 180 | private IotOtaUpgradeTaskDO initOtaUpgradeTask(IotOtaUpgradeTaskSaveReqVO createReqVO, String productId) { | 188 | private IotOtaUpgradeTaskDO initOtaUpgradeTask(IotOtaUpgradeTaskSaveReqVO createReqVO, String productId) { |
| 181 | // 将请求参数转换为升级任务对象 | 189 | // 将请求参数转换为升级任务对象 |
| 182 | IotOtaUpgradeTaskDO upgradeTask = BeanUtils.toBean(createReqVO, IotOtaUpgradeTaskDO.class); | 190 | IotOtaUpgradeTaskDO upgradeTask = BeanUtils.toBean(createReqVO, IotOtaUpgradeTaskDO.class); |
yudao-module-iot/yudao-module-iot-biz/src/main/resources/mapper/ota/IotOtaUpgradeRecordMapper.xml deleted
| 1 | -<?xml version="1.0" encoding="UTF-8"?> | ||
| 2 | -<!DOCTYPE mapper | ||
| 3 | - PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" | ||
| 4 | - "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> | ||
| 5 | -<mapper namespace="cn.iocoder.yudao.module.iot.dal.mysql.ota.IotOtaUpgradeRecordMapper"> | ||
| 6 | - | ||
| 7 | -</mapper> | ||
| 8 | \ No newline at end of file | 0 | \ No newline at end of file |