You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 

30 KiB

Jointo 业务流程 UML 图

项目名称:Jointo(jointo)
文档版本:v1.0
创建日期:2026-01-29


📋 目录

  1. 核心业务流程概览
  2. 用户认证流程
  3. 项目创建与管理流程
  4. 分镜编辑流程
  5. AI 生成流程
  6. 视频导出流程
  7. 协作流程
  8. 系统架构流程

1. 核心业务流程概览

1.1 整体业务流程图

graph TB
    %% 1. 项目层级
    subgraph Project_Hierarchy [项目层级设计]
        RootProj[父项目: 龙珠系列] -- 拥有 --> Assets[资产库: 角色/场景/道具]
        RootProj -- 派生 --> SubProj1[子项目: 第一集]
        RootProj -- 派生 --> SubProj2[子项目: 第二集]
    end

    %% 2. 资产定义 (Root Project Level)
    subgraph Asset_Definition [资产定义层 - 关联 Root ID]
        Assets --> Char[角色: 悟空]
        Assets --> Loc[场景: 武道会]
        Char --> Tag1[标签: 常服形态]
        Char --> Tag2[标签: 超级赛亚人]
        Loc --> Tag3[标签: 白天]
        Loc --> Tag4[标签: 战损]
    end

    %% 3. 剧本解析 (Sub Project Level)
    subgraph Screenplay_Process [剧本处理层 - 关联 Sub ID]
        SubProj1 --> Upload[上传剧本]
        Upload --> Parse[AI 解析]
        Parse --> SCR_Ref[screenplay_element_refs: 建立引用]
        SCR_Ref -.->|建立链接| Char
        SCR_Ref -.->|建立链接| Loc
        SCR_Ref --> Override[剧本特定覆盖: 悟空此刻受轻伤]
    end

    %% 4. 分镜创作 (Storyboard Level)
    subgraph Storyboard_Logic [分镜制作层 - 关联 Sub ID]
        SubProj1 --> SB[storyboards: 分镜 01]
        SB --> SB_Item[storyboard_items: 画面元素]
        SB_Item -->|指定变体| Tag2
        SB_Item -->|指定环境| Tag3
        SB_Item -->|关联素材| Res[project_resources: 气氛图]
    end

    %% 5. AI 执行 (Execution Level)
    subgraph AI_Generation [AI 执行层 - 多版本管理]
        SB --> Dialogue[storyboard_dialogues: 对白文本]
        Dialogue --> Voice[storyboard_voiceovers: 配音音频]
        SB_Item --> Image[storyboard_images: AI 生成图]
        Image --> Video[storyboard_videos: AI 动态视频]
    end

    %% 样式美化
    style RootProj fill:#f9f,stroke:#333,stroke-width:2px
    style SubProj1 fill:#bbf,stroke:#333
    style Assets fill:#dfd,stroke:#333
    style Tag2 fill:#fff4e1,stroke:#d4a017
    style Image fill:#fff4e1,stroke:#d4a017
    style SCR_Ref fill:#e1f0ff,stroke:#0078d4
graph TB
    Start([用户访问平台]) --> Auth{已登录?}
    Auth -->|否| Login[登录/注册]
    Auth -->|是| Dashboard[工作台]
    Login --> Dashboard
    
    Dashboard --> ProjectMgmt[项目管理]
    Dashboard --> FolderMgmt[文件夹管理]
    Dashboard --> ResourceLib[素材库]
    
    ProjectMgmt --> CreateProject[创建项目]
    ProjectMgmt --> OpenProject[打开项目]
    
    CreateProject --> ScriptUpload[剧本上传]
    ScriptUpload --> AIAnalyze[智能拆解]
    AIAnalyze --> ResourceExtract[提取资源]
    AIAnalyze --> StoryboardGen[生成分镜]
    StoryboardGen --> ApplyProject[应用到项目]
    
    OpenProject --> ScriptEdit[剧本编辑]
    OpenProject --> StoryboardEdit[分镜编辑]
    OpenProject --> TimelineEdit[时间轴编辑]
    ApplyProject --> StoryboardEdit
    
    ScriptEdit --> AIGenerate[AI 生成]
    StoryboardEdit --> AIGenerate
    TimelineEdit --> AIGenerate
    
    AIGenerate --> AIImage[AI 图片生成]
    AIGenerate --> AIVideo[AI 视频生成]
    AIGenerate --> AIAudio[AI 音效生成]
    AIGenerate --> AISubtitle[AI 字幕生成]
    AIGenerate --> AIVoice[AI 配音生成]
    
    TimelineEdit --> Preview[预览]
    Preview --> Export[导出视频]
    
    Export --> Download[下载成品]
    Download --> End([完成])
    
    style Start fill:#e1f5e1
    style End fill:#ffe1e1
    style AIGenerate fill:#fff4e1
    style Export fill:#e1f0ff

