10-11-安装包上传,事务分离
This commit is contained in:
@ -41,41 +41,88 @@ 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();
|
|
||||||
Boolean b = sysOssService.deleteWithValidByIds(List.of(first.getFileId()), false);
|
|
||||||
if (!b){
|
|
||||||
log.error("通过IDS删除文件失败");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
// 分离事务:先处理文件上传
|
||||||
SysOssVo upload = sysOssService.upload(file, originalFileName);
|
SysOssVo upload = sysOssService.upload(file, originalFileName);
|
||||||
if (upload == null){
|
if (upload == null) {
|
||||||
return R.fail("上传失败");
|
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 handleDatabaseOperations(version, type, upload, list);
|
||||||
return R.fail("保存失败");
|
|
||||||
}
|
|
||||||
|
|
||||||
return R.ok(sysPackage);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@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);
|
||||||
|
// }
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 删除 现在指向的是同一个文件
|
* 删除 现在指向的是同一个文件
|
||||||
|
|||||||
Reference in New Issue
Block a user