fix:新增/修改/删除文件 审批流程 打标签重构

This commit is contained in:
2026-02-04 09:35:11 +08:00
parent 989cfdf70f
commit 927fa018f6
4 changed files with 45 additions and 10 deletions

View File

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

View File

@@ -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 递归删除

View File

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

View File

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