From 0bee939e9ed28cdfaa2d5f2b7368416ea38c1536 Mon Sep 17 00:00:00 2001 From: xueqingkun Date: Thu, 1 Feb 2024 09:39:12 +0800 Subject: [PATCH] =?UTF-8?q?manage=20=EF=BC=9ArenameIfNecessary=20=E8=AE=BE?= =?UTF-8?q?=E7=BD=AE=E5=91=BD=E5=90=8D=E8=A7=84=E5=88=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../MaterialLibraryManageServiceImpl.java | 195 ++++++++++++------ 1 file changed, 130 insertions(+), 65 deletions(-) diff --git a/virtual-patient-manage/src/main/java/com/supervision/manage/service/impl/MaterialLibraryManageServiceImpl.java b/virtual-patient-manage/src/main/java/com/supervision/manage/service/impl/MaterialLibraryManageServiceImpl.java index e814c228..b24f3318 100644 --- a/virtual-patient-manage/src/main/java/com/supervision/manage/service/impl/MaterialLibraryManageServiceImpl.java +++ b/virtual-patient-manage/src/main/java/com/supervision/manage/service/impl/MaterialLibraryManageServiceImpl.java @@ -12,6 +12,7 @@ import com.supervision.model.FileResource; import com.supervision.model.MaterialLibrary; import com.supervision.service.MaterialLibraryService; import lombok.RequiredArgsConstructor; +import org.apache.commons.lang3.tuple.Triple; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile; @@ -44,6 +45,46 @@ public class MaterialLibraryManageServiceImpl implements MaterialLibraryManageSe return materialLibrary.getId(); } + @Override + public IPage queryMaterialPage(String materialType, String materialName, String directoryId, + Integer pageNum, Integer pageSize) { + + AbstractWrapper wrapper = materialLibraryService.lambdaQuery() + .eq(StrUtil.isNotEmpty(materialType), MaterialLibrary::getMaterialType, materialType) + .eq(StrUtil.isNotEmpty(directoryId), MaterialLibrary::getDirectoryId, directoryId) + .like(StrUtil.isNotEmpty(materialName), MaterialLibrary::getMaterialName, materialName).getWrapper(); + + return materialLibraryService.page(new Page<>(pageNum, pageSize),wrapper); + } + + @Override + @Transactional + public boolean deleteMaterial(String id) throws Exception { + + Assert.notEmpty(id, "id不能为空"); + MaterialLibrary materialLibrary = materialLibraryService.getById(id); + if (Objects.isNull(materialLibrary)){ + return false; + } + + boolean removed = materialLibraryService.removeById(id); + if (removed){ + removed = fileManageService.deleteFile(materialLibrary.getFileResourceId()); + } + return removed; + } + + @Override + public boolean updateMaterial(MaterialLibrary materialLibrary) { + + Assert.notEmpty(materialLibrary.getId(), "id不能为空"); + Assert.notEmpty(materialLibrary.getMaterialName(), "素材名不能为空"); + + // 校验是否重名 + Integer count = materialLibraryService.lambdaQuery().eq(MaterialLibrary::getMaterialName, materialLibrary.getMaterialName()).count(); + Assert.isTrue(count == 0, "素材名已存在"); + return materialLibraryService.updateById(materialLibrary); + } /** * 重命名文件名 @@ -54,12 +95,10 @@ public class MaterialLibraryManageServiceImpl implements MaterialLibraryManageSe int count = countMaterialName(materialName); if (count > 0){ // 重新命名文件 - String excludeSuffix = stringExcludeSuffix(materialName); - List split = StrUtil.split(materialName, "."); - if (split.size() > 1){ - materialName = excludeSuffix + "(" + count + ")" + "." + split.get(split.size()-1); - }else{ - materialName = excludeSuffix + "(" + count + ")"; + Triple materialNameAnalyzed = analyzeFileName(materialName); + materialName = materialNameAnalyzed.getLeft() + "(" + (count + 1) + ")"; + if (StrUtil.isNotEmpty(materialNameAnalyzed.getRight())){ + materialName = materialName + "."+ materialNameAnalyzed.getRight(); } } return materialName; @@ -72,84 +111,110 @@ public class MaterialLibraryManageServiceImpl implements MaterialLibraryManageSe */ private int countMaterialName(String materialName) { - String cleanedName = stringExcludeSuffix(materialName); - - List materialLibraryList = materialLibraryService.lambdaQuery().likeRight(MaterialLibrary::getMaterialName,cleanedName).list(); + Triple materialNameAnalyzed = analyzeFileName(materialName); + List materialLibraryList = materialLibraryService.lambdaQuery().likeRight(MaterialLibrary::getMaterialName,materialNameAnalyzed.getLeft()).list(); - int count = 0; + int i = 0; for (MaterialLibrary materialLibrary : materialLibraryList) { - String name = materialLibrary.getMaterialName(); - String regex = "\\(\\d+\\)"; - Pattern pattern = Pattern.compile(regex); - Matcher matcher = pattern.matcher(name); - String modifiedText; - int previousEnd = 0; - int lastEnd = 0; - - while (matcher.find()) { - previousEnd = matcher.start(); - lastEnd = matcher.end(); + Triple materialLibraryAnalyzed = analyzeFileName(materialLibrary.getMaterialName()); + if (StrUtil.equals(materialLibraryAnalyzed.getLeft(),materialNameAnalyzed.getLeft()) + && StrUtil.equals(materialLibraryAnalyzed.getRight(),materialNameAnalyzed.getRight())){ + + Integer middle = materialLibraryAnalyzed.getMiddle(); + if (middle == null){ + middle = 1; + } + i = i > middle ? i : middle; } - if (lastEnd > 0) { - modifiedText = name.substring(0, previousEnd) + name.substring(lastEnd); - } else { - modifiedText = name; - } - if (StrUtil.equals(modifiedText,materialName)){ - count ++ ; - } } - return count; + return i; } - private static String stringExcludeSuffix(String materialName) { - List split = StrUtil.split(materialName, "."); - ArrayList tmpList = CollUtil.newArrayList(split); - if(split.size() > 1){ - tmpList.remove(split.size()-1); + private Triple analyzeFileName(String fileName){ + if (StrUtil.isEmpty(fileName)){ + return Triple.of(null,null,null); } - return String.join(".",tmpList); - } - @Override - public IPage queryMaterialPage(String materialType, String materialName, String directoryId, - Integer pageNum, Integer pageSize) { + return Triple.of(restoreFileName(lookPrefix(fileName)), + lookMiddle(fileName),lookSuffix(fileName)); - AbstractWrapper wrapper = materialLibraryService.lambdaQuery() - .eq(StrUtil.isNotEmpty(materialType), MaterialLibrary::getMaterialType, materialType) - .eq(StrUtil.isNotEmpty(directoryId), MaterialLibrary::getDirectoryId, directoryId) - .like(StrUtil.isNotEmpty(materialName), MaterialLibrary::getMaterialName, materialName).getWrapper(); - - return materialLibraryService.page(new Page<>(pageNum, pageSize),wrapper); } - @Override - @Transactional - public boolean deleteMaterial(String id) throws Exception { + private String lookSuffix(String fileName) { + if (StrUtil.isEmpty(fileName)){ + return null; + } - Assert.notEmpty(id, "id不能为空"); - MaterialLibrary materialLibrary = materialLibraryService.getById(id); - if (Objects.isNull(materialLibrary)){ - return false; + List split = StrUtil.split(fileName, "."); + if (split.size() > 1){ + return split.get(split.size()-1); } + return null; + } - boolean removed = materialLibraryService.removeById(id); - if (removed){ - removed = fileManageService.deleteFile(materialLibrary.getFileResourceId()); + private String lookPrefix(String fileName) { + if (StrUtil.isEmpty(fileName)) { + return null; } - return removed; + List split = StrUtil.split(fileName, "."); + if (split.size() > 1) { + ArrayList tmpArray = CollUtil.newArrayList(split); + tmpArray.remove(tmpArray.size() - 1); + return StrUtil.join(".",tmpArray); + } + // 没有后缀 + return fileName; } - @Override - public boolean updateMaterial(MaterialLibrary materialLibrary) { + private Integer lookMiddle(String fileName){ + if (StrUtil.isEmpty(fileName)){ + return null; + } + String regex = "\\(\\d+\\)"; + Pattern pattern = Pattern.compile(regex); + String cleanedName = lookPrefix(fileName); + Matcher matcher = pattern.matcher(cleanedName); + int previousEnd = 0; + int lastEnd = 0; + while (matcher.find()) { + previousEnd = matcher.start(); + lastEnd = matcher.end(); + } + Integer i = null; + if (lastEnd > 0) { + i = Integer.parseInt(cleanedName.substring(previousEnd + 1, lastEnd - 1)); + } + return i; - Assert.notEmpty(materialLibrary.getId(), "id不能为空"); - Assert.notEmpty(materialLibrary.getMaterialName(), "素材名不能为空"); + } - // 校验是否重名 - Integer count = materialLibraryService.lambdaQuery().eq(MaterialLibrary::getMaterialName, materialLibrary.getMaterialName()).count(); - Assert.isTrue(count == 0, "素材名已存在"); - return materialLibraryService.updateById(materialLibrary); + /** + * 重置文件名 去除最后一个(n) + * @param name 文件名 + * @return 重置后的文件名 + */ + private static String restoreFileName(String name) { + if (StrUtil.isEmpty(name)) { + return name; + } + String regex = "\\(\\d+\\)"; + Pattern pattern = Pattern.compile(regex); + Matcher matcher = pattern.matcher(name); + String modifiedText; + int previousEnd = 0; + int lastEnd = 0; + + while (matcher.find()) { + previousEnd = matcher.start(); + lastEnd = matcher.end(); + } + + if (lastEnd > 0) { + modifiedText = name.substring(0, previousEnd) + name.substring(lastEnd); + } else { + modifiedText = name; + } + return modifiedText; } }