fix:文件删除,可以控制直接删,不放回收站
This commit is contained in:
@@ -0,0 +1,25 @@
|
||||
package com.sdm.data.service;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 文件/目录彻底删除编排服务
|
||||
*/
|
||||
public interface IFileDeleteService {
|
||||
|
||||
/**
|
||||
* 彻底删除文件所有相关数据(元数据、扩展、权限、映射、标签、存储、MinIO对象)
|
||||
*
|
||||
* @param fileIds 文件ID集合
|
||||
*/
|
||||
void deleteAllFileReleateInfo(List<Long> fileIds);
|
||||
|
||||
/**
|
||||
* 彻底删除目录及其所有子项相关数据
|
||||
*
|
||||
* @param rootDirId 根目录ID
|
||||
* @param rootDirObjectKey 根目录对象Key
|
||||
* @param bucketName 桶名
|
||||
*/
|
||||
void deleteAllDirReleateInfo(Long rootDirId, String rootDirObjectKey, String bucketName);
|
||||
}
|
||||
@@ -0,0 +1,103 @@
|
||||
package com.sdm.data.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.sdm.common.entity.enums.DataTypeEnum;
|
||||
import com.sdm.data.model.entity.FileMetadataExtension;
|
||||
import com.sdm.data.model.entity.FileMetadataInfo;
|
||||
import com.sdm.data.model.entity.FileSimulationMapping;
|
||||
import com.sdm.data.model.entity.FileStorage;
|
||||
import com.sdm.data.model.entity.FileTagRel;
|
||||
import com.sdm.data.model.entity.FileUserPermission;
|
||||
import com.sdm.data.service.IFileDeleteService;
|
||||
import com.sdm.data.service.IFileMetadataExtensionService;
|
||||
import com.sdm.data.service.IFileMetadataInfoService;
|
||||
import com.sdm.data.service.IFileSimulationMappingService;
|
||||
import com.sdm.data.service.IFileStorageService;
|
||||
import com.sdm.data.service.IFileTagRelService;
|
||||
import com.sdm.data.service.IFileUserPermissionService;
|
||||
import com.sdm.data.service.IMinioService;
|
||||
import org.apache.commons.collections4.CollectionUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.Set;
|
||||
|
||||
@Service
|
||||
public class FileDeleteServiceImpl implements IFileDeleteService {
|
||||
|
||||
@Autowired
|
||||
private IMinioService minioService;
|
||||
@Autowired
|
||||
private IFileMetadataInfoService fileMetadataInfoService;
|
||||
@Autowired
|
||||
private IFileMetadataExtensionService fileMetadataExtensionService;
|
||||
@Autowired
|
||||
private IFileUserPermissionService fileUserPermissionService;
|
||||
@Autowired
|
||||
private IFileStorageService fileStorageService;
|
||||
@Autowired
|
||||
private IFileSimulationMappingService fileSimulationMappingService;
|
||||
@Autowired
|
||||
private IFileTagRelService fileTagRelService;
|
||||
|
||||
@Override
|
||||
public void deleteAllFileReleateInfo(List<Long> fileIds) {
|
||||
fileMetadataInfoService.lambdaQuery().in(FileMetadataInfo::getId, fileIds).list().forEach(deleteFileMetadataInfo -> {
|
||||
minioService.deleteFile(deleteFileMetadataInfo.getObjectKey(), deleteFileMetadataInfo.getBucketName());
|
||||
});
|
||||
|
||||
fileMetadataInfoService.removeByIds(fileIds);
|
||||
fileStorageService.remove(new LambdaQueryWrapper<FileStorage>().in(FileStorage::getFileId, fileIds));
|
||||
fileMetadataExtensionService.remove(new LambdaQueryWrapper<FileMetadataExtension>().in(FileMetadataExtension::getTFilemetaId, fileIds));
|
||||
fileUserPermissionService.remove(new LambdaQueryWrapper<FileUserPermission>().in(FileUserPermission::getTFilemetaId, fileIds));
|
||||
fileSimulationMappingService.remove(new LambdaQueryWrapper<FileSimulationMapping>().in(FileSimulationMapping::getFileId, fileIds));
|
||||
fileTagRelService.remove(new LambdaQueryWrapper<FileTagRel>().in(FileTagRel::getFileId, fileIds));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deleteAllDirReleateInfo(Long rootDirId, String rootDirObjectKey, String bucketName) {
|
||||
Set<Long> allFileIds = new HashSet<>();
|
||||
Set<Long> allDirIds = new HashSet<>();
|
||||
collectRecursiveIds(rootDirId, allFileIds, allDirIds);
|
||||
|
||||
if (CollectionUtils.isNotEmpty(allFileIds)) {
|
||||
fileMetadataInfoService.removeByIds(allFileIds);
|
||||
fileMetadataExtensionService.lambdaUpdate().in(FileMetadataExtension::getTFilemetaId, allFileIds).remove();
|
||||
fileUserPermissionService.lambdaUpdate().in(FileUserPermission::getTFilemetaId, allFileIds).remove();
|
||||
fileSimulationMappingService.lambdaUpdate().in(FileSimulationMapping::getFileId, allFileIds).remove();
|
||||
fileTagRelService.lambdaUpdate().in(FileTagRel::getFileId, allFileIds).or().in(FileTagRel::getDirId, allFileIds).remove();
|
||||
fileStorageService.lambdaUpdate()
|
||||
.in(FileStorage::getFileId, allFileIds)
|
||||
.or()
|
||||
.in(FileStorage::getDirId, allDirIds)
|
||||
.remove();
|
||||
}
|
||||
|
||||
minioService.deleteDirectoryRecursively(rootDirObjectKey, bucketName);
|
||||
}
|
||||
|
||||
/**
|
||||
* 递归收集目录下所有子文件和子目录的 ID
|
||||
*/
|
||||
private void collectRecursiveIds(Long currentDirId, Set<Long> allFileIds, Set<Long> allDirIds) {
|
||||
allDirIds.add(currentDirId);
|
||||
allFileIds.add(currentDirId);
|
||||
|
||||
List<FileMetadataInfo> children = fileMetadataInfoService.lambdaQuery()
|
||||
.eq(FileMetadataInfo::getParentId, currentDirId)
|
||||
.list();
|
||||
|
||||
if (CollectionUtils.isNotEmpty(children)) {
|
||||
for (FileMetadataInfo child : children) {
|
||||
if (Objects.equals(DataTypeEnum.DIRECTORY.getValue(), child.getDataType())) {
|
||||
collectRecursiveIds(child.getId(), allFileIds, allDirIds);
|
||||
} else {
|
||||
allFileIds.add(child.getId());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user