1.2 核心功能模块关系图

graph LR
    User[用户] --> Auth[认证系统]
    Auth --> Project[项目管理]
    Auth --> Folder[文件夹管理]
    
    Project --> Script[剧本管理]
    Project --> Storyboard[分镜管理]
    Project --> Timeline[时间轴管理]
    
    Storyboard --> Resource[资源管理]
    Timeline --> Video[视频管理]
    Timeline --> Audio[音效管理]
    Timeline --> Subtitle[字幕管理]
    Timeline --> Voice[配音管理]
    
    Resource --> AI[AI 服务]
    Video --> AI
    Audio --> AI
    Subtitle --> AI
    Voice --> AI
    
    Timeline --> Export[导出服务]
    
    Project --> Collab[协作系统]
    Collab --> Comment[评论]
    Collab --> Notify[通知]
    
    style User fill:#e1f5e1
    style AI fill:#fff4e1
    style Export fill:#e1f0ff

2. 用户认证流程

2.1 手机验证码登录流程(自动注册)

sequenceDiagram
    participant U as 用户
    participant F as 前端
    participant A as API 服务
    participant DB as 数据库
    participant SMS as 短信服务
    participant R as Redis
    
    U->>F: 输入手机号
    F->>A: POST /api/v1/auth/send-code
    A->>DB: 检查手机号是否存在
    A->>SMS: 发送验证码
    A->>R: 存储验证码(5分钟过期)
    A-->>F: 返回成功
    F-->>U: 显示验证码输入框
    
    U->>F: 输入验证码
    F->>A: POST /api/v1/auth/login-with-code
    A->>R: 验证验证码
    
    alt 验证码错误
        A-->>F: 返回错误
        F-->>U: 提示验证码错误
    else 验证码正确
        A->>DB: 查询手机号是否注册
        alt 手机号已注册
            A->>DB: 查询用户信息
            A->>A: 生成 JWT Token
            A->>R: 存储 Session
            A-->>F: 返回 Token + 用户信息
            F->>F: 存储 Token 到 LocalStorage
            F-->>U: 登录成功,跳转到工作台
        else 手机号未注册(自动注册)
            A->>DB: 创建新用户记录
            A->>DB: 初始化积分(10积分)
            A->>DB: 设置默认昵称(手机号)
            A->>A: 生成 JWT Token
            A->>R: 存储 Session
            A-->>F: 返回 Token + 用户信息
            F->>F: 存储 Token 到 LocalStorage
            F-->>U: 注册并登录成功,跳转到工作台
        end
    end

2.2 微信扫码登录流程(自动注册)

