fix:文件以及文件夹设置tag1-tag10,taskId,runId

This commit is contained in:
2026-03-05 15:43:26 +08:00
parent d165b09f5a
commit 5b98d410ad
11 changed files with 157 additions and 39 deletions

View File

@@ -0,0 +1,7 @@
ALTER TABLE spdm_baseline.`file_metadata_info`
-- 1. 所属工况IDtask_id- 放在tag10后面
ADD COLUMN `task_id` VARCHAR(64) DEFAULT NULL COMMENT '所属工况IDUUID' AFTER `tag10`,
-- 2. 所属算例IDrun_id- 紧跟task_id
ADD COLUMN `run_id` VARCHAR(64) DEFAULT NULL COMMENT '所属算例IDUUID' AFTER `task_id`,
-- 3. 排序字段sort_order- 紧跟run_id
ADD COLUMN `sort_order` INT DEFAULT NULL COMMENT '算例下文件的排序字段,数值越小越靠前';

View File

@@ -33,4 +33,7 @@ public class CreateDirReq {
// 父节点id
@Schema(description = "当前父节点id")
private String parentUuId;
@Schema(description = "标签请求参数")
private TagReq tagReq;
}

View File

@@ -29,4 +29,7 @@ public class DirNodeInfo {
@Schema(description = "文件夹名称不传则使用uuid作为名称")
private String dirName;
@Schema(description = "标签请求参数")
private TagReq tagReq;
}

View File

@@ -21,4 +21,7 @@ public class FolderItemReq {
@Schema(description = "文件夹UUID可选用于关联业务资源")
private String folderUuid;
@Schema(description = "标签请求参数")
private TagReq tagReq;
}

View File

@@ -0,0 +1,51 @@
package com.sdm.common.entity.req.data;
import com.baomidou.mybatisplus.annotation.TableField;
import lombok.Data;
import io.swagger.v3.oas.annotations.media.Schema;
/**
* @ClassName TagReq
* @Description 标签请求参数
* @Author MengDe
* @Date 2022/4/5 23:07
* @Version 1.0
**/
@Data
public class TagReq {
@Schema(description = "标签1")
private String tag1;
@Schema(description = "标签2")
private String tag2;
@Schema(description = "标签3")
private String tag3;
@Schema(description = "标签4")
private String tag4;
@Schema(description = "标签5")
private String tag5;
@Schema(description = "标签6")
private String tag6;
@Schema(description = "标签7")
private String tag7;
@Schema(description = "标签8")
private String tag8;
@Schema(description = "标签9")
private String tag9;
@Schema(description = "标签10")
private String tag10;
@Schema(description= "任务ID")
private String taskId;
@Schema(description= "算例ID")
private String runId;
}

View File

