diff --git a/r-pan-api/r-pan-api-services/src/main/java/com/rubin/rpan/services/modules/file/service/impl/UserFileServiceImpl.java b/r-pan-api/r-pan-api-services/src/main/java/com/rubin/rpan/services/modules/file/service/impl/UserFileServiceImpl.java index c1f5eb8d613762c07d43337d150d75448a902681..de866c6bcf30c0a9b66c987db271843b03c4dde8 100644 --- a/r-pan-api/r-pan-api-services/src/main/java/com/rubin/rpan/services/modules/file/service/impl/UserFileServiceImpl.java +++ b/r-pan-api/r-pan-api-services/src/main/java/com/rubin/rpan/services/modules/file/service/impl/UserFileServiceImpl.java @@ -600,24 +600,35 @@ public class UserFileServiceImpl implements IUserFileService { if (noDuplicateFileNameFlag) { return; } + String pattern = Pattern.quote(newFileNameWithoutSuffix+FileConstant.CN_LEFT_PARENTHESES_STR)+"[1-9][0-9]*"+Pattern.quote(FileConstant.CN_RIGHT_PARENTHESES_STR+newFileNameSuffix); + Pattern r = Pattern.compile(pattern); List duplicateFileNameList = rPanUserFileVOList.stream() .map(RPanUserFileVO::getFilename) - .filter(fileName -> fileName.startsWith(newFileNameWithoutSuffix)) .filter(fileName -> { - int pointPosition = fileName.lastIndexOf(CommonConstant.POINT_STR); - String fileNameSuffix = CommonConstant.EMPTY_STR; - if (pointPosition != CommonConstant.MINUS_ONE_INT) { - fileNameSuffix = FileUtil.getFileSuffix(fileName); - } - return Objects.equals(newFileNameSuffix, fileNameSuffix); + Matcher m = r.matcher(fileName); + return m.matches(); }) .collect(Collectors.toList()); - if (CollectionUtils.isEmpty(duplicateFileNameList)) { + Set duplicateFileNameIds = new HashSet<>(); + for (String fileName:duplicateFileNameList) { + int pointPositionLeft = fileName.lastIndexOf(FileConstant.CN_LEFT_PARENTHESES_STR); + int pointPositionRight = fileName.lastIndexOf(FileConstant.CN_RIGHT_PARENTHESES_STR); + Integer id = Integer.parseInt(fileName.substring(pointPositionLeft + CommonConstant.ONE_INT, pointPositionRight)); + duplicateFileNameIds.add(id); + } + if (CollectionUtils.isEmpty(duplicateFileNameIds)) { return; } + int firstNum = duplicateFileNameIds.size() + CommonConstant.ONE_INT; + for (int i = CommonConstant.ONE_INT; i <= duplicateFileNameIds.size(); i++) { + if (!duplicateFileNameIds.contains(i)){ + firstNum = i; + break; + } + } newFileName = new StringBuilder(newFileNameWithoutSuffix) .append(FileConstant.CN_LEFT_PARENTHESES_STR) - .append((duplicateFileNameList.size())) + .append((firstNum)) .append(FileConstant.CN_RIGHT_PARENTHESES_STR) .append(newFileNameSuffix) .toString();