diff --git a/bonus-modules/bonus-ai/src/main/java/com/bonus/ai/controller/DataSetBasicFileController.java b/bonus-modules/bonus-ai/src/main/java/com/bonus/ai/controller/DataSetBasicFileController.java index 80b8ee6..15e9078 100644 --- a/bonus-modules/bonus-ai/src/main/java/com/bonus/ai/controller/DataSetBasicFileController.java +++ b/bonus-modules/bonus-ai/src/main/java/com/bonus/ai/controller/DataSetBasicFileController.java @@ -220,4 +220,14 @@ public class DataSetBasicFileController extends BaseController return dataSetBasicFileService.copyFile(entity); } + @PostMapping("/moveFile") + public AjaxResult moveFile(@RequestBody DataSetBasicFileEntity entity){ + return dataSetBasicFileService.moveFile(entity); + } + + @PostMapping("/emptyRecycleBin") + public AjaxResult emptyRecycleBin(){ + return dataSetBasicFileService.emptyRecycleBin(); + } + } diff --git a/bonus-modules/bonus-ai/src/main/java/com/bonus/ai/mapper/DataSetBasicFileMapper.java b/bonus-modules/bonus-ai/src/main/java/com/bonus/ai/mapper/DataSetBasicFileMapper.java index 96f8253..28bd1af 100644 --- a/bonus-modules/bonus-ai/src/main/java/com/bonus/ai/mapper/DataSetBasicFileMapper.java +++ b/bonus-modules/bonus-ai/src/main/java/com/bonus/ai/mapper/DataSetBasicFileMapper.java @@ -1,6 +1,7 @@ package com.bonus.ai.mapper; import com.bonus.ai.domain.DataSetBasicFileEntity; +import com.bonus.common.core.web.domain.AjaxResult; import org.apache.ibatis.annotations.Param; import java.util.List; @@ -12,8 +13,7 @@ import java.util.Set; * @author bonus * @date 2024-11-14 */ -public interface DataSetBasicFileMapper -{ +public interface DataSetBasicFileMapper { /** * 查询文件基础 * @@ -22,6 +22,10 @@ public interface DataSetBasicFileMapper */ public DataSetBasicFileEntity selectDataSetBasicFileByFileId(Long fileId); + public DataSetBasicFileEntity selectDataSetBasicFile(Long fileId); + + public DataSetBasicFileEntity selectDataSetBasicFileByFileName(@Param("parentId") Long parentId,@Param("fileName")String fileName); + /** * 查询文件基础 * @@ -88,7 +92,10 @@ public interface DataSetBasicFileMapper /** * 修改文件共享状态 + * * @param ancestors */ - void updateSharedFilesByIds(@Param("ancestors")Set ancestors ,@Param("isPublic") String isPublic); + void updateSharedFilesByIds(@Param("ancestors") Set ancestors, @Param("isPublic") String isPublic); + + void emptyRecycleBin(); } diff --git a/bonus-modules/bonus-ai/src/main/java/com/bonus/ai/service/DataSetBasicFileService.java b/bonus-modules/bonus-ai/src/main/java/com/bonus/ai/service/DataSetBasicFileService.java index 7160afd..4b79649 100644 --- a/bonus-modules/bonus-ai/src/main/java/com/bonus/ai/service/DataSetBasicFileService.java +++ b/bonus-modules/bonus-ai/src/main/java/com/bonus/ai/service/DataSetBasicFileService.java @@ -114,4 +114,8 @@ public interface DataSetBasicFileService AjaxResult getFileTerr(Long fileId); AjaxResult copyFile(DataSetBasicFileEntity entity); + + AjaxResult moveFile(DataSetBasicFileEntity entity); + + AjaxResult emptyRecycleBin(); } diff --git a/bonus-modules/bonus-ai/src/main/java/com/bonus/ai/service/Impl/DataSetBasicFileServiceImpl.java b/bonus-modules/bonus-ai/src/main/java/com/bonus/ai/service/Impl/DataSetBasicFileServiceImpl.java index f58dd87..34ec287 100644 --- a/bonus-modules/bonus-ai/src/main/java/com/bonus/ai/service/Impl/DataSetBasicFileServiceImpl.java +++ b/bonus-modules/bonus-ai/src/main/java/com/bonus/ai/service/Impl/DataSetBasicFileServiceImpl.java @@ -24,6 +24,8 @@ import java.io.*; import java.net.URLEncoder; import java.nio.file.Files; import java.util.*; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; @@ -159,13 +161,68 @@ public class DataSetBasicFileServiceImpl implements DataSetBasicFileService { @Override public AjaxResult dataRecoveryFileByFileIds(Long[] fileIds) { try { - int rows = dataSetBasicFileMapper.dataRecoveryFileByFileIds(fileIds); + int rows = 0; + for (Long fileId : fileIds) { + DataSetBasicFileEntity entity = dataSetBasicFileMapper.selectDataSetBasicFile(fileId); + DataSetBasicFileEntity basicFile = new DataSetBasicFileEntity(); + int num = getNumberFromFileName(entity.getFileName()); + do { + basicFile = dataSetBasicFileMapper.selectDataSetBasicFileByFileName(entity.getParentId(), entity.getFileName()); + // 如果存在,则修改文件名并递增 num + if (ObjectUtils.isNotEmpty(basicFile)) { + num++; // 递增 num + entity.setFileName(changeNumberInName(entity.getFileName(),num )); + + } + } while (ObjectUtils.isNotEmpty(basicFile)); + entity.setDelFlag("0"); + entity.setCreateBy(SecurityUtils.getUserId().toString()); + rows += dataSetBasicFileMapper.updateDataSetBasicFile(entity); + } + //int rows = dataSetBasicFileMapper.dataRecoveryFileByFileIds(fileIds); return rows > 0 ? AjaxResult.success() : AjaxResult.error(); } catch (Exception e) { return AjaxResult.error(); } } + // 改变文件夹或文件名最后()里的数字,同时保留原始后缀 + public static String changeNumberInName(String name, int newNumber) { + // 提取文件扩展名 + String extension = ""; + int dotIndex = name.lastIndexOf("."); + if (dotIndex != -1) { + extension = name.substring(dotIndex); // 获取文件后缀 + name = name.substring(0, dotIndex); // 去掉文件后缀 + } + // 正则表达式:匹配最后一个括号里的数字 + Pattern pattern = Pattern.compile(".*\\((\\d+)\\)$"); + Matcher matcher = pattern.matcher(name); + + if (matcher.matches()) { + // 替换括号中的数字为新的数字 + String newName = name.substring(0, matcher.start(1)) +newNumber + name.substring(matcher.end(1)); + return newName + extension; // 加上原始文件扩展名 + } else { + // 如果没有找到括号中的数字,返回原文件夹/文件名和扩展名 + return name + "(" + newNumber + ")" + extension; + } + } + + // 获取文件名最后()里的数字 + public static Integer getNumberFromFileName(String fileName) { + // 正则表达式:匹配最后一个括号里的数字 + Pattern pattern = Pattern.compile(".*\\((\\d+)\\)$"); + Matcher matcher = pattern.matcher(fileName); + + if (matcher.matches()) { + // 返回括号中的数字 + return Integer.parseInt(matcher.group(1)); + } else { + // 如果没有找到括号中的数字,返回 null 或者其他默认值 + return 0; + } + } /** * 文件分片上传 * @@ -233,20 +290,20 @@ public class DataSetBasicFileServiceImpl implements DataSetBasicFileService { @Override public AjaxResult sharedFilesByIds(Long[] fileIds) { List list = getFilesByIds(fileIds); - for (DataSetBasicFileEntity entity :list){ - if ("1".equals(entity.getIsDirectory())){ + for (DataSetBasicFileEntity entity : list) { + if ("1".equals(entity.getIsDirectory())) { for (Long fileId : fileIds) { Set ancestors = getAncestorsByFileIds(fileId); Set children = getFileWithChildren(fileId); ancestors.addAll(children); ancestors.add(fileId); - dataSetBasicFileMapper.updateSharedFilesByIds(ancestors,"1"); + dataSetBasicFileMapper.updateSharedFilesByIds(ancestors, "1"); } - }else { + } else { for (Long fileId : fileIds) { Set ancestors = getAncestorsByFileIds(fileId); ancestors.add(fileId); - dataSetBasicFileMapper.updateSharedFilesByIds(ancestors,"1"); + dataSetBasicFileMapper.updateSharedFilesByIds(ancestors, "1"); } } } @@ -261,25 +318,25 @@ public class DataSetBasicFileServiceImpl implements DataSetBasicFileService { @Override public AjaxResult changeIsPublic(DataSetBasicFileEntity entity) { DataSetBasicFileEntity file = dataSetBasicFileMapper.selectDataSetBasicFileByFileId(entity.getFileId()); - if ("1".equals(file.getIsDirectory())){ + if ("1".equals(file.getIsDirectory())) { Set ancestors = getAncestorsByFileIds(entity.getFileId()); Set children = getFileWithChildren(entity.getFileId()); children.add(entity.getFileId()); - dataSetBasicFileMapper.updateSharedFilesByIds(children,entity.getIsPublic()); + dataSetBasicFileMapper.updateSharedFilesByIds(children, entity.getIsPublic()); Set isPublic = getIsPublic(ancestors); - if (!isPublic.isEmpty()){ - dataSetBasicFileMapper.updateSharedFilesByIds(isPublic,entity.getIsPublic()); + if (!isPublic.isEmpty()) { + dataSetBasicFileMapper.updateSharedFilesByIds(isPublic, entity.getIsPublic()); } - }else { + } else { Set fileId = new HashSet<>(); fileId.add(entity.getFileId()); Set ancestors = getAncestorsByFileIds(entity.getFileId()); fileId.addAll(ancestors); - dataSetBasicFileMapper.updateSharedFilesByIds(fileId,entity.getIsPublic()); + dataSetBasicFileMapper.updateSharedFilesByIds(fileId, entity.getIsPublic()); Set isPublic = getIsPublic(ancestors); - if (!isPublic.isEmpty()){ - dataSetBasicFileMapper.updateSharedFilesByIds(isPublic,entity.getIsPublic()); + if (!isPublic.isEmpty()) { + dataSetBasicFileMapper.updateSharedFilesByIds(isPublic, entity.getIsPublic()); } } return AjaxResult.success(); @@ -311,19 +368,39 @@ public class DataSetBasicFileServiceImpl implements DataSetBasicFileService { } /** - * 获取同级目录是否是否存在共享数据 + * @param entity * @return */ - public Set getIsPublic(Set ancestors){ + @Override + public AjaxResult moveFile(DataSetBasicFileEntity entity) { + DataSetBasicFileEntity entity1 = dataSetBasicFileMapper.selectDataSetBasicFileByFileId(entity.getParentId()); + return null; + } + + /** + * @return + */ + @Override + public AjaxResult emptyRecycleBin() { + dataSetBasicFileMapper.emptyRecycleBin(); + return AjaxResult.success(); + } + + /** + * 获取同级目录是否是否存在共享数据 + * + * @return + */ + public Set getIsPublic(Set ancestors) { // 将 Set 转换为 List List ancestorList = new ArrayList<>(ancestors); Set isPublic = new HashSet<>(); for (int i = ancestorList.size() - 1; i >= 0; i--) { List list = dataSetBasicFileMapper.selectDataSetBasicFileByParentId(ancestorList.get(i)); boolean exists = list.stream().anyMatch(file -> "1".equals(file.getIsPublic())); - if (exists){ + if (exists) { return isPublic; - }else { + } else { isPublic.add(ancestorList.get(i)); } } @@ -332,12 +409,13 @@ public class DataSetBasicFileServiceImpl implements DataSetBasicFileService { /** * 获取文件及其子节点 + * * @param fileId 文件 ID * @return 当前文件及其所有子节点 */ public Set getFileWithChildren(Long fileId) { // 查询所有文件数据,假设你已经根据需求修改了查询方法 - DataSetBasicFileEntity entity =new DataSetBasicFileEntity(); + DataSetBasicFileEntity entity = new DataSetBasicFileEntity(); entity.setCreateBy(SecurityUtils.getUserId().toString()); List allFiles = dataSetBasicFileMapper.selectDataSetBasicFileList(entity); // 构建父子关系映射 @@ -370,11 +448,12 @@ public class DataSetBasicFileServiceImpl implements DataSetBasicFileService { /** * 根据多个 fileId 查询所有祖先节点 + * * @param fileId 起始节点 ID * @return 每个文件对应的祖先节点列表 Map */ public Set getAncestorsByFileIds(Long fileId) { - Set ancestors = new HashSet<>(); + Set ancestors = new HashSet<>(); Long currentId = fileId; while (currentId != null && currentId != 0) { DataSetBasicFileEntity entity = dataSetBasicFileMapper.selectDataSetBasicFileByFileId(currentId); @@ -538,7 +617,7 @@ public class DataSetBasicFileServiceImpl implements DataSetBasicFileService { InputStream fileStream = minioUtil.downloadFile(item.objectName()); // 在 ZIP 中创建对应的条目,保持目录结构 String result = objectName.replace(entity.getFileUrl(), ""); - ZipEntry zipEntry = new ZipEntry(entity.getFileName()+File.separator+result); + ZipEntry zipEntry = new ZipEntry(entity.getFileName() + File.separator + result); zos.putNextEntry(zipEntry); IOUtils.copy(fileStream, zos); zos.closeEntry(); diff --git a/bonus-modules/bonus-ai/src/main/resources/mapper/DataSetBasicFileMapper.xml b/bonus-modules/bonus-ai/src/main/resources/mapper/DataSetBasicFileMapper.xml index 5f4fc48..26c5dc9 100644 --- a/bonus-modules/bonus-ai/src/main/resources/mapper/DataSetBasicFileMapper.xml +++ b/bonus-modules/bonus-ai/src/main/resources/mapper/DataSetBasicFileMapper.xml @@ -45,6 +45,13 @@ ORDER BY abf.is_directory DESC ,abf.create_time DESC + + + + insert into ai_basic_file @@ -144,6 +157,11 @@ #{fileId} + + update ai_basic_file + set del_flag='2' + where del_flag = '1' + update ai_basic_file set del_flag='1' , update_time = now() where file_id in