sequenceDiagram
    participant U as 用户
    participant F as 前端
    participant A as API 服务
    participant WX as 微信服务
    participant DB as 数据库
    participant R as Redis
    
    U->>F: 点击微信登录
    F->>A: GET /api/v1/auth/wechat/qrcode
    A->>WX: 请求生成二维码
    WX-->>A: 返回二维码 URL + ticket
    A->>R: 存储 ticket(5分钟过期)
    A-->>F: 返回二维码 URL
    F-->>U: 显示二维码
    
    U->>U: 使用微信扫码
    WX->>A: 回调通知(ticket + code)
    A->>WX: 使用 code 获取 Access Token
    WX-->>A: 返回 Token + OpenID + UnionID
    A->>WX: 获取用户信息
    WX-->>A: 返回用户信息(昵称、头像)
    
    A->>DB: 查询 OpenID 是否绑定
    alt OpenID 已绑定
        A->>DB: 查询用户信息
        A->>A: 生成 JWT Token
        A->>R: 存储 Session
        A->>R: 更新扫码状态(success)
        A-->>F: WebSocket 推送登录成功
        F->>F: 存储 Token 到 LocalStorage
        F-->>U: 登录成功,跳转到工作台
    else OpenID 未绑定(自动注册)
        A->>DB: 创建新用户记录
        A->>DB: 保存微信昵称和头像
        A->>DB: 绑定 OpenID 和 UnionID
        A->>DB: 初始化积分(10积分)
        A->>A: 生成 JWT Token
        A->>R: 存储 Session
        A->>R: 更新扫码状态(success)
        A-->>F: WebSocket 推送登录成功
        F->>F: 存储 Token 到 LocalStorage
        F-->>U: 注册并登录成功,跳转到工作台
    end
    
    Note over F,A: 前端轮询扫码状态
    loop 每2秒轮询一次
        F->>A: GET /api/v1/auth/wechat/status?ticket={ticket}
        A->>R: 查询扫码状态
        alt 扫码成功
            A-->>F: 返回 Token + 用户信息
            F->>F: 停止轮询
        else 等待扫码
            A-->>F: 返回 pending 状态
        else 二维码过期
            A-->>F: 返回 expired 状态
            F-->>U: 提示二维码已过期
        end
    end

2.3 认证流程对比

登录方式 是否需要注册 自动注册条件 初始积分 用户信息来源
手机验证码 手机号未注册时自动创建 10积分 手机号(默认昵称)
微信扫码 OpenID 未绑定时自动创建 10积分 微信昵称、头像

3. 项目创建与管理流程

3.1 项目创建流程

sequenceDiagram
    participant U as 用户
    participant F as 前端
    participant A as API 服务
    participant DB as 数据库
    
    U->>F: 点击新建项目
    F->>F: 显示创建对话框
    U->>F: 输入项目信息
    F->>A: POST /api/v1/projects
    A->>A: 验证权限
    A->>DB: 检查文件夹权限
    A->>DB: 创建项目记录
    A->>DB: 添加项目成员(owner)
    DB-->>A: 返回项目 ID
    A-->>F: 返回项目信息
    F->>F: 更新项目列表
    F-->>U: 显示成功提示
    F->>F: 跳转到剧本上传页面

3.2 剧本上传与智能拆解流程

3.2.1 方式一:剧本智能拆解

sequenceDiagram
    participant U as 用户
    participant F as 前端
    participant A as API 服务
    participant DB as 数据库
    participant S3 as 对象存储
    participant Q as Celery 队列
    participant W as Worker
    participant AI as AI 大模型
    
    Note over U,AI: 阶段1:剧本上传
    U->>F: 上传剧本文件或粘贴文本
    alt 上传文件
        F->>S3: 上传剧本文件
        S3-->>F: 返回文件 URL
        F->>A: POST /api/v1/projects/{id}/scripts
        A->>A: 解析剧本格式(Fountain/TXT/DOC)
    else 粘贴文本
        F->>A: POST /api/v1/projects/{id}/scripts
        A->>A: 解析剧本文本
    end
    
    A->>DB: 创建剧本记录
    A->>DB: 保存原始剧本内容
    DB-->>A: 返回剧本 ID
    A-->>F: 返回解析后的剧本
    F->>F: 在原始剧本栏展示
    F-->>U: 显示剧本内容
    
    Note over U,AI: 阶段2:智能拆解剧本
    U->>F: 点击"智能拆解剧本"按钮
    F->>F: 显示拆解进度弹窗
    F->>A: POST /api/v1/projects/{id}/scripts/{scriptId}/analyze
    A->>DB: 检查积分余额
    A->>DB: 创建 AI 任务(拆解资源)
    A->>DB: 扣除积分
    A->>Q: 提交资源拆解任务
    A-->>F: 返回任务 ID
    F-->>U: 显示"正在拆解资源..."
    
    Q->>W: 分配任务
    W->>DB: 获取剧本内容
    W->>AI: 提交剧本 + 资源拆解提示词
    Note over AI: 提示词:分析剧本中的<br/>角色、场景、道具
    AI-->>W: 返回拆解结果(JSON)
    W->>DB: 存储角色列表
    W->>DB: 存储场景列表
    W->>DB: 存储道具列表
    W->>DB: 更新任务状态(资源拆解完成)
    
    Note over U,AI: 阶段3:智能拆解分镜
    W->>DB: 创建 AI 任务(拆解分镜)
    W->>Q: 提交分镜拆解任务
    
    Q->>W: 分配任务
    W->>DB: 获取剧本内容
    W->>AI: 提交剧本 + 分镜拆解提示词
    Note over AI: 提示词:将剧本拆解为<br/>多个分镜,每个分镜包含<br/>标题、描述、时间范围、<br/>涉及的角色/场景/道具
    AI-->>W: 返回分镜列表(JSON)
    
    loop 处理每个分镜
        W->>DB: 创建分镜记录
        W->>DB: 关联角色到分镜
        W->>DB: 关联场景到分镜
        W->>DB: 关联道具到分镜
    end
    
    W->>DB: 更新任务状态(分镜拆解完成)
    
    Note over U,AI: 阶段4:展示拆解结果
    loop 轮询任务状态
        F->>A: GET /api/v1/ai/jobs/{taskId}
        A->>DB: 查询任务状态
        alt 资源拆解完成
            A-->>F: 返回资源列表
            F->>F: 更新进度"资源拆解完成"
        else 分镜拆解完成
            A-->>F: 返回分镜列表
            F->>F: 更新进度"分镜拆解完成"
            F->>F: 在弹窗中展示分镜列表
            F-->>U: 显示拆解结果
        end
    end
    
    Note over U,AI: 阶段5:应用到项目
    U->>F: 预览分镜列表
    U->>F: 点击"应用到项目"按钮
    F->>A: POST /api/v1/projects/{id}/apply-storyboards
    A->>DB: 确认分镜数据
    A->>DB: 更新项目状态
    A-->>F: 返回成功
    F->>F: 关闭智能拆解弹窗
    F->>F: 跳转到项目编辑页
    F->>F: 加载分镜列表
    F-->>U: 显示项目整体编辑界面

