|
@@ -29,6 +29,8 @@ import org.springframework.web.bind.annotation.RestController;
|
|
|
import java.math.BigDecimal;
|
|
|
import java.util.*;
|
|
|
import java.util.function.Function;
|
|
|
+import java.util.regex.Matcher;
|
|
|
+import java.util.regex.Pattern;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
|
|
@@ -361,81 +363,93 @@ public class ArchiveFileClientImpl implements ArchiveFileClient {
|
|
|
List<ArchiveFile> archiveFiles = dto1.getList();
|
|
|
FindAndReplaceDto dto = dto1.getDto();
|
|
|
List<ArchiveFile> updates = new ArrayList<>();
|
|
|
+
|
|
|
for (ArchiveFile archiveFile : archiveFiles) {
|
|
|
- ArchiveFile auto = new ArchiveFile();
|
|
|
- if (dto.getType() == 1) {
|
|
|
- if (StringUtils.isNotEmpty(dto.getQuery()) && StringUtils.isNotEmpty(dto.getReplace())) {
|
|
|
- String name = archiveFile.getFileName();
|
|
|
- if (StringUtils.isNotEmpty(name) && name.contains(dto.getQuery())) {
|
|
|
- StringBuilder sb = new StringBuilder();
|
|
|
- int lastIndex = 0;
|
|
|
- // 查找所有匹配的位置
|
|
|
- int index = name.indexOf(dto.getQuery());
|
|
|
- while (index != -1) {
|
|
|
- // 添加未处理部分(从上一个 lastIndex 到当前 index)
|
|
|
- sb.append(name, lastIndex, index);
|
|
|
-
|
|
|
- // 根据位置插入替换内容
|
|
|
- if (dto.getPosition() != null) {
|
|
|
- switch (dto.getPosition()) {
|
|
|
- case 1: // 在查询内容前插入
|
|
|
- sb.append(dto.getReplace());
|
|
|
- sb.append(dto.getQuery());
|
|
|
- break;
|
|
|
- case 2: // 在查询内容后插入
|
|
|
- sb.append(dto.getQuery());
|
|
|
- sb.append(dto.getReplace());
|
|
|
- break;
|
|
|
- default:
|
|
|
- throw new ServiceException("请选择正确的定位条件");
|
|
|
- }
|
|
|
- } else {
|
|
|
- sb.append(dto.getQuery()); // 没有指定位置时保留原内容
|
|
|
- }
|
|
|
- // 更新 lastIndex 到当前匹配结束位置
|
|
|
- lastIndex = index + dto.getQuery().length();
|
|
|
- // 继续查找下一个匹配项
|
|
|
- index = name.indexOf(dto.getQuery(), lastIndex);
|
|
|
- }
|
|
|
- // 添加剩余的部分
|
|
|
- sb.append(name.substring(lastIndex));
|
|
|
- // 更新名称
|
|
|
- archiveFile.setFileName(sb.toString());
|
|
|
- auto.setId(archiveFile.getId());
|
|
|
- auto.setFileName(archiveFile.getFileName());
|
|
|
- updates.add(auto);
|
|
|
- }
|
|
|
- }
|
|
|
- } else if (dto.getType() == 2) {
|
|
|
- if (StringUtils.isNotEmpty(dto.getQuery()) && StringUtils.isNotEmpty(dto.getReplace())) {
|
|
|
- String name = archiveFile.getFileName();
|
|
|
- if (StringUtils.isNotEmpty(name) && name.contains(dto.getQuery())) {
|
|
|
- String newName = name.replaceAll(dto.getQuery(), dto.getReplace());
|
|
|
- archiveFile.setFileName(newName);
|
|
|
- auto.setId(archiveFile.getId());
|
|
|
- auto.setFileName(archiveFile.getFileName());
|
|
|
- updates.add(auto);
|
|
|
- }
|
|
|
- }
|
|
|
- } else {
|
|
|
- if (StringUtils.isNotEmpty(dto.getQuery())) {
|
|
|
- String name = archiveFile.getFileName();
|
|
|
- if (StringUtils.isNotEmpty(name) && name.contains(dto.getQuery())) {
|
|
|
- String newName = name.replaceAll(dto.getQuery(), "");
|
|
|
- archiveFile.setFileName(newName);
|
|
|
- auto.setId(archiveFile.getId());
|
|
|
- auto.setFileName(archiveFile.getFileName());
|
|
|
- updates.add(auto);
|
|
|
- }
|
|
|
- }
|
|
|
+ String originalName = archiveFile.getFileName();
|
|
|
+ if (StringUtils.isEmpty(originalName) || StringUtils.isEmpty(dto.getQuery())) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!originalName.contains(dto.getQuery())) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
+ String newName = processFileName(originalName, dto);
|
|
|
+ if (!originalName.equals(newName)) {
|
|
|
+ ArchiveFile update = new ArchiveFile();
|
|
|
+ update.setId(archiveFile.getId());
|
|
|
+ update.setFileName(newName);
|
|
|
+ updates.add(update);
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
if (!updates.isEmpty()) {
|
|
|
return iArchiveFileService.updateBatchById(updates);
|
|
|
}
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
+ private String processFileName(String fileName, FindAndReplaceDto dto) {
|
|
|
+ String query = dto.getQuery();
|
|
|
+ String replace = dto.getReplace();
|
|
|
+
|
|
|
+ switch (dto.getType()) {
|
|
|
+ case 1: // 在指定位置插入
|
|
|
+ return handleInsertAtPosition(fileName, query, replace, dto.getPosition());
|
|
|
+
|
|
|
+ case 2: // 普通替换
|
|
|
+ return handleReplace(fileName, query, replace, false);
|
|
|
+
|
|
|
+ default: // 删除匹配内容
|
|
|
+ return handleReplace(fileName, query, "", true);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private String handleInsertAtPosition(String fileName, String query, String replace, Integer position) {
|
|
|
+ if (position == null) {
|
|
|
+ return fileName; // 没有指定位置时保持原样
|
|
|
+ }
|
|
|
+
|
|
|
+ StringBuilder sb = new StringBuilder();
|
|
|
+ int lastIndex = 0;
|
|
|
+ int index = fileName.indexOf(query);
|
|
|
+
|
|
|
+ while (index != -1) {
|
|
|
+ // 添加未处理部分
|
|
|
+ sb.append(fileName, lastIndex, index);
|
|
|
+
|
|
|
+ // 根据位置插入内容
|
|
|
+ switch (position) {
|
|
|
+ case 1: // 在查询内容前插入
|
|
|
+ sb.append(replace).append(query);
|
|
|
+ break;
|
|
|
+ case 2: // 在查询内容后插入
|
|
|
+ sb.append(query).append(replace);
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ throw new ServiceException("请选择正确的定位条件");
|
|
|
+ }
|
|
|
+
|
|
|
+ lastIndex = index + query.length();
|
|
|
+ index = fileName.indexOf(query, lastIndex);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 添加剩余部分
|
|
|
+ sb.append(fileName.substring(lastIndex));
|
|
|
+ return sb.toString();
|
|
|
+ }
|
|
|
+
|
|
|
+ private String handleReplace(String fileName, String query, String replacement, boolean isLiteral) {
|
|
|
+ if (isLiteral) {
|
|
|
+ // 字面量替换(避免正则表达式特殊字符问题)
|
|
|
+ return fileName.replace(query, replacement);
|
|
|
+ } else {
|
|
|
+ // 使用正则表达式替换,需要转义特殊字符
|
|
|
+ String escapedQuery = Pattern.quote(query); // 自动转义所有特殊字符
|
|
|
+ return fileName.replaceAll(escapedQuery, Matcher.quoteReplacement(replacement));
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
@Override
|
|
|
public List<ArchiveFile> getAllArchiveFileByIds(List<String> strList) {
|
|
|
return fileMapper.getAllArchiveFileByIds(strList);
|