Commit 416486bf47e5513af6adcc8eb62f2f5a360d660d

Authored by YunaiV
2 parents d20d820d 11a8fc8e

Merge remote-tracking branch 'origin/master-jdk17' into master-jdk17

yudao-module-infra/src/main/java/cn/iocoder/yudao/module/infra/controller/app/file/AppFileController.java
@@ -35,7 +35,6 @@ public class AppFileController { @@ -35,7 +35,6 @@ public class AppFileController {
35 @Operation(summary = "上传文件") 35 @Operation(summary = "上传文件")
36 @Parameter(name = "file", description = "文件附件", required = true, 36 @Parameter(name = "file", description = "文件附件", required = true,
37 schema = @Schema(type = "string", format = "binary")) 37 schema = @Schema(type = "string", format = "binary"))
38 - @PermitAll  
39 public CommonResult<String> uploadFile(@Valid AppFileUploadReqVO uploadReqVO) throws Exception { 38 public CommonResult<String> uploadFile(@Valid AppFileUploadReqVO uploadReqVO) throws Exception {
40 MultipartFile file = uploadReqVO.getFile(); 39 MultipartFile file = uploadReqVO.getFile();
41 byte[] content = IoUtil.readBytes(file.getInputStream()); 40 byte[] content = IoUtil.readBytes(file.getInputStream());
@@ -57,7 +56,6 @@ public class AppFileController { @@ -57,7 +56,6 @@ public class AppFileController {
57 56
58 @PostMapping("/create") 57 @PostMapping("/create")
59 @Operation(summary = "创建文件", description = "模式二:前端上传文件:配合 presigned-url 接口,记录上传了上传的文件") 58 @Operation(summary = "创建文件", description = "模式二:前端上传文件:配合 presigned-url 接口,记录上传了上传的文件")
60 - @PermitAll  
61 public CommonResult<Long> createFile(@Valid @RequestBody FileCreateReqVO createReqVO) { 59 public CommonResult<Long> createFile(@Valid @RequestBody FileCreateReqVO createReqVO) {
62 return success(fileService.createFile(createReqVO)); 60 return success(fileService.createFile(createReqVO));
63 } 61 }
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/ota/IotOtaFirmwareController.java
@@ -12,6 +12,7 @@ import cn.iocoder.yudao.module.iot.dal.dataobject.product.IotProductDO; @@ -12,6 +12,7 @@ import cn.iocoder.yudao.module.iot.dal.dataobject.product.IotProductDO;
12 import cn.iocoder.yudao.module.iot.service.ota.IotOtaFirmwareService; 12 import cn.iocoder.yudao.module.iot.service.ota.IotOtaFirmwareService;
13 import cn.iocoder.yudao.module.iot.service.product.IotProductService; 13 import cn.iocoder.yudao.module.iot.service.product.IotProductService;
14 import io.swagger.v3.oas.annotations.Operation; 14 import io.swagger.v3.oas.annotations.Operation;
  15 +import io.swagger.v3.oas.annotations.Parameter;
15 import io.swagger.v3.oas.annotations.tags.Tag; 16 import io.swagger.v3.oas.annotations.tags.Tag;
16 import jakarta.annotation.Resource; 17 import jakarta.annotation.Resource;
17 import jakarta.validation.Valid; 18 import jakarta.validation.Valid;
@@ -47,6 +48,15 @@ public class IotOtaFirmwareController { @@ -47,6 +48,15 @@ public class IotOtaFirmwareController {
47 return success(true); 48 return success(true);
48 } 49 }
49 50
  51 + @DeleteMapping("/delete")
  52 + @Operation(summary = "删除 OTA 固件")
  53 + @Parameter(name = "id", description = "固件编号", required = true, example = "1024")
  54 + @PreAuthorize("@ss.hasPermission('iot:ota-firmware:delete')")
  55 + public CommonResult<Boolean> deleteOtaFirmware(@RequestParam("id") Long id) {
  56 + otaFirmwareService.deleteOtaFirmware(id);
  57 + return success(true);
  58 + }
  59 +
50 @GetMapping("/get") 60 @GetMapping("/get")
51 @Operation(summary = "获得 OTA 固件") 61 @Operation(summary = "获得 OTA 固件")
52 @PreAuthorize("@ss.hasPermission('iot:ota-firmware:query')") 62 @PreAuthorize("@ss.hasPermission('iot:ota-firmware:query')")
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/mysql/ota/IotOtaTaskMapper.java
@@ -5,6 +5,7 @@ import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; @@ -5,6 +5,7 @@ import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
5 import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; 5 import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
6 import cn.iocoder.yudao.module.iot.controller.admin.ota.vo.task.IotOtaTaskPageReqVO; 6 import cn.iocoder.yudao.module.iot.controller.admin.ota.vo.task.IotOtaTaskPageReqVO;
7 import cn.iocoder.yudao.module.iot.dal.dataobject.ota.IotOtaTaskDO; 7 import cn.iocoder.yudao.module.iot.dal.dataobject.ota.IotOtaTaskDO;
  8 +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
8 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; 9 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
9 import org.apache.ibatis.annotations.Mapper; 10 import org.apache.ibatis.annotations.Mapper;
10 11
@@ -16,6 +17,12 @@ public interface IotOtaTaskMapper extends BaseMapperX&lt;IotOtaTaskDO&gt; { @@ -16,6 +17,12 @@ public interface IotOtaTaskMapper extends BaseMapperX&lt;IotOtaTaskDO&gt; {
16 IotOtaTaskDO::getName, name); 17 IotOtaTaskDO::getName, name);
17 } 18 }
18 19
  20 + default Long selectCountByFirmwareIdAndStatus(Long firmwareId, Integer status) {
  21 + return selectCount(new LambdaQueryWrapper<IotOtaTaskDO>()
  22 + .eq(IotOtaTaskDO::getFirmwareId, firmwareId)
  23 + .eq(IotOtaTaskDO::getStatus, status));
  24 + }
  25 +
19 default PageResult<IotOtaTaskDO> selectPage(IotOtaTaskPageReqVO pageReqVO) { 26 default PageResult<IotOtaTaskDO> selectPage(IotOtaTaskPageReqVO pageReqVO) {
20 return selectPage(pageReqVO, new LambdaQueryWrapperX<IotOtaTaskDO>() 27 return selectPage(pageReqVO, new LambdaQueryWrapperX<IotOtaTaskDO>()
21 .eqIfPresent(IotOtaTaskDO::getFirmwareId, pageReqVO.getFirmwareId()) 28 .eqIfPresent(IotOtaTaskDO::getFirmwareId, pageReqVO.getFirmwareId())
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/enums/ErrorCodeConstants.java
@@ -66,6 +66,8 @@ public interface ErrorCodeConstants { @@ -66,6 +66,8 @@ public interface ErrorCodeConstants {
66 66
67 ErrorCode OTA_FIRMWARE_NOT_EXISTS = new ErrorCode(1_050_008_000, "固件信息不存在"); 67 ErrorCode OTA_FIRMWARE_NOT_EXISTS = new ErrorCode(1_050_008_000, "固件信息不存在");
68 ErrorCode OTA_FIRMWARE_PRODUCT_VERSION_DUPLICATE = new ErrorCode(1_050_008_001, "产品版本号重复"); 68 ErrorCode OTA_FIRMWARE_PRODUCT_VERSION_DUPLICATE = new ErrorCode(1_050_008_001, "产品版本号重复");
  69 + ErrorCode OTA_FIRMWARE_DELETE_FAIL_TASK_IN_PROGRESS = new ErrorCode(1_050_008_002,
  70 + "删除 OTA 固件失败,原因:存在进行中的升级任务");
69 71
70 // ========== OTA 升级任务相关 1-050-008-100 ========== 72 // ========== OTA 升级任务相关 1-050-008-100 ==========
71 73
@@ -105,4 +107,4 @@ public interface ErrorCodeConstants { @@ -105,4 +107,4 @@ public interface ErrorCodeConstants {
105 // ========== IoT 告警记录 1-050-014-000 ========== 107 // ========== IoT 告警记录 1-050-014-000 ==========
106 ErrorCode ALERT_RECORD_NOT_EXISTS = new ErrorCode(1_050_014_000, "IoT 告警记录不存在"); 108 ErrorCode ALERT_RECORD_NOT_EXISTS = new ErrorCode(1_050_014_000, "IoT 告警记录不存在");
107 109
108 -}  
109 \ No newline at end of file 110 \ No newline at end of file
  111 +}
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/ota/IotOtaFirmwareService.java
@@ -36,6 +36,13 @@ public interface IotOtaFirmwareService { @@ -36,6 +36,13 @@ public interface IotOtaFirmwareService {
36 void updateOtaFirmware(@Valid IotOtaFirmwareUpdateReqVO updateReqVO); 36 void updateOtaFirmware(@Valid IotOtaFirmwareUpdateReqVO updateReqVO);
37 37
38 /** 38 /**
  39 + * 删除 OTA 固件信息
  40 + *
  41 + * @param id 固件编号
  42 + */
  43 + void deleteOtaFirmware(Long id);
  44 +
  45 + /**
39 * 获取 OTA 固件信息 46 * 获取 OTA 固件信息
40 * 47 *
41 * @param id 固件编号 48 * @param id 固件编号
yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/ota/IotOtaFirmwareServiceImpl.java
@@ -10,6 +10,8 @@ import cn.iocoder.yudao.module.iot.controller.admin.ota.vo.firmware.IotOtaFirmwa @@ -10,6 +10,8 @@ import cn.iocoder.yudao.module.iot.controller.admin.ota.vo.firmware.IotOtaFirmwa
10 import cn.iocoder.yudao.module.iot.controller.admin.ota.vo.firmware.IotOtaFirmwareUpdateReqVO; 10 import cn.iocoder.yudao.module.iot.controller.admin.ota.vo.firmware.IotOtaFirmwareUpdateReqVO;
11 import cn.iocoder.yudao.module.iot.dal.dataobject.ota.IotOtaFirmwareDO; 11 import cn.iocoder.yudao.module.iot.dal.dataobject.ota.IotOtaFirmwareDO;
12 import cn.iocoder.yudao.module.iot.dal.mysql.ota.IotOtaFirmwareMapper; 12 import cn.iocoder.yudao.module.iot.dal.mysql.ota.IotOtaFirmwareMapper;
  13 +import cn.iocoder.yudao.module.iot.dal.mysql.ota.IotOtaTaskMapper;
  14 +import cn.iocoder.yudao.module.iot.enums.ota.IotOtaTaskStatusEnum;
13 import cn.iocoder.yudao.module.iot.service.product.IotProductService; 15 import cn.iocoder.yudao.module.iot.service.product.IotProductService;
14 import jakarta.annotation.Resource; 16 import jakarta.annotation.Resource;
15 import lombok.extern.slf4j.Slf4j; 17 import lombok.extern.slf4j.Slf4j;
@@ -23,6 +25,7 @@ import java.util.Collections; @@ -23,6 +25,7 @@ import java.util.Collections;
23 import java.util.List; 25 import java.util.List;
24 26
25 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; 27 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
  28 +import static cn.iocoder.yudao.module.iot.enums.ErrorCodeConstants.OTA_FIRMWARE_DELETE_FAIL_TASK_IN_PROGRESS;
26 import static cn.iocoder.yudao.module.iot.enums.ErrorCodeConstants.OTA_FIRMWARE_NOT_EXISTS; 29 import static cn.iocoder.yudao.module.iot.enums.ErrorCodeConstants.OTA_FIRMWARE_NOT_EXISTS;
27 import static cn.iocoder.yudao.module.iot.enums.ErrorCodeConstants.OTA_FIRMWARE_PRODUCT_VERSION_DUPLICATE; 30 import static cn.iocoder.yudao.module.iot.enums.ErrorCodeConstants.OTA_FIRMWARE_PRODUCT_VERSION_DUPLICATE;
28 31
@@ -38,6 +41,8 @@ public class IotOtaFirmwareServiceImpl implements IotOtaFirmwareService { @@ -38,6 +41,8 @@ public class IotOtaFirmwareServiceImpl implements IotOtaFirmwareService {
38 41
39 @Resource 42 @Resource
40 private IotOtaFirmwareMapper otaFirmwareMapper; 43 private IotOtaFirmwareMapper otaFirmwareMapper;
  44 + @Resource
  45 + private IotOtaTaskMapper otaTaskMapper;
41 @Lazy 46 @Lazy
42 @Resource 47 @Resource
43 private IotProductService productService; 48 private IotProductService productService;
@@ -75,6 +80,19 @@ public class IotOtaFirmwareServiceImpl implements IotOtaFirmwareService { @@ -75,6 +80,19 @@ public class IotOtaFirmwareServiceImpl implements IotOtaFirmwareService {
75 } 80 }
76 81
77 @Override 82 @Override
  83 + public void deleteOtaFirmware(Long id) {
  84 + // 1.1 校验存在
  85 + validateFirmwareExists(id);
  86 + // 1.2 校验是否有进行中的升级任务
  87 + if (otaTaskMapper.selectCountByFirmwareIdAndStatus(id, IotOtaTaskStatusEnum.IN_PROGRESS.getStatus()) > 0) {
  88 + throw exception(OTA_FIRMWARE_DELETE_FAIL_TASK_IN_PROGRESS);
  89 + }
  90 +
  91 + // 2. 删除
  92 + otaFirmwareMapper.deleteById(id);
  93 + }
  94 +
  95 + @Override
78 public IotOtaFirmwareDO getOtaFirmware(Long id) { 96 public IotOtaFirmwareDO getOtaFirmware(Long id) {
79 return otaFirmwareMapper.selectById(id); 97 return otaFirmwareMapper.selectById(id);
80 } 98 }