manage :添加 renameIfNecessary

dev_2.1.0
xueqingkun 1 year ago
parent 303dea8a8a
commit f59df1f1c8

@ -21,10 +21,9 @@ public class MaterialLibraryManageController {
@ApiOperation("上传素材") @ApiOperation("上传素材")
@PostMapping("/uploadMaterial") @PostMapping("/uploadMaterial")
public String uploadMaterial(@ApiParam("文件") @RequestParam("file") MultipartFile multipartFile, public String uploadMaterial(@ApiParam("文件") @RequestParam("file") MultipartFile multipartFile,
@ApiParam("素材名长度小于64") @RequestParam("materialName") String materialName, MaterialLibrary materialLibrary) throws Exception {
@ApiParam("素材类型 0:图片 1:视频 2:音频") @RequestParam("materialType") String materialType) throws Exception {
return materialLibraryManageService.uploadMaterial(multipartFile, materialName, materialType); return materialLibraryManageService.uploadMaterial(multipartFile,materialLibrary);
} }

@ -10,11 +10,10 @@ public interface MaterialLibraryManageService {
/** /**
* *
* @param multipartFile * @param multipartFile
* @param materialName * @param materialLibrary
* @param materialType
* @return id * @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); IPage<MaterialLibrary> queryMaterialPage(String materialType, String materialName, String directoryId,Integer pageNum, Integer pageSize);

@ -1,5 +1,6 @@
package com.supervision.manage.service.impl; package com.supervision.manage.service.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.lang.Assert; import cn.hutool.core.lang.Assert;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.AbstractWrapper; 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.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Objects; import java.util.Objects;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@Service @Service
@RequiredArgsConstructor @RequiredArgsConstructor
@ -27,30 +31,85 @@ public class MaterialLibraryManageServiceImpl implements MaterialLibraryManageSe
private final FileManageService fileManageService; private final FileManageService fileManageService;
@Override @Override
@Transactional(rollbackFor = Exception.class) @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(materialLibrary.getMaterialName(), "素材名不能为空");
Assert.notEmpty(materialType, "素材类型不能为空"); Assert.notEmpty(materialLibrary.getMaterialType(), "素材类型不能为空");
List<String> split = StrUtil.split(materialName, ".");
Integer count = materialLibraryService.lambdaQuery().likeRight(MaterialLibrary::getMaterialName, split.get(0)).count(); 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){ if (count > 0){
// 重新命名文件 // 重新命名文件
String excludeSuffix = stringExcludeSuffix(materialName);
List<String> split = StrUtil.split(materialName, ".");
if (split.size() > 1){ if (split.size() > 1){
materialName = split.get(0) + "(" + count + ")" + "." + split.get(split.size()-1); materialName = excludeSuffix + "(" + count + ")" + "." + split.get(split.size()-1);
}else{ }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(); if (lastEnd > 0) {
materialLibrary.setFileResourceId(fileResource.getId()); modifiedText = name.substring(0, previousEnd) + name.substring(lastEnd);
materialLibrary.setMaterialType(materialType); } else {
materialLibrary.setMaterialName(materialName); modifiedText = name;
materialLibraryService.save(materialLibrary); }
return materialLibrary.getId(); 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 @Override

@ -24,21 +24,19 @@ public class MaterialLibrary implements Serializable {
/** /**
* id vp_file_resource * id vp_file_resource
*/ */
@ApiModelProperty("文件资源id")
private String fileResourceId; private String fileResourceId;
/** /**
* ;vp_file_resourcefile_name * ;vp_file_resourcefile_name
*/ */
@ApiModelProperty("素材名称 必填")
private String materialName; private String materialName;
/** @ApiModelProperty("素材类型 0:图片 1:视频 2:音频 必填")
* 0: 1: 2:
*/
private String materialType; private String materialType;
/** @ApiModelProperty("目录id")
* id
*/
private String directoryId; private String directoryId;
/** /**

Loading…
Cancel
Save