manage :renameIfNecessary 设置命名规则

dev_2.1.0
xueqingkun 1 year ago
parent 9f83e9eefb
commit 0bee939e9e

@ -12,6 +12,7 @@ import com.supervision.model.FileResource;
import com.supervision.model.MaterialLibrary; import com.supervision.model.MaterialLibrary;
import com.supervision.service.MaterialLibraryService; import com.supervision.service.MaterialLibraryService;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.apache.commons.lang3.tuple.Triple;
import org.springframework.stereotype.Service; 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;
@ -44,6 +45,46 @@ public class MaterialLibraryManageServiceImpl implements MaterialLibraryManageSe
return materialLibrary.getId(); return materialLibrary.getId();
} }
@Override
public IPage<MaterialLibrary> 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); int count = countMaterialName(materialName);
if (count > 0){ if (count > 0){
// 重新命名文件 // 重新命名文件
String excludeSuffix = stringExcludeSuffix(materialName); Triple<String, Integer, String> materialNameAnalyzed = analyzeFileName(materialName);
List<String> split = StrUtil.split(materialName, "."); materialName = materialNameAnalyzed.getLeft() + "(" + (count + 1) + ")";
if (split.size() > 1){ if (StrUtil.isNotEmpty(materialNameAnalyzed.getRight())){
materialName = excludeSuffix + "(" + count + ")" + "." + split.get(split.size()-1); materialName = materialName + "."+ materialNameAnalyzed.getRight();
}else{
materialName = excludeSuffix + "(" + count + ")";
} }
} }
return materialName; return materialName;
@ -72,84 +111,110 @@ public class MaterialLibraryManageServiceImpl implements MaterialLibraryManageSe
*/ */
private int countMaterialName(String materialName) { private int countMaterialName(String materialName) {
String cleanedName = stringExcludeSuffix(materialName); Triple<String, Integer, String> materialNameAnalyzed = analyzeFileName(materialName);
List<MaterialLibrary> materialLibraryList = materialLibraryService.lambdaQuery().likeRight(MaterialLibrary::getMaterialName,materialNameAnalyzed.getLeft()).list();
List<MaterialLibrary> materialLibraryList = materialLibraryService.lambdaQuery().likeRight(MaterialLibrary::getMaterialName,cleanedName).list();
int count = 0; int i = 0;
for (MaterialLibrary materialLibrary : materialLibraryList) { for (MaterialLibrary materialLibrary : materialLibraryList) {
String name = materialLibrary.getMaterialName(); Triple<String, Integer, String> materialLibraryAnalyzed = analyzeFileName(materialLibrary.getMaterialName());
String regex = "\\(\\d+\\)"; if (StrUtil.equals(materialLibraryAnalyzed.getLeft(),materialNameAnalyzed.getLeft())
Pattern pattern = Pattern.compile(regex); && StrUtil.equals(materialLibraryAnalyzed.getRight(),materialNameAnalyzed.getRight())){
Matcher matcher = pattern.matcher(name);
String modifiedText; Integer middle = materialLibraryAnalyzed.getMiddle();
int previousEnd = 0; if (middle == null){
int lastEnd = 0; middle = 1;
}
while (matcher.find()) { i = i > middle ? i : middle;
previousEnd = matcher.start();
lastEnd = matcher.end();
} }
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) { private Triple<String,Integer,String> analyzeFileName(String fileName){
List<String> split = StrUtil.split(materialName, "."); if (StrUtil.isEmpty(fileName)){
ArrayList<String> tmpList = CollUtil.newArrayList(split); return Triple.of(null,null,null);
if(split.size() > 1){
tmpList.remove(split.size()-1);
} }
return String.join(".",tmpList);
}
@Override return Triple.of(restoreFileName(lookPrefix(fileName)),
public IPage<MaterialLibrary> queryMaterialPage(String materialType, String materialName, String directoryId, lookMiddle(fileName),lookSuffix(fileName));
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 private String lookSuffix(String fileName) {
@Transactional if (StrUtil.isEmpty(fileName)){
public boolean deleteMaterial(String id) throws Exception { return null;
}
Assert.notEmpty(id, "id不能为空"); List<String> split = StrUtil.split(fileName, ".");
MaterialLibrary materialLibrary = materialLibraryService.getById(id); if (split.size() > 1){
if (Objects.isNull(materialLibrary)){ return split.get(split.size()-1);
return false;
} }
return null;
}
boolean removed = materialLibraryService.removeById(id); private String lookPrefix(String fileName) {
if (removed){ if (StrUtil.isEmpty(fileName)) {
removed = fileManageService.deleteFile(materialLibrary.getFileResourceId()); return null;
} }
return removed; List<String> split = StrUtil.split(fileName, ".");
if (split.size() > 1) {
ArrayList<String> tmpArray = CollUtil.newArrayList(split);
tmpArray.remove(tmpArray.size() - 1);
return StrUtil.join(".",tmpArray);
}
// 没有后缀
return fileName;
} }
@Override private Integer lookMiddle(String fileName){
public boolean updateMaterial(MaterialLibrary materialLibrary) { 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(); * (n)
Assert.isTrue(count == 0, "素材名已存在"); * @param name
return materialLibraryService.updateById(materialLibrary); * @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;
} }
} }

Loading…
Cancel
Save