3.2.2 方式二:分镜模板上传

sequenceDiagram
    participant U as 用户
    participant F as 前端
    participant A as API 服务
    participant DB as 数据库
    participant S3 as 对象存储
    participant Q as Celery 队列
    participant W as Worker
    participant AI as AI 大模型
    
    Note over U,AI: 阶段1:下载分镜模板
    U->>F: 点击"下载分镜模板"
    F->>A: GET /api/v1/templates/storyboard
    A-->>F: 返回模板文件(Excel/CSV)
    F-->>U: 下载模板文件
    
    Note over U,F: 用户离线编辑模板
    U->>U: 填写分镜信息
    Note over U: 模板包含:<br/>分镜标题、描述、<br/>时间范围、角色、<br/>场景、道具等
    
    Note over U,AI: 阶段2:上传分镜模板
    U->>F: 上传编辑好的分镜模板
    F->>S3: 上传模板文件
    S3-->>F: 返回文件 URL
    F->>A: POST /api/v1/projects/{id}/storyboards/import
    A->>A: 解析模板文件(Excel/CSV)
    A->>A: 验证数据格式
    
    loop 处理每个分镜
        A->>DB: 创建分镜记录
        A->>DB: 保存分镜标题和描述
        A->>DB: 保存时间范围
    end
    
    A-->>F: 返回导入成功
    F-->>U: 显示"分镜导入成功"
    
    Note over U,AI: 阶段3:自动提取资源
    A->>DB: 检查积分余额
    A->>DB: 创建 AI 任务(提取资源)
    A->>DB: 扣除积分
    A->>Q: 提交资源提取任务
    
    Q->>W: 分配任务
    W->>DB: 获取所有分镜数据
    W->>AI: 提交分镜数据 + 资源提取提示词
    Note over AI: 提示词:从所有分镜中<br/>提取并去重<br/>角色、场景、道具
    AI-->>W: 返回资源列表(JSON)
    
    W->>DB: 存储角色列表(去重)
    W->>DB: 存储场景列表(去重)
    W->>DB: 存储道具列表(去重)
    
    Note over U,AI: 阶段4:自动关联资源
    loop 处理每个分镜
        W->>DB: 读取分镜中的资源名称
        W->>DB: 匹配已入库的角色
        W->>DB: 匹配已入库的场景
        W->>DB: 匹配已入库的道具
        W->>DB: 创建分镜资源关联
    end
    
    W->>DB: 更新任务状态(完成)
    
    Note over U,AI: 阶段5:展示结果
    loop 轮询任务状态
        F->>A: GET /api/v1/ai/jobs/{taskId}
        A->>DB: 查询任务状态
        alt 任务完成
            A-->>F: 返回资源列表和分镜列表
            F->>F: 更新进度"资源提取完成"
            F->>F: 在弹窗中展示分镜列表
            F-->>U: 显示拆解结果
        end
    end
    
    Note over U,AI: 阶段6:应用到项目
    U->>F: 预览分镜列表
    U->>F: 点击"应用到项目"按钮
    F->>A: POST /api/v1/projects/{id}/apply-storyboards
    A->>DB: 确认分镜数据
    A->>DB: 更新项目状态
    A-->>F: 返回成功
    F->>F: 关闭智能拆解弹窗
    F->>F: 跳转到项目编辑页
    F->>F: 加载分镜列表
    F-->>U: 显示项目整体编辑界面

