批量导入项目节点

This commit is contained in:
2026-01-22 15:58:54 +08:00
parent 5399d2c67d
commit fe27aa1e39
13 changed files with 705 additions and 0 deletions

View File

@@ -0,0 +1,27 @@
package com.sdm.common.entity.req.data;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotBlank;
import lombok.Data;
/**
* 子节点文件夹信息
*/
@Data
@Schema(description = "子节点文件夹信息")
public class BatchChildDirNodeInfo {
@Schema(description = "节点的业务UUID", requiredMode = Schema.RequiredMode.REQUIRED)
@NotBlank(message = "节点UUID不能为空")
private String uuId;
@Schema(description = "父节点UUID第一层可为空表示挂在系统根目录下")
private String parentUuId;
@Schema(description = "UUID所属类型:node,task,run,performance", requiredMode = Schema.RequiredMode.REQUIRED)
@NotBlank(message = "UUID类型不能为空")
private String uuIdOwnType;
@Schema(description = "文件夹名称如果不传则使用uuid作为名称")
private String dirName;
}

View File

@@ -0,0 +1,37 @@
package com.sdm.common.entity.req.data;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.Valid;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import java.util.List;
/**
* 批量创建文件夹单项 - 表示一组父子节点的创建信息
* <p>
* 示例:
* <pre>
* {
* "parentDirNodeInfo": {"uuId": "proj-001", "uuIdOwnType": "project", "dirName": "项目A"},
* "childDirNodeInfos": [
* {"uuId": "task-001", "parentUuId": "proj-001", "uuIdOwnType": "task", "dirName": "任务1"},
* {"uuId": "task-002", "parentUuId": "proj-001", "uuIdOwnType": "task", "dirName": "任务2"}
* ]
* }
* </pre>
*/
@Data
@Schema(description = "批量创建文件夹单项")
public class BatchCreateDirItem {
@Schema(description = "父节点信息(第一层为项目节点,也需要创建)", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "父节点信息不能为空")
@Valid
private DirNodeInfo parentDirNodeInfo;
@Schema(description = "子节点文件夹信息列表")
@Valid
private List<DirNodeInfo> childDirNodeInfos;
}

View File

@@ -0,0 +1,77 @@
package com.sdm.common.entity.req.data;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.Valid;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import java.util.List;
/**
* 批量创建文件夹请求 - 支持多级树形结构批量创建
*<p>
* [
* {
* // 第一个 Item定义项目根节点并横向创建两个任务
* "parentDirNodeInfo": {
* "uuId": "proj-协同-001",
* "parentUuId": null,
* "uuIdOwnType": "project",
* "dirName": "2026年度协同设计项目"
* },
* "childDirNodeInfos": [
* {
* "uuId": "task-101",
* "parentUuId": "proj-协同-001",
* "uuIdOwnType": "task",
* "dirName": "任务1前端界面开发"
* },
* {
* "uuId": "task-102",
* "parentUuId": "proj-协同-001",
* "uuIdOwnType": "task",
* "dirName": "任务2后端接口实现"
* }
* ]
* },
* {
* // 第二个 Item针对“任务1”进一步纵向创建其子目录
* "parentDirNodeInfo": {
* "uuId": "task-101",
* "parentUuId": "proj-协同-001",
* "uuIdOwnType": "task",
* "dirName": "任务1前端界面开发"
* },
* "childDirNodeInfos": [
* {
* "uuId": "run-201",
* "parentUuId": "task-101",
* "uuIdOwnType": "run",
* "dirName": "UI原型评审"
* },
* {
* "uuId": "run-202",
* "parentUuId": "task-101",
* "uuIdOwnType": "run",
* "dirName": "交互逻辑验证"
* }
* ]
* }
* ]
*</p>
*/
@Data
@Schema(description = "批量创建文件夹请求")
public class BatchCreateDirReq {
@Schema(description = "批量创建项列表", requiredMode = Schema.RequiredMode.REQUIRED)
@NotEmpty(message = "创建项列表不能为空")
@Valid
private List<BatchCreateDirItem> items;
@Schema(description = "文件夹类型DirType1 知识库文件夹2 项目节点文件夹3 头像库文件夹4 仿真参数库文件夹,5 训练模型文件夹",
requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "文件夹类型不能为空")
private Integer dirType;
}

View File

@@ -0,0 +1,34 @@
package com.sdm.common.entity.req.data;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotBlank;
import lombok.Data;
/**
* 目录节点信息(统一表示父节点和子节点)
* <p>
* 示例:
* <pre>
* - 项目节点:{uuId="proj-001", parentUuId=null, uuIdOwnType="project", dirName="项目A"}
* - 任务节点:{uuId="task-001", parentUuId="proj-001", uuIdOwnType="task", dirName="任务1"}
* - 运行节点:{uuId="run-001", parentUuId="task-001", uuIdOwnType="run", dirName="运行1"}
* </pre>
*/
@Data
@Schema(description = "目录节点信息")
public class DirNodeInfo {
@Schema(description = "节点的业务UUID", requiredMode = Schema.RequiredMode.REQUIRED)
@NotBlank(message = "节点UUID不能为空")
private String uuId;
@Schema(description = "父节点UUID第一层项目节点的parentUuId为空")
private String parentUuId;
@Schema(description = "UUID所属类型: project, task, run, performance", requiredMode = Schema.RequiredMode.REQUIRED)
@NotBlank(message = "UUID类型不能为空")
private String uuIdOwnType;
@Schema(description = "文件夹名称不传则使用uuid作为名称")
private String dirName;
}

View File

@@ -44,6 +44,19 @@ public class DataClientFeignClientImpl implements IDataFeignClient {
}
}
@Override
public SdmResponse<List<Long>> batchCreateDir(BatchCreateDirReq req) {
SdmResponse<List<Long>> response;
try {
response = dataClient.batchCreateDir(req);
log.info("批量创建文件夹响应:"+ response);
return response;
} catch (Exception e) {
log.error("批量创建文件夹失败", e);
return SdmResponse.failed("批量创建文件夹失败");
}
}
@Override
public SdmResponse<PageDataResp<List<FileMetadataInfoResp>>> queryDir(QueryDirReq req) {
SdmResponse<PageDataResp<List<FileMetadataInfoResp>>> response;

View File

@@ -27,6 +27,9 @@ public interface IDataFeignClient {
@PostMapping("/data/createDir")
SdmResponse createDir(@RequestBody @Validated CreateDirReq req);
@PostMapping("/data/batchCreateDir")
SdmResponse<List<Long>> batchCreateDir(@RequestBody @Validated BatchCreateDirReq req);
@PostMapping("/data/queryDir")
SdmResponse<PageDataResp<List<FileMetadataInfoResp>>> queryDir(@RequestBody @Validated QueryDirReq req);