代码提交

This commit is contained in:
lilin 2025-06-03 15:43:11 +08:00
parent fbb207077e
commit 27a36ce938

View File

@ -23,7 +23,9 @@ import com.amazonaws.services.s3.model.ObjectMetadata;
import com.amazonaws.services.s3.model.S3Object;
import com.amazonaws.services.s3.model.S3ObjectInputStream;
import com.amazonaws.util.IOUtils;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@ -930,6 +932,8 @@ public class TsFilesServiceImpl extends ServiceImpl<TsFilesMapper, TsFiles> impl
public String deleteTsFilesByIds(List<String> dataset, String type) {
List<TsFiles> filesList = tsFilesMapper.selectBatchIds(dataset);
//新增一个查询 判断下面有没有备份路径 如果有就不能删除
//todo 删除的时候成功以后 删除redis
for (int page = 1; page <= 5; page++) {
String redisKey = "tsfiles_" + filesList.get(0).getTaskId() + "_" + filesList.get(0).getNodeId() + "_parentId" + filesList.get(0).getParentId() + "_page_" + page;
@ -939,7 +943,7 @@ public class TsFilesServiceImpl extends ServiceImpl<TsFilesMapper, TsFiles> impl
int LocalSuccessCount = 0, LocalFailCount = 0, Localtotal = CollUtil.size(dataset);
//Todo 最直接的办法 循环出来 一条一条删除
//Todo 最直接的办法 循环出来 一条一条删除 如果是文件夹 要递归下面所有的文件和文件夹进行删除
for (TsFiles files : filesList) {
@ -988,16 +992,14 @@ public class TsFilesServiceImpl extends ServiceImpl<TsFilesMapper, TsFiles> impl
}
if (totalCount > 1) {
//return ResponseResult.success("批量删除 " + totalCount + " 个, 删除成功 " + deleteSuccessCount + " 个, 失败 " + deleteFailCount + " 个.");
LOGGER.error("批量删除 " + totalCount + " 个, 删除成功 " + deleteSuccessCount + " 个, 失败 " + deleteFailCount + " 个.");
} else {
//return totalCount == deleteSuccessCount ? ResponseResult.success("删除成功") : ResponseResult.error("删除失败");
LOGGER.error("批量删除 " + totalCount + " 个, 删除成功 " + deleteSuccessCount + " 个, 失败 " + deleteFailCount + " 个.");
}
//如果是1 说明成功删除
if (deleteSuccessCount >= 1) {
int valueDelete = deleteFolder(files.getId(), type);
int valueDelete = deleteFolderAndSubFiles(files.getId(), type);
if (valueDelete > 0) {
LocalSuccessCount = valueDelete;
LOGGER.info("表结构成功删除");
@ -1076,51 +1078,98 @@ public class TsFilesServiceImpl extends ServiceImpl<TsFilesMapper, TsFiles> impl
return "Local批量删除 " + Localtotal + " 个, 删除成功 " + LocalSuccessCount + " 个, 失败 " + LocalFailCount + " 个.";
}
// 调用删除方法并返回删除数量
public int deleteFolder(String folderId, String type) {
return deleteFolderAndSubFiles(folderId, type); // 返回删除的记录数量
}
// // 调用删除方法并返回删除数量
// public int deleteFolder(String folderId, String type) {
// return deleteFolderAndSubFiles(folderId, type); // 返回删除的记录数量
// }
// 递归删除文件夹及其子文件并返回删除的记录数量
public int deleteFolderAndSubFiles(String folderId, String type) {
int deletedCount = 0; // 记录删除的数量
// 查询该文件夹下的所有子文件
QueryWrapper<TsFiles> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("parent_id", folderId); // 根据父ID查询所有子文件
List<TsFiles> subFiles = tsFilesMapper.selectList(queryWrapper);
// 递归删除子文件
for (TsFiles subFile : subFiles) {
// 递归调用删除子文件的逻辑
deletedCount += deleteFolderAndSubFiles(subFile.getId(), type); // 累加删除数量
//判断是删除本地还是minio
//判断是删除本地还是minio 先通过父ID修改所有的 然后通过父ID查询下面所有的文件夹 进行递归
if ("local".equals(type)) {
//删除本地的时候判断minio路径是否为空 如果为空直接删除 如果不为空把workPath修改成空
if (StringUtils.isNotEmpty(subFile.getBackupPath())) {
subFile.setWorkPath("");
tsFilesMapper.updateById(subFile);
} else {
// 删除子文件记录从数据库中删除
tsFilesMapper.deleteById(subFile.getId());
}
//如果是本地 先先吧所有的work_path修改成空 然后删除所有work_path和backup_path为空的数据
LambdaUpdateWrapper<TsFiles> updateWrapper1 = new LambdaUpdateWrapper<>();
updateWrapper1.eq(TsFiles::getParentId, folderId).set(TsFiles::getWorkPath, "");
int updatedCount = tsFilesMapper.update(null, updateWrapper1);
LOGGER.info("本地更新操作:将 {} 条记录的 work_path 设置为空", updatedCount);
// 批量删除备份路径和工作路径为空的数据 条件是父ID等于folderId
LambdaQueryWrapper<TsFiles> deleteWrapper = new LambdaQueryWrapper<>();
deleteWrapper.eq(TsFiles::getParentId, folderId)
.and(wrapper -> wrapper.isNull(TsFiles::getBackupPath).or().eq(TsFiles::getBackupPath, ""))
.and(wrapper -> wrapper.isNull(TsFiles::getWorkPath).or().eq(TsFiles::getWorkPath, ""));
int deletedCounts = tsFilesMapper.delete(deleteWrapper);
LOGGER.info("本地删除操作:成功删除了 {} 条 work_path 和 backup_path 都为空的记录", deletedCounts);
deletedCount += deletedCounts;
} else {
//删除minio的时候判断本地路径是否为空 如果为空直接删除 如果不为空把BackupPath修改成空
if (StringUtils.isNotEmpty(subFile.getWorkPath())) {
subFile.setBackupPath("");
tsFilesMapper.updateById(subFile);
} else {
// 删除子文件记录从数据库中删除
tsFilesMapper.deleteById(subFile.getId());
//如果是minio 先先吧所有的backup_path修改成空 然后删除所有work_path和backup_path为空的数据
LambdaUpdateWrapper<TsFiles> updateWrapper1 = new LambdaUpdateWrapper<>();
updateWrapper1.eq(TsFiles::getParentId, folderId).set(TsFiles::getBackupPath, "");
int updatedCount = tsFilesMapper.update(null, updateWrapper1);
LOGGER.info("minio更新操作将 {} 条记录的 work_path 设置为空", updatedCount);
// 批量删除备份路径和工作路径为空的数据 条件是父ID等于folderId
LambdaQueryWrapper<TsFiles> deleteWrapper = new LambdaQueryWrapper<>();
deleteWrapper.eq(TsFiles::getParentId, folderId)
.and(wrapper -> wrapper.isNull(TsFiles::getBackupPath).or().eq(TsFiles::getBackupPath, ""))
.and(wrapper -> wrapper.isNull(TsFiles::getWorkPath).or().eq(TsFiles::getWorkPath, ""));
int deletedCounts = tsFilesMapper.delete(deleteWrapper);
LOGGER.info("minio删除操作成功删除了 {} 条 work_path 和 backup_path 都为空的记录", deletedCounts);
deletedCount += deletedCounts;
}
// 查询该文件夹下的所有子文件夹
QueryWrapper<TsFiles> queryWrapperFolder = new QueryWrapper<>();
queryWrapperFolder.eq("parent_id", folderId); // 根据父ID查询所有子文件
queryWrapperFolder.eq("is_file", "FOLDER");//查询所有的文件夹
List<TsFiles> subFolder = tsFilesMapper.selectList(queryWrapperFolder);
if (subFolder.size() > 0) {
for (TsFiles subFile : subFolder) {
deletedCount += deleteFolderAndSubFiles(subFile.getId(), type); // 累加删除数量
}
}
deletedCount++; // 每删除一个文件数量加1
}
// 递归删除子文件
// for (TsFiles subFile : subFiles) {
// // 递归调用删除子文件的逻辑
// deletedCount += deleteFolderAndSubFiles(subFile.getId(), type); // 累加删除数量
//
// //判断是删除本地还是minio
// if ("local".equals(type)) {
// //删除本地的时候判断minio路径是否为空 如果为空直接删除 如果不为空把workPath修改成空
// if (StringUtils.isNotEmpty(subFile.getBackupPath())) {
// subFile.setWorkPath("");
// tsFilesMapper.updateById(subFile);
// } else {
// // 删除子文件记录从数据库中删除
// tsFilesMapper.deleteById(subFile.getId());
// }
//
// } else {
// //删除minio的时候判断本地路径是否为空 如果为空直接删除 如果不为空把BackupPath修改成空
// if (StringUtils.isNotEmpty(subFile.getWorkPath())) {
// subFile.setBackupPath("");
// tsFilesMapper.updateById(subFile);
// } else {
// // 删除子文件记录从数据库中删除
// tsFilesMapper.deleteById(subFile.getId());
// }
// }
// deletedCount++; // 每删除一个文件数量加1
// }
//删除修改自身
TsFiles tsFilesData = tsFilesMapper.selectById(folderId);
if (tsFilesData != null) {
//判断是删除本地还是minio
if ("local".equals(type)) {
//删除本地的时候判断minio路径是否为空 如果为空直接删除 如果不为空把workPath修改成空
@ -1143,6 +1192,8 @@ public class TsFilesServiceImpl extends ServiceImpl<TsFilesMapper, TsFiles> impl
}
}
deletedCount++; // 删除文件夹本身数量加1
}
return deletedCount; // 返回删除的数量
}