3.2.3 两种方式对比

对比项 剧本智能拆解 分镜模板上传
输入方式 上传剧本文件或粘贴文本 下载模板 → 编辑 → 上传
AI 处理 剧本 → 资源 → 分镜 分镜 → 资源提取 → 关联
用户控制 AI 自动生成分镜 用户手动编辑分镜
适用场景 有完整剧本,快速生成 精确控制分镜内容
积分消耗 较多(两次 AI 调用) 较少(一次 AI 调用)
处理顺序 先提取资源 → 再生成分镜 先导入分镜 → 再提取资源
资源去重 AI 自动去重 AI 自动去重
关联方式 AI 生成时自动关联 导入后自动匹配关联

3.3 文件夹管理流程

sequenceDiagram
    participant U as 用户
    participant F as 前端
    participant A as API 服务
    participant DB as 数据库
    
    U->>F: 创建文件夹
    F->>A: POST /api/v1/folders
    A->>DB: 检查父文件夹权限
    A->>DB: 检查层级深度(<= 10)
    A->>DB: 检查同级名称唯一性
    A->>DB: 创建文件夹记录
    A->>DB: 计算并存储路径
    DB-->>A: 返回文件夹信息
    A-->>F: 返回成功
    F->>F: 更新文件夹树
    F-->>U: 显示新文件夹
    
    Note over U,DB: 移动项目到文件夹
    U->>F: 拖拽项目到文件夹
    F->>A: POST /api/v1/projects/{id}/move
    A->>DB: 检查目标文件夹权限
    A->>DB: 更新项目 folder_id
    A-->>F: 返回成功
    F->>F: 更新 UI

3.4 项目协作流程

sequenceDiagram
    participant O as 项目所有者
    participant F as 前端
    participant A as API 服务
    participant DB as 数据库
    participant N as 通知服务
    participant C as 协作者
    
    O->>F: 邀请成员
    F->>A: POST /api/v1/projects/{id}/members
    A->>DB: 检查项目权限
    A->>DB: 检查用户是否存在
    A->>DB: 添加项目成员
    A->>N: 发送邀请通知
    N->>C: 推送通知
    A-->>F: 返回成功
    F-->>O: 显示成员列表
    
    C->>F: 查看通知
    C->>F: 接受邀请
    F->>A: POST /api/v1/projects/{id}/members/accept
    A->>DB: 更新成员状态
    A->>N: 通知项目所有者
    A-->>F: 返回成功
    F-->>C: 跳转到项目

4. 分镜编辑流程

4.1 分镜创建与编辑流程

sequenceDiagram
    participant U as 用户
    participant F as 前端
    participant A as API 服务
    participant DB as 数据库
    participant Cache as Redis
    
    U->>F: 创建分镜
    F->>A: POST /api/v1/projects/{id}/storyboards
    A->>DB: 检查项目权限
    A->>DB: 计算 order_index
    A->>DB: 创建分镜记录
    DB-->>A: 返回分镜信息
    A->>Cache: 更新缓存
    A-->>F: 返回分镜数据
    F->>F: 更新分镜列表
    F-->>U: 显示新分镜
    
    Note over U,Cache: 编辑分镜描述
    U->>F: 修改分镜描述
    F->>A: PATCH /api/v1/storyboards/{id}
    A->>DB: 更新分镜记录
    A->>Cache: 更新缓存
    A-->>F: 返回成功
    F-->>U: 显示更新后内容
    
    Note over U,Cache: 调整分镜顺序
    U->>F: 拖拽分镜
    F->>A: PATCH /api/v1/storyboards/{id}
    A->>DB: 更新 order_index
    A->>DB: 调整其他分镜顺序
    A-->>F: 返回成功
    F->>F: 重新排序显示

