From 77eb106826c3571df84b52a0cd6f0806ee20d8d8 Mon Sep 17 00:00:00 2001 From: gulongcheng <474084054@qq.com> Date: Thu, 12 Feb 2026 16:43:57 +0800 Subject: [PATCH] =?UTF-8?q?fix:=E4=BC=98=E5=8C=96=E5=9B=9E=E6=94=B6?= =?UTF-8?q?=E7=AB=99=E5=85=A8=E9=87=8F=E5=88=A0=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sdm/data/schedule/RecycleBinCleanupSchedule.java | 11 +++++++---- .../service/impl/MinioFileIDataFileServiceImpl.java | 6 +++--- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/data/src/main/java/com/sdm/data/schedule/RecycleBinCleanupSchedule.java b/data/src/main/java/com/sdm/data/schedule/RecycleBinCleanupSchedule.java index c0bab95d..6ff4cb2f 100644 --- a/data/src/main/java/com/sdm/data/schedule/RecycleBinCleanupSchedule.java +++ b/data/src/main/java/com/sdm/data/schedule/RecycleBinCleanupSchedule.java @@ -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 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(), diff --git a/data/src/main/java/com/sdm/data/service/impl/MinioFileIDataFileServiceImpl.java b/data/src/main/java/com/sdm/data/service/impl/MinioFileIDataFileServiceImpl.java index 62b33b12..1d1eea12 100644 --- a/data/src/main/java/com/sdm/data/service/impl/MinioFileIDataFileServiceImpl.java +++ b/data/src/main/java/com/sdm/data/service/impl/MinioFileIDataFileServiceImpl.java @@ -4817,11 +4817,11 @@ public class MinioFileIDataFileServiceImpl implements IDataFileService { List ids = req.getIds(); if (CollectionUtils.isEmpty(ids)) { Long userId = ThreadLocalContext.getUserId(); - // 查询回收站中的顶层节点(避免对子节点重复触发递归删除) + // 查询当前租户回收站中的顶层节点(避免对子节点重复触发递归删除) List 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("回收站为空");