reactor:【IoT 物联网】调整 ota 的 task 实体定义(暂时未处理 controller)x2
This commit is contained in:
@@ -0,0 +1,64 @@
|
||||
package cn.iocoder.yudao.module.iot.controller.admin.ota;
|
||||
|
||||
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
|
||||
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.task.IotOtaTaskPageReqVO;
|
||||
import cn.iocoder.yudao.module.iot.controller.admin.ota.vo.task.IotOtaTaskRespVO;
|
||||
import cn.iocoder.yudao.module.iot.controller.admin.ota.vo.task.IotOtaTaskCreateReqVO;
|
||||
import cn.iocoder.yudao.module.iot.dal.dataobject.ota.IotOtaTaskDO;
|
||||
import cn.iocoder.yudao.module.iot.service.ota.IotOtaTaskService;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.Parameter;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import jakarta.annotation.Resource;
|
||||
import jakarta.validation.Valid;
|
||||
import org.springframework.security.access.prepost.PreAuthorize;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
|
||||
|
||||
@Tag(name = "管理后台 - IoT OTA 升级任务")
|
||||
@RestController
|
||||
@RequestMapping("/iot/ota/task")
|
||||
@Validated
|
||||
public class IotOtaTaskController {
|
||||
|
||||
@Resource
|
||||
private IotOtaTaskService otaTaskService;
|
||||
|
||||
@PostMapping("/create")
|
||||
@Operation(summary = "创建 OTA 升级任务")
|
||||
@PreAuthorize(value = "@ss.hasPermission('iot:ota-task:create')")
|
||||
public CommonResult<Long> createOtaTask(@Valid @RequestBody IotOtaTaskCreateReqVO createReqVO) {
|
||||
return success(otaTaskService.createOtaTask(createReqVO));
|
||||
}
|
||||
|
||||
@PostMapping("/cancel")
|
||||
@Operation(summary = "取消 OTA 升级任务")
|
||||
@Parameter(name = "id", description = "升级任务编号", required = true)
|
||||
@PreAuthorize(value = "@ss.hasPermission('iot:ota-task:cancel')")
|
||||
public CommonResult<Boolean> cancelOtaTask(@RequestParam("id") Long id) {
|
||||
otaTaskService.cancelOtaTask(id);
|
||||
return success(true);
|
||||
}
|
||||
|
||||
@GetMapping("/page")
|
||||
@Operation(summary = "获得 OTA 升级任务分页")
|
||||
@PreAuthorize(value = "@ss.hasPermission('iot:ota-task:query')")
|
||||
public CommonResult<PageResult<IotOtaTaskRespVO>> getOtaTaskPage(@Valid IotOtaTaskPageReqVO pageReqVO) {
|
||||
PageResult<IotOtaTaskDO> pageResult = otaTaskService.getOtaTaskPage(pageReqVO);
|
||||
return success(BeanUtils.toBean(pageResult, IotOtaTaskRespVO.class));
|
||||
}
|
||||
|
||||
@GetMapping("/get")
|
||||
@Operation(summary = "获得 OTA 升级任务")
|
||||
@Parameter(name = "id", description = "升级任务编号", required = true, example = "1024")
|
||||
@PreAuthorize(value = "@ss.hasPermission('iot:ota-task:query')")
|
||||
public CommonResult<IotOtaTaskRespVO> getOtaTask(@RequestParam("id") Long id) {
|
||||
IotOtaTaskDO upgradeTask = otaTaskService.getOtaTask(id);
|
||||
return success(BeanUtils.toBean(upgradeTask, IotOtaTaskRespVO.class));
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,65 @@
|
||||
package cn.iocoder.yudao.module.iot.controller.admin.ota;
|
||||
|
||||
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
|
||||
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.task.record.IotOtaTaskRecordPageReqVO;
|
||||
import cn.iocoder.yudao.module.iot.controller.admin.ota.vo.task.record.IotOtaTaskRecordRespVO;
|
||||
import cn.iocoder.yudao.module.iot.dal.dataobject.ota.IotOtaTaskRecordDO;
|
||||
import cn.iocoder.yudao.module.iot.service.ota.IotOtaTaskRecordService;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.Parameter;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import jakarta.annotation.Resource;
|
||||
import jakarta.validation.Valid;
|
||||
import org.springframework.security.access.prepost.PreAuthorize;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
|
||||
|
||||
@Tag(name = "管理后台 - IoT OTA 升级任务记录")
|
||||
@RestController
|
||||
@RequestMapping("/iot/ota/task-record")
|
||||
@Validated
|
||||
public class IotOtaTaskRecordController {
|
||||
|
||||
@Resource
|
||||
private IotOtaTaskRecordService otaTaskRecordService;
|
||||
|
||||
@GetMapping("/get-statistics")
|
||||
@Operation(summary = "固件升级设备统计")
|
||||
@PreAuthorize("@ss.hasPermission('iot:ota-task-record:query')")
|
||||
@Parameter(name = "firmwareId", description = "固件编号", required = true, example = "1024")
|
||||
public CommonResult<Map<Integer, Long>> getOtaTaskRecordStatistics(@RequestParam(value = "firmwareId") Long firmwareId) {
|
||||
return success(otaTaskRecordService.getOtaTaskRecordStatistics(firmwareId));
|
||||
}
|
||||
|
||||
@GetMapping("/get-count")
|
||||
@Operation(summary = "获得升级记录分页 tab 数量")
|
||||
@PreAuthorize("@ss.hasPermission('iot:ota-task-record:query')")
|
||||
public CommonResult<Map<Integer, Long>> getOtaTaskRecordCount(@Valid IotOtaTaskRecordPageReqVO pageReqVO) {
|
||||
return success(otaTaskRecordService.getOtaTaskRecordCount(pageReqVO));
|
||||
}
|
||||
|
||||
@GetMapping("/page")
|
||||
@Operation(summary = "获得升级记录分页")
|
||||
@PreAuthorize("@ss.hasPermission('iot:ota-upgrade-record:query')")
|
||||
public CommonResult<PageResult<IotOtaTaskRecordRespVO>> getOtaTaskRecordPage(
|
||||
@Valid IotOtaTaskRecordPageReqVO pageReqVO) {
|
||||
PageResult<IotOtaTaskRecordDO> pageResult = otaTaskRecordService.getOtaTaskRecordPage(pageReqVO);
|
||||
return success(BeanUtils.toBean(pageResult, IotOtaTaskRecordRespVO.class));
|
||||
}
|
||||
|
||||
@GetMapping("/get")
|
||||
@Operation(summary = "获得升级记录")
|
||||
@PreAuthorize("@ss.hasPermission('iot:ota-upgrade-record:query')")
|
||||
@Parameter(name = "id", description = "升级记录编号", required = true, example = "1024")
|
||||
public CommonResult<IotOtaTaskRecordRespVO> getOtaTaskRecord(@RequestParam("id") Long id) {
|
||||
IotOtaTaskRecordDO upgradeRecord = otaTaskRecordService.getOtaTaskRecord(id);
|
||||
return success(BeanUtils.toBean(upgradeRecord, IotOtaTaskRecordRespVO.class));
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,66 +0,0 @@
|
||||
package cn.iocoder.yudao.module.iot.controller.admin.ota;
|
||||
|
||||
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
|
||||
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.IotOtaTaskRecordDO;
|
||||
import cn.iocoder.yudao.module.iot.service.ota.IotOtaUpgradeRecordService;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.Parameter;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import jakarta.annotation.Resource;
|
||||
import jakarta.validation.Valid;
|
||||
import org.springframework.security.access.prepost.PreAuthorize;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
|
||||
|
||||
@Tag(name = "管理后台 - IoT OTA 升级记录")
|
||||
@RestController
|
||||
@RequestMapping("/iot/ota-upgrade-record")
|
||||
@Validated
|
||||
public class IotOtaUpgradeRecordController {
|
||||
|
||||
@Resource
|
||||
private IotOtaUpgradeRecordService upgradeRecordService;
|
||||
|
||||
@GetMapping("/get-statistics")
|
||||
@Operation(summary = "固件升级设备统计")
|
||||
@PreAuthorize("@ss.hasPermission('iot:ota-upgrade-record:query')")
|
||||
@Parameter(name = "firmwareId", description = "固件编号", required = true, example = "1024")
|
||||
public CommonResult<Map<Integer, Long>> getOtaUpgradeRecordStatistics(@RequestParam(value = "firmwareId") Long firmwareId) {
|
||||
return success(upgradeRecordService.getOtaUpgradeRecordStatistics(firmwareId));
|
||||
}
|
||||
|
||||
@GetMapping("/get-count")
|
||||
@Operation(summary = "获得升级记录分页 tab 数量")
|
||||
@PreAuthorize("@ss.hasPermission('iot:ota-upgrade-record:query')")
|
||||
public CommonResult<Map<Integer, Long>> getOtaUpgradeRecordCount(
|
||||
@Valid IotOtaUpgradeRecordPageReqVO pageReqVO) {
|
||||
return success(upgradeRecordService.getOtaUpgradeRecordCount(pageReqVO));
|
||||
}
|
||||
|
||||
@GetMapping("/page")
|
||||
@Operation(summary = "获得升级记录分页")
|
||||
@PreAuthorize("@ss.hasPermission('iot:ota-upgrade-record:query')")
|
||||
public CommonResult<PageResult<IotOtaUpgradeRecordRespVO>> getUpgradeRecordPage(
|
||||
@Valid IotOtaUpgradeRecordPageReqVO pageReqVO) {
|
||||
PageResult<IotOtaTaskRecordDO> pageResult = upgradeRecordService.getUpgradeRecordPage(pageReqVO);
|
||||
return success(BeanUtils.toBean(pageResult, IotOtaUpgradeRecordRespVO.class));
|
||||
}
|
||||
|
||||
@GetMapping("/get")
|
||||
@Operation(summary = "获得升级记录")
|
||||
@PreAuthorize("@ss.hasPermission('iot:ota-upgrade-record:query')")
|
||||
@Parameter(name = "id", description = "升级记录编号", required = true, example = "1024")
|
||||
public CommonResult<IotOtaUpgradeRecordRespVO> getUpgradeRecord(@RequestParam("id") Long id) {
|
||||
IotOtaTaskRecordDO upgradeRecord = upgradeRecordService.getUpgradeRecord(id);
|
||||
return success(BeanUtils.toBean(upgradeRecord, IotOtaUpgradeRecordRespVO.class));
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,64 +0,0 @@
|
||||
package cn.iocoder.yudao.module.iot.controller.admin.ota;
|
||||
|
||||
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
|
||||
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.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.IotOtaTaskDO;
|
||||
import cn.iocoder.yudao.module.iot.service.ota.IotOtaUpgradeTaskService;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.Parameter;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import jakarta.annotation.Resource;
|
||||
import jakarta.validation.Valid;
|
||||
import org.springframework.security.access.prepost.PreAuthorize;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
|
||||
|
||||
@Tag(name = "管理后台 - IoT OTA 升级任务")
|
||||
@RestController
|
||||
@RequestMapping("/iot/ota-upgrade-task")
|
||||
@Validated
|
||||
public class IotOtaUpgradeTaskController {
|
||||
|
||||
@Resource
|
||||
private IotOtaUpgradeTaskService upgradeTaskService;
|
||||
|
||||
@PostMapping("/create")
|
||||
@Operation(summary = "创建升级任务")
|
||||
@PreAuthorize(value = "@ss.hasPermission('iot:ota-upgrade-task:create')")
|
||||
public CommonResult<Long> createUpgradeTask(@Valid @RequestBody IotOtaUpgradeTaskSaveReqVO createReqVO) {
|
||||
return success(upgradeTaskService.createUpgradeTask(createReqVO));
|
||||
}
|
||||
|
||||
@PostMapping("/cancel")
|
||||
@Operation(summary = "取消升级任务")
|
||||
@Parameter(name = "id", description = "升级任务编号", required = true)
|
||||
@PreAuthorize(value = "@ss.hasPermission('iot:ota-upgrade-task:cancel')")
|
||||
public CommonResult<Boolean> cancelUpgradeTask(@RequestParam("id") Long id) {
|
||||
upgradeTaskService.cancelUpgradeTask(id);
|
||||
return success(true);
|
||||
}
|
||||
|
||||
@GetMapping("/page")
|
||||
@Operation(summary = "获得升级任务分页")
|
||||
@PreAuthorize(value = "@ss.hasPermission('iot:ota-upgrade-task:query')")
|
||||
public CommonResult<PageResult<IotOtaUpgradeTaskRespVO>> getUpgradeTaskPage(@Valid IotOtaUpgradeTaskPageReqVO pageReqVO) {
|
||||
PageResult<IotOtaTaskDO> pageResult = upgradeTaskService.getUpgradeTaskPage(pageReqVO);
|
||||
return success(BeanUtils.toBean(pageResult, IotOtaUpgradeTaskRespVO.class));
|
||||
}
|
||||
|
||||
@GetMapping("/get")
|
||||
@Operation(summary = "获得升级任务")
|
||||
@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) {
|
||||
IotOtaTaskDO upgradeTask = upgradeTaskService.getUpgradeTask(id);
|
||||
return success(BeanUtils.toBean(upgradeTask, IotOtaUpgradeTaskRespVO.class));
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
package cn.iocoder.yudao.module.iot.controller.admin.ota.vo.upgrade.task;
|
||||
package cn.iocoder.yudao.module.iot.controller.admin.ota.vo.task;
|
||||
|
||||
import cn.iocoder.yudao.framework.common.validation.InEnum;
|
||||
import cn.iocoder.yudao.module.iot.enums.ota.IotOtaTaskDeviceScopeEnum;
|
||||
@@ -9,9 +9,9 @@ import lombok.Data;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Schema(description = "管理后台 - IoT OTA 升级任务创建/修改 Request VO")
|
||||
@Schema(description = "管理后台 - IoT OTA 升级任务创建 Request VO")
|
||||
@Data
|
||||
public class IotOtaUpgradeTaskSaveReqVO {
|
||||
public class IotOtaTaskCreateReqVO {
|
||||
|
||||
@NotEmpty(message = "任务名称不能为空")
|
||||
@Schema(description = "任务名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "升级任务")
|
||||
@@ -27,7 +27,7 @@ public class IotOtaUpgradeTaskSaveReqVO {
|
||||
@Schema(description = "升级范围", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
|
||||
@NotNull(message = "升级范围不能为空")
|
||||
@InEnum(value = IotOtaTaskDeviceScopeEnum.class)
|
||||
private Integer scope;
|
||||
private Integer deviceScope;
|
||||
|
||||
@Schema(description = "选中的设备编号数组", requiredMode = Schema.RequiredMode.REQUIRED, example = "1,2,3")
|
||||
private List<Long> deviceIds;
|
||||
@@ -1,19 +1,17 @@
|
||||
package cn.iocoder.yudao.module.iot.controller.admin.ota.vo.upgrade.task;
|
||||
package cn.iocoder.yudao.module.iot.controller.admin.ota.vo.task;
|
||||
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageParam;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
import lombok.Data;
|
||||
|
||||
@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;
|
||||
@Data
|
||||
public class IotOtaTaskPageReqVO extends PageParam {
|
||||
|
||||
@Schema(description = "任务名称", example = "升级任务")
|
||||
private String name;
|
||||
|
||||
@Schema(description = "固件编号", example = "1024")
|
||||
private Long firmwareId;
|
||||
|
||||
}
|
||||
@@ -1,15 +1,14 @@
|
||||
package cn.iocoder.yudao.module.iot.controller.admin.ota.vo.upgrade.task;
|
||||
package cn.iocoder.yudao.module.iot.controller.admin.ota.vo.task;
|
||||
|
||||
import com.fhs.core.trans.vo.VO;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
@Schema(description = "管理后台 - IoT OTA 升级任务 Response VO")
|
||||
public class IotOtaUpgradeTaskRespVO implements VO {
|
||||
@Data
|
||||
public class IotOtaTaskRespVO implements VO {
|
||||
|
||||
@Schema(description = "任务编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
|
||||
private Long id;
|
||||
@@ -23,20 +22,17 @@ public class IotOtaUpgradeTaskRespVO implements VO {
|
||||
@Schema(description = "固件编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
|
||||
private Long firmwareId;
|
||||
|
||||
@Schema(description = "任务状态", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@Schema(description = "任务状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "10")
|
||||
private Integer status;
|
||||
|
||||
@Schema(description = "升级范围", requiredMode = Schema.RequiredMode.REQUIRED, allowableValues = {"1", "2"})
|
||||
private Integer scope;
|
||||
@Schema(description = "升级范围", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
|
||||
private Integer deviceScope;
|
||||
|
||||
@Schema(description = "设备数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
|
||||
private Long deviceCount;
|
||||
@Schema(description = "设备总共数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
|
||||
private Integer deviceTotalCount;
|
||||
|
||||
@Schema(description = "选中的设备编号数组", example = "1024")
|
||||
private List<Long> deviceIds;
|
||||
|
||||
@Schema(description = "选中的设备名字数组", example = "1024")
|
||||
private List<String> deviceNames;
|
||||
@Schema(description = "设备成功数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "66")
|
||||
private Integer deviceSuccessCount;
|
||||
|
||||
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED, example = "2022-07-08 07:30:00")
|
||||
private LocalDateTime createTime;
|
||||
@@ -1,29 +1,19 @@
|
||||
package cn.iocoder.yudao.module.iot.controller.admin.ota.vo.upgrade.record;
|
||||
package cn.iocoder.yudao.module.iot.controller.admin.ota.vo.task.record;
|
||||
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageParam;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
@Schema(description = "管理后台 - IoT OTA 升级记录分页 Request VO")
|
||||
public class IotOtaUpgradeRecordPageReqVO extends PageParam {
|
||||
@Data
|
||||
public class IotOtaTaskRecordPageReqVO extends PageParam {
|
||||
|
||||
// TODO @li:已经有注解,不用重复注释
|
||||
/**
|
||||
* 升级任务编号字段。
|
||||
* <p>
|
||||
* 该字段用于标识升级任务的唯一编号,不能为空。
|
||||
*/
|
||||
// TODO @芋艿:分页条件字段梳理;
|
||||
@Schema(description = "升级任务编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
|
||||
@NotNull(message = "升级任务编号不能为空")
|
||||
private Long taskId;
|
||||
|
||||
/**
|
||||
* 设备标识字段。
|
||||
* <p>
|
||||
* 该字段用于标识设备的名称,通常用于区分不同的设备。
|
||||
*/
|
||||
@Schema(description = "设备标识", requiredMode = Schema.RequiredMode.REQUIRED, example = "摄像头A1-1")
|
||||
private String deviceName;
|
||||
|
||||
@@ -0,0 +1,56 @@
|
||||
package cn.iocoder.yudao.module.iot.controller.admin.ota.vo.task.record;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
@Schema(description = "管理后台 - IoT OTA 升级记录 Response VO")
|
||||
@Data
|
||||
public class IotOtaTaskRecordRespVO {
|
||||
|
||||
// TODO @芋艿:梳理字段
|
||||
|
||||
@Schema(description = "升级记录编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
|
||||
private Long id;
|
||||
|
||||
@Schema(description = "固件编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
|
||||
private Long firmwareId;
|
||||
|
||||
@Schema(description = "固件版本", requiredMode = Schema.RequiredMode.REQUIRED, example = "v1.0.0")
|
||||
private String firmwareVersion;
|
||||
|
||||
@Schema(description = "任务编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
|
||||
private Long taskId;
|
||||
|
||||
@Schema(description = "产品标识", requiredMode = Schema.RequiredMode.REQUIRED, example = "iot")
|
||||
private String productKey;
|
||||
|
||||
@Schema(description = "设备名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "iot")
|
||||
private String deviceName;
|
||||
|
||||
@Schema(description = "设备编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
|
||||
private String deviceId;
|
||||
|
||||
@Schema(description = "来源的固件编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
|
||||
private Long fromFirmwareId;
|
||||
|
||||
@Schema(description = "来源的固件版本", requiredMode = Schema.RequiredMode.REQUIRED, example = "v1.0.0")
|
||||
private String fromFirmwareVersion;
|
||||
|
||||
@Schema(description = "升级状态", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
private Integer status;
|
||||
|
||||
@Schema(description = "升级进度,百分比", requiredMode = Schema.RequiredMode.REQUIRED, example = "10")
|
||||
private Integer progress;
|
||||
|
||||
@Schema(description = "升级进度描述", requiredMode = Schema.RequiredMode.REQUIRED, example = "10")
|
||||
private String description;
|
||||
|
||||
@Schema(description = "升级开始时间", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
private LocalDateTime startTime;
|
||||
|
||||
@Schema(description = "升级结束时间", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
private LocalDateTime endTime;
|
||||
|
||||
}
|
||||
@@ -1,109 +0,0 @@
|
||||
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.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;
|
||||
import lombok.Data;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
@Data
|
||||
@Schema(description = "管理后台 - IoT OTA 升级记录 Response VO")
|
||||
public class IotOtaUpgradeRecordRespVO {
|
||||
|
||||
/**
|
||||
* 升级记录编号
|
||||
*/
|
||||
@Schema(description = "升级记录编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
|
||||
private Long id;
|
||||
/**
|
||||
* 固件编号
|
||||
* <p>
|
||||
* 关联 {@link IotOtaFirmwareDO#getId()}
|
||||
*/
|
||||
@Schema(description = "固件编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
|
||||
@Trans(type = TransType.SIMPLE, target = IotOtaFirmwareDO.class, fields = {"version"}, refs = {"firmwareVersion"})
|
||||
private Long firmwareId;
|
||||
/**
|
||||
* 固件版本
|
||||
*/
|
||||
@Schema(description = "固件版本", requiredMode = Schema.RequiredMode.REQUIRED, example = "v1.0.0")
|
||||
private String firmwareVersion;
|
||||
/**
|
||||
* 任务编号
|
||||
* <p>
|
||||
* 关联 {@link IotOtaTaskDO#getId()}
|
||||
*/
|
||||
@Schema(description = "任务编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
|
||||
private Long taskId;
|
||||
/**
|
||||
* 产品标识
|
||||
* <p>
|
||||
* 关联 {@link cn.iocoder.yudao.module.iot.dal.dataobject.product.IotProductDO#getId()}
|
||||
*/
|
||||
@Schema(description = "产品标识", requiredMode = Schema.RequiredMode.REQUIRED, example = "iot")
|
||||
private String productKey;
|
||||
/**
|
||||
* 设备名称
|
||||
* <p>
|
||||
* 关联 {@link cn.iocoder.yudao.module.iot.dal.dataobject.device.IotDeviceDO#getId()}
|
||||
*/
|
||||
@Schema(description = "设备名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "iot")
|
||||
private String deviceName;
|
||||
/**
|
||||
* 设备编号
|
||||
* <p>
|
||||
* 关联 {@link cn.iocoder.yudao.module.iot.dal.dataobject.device.IotDeviceDO#getId()}
|
||||
*/
|
||||
@Schema(description = "设备编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
|
||||
private String deviceId;
|
||||
/**
|
||||
* 来源的固件编号
|
||||
* <p>
|
||||
* 关联 {@link IotDeviceDO#getFirmwareId()}
|
||||
*/
|
||||
@Schema(description = "来源的固件编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
|
||||
@Trans(type = TransType.SIMPLE, target = IotOtaFirmwareDO.class, fields = {"version"}, refs = {"fromFirmwareVersion"})
|
||||
private Long fromFirmwareId;
|
||||
/**
|
||||
* 来源的固件版本
|
||||
*/
|
||||
@Schema(description = "来源的固件版本", requiredMode = Schema.RequiredMode.REQUIRED, example = "v1.0.0")
|
||||
private String fromFirmwareVersion;
|
||||
/**
|
||||
* 升级状态
|
||||
* <p>
|
||||
* 关联 {@link IotOtaTaskRecordStatusEnum}
|
||||
*/
|
||||
@Schema(description = "升级状态", requiredMode = Schema.RequiredMode.REQUIRED, allowableValues = {"0", "10", "20", "30", "40", "50"})
|
||||
private Integer status;
|
||||
/**
|
||||
* 升级进度,百分比
|
||||
*/
|
||||
@Schema(description = "升级进度,百分比", requiredMode = Schema.RequiredMode.REQUIRED, example = "10")
|
||||
private Integer progress;
|
||||
/**
|
||||
* 升级进度描述
|
||||
* <p>
|
||||
* 注意,只记录设备最后一次的升级进度描述
|
||||
* 如果想看历史记录,可以查看 {@link IotDeviceMessageDO} 设备日志
|
||||
*/
|
||||
@Schema(description = "升级进度描述", requiredMode = Schema.RequiredMode.REQUIRED, example = "10")
|
||||
private String description;
|
||||
/**
|
||||
* 升级开始时间
|
||||
*/
|
||||
@Schema(description = "升级开始时间", requiredMode = Schema.RequiredMode.REQUIRED, example = "2022-07-08 07:30:00")
|
||||
private LocalDateTime startTime;
|
||||
/**
|
||||
* 升级结束时间
|
||||
*/
|
||||
@Schema(description = "升级结束时间", requiredMode = Schema.RequiredMode.REQUIRED, example = "2022-07-08 07:30:00")
|
||||
private LocalDateTime endTime;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
package cn.iocoder.yudao.module.iot.dal.mysql.ota;
|
||||
|
||||
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.task.IotOtaTaskPageReqVO;
|
||||
import cn.iocoder.yudao.module.iot.dal.dataobject.ota.IotOtaTaskDO;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* OTA 升级任务 Mapper
|
||||
*
|
||||
* @author Shelly
|
||||
*/
|
||||
@Mapper
|
||||
public interface IotOtaTaskMapper extends BaseMapperX<IotOtaTaskDO> {
|
||||
|
||||
default List<IotOtaTaskDO> selectByFirmwareIdAndName(Long firmwareId, String name) {
|
||||
return selectList(new LambdaQueryWrapperX<IotOtaTaskDO>()
|
||||
.eqIfPresent(IotOtaTaskDO::getFirmwareId, firmwareId)
|
||||
.eqIfPresent(IotOtaTaskDO::getName, name));
|
||||
}
|
||||
|
||||
default PageResult<IotOtaTaskDO> selectUpgradeTaskPage(IotOtaTaskPageReqVO pageReqVO) {
|
||||
return selectPage(pageReqVO, new LambdaQueryWrapperX<IotOtaTaskDO>()
|
||||
.eqIfPresent(IotOtaTaskDO::getFirmwareId, pageReqVO.getFirmwareId())
|
||||
.likeIfPresent(IotOtaTaskDO::getName, pageReqVO.getName()));
|
||||
}
|
||||
|
||||
}
|
||||
@@ -3,7 +3,7 @@ package cn.iocoder.yudao.module.iot.dal.mysql.ota;
|
||||
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.controller.admin.ota.vo.task.record.IotOtaTaskRecordPageReqVO;
|
||||
import cn.iocoder.yudao.module.iot.dal.dataobject.ota.IotOtaTaskRecordDO;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
@@ -80,11 +80,11 @@ public interface IotOtaUpgradeRecordMapper extends BaseMapperX<IotOtaTaskRecordD
|
||||
* @return 返回分页查询结果,包含符合条件的 OTA升级记录列表
|
||||
*/
|
||||
// TODO @li:selectPage 就 ok 拉。
|
||||
default PageResult<IotOtaTaskRecordDO> selectUpgradeRecordPage(IotOtaUpgradeRecordPageReqVO pageReqVO) {
|
||||
default PageResult<IotOtaTaskRecordDO> selectUpgradeRecordPage(IotOtaTaskRecordPageReqVO pageReqVO) {
|
||||
// TODO @li:这里的注释,可以去掉哈;然后下面的“如果”。。。也没必要注释
|
||||
// 使用LambdaQueryWrapperX构建查询条件,并根据请求参数动态添加查询条件
|
||||
return selectPage(pageReqVO, new LambdaQueryWrapperX<IotOtaTaskRecordDO>()
|
||||
.likeIfPresent(IotOtaTaskRecordDO::getDeviceName, pageReqVO.getDeviceName()) // 如果设备名称存在,则添加模糊查询条件
|
||||
// .likeIfPresent(IotOtaTaskRecordDO::getDeviceName, pageReqVO.getDeviceName()) // 如果设备名称存在,则添加模糊查询条件
|
||||
.eqIfPresent(IotOtaTaskRecordDO::getTaskId, pageReqVO.getTaskId())); // 如果任务ID存在,则添加等值查询条件
|
||||
}
|
||||
|
||||
|
||||
@@ -1,57 +0,0 @@
|
||||
package cn.iocoder.yudao.module.iot.dal.mysql.ota;
|
||||
|
||||
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.IotOtaTaskDO;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* OTA 升级任务Mapper
|
||||
*
|
||||
* @author Shelly
|
||||
*/
|
||||
@Mapper
|
||||
public interface IotOtaUpgradeTaskMapper extends BaseMapperX<IotOtaTaskDO> {
|
||||
|
||||
/**
|
||||
* 根据固件ID和任务名称查询升级任务列表。
|
||||
*
|
||||
* @param firmwareId 固件ID,用于筛选升级任务
|
||||
* @param name 任务名称,用于筛选升级任务
|
||||
* @return 符合条件的升级任务列表
|
||||
*/
|
||||
default List<IotOtaTaskDO> selectByFirmwareIdAndName(Long firmwareId, String name) {
|
||||
return selectList(new LambdaQueryWrapperX<IotOtaTaskDO>()
|
||||
.eqIfPresent(IotOtaTaskDO::getFirmwareId, firmwareId)
|
||||
.eqIfPresent(IotOtaTaskDO::getName, name));
|
||||
}
|
||||
|
||||
/**
|
||||
* 分页查询升级任务列表,支持根据固件ID和任务名称进行筛选。
|
||||
*
|
||||
* @param pageReqVO 分页查询请求对象,包含分页参数和筛选条件
|
||||
* @return 分页结果,包含符合条件的升级任务列表
|
||||
*/
|
||||
default PageResult<IotOtaTaskDO> selectUpgradeTaskPage(IotOtaUpgradeTaskPageReqVO pageReqVO) {
|
||||
return selectPage(pageReqVO, new LambdaQueryWrapperX<IotOtaTaskDO>()
|
||||
.eqIfPresent(IotOtaTaskDO::getFirmwareId, pageReqVO.getFirmwareId())
|
||||
.likeIfPresent(IotOtaTaskDO::getName, pageReqVO.getName()));
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据任务状态查询升级任务列表
|
||||
* <p>
|
||||
* 该函数通过传入的任务状态,查询数据库中符合条件的升级任务列表。
|
||||
*
|
||||
* @param status 任务状态,用于筛选升级任务的状态值
|
||||
* @return 返回符合条件的升级任务列表,列表中的每个元素为 IotOtaUpgradeTaskDO 对象
|
||||
*/
|
||||
default List<IotOtaTaskDO> selectUpgradeTaskByState(Integer status) {
|
||||
return selectList(IotOtaTaskDO::getStatus, status);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,7 +1,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.controller.admin.ota.vo.task.record.IotOtaTaskRecordPageReqVO;
|
||||
import cn.iocoder.yudao.module.iot.dal.dataobject.ota.IotOtaTaskRecordDO;
|
||||
import jakarta.validation.Valid;
|
||||
|
||||
@@ -13,7 +13,7 @@ import java.util.Map;
|
||||
* IotOtaUpgradeRecordService 接口定义了与物联网设备OTA升级记录相关的操作。
|
||||
* 该接口提供了创建、更新、查询、统计和重试升级记录的功能。
|
||||
*/
|
||||
public interface IotOtaUpgradeRecordService {
|
||||
public interface IotOtaTaskRecordService {
|
||||
|
||||
/**
|
||||
* 批量创建 OTA 升级记录
|
||||
@@ -23,37 +23,37 @@ public interface IotOtaUpgradeRecordService {
|
||||
* @param firmwareId 固件ID,表示要升级到的固件版本。
|
||||
* @param upgradeTaskId 升级任务ID,表示此次升级任务的唯一标识。
|
||||
*/
|
||||
void createOtaUpgradeRecordBatch(List<Long> deviceIds, Long firmwareId, Long upgradeTaskId);
|
||||
void createOtaTaskRecordBatch(List<Long> deviceIds, Long firmwareId, Long upgradeTaskId);
|
||||
|
||||
/**
|
||||
* 获取 OTA 升级记录的数量统计
|
||||
*
|
||||
* @return 返回一个 Map,其中键为状态码,值为对应状态的升级记录数量
|
||||
*/
|
||||
Map<Integer, Long> getOtaUpgradeRecordCount(@Valid IotOtaUpgradeRecordPageReqVO pageReqVO);
|
||||
Map<Integer, Long> getOtaTaskRecordCount(@Valid IotOtaTaskRecordPageReqVO pageReqVO);
|
||||
|
||||
/**
|
||||
* 获取 OTA 升级记录的统计信息。
|
||||
* 获取 OTA 升级记录的统计信息
|
||||
*
|
||||
* @return 返回一个 Map,其中键为状态码,值为对应状态的升级记录统计信息
|
||||
*/
|
||||
Map<Integer, Long> getOtaUpgradeRecordStatistics(Long firmwareId);
|
||||
Map<Integer, Long> getOtaTaskRecordStatistics(Long firmwareId);
|
||||
|
||||
/**
|
||||
* 获取指定 ID 的 OTA 升级记录的详细信息。
|
||||
* 获取指定 ID 的 OTA 升级记录的详细信息
|
||||
*
|
||||
* @param id 需要查询的升级记录的ID。
|
||||
* @return 返回包含升级记录详细信息的响应对象。
|
||||
* @param id 需要查询的升级记录的 ID
|
||||
* @return 返回包含升级记录详细信息的响应对象
|
||||
*/
|
||||
IotOtaTaskRecordDO getUpgradeRecord(Long id);
|
||||
IotOtaTaskRecordDO getOtaTaskRecord(Long id);
|
||||
|
||||
/**
|
||||
* 分页查询 OTA 升级记录。
|
||||
* 分页查询 OTA 升级记录
|
||||
*
|
||||
* @param pageReqVO 包含分页查询条件的请求对象,必须经过验证。
|
||||
* @return 返回包含分页查询结果的响应对象。
|
||||
*/
|
||||
PageResult<IotOtaTaskRecordDO> getUpgradeRecordPage(@Valid IotOtaUpgradeRecordPageReqVO pageReqVO);
|
||||
PageResult<IotOtaTaskRecordDO> getOtaTaskRecordPage(@Valid IotOtaTaskRecordPageReqVO pageReqVO);
|
||||
|
||||
/**
|
||||
* 根据任务 ID 取消升级记录
|
||||
@@ -3,7 +3,7 @@ package cn.iocoder.yudao.module.iot.service.ota;
|
||||
import cn.hutool.core.convert.Convert;
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||
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.controller.admin.ota.vo.task.record.IotOtaTaskRecordPageReqVO;
|
||||
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.IotOtaTaskRecordDO;
|
||||
@@ -29,40 +29,39 @@ import static cn.iocoder.yudao.module.iot.enums.ErrorCodeConstants.*;
|
||||
@Slf4j
|
||||
@Service
|
||||
@Validated
|
||||
public class IotOtaUpgradeRecordServiceImpl implements IotOtaUpgradeRecordService {
|
||||
public class IotOtaTaskRecordServiceImpl implements IotOtaTaskRecordService {
|
||||
|
||||
@Resource
|
||||
private IotOtaUpgradeRecordMapper upgradeRecordMapper;
|
||||
private IotOtaUpgradeRecordMapper iotOtaUpgradeRecordMapper;
|
||||
|
||||
@Resource
|
||||
private IotDeviceService deviceService;
|
||||
@Resource
|
||||
private IotOtaFirmwareService firmwareService;
|
||||
@Resource
|
||||
private IotOtaUpgradeTaskService upgradeTaskService;
|
||||
private IotOtaTaskService upgradeTaskService;
|
||||
|
||||
@Override
|
||||
public void createOtaUpgradeRecordBatch(List<Long> deviceIds, Long firmwareId, Long upgradeTaskId) {
|
||||
public void createOtaTaskRecordBatch(List<Long> deviceIds, Long firmwareId, Long upgradeTaskId) {
|
||||
// 1. 校验升级记录信息是否存在,并且已经取消的任务可以重新开始
|
||||
deviceIds.forEach(deviceId -> validateUpgradeRecordDuplicate(firmwareId, upgradeTaskId, String.valueOf(deviceId)));
|
||||
|
||||
// 2. 初始化OTA升级记录列表信息
|
||||
IotOtaTaskDO upgradeTask = upgradeTaskService.getUpgradeTask(upgradeTaskId);
|
||||
IotOtaTaskDO upgradeTask = upgradeTaskService.getOtaTask(upgradeTaskId);
|
||||
IotOtaFirmwareDO firmware = firmwareService.getOtaFirmware(firmwareId);
|
||||
List<IotDeviceDO> deviceList = deviceService.getDeviceListByIdList(deviceIds);
|
||||
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.setDeviceId(device.getId());
|
||||
upgradeRecord.setFromFirmwareId(Convert.toLong(device.getFirmwareId()));
|
||||
upgradeRecord.setStatus(IotOtaTaskRecordStatusEnum.PENDING.getStatus());
|
||||
upgradeRecord.setProgress(0);
|
||||
return upgradeRecord;
|
||||
}).toList();
|
||||
// 3. 保存数据
|
||||
upgradeRecordMapper.insertBatch(upgradeRecordList);
|
||||
iotOtaUpgradeRecordMapper.insertBatch(upgradeRecordList);
|
||||
// TODO @芋艿:在这里需要处理推送升级任务的逻辑
|
||||
}
|
||||
|
||||
@@ -76,9 +75,9 @@ public class IotOtaUpgradeRecordServiceImpl implements IotOtaUpgradeRecordServic
|
||||
*/
|
||||
@Override
|
||||
@Transactional
|
||||
public Map<Integer, Long> getOtaUpgradeRecordCount(IotOtaUpgradeRecordPageReqVO pageReqVO) {
|
||||
public Map<Integer, Long> getOtaTaskRecordCount(IotOtaTaskRecordPageReqVO pageReqVO) {
|
||||
// 分别查询不同状态的OTA升级记录数量
|
||||
List<Map<String, Object>> upgradeRecordCountList = upgradeRecordMapper.selectOtaUpgradeRecordCount(
|
||||
List<Map<String, Object>> upgradeRecordCountList = iotOtaUpgradeRecordMapper.selectOtaUpgradeRecordCount(
|
||||
pageReqVO.getTaskId(), pageReqVO.getDeviceName());
|
||||
Map<String, Object> upgradeRecordCountMap = ObjectUtils.defaultIfNull(upgradeRecordCountList.get(0));
|
||||
Objects.requireNonNull(upgradeRecordCountMap);
|
||||
@@ -89,9 +88,9 @@ public class IotOtaUpgradeRecordServiceImpl implements IotOtaUpgradeRecordServic
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public Map<Integer, Long> getOtaUpgradeRecordStatistics(Long firmwareId) {
|
||||
public Map<Integer, Long> getOtaTaskRecordStatistics(Long firmwareId) {
|
||||
// 查询并统计不同状态的OTA升级记录数量
|
||||
List<Map<String, Object>> upgradeRecordStatisticsList = upgradeRecordMapper.selectOtaUpgradeRecordStatistics(firmwareId);
|
||||
List<Map<String, Object>> upgradeRecordStatisticsList = iotOtaUpgradeRecordMapper.selectOtaUpgradeRecordStatistics(firmwareId);
|
||||
Map<String, Object> upgradeRecordStatisticsMap = ObjectUtils.defaultIfNull(upgradeRecordStatisticsList.get(0));
|
||||
Objects.requireNonNull(upgradeRecordStatisticsMap);
|
||||
return upgradeRecordStatisticsMap.entrySet().stream().collect(Collectors.toMap(
|
||||
@@ -100,19 +99,19 @@ public class IotOtaUpgradeRecordServiceImpl implements IotOtaUpgradeRecordServic
|
||||
}
|
||||
|
||||
@Override
|
||||
public IotOtaTaskRecordDO getUpgradeRecord(Long id) {
|
||||
return upgradeRecordMapper.selectById(id);
|
||||
public IotOtaTaskRecordDO getOtaTaskRecord(Long id) {
|
||||
return iotOtaUpgradeRecordMapper.selectById(id);
|
||||
}
|
||||
|
||||
@Override
|
||||
public PageResult<IotOtaTaskRecordDO> getUpgradeRecordPage(IotOtaUpgradeRecordPageReqVO pageReqVO) {
|
||||
return upgradeRecordMapper.selectUpgradeRecordPage(pageReqVO);
|
||||
public PageResult<IotOtaTaskRecordDO> getOtaTaskRecordPage(IotOtaTaskRecordPageReqVO pageReqVO) {
|
||||
return iotOtaUpgradeRecordMapper.selectUpgradeRecordPage(pageReqVO);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void cancelUpgradeRecordByTaskId(Long taskId) {
|
||||
// 暂定只有待推送的升级记录可以取消 TODO @芋艿:可以看看阿里云,哪些可以取消
|
||||
upgradeRecordMapper.updateUpgradeRecordStatusByTaskIdAndStatus(
|
||||
iotOtaUpgradeRecordMapper.updateUpgradeRecordStatusByTaskIdAndStatus(
|
||||
IotOtaTaskRecordStatusEnum.CANCELED.getStatus(), taskId,
|
||||
IotOtaTaskRecordStatusEnum.PENDING.getStatus());
|
||||
}
|
||||
@@ -127,7 +126,7 @@ public class IotOtaUpgradeRecordServiceImpl implements IotOtaUpgradeRecordServic
|
||||
*/
|
||||
private IotOtaTaskRecordDO validateUpgradeRecordExists(Long id) {
|
||||
// 根据ID查询升级记录
|
||||
IotOtaTaskRecordDO upgradeRecord = upgradeRecordMapper.selectById(id);
|
||||
IotOtaTaskRecordDO upgradeRecord = iotOtaUpgradeRecordMapper.selectById(id);
|
||||
// 如果查询结果为空,抛出异常
|
||||
if (upgradeRecord == null) {
|
||||
throw exception(OTA_UPGRADE_RECORD_NOT_EXISTS);
|
||||
@@ -147,7 +146,7 @@ public class IotOtaUpgradeRecordServiceImpl implements IotOtaUpgradeRecordServic
|
||||
* @param deviceId 设备ID,用于标识特定的设备
|
||||
*/
|
||||
private void validateUpgradeRecordDuplicate(Long firmwareId, Long taskId, String deviceId) {
|
||||
IotOtaTaskRecordDO upgradeRecord = upgradeRecordMapper.selectByConditions(firmwareId, taskId, deviceId);
|
||||
IotOtaTaskRecordDO upgradeRecord = iotOtaUpgradeRecordMapper.selectByConditions(firmwareId, taskId, deviceId);
|
||||
if (upgradeRecord == null) {
|
||||
return;
|
||||
}
|
||||
@@ -0,0 +1,47 @@
|
||||
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.task.IotOtaTaskCreateReqVO;
|
||||
import cn.iocoder.yudao.module.iot.controller.admin.ota.vo.task.IotOtaTaskPageReqVO;
|
||||
import cn.iocoder.yudao.module.iot.dal.dataobject.ota.IotOtaTaskDO;
|
||||
import jakarta.validation.Valid;
|
||||
|
||||
/**
|
||||
* IoT OTA 升级任务 Service 接口
|
||||
*
|
||||
* @author Shelly Chan
|
||||
*/
|
||||
public interface IotOtaTaskService {
|
||||
|
||||
/**
|
||||
* 创建 OTA升 级任务
|
||||
*
|
||||
* @param createReqVO 创建请求对象
|
||||
* @return 升级任务编号
|
||||
*/
|
||||
Long createOtaTask(@Valid IotOtaTaskCreateReqVO createReqVO);
|
||||
|
||||
/**
|
||||
* 取消 OTA 升级任务
|
||||
*
|
||||
* @param id 升级任务编号
|
||||
*/
|
||||
void cancelOtaTask(Long id);
|
||||
|
||||
/**
|
||||
* 获取 OTA 升级任务
|
||||
*
|
||||
* @param id 升级任务编号
|
||||
* @return 升级任务
|
||||
*/
|
||||
IotOtaTaskDO getOtaTask(Long id);
|
||||
|
||||
/**
|
||||
* 分页查询 OTA 升级任务
|
||||
*
|
||||
* @param pageReqVO 分页查询请求
|
||||
* @return 升级任务分页结果
|
||||
*/
|
||||
PageResult<IotOtaTaskDO> getOtaTaskPage(@Valid IotOtaTaskPageReqVO pageReqVO);
|
||||
|
||||
}
|
||||
@@ -4,12 +4,12 @@ import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.convert.Convert;
|
||||
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.task.IotOtaUpgradeTaskPageReqVO;
|
||||
import cn.iocoder.yudao.module.iot.controller.admin.ota.vo.upgrade.task.IotOtaUpgradeTaskSaveReqVO;
|
||||
import cn.iocoder.yudao.module.iot.controller.admin.ota.vo.task.IotOtaTaskCreateReqVO;
|
||||
import cn.iocoder.yudao.module.iot.controller.admin.ota.vo.task.IotOtaTaskPageReqVO;
|
||||
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.IotOtaTaskDO;
|
||||
import cn.iocoder.yudao.module.iot.dal.mysql.ota.IotOtaUpgradeTaskMapper;
|
||||
import cn.iocoder.yudao.module.iot.dal.mysql.ota.IotOtaTaskMapper;
|
||||
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;
|
||||
@@ -22,56 +22,54 @@ import org.springframework.validation.annotation.Validated;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
|
||||
import static cn.iocoder.yudao.module.iot.enums.ErrorCodeConstants.*;
|
||||
|
||||
/**
|
||||
* IoT OTA升级任务 Service 实现类
|
||||
* IoT OTA 升级任务 Service 实现类
|
||||
*
|
||||
* @author Shelly Chan
|
||||
*/
|
||||
@Service
|
||||
@Validated
|
||||
@Slf4j
|
||||
public class IotOtaUpgradeTaskServiceImpl implements IotOtaUpgradeTaskService {
|
||||
public class IotOtaTaskServiceImpl implements IotOtaTaskService {
|
||||
|
||||
@Resource
|
||||
private IotOtaUpgradeTaskMapper upgradeTaskMapper;
|
||||
private IotOtaTaskMapper otaTaskMapper;
|
||||
|
||||
@Resource
|
||||
@Lazy
|
||||
private IotDeviceService deviceService;
|
||||
@Resource
|
||||
@Lazy
|
||||
private IotOtaFirmwareService firmwareService;
|
||||
private IotOtaFirmwareService otaFirmwareService;
|
||||
@Resource
|
||||
@Lazy
|
||||
private IotOtaUpgradeRecordService upgradeRecordService;
|
||||
@Lazy // 延迟,避免循环依赖报错
|
||||
private IotOtaTaskRecordService otaUpgradeRecordService;
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public Long createUpgradeTask(IotOtaUpgradeTaskSaveReqVO createReqVO) {
|
||||
public Long createOtaTask(IotOtaTaskCreateReqVO createReqVO) {
|
||||
// 1.1 校验同一固件的升级任务名称不重复
|
||||
validateFirmwareTaskDuplicate(createReqVO.getFirmwareId(), createReqVO.getName());
|
||||
// 1.2 校验固件信息是否存在
|
||||
IotOtaFirmwareDO firmware = firmwareService.validateFirmwareExists(createReqVO.getFirmwareId());
|
||||
IotOtaFirmwareDO firmware = otaFirmwareService.validateFirmwareExists(createReqVO.getFirmwareId());
|
||||
// 1.3 补全设备范围信息,并且校验是否又设备可以升级,如果没有设备可以升级,则报错
|
||||
validateScopeAndDevice(createReqVO.getScope(), createReqVO.getDeviceIds(), firmware.getProductId());
|
||||
validateScopeAndDevice(createReqVO.getDeviceScope(), createReqVO.getDeviceIds(), firmware.getProductId());
|
||||
|
||||
// 2. 保存 OTA 升级任务信息到数据库
|
||||
IotOtaTaskDO upgradeTask = initOtaUpgradeTask(createReqVO, firmware.getProductId());
|
||||
upgradeTaskMapper.insert(upgradeTask);
|
||||
otaTaskMapper.insert(upgradeTask);
|
||||
|
||||
// 3. 生成设备升级记录信息并存储,等待定时任务轮询
|
||||
upgradeRecordService.createOtaUpgradeRecordBatch(upgradeTask.getDeviceIds(), firmware.getId(), upgradeTask.getId());
|
||||
// TODO @芋艿:在处理;
|
||||
// otaUpgradeRecordService.createOtaUpgradeRecordBatch(upgradeTask.getDeviceIds(), firmware.getId(), upgradeTask.getId());
|
||||
return upgradeTask.getId();
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void cancelUpgradeTask(Long id) {
|
||||
public void cancelOtaTask(Long id) {
|
||||
// 1.1 校验升级任务是否存在
|
||||
IotOtaTaskDO upgradeTask = validateUpgradeTaskExists(id);
|
||||
// 1.2 校验升级任务是否可以取消
|
||||
@@ -81,52 +79,34 @@ public class IotOtaUpgradeTaskServiceImpl implements IotOtaUpgradeTaskService {
|
||||
}
|
||||
|
||||
// 2. 更新 OTA 升级任务状态为已取消
|
||||
upgradeTaskMapper.updateById(IotOtaTaskDO.builder()
|
||||
otaTaskMapper.updateById(IotOtaTaskDO.builder()
|
||||
.id(id).status(IotOtaTaskStatusEnum.CANCELED.getStatus())
|
||||
.build());
|
||||
|
||||
// 3. 更新 OTA 升级记录状态为已取消
|
||||
upgradeRecordService.cancelUpgradeRecordByTaskId(id);
|
||||
otaUpgradeRecordService.cancelUpgradeRecordByTaskId(id);
|
||||
}
|
||||
|
||||
@Override
|
||||
public IotOtaTaskDO getUpgradeTask(Long id) {
|
||||
return upgradeTaskMapper.selectById(id);
|
||||
public IotOtaTaskDO getOtaTask(Long id) {
|
||||
return otaTaskMapper.selectById(id);
|
||||
}
|
||||
|
||||
@Override
|
||||
public PageResult<IotOtaTaskDO> getUpgradeTaskPage(IotOtaUpgradeTaskPageReqVO pageReqVO) {
|
||||
return upgradeTaskMapper.selectUpgradeTaskPage(pageReqVO);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<IotOtaTaskDO> getUpgradeTaskByState(Integer state) {
|
||||
return upgradeTaskMapper.selectUpgradeTaskByState(state);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateUpgradeTaskStatus(Long id, Integer status) {
|
||||
upgradeTaskMapper.updateById(IotOtaTaskDO.builder().id(id).status(status).build());
|
||||
public PageResult<IotOtaTaskDO> getOtaTaskPage(IotOtaTaskPageReqVO pageReqVO) {
|
||||
return otaTaskMapper.selectUpgradeTaskPage(pageReqVO);
|
||||
}
|
||||
|
||||
/**
|
||||
* 校验固件升级任务是否重复
|
||||
*/
|
||||
private void validateFirmwareTaskDuplicate(Long firmwareId, String taskName) {
|
||||
List<IotOtaTaskDO> upgradeTaskList = upgradeTaskMapper.selectByFirmwareIdAndName(firmwareId, taskName);
|
||||
List<IotOtaTaskDO> upgradeTaskList = otaTaskMapper.selectByFirmwareIdAndName(firmwareId, taskName);
|
||||
if (CollUtil.isNotEmpty(upgradeTaskList)) {
|
||||
throw exception(OTA_UPGRADE_TASK_NAME_DUPLICATE);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 验证升级任务的范围和设备列表的有效性。
|
||||
*
|
||||
* @param scope 升级任务的范围,参考 IotOtaUpgradeTaskScopeEnum 枚举值
|
||||
* @param deviceIds 设备ID列表,当范围为"选择设备"时,该列表不能为空
|
||||
* @param productId 产品ID,当范围为"所有设备"时,用于获取设备列表
|
||||
* @throws cn.iocoder.yudao.framework.common.exception.ServiceException,抛出相应的异常
|
||||
*/
|
||||
private void validateScopeAndDevice(Integer scope, List<Long> deviceIds, Long productId) {
|
||||
if (Objects.equals(scope, IotOtaTaskDeviceScopeEnum.SELECT.getScope())) {
|
||||
if (CollUtil.isEmpty(deviceIds)) {
|
||||
@@ -143,30 +123,24 @@ public class IotOtaUpgradeTaskServiceImpl implements IotOtaUpgradeTaskService {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 验证升级任务是否存在
|
||||
*/
|
||||
private IotOtaTaskDO validateUpgradeTaskExists(Long id) {
|
||||
IotOtaTaskDO upgradeTask = upgradeTaskMapper.selectById(id);
|
||||
IotOtaTaskDO upgradeTask = otaTaskMapper.selectById(id);
|
||||
if (Objects.isNull(upgradeTask)) {
|
||||
throw exception(OTA_UPGRADE_TASK_NOT_EXISTS);
|
||||
}
|
||||
return upgradeTask;
|
||||
}
|
||||
|
||||
/**
|
||||
* 初始化升级任务
|
||||
*/
|
||||
private IotOtaTaskDO initOtaUpgradeTask(IotOtaUpgradeTaskSaveReqVO createReqVO, Long productId) {
|
||||
private IotOtaTaskDO initOtaUpgradeTask(IotOtaTaskCreateReqVO 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())) {
|
||||
if (Objects.equals(createReqVO.getDeviceScope(), IotOtaTaskDeviceScopeEnum.ALL.getScope())) {
|
||||
List<IotDeviceDO> deviceList = deviceService.getDeviceListByProductId(productId);
|
||||
upgradeTask.setDeviceTotalCount((long) deviceList.size());
|
||||
upgradeTask.setDeviceIds(
|
||||
deviceList.stream().map(IotDeviceDO::getId).collect(Collectors.toList()));
|
||||
// upgradeTask.setDeviceIds(
|
||||
// deviceList.stream().map(IotDeviceDO::getId).collect(Collectors.toList()));
|
||||
}
|
||||
return upgradeTask;
|
||||
}
|
||||
@@ -1,68 +0,0 @@
|
||||
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.IotOtaTaskDO;
|
||||
import jakarta.validation.Valid;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* IoT OTA升级任务 Service 接口
|
||||
*
|
||||
* @author Shelly Chan
|
||||
*/
|
||||
public interface IotOtaUpgradeTaskService {
|
||||
|
||||
/**
|
||||
* 创建OTA升级任务
|
||||
*
|
||||
* @param createReqVO OTA升级任务的创建请求对象,包含创建任务所需的信息
|
||||
* @return 创建成功的OTA升级任务的ID
|
||||
*/
|
||||
Long createUpgradeTask(@Valid IotOtaUpgradeTaskSaveReqVO createReqVO);
|
||||
|
||||
/**
|
||||
* 取消OTA升级任务
|
||||
*
|
||||
* @param id 要取消的OTA升级任务的ID
|
||||
*/
|
||||
void cancelUpgradeTask(Long id);
|
||||
|
||||
/**
|
||||
* 根据ID获取OTA升级任务的详细信息
|
||||
*
|
||||
* @param id OTA升级任务的ID
|
||||
* @return OTA升级任务的详细信息对象
|
||||
*/
|
||||
IotOtaTaskDO getUpgradeTask(Long id);
|
||||
|
||||
/**
|
||||
* 分页查询OTA升级任务
|
||||
*
|
||||
* @param pageReqVO OTA升级任务的分页查询请求对象,包含查询条件和分页信息
|
||||
* @return 分页查询结果,包含OTA升级任务列表和总记录数
|
||||
*/
|
||||
PageResult<IotOtaTaskDO> getUpgradeTaskPage(@Valid IotOtaUpgradeTaskPageReqVO pageReqVO);
|
||||
|
||||
/**
|
||||
* 根据任务状态获取升级任务列表
|
||||
*
|
||||
* @param state 任务状态,用于筛选符合条件的升级任务
|
||||
* @return 返回符合指定状态的升级任务列表,列表中的元素为 IotOtaUpgradeTaskDO 对象
|
||||
*/
|
||||
List<IotOtaTaskDO> getUpgradeTaskByState(Integer state);
|
||||
|
||||
/**
|
||||
* 更新升级任务的状态。
|
||||
* <p>
|
||||
* 该函数用于根据任务ID更新指定升级任务的状态。通常用于在任务执行过程中
|
||||
* 更新任务的状态,例如从“进行中”变为“已完成”或“失败”。
|
||||
*
|
||||
* @param id 升级任务的唯一标识符,类型为Long。不能为null。
|
||||
* @param status 要更新的任务状态,类型为Integer。通常表示任务的状态码,如0表示未开始,1表示进行中,2表示已完成等。
|
||||
*/
|
||||
void updateUpgradeTaskStatus(Long id, Integer status);
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user