From 26129e743302d96840a7e59e76a88e9116b4fa4f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B1=88=E5=B1=95=E8=88=AA?= <2426745133@qq.com> Date: Sat, 11 Oct 2025 14:49:08 +0800 Subject: [PATCH] =?UTF-8?q?10-11-=E5=AE=89=E8=A3=85=E5=8C=85=E4=B8=8A?= =?UTF-8?q?=E4=BC=A0=EF=BC=8C=E4=BA=8B=E5=8A=A1=E5=88=86=E7=A6=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/controller/SysPackageController.java | 91 ++++++++++++++----- 1 file changed, 69 insertions(+), 22 deletions(-) diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/app/controller/SysPackageController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/app/controller/SysPackageController.java index 03b94588..00d204f7 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/app/controller/SysPackageController.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/app/controller/SysPackageController.java @@ -41,41 +41,88 @@ public class SysPackageController { /** * 上传最新安装包及版本 */ - @Transactional @GetMapping("/uploadNewVersion") public R uploadNewVersion(String version, String type, MultipartFile file) { String originalFileName = "apk/package/app-release.apk"; - //覆盖失败,先删除文件 - LambdaQueryWrapper lambdaQueryWrapper =new LambdaQueryWrapper<>(); + // 先查询最新记录 + LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); lambdaQueryWrapper.orderByDesc(SysPackage::getCreateTime); List list = sysPackageService.list(lambdaQueryWrapper); - if (list != null && !list.isEmpty()){ - SysPackage first = list.getFirst(); - Boolean b = sysOssService.deleteWithValidByIds(List.of(first.getFileId()), false); - if (!b){ - log.error("通过IDS删除文件失败"); - } - } + // 分离事务:先处理文件上传 SysOssVo upload = sysOssService.upload(file, originalFileName); - if (upload == null){ + if (upload == null) { return R.fail("上传失败"); } - SysPackage sysPackage = new SysPackage(); - sysPackage.setVersion( version); - sysPackage.setFileId(upload.getOssId()); - sysPackage.setFileUrl(upload.getUrl()); - sysPackage.setType(type); - boolean save = sysPackageService.save(sysPackage); - if (!save){ - return R.fail("保存失败"); - } - - return R.ok(sysPackage); + // 分离事务:再处理数据库操作 + return handleDatabaseOperations(version, type, upload, list); } + @Transactional + public R handleDatabaseOperations(String version, String type, SysOssVo upload, List existingPackages) { + try { + // 先删除旧文件记录 + if (existingPackages != null && !existingPackages.isEmpty()) { + SysPackage first = existingPackages.getFirst(); + Boolean b = sysOssService.deleteWithValidByIds(List.of(first.getFileId()), false); + if (!b) { + log.error("通过IDS删除文件失败"); + } + } + + // 保存新记录 + SysPackage sysPackage = new SysPackage(); + sysPackage.setVersion(version); + sysPackage.setFileId(upload.getOssId()); + sysPackage.setFileUrl(upload.getUrl()); + sysPackage.setType(type); + + boolean save = sysPackageService.save(sysPackage); + if (!save) { + return R.fail("保存失败"); + } + + return R.ok(sysPackage); + } catch (Exception e) { + log.error("数据库操作失败", e); + throw e; // 重新抛出异常触发事务回滚 + } + } +// public R uploadNewVersion(String version, String type, MultipartFile file) { +// String originalFileName = "apk/package/app-release.apk"; +// +// //覆盖失败,先删除文件 +// LambdaQueryWrapper lambdaQueryWrapper =new LambdaQueryWrapper<>(); +// lambdaQueryWrapper.orderByDesc(SysPackage::getCreateTime); +// List list = sysPackageService.list(lambdaQueryWrapper); +// if (list != null && !list.isEmpty()){ +// SysPackage first = list.getFirst(); +// Boolean b = sysOssService.deleteWithValidByIds(List.of(first.getFileId()), false); +// if (!b){ +// log.error("通过IDS删除文件失败"); +// } +// } +// +// SysOssVo upload = sysOssService.upload(file, originalFileName); +// if (upload == null){ +// return R.fail("上传失败"); +// } +// SysPackage sysPackage = new SysPackage(); +// sysPackage.setVersion( version); +// sysPackage.setFileId(upload.getOssId()); +// sysPackage.setFileUrl(upload.getUrl()); +// sysPackage.setType(type); +// +// boolean save = sysPackageService.save(sysPackage); +// if (!save){ +// return R.fail("保存失败"); +// } +// +// return R.ok(sysPackage); +// } + /** * 删除 现在指向的是同一个文件