reactor:【IoT 物联网】调整 ota 的 task 实体定义(暂时未处理 controller)
This commit is contained in:
@@ -21,7 +21,7 @@ import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
|
||||
|
||||
@Tag(name = "管理后台 - IoT OTA 固件")
|
||||
@RestController
|
||||
@RequestMapping("/iot/ota-firmware")
|
||||
@RequestMapping("/iot/ota/firmware")
|
||||
@Validated
|
||||
public class IotOtaFirmwareController {
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
||||
import cn.iocoder.yudao.module.iot.controller.admin.ota.vo.upgrade.record.IotOtaUpgradeRecordPageReqVO;
|
||||
import cn.iocoder.yudao.module.iot.controller.admin.ota.vo.upgrade.record.IotOtaUpgradeRecordRespVO;
|
||||
import cn.iocoder.yudao.module.iot.dal.dataobject.ota.IotOtaUpgradeRecordDO;
|
||||
import cn.iocoder.yudao.module.iot.dal.dataobject.ota.IotOtaTaskRecordDO;
|
||||
import cn.iocoder.yudao.module.iot.service.ota.IotOtaUpgradeRecordService;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.Parameter;
|
||||
@@ -50,7 +50,7 @@ public class IotOtaUpgradeRecordController {
|
||||
@PreAuthorize("@ss.hasPermission('iot:ota-upgrade-record:query')")
|
||||
public CommonResult<PageResult<IotOtaUpgradeRecordRespVO>> getUpgradeRecordPage(
|
||||
@Valid IotOtaUpgradeRecordPageReqVO pageReqVO) {
|
||||
PageResult<IotOtaUpgradeRecordDO> pageResult = upgradeRecordService.getUpgradeRecordPage(pageReqVO);
|
||||
PageResult<IotOtaTaskRecordDO> pageResult = upgradeRecordService.getUpgradeRecordPage(pageReqVO);
|
||||
return success(BeanUtils.toBean(pageResult, IotOtaUpgradeRecordRespVO.class));
|
||||
}
|
||||
|
||||
@@ -59,17 +59,8 @@ public class IotOtaUpgradeRecordController {
|
||||
@PreAuthorize("@ss.hasPermission('iot:ota-upgrade-record:query')")
|
||||
@Parameter(name = "id", description = "升级记录编号", required = true, example = "1024")
|
||||
public CommonResult<IotOtaUpgradeRecordRespVO> getUpgradeRecord(@RequestParam("id") Long id) {
|
||||
IotOtaUpgradeRecordDO upgradeRecord = upgradeRecordService.getUpgradeRecord(id);
|
||||
IotOtaTaskRecordDO upgradeRecord = upgradeRecordService.getUpgradeRecord(id);
|
||||
return success(BeanUtils.toBean(upgradeRecord, IotOtaUpgradeRecordRespVO.class));
|
||||
}
|
||||
|
||||
@PutMapping("/retry")
|
||||
@Operation(summary = "重试升级记录")
|
||||
@PreAuthorize("@ss.hasPermission('iot:ota-upgrade-record:retry')")
|
||||
@Parameter(name = "id", description = "升级记录编号", required = true, example = "1024")
|
||||
public CommonResult<Boolean> retryUpgradeRecord(@RequestParam("id") Long id) {
|
||||
upgradeRecordService.retryUpgradeRecord(id);
|
||||
return success(true);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -6,7 +6,7 @@ import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
||||
import cn.iocoder.yudao.module.iot.controller.admin.ota.vo.upgrade.task.IotOtaUpgradeTaskPageReqVO;
|
||||
import cn.iocoder.yudao.module.iot.controller.admin.ota.vo.upgrade.task.IotOtaUpgradeTaskRespVO;
|
||||
import cn.iocoder.yudao.module.iot.controller.admin.ota.vo.upgrade.task.IotOtaUpgradeTaskSaveReqVO;
|
||||
import cn.iocoder.yudao.module.iot.dal.dataobject.ota.IotOtaUpgradeTaskDO;
|
||||
import cn.iocoder.yudao.module.iot.dal.dataobject.ota.IotOtaTaskDO;
|
||||
import cn.iocoder.yudao.module.iot.service.ota.IotOtaUpgradeTaskService;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.Parameter;
|
||||
@@ -48,7 +48,7 @@ public class IotOtaUpgradeTaskController {
|
||||
@Operation(summary = "获得升级任务分页")
|
||||
@PreAuthorize(value = "@ss.hasPermission('iot:ota-upgrade-task:query')")
|
||||
public CommonResult<PageResult<IotOtaUpgradeTaskRespVO>> getUpgradeTaskPage(@Valid IotOtaUpgradeTaskPageReqVO pageReqVO) {
|
||||
PageResult<IotOtaUpgradeTaskDO> pageResult = upgradeTaskService.getUpgradeTaskPage(pageReqVO);
|
||||
PageResult<IotOtaTaskDO> pageResult = upgradeTaskService.getUpgradeTaskPage(pageReqVO);
|
||||
return success(BeanUtils.toBean(pageResult, IotOtaUpgradeTaskRespVO.class));
|
||||
}
|
||||
|
||||
@@ -57,7 +57,7 @@ public class IotOtaUpgradeTaskController {
|
||||
@Parameter(name = "id", description = "升级任务编号", required = true, example = "1024")
|
||||
@PreAuthorize(value = "@ss.hasPermission('iot:ota-upgrade-task:query')")
|
||||
public CommonResult<IotOtaUpgradeTaskRespVO> getUpgradeTask(@RequestParam("id") Long id) {
|
||||
IotOtaUpgradeTaskDO upgradeTask = upgradeTaskService.getUpgradeTask(id);
|
||||
IotOtaTaskDO upgradeTask = upgradeTaskService.getUpgradeTask(id);
|
||||
return success(BeanUtils.toBean(upgradeTask, IotOtaUpgradeTaskRespVO.class));
|
||||
}
|
||||
|
||||
|
||||
@@ -3,7 +3,8 @@ package cn.iocoder.yudao.module.iot.controller.admin.ota.vo.upgrade.record;
|
||||
import cn.iocoder.yudao.module.iot.dal.dataobject.device.IotDeviceDO;
|
||||
import cn.iocoder.yudao.module.iot.dal.dataobject.device.IotDeviceMessageDO;
|
||||
import cn.iocoder.yudao.module.iot.dal.dataobject.ota.IotOtaFirmwareDO;
|
||||
import cn.iocoder.yudao.module.iot.dal.dataobject.ota.IotOtaUpgradeTaskDO;
|
||||
import cn.iocoder.yudao.module.iot.dal.dataobject.ota.IotOtaTaskDO;
|
||||
import cn.iocoder.yudao.module.iot.enums.ota.IotOtaTaskRecordStatusEnum;
|
||||
import com.fhs.core.trans.anno.Trans;
|
||||
import com.fhs.core.trans.constant.TransType;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
@@ -36,7 +37,7 @@ public class IotOtaUpgradeRecordRespVO {
|
||||
/**
|
||||
* 任务编号
|
||||
* <p>
|
||||
* 关联 {@link IotOtaUpgradeTaskDO#getId()}
|
||||
* 关联 {@link IotOtaTaskDO#getId()}
|
||||
*/
|
||||
@Schema(description = "任务编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
|
||||
private Long taskId;
|
||||
@@ -77,7 +78,7 @@ public class IotOtaUpgradeRecordRespVO {
|
||||
/**
|
||||
* 升级状态
|
||||
* <p>
|
||||
* 关联 {@link cn.iocoder.yudao.module.iot.enums.ota.IotOtaUpgradeRecordStatusEnum}
|
||||
* 关联 {@link IotOtaTaskRecordStatusEnum}
|
||||
*/
|
||||
@Schema(description = "升级状态", requiredMode = Schema.RequiredMode.REQUIRED, allowableValues = {"0", "10", "20", "30", "40", "50"})
|
||||
private Integer status;
|
||||
|
||||
@@ -9,17 +9,11 @@ import lombok.Data;
|
||||
@Schema(description = "管理后台 - IoT OTA 升级任务分页 Request VO")
|
||||
public class IotOtaUpgradeTaskPageReqVO extends PageParam {
|
||||
|
||||
/**
|
||||
* 任务名称字段,用于描述任务的名称
|
||||
*/
|
||||
@Schema(description = "固件编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
|
||||
@NotNull(message = "固件编号不能为空")
|
||||
private Long firmwareId;
|
||||
|
||||
@Schema(description = "任务名称", example = "升级任务")
|
||||
private String name;
|
||||
|
||||
/**
|
||||
* 固件编号字段,用于唯一标识固件,不能为空
|
||||
*/
|
||||
@NotNull(message = "固件编号不能为空")
|
||||
@Schema(description = "固件编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
|
||||
private Long firmwareId;
|
||||
|
||||
}
|
||||
|
||||
@@ -1,7 +1,5 @@
|
||||
package cn.iocoder.yudao.module.iot.controller.admin.ota.vo.upgrade.task;
|
||||
|
||||
import cn.iocoder.yudao.module.iot.dal.dataobject.device.IotDeviceDO;
|
||||
import cn.iocoder.yudao.module.iot.dal.dataobject.ota.IotOtaFirmwareDO;
|
||||
import com.fhs.core.trans.vo.VO;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
@@ -13,69 +11,33 @@ import java.util.List;
|
||||
@Schema(description = "管理后台 - IoT OTA 升级任务 Response VO")
|
||||
public class IotOtaUpgradeTaskRespVO implements VO {
|
||||
|
||||
/**
|
||||
* 任务编号
|
||||
*/
|
||||
@Schema(description = "任务编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
|
||||
private Long id;
|
||||
/**
|
||||
* 任务名称
|
||||
*/
|
||||
|
||||
@Schema(description = "任务名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "升级任务")
|
||||
private String name;
|
||||
/**
|
||||
* 任务描述
|
||||
*/
|
||||
|
||||
@Schema(description = "任务描述", example = "升级任务")
|
||||
private String description;
|
||||
/**
|
||||
* 固件编号
|
||||
* <p>
|
||||
* 关联 {@link IotOtaFirmwareDO#getId()}
|
||||
*/
|
||||
|
||||
@Schema(description = "固件编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
|
||||
private Long firmwareId;
|
||||
/**
|
||||
* 任务状态
|
||||
* <p>
|
||||
* 关联 {@link cn.iocoder.yudao.module.iot.enums.ota.IotOtaUpgradeTaskStatusEnum}
|
||||
*/
|
||||
@Schema(description = "任务状态", requiredMode = Schema.RequiredMode.REQUIRED, allowableValues = {"10", "20", "21", "30"})
|
||||
|
||||
@Schema(description = "任务状态", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
private Integer status;
|
||||
/**
|
||||
* 任务状态名称
|
||||
*/
|
||||
@Schema(description = "任务状态名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "进行中")
|
||||
private String statusName;
|
||||
/**
|
||||
* 升级范围
|
||||
* <p>
|
||||
* 关联 {@link cn.iocoder.yudao.module.iot.enums.ota.IotOtaUpgradeTaskScopeEnum}
|
||||
*/
|
||||
|
||||
@Schema(description = "升级范围", requiredMode = Schema.RequiredMode.REQUIRED, allowableValues = {"1", "2"})
|
||||
private Integer scope;
|
||||
/**
|
||||
* 设备数量
|
||||
*/
|
||||
|
||||
@Schema(description = "设备数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
|
||||
private Long deviceCount;
|
||||
/**
|
||||
* 选中的设备编号数组
|
||||
* <p>
|
||||
* 关联 {@link IotDeviceDO#getId()}
|
||||
*/
|
||||
|
||||
@Schema(description = "选中的设备编号数组", example = "1024")
|
||||
private List<Long> deviceIds;
|
||||
/**
|
||||
* 选中的设备名字数组
|
||||
* <p>
|
||||
* 关联 {@link IotDeviceDO#getDeviceName()}
|
||||
*/
|
||||
|
||||
@Schema(description = "选中的设备名字数组", example = "1024")
|
||||
private List<String> deviceNames;
|
||||
/**
|
||||
* 创建时间
|
||||
*/
|
||||
|
||||
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED, example = "2022-07-08 07:30:00")
|
||||
private LocalDateTime createTime;
|
||||
|
||||
|
||||
@@ -1,9 +1,7 @@
|
||||
package cn.iocoder.yudao.module.iot.controller.admin.ota.vo.upgrade.task;
|
||||
|
||||
import cn.iocoder.yudao.framework.common.validation.InEnum;
|
||||
import cn.iocoder.yudao.module.iot.dal.dataobject.device.IotDeviceDO;
|
||||
import cn.iocoder.yudao.module.iot.dal.dataobject.ota.IotOtaFirmwareDO;
|
||||
import cn.iocoder.yudao.module.iot.enums.ota.IotOtaUpgradeTaskScopeEnum;
|
||||
import cn.iocoder.yudao.module.iot.enums.ota.IotOtaTaskDeviceScopeEnum;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import jakarta.validation.constraints.NotEmpty;
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
@@ -11,51 +9,27 @@ import lombok.Data;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
@Schema(description = "管理后台 - IoT OTA 升级任务创建/修改 Request VO")
|
||||
@Data
|
||||
public class IotOtaUpgradeTaskSaveReqVO {
|
||||
|
||||
// TODO @li:已经有注解,不用重复注释
|
||||
// TODO @li: @Schema 写在参数校验前面。先有定义;其他的,也检查下;
|
||||
|
||||
/**
|
||||
* 任务名称
|
||||
*/
|
||||
@NotEmpty(message = "任务名称不能为空")
|
||||
@Schema(description = "任务名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "升级任务")
|
||||
private String name;
|
||||
|
||||
/**
|
||||
* 任务描述
|
||||
*/
|
||||
@Schema(description = "任务描述", example = "升级任务")
|
||||
private String description;
|
||||
|
||||
/**
|
||||
* 固件编号
|
||||
* <p>
|
||||
* 关联 {@link IotOtaFirmwareDO#getId()}
|
||||
*/
|
||||
@NotNull(message = "固件编号不能为空")
|
||||
@Schema(description = "固件编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
|
||||
@NotNull(message = "固件编号不能为空")
|
||||
private Long firmwareId;
|
||||
|
||||
/**
|
||||
* 升级范围
|
||||
* <p>
|
||||
* 关联 {@link cn.iocoder.yudao.module.iot.enums.ota.IotOtaUpgradeTaskScopeEnum}
|
||||
*/
|
||||
@NotNull(message = "升级范围不能为空")
|
||||
@InEnum(value = IotOtaUpgradeTaskScopeEnum.class)
|
||||
@Schema(description = "升级范围", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
|
||||
@NotNull(message = "升级范围不能为空")
|
||||
@InEnum(value = IotOtaTaskDeviceScopeEnum.class)
|
||||
private Integer scope;
|
||||
|
||||
/**
|
||||
* 选中的设备编号数组
|
||||
* <p>
|
||||
* 关联 {@link IotDeviceDO#getId()}
|
||||
*/
|
||||
@Schema(description = "选中的设备编号数组", requiredMode = Schema.RequiredMode.REQUIRED, example = "[1,2,3,4]")
|
||||
@Schema(description = "选中的设备编号数组", requiredMode = Schema.RequiredMode.REQUIRED, example = "1,2,3")
|
||||
private List<Long> deviceIds;
|
||||
|
||||
}
|
||||
|
||||
@@ -1,31 +1,28 @@
|
||||
package cn.iocoder.yudao.module.iot.dal.dataobject.ota;
|
||||
|
||||
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
|
||||
import cn.iocoder.yudao.module.iot.dal.dataobject.device.IotDeviceDO;
|
||||
import cn.iocoder.yudao.module.iot.enums.ota.IotOtaTaskDeviceScopeEnum;
|
||||
import cn.iocoder.yudao.module.iot.enums.ota.IotOtaTaskStatusEnum;
|
||||
import com.baomidou.mybatisplus.annotation.KeySequence;
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* IoT OTA 升级任务 DO
|
||||
*
|
||||
* @author 芋道源码
|
||||
*/
|
||||
@TableName(value = "iot_ota_upgrade_task", autoResultMap = true)
|
||||
@KeySequence("iot_ota_upgrade_task_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
|
||||
@TableName(value = "iot_ota_task", autoResultMap = true)
|
||||
@KeySequence("iot_ota_task_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
|
||||
@Data
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class IotOtaUpgradeTaskDO extends BaseDO {
|
||||
public class IotOtaTaskDO extends BaseDO {
|
||||
|
||||
/**
|
||||
* 任务编号
|
||||
@@ -51,26 +48,23 @@ public class IotOtaUpgradeTaskDO extends BaseDO {
|
||||
/**
|
||||
* 任务状态
|
||||
* <p>
|
||||
* 关联 {@link cn.iocoder.yudao.module.iot.enums.ota.IotOtaUpgradeTaskStatusEnum}
|
||||
* 关联 {@link IotOtaTaskStatusEnum}
|
||||
*/
|
||||
private Integer status;
|
||||
|
||||
/**
|
||||
* 升级范围
|
||||
* 设备升级范围
|
||||
* <p>
|
||||
* 关联 {@link cn.iocoder.yudao.module.iot.enums.ota.IotOtaUpgradeTaskScopeEnum}
|
||||
* 关联 {@link IotOtaTaskDeviceScopeEnum}
|
||||
*/
|
||||
private Integer scope;
|
||||
private Integer deviceScope;
|
||||
/**
|
||||
* 设备数量
|
||||
* 设备总数数量
|
||||
*/
|
||||
private Long deviceCount;
|
||||
private Long deviceTotalCount;
|
||||
/**
|
||||
* 选中的设备编号数组
|
||||
* <p>
|
||||
* 关联 {@link IotDeviceDO#getId()}
|
||||
* 设备成功数量
|
||||
*/
|
||||
@TableField(typeHandler = JacksonTypeHandler.class)
|
||||
private List<Long> deviceIds;
|
||||
private Integer deviceSuccessCount;
|
||||
|
||||
}
|
||||
@@ -3,6 +3,7 @@ package cn.iocoder.yudao.module.iot.dal.dataobject.ota;
|
||||
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
|
||||
import cn.iocoder.yudao.module.iot.dal.dataobject.device.IotDeviceDO;
|
||||
import cn.iocoder.yudao.module.iot.dal.dataobject.device.IotDeviceMessageDO;
|
||||
import cn.iocoder.yudao.module.iot.enums.ota.IotOtaTaskRecordStatusEnum;
|
||||
import com.baomidou.mybatisplus.annotation.KeySequence;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
@@ -11,17 +12,17 @@ import lombok.*;
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
/**
|
||||
* IoT OTA 升级记录 DO
|
||||
* IoT OTA 升级任务记录 DO
|
||||
*
|
||||
* @author 芋道源码
|
||||
*/
|
||||
@TableName(value = "iot_ota_upgrade_record", autoResultMap = true)
|
||||
@KeySequence("iot_ota_upgrade_record_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
|
||||
@TableName(value = "iot_ota_task_record", autoResultMap = true)
|
||||
@KeySequence("iot_ota_task_record_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
|
||||
@Data
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class IotOtaUpgradeRecordDO extends BaseDO {
|
||||
public class IotOtaTaskRecordDO extends BaseDO {
|
||||
|
||||
@TableId
|
||||
private Long id;
|
||||
@@ -35,28 +36,16 @@ public class IotOtaUpgradeRecordDO extends BaseDO {
|
||||
/**
|
||||
* 任务编号
|
||||
*
|
||||
* 关联 {@link IotOtaUpgradeTaskDO#getId()}
|
||||
* 关联 {@link IotOtaTaskDO#getId()}
|
||||
*/
|
||||
private Long taskId;
|
||||
|
||||
/**
|
||||
* 产品标识
|
||||
*
|
||||
* 关联 {@link cn.iocoder.yudao.module.iot.dal.dataobject.product.IotProductDO#getId()}
|
||||
*/
|
||||
private String productKey;
|
||||
/**
|
||||
* 设备名称
|
||||
*
|
||||
* 关联 {@link cn.iocoder.yudao.module.iot.dal.dataobject.device.IotDeviceDO#getId()}
|
||||
*/
|
||||
private String deviceName;
|
||||
/**
|
||||
* 设备编号
|
||||
*
|
||||
* 关联 {@link cn.iocoder.yudao.module.iot.dal.dataobject.device.IotDeviceDO#getId()}
|
||||
* 关联 {@link IotDeviceDO#getId()}
|
||||
*/
|
||||
private String deviceId;
|
||||
private Long deviceId;
|
||||
/**
|
||||
* 来源的固件编号
|
||||
*
|
||||
@@ -67,7 +56,7 @@ public class IotOtaUpgradeRecordDO extends BaseDO {
|
||||
/**
|
||||
* 升级状态
|
||||
*
|
||||
* 关联 {@link cn.iocoder.yudao.module.iot.enums.ota.IotOtaUpgradeRecordStatusEnum}
|
||||
* 关联 {@link IotOtaTaskRecordStatusEnum}
|
||||
*/
|
||||
private Integer status;
|
||||
/**
|
||||
@@ -4,7 +4,7 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
|
||||
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
|
||||
import cn.iocoder.yudao.module.iot.controller.admin.ota.vo.upgrade.record.IotOtaUpgradeRecordPageReqVO;
|
||||
import cn.iocoder.yudao.module.iot.dal.dataobject.ota.IotOtaUpgradeRecordDO;
|
||||
import cn.iocoder.yudao.module.iot.dal.dataobject.ota.IotOtaTaskRecordDO;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
@@ -14,7 +14,7 @@ import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
@Mapper
|
||||
public interface IotOtaUpgradeRecordMapper extends BaseMapperX<IotOtaUpgradeRecordDO> {
|
||||
public interface IotOtaUpgradeRecordMapper extends BaseMapperX<IotOtaTaskRecordDO> {
|
||||
|
||||
// TODO @li:selectByFirmwareIdAndTaskIdAndDeviceId;让方法自解释
|
||||
/**
|
||||
@@ -25,12 +25,12 @@ public interface IotOtaUpgradeRecordMapper extends BaseMapperX<IotOtaUpgradeReco
|
||||
* @param deviceId 设备ID,可选参数,用于筛选设备ID匹配的记录
|
||||
* @return 返回符合条件的单个OTA升级记录,如果不存在则返回null
|
||||
*/
|
||||
default IotOtaUpgradeRecordDO selectByConditions(Long firmwareId, Long taskId, String deviceId) {
|
||||
default IotOtaTaskRecordDO selectByConditions(Long firmwareId, Long taskId, String deviceId) {
|
||||
// 使用LambdaQueryWrapperX构建查询条件,根据传入的参数动态添加查询条件
|
||||
return selectOne(new LambdaQueryWrapperX<IotOtaUpgradeRecordDO>()
|
||||
.eqIfPresent(IotOtaUpgradeRecordDO::getFirmwareId, firmwareId)
|
||||
.eqIfPresent(IotOtaUpgradeRecordDO::getTaskId, taskId)
|
||||
.eqIfPresent(IotOtaUpgradeRecordDO::getDeviceId, deviceId));
|
||||
return selectOne(new LambdaQueryWrapperX<IotOtaTaskRecordDO>()
|
||||
.eqIfPresent(IotOtaTaskRecordDO::getFirmwareId, firmwareId)
|
||||
.eqIfPresent(IotOtaTaskRecordDO::getTaskId, taskId)
|
||||
.eqIfPresent(IotOtaTaskRecordDO::getDeviceId, deviceId));
|
||||
}
|
||||
|
||||
// TODO @li:这个是不是 groupby status 就 ok 拉?
|
||||
@@ -80,12 +80,12 @@ public interface IotOtaUpgradeRecordMapper extends BaseMapperX<IotOtaUpgradeReco
|
||||
* @return 返回分页查询结果,包含符合条件的 OTA升级记录列表
|
||||
*/
|
||||
// TODO @li:selectPage 就 ok 拉。
|
||||
default PageResult<IotOtaUpgradeRecordDO> selectUpgradeRecordPage(IotOtaUpgradeRecordPageReqVO pageReqVO) {
|
||||
default PageResult<IotOtaTaskRecordDO> selectUpgradeRecordPage(IotOtaUpgradeRecordPageReqVO pageReqVO) {
|
||||
// TODO @li:这里的注释,可以去掉哈;然后下面的“如果”。。。也没必要注释
|
||||
// 使用LambdaQueryWrapperX构建查询条件,并根据请求参数动态添加查询条件
|
||||
return selectPage(pageReqVO, new LambdaQueryWrapperX<IotOtaUpgradeRecordDO>()
|
||||
.likeIfPresent(IotOtaUpgradeRecordDO::getDeviceName, pageReqVO.getDeviceName()) // 如果设备名称存在,则添加模糊查询条件
|
||||
.eqIfPresent(IotOtaUpgradeRecordDO::getTaskId, pageReqVO.getTaskId())); // 如果任务ID存在,则添加等值查询条件
|
||||
return selectPage(pageReqVO, new LambdaQueryWrapperX<IotOtaTaskRecordDO>()
|
||||
.likeIfPresent(IotOtaTaskRecordDO::getDeviceName, pageReqVO.getDeviceName()) // 如果设备名称存在,则添加模糊查询条件
|
||||
.eqIfPresent(IotOtaTaskRecordDO::getTaskId, pageReqVO.getTaskId())); // 如果任务ID存在,则添加等值查询条件
|
||||
}
|
||||
|
||||
// TODO @li:这里的注释,可以去掉哈
|
||||
@@ -101,59 +101,11 @@ public interface IotOtaUpgradeRecordMapper extends BaseMapperX<IotOtaUpgradeReco
|
||||
// TODO @li:改成 updateByTaskIdAndStatus(taskId, status, IotOtaUpgradeRecordDO) 更通用一些。
|
||||
default void updateUpgradeRecordStatusByTaskIdAndStatus(Integer setStatus, Long taskId, Integer whereStatus) {
|
||||
// 使用LambdaUpdateWrapper构建更新条件,将指定状态的记录更新为指定状态
|
||||
update(new LambdaUpdateWrapper<IotOtaUpgradeRecordDO>()
|
||||
.set(IotOtaUpgradeRecordDO::getStatus, setStatus)
|
||||
.eq(IotOtaUpgradeRecordDO::getTaskId, taskId)
|
||||
.eq(IotOtaUpgradeRecordDO::getStatus, whereStatus)
|
||||
update(new LambdaUpdateWrapper<IotOtaTaskRecordDO>()
|
||||
.set(IotOtaTaskRecordDO::getStatus, setStatus)
|
||||
.eq(IotOtaTaskRecordDO::getTaskId, taskId)
|
||||
.eq(IotOtaTaskRecordDO::getStatus, whereStatus)
|
||||
);
|
||||
}
|
||||
|
||||
// TODO @li:参考上面的建议,调整下这个方法
|
||||
/**
|
||||
* 根据状态查询符合条件的升级记录列表
|
||||
* <p>
|
||||
* 该函数使用LambdaQueryWrapperX构建查询条件,查询指定状态的升级记录。
|
||||
*
|
||||
* @param state 升级记录的状态,用于筛选符合条件的记录
|
||||
* @return 返回符合指定状态的升级记录列表,类型为List<IotOtaUpgradeRecordDO>
|
||||
*/
|
||||
default List<IotOtaUpgradeRecordDO> selectUpgradeRecordListByState(Integer state) {
|
||||
// 使用LambdaQueryWrapperX构建查询条件,根据状态查询符合条件的升级记录
|
||||
return selectList(new LambdaQueryWrapperX<IotOtaUpgradeRecordDO>()
|
||||
.eq(IotOtaUpgradeRecordDO::getStatus, state));
|
||||
}
|
||||
|
||||
// TODO @li:参考上面的建议,调整下这个方法
|
||||
/**
|
||||
* 更新升级记录状态
|
||||
* <p>
|
||||
* 该函数用于批量更新指定ID列表中的升级记录状态。通过传入的ID列表和状态值,使用LambdaUpdateWrapper构建更新条件,
|
||||
* 并执行更新操作。
|
||||
*
|
||||
* @param ids 需要更新的升级记录ID列表,类型为List<Long>。传入的ID列表中的记录将被更新。
|
||||
* @param status 要更新的状态值,类型为Integer。该值将被设置到符合条件的升级记录中。
|
||||
*/
|
||||
default void updateUpgradeRecordStatus(List<Long> ids, Integer status) {
|
||||
// 使用LambdaUpdateWrapper构建更新条件,设置状态字段,并根据ID列表进行筛选
|
||||
update(new LambdaUpdateWrapper<IotOtaUpgradeRecordDO>()
|
||||
.set(IotOtaUpgradeRecordDO::getStatus, status)
|
||||
.in(IotOtaUpgradeRecordDO::getId, ids)
|
||||
);
|
||||
}
|
||||
|
||||
// TODO @li:参考上面的建议,调整下这个方法
|
||||
/**
|
||||
* 根据任务ID查询升级记录列表
|
||||
* <p>
|
||||
* 该函数通过任务ID查询符合条件的升级记录,并返回查询结果列表。
|
||||
*
|
||||
* @param taskId 任务ID,用于筛选升级记录
|
||||
* @return 返回符合条件的升级记录列表,若未找到则返回空列表
|
||||
*/
|
||||
default List<IotOtaUpgradeRecordDO> selectUpgradeRecordListByTaskId(Long taskId) {
|
||||
// 使用LambdaQueryWrapperX构建查询条件,根据任务ID查询符合条件的升级记录
|
||||
return selectList(new LambdaQueryWrapperX<IotOtaUpgradeRecordDO>()
|
||||
.eq(IotOtaUpgradeRecordDO::getTaskId, taskId));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -4,7 +4,7 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
|
||||
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
|
||||
import cn.iocoder.yudao.module.iot.controller.admin.ota.vo.upgrade.task.IotOtaUpgradeTaskPageReqVO;
|
||||
import cn.iocoder.yudao.module.iot.dal.dataobject.ota.IotOtaUpgradeTaskDO;
|
||||
import cn.iocoder.yudao.module.iot.dal.dataobject.ota.IotOtaTaskDO;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
|
||||
import java.util.List;
|
||||
@@ -15,7 +15,7 @@ import java.util.List;
|
||||
* @author Shelly
|
||||
*/
|
||||
@Mapper
|
||||
public interface IotOtaUpgradeTaskMapper extends BaseMapperX<IotOtaUpgradeTaskDO> {
|
||||
public interface IotOtaUpgradeTaskMapper extends BaseMapperX<IotOtaTaskDO> {
|
||||
|
||||
/**
|
||||
* 根据固件ID和任务名称查询升级任务列表。
|
||||
@@ -24,10 +24,10 @@ public interface IotOtaUpgradeTaskMapper extends BaseMapperX<IotOtaUpgradeTaskDO
|
||||
* @param name 任务名称,用于筛选升级任务
|
||||
* @return 符合条件的升级任务列表
|
||||
*/
|
||||
default List<IotOtaUpgradeTaskDO> selectByFirmwareIdAndName(Long firmwareId, String name) {
|
||||
return selectList(new LambdaQueryWrapperX<IotOtaUpgradeTaskDO>()
|
||||
.eqIfPresent(IotOtaUpgradeTaskDO::getFirmwareId, firmwareId)
|
||||
.eqIfPresent(IotOtaUpgradeTaskDO::getName, name));
|
||||
default List<IotOtaTaskDO> selectByFirmwareIdAndName(Long firmwareId, String name) {
|
||||
return selectList(new LambdaQueryWrapperX<IotOtaTaskDO>()
|
||||
.eqIfPresent(IotOtaTaskDO::getFirmwareId, firmwareId)
|
||||
.eqIfPresent(IotOtaTaskDO::getName, name));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -36,10 +36,10 @@ public interface IotOtaUpgradeTaskMapper extends BaseMapperX<IotOtaUpgradeTaskDO
|
||||
* @param pageReqVO 分页查询请求对象,包含分页参数和筛选条件
|
||||
* @return 分页结果,包含符合条件的升级任务列表
|
||||
*/
|
||||
default PageResult<IotOtaUpgradeTaskDO> selectUpgradeTaskPage(IotOtaUpgradeTaskPageReqVO pageReqVO) {
|
||||
return selectPage(pageReqVO, new LambdaQueryWrapperX<IotOtaUpgradeTaskDO>()
|
||||
.eqIfPresent(IotOtaUpgradeTaskDO::getFirmwareId, pageReqVO.getFirmwareId())
|
||||
.likeIfPresent(IotOtaUpgradeTaskDO::getName, pageReqVO.getName()));
|
||||
default PageResult<IotOtaTaskDO> selectUpgradeTaskPage(IotOtaUpgradeTaskPageReqVO pageReqVO) {
|
||||
return selectPage(pageReqVO, new LambdaQueryWrapperX<IotOtaTaskDO>()
|
||||
.eqIfPresent(IotOtaTaskDO::getFirmwareId, pageReqVO.getFirmwareId())
|
||||
.likeIfPresent(IotOtaTaskDO::getName, pageReqVO.getName()));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -50,8 +50,8 @@ public interface IotOtaUpgradeTaskMapper extends BaseMapperX<IotOtaUpgradeTaskDO
|
||||
* @param status 任务状态,用于筛选升级任务的状态值
|
||||
* @return 返回符合条件的升级任务列表,列表中的每个元素为 IotOtaUpgradeTaskDO 对象
|
||||
*/
|
||||
default List<IotOtaUpgradeTaskDO> selectUpgradeTaskByState(Integer status) {
|
||||
return selectList(IotOtaUpgradeTaskDO::getStatus, status);
|
||||
default List<IotOtaTaskDO> selectUpgradeTaskByState(Integer status) {
|
||||
return selectList(IotOtaTaskDO::getStatus, status);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -7,18 +7,19 @@ import lombok.RequiredArgsConstructor;
|
||||
import java.util.Arrays;
|
||||
|
||||
/**
|
||||
* IoT OTA 升级任务的范围枚举
|
||||
* IoT OTA 升级任务的设备范围枚举
|
||||
*
|
||||
* @author haohao
|
||||
*/
|
||||
@RequiredArgsConstructor
|
||||
@Getter
|
||||
public enum IotOtaUpgradeTaskScopeEnum implements ArrayValuable<Integer> {
|
||||
public enum IotOtaTaskDeviceScopeEnum implements ArrayValuable<Integer> {
|
||||
|
||||
ALL(1), // 全部设备:只包括当前产品下的设备,不包括未来创建的设备
|
||||
SELECT(2); // 指定设备
|
||||
|
||||
public static final Integer[] ARRAYS = Arrays.stream(values()).map(IotOtaUpgradeTaskScopeEnum::getScope).toArray(Integer[]::new);
|
||||
public static final Integer[] ARRAYS = Arrays.stream(values())
|
||||
.map(IotOtaTaskDeviceScopeEnum::getScope).toArray(Integer[]::new);
|
||||
|
||||
/**
|
||||
* 范围
|
||||
@@ -8,25 +8,26 @@ import lombok.RequiredArgsConstructor;
|
||||
import java.util.Arrays;
|
||||
|
||||
/**
|
||||
* IoT OTA 升级记录的范围枚举
|
||||
* IoT OTA 升级任务记录的状态枚举
|
||||
*
|
||||
* @author haohao
|
||||
* @author 芋道源码
|
||||
*/
|
||||
@RequiredArgsConstructor
|
||||
@Getter
|
||||
public enum IotOtaUpgradeRecordStatusEnum implements ArrayValuable<Integer> {
|
||||
public enum IotOtaTaskRecordStatusEnum implements ArrayValuable<Integer> {
|
||||
|
||||
PENDING(0), // 待推送
|
||||
PUSHED(10), // 已推送
|
||||
UPGRADING(20), // 升级中
|
||||
SUCCESS(30), // 升级成功
|
||||
FAILURE(40), // 升级失败
|
||||
CANCELED(50),; // 已取消
|
||||
CANCELED(50),; // 升级取消
|
||||
|
||||
public static final Integer[] ARRAYS = Arrays.stream(values()).map(IotOtaUpgradeRecordStatusEnum::getStatus).toArray(Integer[]::new);
|
||||
public static final Integer[] ARRAYS = Arrays.stream(values())
|
||||
.map(IotOtaTaskRecordStatusEnum::getStatus).toArray(Integer[]::new);
|
||||
|
||||
/**
|
||||
* 范围
|
||||
* 状态
|
||||
*/
|
||||
private final Integer status;
|
||||
|
||||
@@ -0,0 +1,35 @@
|
||||
package cn.iocoder.yudao.module.iot.enums.ota;
|
||||
|
||||
import cn.iocoder.yudao.framework.common.core.ArrayValuable;
|
||||
import lombok.Getter;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
|
||||
import java.util.Arrays;
|
||||
|
||||
/**
|
||||
* IoT OTA 升级任务的状态
|
||||
*
|
||||
* @author 芋道源码
|
||||
*/
|
||||
@RequiredArgsConstructor
|
||||
@Getter
|
||||
public enum IotOtaTaskStatusEnum implements ArrayValuable<Integer> {
|
||||
|
||||
IN_PROGRESS(10), // 进行中(升级中)
|
||||
COMPLETED(20), // 已完成(包括全部成功、部分成功)
|
||||
CANCELED(30),; // 已取消(一般是主动取消任务)
|
||||
|
||||
public static final Integer[] ARRAYS = Arrays.stream(values())
|
||||
.map(IotOtaTaskStatusEnum::getStatus).toArray(Integer[]::new);
|
||||
|
||||
/**
|
||||
* 状态
|
||||
*/
|
||||
private final Integer status;
|
||||
|
||||
@Override
|
||||
public Integer[] array() {
|
||||
return ARRAYS;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,35 +0,0 @@
|
||||
package cn.iocoder.yudao.module.iot.enums.ota;
|
||||
|
||||
import cn.iocoder.yudao.framework.common.core.ArrayValuable;
|
||||
import lombok.Getter;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
|
||||
import java.util.Arrays;
|
||||
|
||||
/**
|
||||
* IoT OTA 升级任务的范围枚举
|
||||
*
|
||||
* @author haohao
|
||||
*/
|
||||
@RequiredArgsConstructor
|
||||
@Getter
|
||||
public enum IotOtaUpgradeTaskStatusEnum implements ArrayValuable<Integer> {
|
||||
|
||||
IN_PROGRESS(10), // 进行中:升级中
|
||||
COMPLETED(20), // 已完成:已结束,全部升级完成
|
||||
INCOMPLETE(21), // 未完成:已结束,部分升级完成
|
||||
CANCELED(30),; // 已取消:一般是主动取消任务
|
||||
|
||||
public static final Integer[] ARRAYS = Arrays.stream(values()).map(IotOtaUpgradeTaskStatusEnum::getStatus).toArray(Integer[]::new);
|
||||
|
||||
/**
|
||||
* 范围
|
||||
*/
|
||||
private final Integer status;
|
||||
|
||||
@Override
|
||||
public Integer[] array() {
|
||||
return ARRAYS;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -2,7 +2,7 @@ package cn.iocoder.yudao.module.iot.service.ota;
|
||||
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||
import cn.iocoder.yudao.module.iot.controller.admin.ota.vo.upgrade.record.IotOtaUpgradeRecordPageReqVO;
|
||||
import cn.iocoder.yudao.module.iot.dal.dataobject.ota.IotOtaUpgradeRecordDO;
|
||||
import cn.iocoder.yudao.module.iot.dal.dataobject.ota.IotOtaTaskRecordDO;
|
||||
import jakarta.validation.Valid;
|
||||
|
||||
import java.util.List;
|
||||
@@ -39,20 +39,13 @@ public interface IotOtaUpgradeRecordService {
|
||||
*/
|
||||
Map<Integer, Long> getOtaUpgradeRecordStatistics(Long firmwareId);
|
||||
|
||||
/**
|
||||
* 重试指定的 OTA 升级记录
|
||||
*
|
||||
* @param id 需要重试的升级记录的ID。
|
||||
*/
|
||||
void retryUpgradeRecord(Long id);
|
||||
|
||||
/**
|
||||
* 获取指定 ID 的 OTA 升级记录的详细信息。
|
||||
*
|
||||
* @param id 需要查询的升级记录的ID。
|
||||
* @return 返回包含升级记录详细信息的响应对象。
|
||||
*/
|
||||
IotOtaUpgradeRecordDO getUpgradeRecord(Long id);
|
||||
IotOtaTaskRecordDO getUpgradeRecord(Long id);
|
||||
|
||||
/**
|
||||
* 分页查询 OTA 升级记录。
|
||||
@@ -60,7 +53,7 @@ public interface IotOtaUpgradeRecordService {
|
||||
* @param pageReqVO 包含分页查询条件的请求对象,必须经过验证。
|
||||
* @return 返回包含分页查询结果的响应对象。
|
||||
*/
|
||||
PageResult<IotOtaUpgradeRecordDO> getUpgradeRecordPage(@Valid IotOtaUpgradeRecordPageReqVO pageReqVO);
|
||||
PageResult<IotOtaTaskRecordDO> getUpgradeRecordPage(@Valid IotOtaUpgradeRecordPageReqVO pageReqVO);
|
||||
|
||||
/**
|
||||
* 根据任务 ID 取消升级记录
|
||||
@@ -72,33 +65,4 @@ public interface IotOtaUpgradeRecordService {
|
||||
*/
|
||||
void cancelUpgradeRecordByTaskId(Long taskId);
|
||||
|
||||
// TODO @li:不要的方法,可以删除下哈。
|
||||
/**
|
||||
* 根据升级状态获取升级记录列表
|
||||
*
|
||||
* @param state 升级状态,用于筛选符合条件的升级记录
|
||||
* @return 返回符合指定状态的升级记录列表,列表中的元素为 {@link IotOtaUpgradeRecordDO} 对象
|
||||
*/
|
||||
List<IotOtaUpgradeRecordDO> getUpgradeRecordListByState(Integer state);
|
||||
|
||||
/**
|
||||
* 更新升级记录的状态。
|
||||
* <p>
|
||||
* 该函数用于批量更新指定升级记录的状态。通过传入的ID列表和状态值,将对应的升级记录的状态更新为指定的值。
|
||||
*
|
||||
* @param ids 需要更新状态的升级记录的ID列表。列表中的每个元素代表一个升级记录的ID。
|
||||
* @param status 要更新的状态值。该值应为有效的状态标识符,通常为整数类型。
|
||||
*/
|
||||
void updateUpgradeRecordStatus(List<Long> ids, Integer status);
|
||||
|
||||
/**
|
||||
* 根据任务ID获取升级记录列表
|
||||
* <p>
|
||||
* 该函数通过给定的任务ID,查询并返回与该任务相关的所有升级记录。
|
||||
*
|
||||
* @param taskId 任务ID,用于指定需要查询的任务
|
||||
* @return 返回一个包含升级记录的列表,列表中的每个元素为IotOtaUpgradeRecordDO对象
|
||||
*/
|
||||
List<IotOtaUpgradeRecordDO> getUpgradeRecordListByTaskId(Long taskId);
|
||||
|
||||
}
|
||||
|
||||
@@ -6,14 +6,13 @@ import cn.iocoder.yudao.framework.common.util.object.ObjectUtils;
|
||||
import cn.iocoder.yudao.module.iot.controller.admin.ota.vo.upgrade.record.IotOtaUpgradeRecordPageReqVO;
|
||||
import cn.iocoder.yudao.module.iot.dal.dataobject.device.IotDeviceDO;
|
||||
import cn.iocoder.yudao.module.iot.dal.dataobject.ota.IotOtaFirmwareDO;
|
||||
import cn.iocoder.yudao.module.iot.dal.dataobject.ota.IotOtaUpgradeRecordDO;
|
||||
import cn.iocoder.yudao.module.iot.dal.dataobject.ota.IotOtaUpgradeTaskDO;
|
||||
import cn.iocoder.yudao.module.iot.dal.dataobject.ota.IotOtaTaskRecordDO;
|
||||
import cn.iocoder.yudao.module.iot.dal.dataobject.ota.IotOtaTaskDO;
|
||||
import cn.iocoder.yudao.module.iot.dal.mysql.ota.IotOtaUpgradeRecordMapper;
|
||||
import cn.iocoder.yudao.module.iot.enums.ota.IotOtaUpgradeRecordStatusEnum;
|
||||
import cn.iocoder.yudao.module.iot.enums.ota.IotOtaTaskRecordStatusEnum;
|
||||
import cn.iocoder.yudao.module.iot.service.device.IotDeviceService;
|
||||
import jakarta.annotation.Resource;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.context.annotation.Lazy;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
@@ -47,18 +46,18 @@ public class IotOtaUpgradeRecordServiceImpl implements IotOtaUpgradeRecordServic
|
||||
deviceIds.forEach(deviceId -> validateUpgradeRecordDuplicate(firmwareId, upgradeTaskId, String.valueOf(deviceId)));
|
||||
|
||||
// 2. 初始化OTA升级记录列表信息
|
||||
IotOtaUpgradeTaskDO upgradeTask = upgradeTaskService.getUpgradeTask(upgradeTaskId);
|
||||
IotOtaTaskDO upgradeTask = upgradeTaskService.getUpgradeTask(upgradeTaskId);
|
||||
IotOtaFirmwareDO firmware = firmwareService.getOtaFirmware(firmwareId);
|
||||
List<IotDeviceDO> deviceList = deviceService.getDeviceListByIdList(deviceIds);
|
||||
List<IotOtaUpgradeRecordDO> upgradeRecordList = deviceList.stream().map(device -> {
|
||||
IotOtaUpgradeRecordDO upgradeRecord = new IotOtaUpgradeRecordDO();
|
||||
List<IotOtaTaskRecordDO> upgradeRecordList = deviceList.stream().map(device -> {
|
||||
IotOtaTaskRecordDO upgradeRecord = new IotOtaTaskRecordDO();
|
||||
upgradeRecord.setFirmwareId(firmware.getId());
|
||||
upgradeRecord.setTaskId(upgradeTask.getId());
|
||||
upgradeRecord.setProductKey(device.getProductKey());
|
||||
upgradeRecord.setDeviceName(device.getDeviceName());
|
||||
upgradeRecord.setDeviceId(Convert.toStr(device.getId()));
|
||||
upgradeRecord.setFromFirmwareId(Convert.toLong(device.getFirmwareId()));
|
||||
upgradeRecord.setStatus(IotOtaUpgradeRecordStatusEnum.PENDING.getStatus());
|
||||
upgradeRecord.setStatus(IotOtaTaskRecordStatusEnum.PENDING.getStatus());
|
||||
upgradeRecord.setProgress(0);
|
||||
return upgradeRecord;
|
||||
}).toList();
|
||||
@@ -88,14 +87,6 @@ public class IotOtaUpgradeRecordServiceImpl implements IotOtaUpgradeRecordServic
|
||||
entry -> Convert.toLong(entry.getValue())));
|
||||
}
|
||||
|
||||
// TODO @li:1)方法注释,简单写;2)父类写了注释,子类就不用写了。。。
|
||||
/**
|
||||
* 获取指定固件ID的OTA升级记录统计信息。
|
||||
* 该方法通过查询数据库,统计不同状态的OTA升级记录数量,并返回一个包含各状态数量的映射。
|
||||
*
|
||||
* @param firmwareId 固件ID,用于指定需要统计的固件升级记录。
|
||||
* @return 返回一个Map,其中键为升级记录状态(如PENDING、PUSHED等),值为对应状态的记录数量。
|
||||
*/
|
||||
@Override
|
||||
@Transactional
|
||||
public Map<Integer, Long> getOtaUpgradeRecordStatistics(Long firmwareId) {
|
||||
@@ -109,26 +100,12 @@ public class IotOtaUpgradeRecordServiceImpl implements IotOtaUpgradeRecordServic
|
||||
}
|
||||
|
||||
@Override
|
||||
public void retryUpgradeRecord(Long id) {
|
||||
// 1.1 校验升级记录信息是否存在
|
||||
IotOtaUpgradeRecordDO upgradeRecord = validateUpgradeRecordExists(id);
|
||||
// 1.2 校验升级记录是否可以重新升级
|
||||
validateUpgradeRecordCanRetry(upgradeRecord);
|
||||
|
||||
// 2. 将一些数据重置,这样定时任务轮询就可以重启任务
|
||||
// TODO @li:更新的时候,wherestatus;
|
||||
upgradeRecordMapper.updateById(new IotOtaUpgradeRecordDO()
|
||||
.setId(upgradeRecord.getId()).setProgress(0)
|
||||
.setStatus(IotOtaUpgradeRecordStatusEnum.PENDING.getStatus()));
|
||||
}
|
||||
|
||||
@Override
|
||||
public IotOtaUpgradeRecordDO getUpgradeRecord(Long id) {
|
||||
public IotOtaTaskRecordDO getUpgradeRecord(Long id) {
|
||||
return upgradeRecordMapper.selectById(id);
|
||||
}
|
||||
|
||||
@Override
|
||||
public PageResult<IotOtaUpgradeRecordDO> getUpgradeRecordPage(IotOtaUpgradeRecordPageReqVO pageReqVO) {
|
||||
public PageResult<IotOtaTaskRecordDO> getUpgradeRecordPage(IotOtaUpgradeRecordPageReqVO pageReqVO) {
|
||||
return upgradeRecordMapper.selectUpgradeRecordPage(pageReqVO);
|
||||
}
|
||||
|
||||
@@ -136,23 +113,8 @@ public class IotOtaUpgradeRecordServiceImpl implements IotOtaUpgradeRecordServic
|
||||
public void cancelUpgradeRecordByTaskId(Long taskId) {
|
||||
// 暂定只有待推送的升级记录可以取消 TODO @芋艿:可以看看阿里云,哪些可以取消
|
||||
upgradeRecordMapper.updateUpgradeRecordStatusByTaskIdAndStatus(
|
||||
IotOtaUpgradeRecordStatusEnum.CANCELED.getStatus(), taskId,
|
||||
IotOtaUpgradeRecordStatusEnum.PENDING.getStatus());
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<IotOtaUpgradeRecordDO> getUpgradeRecordListByState(Integer state) {
|
||||
return upgradeRecordMapper.selectUpgradeRecordListByState(state);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateUpgradeRecordStatus(List<Long> ids, Integer status) {
|
||||
upgradeRecordMapper.updateUpgradeRecordStatus(ids, status);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<IotOtaUpgradeRecordDO> getUpgradeRecordListByTaskId(Long taskId) {
|
||||
return upgradeRecordMapper.selectUpgradeRecordListByTaskId(taskId);
|
||||
IotOtaTaskRecordStatusEnum.CANCELED.getStatus(), taskId,
|
||||
IotOtaTaskRecordStatusEnum.PENDING.getStatus());
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -163,9 +125,9 @@ public class IotOtaUpgradeRecordServiceImpl implements IotOtaUpgradeRecordServic
|
||||
* @param id 升级记录的唯一标识符,类型为Long。
|
||||
* @throws cn.iocoder.yudao.framework.common.exception.ServiceException,则抛出异常,异常类型为OTA_UPGRADE_RECORD_NOT_EXISTS。
|
||||
*/
|
||||
private IotOtaUpgradeRecordDO validateUpgradeRecordExists(Long id) {
|
||||
private IotOtaTaskRecordDO validateUpgradeRecordExists(Long id) {
|
||||
// 根据ID查询升级记录
|
||||
IotOtaUpgradeRecordDO upgradeRecord = upgradeRecordMapper.selectById(id);
|
||||
IotOtaTaskRecordDO upgradeRecord = upgradeRecordMapper.selectById(id);
|
||||
// 如果查询结果为空,抛出异常
|
||||
if (upgradeRecord == null) {
|
||||
throw exception(OTA_UPGRADE_RECORD_NOT_EXISTS);
|
||||
@@ -185,11 +147,11 @@ public class IotOtaUpgradeRecordServiceImpl implements IotOtaUpgradeRecordServic
|
||||
* @param deviceId 设备ID,用于标识特定的设备
|
||||
*/
|
||||
private void validateUpgradeRecordDuplicate(Long firmwareId, Long taskId, String deviceId) {
|
||||
IotOtaUpgradeRecordDO upgradeRecord = upgradeRecordMapper.selectByConditions(firmwareId, taskId, deviceId);
|
||||
IotOtaTaskRecordDO upgradeRecord = upgradeRecordMapper.selectByConditions(firmwareId, taskId, deviceId);
|
||||
if (upgradeRecord == null) {
|
||||
return;
|
||||
}
|
||||
if (!Objects.equals(upgradeRecord.getStatus(), IotOtaUpgradeRecordStatusEnum.CANCELED.getStatus())) {
|
||||
if (!Objects.equals(upgradeRecord.getStatus(), IotOtaTaskRecordStatusEnum.CANCELED.getStatus())) {
|
||||
throw exception(OTA_UPGRADE_RECORD_DUPLICATE);
|
||||
}
|
||||
}
|
||||
@@ -205,11 +167,11 @@ public class IotOtaUpgradeRecordServiceImpl implements IotOtaUpgradeRecordServic
|
||||
* @throws cn.iocoder.yudao.framework.common.exception.ServiceException,则抛出 OTA_UPGRADE_RECORD_CANNOT_RETRY 异常
|
||||
*/
|
||||
// TODO @li:这种一次性的方法(不复用的),其实一步一定要抽成小方法;
|
||||
private void validateUpgradeRecordCanRetry(IotOtaUpgradeRecordDO upgradeRecord) {
|
||||
private void validateUpgradeRecordCanRetry(IotOtaTaskRecordDO upgradeRecord) {
|
||||
if (ObjectUtils.equalsAny(upgradeRecord.getStatus(),
|
||||
IotOtaUpgradeRecordStatusEnum.PENDING.getStatus(),
|
||||
IotOtaUpgradeRecordStatusEnum.PUSHED.getStatus(),
|
||||
IotOtaUpgradeRecordStatusEnum.UPGRADING.getStatus())) {
|
||||
IotOtaTaskRecordStatusEnum.PENDING.getStatus(),
|
||||
IotOtaTaskRecordStatusEnum.PUSHED.getStatus(),
|
||||
IotOtaTaskRecordStatusEnum.UPGRADING.getStatus())) {
|
||||
throw exception(OTA_UPGRADE_RECORD_CANNOT_RETRY);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,7 +3,7 @@ package cn.iocoder.yudao.module.iot.service.ota;
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||
import cn.iocoder.yudao.module.iot.controller.admin.ota.vo.upgrade.task.IotOtaUpgradeTaskPageReqVO;
|
||||
import cn.iocoder.yudao.module.iot.controller.admin.ota.vo.upgrade.task.IotOtaUpgradeTaskSaveReqVO;
|
||||
import cn.iocoder.yudao.module.iot.dal.dataobject.ota.IotOtaUpgradeTaskDO;
|
||||
import cn.iocoder.yudao.module.iot.dal.dataobject.ota.IotOtaTaskDO;
|
||||
import jakarta.validation.Valid;
|
||||
|
||||
import java.util.List;
|
||||
@@ -36,7 +36,7 @@ public interface IotOtaUpgradeTaskService {
|
||||
* @param id OTA升级任务的ID
|
||||
* @return OTA升级任务的详细信息对象
|
||||
*/
|
||||
IotOtaUpgradeTaskDO getUpgradeTask(Long id);
|
||||
IotOtaTaskDO getUpgradeTask(Long id);
|
||||
|
||||
/**
|
||||
* 分页查询OTA升级任务
|
||||
@@ -44,7 +44,7 @@ public interface IotOtaUpgradeTaskService {
|
||||
* @param pageReqVO OTA升级任务的分页查询请求对象,包含查询条件和分页信息
|
||||
* @return 分页查询结果,包含OTA升级任务列表和总记录数
|
||||
*/
|
||||
PageResult<IotOtaUpgradeTaskDO> getUpgradeTaskPage(@Valid IotOtaUpgradeTaskPageReqVO pageReqVO);
|
||||
PageResult<IotOtaTaskDO> getUpgradeTaskPage(@Valid IotOtaUpgradeTaskPageReqVO pageReqVO);
|
||||
|
||||
/**
|
||||
* 根据任务状态获取升级任务列表
|
||||
@@ -52,7 +52,7 @@ public interface IotOtaUpgradeTaskService {
|
||||
* @param state 任务状态,用于筛选符合条件的升级任务
|
||||
* @return 返回符合指定状态的升级任务列表,列表中的元素为 IotOtaUpgradeTaskDO 对象
|
||||
*/
|
||||
List<IotOtaUpgradeTaskDO> getUpgradeTaskByState(Integer state);
|
||||
List<IotOtaTaskDO> getUpgradeTaskByState(Integer state);
|
||||
|
||||
/**
|
||||
* 更新升级任务的状态。
|
||||
|
||||
@@ -8,10 +8,10 @@ import cn.iocoder.yudao.module.iot.controller.admin.ota.vo.upgrade.task.IotOtaUp
|
||||
import cn.iocoder.yudao.module.iot.controller.admin.ota.vo.upgrade.task.IotOtaUpgradeTaskSaveReqVO;
|
||||
import cn.iocoder.yudao.module.iot.dal.dataobject.device.IotDeviceDO;
|
||||
import cn.iocoder.yudao.module.iot.dal.dataobject.ota.IotOtaFirmwareDO;
|
||||
import cn.iocoder.yudao.module.iot.dal.dataobject.ota.IotOtaUpgradeTaskDO;
|
||||
import cn.iocoder.yudao.module.iot.dal.dataobject.ota.IotOtaTaskDO;
|
||||
import cn.iocoder.yudao.module.iot.dal.mysql.ota.IotOtaUpgradeTaskMapper;
|
||||
import cn.iocoder.yudao.module.iot.enums.ota.IotOtaUpgradeTaskScopeEnum;
|
||||
import cn.iocoder.yudao.module.iot.enums.ota.IotOtaUpgradeTaskStatusEnum;
|
||||
import cn.iocoder.yudao.module.iot.enums.ota.IotOtaTaskDeviceScopeEnum;
|
||||
import cn.iocoder.yudao.module.iot.enums.ota.IotOtaTaskStatusEnum;
|
||||
import cn.iocoder.yudao.module.iot.service.device.IotDeviceService;
|
||||
import jakarta.annotation.Resource;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
@@ -61,7 +61,7 @@ public class IotOtaUpgradeTaskServiceImpl implements IotOtaUpgradeTaskService {
|
||||
validateScopeAndDevice(createReqVO.getScope(), createReqVO.getDeviceIds(), firmware.getProductId());
|
||||
|
||||
// 2. 保存 OTA 升级任务信息到数据库
|
||||
IotOtaUpgradeTaskDO upgradeTask = initOtaUpgradeTask(createReqVO, firmware.getProductId());
|
||||
IotOtaTaskDO upgradeTask = initOtaUpgradeTask(createReqVO, firmware.getProductId());
|
||||
upgradeTaskMapper.insert(upgradeTask);
|
||||
|
||||
// 3. 生成设备升级记录信息并存储,等待定时任务轮询
|
||||
@@ -73,16 +73,16 @@ public class IotOtaUpgradeTaskServiceImpl implements IotOtaUpgradeTaskService {
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void cancelUpgradeTask(Long id) {
|
||||
// 1.1 校验升级任务是否存在
|
||||
IotOtaUpgradeTaskDO upgradeTask = validateUpgradeTaskExists(id);
|
||||
IotOtaTaskDO upgradeTask = validateUpgradeTaskExists(id);
|
||||
// 1.2 校验升级任务是否可以取消
|
||||
// TODO @li:ObjUtil notequals
|
||||
if (!Objects.equals(upgradeTask.getStatus(), IotOtaUpgradeTaskStatusEnum.IN_PROGRESS.getStatus())) {
|
||||
if (!Objects.equals(upgradeTask.getStatus(), IotOtaTaskStatusEnum.IN_PROGRESS.getStatus())) {
|
||||
throw exception(OTA_UPGRADE_TASK_CANNOT_CANCEL);
|
||||
}
|
||||
|
||||
// 2. 更新 OTA 升级任务状态为已取消
|
||||
upgradeTaskMapper.updateById(IotOtaUpgradeTaskDO.builder()
|
||||
.id(id).status(IotOtaUpgradeTaskStatusEnum.CANCELED.getStatus())
|
||||
upgradeTaskMapper.updateById(IotOtaTaskDO.builder()
|
||||
.id(id).status(IotOtaTaskStatusEnum.CANCELED.getStatus())
|
||||
.build());
|
||||
|
||||
// 3. 更新 OTA 升级记录状态为已取消
|
||||
@@ -90,30 +90,30 @@ public class IotOtaUpgradeTaskServiceImpl implements IotOtaUpgradeTaskService {
|
||||
}
|
||||
|
||||
@Override
|
||||
public IotOtaUpgradeTaskDO getUpgradeTask(Long id) {
|
||||
public IotOtaTaskDO getUpgradeTask(Long id) {
|
||||
return upgradeTaskMapper.selectById(id);
|
||||
}
|
||||
|
||||
@Override
|
||||
public PageResult<IotOtaUpgradeTaskDO> getUpgradeTaskPage(IotOtaUpgradeTaskPageReqVO pageReqVO) {
|
||||
public PageResult<IotOtaTaskDO> getUpgradeTaskPage(IotOtaUpgradeTaskPageReqVO pageReqVO) {
|
||||
return upgradeTaskMapper.selectUpgradeTaskPage(pageReqVO);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<IotOtaUpgradeTaskDO> getUpgradeTaskByState(Integer state) {
|
||||
public List<IotOtaTaskDO> getUpgradeTaskByState(Integer state) {
|
||||
return upgradeTaskMapper.selectUpgradeTaskByState(state);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateUpgradeTaskStatus(Long id, Integer status) {
|
||||
upgradeTaskMapper.updateById(IotOtaUpgradeTaskDO.builder().id(id).status(status).build());
|
||||
upgradeTaskMapper.updateById(IotOtaTaskDO.builder().id(id).status(status).build());
|
||||
}
|
||||
|
||||
/**
|
||||
* 校验固件升级任务是否重复
|
||||
*/
|
||||
private void validateFirmwareTaskDuplicate(Long firmwareId, String taskName) {
|
||||
List<IotOtaUpgradeTaskDO> upgradeTaskList = upgradeTaskMapper.selectByFirmwareIdAndName(firmwareId, taskName);
|
||||
List<IotOtaTaskDO> upgradeTaskList = upgradeTaskMapper.selectByFirmwareIdAndName(firmwareId, taskName);
|
||||
if (CollUtil.isNotEmpty(upgradeTaskList)) {
|
||||
throw exception(OTA_UPGRADE_TASK_NAME_DUPLICATE);
|
||||
}
|
||||
@@ -128,14 +128,14 @@ public class IotOtaUpgradeTaskServiceImpl implements IotOtaUpgradeTaskService {
|
||||
* @throws cn.iocoder.yudao.framework.common.exception.ServiceException,抛出相应的异常
|
||||
*/
|
||||
private void validateScopeAndDevice(Integer scope, List<Long> deviceIds, Long productId) {
|
||||
if (Objects.equals(scope, IotOtaUpgradeTaskScopeEnum.SELECT.getScope())) {
|
||||
if (Objects.equals(scope, IotOtaTaskDeviceScopeEnum.SELECT.getScope())) {
|
||||
if (CollUtil.isEmpty(deviceIds)) {
|
||||
throw exception(OTA_UPGRADE_TASK_DEVICE_IDS_EMPTY);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
if (Objects.equals(scope, IotOtaUpgradeTaskScopeEnum.ALL.getScope())) {
|
||||
|
||||
if (Objects.equals(scope, IotOtaTaskDeviceScopeEnum.ALL.getScope())) {
|
||||
List<IotDeviceDO> deviceList = deviceService.getDeviceListByProductId(productId);
|
||||
if (CollUtil.isEmpty(deviceList)) {
|
||||
throw exception(OTA_UPGRADE_TASK_DEVICE_LIST_EMPTY);
|
||||
@@ -146,8 +146,8 @@ public class IotOtaUpgradeTaskServiceImpl implements IotOtaUpgradeTaskService {
|
||||
/**
|
||||
* 验证升级任务是否存在
|
||||
*/
|
||||
private IotOtaUpgradeTaskDO validateUpgradeTaskExists(Long id) {
|
||||
IotOtaUpgradeTaskDO upgradeTask = upgradeTaskMapper.selectById(id);
|
||||
private IotOtaTaskDO validateUpgradeTaskExists(Long id) {
|
||||
IotOtaTaskDO upgradeTask = upgradeTaskMapper.selectById(id);
|
||||
if (Objects.isNull(upgradeTask)) {
|
||||
throw exception(OTA_UPGRADE_TASK_NOT_EXISTS);
|
||||
}
|
||||
@@ -157,14 +157,14 @@ public class IotOtaUpgradeTaskServiceImpl implements IotOtaUpgradeTaskService {
|
||||
/**
|
||||
* 初始化升级任务
|
||||
*/
|
||||
private IotOtaUpgradeTaskDO initOtaUpgradeTask(IotOtaUpgradeTaskSaveReqVO createReqVO, Long productId) {
|
||||
IotOtaUpgradeTaskDO upgradeTask = BeanUtils.toBean(createReqVO, IotOtaUpgradeTaskDO.class);
|
||||
upgradeTask.setDeviceCount(Convert.toLong(CollUtil.size(createReqVO.getDeviceIds())))
|
||||
.setStatus(IotOtaUpgradeTaskStatusEnum.IN_PROGRESS.getStatus());
|
||||
|
||||
if (Objects.equals(createReqVO.getScope(), IotOtaUpgradeTaskScopeEnum.ALL.getScope())) {
|
||||
private IotOtaTaskDO initOtaUpgradeTask(IotOtaUpgradeTaskSaveReqVO createReqVO, Long productId) {
|
||||
IotOtaTaskDO upgradeTask = BeanUtils.toBean(createReqVO, IotOtaTaskDO.class);
|
||||
upgradeTask.setDeviceTotalCount(Convert.toLong(CollUtil.size(createReqVO.getDeviceIds())))
|
||||
.setStatus(IotOtaTaskStatusEnum.IN_PROGRESS.getStatus());
|
||||
|
||||
if (Objects.equals(createReqVO.getScope(), IotOtaTaskDeviceScopeEnum.ALL.getScope())) {
|
||||
List<IotDeviceDO> deviceList = deviceService.getDeviceListByProductId(productId);
|
||||
upgradeTask.setDeviceCount((long) deviceList.size());
|
||||
upgradeTask.setDeviceTotalCount((long) deviceList.size());
|
||||
upgradeTask.setDeviceIds(
|
||||
deviceList.stream().map(IotDeviceDO::getId).collect(Collectors.toList()));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user