优化创建节点同时创建文件夹

This commit is contained in:
2025-11-07 15:17:33 +08:00
parent 9585eccd1e
commit ee8a133580
12 changed files with 159 additions and 34 deletions

View File

@@ -2,6 +2,9 @@ package com.sdm.data.controller;
import com.sdm.common.common.SdmResponse;
import com.sdm.common.entity.req.data.CreateDirReq;
import com.sdm.common.entity.req.data.DelDirReq;
import com.sdm.common.entity.req.data.RenameDirReq;
import com.sdm.data.model.req.RenameFileReq;
import com.sdm.common.entity.req.system.LaunchApproveReq;
import com.sdm.common.entity.resp.data.FileMetadataInfoResp;
import com.sdm.common.feign.inter.data.IDataFeignClient;

View File

@@ -1,28 +0,0 @@
package com.sdm.data.model.req;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@Data
@Schema(description = "删除文件夹请求参数")
public class DelDirReq {
@Schema(description = "删除的文件夹id", requiredMode = Schema.RequiredMode.REQUIRED)
private Long delDirId;
@Schema(description = "删除的项目节点id", requiredMode = Schema.RequiredMode.REQUIRED)
private String delUuid;
@Schema(description = "当前待删除节点uuid所属类型:node,task,run,performance")
private String delUuIdOwnType;
@Schema(description = "父路径")
private String parentPath;
@Schema(description = "文件夹名称")
private String dirName;
// 0相对路径1绝对路径
@Schema(description = "路径类型: 0相对路径1绝对路径", defaultValue = "0")
private Integer type = 0;
}

View File

@@ -1,32 +0,0 @@
package com.sdm.data.model.req;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotBlank;
import lombok.Data;
@Data
@Schema(description = "重命名文件夹请求参数")
public class RenameDirReq {
@Schema(description = "待重命名文件夹id", requiredMode = Schema.RequiredMode.REQUIRED)
private Long dirId;
@Schema(description = "待重命名节点id", requiredMode = Schema.RequiredMode.REQUIRED)
private String uuid;
@Schema(description = "当前待重命名节点uuid所属类型:node,task,run,performance")
private String uuIdOwnType;
@Schema(description = "父路径", requiredMode = Schema.RequiredMode.REQUIRED)
private String parentPath;
@Schema(description = "原文件名", requiredMode = Schema.RequiredMode.REQUIRED)
private String oldName;
@NotBlank(message = "newName不能为空")
@Schema(description = "新文件名", requiredMode = Schema.RequiredMode.REQUIRED)
private String newName;
// 0相对路径1绝对路径
@Schema(description = "路径类型: 0相对路径, 1绝对路径", defaultValue = "0")
private Integer type = 0;
}

View File

@@ -2,6 +2,9 @@ package com.sdm.data.service;
import com.sdm.common.common.SdmResponse;
import com.sdm.common.entity.req.data.CreateDirReq;
import com.sdm.common.entity.req.data.DelDirReq;
import com.sdm.common.entity.req.data.RenameDirReq;
import com.sdm.data.model.req.RenameFileReq;
import com.sdm.common.entity.req.system.LaunchApproveReq;
import com.sdm.common.entity.resp.data.FileMetadataInfoResp;
import com.sdm.data.model.req.*;

View File