4.2 分镜资源关联流程

sequenceDiagram
    participant U as 用户
    participant F as 前端
    participant A as API 服务
    participant DB as 数据库
    participant S3 as 对象存储
    
    U->>F: 添加角色到分镜
    F->>A: POST /api/v1/storyboards/{id}/resources
    A->>DB: 检查资源是否存在
    A->>DB: 创建关联记录
    A->>DB: 设置 display_order
    DB-->>A: 返回关联信息
    A-->>F: 返回成功
    F->>F: 更新分镜资源列表
    F-->>U: 显示新添加的资源
    
    Note over U,S3: 上传新资源
    U->>F: 上传图片
    F->>S3: 上传文件
    S3-->>F: 返回文件 URL
    F->>A: POST /api/v1/project-resources
    A->>DB: 创建资源记录
    A->>DB: 关联到分镜
    A-->>F: 返回资源信息
    F-->>U: 显示上传成功

5. AI 生成流程

5.1 AI 图片生成流程

sequenceDiagram
    participant U as 用户
    participant F as 前端
    participant A as API 服务
    participant DB as 数据库
    participant Q as Celery 队列
    participant W as Worker
    participant AI as AI 服务
    participant S3 as 对象存储
    
    U->>F: 输入提示词
    F->>A: POST /api/v1/ai/generate-image
    A->>DB: 检查积分余额
    alt 积分不足
        A-->>F: 返回错误
        F-->>U: 提示积分不足
    else 积分充足
        A->>DB: 创建 AI 任务
        A->>DB: 扣除积分
        A->>Q: 提交异步任务
        A-->>F: 返回任务 ID
        F-->>U: 显示生成中
        
        Q->>W: 分配任务
        W->>AI: 调用 AI API
        AI-->>W: 返回生成的图片
        W->>S3: 上传图片
        S3-->>W: 返回 URL
        W->>DB: 更新任务状态
        W->>DB: 创建资源记录
        
        loop 轮询任务状态
            F->>A: GET /api/v1/ai/jobs/{id}
            A->>DB: 查询任务状态
            DB-->>A: 返回状态
            A-->>F: 返回任务信息
            alt 任务完成
                F->>F: 显示生成结果
                F-->>U: 显示图片
            else 任务失败
                F-->>U: 显示错误信息
            end
        end
    end

5.2 AI 视频生成流程

sequenceDiagram
    participant U as 用户
    participant F as 前端
    participant A as API 服务
    participant DB as 数据库
    participant Q as Celery 队列
    participant W as Worker
    participant AI as AI 服务
    participant S3 as 对象存储
    
    U->>F: 选择图片生成视频
    F->>A: POST /api/v1/ai/generate-video
    A->>DB: 检查积分余额
    A->>DB: 创建 AI 任务
    A->>DB: 创建视频记录(pending)
    A->>DB: 扣除积分
    A->>Q: 提交异步任务
    A-->>F: 返回任务 ID
    F-->>U: 显示生成中(进度条)
    
    Q->>W: 分配任务
    W->>AI: 调用视频生成 API
    W->>DB: 更新任务进度(0-100%)
    
    loop 轮询进度
        F->>A: GET /api/v1/ai/jobs/{id}
        A->>DB: 查询进度
        A-->>F: 返回进度
        F->>F: 更新进度条
    end
    
    AI-->>W: 返回生成的视频
    W->>S3: 上传视频
    S3-->>W: 返回 URL
    W->>DB: 更新视频记录
    W->>DB: 更新任务状态(completed)
    
    F->>A: GET /api/v1/ai/jobs/{id}
    A-->>F: 返回完成状态
    F->>F: 显示视频预览
    F-->>U: 生成完成

5.3 AI 配音生成流程

