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.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<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);
if (count > 0){
// 重新命名文件
String excludeSuffix = stringExcludeSuffix(materialName);
List<String> split = StrUtil.split(materialName, ".");
if (split.size() > 1){
materialName = excludeSuffix + "(" + count + ")" + "." + split.get(split.size()-1);
}else{
materialName = excludeSuffix + "(" + count + ")";
Triple<String, Integer, String> 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<MaterialLibrary> materialLibraryList = materialLibraryService.lambdaQuery().likeRight(MaterialLibrary::getMaterialName,cleanedName).list();
Triple<String, Integer, String> materialNameAnalyzed = analyzeFileName(materialName);
List<MaterialLibrary> 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<String, Integer, String> 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<String> split = StrUtil.split(materialName, ".");
ArrayList<String> tmpList = CollUtil.newArrayList(split);
if(split.size() > 1){
tmpList.remove(split.size()-1);
private Triple<String,Integer,String> analyzeFileName(String fileName){
if (StrUtil.isEmpty(fileName)){
return Triple.of(null,null,null);
}
return String.join(".",tmpList);
}
@Override
public IPage<MaterialLibrary> 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<String> 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<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
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;
}
}

Loading…
Cancel
Save