Files
aue/FileController_流程图.md
2026-06-03 13:16:30 +08:00

12 KiB

FileController 交互流程图

接口总览

接口 方法 路径 功能
pageFiles GET /file/page 分页查询文件
getFileById GET /file/{id} 查询文件详情
uploadFile POST /file/upload 上传文件
ragStream POST /file/rag/stream RAG流式问答
downloadFile GET /file/download/{id} 下载文件(已禁用)
getFileContent GET /file/content/{id} 获取文件内容(已禁用)
getFileInfo GET /file/info/{id} 获取文件详细信息
deleteFile DELETE /file/{id} 删除文件
approveFile POST /file/audit/approve/{id} 审核通过
rejectFile POST /file/audit/reject/{id} 审核拒绝
getPendingFiles GET /file/audit/pending 查询待审核文件列表
updateFileInfo PUT /file/{id} 更新文件信息

1. 分页查询文件 (/file/page)

1.1 流程图

flowchart TD
    A[开始: 分页查询文件] --> B{用户已登录?}
    B -->|否| C[返回: 用户未登录]
    B -->|是| D{用户信息获取成功?}
    D -->|否| E[返回: 用户信息获取失败]
    D -->|是| F[调用fileService.pageFiles]
    F --> G[返回分页结果]
    C --> H[结束]
    E --> H
    G --> H

1.2 时序图

sequenceDiagram
    autonumber
    participant Client as 用户
    participant FC as FileController
    participant Auth as AuthService
    participant FS as FileService

    Client->>+FC: GET /file/page
    FC->>+Auth: validateToken(token)
    Auth-->>-FC: User对象

    FC->>+FS: pageFiles(pageNum, pageSize, fileName, user)
    FS-->>-FC: PageResult<FileVO>

    FC-->>-Client: 返回分页结果

2. 查询文件详情 (/file/{id})

2.1 流程图

flowchart TD
    A[开始: 查询文件详情] --> B{用户已登录?}
    B -->|否| C[返回: 用户未登录]
    B -->|是| D{用户信息获取成功?}
    D -->|否| E[返回: 用户信息获取失败]
    D -->|是| F[调用fileService.getFileById]
    F --> G[返回文件详情]
    C --> H[结束]
    E --> H
    G --> H

2.2 时序图

sequenceDiagram
    autonumber
    participant Client as 用户
    participant FC as FileController
    participant Auth as AuthService
    participant FS as FileService

    Client->>+FC: GET /file/{id}
    FC->>+Auth: validateToken(token)
    Auth-->>-FC: User对象

    FC->>+FS: getFileById(id, user)
    FS-->>-FC: FileVO

    FC-->>-Client: 返回文件详情

3. 上传文件 (/file/upload)

3.1 流程图

flowchart TD
    A[开始: 上传文件] --> B[校验文件]
    B --> C{文件校验通过?}
    C -->|否| D[返回错误信息]
    C -->|是| E{用户已登录?}
    E -->|否| F[返回: 用户未登录]
    E -->|是| G{用户信息获取成功?}
    G -->|否| H[返回: 用户信息获取失败]
    G -->|是| I[调用fileService.uploadFile]
    I --> J{有文件描述?}
    J -->|是| K[更新文件描述]
    K --> L[返回FileVO]
    J -->|否| L[返回FileVO]
    D --> M[结束]
    F --> M
    H --> M
    L --> M

3.2 时序图

sequenceDiagram
    autonumber
    participant Client as 用户
    participant FC as FileController
    participant FU as FileUtil
    participant Auth as AuthService
    participant FS as FileService

    Client->>+FC: POST /file/upload
    FC->>+FU: validateFile(file)
    alt 文件校验失败
        FU-->>-FC: 抛出异常
        FC-->>Client: 返回错误信息
    end

    FC->>+Auth: validateToken(token)
    Auth-->>-FC: User对象

    FC->>+FS: uploadFile(file, userId, deptId, userType, targetDeptId, isPublic)
    FS-->>-FC: FileVO

    alt 有描述信息
        FC->>+FS: updateFileDescription(fileId, description)
        FS-->>-FC: void
    end

    FC-->>-Client: 返回FileVO

