fix:文件以及文件夹设置tag1-tag10,taskId,runId
This commit is contained in:
7
1-sql/2026-03-05/file_metadata_info.sql
Normal file
7
1-sql/2026-03-05/file_metadata_info.sql
Normal file
@@ -0,0 +1,7 @@
|
||||
ALTER TABLE spdm_baseline.`file_metadata_info`
|
||||
-- 1. 所属工况ID(task_id)- 放在tag10后面
|
||||
ADD COLUMN `task_id` VARCHAR(64) DEFAULT NULL COMMENT '所属工况ID(UUID)' AFTER `tag10`,
|
||||
-- 2. 所属算例ID(run_id)- 紧跟task_id
|
||||
ADD COLUMN `run_id` VARCHAR(64) DEFAULT NULL COMMENT '所属算例ID(UUID)' AFTER `task_id`,
|
||||
-- 3. 排序字段(sort_order)- 紧跟run_id
|
||||
ADD COLUMN `sort_order` INT DEFAULT NULL COMMENT '算例下文件的排序字段,数值越小越靠前';
|
||||
@@ -33,4 +33,7 @@ public class CreateDirReq {
|
||||
// 父节点id
|
||||
@Schema(description = "当前父节点id")
|
||||
private String parentUuId;
|
||||
|
||||
@Schema(description = "标签请求参数")
|
||||
private TagReq tagReq;
|
||||
}
|
||||
@@ -29,4 +29,7 @@ public class DirNodeInfo {
|
||||
|
||||
@Schema(description = "文件夹名称(不传则使用uuid作为名称)")
|
||||
private String dirName;
|
||||
|
||||
@Schema(description = "标签请求参数")
|
||||
private TagReq tagReq;
|
||||
}
|
||||
|
||||
@@ -21,4 +21,7 @@ public class FolderItemReq {
|
||||
|
||||
@Schema(description = "文件夹UUID(可选,用于关联业务资源)")
|
||||
private String folderUuid;
|
||||
|
||||
@Schema(description = "标签请求参数")
|
||||
private TagReq tagReq;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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);
|
||||
|
||||
@@ -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++);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user