项目树结构API.md 14 KB

项目树结构API

本文档引用的文件

  • TreeNodeController.java
  • TreeNodeService.java
  • TreeNode.java
  • TreeNodeDTO.java
  • UpdateTreeNodeDTO.java
  • CopyTreeNodeDTO.java
  • TreeNodeVO.java
  • ReTreeNodeVO.java
  • TreeNodeMapper.java
  • Constants.java

目录

  1. 简介
  2. API端点概览
  3. 核心数据结构
  4. 树节点创建
  5. 树节点查询
  6. 树节点更新
  7. 树节点移动与复制
  8. 树节点删除
  9. 树结构与项目关联
  10. 父子关系与层级管理
  11. 请求/响应示例

简介

项目树结构API提供了一套完整的树形结构管理功能,用于组织和管理项目中的层级化数据。该系统支持产品类别、产品、技术分类和自定义树四种类型的树结构,通过TreeNodeController提供RESTful接口,实现树节点的增删改查、移动、复制等操作。树结构与项目、任务等实体通过关联表进行关联,支持复杂的业务场景。

Section sources

  • TreeNodeController.java

API端点概览

项目树结构管理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

  • TreeNodeController.java
  • Constants.java

核心数据结构

树节点实体 (TreeNode)

树节点实体定义了树结构的基本属性,存储在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

  • TreeNode.java

树节点数据传输对象 (DTO)

TreeNodeDTO

用于创建树节点的数据传输对象。

classDiagram
class TreeNodeDTO {
+Integer id
+String name
+Integer type
+Integer typeId
+Integer parentId
+String description
+String personId
}

Diagram sources

  • TreeNodeDTO.java

UpdateTreeNodeDTO

用于更新树节点的数据传输对象。

classDiagram
class UpdateTreeNodeDTO {
+Integer id
+String name
+Integer parentId
+String description
+String[] guids
}

Diagram sources

  • UpdateTreeNodeDTO.java

CopyTreeNodeDTO

用于复制树节点的数据传输对象。

classDiagram
class CopyTreeNodeDTO {
+Integer fromType
+Integer fromTypeId
+Integer[] fromNodeIds
+Integer toType
+Integer toTypeId
+Integer toNodeId
+Boolean ifDelete
+Boolean ifCopyChild
}

Diagram sources

  • CopyTreeNodeDTO.java

树节点视图对象 (VO)

TreeNodeVO

树节点的视图对象,包含基础信息和关联数据。

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

  • TreeNodeVO.java

ReTreeNodeVO

返回树节点的视图对象,包含子节点信息,用于构建树形结构。

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

  • ReTreeNodeVO.java

树节点创建

创建端点

  • 端点: POST /treeNode/addTreeNode
  • 功能: 创建新的树节点
  • 参数:
    • treeNode: 树节点信息的JSON字符串
    • files: 上传的文件列表

请求流程

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

  • TreeNodeController.java
  • TreeNodeService.java

Section sources

  • TreeNodeController.java

树节点查询

查询端点

系统提供了多种查询方式:

端点 功能描述
/treeNode/queryTreeNodeTree 查询完整的树形结构
/treeNode/queryTreeNode 查询架构节点
/treeNode/queryTreePath 查询架构路径

查询流程

flowchart TD
Start([开始]) --> ValidateInput["验证输入参数"]
ValidateInput --> QueryDB["查询数据库"]
QueryDB --> LoadData["加载关联数据"]
LoadData --> BuildTree["构建树形结构"]
BuildTree --> ReturnResult["返回结果"]

Diagram sources

  • TreeNodeService.java

Section sources

  • TreeNodeController.java

树节点更新

更新端点

  • 端点: POST /treeNode/updateTreeNode
  • 功能: 更新树节点信息
  • 参数:
    • treeNode: 更新信息的JSON字符串
    • files: 新上传的文件列表

更新流程

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

  • TreeNodeService.java

Section sources

  • TreeNodeController.java

树节点移动与复制

复制端点

  • 端点: POST /treeNode/copyTreeNode
  • 功能: 复制树节点或整个子树
  • 参数: CopyTreeNodeDTO对象

复制流程

flowchart TD
Start([开始]) --> ParseInput["解析输入参数"]
ParseInput --> QuerySource["查询源节点"]
QuerySource --> BuildSourceTree["构建源树结构"]
BuildSourceTree --> DetermineTarget["确定目标位置"]
DetermineTarget --> QueryTarget["查询目标节点"]
QueryTarget --> AdjustPath["调整路径和层级"]
AdjustPath --> CheckConflict["检查命名冲突"]
CheckConflict --> CreateNodes["创建新节点"]
CreateNodes --> ReturnSuccess["返回成功"]

Diagram sources

  • TreeNodeService.java

Section sources

  • TreeNodeController.java

树节点删除

删除端点

  • 端点: POST /treeNode/deleteTreeNode
  • 功能: 删除树节点及其子节点
  • 参数: 节点ID列表

删除流程

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

  • TreeNodeService.java

Section sources

  • TreeNodeController.java

树结构与项目关联

关联机制

树结构与项目通过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.java
  • TreeNode.java

关联管理

当项目需要关联树结构时,系统会创建AssoProjectTreeNode记录,将项目ID与树节点ID关联起来。这种设计支持一个项目关联多个树节点,也支持一个树节点被多个项目共享。

Section sources

  • TreeNodeService.java

父子关系与层级管理

层级结构

树节点通过parentId字段建立父子关系,通过path字段存储完整路径,通过level字段记录层级深度。

路径计算规则

  • 根节点:parentId = 0path = ""level = 0
  • 子节点:path = parentPath + parentId + "/"level = parentLevel + 1

层级管理流程

flowchart TD
Start([开始]) --> CheckParent["检查父节点"]
CheckParent --> GetParent["获取父节点信息"]
GetParent --> CalcPath["计算路径"]
CalcPath --> SetLevel["设置层级"]
SetLevel --> Validate["验证路径"]
Validate --> Save["保存节点"]

Diagram sources

  • TreeNodeService.java

Section sources

  • TreeNodeService.java

请求/响应示例

创建树节点请求示例

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

  • TreeNodeController.java
  • TreeNodeServiceTests.java