本文档引用的文件
项目树结构API提供了一套完整的树形结构管理功能,用于组织和管理项目中的层级化数据。该系统支持产品类别、产品、技术分类和自定义树四种类型的树结构,通过TreeNodeController提供RESTful接口,实现树节点的增删改查、移动、复制等操作。树结构与项目、任务等实体通过关联表进行关联,支持复杂的业务场景。
Section sources
项目树结构管理API提供了以下核心端点:
| 端点 | HTTP方法 | 功能描述 |
|---|---|---|
| /treeNode/queryTreeNodeTree | POST | 查询架构树 |
| /treeNode/queryTreeNode | POST | 查询架构 |
| /treeNode/queryTreePath | POST | 查询架构路径 |
| /treeNode/addTreeNode | POST | 新增架构节点 |
| /treeNode/updateTreeNode | POST | 更新架构节点 |
| /treeNode/deleteTreeNode | POST | 删除架构节点 |
| /treeNode/copyTreeNode | POST | 复制树架构 |
所有API端点的基础路径为/api/xiaoshi/treeNode,由Constants.API_XiaoSHI常量定义。
Section sources
树节点实体定义了树结构的基本属性,存储在tree_node数据库表中。
classDiagram
class TreeNode {
+Integer id
+String name
+Integer type
+Integer parentId
+Integer typeId
+String path
+Integer level
+String createId
+Date createTime
+String description
}
Diagram sources
用于创建树节点的数据传输对象。
classDiagram
class TreeNodeDTO {
+Integer id
+String name
+Integer type
+Integer typeId
+Integer parentId
+String description
+String personId
}
Diagram sources
用于更新树节点的数据传输对象。
classDiagram
class UpdateTreeNodeDTO {
+Integer id
+String name
+Integer parentId
+String description
+String[] guids
}
Diagram sources
用于复制树节点的数据传输对象。
classDiagram
class CopyTreeNodeDTO {
+Integer fromType
+Integer fromTypeId
+Integer[] fromNodeIds
+Integer toType
+Integer toTypeId
+Integer toNodeId
+Boolean ifDelete
+Boolean ifCopyChild
}
Diagram sources
树节点的视图对象,包含基础信息和关联数据。
classDiagram
class TreeNodeVO {
+Integer id
+String name
+Integer type
+Integer parentId
+Integer typeId
+String path
+String pathName
+Integer level
+String createId
+String createName
+Date createTime
+String description
+SystemFile[] systemFileList
+Long relevantProductNum
}
Diagram sources
返回树节点的视图对象,包含子节点信息,用于构建树形结构。
classDiagram
class ReTreeNodeVO {
+Integer id
+String name
+Integer type
+Integer parentId
+Integer typeId
+String pathName
+String path
+Integer level
+ReTreeNodeVO[] child
+String createId
+DateTime createTime
+String description
+SystemFile[] systemFileList
+Long relevantProductNum
}
Diagram sources
sequenceDiagram
participant Client as "客户端"
participant Controller as "TreeNodeController"
participant Service as "TreeNodeService"
participant Mapper as "TreeNodeMapper"
participant DB as "数据库"
Client->>Controller : POST /addTreeNode
Controller->>Controller : 解析treeNode JSON
Controller->>Service : 调用addMessage()
Service->>DB : 插入新节点
DB-->>Service : 返回节点ID
Service->>Service : 处理文件上传
Service->>Controller : 返回节点ID
Controller-->>Client : 返回成功响应
Diagram sources
Section sources
系统提供了多种查询方式:
| 端点 | 功能描述 |
|---|---|
| /treeNode/queryTreeNodeTree | 查询完整的树形结构 |
| /treeNode/queryTreeNode | 查询架构节点 |
| /treeNode/queryTreePath | 查询架构路径 |
flowchart TD
Start([开始]) --> ValidateInput["验证输入参数"]
ValidateInput --> QueryDB["查询数据库"]
QueryDB --> LoadData["加载关联数据"]
LoadData --> BuildTree["构建树形结构"]
BuildTree --> ReturnResult["返回结果"]
Diagram sources
Section sources
sequenceDiagram
participant Client as "客户端"
participant Controller as "TreeNodeController"
participant Service as "TreeNodeService"
participant DB as "数据库"
Client->>Controller : POST /updateTreeNode
Controller->>Controller : 解析更新数据
Controller->>Service : 调用updateMessage()
Service->>DB : 查询现有节点
DB-->>Service : 返回节点信息
Service->>Service : 验证节点名称唯一性
Service->>Service : 更新节点信息
Service->>Service : 处理文件变更
Service->>Controller : 返回成功
Controller-->>Client : 返回响应
Diagram sources
Section sources
flowchart TD
Start([开始]) --> ParseInput["解析输入参数"]
ParseInput --> QuerySource["查询源节点"]
QuerySource --> BuildSourceTree["构建源树结构"]
BuildSourceTree --> DetermineTarget["确定目标位置"]
DetermineTarget --> QueryTarget["查询目标节点"]
QueryTarget --> AdjustPath["调整路径和层级"]
AdjustPath --> CheckConflict["检查命名冲突"]
CheckConflict --> CreateNodes["创建新节点"]
CreateNodes --> ReturnSuccess["返回成功"]
Diagram sources
Section sources
sequenceDiagram
participant Client as "客户端"
participant Controller as "TreeNodeController"
participant Service as "TreeNodeService"
participant FileManager as "FileManagerService"
participant DB as "数据库"
Client->>Controller : POST /deleteTreeNode
Controller->>Service : 调用deleteMessage()
Service->>DB : 查询要删除的节点
DB-->>Service : 返回节点信息
Service->>DB : 查询关联的文件
DB-->>Service : 返回文件GUID
Service->>FileManager : 删除文件
FileManager-->>Service : 确认删除
Service->>DB : 删除文件关联记录
Service->>DB : 删除节点记录
Service->>Controller : 返回成功
Controller-->>Client : 返回响应
Diagram sources
Section sources
树结构与项目通过AssoProjectTreeNode关联表进行关联,实现树节点与项目的绑定。
erDiagram
PROJECT ||--o{ AssoProjectTreeNode : "包含"
AssoProjectTreeNode }o--|| TreeNode : "关联"
PROJECT {
integer id PK
string name
datetime create_time
}
AssoProjectTreeNode {
integer id PK
integer project_id FK
integer value_id FK
integer type
}
TreeNode {
integer id PK
string name
integer type
integer parent_id
string path
integer level
}
Diagram sources
当项目需要关联树结构时,系统会创建AssoProjectTreeNode记录,将项目ID与树节点ID关联起来。这种设计支持一个项目关联多个树节点,也支持一个树节点被多个项目共享。
Section sources
树节点通过parentId字段建立父子关系,通过path字段存储完整路径,通过level字段记录层级深度。
parentId = 0,path = "",level = 0path = parentPath + parentId + "/",level = parentLevel + 1flowchart TD
Start([开始]) --> CheckParent["检查父节点"]
CheckParent --> GetParent["获取父节点信息"]
GetParent --> CalcPath["计算路径"]
CalcPath --> SetLevel["设置层级"]
SetLevel --> Validate["验证路径"]
Validate --> Save["保存节点"]
Diagram sources
Section sources
POST /api/xiaoshi/treeNode/addTreeNode
Content-Type: multipart/form-data
{
"treeNode": "{\"name\":\"新产品类别\",\"type\":1,\"typeId\":1001,\"parentId\":0,\"description\":\"测试用新产品类别\"}"
}
{
"code": 200,
"message": "success",
"data": {
"current": 1,
"size": 10,
"total": 5,
"data": [
{
"id": 1,
"name": "根节点",
"type": 1,
"parentId": 0,
"typeId": 1001,
"path": "",
"pathName": "/",
"level": 0,
"createId": "user001",
"createName": "张三",
"createTime": "2023-10-26T10:00:00",
"description": "根节点",
"child": [
{
"id": 2,
"name": "子节点1",
"type": 1,
"parentId": 1,
"typeId": 1001,
"path": "1/",
"pathName": "/根节点",
"level": 1,
"createId": "user001",
"createName": "张三",
"createTime": "2023-10-26T10:05:00",
"description": "第一个子节点",
"child": []
}
]
}
]
}
}
POST /api/xiaoshi/treeNode/updateTreeNode
Content-Type: multipart/form-data
{
"treeNode": "{\"id\":2,\"name\":\"更新后的子节点\",\"parentId\":1,\"description\":\"更新后的描述\",\"guids\":[\"file-guid-001\"]}"
}
POST /api/xiaoshi/treeNode/copyTreeNode
Content-Type: application/json
{
"fromType": 1,
"fromTypeId": 1001,
"fromNodeIds": [2],
"toType": 1,
"toTypeId": 1002,
"toNodeId": 3,
"ifCopyChild": true,
"ifDelete": false
}
Section sources