提交代码

This commit is contained in:
jiang 2024-11-25 18:10:18 +08:00
parent 4e0d660338
commit 5d8f4b1db9
5 changed files with 142 additions and 24 deletions

View File

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

View File

@ -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<Long> ancestors ,@Param("isPublic") String isPublic);
void updateSharedFilesByIds(@Param("ancestors") Set<Long> ancestors, @Param("isPublic") String isPublic);
void emptyRecycleBin();
}

View File

@ -114,4 +114,8 @@ public interface DataSetBasicFileService
AjaxResult getFileTerr(Long fileId);
AjaxResult copyFile(DataSetBasicFileEntity entity);
AjaxResult moveFile(DataSetBasicFileEntity entity);
AjaxResult emptyRecycleBin();
}

View File

@ -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<DataSetBasicFileEntity> 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<Long> ancestors = getAncestorsByFileIds(fileId);
Set<Long> children = getFileWithChildren(fileId);
ancestors.addAll(children);
ancestors.add(fileId);
dataSetBasicFileMapper.updateSharedFilesByIds(ancestors,"1");
dataSetBasicFileMapper.updateSharedFilesByIds(ancestors, "1");
}
}else {
} else {
for (Long fileId : fileIds) {
Set<Long> 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<Long> ancestors = getAncestorsByFileIds(entity.getFileId());
Set<Long> children = getFileWithChildren(entity.getFileId());
children.add(entity.getFileId());
dataSetBasicFileMapper.updateSharedFilesByIds(children,entity.getIsPublic());
dataSetBasicFileMapper.updateSharedFilesByIds(children, entity.getIsPublic());
Set<Long> isPublic = getIsPublic(ancestors);
if (!isPublic.isEmpty()){
dataSetBasicFileMapper.updateSharedFilesByIds(isPublic,entity.getIsPublic());
if (!isPublic.isEmpty()) {
dataSetBasicFileMapper.updateSharedFilesByIds(isPublic, entity.getIsPublic());
}
}else {
} else {
Set<Long> fileId = new HashSet<>();
fileId.add(entity.getFileId());
Set<Long> ancestors = getAncestorsByFileIds(entity.getFileId());
fileId.addAll(ancestors);
dataSetBasicFileMapper.updateSharedFilesByIds(fileId,entity.getIsPublic());
dataSetBasicFileMapper.updateSharedFilesByIds(fileId, entity.getIsPublic());
Set<Long> 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<Long> getIsPublic(Set<Long> 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<Long> getIsPublic(Set<Long> ancestors) {
// Set 转换为 List
List<Long> ancestorList = new ArrayList<>(ancestors);
Set<Long> isPublic = new HashSet<>();
for (int i = ancestorList.size() - 1; i >= 0; i--) {
List<DataSetBasicFileEntity> 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<Long> getFileWithChildren(Long fileId) {
// 查询所有文件数据假设你已经根据需求修改了查询方法
DataSetBasicFileEntity entity =new DataSetBasicFileEntity();
DataSetBasicFileEntity entity = new DataSetBasicFileEntity();
entity.setCreateBy(SecurityUtils.getUserId().toString());
List<DataSetBasicFileEntity> allFiles = dataSetBasicFileMapper.selectDataSetBasicFileList(entity);
// 构建父子关系映射
@ -370,11 +448,12 @@ public class DataSetBasicFileServiceImpl implements DataSetBasicFileService {
/**
* 根据多个 fileId 查询所有祖先节点
*
* @param fileId 起始节点 ID
* @return 每个文件对应的祖先节点列表 Map
*/
public Set<Long> getAncestorsByFileIds(Long fileId) {
Set<Long> ancestors = new HashSet<>();
Set<Long> 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();

View File

@ -45,6 +45,13 @@
ORDER BY abf.is_directory DESC ,abf.create_time DESC
</select>
<select id="selectDataSetBasicFile" parameterType="Long" resultMap="DataSetBasicFileResult">
<include refid="selectDataSetBasicFileVo"/>
where abf.file_id = #{fileId}
ORDER BY abf.is_directory DESC ,abf.create_time DESC
</select>
<select id="selectDataSetBasicFileByParentId" resultMap="DataSetBasicFileResult">
<include refid="selectDataSetBasicFileVo"/>
where abf.parent_id = #{parentId} AND abf.del_flag ='0'
@ -67,6 +74,12 @@
</where>
</select>
<select id="selectDataSetBasicFileByFileName" resultType="com.bonus.ai.domain.DataSetBasicFileEntity" resultMap="DataSetBasicFileResult">
<include refid="selectDataSetBasicFileVo"/>
where abf.parent_id = #{parentId} AND abf.del_flag ='0'
<if test="fileName != null and fileName != ''"> and abf.file_name like concat('%', #{fileName}, '%')</if>
ORDER BY abf.is_directory DESC ,abf.create_time DESC
</select>
<insert id="insertDataSetBasicFile" parameterType="com.bonus.ai.domain.DataSetBasicFileEntity" useGeneratedKeys="true" keyProperty="fileId">
insert into ai_basic_file
@ -144,6 +157,11 @@
#{fileId}
</foreach>
</update>
<update id="emptyRecycleBin">
update ai_basic_file
set del_flag='2'
where del_flag = '1'
</update>
<delete id="deleteDataSetBasicFileByFileIds" parameterType="String">
update ai_basic_file set del_flag='1' , update_time = now() where file_id in