From d0f967d58a34dd2bcb30a2dcead1c5edd20f1ff0 Mon Sep 17 00:00:00 2001 From: lihongjie0209 Date: Thu, 11 Jan 2024 15:55:38 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=AF=E6=8C=81=E6=89=B9=E9=87=8F=E7=A7=BB?= =?UTF-8?q?=E5=8A=A8=E6=96=87=E4=BB=B6/=E6=96=87=E4=BB=B6=E5=A4=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cn/lihongjie/coal/filter/AuthFilter.java | 2 +- .../lihongjie/coal/netDisk/dto/MoveDto.java | 3 +- .../coal/netDisk/dto/PreCreateFileDto.java | 2 + .../coal/netDisk/service/NetDiskService.java | 104 ++++++++++++------ 4 files changed, 75 insertions(+), 36 deletions(-) diff --git a/src/main/java/cn/lihongjie/coal/filter/AuthFilter.java b/src/main/java/cn/lihongjie/coal/filter/AuthFilter.java index cfe4438b..cf9eb032 100644 --- a/src/main/java/cn/lihongjie/coal/filter/AuthFilter.java +++ b/src/main/java/cn/lihongjie/coal/filter/AuthFilter.java @@ -100,7 +100,7 @@ public class AuthFilter extends OncePerRequestFilter { return; } - String sessionId = request.getHeader(Constants.HTTP_HEADER_TOKEN); + String sessionId = StringUtils.defaultIfEmpty(request.getHeader(Constants.HTTP_HEADER_TOKEN), request.getParameter(Constants.HTTP_HEADER_TOKEN)); Optional resource = resourceService.findUrlFromCache(getRequestURI(request)); diff --git a/src/main/java/cn/lihongjie/coal/netDisk/dto/MoveDto.java b/src/main/java/cn/lihongjie/coal/netDisk/dto/MoveDto.java index bf577bff..07308d82 100644 --- a/src/main/java/cn/lihongjie/coal/netDisk/dto/MoveDto.java +++ b/src/main/java/cn/lihongjie/coal/netDisk/dto/MoveDto.java @@ -7,8 +7,7 @@ import java.util.*; @Data public class MoveDto { - private String srcId; - private String newName; + private List srcIds; private String targetId; diff --git a/src/main/java/cn/lihongjie/coal/netDisk/dto/PreCreateFileDto.java b/src/main/java/cn/lihongjie/coal/netDisk/dto/PreCreateFileDto.java index a0432f96..af4b9a8d 100644 --- a/src/main/java/cn/lihongjie/coal/netDisk/dto/PreCreateFileDto.java +++ b/src/main/java/cn/lihongjie/coal/netDisk/dto/PreCreateFileDto.java @@ -19,4 +19,6 @@ public class PreCreateFileDto { private Long sliceSize; + + } diff --git a/src/main/java/cn/lihongjie/coal/netDisk/service/NetDiskService.java b/src/main/java/cn/lihongjie/coal/netDisk/service/NetDiskService.java index b6cf759e..f865d836 100644 --- a/src/main/java/cn/lihongjie/coal/netDisk/service/NetDiskService.java +++ b/src/main/java/cn/lihongjie/coal/netDisk/service/NetDiskService.java @@ -2,6 +2,7 @@ package cn.lihongjie.coal.netDisk.service; import cn.lihongjie.coal.base.dto.CommonQuery; import cn.lihongjie.coal.base.dto.IdRequest; +import cn.lihongjie.coal.base.mapper.CommonMapper; import cn.lihongjie.coal.base.service.BaseService; import cn.lihongjie.coal.common.Ctx; import cn.lihongjie.coal.common.TreeUtils; @@ -28,6 +29,7 @@ import lombok.Cleanup; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.compress.archivers.zip.ZipArchiveEntry; import org.apache.commons.compress.archivers.zip.ZipArchiveOutputStream; import org.apache.commons.io.IOUtils; @@ -52,12 +54,15 @@ import java.nio.charset.StandardCharsets; import java.util.*; import java.util.function.Consumer; import java.util.function.Supplier; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import java.util.stream.Collectors; @Service @Slf4j @Transactional public class NetDiskService extends BaseService { + @Autowired private CommonMapper commonMapper; public static final int DEFAULT_SLICE_SIZE = 10 * 1024 * 1024; @Autowired ObjectMapper objectMapper; @Autowired OSSClient ossClient; @@ -279,6 +284,36 @@ public class NetDiskService extends BaseService x.getName().equals(name))) { + + Pattern pattern = Pattern.compile(Pattern.quote(name) + "\\((\\d+)\\)"); + + int index = + disk.getChildren().stream() + .map(x -> x.getName()) + .mapToInt( + x -> { + Matcher matcher = pattern.matcher(x); + + if (matcher.find()) { + return commonMapper.toInt(matcher.group(1)); + } else { + return 0; + } + }) + .max() + .orElse(1); + + return name + "(" + (index + 1) + ")"; + } + + return name; + } + private void validateDirName(String name) { if (StringUtils.isEmpty(name) || StringUtils.isBlank(name)) { @@ -294,7 +329,7 @@ public class NetDiskService extends BaseService { - if (x.getId().equals(target.getId())) { - throw new BizException("不能移动到自己的子目录"); - } - }); - if (!target.getEntryType().equals("0")) { throw new BizException("只能移动到目录"); } - if (target.getChildren() != null - && target.getChildren().stream() - .filter(x -> x.getName().equals(src.getName())) - .count() - > 0) { - throw new BizException("目标目录已经存在同名文件/文件夹"); + var srcParentIds = new HashSet(); + for (String srcId : request.getSrcIds()) { + + NetDiskEntity src = get(srcId); + + TreeUtils.allChildren(src, NetDiskEntity::getChildren) + .forEach( + x -> { + if (x.getId().equals(target.getId())) { + throw new BizException("不能移动到自己的子目录"); + } + }); + + if (target.getChildren() != null + && target.getChildren().stream() + .filter(x -> x.getName().equals(src.getName())) + .count() + > 0) { + throw new BizException("目标目录已经存在同名文件/文件夹"); + } + + src.setParent(target); + + this.save(src); + + if (src.getParent() != null) { + + srcParentIds.add(src.getParent().getId()); + } } - src.setParent(target); + if (CollectionUtils.isNotEmpty(srcParentIds)) { - this.save(src); - - if (src.getParent() != null) { - - updateDirSize(src.getParent().getId()); + srcParentIds.forEach(this::updateDirSize); } - if (target.getParent() != null) { updateDirSize(target.getParent().getId()); } - return this.mapper.toDto(src); + return null; } public NetDiskDto copy(CopyDto request) { @@ -784,7 +823,7 @@ public class NetDiskService extends BaseService sha256 = repository.findAllBySha256(request.getSha256()); @@ -910,16 +949,15 @@ public class NetDiskService extends BaseService