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

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

View File

@ -41,41 +41,88 @@ public class SysPackageController {
/**
* 上传最新安装包及版本
*/
@Transactional
@GetMapping("/uploadNewVersion")
public R<SysPackage> uploadNewVersion(String version, String type, MultipartFile file) {
String originalFileName = "apk/package/app-release.apk";
//覆盖失败,先删除文件
LambdaQueryWrapper<SysPackage> lambdaQueryWrapper =new LambdaQueryWrapper<>();
// 先查询最新记录
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){
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<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);
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<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);
// }
/**
* 删除 现在指向的是同一个文件