@@ -2,7 +2,6 @@ package com.sdm.data.service.impl;
import com.alibaba.fastjson2.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
@@ -13,6 +12,9 @@ import com.sdm.common.entity.constants.NumberConstants;
import com.sdm.common.entity.enums.ApprovalFileDataStatusEnum;
import com.sdm.common.entity.enums.ApproveFileDataTypeEnum;
import com.sdm.common.entity.req.data.CreateDirReq;
import com.sdm.common.entity.req.data.DelDirReq;
import com.sdm.common.entity.req.data.RenameDirReq;
import com.sdm.data.model.req.RenameFileReq;
import com.sdm.common.entity.req.project.DelNodeReq;
import com.sdm.common.entity.req.project.RenameNodeReq;
import com.sdm.common.entity.req.system.LaunchApproveReq;
@@ -38,6 +40,7 @@ import com.sdm.data.service.impl.dataFileHandle.ApproveStrategyFactory;
import jakarta.servlet.http.HttpServletResponse;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.ObjectUtils;
import org.assertj.core.util.DateUtil;
import org.jetbrains.annotations.NotNull;
import org.springframework.beans.BeanUtils;
@@ -115,7 +118,7 @@ public class MinioFileIDataFileServiceImpl implements IDataFileService {
}
try {
// 处理根目录创建逻辑(知识库根目录创建逻辑和项目节点目录创建)
if (ObjectUtils.isNull(req.getParDirId()) && ObjectUtils.isNull(req.getParentUuId())) {
if (ObjectUtils.isEmpty(req.getParDirId()) && ObjectUtils.isEmpty(req.getParentUuId())) {
return createRootDir(req);
} else {
// 处理子目录创建逻辑
@@ -231,7 +234,7 @@ public class MinioFileIDataFileServiceImpl implements IDataFileService {
*/
public SdmResponse<?> createRootDir(CreateDirReq req) {
if(ObjectUtils.isNull(req.getDirType())){
if(ObjectUtils.isEmpty(req.getDirType())){
return SdmResponse.failed("请选择目录类型:1 知识库文件夹2 项目节点文件夹3 头像库文件夹4 仿真参数库文件夹,5 训练模型文件夹");
}
@@ -302,7 +305,7 @@ public class MinioFileIDataFileServiceImpl implements IDataFileService {
}
FileMetadataInfo parDirInfo = fileMetadataInfoService.lambdaQuery().eq(FileMetadataInfo::getId, parDirId).one();
if (ObjectUtils.isNull(parDirInfo)) {
if (ObjectUtils.isEmpty(parDirInfo)) {
return SdmResponse.failed("上级目录不存在");
}
@@ -478,7 +481,7 @@ public class MinioFileIDataFileServiceImpl implements IDataFileService {
deleteDirMetadataInfo = fileMetadataInfoService.lambdaQuery().eq(FileMetadataInfo::getId, req.getDelDirId()).one();
}
if (ObjectUtils.isNull(deleteDirMetadataInfo)) {
if (ObjectUtils.isEmpty(deleteDirMetadataInfo)) {
return SdmResponse.failed("目录不存在");
}
@@ -502,7 +505,7 @@ public class MinioFileIDataFileServiceImpl implements IDataFileService {
// minio文件系统批量删除文件
minioService.deleteDirectoryRecursively(dirMinioObjectKey);
if (ObjectUtils.isNotNull(req.getDelUuid()) && ObjectUtils.isNotNull(req.getDelUuIdOwnType())) {
if (ObjectUtils.isNotEmpty(req.getDelUuid()) && ObjectUtils.isNotEmpty(req.getDelUuIdOwnType())) {
DelNodeReq delNodeReq = new DelNodeReq();
delNodeReq.setUuid(req.getDelUuid());
delNodeReq.setUuidOwnType(req.getDelUuIdOwnType());
@@ -527,7 +530,7 @@ public class MinioFileIDataFileServiceImpl implements IDataFileService {
try {
Long delFileId = req.getDelFileId();
FileMetadataInfo deleteFileMetadataInfo = fileMetadataInfoService.lambdaQuery().eq(FileMetadataInfo::getId, delFileId).one();
if (ObjectUtils.isNull(deleteFileMetadataInfo)) {
if (ObjectUtils.isEmpty(deleteFileMetadataInfo)) {
return SdmResponse.failed("文件不存在");
}
@@ -559,10 +562,10 @@ public class MinioFileIDataFileServiceImpl implements IDataFileService {
public SdmResponse fileSearch(FileSearchReq minioFileSearchReq) {
FileMetadataInfo fileMetadataInfo = null;
if (ObjectUtils.isNotNull(minioFileSearchReq.getParentUuid())) {
if (ObjectUtils.isNotEmpty(minioFileSearchReq.getParentUuid())) {
// 项目节点下搜索文件
fileMetadataInfo = fileMetadataInfoService.lambdaQuery().eq(FileMetadataInfo::getRelatedResourceUuid, minioFileSearchReq.getParentUuid()).one();
} else if (ObjectUtils.isNotNull(minioFileSearchReq.getParentDirId())) {
} else if (ObjectUtils.isNotEmpty(minioFileSearchReq.getParentDirId())) {
// 知识库的文件查询
fileMetadataInfo = fileMetadataInfoService.getById(minioFileSearchReq.getParentDirId());
}
@@ -633,9 +636,9 @@ public class MinioFileIDataFileServiceImpl implements IDataFileService {
return SdmResponse.success();
}
List<FileMetadataInfo> list = fileMetadataInfoService.lambdaQuery().eq(FileMetadataInfo::getParentId, parentId)
.eq(ObjectUtils.isNotNull(req.getUploadUserId()), FileMetadataInfo::getCreatorId, req.getUploadUserId())
.eq(ObjectUtils.isNotNull(req.getQueryTarget()), FileMetadataInfo::getDataType, req.getQueryTarget())
.like(ObjectUtils.isNotNull(req.getFileName()), FileMetadataInfo::getOriginalName, req.getFileName())
.eq(ObjectUtils.isNotEmpty(req.getUploadUserId()), FileMetadataInfo::getCreatorId, req.getUploadUserId())
.eq(ObjectUtils.isNotEmpty(req.getQueryTarget()), FileMetadataInfo::getDataType, req.getQueryTarget())
.like(ObjectUtils.isNotEmpty(req.getFileName()), FileMetadataInfo::getOriginalName, req.getFileName())
.eq(FileMetadataInfo::getIsLatest, Constants.FileIsLast.YES.getValue())
.list();
if (ObjectUtils.isEmpty(list)) {
@@ -725,7 +728,7 @@ public class MinioFileIDataFileServiceImpl implements IDataFileService {
@Transactional(rollbackFor = Exception.class)
public SdmResponse updatePermission(UpdatePermissionReq req) {
Map<Long, Byte> userPermissions = req.getUserPermissions();
if (ObjectUtils.isNull(userPermissions)) return SdmResponse.failed("参数错误,缺少userPermissions参数");
if (ObjectUtils.isEmpty(userPermissions)) return SdmResponse.failed("参数错误,缺少userPermissions参数");
Long fileId = req.getFileId();
FileMetadataInfo fileMetadataInfo = fileMetadataInfoService.lambdaQuery().eq(FileMetadataInfo::getId, fileId).one();
@@ -831,10 +834,17 @@ public class MinioFileIDataFileServiceImpl implements IDataFileService {
@Override
public SdmResponse renameDirNew(RenameDirReq req) {
FileMetadataInfo dirMetadataInfo = fileMetadataInfoService.lambdaQuery().eq(FileMetadataInfo::getId, req.getDirId()).one();
if (dirMetadataInfo == null) {
FileMetadataInfo dirMetadataInfo = null;
if (ObjectUtils.isNotEmpty(req.getUuid()) ) {
dirMetadataInfo = fileMetadataInfoService.lambdaQuery().eq(FileMetadataInfo::getRelatedResourceUuid, req.getUuid()).one();
} else {
dirMetadataInfo = fileMetadataInfoService.lambdaQuery().eq(FileMetadataInfo::getId, req.getDirId()).one();
}
if (ObjectUtils.isEmpty(dirMetadataInfo)) {
return SdmResponse.failed("文件夹不存在");
}
String oldDirMinioObjectKey = dirMetadataInfo.getObjectKey();
boolean hasWritePermission = fileUserPermissionService.hasFilePermission(dirMetadataInfo.getId(), ThreadLocalContext.getUserId(), Constants.FilePermission.WRITE);
@@ -848,7 +858,7 @@ public class MinioFileIDataFileServiceImpl implements IDataFileService {
minioService.renameFile(oldDirMinioObjectKey, newDirMinioObjectKey);
fileMetadataInfoService.lambdaUpdate().set(FileMetadataInfo::getObjectKey, newDirMinioObjectKey).set(FileMetadataInfo::getOriginalName, req.getNewName()).eq(FileMetadataInfo::getId, dirMetadataInfo.getId()).update();
if (ObjectUtils.isNotNull(req.getUuid()) && ObjectUtils.isNotNull(req.getUuIdOwnType())) {
if (ObjectUtils.isNotEmpty(req.getUuid()) && ObjectUtils.isNotEmpty(req.getUuIdOwnType())) {
RenameNodeReq renameNodeReq = new RenameNodeReq();
renameNodeReq.setUuid(req.getUuid());
renameNodeReq.setUuidOwnType(req.getUuIdOwnType());
@@ -972,6 +982,7 @@ public class MinioFileIDataFileServiceImpl implements IDataFileService {
fileInfo.setApproveType(ApproveFileDataTypeEnum.UPLOAD_REVIEWING.getCode());
fileMetadataInfoService.save(fileInfo);
// 需要保存文件的历史版本记录同一文件的所有版本共享一个ID
fileInfo.setFileGroupId(fileInfo.getId());
fileMetadataInfoService.updateById(fileInfo);
// 调用审批流,开启审批; 上面先入库拿到主键id,审批流创建失败后再回退数据
@@ -1033,7 +1044,7 @@ public class MinioFileIDataFileServiceImpl implements IDataFileService {
@Override
public SdmResponse<List<FileMetadataInfoResp>> listDir(Integer dirType, Long parentDirId) {
try {
if (ObjectUtils.isNull(dirType)) {
if (ObjectUtils.isEmpty(dirType)) {
return SdmResponse.failed("请选择目录类型:1 知识库文件夹2 项目节点文件夹3 头像库文件夹4 仿真参数库文件夹,5 训练模型文件夹");
}
@@ -1090,7 +1101,7 @@ public class MinioFileIDataFileServiceImpl implements IDataFileService {
Long fileGroupId = fileMetadataInfo.getFileGroupId();
Long versionNo = fileMetadataInfo.getVersionNo();
// 修改待审批的元数据主键id
if (ObjectUtils.isNull(req.getFile())) {
if (ObjectUtils.isEmpty(req.getFile())) {
FileMetadataInfo tempFileMetadataInfo = new FileMetadataInfo();
BeanUtils.copyProperties(fileMetadataInfo, tempFileMetadataInfo);
// 不需要上传minio新文件只更新文件元数据

View File

@@ -88,7 +88,7 @@ public class ModelServiceImpl implements IModelService {
/**
* trainResult 训练结果文件名
*/
private static final String TRAINING_JSON_FILE_NAME = "training.json";
private static final String TRAINING_JSON_FILE_NAME = "curve.json";
/**
* trainResult 训练日志文件

View File

@@ -11,6 +11,8 @@ import com.sdm.common.entity.enums.UserRole;
import com.sdm.common.entity.pojo.system.SysCompany;
import com.sdm.common.entity.pojo.system.SysUserInfo;
import com.sdm.common.entity.req.data.CreateDirReq;
import com.sdm.common.entity.req.data.DelDirReq;
import com.sdm.data.model.req.RenameFileReq;
import com.sdm.common.service.CommonService;
import com.sdm.common.utils.*;
import com.sdm.data.dao.DataMapper;