fix:新增/修改/删除文件 审批流程 打标签重构
This commit is contained in:
@@ -700,6 +700,7 @@ public class MinioFileIDataFileServiceImpl implements IDataFileService {
|
||||
fileStorageService.remove(new LambdaQueryWrapper<FileStorage>().eq(FileStorage::getFileId, deleteFileMetadataInfo.getId()));
|
||||
fileMetadataExtensionService.remove(new LambdaQueryWrapper<FileMetadataExtension>().eq(FileMetadataExtension::getTFilemetaId, deleteFileMetadataInfo.getId()));
|
||||
fileUserPermissionService.remove(new LambdaQueryWrapper<FileUserPermission>().eq(FileUserPermission::getTFilemetaId, deleteFileMetadataInfo.getId()));
|
||||
fileTagRelService.remove(new LambdaQueryWrapper<FileTagRel>().eq(FileTagRel::getFileId, deleteFileMetadataInfo.getId()));
|
||||
return SdmResponse.success("操作成功");
|
||||
}
|
||||
} catch (Exception e) {
|
||||
@@ -2501,9 +2502,14 @@ public class MinioFileIDataFileServiceImpl implements IDataFileService {
|
||||
tempFileMetadataInfo.setUpdateTime(LocalDateTime.now());
|
||||
|
||||
// 保存标签缓存到 tempFileMetadataInfo(如果有)
|
||||
if (CollectionUtils.isNotEmpty(req.getDictTags()) && req.getDictTagIdsCache() != null) {
|
||||
tempFileMetadataInfo.setDictTagIdsCache(req.getDictTagIdsCache());
|
||||
if (CollectionUtils.isNotEmpty(req.getDictTags())) {
|
||||
Map<String, Map<String, Integer>> dictIdMap = req.getDictTagIdsCache();
|
||||
if (dictIdMap == null || dictIdMap.isEmpty()) {
|
||||
dictIdMap = dictTagHelper.queryAndCacheDictTagIds(req);
|
||||
}
|
||||
tempFileMetadataInfo.setDictTagIdsCache(dictIdMap);
|
||||
}
|
||||
|
||||
|
||||
fileMetadataInfo.setTempMetadata(JSONObject.toJSONString(tempFileMetadataInfo));
|
||||
fileMetadataInfo.setUpdateTime(LocalDateTime.now());
|
||||
|
||||
@@ -54,6 +54,7 @@ public class DeleteApproveStrategy implements ApproveStrategy {
|
||||
IFileStorageService fileStorageService = context.getFileStorageService();
|
||||
ISimulationParameterLibraryCategoryObjectService paramObjectService = context.getParamObjectService();
|
||||
IFileSimulationMappingService fileSimulationMappingService = context.getFileSimulationMappingService();
|
||||
IFileTagRelService fileTagRelService = context.getFileTagRelService();
|
||||
|
||||
// 删除MinIO文件
|
||||
minioService.deleteFile(metadata.getObjectKey(), metadata.getBucketName());
|
||||
@@ -64,6 +65,7 @@ public class DeleteApproveStrategy implements ApproveStrategy {
|
||||
fileMetadataExtensionService.remove(new LambdaQueryWrapper<FileMetadataExtension>().eq(FileMetadataExtension::getTFilemetaId, metadata.getId()));
|
||||
fileUserPermissionService.remove(new LambdaQueryWrapper<FileUserPermission>().eq(FileUserPermission::getTFilemetaId, metadata.getId()));
|
||||
fileSimulationMappingService.remove(new LambdaQueryWrapper<FileSimulationMapping>().eq(FileSimulationMapping::getFileId, metadata.getId()));
|
||||
fileTagRelService.remove(new LambdaQueryWrapper<FileTagRel>().in(FileTagRel::getFileId, metadata.getId()));
|
||||
|
||||
// 如果是参数库审批 删除参数库对象
|
||||
if (ApproveTypeEnum.PARAM_APPROVE.getCode() == type) {
|
||||
@@ -84,6 +86,7 @@ public class DeleteApproveStrategy implements ApproveStrategy {
|
||||
IFileUserPermissionService fileUserPermissionService = context.getFileUserPermissionService();
|
||||
IFileStorageService fileStorageService = context.getFileStorageService();
|
||||
IFileSimulationMappingService fileSimulationMappingService = context.getFileSimulationMappingService();
|
||||
IFileTagRelService fileTagRelService = context.getFileTagRelService();
|
||||
|
||||
Long rootDirId = rootDirMetadata.getId();
|
||||
String rootDirObjectKey = rootDirMetadata.getObjectKey();
|
||||
@@ -105,6 +108,7 @@ public class DeleteApproveStrategy implements ApproveStrategy {
|
||||
.or()
|
||||
.in(FileStorage::getDirId, allDirIds)
|
||||
.remove();
|
||||
fileTagRelService.lambdaUpdate().in(FileTagRel::getDirId, allFileIds).remove();
|
||||
}
|
||||
|
||||
// MinIO 递归删除
|
||||
|
||||
@@ -65,7 +65,7 @@ public class ModifyMetadataApproveStrategy implements ApproveStrategy {
|
||||
|
||||
// 处理标签更新(如果 tempMetadata 中包含标签信息)
|
||||
if (updateInfo.getDictTagIdsCache() != null && !updateInfo.getDictTagIdsCache().isEmpty()) {
|
||||
updateFileTagsAfterApproval(metadata, updateInfo, fileTagRelService);
|
||||
updateFileTagsAfterApproval(metadata, updateInfo, service, fileTagRelService);
|
||||
}
|
||||
|
||||
return true;
|
||||
@@ -86,8 +86,10 @@ public class ModifyMetadataApproveStrategy implements ApproveStrategy {
|
||||
/**
|
||||
* 审批通过后更新文件标签
|
||||
* 从 updateInfo 中获取标签信息并更新到 file_tag_rel 表
|
||||
* 为当前文件所在目录及其所有祖先目录创建标签关系
|
||||
*/
|
||||
private void updateFileTagsAfterApproval(FileMetadataInfo metadata, FileMetadataInfo updateInfo,
|
||||
private void updateFileTagsAfterApproval(FileMetadataInfo metadata, FileMetadataInfo updateInfo,
|
||||
IFileMetadataInfoService fileMetadataInfoService,
|
||||
IFileTagRelService fileTagRelService) {
|
||||
try {
|
||||
Long tenantId = metadata.getTenantId();
|
||||
@@ -106,9 +108,12 @@ public class ModifyMetadataApproveStrategy implements ApproveStrategy {
|
||||
.eq(FileTagRel::getFileId, fileId)
|
||||
.remove();
|
||||
|
||||
// 构建新标签关系
|
||||
List<FileTagRel> newTagRelList = new ArrayList<>();
|
||||
// 查询当前目录及所有祖先目录 ID
|
||||
Long dirId = updateInfo.getParentId();
|
||||
List<Long> dirIdAndAncestors = dirId != null ? collectDirIdAndAncestorIds(dirId, fileMetadataInfoService) : new ArrayList<>();
|
||||
|
||||
// 构建新标签关系(为当前目录及每个祖先目录各创建一条)
|
||||
List<FileTagRel> newTagRelList = new ArrayList<>();
|
||||
Long fileSize = updateInfo.getFileSize() != null ? updateInfo.getFileSize() : 0L;
|
||||
|
||||
for (Map.Entry<String, Map<String, Integer>> classEntry : dictTagIdsCache.entrySet()) {
|
||||
@@ -119,13 +124,11 @@ public class ModifyMetadataApproveStrategy implements ApproveStrategy {
|
||||
continue;
|
||||
}
|
||||
|
||||
// 注意:这里只为当前文件所在目录创建标签关系
|
||||
// 如果需要为祖先目录也创建,需要从 metadata 中获取 parentId 并递归查询
|
||||
if (dirId != null) {
|
||||
for (Long ancestorDirId : dirIdAndAncestors) {
|
||||
FileTagRel tagRel = new FileTagRel();
|
||||
tagRel.setFileId(fileId);
|
||||
tagRel.setTagId(dictId);
|
||||
tagRel.setDirId(dirId);
|
||||
tagRel.setDirId(ancestorDirId);
|
||||
tagRel.setTenantId(tenantId);
|
||||
tagRel.setCreatorId(creatorId);
|
||||
tagRel.setFileSize(fileSize);
|
||||
@@ -144,4 +147,22 @@ public class ModifyMetadataApproveStrategy implements ApproveStrategy {
|
||||
// 不抛出异常,避免影响审批流程
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 收集当前目录及其所有祖先目录的 ID(从当前目录到根路径)
|
||||
*/
|
||||
private List<Long> collectDirIdAndAncestorIds(Long dirId, IFileMetadataInfoService fileMetadataInfoService) {
|
||||
List<Long> dirIds = new ArrayList<>();
|
||||
Long currentId = dirId;
|
||||
int maxDepth = 100; // 防止循环引用导致死循环
|
||||
while (currentId != null && currentId > 0 && dirIds.size() < maxDepth) {
|
||||
dirIds.add(currentId);
|
||||
FileMetadataInfo dirMeta = fileMetadataInfoService.getById(currentId);
|
||||
if (dirMeta == null || dirMeta.getParentId() == null || dirMeta.getParentId() <= 0) {
|
||||
break;
|
||||
}
|
||||
currentId = dirMeta.getParentId();
|
||||
}
|
||||
return dirIds;
|
||||
}
|
||||
}
|
||||
@@ -28,6 +28,7 @@ public class UploadApproveStrategy implements ApproveStrategy {
|
||||
IFileStorageService fileStorageService = context.getFileStorageService();
|
||||
IFileSimulationMappingService fileSimulationMappingService = context.getFileSimulationMappingService();
|
||||
ISimulationParameterLibraryCategoryObjectService paramObjectService = context.getParamObjectService();
|
||||
IFileTagRelService fileTagRelService = context.getFileTagRelService();
|
||||
|
||||
// 审批通过
|
||||
if (NumberConstants.TWO == status) {
|
||||
@@ -54,6 +55,9 @@ public class UploadApproveStrategy implements ApproveStrategy {
|
||||
fileUserPermissionService.remove(new LambdaQueryWrapper<FileUserPermission>().in(FileUserPermission::getTFilemetaId, removeIds));
|
||||
fileSimulationMappingService.remove(new LambdaQueryWrapper<FileSimulationMapping>().in(FileSimulationMapping::getFileId, removeIds));
|
||||
|
||||
// 删除文件标签关系
|
||||
fileTagRelService.remove(new LambdaQueryWrapper<FileTagRel>().in(FileTagRel::getFileId, removeIds));
|
||||
|
||||
// 如果是参数库审批 删除参数库对象 记录操作日志
|
||||
if (ApproveTypeEnum.PARAM_APPROVE.getCode() == context.getApproveType()) {
|
||||
paramObjectService.remove(new LambdaQueryWrapper<SimulationParameterLibraryCategoryObject>().in(SimulationParameterLibraryCategoryObject::getFileId, removeIds));
|
||||
|
||||
Reference in New Issue
Block a user