cr пре 1 месец
родитељ
комит
d4f0005a09

+ 4 - 0
blade-service-api/blade-business-api/src/main/java/org/springblade/business/feign/ArchiveFileClient.java

@@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import org.springblade.archive.dto.FindAndReplaceDto;
 import org.springblade.archive.dto.SendsWebSocketArchiveDTO;
 import org.springblade.business.entity.ArchiveFile;
 import org.springblade.business.vo.ArchiveFileVO;
@@ -167,4 +168,7 @@ public interface ArchiveFileClient {
 
     @PostMapping(API_PREFIX + "/getArchiveFileByArchiveIds")
     List<ArchiveFile> getArchiveFileByArchiveIds(@RequestParam String archiveIds);
+
+    @PostMapping(API_PREFIX + "/findAndReplace")
+    boolean findAndReplace(@RequestBody List<ArchiveFile> archiveFiles, @RequestParam FindAndReplaceDto dto);
 }

+ 10 - 0
blade-service/blade-archive/src/main/java/org/springblade/archive/controller/ArchiveFileController.java

@@ -10,6 +10,8 @@ import io.swagger.annotations.*;
 import lombok.AllArgsConstructor;
 import lombok.SneakyThrows;
 import org.apache.commons.lang.StringUtils;
+import org.springblade.archive.dto.FindAndReplaceDto;
+import org.springblade.archive.entity.ArchivesAuto;
 import org.springblade.archive.service.IArchivesAutoService;
 import org.springblade.archive.utils.FileUtils;
 import org.springblade.archive.vo.ArchiveDataVo;
@@ -461,4 +463,12 @@ public class ArchiveFileController extends BladeController {
         }
         return  R.success("操作成功");
     }
+
+    @PostMapping("/findAndReplace")
+    @ApiOperationSupport(order = 12)
+    @ApiOperation(value = "查找并替换", notes = "传入ids")
+    public R findAndReplace(@RequestBody FindAndReplaceDto dto){
+        List<ArchiveFile> archiveFiles = archiveFileClient.getAllArchiveFileByArchiveIds(Func.toStrList(dto.getIds()));
+        return R.status(archiveFileClient.findAndReplace(archiveFiles,dto));
+    }
 }

+ 81 - 0
blade-service/blade-business/src/main/java/org/springblade/business/feignClient/ArchiveFileClientImpl.java

@@ -8,6 +8,8 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import lombok.AllArgsConstructor;
 import org.apache.commons.lang.StringUtils;
+import org.springblade.archive.dto.FindAndReplaceDto;
+import org.springblade.archive.entity.ArchivesAuto;
 import org.springblade.archive.vo.ArchivesAutoVO;
 import org.springblade.business.entity.ArchiveFile;
 import org.springblade.business.feign.ArchiveFileClient;
@@ -16,6 +18,7 @@ import org.springblade.business.service.IArchiveFileService;
 import org.springblade.business.service.ITaskService;
 import org.springblade.business.vo.ArchiveFileVO;
 import org.springblade.common.utils.FileUtils;
+import org.springblade.core.log.exception.ServiceException;
 import org.springblade.manager.entity.ContractInfo;
 import org.springblade.manager.enums.StorageTypeEnum;
 import org.springblade.manager.feign.ContractClient;
@@ -352,4 +355,82 @@ public class ArchiveFileClientImpl implements ArchiveFileClient {
         return iArchiveFileService.getArchiveFileByArchivesId(archiveIds,null);
     }
 
+    @Override
+    public boolean findAndReplace(List<ArchiveFile> archiveFiles, FindAndReplaceDto dto) {
+        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);
+                    }
+                }
+            }
+        }
+        if (!updates.isEmpty()) {
+            return iArchiveFileService.updateBatchById(updates);
+        }
+        return true;
+    }
+
 }