From f59df1f1c874246a42610fccab193b7b796b47b9 Mon Sep 17 00:00:00 2001 From: xueqingkun <xueqingkun@126.com> Date: Wed, 31 Jan 2024 16:32:02 +0800 Subject: [PATCH] =?UTF-8?q?manage=20=EF=BC=9A=E6=B7=BB=E5=8A=A0=20renameIf?= =?UTF-8?q?Necessary?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../file/MaterialLibraryManageController.java | 5 +- .../service/MaterialLibraryManageService.java | 5 +- .../MaterialLibraryManageServiceImpl.java | 89 +++++++++++++++---- .../supervision/model/MaterialLibrary.java | 10 +-- 4 files changed, 82 insertions(+), 27 deletions(-) diff --git a/virtual-patient-manage/src/main/java/com/supervision/manage/controller/file/MaterialLibraryManageController.java b/virtual-patient-manage/src/main/java/com/supervision/manage/controller/file/MaterialLibraryManageController.java index aa3879f7..4de37bce 100644 --- a/virtual-patient-manage/src/main/java/com/supervision/manage/controller/file/MaterialLibraryManageController.java +++ b/virtual-patient-manage/src/main/java/com/supervision/manage/controller/file/MaterialLibraryManageController.java @@ -21,10 +21,9 @@ public class MaterialLibraryManageController { @ApiOperation("上传素材") @PostMapping("/uploadMaterial") public String uploadMaterial(@ApiParam("文件") @RequestParam("file") MultipartFile multipartFile, - @ApiParam("素材名,长度小于64") @RequestParam("materialName") String materialName, - @ApiParam("素材类型 0:图片 1:视频 2:音频") @RequestParam("materialType") String materialType) throws Exception { + MaterialLibrary materialLibrary) throws Exception { - return materialLibraryManageService.uploadMaterial(multipartFile, materialName, materialType); + return materialLibraryManageService.uploadMaterial(multipartFile,materialLibrary); } diff --git a/virtual-patient-manage/src/main/java/com/supervision/manage/service/MaterialLibraryManageService.java b/virtual-patient-manage/src/main/java/com/supervision/manage/service/MaterialLibraryManageService.java index 1db12193..96dfef84 100644 --- a/virtual-patient-manage/src/main/java/com/supervision/manage/service/MaterialLibraryManageService.java +++ b/virtual-patient-manage/src/main/java/com/supervision/manage/service/MaterialLibraryManageService.java @@ -10,11 +10,10 @@ public interface MaterialLibraryManageService { /** * 上传素材库文件 * @param multipartFile 文件内容 - * @param materialName 素材名 - * @param materialType 素材类型 + * @param materialLibrary 素材内容 * @return 素材id */ - String uploadMaterial(MultipartFile multipartFile, String materialName, String materialType) throws Exception; + String uploadMaterial(MultipartFile multipartFile, MaterialLibrary materialLibrary) throws Exception; IPage<MaterialLibrary> queryMaterialPage(String materialType, String materialName, String directoryId,Integer pageNum, Integer pageSize); 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 15c5c554..72807f6f 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 @@ -1,5 +1,6 @@ package com.supervision.manage.service.impl; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.lang.Assert; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.AbstractWrapper; @@ -15,8 +16,11 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile; +import java.util.ArrayList; import java.util.List; import java.util.Objects; +import java.util.regex.Matcher; +import java.util.regex.Pattern; @Service @RequiredArgsConstructor @@ -27,30 +31,85 @@ public class MaterialLibraryManageServiceImpl implements MaterialLibraryManageSe private final FileManageService fileManageService; @Override @Transactional(rollbackFor = Exception.class) - public String uploadMaterial(MultipartFile multipartFile, String materialName, String materialType) throws Exception { + public String uploadMaterial(MultipartFile multipartFile,MaterialLibrary materialLibrary) throws Exception { // 校验素材名是否已经存在 - Assert.notEmpty(materialName, "素材名不能为空"); - Assert.notEmpty(materialType, "素材类型不能为空"); - List<String> split = StrUtil.split(materialName, "."); - Integer count = materialLibraryService.lambdaQuery().likeRight(MaterialLibrary::getMaterialName, split.get(0)).count(); + Assert.notEmpty(materialLibrary.getMaterialName(), "素材名不能为空"); + Assert.notEmpty(materialLibrary.getMaterialType(), "素材类型不能为空"); + + materialLibrary.setMaterialName(renameIfNecessary(materialLibrary.getMaterialName())); + // 保存素材 + FileResource fileResource = fileManageService.uploadFile(multipartFile, multipartFile.getContentType()); + materialLibrary.setFileResourceId(fileResource.getId()); + materialLibraryService.save(materialLibrary); + return materialLibrary.getId(); + } + + + /** + * 重命名文件名 + * @param materialName 素材名字 + * @return 新的文件名 + */ + private String renameIfNecessary(String materialName) { + int count = countMaterialName(materialName); if (count > 0){ // 重新命名文件 + String excludeSuffix = stringExcludeSuffix(materialName); + List<String> split = StrUtil.split(materialName, "."); if (split.size() > 1){ - materialName = split.get(0) + "(" + count + ")" + "." + split.get(split.size()-1); + materialName = excludeSuffix + "(" + count + ")" + "." + split.get(split.size()-1); }else{ - materialName = materialName + "(" + count + ")"; + materialName = excludeSuffix + "(" + count + ")"; } } + return materialName; + } - // 保存素材 - FileResource fileResource = fileManageService.uploadFile(multipartFile, multipartFile.getContentType()); + /** + * 统计素材库中已有的相同素材名字的数量 + * @param materialName 素材名字 + * @return 数量 + */ + private int countMaterialName(String materialName) { + + String cleanedName = stringExcludeSuffix(materialName); + + List<MaterialLibrary> materialLibraryList = materialLibraryService.lambdaQuery().likeRight(MaterialLibrary::getMaterialName,cleanedName).list(); + + int count = 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(); + } - MaterialLibrary materialLibrary = new MaterialLibrary(); - materialLibrary.setFileResourceId(fileResource.getId()); - materialLibrary.setMaterialType(materialType); - materialLibrary.setMaterialName(materialName); - materialLibraryService.save(materialLibrary); - return materialLibrary.getId(); + if (lastEnd > 0) { + modifiedText = name.substring(0, previousEnd) + name.substring(lastEnd); + } else { + modifiedText = name; + } + if (StrUtil.equals(modifiedText,materialName)){ + count ++ ; + } + } + return count; + } + + private static String stringExcludeSuffix(String materialName) { + List<String> split = StrUtil.split(materialName, "."); + ArrayList<String> tmpList = CollUtil.newArrayList(split); + if(split.size() > 1){ + tmpList.remove(split.size()-1); + } + return String.join(".",tmpList); } @Override diff --git a/virtual-patient-model/src/main/java/com/supervision/model/MaterialLibrary.java b/virtual-patient-model/src/main/java/com/supervision/model/MaterialLibrary.java index 4e25de82..1e0146c0 100644 --- a/virtual-patient-model/src/main/java/com/supervision/model/MaterialLibrary.java +++ b/virtual-patient-model/src/main/java/com/supervision/model/MaterialLibrary.java @@ -24,21 +24,19 @@ public class MaterialLibrary implements Serializable { /** * 文件资源id 对应vp_file_resource的主键 */ + @ApiModelProperty("文件资源id") private String fileResourceId; /** * 素材名称;不采用vp_file_resource中的file_name字段 */ + @ApiModelProperty("素材名称 必填") private String materialName; - /** - * 素材类型 0:图片 1:视频 2:音频 - */ + @ApiModelProperty("素材类型 0:图片 1:视频 2:音频 必填") private String materialType; - /** - * 目录id - */ + @ApiModelProperty("目录id") private String directoryId; /**