4. RAG流式问答 (/file/rag/stream)

4.1 流程图

flowchart TD
    A[开始: RAG流式问答] --> B{用户已登录?}
    B -->|否| C[返回错误: 用户未登录]
    B -->|是| D{用户信息获取成功?}
    D -->|否| E[返回错误: 用户信息获取失败]
    D -->|是| F[设置collections为public_kb]
    F --> G[生成session_id]
    G --> H[调用aiChatService.streamFromRagService]
    H --> I[返回SseEmitter流式响应]
    C --> J[结束]
    E --> J
    I --> J

4.2 时序图

sequenceDiagram
    autonumber
    participant Client as 用户
    participant FC as FileController
    participant Auth as AuthService
    participant AI as AiChatService

    Client->>+FC: POST /file/rag/stream
    FC->>+Auth: validateToken(token)
    Auth-->>-FC: User对象

    Note over FC: 设置collections<br/>collections.add("public_kb")<br/>生成session_id

    FC->>+AI: streamFromRagService(request, userId, deptId)
    loop 流式响应
        AI-->>Client: SSE事件流
    end
    AI-->>-FC: SseEmitter

    FC-->>-Client: SseEmitter流式响应

5. 删除文件 (/file/{id})

5.1 流程图

flowchart TD
    A[开始: 删除文件] --> B[调用fileService.deleteFile]
    B --> C[返回成功]

5.2 时序图

sequenceDiagram
    autonumber
    participant Client as 用户
    participant FC as FileController
    participant FS as FileService

    Client->>+FC: DELETE /file/{id}
    FC->>+FS: deleteFile(id)
    FS-->>-FC: void

    FC-->>-Client: 返回成功

6. 审核通过文件 (/file/audit/approve/{id})

6.1 流程图

flowchart TD
    A[开始: 审核通过] --> B{用户已登录?}
    B -->|否| C[返回: 用户未登录]
    B -->|是| D{用户信息获取成功?}
    D -->|否| E[返回: 用户信息获取失败]
    D -->|是| F{有管理员权限?}
    F -->|否| G[返回: 无权限]
    F -->|是| H[调用fileService.approveFile]
    H --> I[返回成功]
    C --> J[结束]
    E --> J
    G --> J
    I --> J

6.2 时序图

sequenceDiagram
    autonumber
    participant Client as 管理员
    participant FC as FileController
    participant Auth as AuthService
    participant FS as FileService

    Client->>+FC: POST /file/audit/approve/{id}
    FC->>+Auth: validateToken(token)
    Auth-->>-FC: User对象

    Note over FC: 检查userType==1或userType==2

    alt 无管理员权限
        FC-->>Client: 返回: 无权限执行此操作
    else 有管理员权限
        FC->>+FS: approveFile(id, userId)
        FS-->>-FC: void
        FC-->>Client: 返回成功
    end

7. 审核拒绝文件 (/file/audit/reject/{id})

7.1 流程图

flowchart TD
    A[开始: 审核拒绝] --> B{用户已登录?}
    B -->|否| C[返回: 用户未登录]
    B -->|是| D{用户信息获取成功?}
    D -->|否| E[返回: 用户信息获取失败]
    D -->|是| F{有管理员权限?}
    F -->|否| G[返回: 无权限]
    F -->|是| H[调用fileService.rejectFile]
    H --> I[返回成功]
    C --> J[结束]
    E --> J
    G --> J
    I --> J

7.2 时序图

sequenceDiagram
    autonumber
    participant Client as 管理员
    participant FC as FileController
    participant Auth as AuthService
    participant FS as FileService

    Client->>+FC: POST /file/audit/reject/{id}
    FC->>+Auth: validateToken(token)
    Auth-->>-FC: User对象

    Note over FC: 检查userType==1或userType==2

    alt 无管理员权限
        FC-->>Client: 返回: 无权限执行此操作
    else 有管理员权限
        FC->>+FS: rejectFile(id, userId)
        FS-->>-FC: void
        FC-->>Client: 返回成功
    end

8. 查询待审核文件列表 (/file/audit/pending)

8.1 流程图

