提交代码修改重命名
This commit is contained in:
		
							parent
							
								
									4a6346d683
								
							
						
					
					
						commit
						1037136405
					
				| @ -629,11 +629,52 @@ public class TsFilesServiceImpl extends ServiceImpl<TsFilesMapper, TsFiles> impl | ||||
|                 if (flag) { | ||||
|                     //递归下面所有的文件文件夹  路径都需要修改 | ||||
|                     List<TsFiles> resultList = new ArrayList<>(); | ||||
| 
 | ||||
|                     if (tsFiles.getBackupPath() != null && tsFiles.getBackupPath() != "") { | ||||
|                         // 设置当前时间 | ||||
|                         LocalDateTime now = LocalDateTime.now(); | ||||
|                         // 转换为 Timestamp | ||||
|                         Timestamp currentTime = Timestamp.valueOf(now); | ||||
|                         //新通过id找到表中现有的 修改也是修改表中现有的数据   新增的一条就是重命名以后的  所有备份空间路径为空    原来的哪条数据把工作空间路径改成空 | ||||
|                         TsFiles tsFiles2 = tsFilesMapper.selectById(tsFiles.getId());//查询原来的数据   把原来的数据 | ||||
|                         tsFiles2.setWorkPath(""); | ||||
| 
 | ||||
|                         TsFiles tsFiles1 = new TsFiles(); | ||||
|                         tsFiles1.setNodeId(tsFiles.getNodeId()); | ||||
|                         tsFiles1.setTaskId(tsFiles.getTaskId()); | ||||
|                         tsFiles1.setIsFile(tsFiles.getIsFile()); | ||||
|                         tsFiles1.setParentId(tsFiles.getParentId()); | ||||
|                         tsFiles1.setFileName(tsFiles.getFileName()); | ||||
|                         tsFiles1.setFileSize(tsFiles.getFileSize()); | ||||
|                         tsFiles1.setWorkPath(tsFiles.getWorkPath()); | ||||
|                         tsFiles1.setBackupPath(""); | ||||
|                         tsFiles1.setKeywords(tsFiles.getKeywords()); | ||||
|                         tsFiles1.setDescription(tsFiles.getDescription()); | ||||
|                         tsFiles1.setUploadTime(currentTime); | ||||
|                         tsFiles1.setUploader(tsFiles.getUploader()); | ||||
|                         tsFiles1.setUpdateTime(currentTime); | ||||
|                         int valueInsert = tsFilesMapper.insert(tsFiles1); | ||||
|                         if (valueInsert == 1) { | ||||
|                             int valueUpdate = tsFilesMapper.updateById(tsFiles2); | ||||
|                             // 获取当前文件夹的完整路径(如 "/147/222/") | ||||
|                             String oldFullPath = filesData.getWorkPath() + filesData.getFileName() + "/"; | ||||
|                             String newFullPath = filesData.getWorkPath() + tsFiles.getFileName() + "/"; | ||||
|                     querySubFilesAndUpdatePaths(resultList, tsFiles.getId(), oldFullPath, newFullPath); | ||||
|                     // 修改数据库 | ||||
|                             querySubFilesAndUpdatePaths(resultList, tsFiles2.getId(), oldFullPath, newFullPath, tsFiles1.getId()); | ||||
|                             if (valueUpdate == 1) { | ||||
|                                 LOGGER.info("local和minio修改成功,表结构修改成功"); | ||||
|                                 return ResponseResult.success(); | ||||
|                             } else { | ||||
|                                 LOGGER.error("local和minio修改成功,表结构修改失败"); | ||||
|                                 return ResponseResult.error(); | ||||
|                             } | ||||
|                         } else { | ||||
|                             LOGGER.error("local和minio修改成功,表结构修改失败"); | ||||
|                             return ResponseResult.error(); | ||||
|                         } | ||||
| 
 | ||||
| 
 | ||||
|                     } else { | ||||
|                         // 如果备份空间为空  直接修改数据库 | ||||
|                         int valueUpdate = tsFilesMapper.updateById(tsFiles); | ||||
|                         if (valueUpdate == 1) { | ||||
|                             LOGGER.info("local和minio修改成功,表结构修改成功"); | ||||
| @ -642,6 +683,7 @@ public class TsFilesServiceImpl extends ServiceImpl<TsFilesMapper, TsFiles> impl | ||||
|                             LOGGER.error("local和minio修改成功,表结构修改失败"); | ||||
|                             return ResponseResult.error(); | ||||
|                         } | ||||
|                     } | ||||
|                 } else { | ||||
|                     LOGGER.error("local和minio修改失败"); | ||||
|                     return ResponseResult.error(); | ||||
| @ -668,9 +710,50 @@ public class TsFilesServiceImpl extends ServiceImpl<TsFilesMapper, TsFiles> impl | ||||
|                 renameFileRequest.setStorageKey("local"); | ||||
|                 AbstractBaseFileService<?> fileService = storageSourceContext.getByStorageKey(renameFileRequest.getStorageKey()); | ||||
|                 Boolean flag = fileService.renameFile(renameFileRequest.getPath(), renameFileRequest.getName(), renameFileRequest.getNewName()); | ||||
|                 //如果是true  说明至少有一个修改了文件夹 | ||||
|                 //如果是true  说明至少有一个修改了文件 | ||||
|                 if (flag) { | ||||
|                     // 修改数据库 | ||||
|                     //如果备份路径不为空  那么就先增加一条  然后修改本地的 | ||||
|                     if (tsFiles.getBackupPath() != null && tsFiles.getBackupPath() != "") { | ||||
|                         // 设置当前时间 | ||||
|                         LocalDateTime now = LocalDateTime.now(); | ||||
|                         // 转换为 Timestamp | ||||
|                         Timestamp currentTime = Timestamp.valueOf(now); | ||||
|                         //新通过id找到表中现有的 修改也是修改表中现有的数据   新增的一条就是重命名以后的  所有备份空间路径为空    原来的哪条数据把工作空间路径改成空 | ||||
|                         TsFiles tsFiles2 = tsFilesMapper.selectById(tsFiles.getId());//查询原来的数据   把原来的数据 | ||||
|                         tsFiles2.setWorkPath(""); | ||||
| 
 | ||||
|                         TsFiles tsFiles1 = new TsFiles(); | ||||
|                         tsFiles1.setNodeId(tsFiles.getNodeId()); | ||||
|                         tsFiles1.setTaskId(tsFiles.getTaskId()); | ||||
|                         tsFiles1.setIsFile(tsFiles.getIsFile()); | ||||
|                         tsFiles1.setParentId(tsFiles.getParentId()); | ||||
|                         tsFiles1.setFileName(tsFiles.getFileName()); | ||||
|                         tsFiles1.setFileSize(tsFiles.getFileSize()); | ||||
|                         tsFiles1.setWorkPath(tsFiles.getWorkPath()); | ||||
|                         tsFiles1.setBackupPath(""); | ||||
|                         tsFiles1.setKeywords(tsFiles.getKeywords()); | ||||
|                         tsFiles1.setDescription(tsFiles.getDescription()); | ||||
|                         tsFiles1.setUploadTime(currentTime); | ||||
|                         tsFiles1.setUploader(tsFiles.getUploader()); | ||||
|                         tsFiles1.setUpdateTime(currentTime); | ||||
|                         int valueInsert = tsFilesMapper.insert(tsFiles1); | ||||
|                         if (valueInsert == 1) { | ||||
|                             int valueUpdate = tsFilesMapper.updateById(tsFiles2); | ||||
|                             if (valueUpdate == 1) { | ||||
|                                 LOGGER.info("local和minio修改成功,表结构修改成功"); | ||||
|                                 return ResponseResult.success(); | ||||
|                             } else { | ||||
|                                 LOGGER.error("local和minio修改成功,表结构修改失败"); | ||||
|                                 return ResponseResult.error(); | ||||
|                             } | ||||
|                         } else { | ||||
|                             LOGGER.error("local和minio修改成功,表结构修改失败"); | ||||
|                             return ResponseResult.error(); | ||||
|                         } | ||||
| 
 | ||||
| 
 | ||||
|                     } else { | ||||
|                         // 如果备份空间为空  直接修改数据库 | ||||
|                         int valueUpdate = tsFilesMapper.updateById(tsFiles); | ||||
|                         if (valueUpdate == 1) { | ||||
|                             LOGGER.info("local和minio修改成功,表结构修改成功"); | ||||
| @ -679,6 +762,9 @@ public class TsFilesServiceImpl extends ServiceImpl<TsFilesMapper, TsFiles> impl | ||||
|                             LOGGER.error("local和minio修改成功,表结构修改失败"); | ||||
|                             return ResponseResult.error(); | ||||
|                         } | ||||
|                     } | ||||
| 
 | ||||
| 
 | ||||
|                 } else { | ||||
|                     LOGGER.error("local和minio修改失败"); | ||||
|                     return ResponseResult.error(); | ||||
| @ -695,8 +781,8 @@ public class TsFilesServiceImpl extends ServiceImpl<TsFilesMapper, TsFiles> impl | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
| 
 | ||||
|     private void querySubFilesAndUpdatePaths(List<TsFiles> resultList, String id, String oldName, String newName) { | ||||
|     // | ||||
|     private void querySubFilesAndUpdatePaths(List<TsFiles> resultList, String id, String oldName, String newName, String newid) { | ||||
|         // 构造 QueryWrapper 查询当前文件夹下的文件 | ||||
|         QueryWrapper<TsFiles> queryWrapper = new QueryWrapper<>(); | ||||
|         queryWrapper.eq("parent_id", id); | ||||
| @ -712,16 +798,51 @@ public class TsFilesServiceImpl extends ServiceImpl<TsFilesMapper, TsFiles> impl | ||||
| 
 | ||||
|         // 遍历每个子项,更新路径并递归查询其子项 | ||||
|         for (TsFiles subFile : subFiles) { | ||||
| 
 | ||||
|             String oldWorkPath = subFile.getWorkPath(); | ||||
|             // 使用正则表达式替换目标文件夹名称 | ||||
|             String newWorkPath = oldWorkPath.replaceAll(oldName, newName); | ||||
| 
 | ||||
|             //判断备份空间路径是否为空   如果不为 | ||||
|             if (subFile.getBackupPath() != null && subFile.getBackupPath() != "") { | ||||
|                 // 设置当前时间 | ||||
|                 LocalDateTime now = LocalDateTime.now(); | ||||
|                 // 转换为 Timestamp | ||||
|                 Timestamp currentTime = Timestamp.valueOf(now); | ||||
|                 //新通过id找到表中现有的 修改也是修改表中现有的数据   新增的一条就是重命名以后的  所有备份空间路径为空    原来的哪条数据把工作空间路径改成空 | ||||
|                 TsFiles tsFiles2 = tsFilesMapper.selectById(subFile.getId());//查询原来的数据   把原来的数据 | ||||
|                 tsFiles2.setWorkPath(""); | ||||
| 
 | ||||
|                 TsFiles tsFiles1 = new TsFiles(); | ||||
|                 tsFiles1.setNodeId(subFile.getNodeId()); | ||||
|                 tsFiles1.setTaskId(subFile.getTaskId()); | ||||
|                 tsFiles1.setIsFile(subFile.getIsFile()); | ||||
|                 tsFiles1.setParentId(newid); | ||||
|                 tsFiles1.setFileName(subFile.getFileName()); | ||||
|                 tsFiles1.setFileSize(subFile.getFileSize()); | ||||
|                 tsFiles1.setWorkPath(newWorkPath); | ||||
|                 tsFiles1.setBackupPath(""); | ||||
|                 tsFiles1.setKeywords(subFile.getKeywords()); | ||||
|                 tsFiles1.setDescription(subFile.getDescription()); | ||||
|                 tsFiles1.setUploadTime(currentTime); | ||||
|                 tsFiles1.setUploader(subFile.getUploader()); | ||||
|                 tsFiles1.setUpdateTime(currentTime); | ||||
|                 int valueInsert = tsFilesMapper.insert(tsFiles1); | ||||
|                 if (valueInsert == 1) { | ||||
|                     int valueUpdate = tsFilesMapper.updateById(tsFiles2); | ||||
|                     if (valueUpdate == 1) { | ||||
| 
 | ||||
|                     } | ||||
|                 } | ||||
| 
 | ||||
|             } else { | ||||
|                 // 更新数据库中的路径 | ||||
|                 subFile.setWorkPath(newWorkPath); | ||||
|                 subFile.setParentId(newid); | ||||
|                 tsFilesMapper.updateById(subFile); | ||||
|                 // 递归查询每个子项的子文件 | ||||
|                 if ("FOLDER".equals(subFile.getIsFile())) { | ||||
|                 querySubFilesAndUpdatePaths(resultList, subFile.getId(), oldName, newName); | ||||
|                     querySubFilesAndUpdatePaths(resultList, subFile.getId(), oldName, newName, subFile.getId()); | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| @ -3649,7 +3770,6 @@ public class TsFilesServiceImpl extends ServiceImpl<TsFilesMapper, TsFiles> impl | ||||
|     private TreeDTO buildTree(TsFiles current, Map<String, List<TsFiles>> parentChildrenMap, boolean isLocal) { | ||||
|         // 1. 转换为DTO并检查路径有效性 | ||||
|         TreeDTO dto = convertToDTO(current, isLocal); | ||||
|         String path = isLocal ? current.getWorkPath() : current.getBackupPath(); | ||||
|         if (dto.getPath() == null || dto.getPath().trim().isEmpty()) { | ||||
|             LOGGER.warn("由于路径为空,跳过节点{}", current.getId()); | ||||
|             return null; | ||||
|  | ||||
| @ -178,7 +178,13 @@ public abstract class AbstractS3BaseFileService<P extends S3BaseParam> extends A | ||||
|         String targetPath = buildTargetPath(path, name, isFolder); | ||||
| 
 | ||||
|         if (isFolder) { | ||||
|             // 处理文件夹 | ||||
|             // 处理文件夹时,先添加文件夹自身 | ||||
|             FileItemResult folderItem = createFolderItemSelf(targetPath); | ||||
|             if (folderItem != null) { | ||||
|                 fileItemList.add(folderItem); | ||||
|             } | ||||
| 
 | ||||
|             // 列出文件夹内容(包含子目录) | ||||
|             String fullPrefix = StringUtils.trimStartSlashes( | ||||
|                     StringUtils.concat(param.getBasePath(), targetPath) | ||||
|             ); | ||||
| @ -227,7 +233,7 @@ public abstract class AbstractS3BaseFileService<P extends S3BaseParam> extends A | ||||
|             item.setSize(objectSummary.getSize()); | ||||
|             item.setTime(objectSummary.getLastModified()); | ||||
|             item.setType(FileTypeEnum.FILE); | ||||
|             item.setPath(extractParentPath(targetPath)); | ||||
|             item.setPath(extractParentPatha(targetPath)); | ||||
|             item.setUrl(getDownloadUrl(targetPath)); | ||||
|             return item; | ||||
|         } catch (Exception e) { | ||||
| @ -237,7 +243,43 @@ public abstract class AbstractS3BaseFileService<P extends S3BaseParam> extends A | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * 列出文件夹内容(包括子目录) | ||||
|      * 创建目标文件夹自身的条目 | ||||
|      */ | ||||
|     private FileItemResult createFolderItemSelf(String targetPath) { | ||||
|         if (targetPath.equals("/") || targetPath.isEmpty()) { | ||||
|             return null; // 根目录不单独添加 | ||||
|         } | ||||
| 
 | ||||
|         String parentPath = extractParentPatha(targetPath); | ||||
|         String folderName = extractFolderName(targetPath); | ||||
| 
 | ||||
|         FileItemResult item = new FileItemResult(); | ||||
|         item.setName(folderName); | ||||
|         item.setType(FileTypeEnum.FOLDER); | ||||
|         item.setPath(parentPath); | ||||
|         item.setTime(new Date()); // S3 无文件夹实体,时间设为当前时间或留空 | ||||
|         return item; | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * 从路径中提取父路径(如 /1/2/3/ → /1/2/) | ||||
|      */ | ||||
|     private String extractParentPatha(String path) { | ||||
|         path = StringUtils.trimEndSlashes(path); | ||||
|         int lastSlashIndex = path.lastIndexOf('/'); | ||||
|         return (lastSlashIndex > 0) ? path.substring(0, lastSlashIndex + 1) : "/"; | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * 从路径中提取文件夹名称(如 /1/2/3/ → 3) | ||||
|      */ | ||||
|     private String extractFolderName(String path) { | ||||
|         path = StringUtils.trimEndSlashes(path); | ||||
|         int lastSlashIndex = path.lastIndexOf('/'); | ||||
|         return (lastSlashIndex > 0) ? path.substring(lastSlashIndex + 1) : path; | ||||
|     } | ||||
|     /** | ||||
|      * 列出文件夹内容(包括子目录,递归时不重复添加自身) | ||||
|      */ | ||||
|     private void listFolderContents( | ||||
|             String bucketName, | ||||
| @ -263,14 +305,14 @@ public abstract class AbstractS3BaseFileService<P extends S3BaseParam> extends A | ||||
|                         results.add(createFileItem(fileName, s, currentPath)); | ||||
|                     }); | ||||
| 
 | ||||
|             // 处理子文件夹 | ||||
|             // 处理子文件夹(通过递归添加) | ||||
|             listing.getCommonPrefixes().forEach(commonPrefix -> { | ||||
|                 String folderName = commonPrefix.substring(prefix.length(), commonPrefix.length()-1); | ||||
|                 String folderPath = currentPath; | ||||
|                 results.add(createFolderItem(folderName, folderPath)); | ||||
|                 String folderPath1 = currentPath + folderName + "/"; | ||||
|                 // 递归列出子目录内容 | ||||
|                 listFolderContents(bucketName, commonPrefix, folderPath1, results); | ||||
|                 String subFolderPrefix = commonPrefix; | ||||
|                 String folderName = subFolderPrefix.substring(prefix.length(), subFolderPrefix.length() - 1); | ||||
|                 String subCurrentPath = currentPath + folderName + "/"; | ||||
| 
 | ||||
|                 // 递归调用以处理子目录(子目录的自身条目会在递归时添加) | ||||
|                 listFolderContents(bucketName, subFolderPrefix, subCurrentPath, results); | ||||
|             }); | ||||
| 
 | ||||
|             request.setMarker(listing.getNextMarker()); | ||||
|  | ||||
| @ -219,6 +219,11 @@ public class LocalServiceImpl extends AbstractProxyTransferService<LocalParam> { | ||||
| 
 | ||||
|         // 2. 直接处理文件或目录 | ||||
|         if (target.isDirectory()) { | ||||
|             // 添加目标文件夹自身 | ||||
|             FileItemResult folderItem = convertToFileItem(target, folderPath); | ||||
|             resultList.add(folderItem); | ||||
| 
 | ||||
|             // 递归列出目录内容 | ||||
|             listFilesInDirectory(target, targetPath, resultList); | ||||
|         } else { | ||||
|             // 如果是文件,直接添加到结果列表 | ||||
| @ -313,10 +318,16 @@ public class LocalServiceImpl extends AbstractProxyTransferService<LocalParam> { | ||||
|     private FileItemResult convertToFileItem(File file, String parentPath) { | ||||
|         FileItemResult item = new FileItemResult(); | ||||
|         item.setName(file.getName()); | ||||
|         item.setPath(formatSinglePath(parentPath)); // 关键修改点 | ||||
|         item.setType(file.isDirectory() ? FileTypeEnum.FOLDER : FileTypeEnum.FILE); | ||||
|         item.setPath(parentPath); | ||||
|         item.setSize(file.isDirectory() ? 0 : file.length()); | ||||
|         item.setTime(new Date(file.lastModified())); | ||||
|         item.setType(file.isDirectory() ? FileTypeEnum.FOLDER : FileTypeEnum.FILE); | ||||
| 
 | ||||
|         // 如果是文件,设置下载 URL | ||||
|         if (file.isFile()) { | ||||
|             item.setUrl(getDownloadUrl(parentPath + file.getName())); | ||||
|         } | ||||
| 
 | ||||
|         return item; | ||||
|     } | ||||
| 
 | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 lilin
						lilin