fix:优化回收站全量删除
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
package com.sdm.data.schedule;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.sdm.common.entity.enums.DataTypeEnum;
|
||||
import com.sdm.data.model.entity.FileMetadataExtension;
|
||||
import com.sdm.data.model.entity.FileMetadataInfo;
|
||||
import com.sdm.data.model.entity.FileSimulationMapping;
|
||||
@@ -23,6 +24,7 @@ import org.springframework.stereotype.Component;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
/**
|
||||
* 回收站自动清理定时任务
|
||||
@@ -66,18 +68,19 @@ public class RecycleBinCleanupSchedule {
|
||||
try {
|
||||
LocalDateTime now = LocalDateTime.now();
|
||||
|
||||
// 查询所有已过期的回收站项
|
||||
// 查询所有已过期的回收站项(仅查询顶层节点,避免重复删除子项)
|
||||
List<FileMetadataInfo> expiredItems = fileMetadataInfoService.lambdaQuery()
|
||||
.isNotNull(FileMetadataInfo::getDeletedAt)
|
||||
.le(FileMetadataInfo::getRecycleExpireAt, now)
|
||||
.apply("(parentId IS NULL OR EXISTS (SELECT 1 FROM file_metadata_info p WHERE p.id = file_metadata_info.parentId AND p.deletedAt IS NULL))")
|
||||
.list();
|
||||
|
||||
if (CollectionUtils.isEmpty(expiredItems)) {
|
||||
log.info("回收站中没有已过期的文件/目录");
|
||||
log.info("回收站中没有已过期的顶层文件/目录");
|
||||
return;
|
||||
}
|
||||
|
||||
log.info("发现 {} 个已过期的回收站项,开始物理删除", expiredItems.size());
|
||||
log.info("发现 {} 个已过期的回收站顶层项,开始物理删除", expiredItems.size());
|
||||
|
||||
int successCount = 0;
|
||||
int failCount = 0;
|
||||
@@ -85,7 +88,7 @@ public class RecycleBinCleanupSchedule {
|
||||
for (FileMetadataInfo item : expiredItems) {
|
||||
try {
|
||||
// 如果是目录,需要递归删除所有子项
|
||||
if (item.getDataType() != null && item.getDataType() == 1) { // 1表示目录
|
||||
if (Objects.equals(DataTypeEnum.DIRECTORY.getValue(), item.getDataType())) {
|
||||
minioFileIDataFileService.executeDirectoryDeletion(
|
||||
item.getId(),
|
||||
item.getObjectKey(),
|
||||
|
||||
@@ -4817,11 +4817,11 @@ public class MinioFileIDataFileServiceImpl implements IDataFileService {
|
||||
List<Long> ids = req.getIds();
|
||||
if (CollectionUtils.isEmpty(ids)) {
|
||||
Long userId = ThreadLocalContext.getUserId();
|
||||
// 查询回收站中的顶层节点(避免对子节点重复触发递归删除)
|
||||
// 查询当前租户回收站中的顶层节点(避免对子节点重复触发递归删除)
|
||||
List<FileMetadataInfo> list = fileMetadataInfoService.lambdaQuery()
|
||||
.eq(FileMetadataInfo::getCreatorId, userId)
|
||||
.eq(FileMetadataInfo::getTenantId, ThreadLocalContext.getTenantId())
|
||||
.isNotNull(FileMetadataInfo::getDeletedAt)
|
||||
.apply("(parentId IS NULL OR NOT EXISTS (SELECT 1 FROM file_metadata_info p WHERE p.id = file_metadata_info.parentId AND p.deletedAt IS NOT NULL))")
|
||||
.apply("(parentId IS NULL OR EXISTS (SELECT 1 FROM file_metadata_info p WHERE p.id = file_metadata_info.parentId AND p.deletedAt IS NULL))")
|
||||
.list();
|
||||
if (CollectionUtils.isEmpty(list)) {
|
||||
return SdmResponse.success("回收站为空");
|
||||
|
||||
Reference in New Issue
Block a user