# Jointo 业务流程 UML 图
> **项目名称**:Jointo(jointo)
> **文档版本**:v1.0
> **创建日期**:2026-01-29
---
## 📋 目录
1. [核心业务流程概览](#1-核心业务流程概览)
2. [用户认证流程](#2-用户认证流程)
3. [项目创建与管理流程](#3-项目创建与管理流程)
4. [分镜编辑流程](#4-分镜编辑流程)
5. [AI 生成流程](#5-ai-生成流程)
6. [视频导出流程](#6-视频导出流程)
7. [协作流程](#7-协作流程)
8. [系统架构流程](#8-系统架构流程)
---
## 1. 核心业务流程概览
### 1.1 整体业务流程图
```mermaid
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
```
```mermaid
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 核心功能模块关系图
```mermaid
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 手机验证码登录流程(自动注册)
```mermaid
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 微信扫码登录流程(自动注册)
```mermaid
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 项目创建流程
```mermaid
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 方式一:剧本智能拆解
```mermaid
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: 提示词:分析剧本中的
角色、场景、道具
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: 提示词:将剧本拆解为
多个分镜,每个分镜包含
标题、描述、时间范围、
涉及的角色/场景/道具
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 方式二:分镜模板上传
```mermaid
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: 模板包含:
分镜标题、描述、
时间范围、角色、
场景、道具等
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: 提示词:从所有分镜中
提取并去重
角色、场景、道具
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 文件夹管理流程
```mermaid
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 项目协作流程
```mermaid
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 分镜创建与编辑流程
```mermaid
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 分镜资源关联流程
```mermaid
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 图片生成流程
```mermaid
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 视频生成流程
```mermaid
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 配音生成流程
```mermaid
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 视频导出流程
```mermaid
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 实时协作流程
```mermaid
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 评论流程
```mermaid
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 请求处理流程
```mermaid
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 异步任务处理流程
```mermaid
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 数据流转流程
```mermaid
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 加速访问
---
## 🔗 相关文档
- [功能结构大纲](./FEATURE_STRUCTURE.md)
- [功能概览](./FEATURE_OVERVIEW.md)
- [数据库设计](./requirements/database-design.md)
- [API 设计规范](./requirements/api-design-specification.md)
- [后端架构概述](./requirements/backend/01-architecture-overview.md)
---
**维护者**:开发团队
**最后更新**:2026-01-29