sequenceDiagram
    participant U as 用户
    participant F as 前端
    participant A as API 服务
    participant DB as 数据库
    participant Q as Celery 队列
    participant W as Worker
    participant TTS as TTS 服务
    participant S3 as 对象存储
    
    U->>F: 输入配音文本
    F->>A: POST /api/v1/voiceovers
    A->>DB: 创建配音记录
    A->>DB: 创建 AI 任务
    A->>Q: 提交 TTS 任务
    A-->>F: 返回任务 ID
    F-->>U: 显示生成中
    
    Q->>W: 分配任务
    W->>TTS: 调用 TTS API
    TTS-->>W: 返回音频流
    W->>S3: 上传音频
    S3-->>W: 返回 URL
    W->>DB: 更新配音记录
    W->>DB: 更新任务状态
    
    F->>A: GET /api/v1/ai/jobs/{id}
    A-->>F: 返回完成状态
    F->>F: 加载音频
    F-->>U: 播放配音

6. 视频导出流程

6.1 视频导出流程

sequenceDiagram
    participant U as 用户
    participant F as 前端
    participant A as API 服务
    participant DB as 数据库
    participant Q as Celery 队列
    participant W as Worker
    participant FF as FFmpeg
    participant S3 as 对象存储
    
    U->>F: 点击导出
    F->>F: 显示导出设置
    U->>F: 选择格式和质量
    F->>A: POST /api/v1/projects/{id}/exports
    A->>DB: 创建导出任务
    A->>DB: 查询项目所有素材
    A->>Q: 提交导出任务
    A-->>F: 返回任务 ID
    F-->>U: 显示导出中
    
    Q->>W: 分配任务
    W->>DB: 获取项目数据
    W->>S3: 下载所有素材
    W->>FF: 调用 FFmpeg 合成
    
    loop 合成进度
        FF->>W: 报告进度
        W->>DB: 更新进度
        F->>A: GET /api/v1/exports/{id}
        A->>DB: 查询进度
        A-->>F: 返回进度
        F->>F: 更新进度条
    end
    
    FF-->>W: 返回合成视频
    W->>S3: 上传最终视频
    S3-->>W: 返回 URL
    W->>DB: 更新任务状态
    W->>DB: 保存下载链接
    
    F->>A: GET /api/v1/exports/{id}
    A-->>F: 返回完成状态 + URL
    F-->>U: 显示下载按钮
    U->>F: 点击下载
    F->>S3: 下载视频
    S3-->>U: 返回视频文件

7. 协作流程

7.1 实时协作流程

sequenceDiagram
    participant U1 as 用户A
    participant F1 as 前端A
    participant WS as WebSocket 服务
    participant U2 as 用户B
    participant F2 as 前端B
    participant DB as 数据库
    
    U1->>F1: 打开项目
    F1->>WS: 建立 WebSocket 连接
    WS->>DB: 记录在线状态
    WS-->>F1: 返回在线用户列表
    F1-->>U1: 显示协作者在线
    
    U2->>F2: 打开同一项目
    F2->>WS: 建立 WebSocket 连接
    WS->>DB: 记录在线状态
    WS-->>F1: 推送用户上线通知
    F1-->>U1: 显示用户B上线
    
    Note over U1,DB: 用户A编辑分镜
    U1->>F1: 修改分镜描述
    F1->>WS: 发送编辑事件
    WS->>DB: 保存修改
    WS->>F2: 推送编辑事件
    F2->>F2: 更新分镜内容
    F2-->>U2: 显示最新内容
    
    Note over U1,DB: 用户B添加评论
    U2->>F2: 添加评论
    F2->>WS: 发送评论事件
    WS->>DB: 保存评论
    WS->>F1: 推送评论通知
    F1-->>U1: 显示新评论提示

7.2 评论流程

sequenceDiagram
    participant U as 用户
    participant F as 前端
    participant A as API 服务
    participant DB as 数据库
    participant N as 通知服务
    participant M as 被@用户
    
    U->>F: 输入评论(@用户B)
    F->>A: POST /api/v1/comments
    A->>DB: 创建评论记录
    A->>DB: 解析@提及
    A->>DB: 创建通知记录
    A->>N: 发送通知
    N->>M: 推送@提及通知
    A-->>F: 返回评论信息
    F->>F: 显示新评论
    F-->>U: 评论成功
    
    M->>F: 查看通知
    F->>A: GET /api/v1/notifications
    A->>DB: 查询通知
    A-->>F: 返回通知列表
    F-->>M: 显示@提及
    M->>F: 点击通知
    F->>F: 跳转到评论位置

