From dc666897c6f692153fc2f404651c1cac5e442cfd Mon Sep 17 00:00:00 2001 From: gaoxq <376340421@qq.com> Date: Fri, 3 Apr 2026 16:52:05 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E5=85=B1=E4=BA=AB=E5=8E=BB=E9=87=8D=20+?= =?UTF-8?q?=20=E5=85=B1=E4=BA=AB=E6=96=87=E4=BB=B6=E5=A4=B9=E5=86=85?= =?UTF-8?q?=E5=AE=B9=E5=8F=AF=E6=9F=A5=E7=9C=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/filesystem/service/FileService.java | 38 +++++++++++++++---- 1 file changed, 31 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/filesystem/service/FileService.java b/src/main/java/com/filesystem/service/FileService.java index 7344f06..3b1e117 100644 --- a/src/main/java/com/filesystem/service/FileService.java +++ b/src/main/java/com/filesystem/service/FileService.java @@ -344,9 +344,13 @@ public class FileService { new LambdaQueryWrapper().eq(FileShare::getShareToUserId, userId) ); + // 按 fileId 去重,只保留一条记录 return shares.stream() .map(share -> fileMapper.selectById(share.getFileId())) .filter(f -> f != null && f.getIsDeleted() == 0) + .collect(Collectors.toMap(FileEntity::getId, f -> f, (a, b) -> a)) + .values() + .stream() .collect(Collectors.toList()); } @@ -358,7 +362,7 @@ public class FileService { return new ArrayList<>(); } - // 检查是否有共享权限 + // 检查是否有共享权限(当前用户是被共享的对象) List shares = fileShareMapper.selectList( new LambdaQueryWrapper() .eq(FileShare::getFileId, folderId) @@ -369,13 +373,33 @@ public class FileService { return new ArrayList<>(); } - // 返回该文件夹内的文件 - LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); - wrapper.eq(FileEntity::getFolderId, folderId) - .eq(FileEntity::getIsDeleted, 0) - .isNull(FileEntity::getDeletedAt); + // 用文件夹原主人的 ID 查询子文件(属于文件夹所有者的文件) + Long ownerId = folder.getUserId(); + + // 返回该文件夹内的文件(包括自己上传的和别人共享进来的) + // 属于 owner 的文件:用 ownerId 查 + LambdaQueryWrapper ownerWrapper = new LambdaQueryWrapper<>(); + ownerWrapper.eq(FileEntity::getFolderId, folderId) + .eq(FileEntity::getUserId, ownerId) + .eq(FileEntity::getIsDeleted, 0); - return fileMapper.selectList(wrapper); + List results = new ArrayList<>(fileMapper.selectList(ownerWrapper)); + + // 属于当前用户的文件(通过共享进入的子文件夹),去掉 deleted 条件 + LambdaQueryWrapper userWrapper = new LambdaQueryWrapper<>(); + userWrapper.eq(FileEntity::getFolderId, folderId) + .ne(FileEntity::getUserId, ownerId) + .eq(FileEntity::getIsDeleted, 0); + List sharedChildren = fileMapper.selectList(userWrapper); + + for (FileEntity child : sharedChildren) { + // 只有当前用户有权访问的才加入(直接共享或通过父文件夹共享) + if (canAccessFile(child.getId(), userId)) { + results.add(child); + } + } + + return results; } catch (Exception e) { return new ArrayList<>(); }