10-11-安装包上传,事务分离

This commit is contained in:
2025-10-11 14:49:08 +08:00
parent 9d586f7b77
commit 26129e7433

View File

@ -41,27 +41,38 @@ public class SysPackageController {
/** /**
* 上传最新安装包及版本 * 上传最新安装包及版本
*/ */
@Transactional
@GetMapping("/uploadNewVersion") @GetMapping("/uploadNewVersion")
public R<SysPackage> uploadNewVersion(String version, String type, MultipartFile file) { public R<SysPackage> uploadNewVersion(String version, String type, MultipartFile file) {
String originalFileName = "apk/package/app-release.apk"; String originalFileName = "apk/package/app-release.apk";
//覆盖失败,先删除文件 // 先查询最新记录
LambdaQueryWrapper<SysPackage> lambdaQueryWrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<SysPackage> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.orderByDesc(SysPackage::getCreateTime); lambdaQueryWrapper.orderByDesc(SysPackage::getCreateTime);
List<SysPackage> list = sysPackageService.list(lambdaQueryWrapper); List<SysPackage> list = sysPackageService.list(lambdaQueryWrapper);
if (list != null && !list.isEmpty()){
SysPackage first = list.getFirst(); // 分离事务:先处理文件上传
SysOssVo upload = sysOssService.upload(file, originalFileName);
if (upload == null) {
return R.fail("上传失败");
}
// 分离事务:再处理数据库操作
return handleDatabaseOperations(version, type, upload, list);
}
@Transactional
public R<SysPackage> handleDatabaseOperations(String version, String type, SysOssVo upload, List<SysPackage> existingPackages) {
try {
// 先删除旧文件记录
if (existingPackages != null && !existingPackages.isEmpty()) {
SysPackage first = existingPackages.getFirst();
Boolean b = sysOssService.deleteWithValidByIds(List.of(first.getFileId()), false); Boolean b = sysOssService.deleteWithValidByIds(List.of(first.getFileId()), false);
if (!b) { if (!b) {
log.error("通过IDS删除文件失败"); log.error("通过IDS删除文件失败");
} }
} }
SysOssVo upload = sysOssService.upload(file, originalFileName); // 保存新记录
if (upload == null){
return R.fail("上传失败");
}
SysPackage sysPackage = new SysPackage(); SysPackage sysPackage = new SysPackage();
sysPackage.setVersion(version); sysPackage.setVersion(version);
sysPackage.setFileId(upload.getOssId()); sysPackage.setFileId(upload.getOssId());
@ -74,7 +85,43 @@ public class SysPackageController {
} }
return R.ok(sysPackage); return R.ok(sysPackage);
} catch (Exception e) {
log.error("数据库操作失败", e);
throw e; // 重新抛出异常触发事务回滚
} }
}
// public R<SysPackage> uploadNewVersion(String version, String type, MultipartFile file) {
// String originalFileName = "apk/package/app-release.apk";
//
// //覆盖失败,先删除文件
// LambdaQueryWrapper<SysPackage> lambdaQueryWrapper =new LambdaQueryWrapper<>();
// lambdaQueryWrapper.orderByDesc(SysPackage::getCreateTime);
// List<SysPackage> 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);
// }
/** /**