|
|
|
@ -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;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|