@@ -1,6 +1,7 @@
package com.sdm.common.entity.req.data;
import com.alibaba.fastjson2.annotation.JSONField;
import com.baomidou.mybatisplus.annotation.TableField;
import com.sdm.common.entity.enums.FileBizTypeEnum;
import com.sdm.common.entity.req.system.DictTagReq;
import io.swagger.v3.oas.annotations.media.Schema;
@@ -73,10 +74,16 @@ public class UploadFilesReq {
private Integer fileType;
/**
* 之前的预留tag字段现在取tag1存储序号用来对生成任务报告里的图片排序
* 存储序号用来对生成任务报告里的图片排序
*/
@Schema(description = "排序号")
private String tag1;
@Schema(description= "算例下文件的排序字段,数值越小越靠前")
private Integer sortOrder;
/**
* 标签请求参数 设置tag1-tag10 ,taskId, runId记录文件所属节点信息
*/
@Schema(description = "标签请求参数")
private TagReq tagReq;
// ----------------------------------------------------------------
// 很重要用于设置标签通过autoFillDictTags切面 设置dictTagIdsCache

View File

@@ -174,6 +174,15 @@ public class FileMetadataInfo implements Serializable {
@TableField("tag10")
private String tag10;
@TableField(value = "task_id")
@Schema(description= "任务ID")
private String taskId;
@TableField(value = "run_id")
@Schema(description= "算例ID")
private String runId;
@Schema(description= "approvalStatus")
@TableField(value = "approvalStatus")
private String approvalStatus;
@@ -217,6 +226,10 @@ public class FileMetadataInfo implements Serializable {
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime recycleExpireAt;
@Schema(description= "算例下文件的排序字段,数值越小越靠前")
@TableField("sort_order")
private Integer sortOrder;
@Schema(description= "cidFlowReviewer:cid审核电子流程里面的评审人,只有列表展示使用")
@TableField(value = "cidFlowReviewer", insertStrategy = FieldStrategy.NEVER,select = false,updateStrategy = FieldStrategy.NEVER)
private String cidFlowReviewer;

View File

@@ -28,13 +28,6 @@ import com.sdm.common.entity.resp.data.BatchCreateNormalDirResp;
*/
@Service
public interface IDataFileService {
/**
* 将文件或目录移入回收站(支持自动重命名释放路径)
* 内部方法,不校验权限
*/
default void moveFileToRecycleBin(FileMetadataInfo fileMetadataInfo) {}
/**
* 创建目录
* @param req 创建目录请求参数
@@ -52,6 +45,15 @@ public interface IDataFileService {
return null;
}
/**
* 批量创建普通目录
* @param req 批量创建普通目录请求参数
* @return 创建结果响应(包含成功列表和失败列表)
*/
default SdmResponse<BatchCreateNormalDirResp> batchCreateNormalDirs(BatchCreateNormalDirReq req) {
return null;
}
default SdmResponse isDirEmpty(Long dirId) {
return null;
}
@@ -135,6 +137,13 @@ public interface IDataFileService {
*/
SdmResponse fileSearch(FileSearchReq req);
/**
* 将文件或目录移入回收站(支持自动重命名释放路径)
* 内部方法,不校验权限
*/
default void moveFileToRecycleBin(FileMetadataInfo fileMetadataInfo) {}
/**
* 查询回收站列表
* @param req 回收站列表查询请求参数
@@ -454,14 +463,4 @@ public interface IDataFileService {
default SdmResponse<List<FileMetadataInfoResp>> queryFileListByIdList(QueryFileReq queryFileReq){return null;}
default SdmResponse<FileMetadataInfoResp> queryFileIdByNodeId(QueryFileIdReq queryFileIdReq){return null;};
/**
* 批量创建普通目录
* @param req 批量创建普通目录请求参数
* @return 创建结果响应(包含成功列表和失败列表)
*/
default SdmResponse<BatchCreateNormalDirResp> batchCreateNormalDirs(BatchCreateNormalDirReq req) {
return null;
}
}

View File

@@ -326,7 +326,7 @@ public class MinioFileIDataFileServiceImpl implements IDataFileService {
minioService.createDirectoryByObjectKey(dirMinioObjectKey,null);
// 创建目录元数据并保存到数据库
FileMetadataInfo dirInfo = createDirectoryMetadata(dirMinioObjectKey, dirName, false, rootDirId, uuId, uuIdOwnType, req.getDirType());
FileMetadataInfo dirInfo = createDirectoryMetadata(dirMinioObjectKey, dirName, false, rootDirId, uuId, uuIdOwnType, req.getDirType(),req.getTagReq());
fileMetadataInfoService.save(dirInfo);
// 创建默认权限记录
@@ -392,7 +392,7 @@ public class MinioFileIDataFileServiceImpl implements IDataFileService {
minioService.createDirectoryByObjectKey(childDirMinioObjectKey,null);
// 创建子目录元数据并保存到数据库
FileMetadataInfo dirInfo = createDirectoryMetadata(childDirMinioObjectKey, req.getDirName(), false, parDirId, req.getUuId(), req.getUuIdOwnType(), parDirInfo.getDirType());
FileMetadataInfo dirInfo = createDirectoryMetadata(childDirMinioObjectKey, req.getDirName(), false, parDirId, req.getUuId(), req.getUuIdOwnType(), parDirInfo.getDirType(),req.getTagReq());
fileMetadataInfoService.save(dirInfo);
// 创建默认权限记录
@@ -426,7 +426,7 @@ public class MinioFileIDataFileServiceImpl implements IDataFileService {
*/
private FileMetadataInfo createDirectoryMetadata(String minioObjectKey, String originalName,
boolean isRoot, Long parentId, String uuid,
String uuIdOwnType, Integer dirType) {
String uuIdOwnType, Integer dirType,TagReq tagReq) {
FileMetadataInfo dirInfo = new FileMetadataInfo();
dirInfo.setObjectKey(minioObjectKey);
dirInfo.setBucketName(minioService.getCurrentTenantBucketName());
@@ -445,6 +445,21 @@ public class MinioFileIDataFileServiceImpl implements IDataFileService {
if (uuIdOwnType != null) {
dirInfo.setRelatedResourceUuidOwnType(uuIdOwnType);
}
if (tagReq != null) {
dirInfo.setTag1(tagReq.getTag1());
dirInfo.setTag2(tagReq.getTag2());
dirInfo.setTag3(tagReq.getTag3());
dirInfo.setTag4(tagReq.getTag4());
dirInfo.setTag5(tagReq.getTag5());
dirInfo.setTag6(tagReq.getTag6());
dirInfo.setTag7(tagReq.getTag7());
dirInfo.setTag8(tagReq.getTag8());
dirInfo.setTag9(tagReq.getTag9());
dirInfo.setTag10(tagReq.getTag10());
dirInfo.setTaskId(tagReq.getTaskId());
dirInfo.setRunId(tagReq.getRunId());
}
return dirInfo;
}
@@ -460,7 +475,8 @@ public class MinioFileIDataFileServiceImpl implements IDataFileService {
* @param fileSize 文件大小
* @return 创建后的文件元数据信息
*/
private FileMetadataInfo createFileMetadata(String filePath, String fileName, String projectId, String analysisDirectionId, String remarks, Long parentId, Long fileSize, String tag1
private FileMetadataInfo createFileMetadata(String filePath, String fileName, String projectId,
String analysisDirectionId, String remarks, Long parentId, Long fileSize, Integer sortOrder,TagReq tagReq
) {
FileMetadataInfo fileInfo = new FileMetadataInfo();
fileInfo.setObjectKey(filePath);
@@ -475,7 +491,21 @@ public class MinioFileIDataFileServiceImpl implements IDataFileService {
fileInfo.setCreatorId(ThreadLocalContext.getUserId());
fileInfo.setTenantId(ThreadLocalContext.getTenantId());
fileInfo.setFileSize(fileSize);
fileInfo.setTag1(tag1);
fileInfo.setSortOrder(sortOrder);
if (tagReq != null) {
fileInfo.setTag1(tagReq.getTag1());
fileInfo.setTag2(tagReq.getTag2());
fileInfo.setTag3(tagReq.getTag3());
fileInfo.setTag4(tagReq.getTag4());
fileInfo.setTag5(tagReq.getTag5());
fileInfo.setTag6(tagReq.getTag6());
fileInfo.setTag7(tagReq.getTag7());
fileInfo.setTag8(tagReq.getTag8());
fileInfo.setTag9(tagReq.getTag9());
fileInfo.setTag10(tagReq.getTag10());
fileInfo.setTaskId(tagReq.getTaskId());
fileInfo.setRunId(tagReq.getRunId());
}
return fileInfo;
}
@@ -1434,7 +1464,8 @@ public class MinioFileIDataFileServiceImpl implements IDataFileService {
null, // parentId
null,
null,
dirType.getValue()
dirType.getValue(),
null
);
// 显式设置关键字段
dirInfo.setTenantId(tenantId);
@@ -1650,7 +1681,7 @@ public class MinioFileIDataFileServiceImpl implements IDataFileService {
minioService.copyFile(oldDirMinioObjectKey, newDirMinioObjectKey,sourceMetadataInfo.getBucketName());
// 创建目录元数据并保存到数据库
FileMetadataInfo fileInfo = createFileMetadata(newDirMinioObjectKey, sourceMetadataInfo.getOriginalName(),
null, null, null, targetParentMetadataInfo.getId(), sourceMetadataInfo.getFileSize(), sourceMetadataInfo.getTag1());
null, null, null, targetParentMetadataInfo.getId(), sourceMetadataInfo.getFileSize(), sourceMetadataInfo.getSortOrder(),null);
fileMetadataInfoService.save(fileInfo);
UploadFilesReq uploadFilesReq = new UploadFilesReq();
@@ -2090,7 +2121,7 @@ public class MinioFileIDataFileServiceImpl implements IDataFileService {
minioService.uploadFile(req.getFile(), fileMinioObjectKey, null, dirMetadataInfo.getBucketName());
FileMetadataInfo fileInfo = createFileMetadata(fileMinioObjectKey, originalName,
req.getProjectId(), req.getAnalysisDirectionId(), req.getRemarks(), dirMetadataInfo.getId(), req.getFile().getSize(), req.getTag1()
req.getProjectId(), req.getAnalysisDirectionId(), req.getRemarks(), dirMetadataInfo.getId(), req.getFile().getSize(), req.getSortOrder(),req.getTagReq()
);
fileMetadataInfoService.save(fileInfo);
@@ -2129,7 +2160,7 @@ public class MinioFileIDataFileServiceImpl implements IDataFileService {
try {
FileMetadataInfo fileInfo = createFileMetadata(fileMinioObjectKey, fileReq.getFileName(),
req.getProjectId(), req.getAnalysisDirectionId(), req.getRemarks(), dirMetadataInfo.getId(), fileReq.getSize(), null);
req.getProjectId(), req.getAnalysisDirectionId(), req.getRemarks(), dirMetadataInfo.getId(), fileReq.getSize(), null,req.getTagReq());
fileInfo.setUploadTaskId(req.getUploadTaskId());
fileInfo.setTemplateId(req.getTemplateId());
fileInfo.setTemplateName(req.getTemplateName());
@@ -2976,7 +3007,7 @@ public class MinioFileIDataFileServiceImpl implements IDataFileService {
// 创建目录元数据并保存到数据库
FileMetadataInfo fileInfo = createFileMetadata(avatarMinioObjectKey, newFilename,
null, null, null, parAvatarDirId, avatar.getSize(), null);
null, null, null, parAvatarDirId, avatar.getSize(), null,null);
fileMetadataInfoService.save(fileInfo);
JSONObject jsonObject = new JSONObject();
jsonObject.put("avatarId", fileInfo.getId());
@@ -3037,7 +3068,7 @@ public class MinioFileIDataFileServiceImpl implements IDataFileService {
// 创建目录元数据并保存到数据库
FileMetadataInfo fileInfo = createFileMetadata(simulationParamMinioObjectKey, originalFilename,
null, null, null, parSimulationParamDirId, paramFile.getSize(), null);
null, null, null, parSimulationParamDirId, paramFile.getSize(), null,null);
// 设置文件状态为审批中 暂不可见
fileInfo.setApprovalStatus(ApprovalFileDataStatusEnum.PENDING.getKey());
fileInfo.setApproveType(ApproveFileDataTypeEnum.UPLOAD_REVIEWING.getCode());
@@ -3133,7 +3164,7 @@ public class MinioFileIDataFileServiceImpl implements IDataFileService {
// 创建目录元数据并保存到数据库
FileMetadataInfo fileInfo = createFileMetadata(trainingMinioObjectKey, originalFilename,
null, null, null, parTrainModelDirId, trainModelFile.getSize(), null);
null, null, null, parTrainModelDirId, trainModelFile.getSize(), null,null);
fileMetadataInfoService.save(fileInfo);
return SdmResponse.success(fileInfo.getId());
} catch (Exception e) {
@@ -3178,7 +3209,7 @@ public class MinioFileIDataFileServiceImpl implements IDataFileService {
// 创建目录元数据并保存到数据库
FileMetadataInfo fileInfo = createFileMetadata(fileMinioObjectKey, originalFilename,
null, null, null, parDirId, file.getSize(), null);
null, null, null, parDirId, file.getSize(), null,null);
fileMetadataInfoService.save(fileInfo);
return SdmResponse.success(fileInfo.getId());
} catch (Exception e) {
@@ -4544,7 +4575,7 @@ public class MinioFileIDataFileServiceImpl implements IDataFileService {
// 创建目录元数据
FileMetadataInfo dirInfo = createDirectoryMetadata(
childDirMinioObjectKey, node.getDirName(), false, parentDbId,
node.getUuId(), node.getUuIdOwnType(), ctx.dirType);
node.getUuId(), node.getUuIdOwnType(), ctx.dirType,node.getTagReq());
// 预先更新ObjectKey映射供下一层使用
ctx.getUuidToObjectKeyMap().put(node.getUuId(), childDirMinioObjectKey);
@@ -4841,7 +4872,8 @@ public class MinioFileIDataFileServiceImpl implements IDataFileService {
parentDir.getId(),
item.getFolderUuid(), // 保存 UUID
null,
parentDir.getDirType());
parentDir.getDirType(),
item.getTagReq());
newDirs.add(dirInfo);
minioKeys.add(objectKey);

View File

@@ -1805,7 +1805,7 @@ public class SimulationRunServiceImpl extends ServiceImpl<SimulationRunMapper, S
if (CollectionUtils.isNotEmpty(imageNames)) {
int sortOrder = 1;
for (String imageName : imageNames) {
archiveReportAndImage(null, req.getTaskId(), req.getRunId(), randomId, FileBizTypeEnum.CLOUD_FILE, imageName, String.valueOf(sortOrder++));
archiveReportAndImage(null, req.getTaskId(), req.getRunId(), randomId, FileBizTypeEnum.CLOUD_FILE, imageName, sortOrder++);
}
}
return SdmResponse.success();
@@ -1816,7 +1816,7 @@ public class SimulationRunServiceImpl extends ServiceImpl<SimulationRunMapper, S
return SdmResponse.failed("生成自动化报告失败");
}
private void archiveReportAndImage(String reportName, String taskId, String runId, String randomId, FileBizTypeEnum fileBizTypeEnum, String imageName, String sortOrder) {
private void archiveReportAndImage(String reportName, String taskId, String runId, String randomId, FileBizTypeEnum fileBizTypeEnum, String imageName, Integer sortOrder) {
byte[] fileData = null;
try {
String fileName = "";
@@ -1844,7 +1844,7 @@ public class SimulationRunServiceImpl extends ServiceImpl<SimulationRunMapper, S
filesReq.setFileType(fileBizTypeEnum.getValue());
filesReq.setUuid(null);
filesReq.setDirId(parentId);
filesReq.setTag1(sortOrder);
filesReq.setSortOrder(sortOrder);
filesReq.setFileTypeDictClass(FileDictTagEnum.FILE_TYPE.getDictClass());
filesReq.setFileTypeDictValue(String.valueOf(fileBizTypeEnum.getValue()));
filesReq.setDictTags(Arrays.asList(FileDictTagEnum.FILE_TYPE.getDictClassFieldName(), FileDictTagEnum.FILE_TYPE.getDictValueFieldName()));
@@ -2136,7 +2136,7 @@ public class SimulationRunServiceImpl extends ServiceImpl<SimulationRunMapper, S
if (CollectionUtils.isNotEmpty(imageNames)) {
int sortOrder = 1;
for (String imageName : imageNames) {
archiveReportAndImage(null, req.getTaskId(), req.getRunId(), randomId, FileBizTypeEnum.CLOUD_FILE, imageName, String.valueOf(sortOrder++));
archiveReportAndImage(null, req.getTaskId(), req.getRunId(), randomId, FileBizTypeEnum.CLOUD_FILE, imageName, sortOrder++);
}
}