8. 系统架构流程

8.1 请求处理流程

graph TB
    Client[客户端] -->|HTTPS| Nginx[Nginx]
    Nginx -->|负载均衡| API1[API 服务 1]
    Nginx -->|负载均衡| API2[API 服务 2]
    
    API1 --> Auth[认证中间件]
    API2 --> Auth
    
    Auth -->|验证通过| Service[业务服务层]
    Auth -->|验证失败| Error[返回 401]
    
    Service --> Cache{缓存命中?}
    Cache -->|是| ReturnCache[返回缓存数据]
    Cache -->|否| DB[数据库查询]
    
    DB --> UpdateCache[更新缓存]
    UpdateCache --> Return[返回数据]
    ReturnCache --> Return
    
    Return --> Client
    Error --> Client
    
    style Client fill:#e1f5e1
    style Error fill:#ffe1e1
    style Cache fill:#fff4e1

8.2 异步任务处理流程

graph TB
    API[API 服务] -->|创建任务| DB[(数据库)]
    API -->|提交任务| Queue[RabbitMQ 队列]
    
    Queue -->|分发| Worker1[Worker 1]
    Queue -->|分发| Worker2[Worker 2]
    Queue -->|分发| Worker3[Worker 3]
    
    Worker1 -->|AI 任务| AIService[AI 服务]
    Worker2 -->|导出任务| FFmpeg[FFmpeg]
    Worker3 -->|其他任务| Other[其他服务]
    
    AIService -->|上传结果| S3[对象存储]
    FFmpeg -->|上传结果| S3
    
    Worker1 -->|更新状态| DB
    Worker2 -->|更新状态| DB
    Worker3 -->|更新状态| DB
    
    DB -->|通知| Notify[通知服务]
    Notify -->|推送| Client[客户端]
    
    style Queue fill:#fff4e1
    style S3 fill:#e1f0ff

8.3 数据流转流程

graph LR
    User[用户操作] --> Frontend[前端应用]
    Frontend -->|HTTP/REST| API[API 网关]
    
    API --> Auth[认证服务]
    Auth --> Service[业务服务]
    
    Service --> Cache[(Redis 缓存)]
    Service --> DB[(PostgreSQL)]
    Service --> Queue[消息队列]
    
    Queue --> Worker[异步 Worker]
    Worker --> AI[AI 服务]
    Worker --> Storage[对象存储]
    
    Storage --> CDN[CDN]
    CDN --> Frontend
    
    DB --> Backup[(备份)]
    
    style User fill:#e1f5e1
    style Cache fill:#fff4e1
    style Storage fill:#e1f0ff

📝 流程说明

核心流程特点

  1. 无感注册

    • 手机验证码登录:首次登录自动注册
    • 微信扫码登录:首次扫码自动注册
    • 无需额外注册步骤,降低用户门槛
    • 自动初始化用户积分和默认设置
  2. 智能剧本拆解

    • 方式一:剧本智能拆解
      • 支持多种剧本格式(Fountain、TXT、DOC、DOCX、PDF)
      • AI 自动提取角色、场景、道具
      • AI 自动生成分镜列表
      • 自动关联资源到分镜
    • 方式二:分镜模板上传
      • 下载标准分镜模板(Excel/CSV)
      • 用户手动编辑分镜内容
      • 上传后自动导入分镜
      • AI 自动提取并去重资源
      • 自动匹配关联资源到分镜
    • 一键应用到项目
  3. 异步优先

    • AI 生成、视频导出等耗时操作全部异步处理
    • 使用 Celery + RabbitMQ 实现任务队列
    • 支持任务进度查询和状态通知
  4. 实时协作

    • WebSocket 实现实时状态同步
    • 多用户同时编辑同一项目
    • 实时推送编辑事件和通知
  5. 权限控制

    • 基于角色的访问控制(RBAC)
    • 文件夹级别和项目级别权限
    • 支持权限继承
  6. 缓存策略

    • Redis 缓存热点数据
    • 减少数据库查询压力
    • 提升响应速度
  7. 文件管理

    • MinIO/S3 对象存储
    • 支持大文件上传
    • CDN 加速访问

🔗 相关文档


维护者:开发团队
最后更新:2026-01-29