flowchart TD
    A[开始: 查询待审核列表] --> B{用户已登录?}
    B -->|否| C[返回: 用户未登录]
    B -->|是| D{用户信息获取成功?}
    D -->|否| E[返回: 用户信息获取失败]
    D -->|是| F{有管理员权限?}
    F -->|否| G[返回: 无权限]
    F -->|是| H[调用fileService.getPendingFiles]
    H --> I[返回分页结果]
    C --> J[结束]
    E --> J
    G --> J
    I --> J

8.2 时序图

sequenceDiagram
    autonumber
    participant Client as 管理员
    participant FC as FileController
    participant Auth as AuthService
    participant FS as FileService

    Client->>+FC: GET /file/audit/pending
    FC->>+Auth: validateToken(token)
    Auth-->>-FC: User对象

    Note over FC: 检查userType==1或userType==2

    alt 无管理员权限
        FC-->>Client: 返回: 无权限执行此操作
    else 有管理员权限
        FC->>+FS: getPendingFiles(pageNum, pageSize)
        FS-->>-FC: PageResult<FileVO>
        FC-->>Client: 返回分页结果
    end

9. 更新文件信息 (/file/{id})

9.1 流程图

flowchart TD
    A[开始: 更新文件信息] --> B{用户已登录?}
    B -->|否| C[返回: 用户未登录]
    B -->|是| D{用户信息获取成功?}
    D -->|否| E[返回: 用户信息获取失败]
    D -->|是| F[获取原文件信息]
    F --> G{文件存在?}
    G -->|否| H[返回: 文件不存在]
    G -->|是| I{isPublic变更?}
    I -->|是| J[重建文件路径]
    J --> K[移动文件到新路径]
    K --> L[更新文件信息]
    I -->|否| L[直接更新文件信息]
    L --> M[返回更新后的文件]
    C --> N[结束]
    E --> N
    H --> N
    M --> N

9.2 时序图

sequenceDiagram
    autonumber
    participant Client as 用户
    participant FC as FileController
    participant Auth as AuthService
    participant FS as FileService
    participant Dept as DepartmentService
    participant UM as UserMapper

    Client->>+FC: PUT /file/{id}
    FC->>+Auth: validateToken(token)
    Auth-->>-FC: User对象

    FC->>+FS: getFileEntityById(id)
    FS-->>-FC: File对象

    alt 文件不存在
        FC-->>Client: 返回: 文件不存在
    end

    alt isPublic变更
        FC->>+Dept: getDepartmentFullPath(deptId)
        Dept-->>-FC: fullPath

        Note over FC: rebuildFilePath<br/>创建新路径

        FC->>FC: Files.move移动文件

        FC->>+FS: updateFileEntity(file)
        FS-->>-FC: void
    else 仅更新描述
        FC->>+FS: updateFileEntity(file)
        FS-->>-FC: void
    end

    FC->>UM: selectById(uploadUserId)
    UM-->>FC: User

    FC->>FC: convertToVO(file)

    FC-->>-Client: 返回FileVO

10. 已禁用的接口

10.1 下载文件 (/file/download/{id})

flowchart TD
    A[开始: 下载文件] --> B[直接返回403 Forbidden]

10.2 获取文件内容 (/file/content/{id})

flowchart TD
    A[开始: 获取文件内容] --> B[直接返回错误: 文件内容获取功能已禁用]

核心服务调用关系

flowchart LR
    subgraph Controller
        FC[FileController]
    end

    subgraph Service
        FS[FileService]
        AI[AiChatService]
        DS[DepartmentService]
    end

    subgraph Util
        FU[FileUtil]
    end

    subgraph Mapper
        UM[UserMapper]
    end

    subgraph Entity
        F[File]
        U[User]
        D[Department]
        FV[FileVO]
    end

    FC --> FS
    FC --> AI
    FC --> DS
    FC --> FU
    FC --> UM

    FS --> F
    FS --> FV
    DS --> D
    UM --> U

权限说明

接口 普通用户 部门管理员 系统管理员
分页查询文件
查询文件详情
上传文件
RAG流式问答
下载文件 已禁用 已禁用 已禁用
获取文件内容 已禁用 已禁用 已禁用
获取文件信息
删除文件 - - -
审核通过
审核拒绝
查询待审核列表
更新文件信息