# 15 · 执行任务列表

> 创建日期: 2026-04-16
> 标记规则: `[x]` 已完成 · `[ ]` 待完成 · `[~]` 进行中 · `[-]` 跳过/延后
> 完成时请补充完成日期，格式: `[x] 任务名 ✅ 2026-xx-xx`

---

## M0 · 基建（第 1~2 周）

> 完成标准: `docker compose up` 后能访问 Swagger UI 并看到 `/ping` 接口

### M0.1 工程骨架

- [ ] 创建 Maven 多模块项目 `yaoai-comic-studio`
  - [ ] `yaoai-common` — 通用工具、异常、常量、DTO 基类
  - [ ] `yaoai-domain` — 领域模型（MyBatis-Plus Entity + Mapper + IService）
  - [ ] `yaoai-security` — 认证授权（Sa-Token + Redis 会话 + 多租户 Filter）
  - [ ] `yaoai-billing` — 计费模块
  - [ ] `yaoai-storage` — 对象存储抽象层
  - [ ] `yaoai-ai-core` — AI 抽象层（Provider 接口、模型路由、Skill 加载）
  - [ ] `yaoai-ai-providers` — 具体 Provider 实现
  - [ ] `yaoai-agent` — 三层 Agent 体系
  - [ ] `yaoai-pipeline` — 业务流水线
  - [ ] `yaoai-task` — 任务系统
  - [ ] `yaoai-media` — FFmpeg 合成
  - [ ] `yaoai-api` — REST Controller + SSE + OpenAPI
  - [ ] `yaoai-admin` — 管理后台 API
  - [ ] `yaoai-worker` — 可独立部署的 Worker 进程
  - [ ] `yaoai-bootstrap` — 主启动模块
  - [ ] `yaoai-test` — 集成测试

### M0.2 基础框架

- [ ] Spring Boot 3.3.x + Java 17 依赖配置
- [ ] Spring AI Alibaba 1.0.0+ 依赖引入并验证
- [ ] `application.yml` 多环境配置（local/dev/staging/prod）
- [ ] 统一异常处理 `GlobalExceptionHandler` + `ApiResponse<T>` 包装
- [ ] `ErrorCode` 枚举集中管理
- [ ] Logback JSON 格式 + MDC（requestId/userId/tenantId）
- [ ] `RequestIdFilter` 生成并注入 X-Request-Id

### M0.3 数据库

- [ ] Flyway 接入 + 初始迁移脚本 `V1__init.sql`
- [ ] MySQL 8.0 连接池配置（HikariCP）
- [ ] MyBatis-Plus 3.5.x 配置 + `MybatisPlusConfig`
- [ ] MyBatis-Plus 插件注册（多租户 `TenantLineInnerInterceptor` + 分页 `PaginationInnerInterceptor` + 乐观锁 `OptimisticLockerInnerInterceptor`）
- [ ] 基础 Entity 抽象（`BaseEntity`: id/createdAt/updatedAt + `@TableLogic` 逻辑删除）
- [ ] MyBatis-Plus 代码生成器配置（可选，批量生成 35 张表的 Entity/Mapper/Service）

### M0.4 中间件

- [ ] Redis Stack 7.2 连接配置（Spring Cache + 分布式锁）
- [ ] RabbitMQ 3.13 连接配置 + Exchange/Queue 声明
- [ ] Docker Compose 编排（mysql + redis-stack + rabbitmq）
- [ ] Docker Compose 启动验证脚本

### M0.5 可观测性

- [ ] Spring Boot Actuator 开启
- [ ] Prometheus endpoint 暴露（`/actuator/prometheus`）
- [ ] Health Check 包含 MySQL/Redis/RabbitMQ 依赖检查

### M0.6 API 文档

- [ ] `springdoc-openapi` 集成
- [ ] Swagger UI 可访问
- [ ] `/ping` 健康检查接口
- [ ] `/system/boot-id` + `/system/version` 系统接口

### M0.7 CI/CD

- [ ] Dockerfile 多阶段构建
- [ ] GitHub Actions: PR 触发 test + build
- [ ] `.editorconfig` + 代码规范配置

### M0.8 前端接入层改造

- [ ] `doc/html` 项目引入 TanStack Query
- [ ] 引入 Zustand 状态管理
- [ ] API Client 封装（baseURL + token 拦截器 + 错误处理）
- [ ] 环境变量配置（`.env.local` / `.env.production`）

---

## M1 · 认证与项目 CRUD（第 3~4 周）

> 完成标准: 用户注册 → 登录 → 创建一个空项目 → 在 Dashboard 看到它

### M1.1 认证系统

- [ ] Sa-Token 1.39+ 接入（`sa-token-spring-boot3-starter` + `sa-token-redis-jackson`）
- [ ] Token 存 Redis 配置
- [ ] `POST /auth/register` — 注册（email/username + password，BCrypt salt=12）
- [ ] `POST /auth/login` — 登录 → {accessToken, user}
- [ ] `POST /auth/logout` — 注销
- [ ] `POST /auth/refresh` — 刷新 token
- [ ] `GET /auth/me` — 当前用户信息
- [ ] IP 登录限流（Bucket4j + Redis，5次/分钟）
- [ ] 注册限流（3次/小时）

### M1.2 用户与租户

- [ ] `users` 表 + Entity + Repository
- [ ] `tenants` 表 + Entity + Repository
- [ ] `tenant_members` 表 + Entity
- [ ] 注册时自动创建个人租户（Tenant）
- [ ] `TenantContext` ThreadLocal 工具类
- [ ] `TenantContextFilter` — 从 Sa-Token Session 取 tenantId
- [ ] MyBatis-Plus `TenantLineInnerInterceptor` 租户隔离（自动注入 tenant_id 条件）

### M1.3 项目 CRUD

- [ ] `projects` 表 Flyway 迁移
- [ ] `Project` Entity + `ProjectMapper` + `ProjectServiceImpl`
- [ ] `ProjectService` — CRUD 业务逻辑
- [ ] `GET /projects` — 列表（分页 + 搜索 + 状态筛选）
- [ ] `GET /projects/stats` — Dashboard 统计（总项目数/进行中/已完成）
- [ ] `POST /projects` — 创建项目（multipart: file + meta）
- [ ] `GET /projects/{id}` — 项目详情
- [ ] `PATCH /projects/{id}` — 更新字段
- [ ] `DELETE /projects/{id}` — 删除
- [ ] `POST /projects/{id}:archive` — 归档

### M1.4 项目成员

- [ ] `project_members` 表 + Entity
- [ ] `project_invitations` 表 + Entity
- [ ] `GET /projects/{id}/members` — 成员列表
- [ ] `POST /projects/{id}/invitations` — 邀请成员
- [ ] `PATCH /projects/{id}/members/{mid}` — 修改角色
- [ ] `DELETE /projects/{id}/members/{mid}` — 移除成员

### M1.5 前端接入

- [ ] 登录/注册页面开发
- [ ] Auth Guard 路由守卫
- [ ] Dashboard 页面去 mock，接入真实 API
- [ ] NewProject 页面去 mock，接入真实 API
- [ ] Token 持久化 + 自动刷新

---

## M2 · 剧本解析流水线（第 5~7 周）

> 完成标准: 上传一篇 5000 字小说，能自动出角色列表和分集列表，全程 SSE 推进度

### M2.1 文件上传与存储

- [ ] `StorageProvider` 接口定义（upload/download/getSignedUrl/delete/exists）
- [ ] `AliyunOssProvider` 实现（阿里云 OSS）
- [ ] `VolcengineTosProvider` 实现（火山引擎 TOS）
- [ ] `@ConditionalOnProperty` 按配置切换 Provider
- [ ] Bucket 规划与目录结构实现
- [ ] `media_objects` 表 + Entity（统一媒体管理）
- [ ] `MediaService` — 上传/下载/签名 URL 管理
- [ ] 预签名 URL 生成（TTL 30 分钟）

### M2.2 文本抽取

- [ ] Apache POI 接入（.doc/.docx）
- [ ] PDFBox 接入（.pdf）
- [ ] 纯文本 + Markdown 读取
- [ ] `scripts` 表 + Entity
- [ ] `POST /projects/{id}/import/step1-extract` — 文本抽取 API

### M2.3 任务系统核心

- [ ] `tasks` 表 Flyway 迁移
- [ ] `Task` Entity + `TaskMapper`
- [ ] `TaskService` — submit/markProcessing/markCompleted/markFailed/cancel
- [ ] `TaskHandler<P,R>` 接口定义
- [ ] RabbitMQ Exchange + Queue 声明（7 个队列）
- [ ] 通用 Worker 消费模板（心跳 + 重试 + 计费集成）
- [ ] `task_events` 表 + 事件记录
- [ ] 幂等处理（idempotencyKey 去重）
- [ ] 心跳机制（10s 间隔，60s 超时判定假死）

### M2.4 SSE 进度推送

- [ ] `SseService` — 事件发布
- [ ] `GET /projects/{id}/events` — SSE 端点
- [ ] `GET /tasks/{taskId}/events` — 单任务 SSE
- [ ] Redis pub/sub 跨实例 SSE 分发
- [ ] 事件格式：task.progress / task.completed / task.failed

### M2.5 AI 接入

- [ ] Spring AI Alibaba 通义千问 ChatClient 配置
- [ ] `TextProvider` 接口 + `QwenTextProvider` 实现
- [ ] 流式输出（`Flux<String>`）+ 非流式
- [ ] Embedding 模型接入（text-embedding-v3，dim=1024）

### M2.6 Skill 系统

- [ ] `SkillLoader` 服务实现
- [ ] `skills/` 目录结构创建
- [ ] 从 Toonflow 迁移核心 Skill 文件：
  - [ ] `script_execution_skeleton.md` — 故事骨架
  - [ ] `script_execution_adaptation.md` — 改编策略
  - [ ] `script_execution_script.md` — 剧本编写
  - [ ] `script_agent_decision.md` — 决策层指令
  - [ ] `script_agent_supervision.md` — 监督层指令
- [ ] Mustache 模板渲染（变量插槽）
- [ ] `prompt_templates` 表 — 覆盖优先级（project > tenant > global > default）

### M2.7 剧本解析 Executor

- [ ] `ScriptParseExecutor` — 文本抽取 + 事件提取
- [ ] `CharacterExtractExecutor` — AI 角色提取（去重 + 关系推理）
- [ ] `EpisodeSplitExecutor` — 智能分集（三幕结构 + 付费卡点）
- [ ] `novel_events` 表 + Entity
- [ ] `characters` 表 + Entity + CRUD API
- [ ] `character_relations` 表 + Entity
- [ ] `episodes` 表 + Entity + CRUD API
- [ ] `outlines` 表 + Entity

### M2.8 四步导入 API

- [ ] `POST /projects/{id}/import/step1-extract` — 文本抽取
- [ ] `POST /projects/{id}/import/step2-characters` — AI 角色提取
- [ ] `POST /projects/{id}/import/step3-episodes` — 智能分集
- [ ] `POST /projects/{id}/import/step4-confirm` — 一键创建确认

### M2.9 风格与大纲

- [ ] `GET /styles` — 风格列表（9+ 种）
- [ ] `POST /projects/{id}:set-style` — 设置风格
- [ ] `POST /projects/{id}/outline:generate` — AI 生成大纲 → taskId
- [ ] `GET /projects/{id}/outline` — 获取大纲
- [ ] `PUT /projects/{id}/outline` — 编辑大纲

### M2.10 前端接入

- [ ] NewProject 上传流程接入
- [ ] StyleSelection 页面接入
- [ ] OutlineGeneration 页面接入（SSE 进度）
- [ ] EpisodeGeneration 页面接入
- [ ] CharacterGeneration 页面基础接入（CRUD，无图片生成）

---

## M3 · 资产生成（第 8~10 周）

> 完成标准: 每个角色能一键生成四视图，前端能看到并支持重新生成

### M3.1 图像 AI Provider

- [ ] `ImageProvider` 接口定义（支持参考图 `List<ReferenceImage>`）
- [ ] `WanxImageProvider` — 通义万相文生图实现
- [ ] 兜底 Provider 配置（OpenAI DALL-E 或 Gemini Imagen，可选）
- [ ] `AiModelRouter` — 根据项目配置 > 全局默认 > fallback 选择 Provider

### M3.2 艺术手册

- [ ] 从 Toonflow 迁移 `art_skills/` 全套艺术手册
  - [ ] `2d_anime/art_character.md`
  - [ ] `2d_anime/art_general.md`
  - [ ] 其他风格手册（国风/3D/水墨等）
- [ ] 风格手册与 `SkillLoader` 集成

### M3.3 角色资产

- [ ] `CharacterTurnaroundExecutor` — 四视图生成（借鉴 AIComicBuilder）
- [ ] `character_appearances` 表 + Entity（服装变体/状态变体）
- [ ] `POST /projects/{id}/characters/{cid}:generate-turnaround` — 生成四视图
- [ ] `POST /projects/{id}/characters/{cid}:upload-reference` — 上传参考图
- [ ] `POST /projects/{id}/characters/{cid}/appearances` — 新增变体
- [ ] `GET /projects/{id}/characters/{cid}/appearances` — 变体列表
- [ ] 资产版本管理（assetVersion + isActive 模式）

### M3.4 场景资产

- [ ] `scenes` 表 + Entity + CRUD API
- [ ] `SceneImageExecutor` — 场景图生成
- [ ] `POST /projects/{id}/scenes/{sid}:generate` — 生成场景图
- [ ] 场景图版本管理

### M3.5 道具资产

- [ ] `props` 表 + Entity + CRUD API
- [ ] `PropImageExecutor` — 道具图生成
- [ ] `POST /projects/{id}/props/{pid}:generate` — 生成道具图

### M3.6 统一资产表

- [ ] `shot_assets` 表 Flyway 迁移
- [ ] `ShotAsset` Entity + `ShotAssetMapper`
- [ ] `AssetService` — 创建/查询/版本切换/激活
- [ ] 版本回退接口（`PATCH /assets/{aid}:activate`）

### M3.7 初级计费

- [ ] `user_balances` 表 + Entity
- [ ] `BillingService` 基础实现（SOFT 模式，只记录不拦截）
- [ ] `CostEstimator` — 各任务类型成本估算
- [ ] 积分预扣 + 结算 + 回滚流程

### M3.8 前端接入

- [ ] CharacterGeneration 页面完整接入（四视图生成 + 变体管理）
- [ ] SceneGeneration 页面接入
- [ ] PropsGeneration 页面接入
- [ ] 图片生成 SSE 进度展示
- [ ] 重新生成 / 版本切换 UI

---

## M4 · 分镜工作台（第 11~13 周）

> 完成标准: 某集全部分镜可一键 AI 生成，用户可手动编辑每个镜头

### M4.1 分镜数据

- [ ] `storyboards` 表 Flyway 迁移（完整字段，参考 AIComicBuilder shot 结构）
- [ ] `Storyboard` Entity + `StoryboardMapper`
- [ ] 分镜字段：描述、角色、对白、道具、相机、转场、时长等

### M4.2 分镜 CRUD API

- [ ] `GET /projects/{id}/episodes/{eid}/storyboards` — 分镜列表
- [ ] `POST /projects/{id}/storyboards` — 手动创建
- [ ] `GET /projects/{id}/storyboards/{sid}` — 详情
- [ ] `PATCH /projects/{id}/storyboards/{sid}` — 更新
- [ ] `DELETE /projects/{id}/storyboards/{sid}` — 删除
- [ ] `POST /projects/{id}/storyboards/{sid}:duplicate` — 复制
- [ ] `PUT /projects/{id}/episodes/{eid}/storyboards:reorder` — 拖拽重排序（批量 sequence 更新）

### M4.3 AI 分镜生成

- [ ] `DirectorPlanExecutor` — 导演规划（借鉴 Toonflow 导演手册）
- [ ] `StoryboardSplitExecutor` — 镜头拆分（借鉴 AIComicBuilder shot-split）
- [ ] `StoryboardTableExecutor` — 分镜表生成
- [ ] `StoryboardPanelExecutor` — 分镜面板写入
- [ ] `POST /projects/{id}/episodes/{eid}/storyboards:generate` — AI 批量生成分镜
- [ ] 从 Toonflow 迁移 Skill 文件：
  - [ ] `production_agent_decision.md`
  - [ ] `production_execution_director_plan.md`
  - [ ] `production_execution_storyboard_table.md`
  - [ ] `production_execution_storyboard_panel.md`

### M4.4 监督层

- [ ] `SupervisionAgent` 雏形实现
- [ ] `SupervisionExecutor` — A/B/C/D 评分 + 审核维度
- [ ] 可选开关（Free 套餐关闭以省成本）
- [ ] 从 Toonflow 迁移 `script_agent_supervision.md`
- [ ] `POST /projects/{id}/storyboards/{sid}:ai-check` — AI 合规检查

### M4.5 三层 Agent 基础

- [ ] `ScriptDecisionAgent` — 决策层（@Tool 包装子 Agent）
- [ ] 执行层 Executor 注册机制
- [ ] `graph_runs` 表 + Entity（工作流运行记录）
- [ ] `graph_steps` 表 + Entity（步骤记录）
- [ ] `ProductionAgentOrchestrator` — Agent 编排引擎
- [ ] 断点续跑支持（从失败的 step 重启）

### M4.6 Agent Memory

- [ ] Redis Stack RediSearch 向量索引配置（`agent_memory` 索引）
- [ ] `VectorStoreConfig` — RedisVectorStore Bean（HNSW, dim=1024, COSINE）
- [ ] `AgentMemoryService` — add/retrieve/deepRetrieve
- [ ] 自动摘要压缩（超过 100 条触发）
- [ ] 短期记忆 + 长期摘要 + RAG 三层检索

### M4.7 前端接入

- [ ] StoryboardWorkspace 页面完整接入
  - [ ] 左侧分集选择器
  - [ ] 中间分镜列表（分镜信息区 + 视频生成区）
  - [ ] 出镜角色增删 + 音色选择
  - [ ] 场景选择 / 更换
  - [ ] 道具增删
  - [ ] 单一提示词编辑框
  - [ ] 智能体选择器（通义万相/Seedance/Kling）
  - [ ] 积分预估显示
- [ ] 拖拽排序实现（react-dnd 逻辑补全）
- [ ] AI 生成分镜 SSE 进度

---

## M5 · 视觉生成（第 14~16 周）

> 完成标准: 选中分镜，点"生成视频"，10 分钟内能看到 5~8 秒短视频，角色相对一致

### M5.1 首尾帧生成

- [ ] `FrameGenerateExecutor` — 首帧生成（注入角色参考图 + 风格约束 + 色板约束）
- [ ] `FrameGenerateExecutor` — 尾帧生成（参考首帧 + 角色四视图）
- [ ] `POST /projects/{id}/storyboards/{sid}/assets/first-frame:generate`
- [ ] `POST /projects/{id}/storyboards/{sid}/assets/last-frame:generate`
- [ ] 角色参考图预签名 URL 注入
- [ ] 首尾帧并发生成

### M5.2 视频 AI Provider

- [ ] `VideoProvider` 接口定义（submit/poll 异步模式）
- [ ] `WanxVideoProvider` — 通义万相视频实现
- [ ] `SeedanceProvider` — 豆包 Seedance 实现（备选）
- [ ] `KlingProvider` — 快手 Kling 实现（备选）
- [ ] Provider fallback 机制（主 Provider 失败自动切换）

### M5.3 视频生成

- [ ] `VideoGenerateExecutor` — 异步提交 + 轮询（5s × 120 次 = 10 分钟）
- [ ] `POST /projects/{id}/storyboards/{sid}/assets/video:generate`
- [ ] 模型厂商临时 URL → 转存自有 OSS/TOS
- [ ] `shot_assets` 写入（KEYFRAME_VIDEO 类型）
- [ ] 任务心跳机制上线
- [ ] 失败重试 + 指数退避

### M5.4 批量生成

- [ ] `POST /projects/{id}/episodes/{eid}/storyboards:batch-generate`
- [ ] body: `{storyboardIds[], targets:[first_frame, last_frame, video]}`
- [ ] 并发控制（按队列配置）

### M5.5 分镜资产查询

- [ ] `GET /projects/{id}/storyboards/{sid}/assets` — 资产列表（按类型/激活状态筛选）
- [ ] `PATCH /projects/{id}/storyboards/{sid}/assets/{aid}:activate` — 版本回退

### M5.6 前端接入

- [ ] StoryboardWorkspace 右侧视频预览接入
- [ ] 首尾帧预览展示
- [ ] 视频播放器组件
- [ ] VideoGeneration 页面接入
  - [ ] 分镜状态网格
  - [ ] 分镜时间线
  - [ ] 批量生成控制
- [ ] 生成进度 SSE 实时展示

---

## M6 · 合成与导出（第 17~18 周）

> 完成标准: 一集分镜生成完后，点"合成"，得到带字幕、配音、BGM 的完整 MP4

### M6.1 TTS 语音

- [ ] `TtsProvider` 接口定义
- [ ] `QwenTtsProvider` — 通义 TTS 实现（支持音色选择 + 情绪 + 语速）
- [ ] `VoiceTtsExecutor` — 按角色音色生成对白音频
- [ ] `POST /projects/{id}/storyboards/{sid}/assets/audio:generate`
- [ ] 音频转存 OSS + `shot_assets` 写入

### M6.2 FFmpeg 合成

- [ ] `FfmpegService` — FFmpeg 调度封装
- [ ] `AssembleExecutor` — 全集合成
  - [ ] 按 shot.sequence 排序 keyframe_video
  - [ ] xfade 转场拼接（cut/dissolve/fade，默认 0.5s）
  - [ ] SRT 字幕生成（基于 dialogues 时间比例）
  - [ ] 字幕硬编码烧录
  - [ ] 对白音频混入（按时间戳）
  - [ ] BGM 混音（volume=0.3）
  - [ ] 片头标题卡（3s）+ 片尾（2s）
- [ ] `POST /projects/{id}/episodes/{eid}:assemble` — 合成 API
- [ ] `GET /projects/{id}/episodes/{eid}/segments` — 分镜段状态
- [ ] `GET /projects/{id}/episodes/{eid}/final` — 最终 MP4 下载（签名 URL）

### M6.3 水印

- [ ] `GET/PUT /settings/watermark` — 水印设置 API
- [ ] FFmpeg 水印烧录集成
- [ ] 水印位置/透明度/自定义图片支持

### M6.4 前端接入

- [ ] VideoGeneration 页面合成功能接入
- [ ] 合成进度展示
- [ ] 视频播放器 — 完整成片播放
- [ ] 下载按钮 + 签名 URL
- [ ] AIWatermarkSettings 页面接入

---

## M7 · 计费与 SaaS（第 19~21 周）

> 完成标准: 用户能充值、消费会扣积分、余额不足被拦截、流水可查

### M7.1 计费系统

- [ ] `user_balances` / `balance_freezes` / `balance_transactions` 三表上线
- [ ] `BillingService` 完整实现（prepare/settle/rollback）
- [ ] 乐观锁扣减 SQL
- [ ] 冻结过期清理定时任务（每 1 分钟）
- [ ] 集成到所有 Worker（全链路计费）
- [ ] `BILLING_MODE` 切换到 STRICT

### M7.2 成本估算

- [ ] `CostEstimator` 完整实现
  - [ ] SCRIPT_PARSE: 5 积分
  - [ ] OUTLINE_GEN: 10 积分
  - [ ] CHARACTER_IMAGE: 20 积分（四视图）
  - [ ] SCENE_IMAGE: 10 积分
  - [ ] FRAME_GEN: 15 积分/张
  - [ ] VIDEO_GEN: 按模型+时长动态计算
  - [ ] TTS: 0.1 积分/字
  - [ ] ASSEMBLE: 5 积分
- [ ] 前端积分预估显示联动

### M7.3 订阅系统

- [ ] `subscriptions` 表 + Entity
- [ ] 套餐定义（FREE/PRO/TEAM/ENTERPRISE）
- [ ] `TenantQuota` — 租户级配额（maxProjects/maxMembers/maxConcurrentTasks）
- [ ] `GET /billing/subscription` — 当前订阅
- [ ] `POST /billing/subscription` — 升级套餐
- [ ] `POST /billing/subscription:cancel` — 取消

### M7.4 支付集成

- [ ] `PaymentProvider` 接口定义
- [ ] 支付宝接入 + Webhook
- [ ] 微信支付接入 + Webhook
- [ ] Stripe 海外接入（可选）
- [ ] `POST /billing/recharge` — 充值 → 支付链接

### M7.5 计费查询 API

- [ ] `GET /billing/balance` — 当前余额+冻结+已消费
- [ ] `GET /billing/transactions` — 流水（分页 + 类型筛选）
- [ ] `GET /usage/stats` — 积分统计
- [ ] `GET /usage/daily` — 30 天趋势
- [ ] `GET /usage/records` — 消费明细

### M7.6 定时任务

- [ ] 过期冻结清理（每 1 分钟）
- [ ] 统计聚合 usage_records → daily_usage_stats（每 30 分钟）
- [ ] 订阅续费检查 + 到期降级（每天 03:00）
- [ ] 清理过期通知 + 归档旧 audit_logs（每天 02:00）

### M7.7 前端接入

- [ ] 充值页面开发
- [ ] 订阅/套餐选择页面
- [ ] UsageManagement 页面接入（用量统计 + 图表）
- [ ] 余额不足拦截 UI 提示

---

## M8 · 团队协作与资产库（第 22~24 周）

> 完成标准: 团队成员可被邀请到项目，权限隔离正确，资产能跨项目复用

### M8.1 团队管理

- [ ] `employees` 表 + Entity + CRUD
- [ ] `groups` 表 + `group_members` 表 + Entity
- [ ] `GET /admin/employees` — 员工列表（搜索 + 状态筛选）
- [ ] `POST /admin/employees` — 添加员工
- [ ] `PATCH /admin/employees/{id}` — 编辑
- [ ] `DELETE /admin/employees/{id}` — 删除
- [ ] `POST /admin/employees:bulk-import` — CSV 批量导入
- [ ] `GET/POST/PATCH /admin/groups` — 小组 CRUD
- [ ] 子账号管理 API（前端截图发现的补充）

### M8.2 RBAC 权限

- [ ] 项目级 4 角色实现（owner/admin/editor/viewer）
- [ ] `ProjectPermissionEvaluator` — 权限检查器
- [ ] `@PreAuthorize` 注解集成到所有需要鉴权的 Controller
- [ ] 权限矩阵测试覆盖

### M8.3 资产库

- [ ] `global_assets` 表 + Entity
- [ ] `asset_favorites` 表 + Entity
- [ ] `GET /assets` — 资产列表（library/type/tags/search 筛选）
- [ ] `POST /assets` — 上传资产
- [ ] `GET /assets/{aid}` — 详情
- [ ] `PATCH /assets/{aid}` — 编辑
- [ ] `DELETE /assets/{aid}` — 删除
- [ ] `POST /assets/{aid}:favorite` — 收藏
- [ ] `POST /assets/{aid}:clone-to-project` — 复用到项目
- [ ] 资产批量操作 API（前端截图发现的补充）

### M8.4 通知系统

- [ ] `notifications` 表 + Entity
- [ ] `GET /system/notifications` — 通知列表
- [ ] 标记已读
- [ ] WebPush（可选）

### M8.5 审计日志

- [ ] `audit_logs` 表 + Entity
- [ ] `@Audited` 注解 + AOP 切面
- [ ] `GET /admin/audit-logs` — 审计日志查询
- [ ] 日志自动脱敏（passwords/tokens/api_keys/email）

### M8.6 提示词模板管理

- [ ] `GET /prompt-templates` — 模板列表（scope/key 筛选）
- [ ] `POST /prompt-templates` — 创建
- [ ] `PATCH /prompt-templates/{id}` — 编辑
- [ ] `GET /prompt-templates/{id}/versions` — 版本历史
- [ ] `POST /prompt-templates/{id}:rollback` — 回滚版本
- [ ] `GET/POST /prompt-presets` — 预设管理
- [ ] Skill 热更新（文件监听 + Redis pub/sub）

### M8.7 前端接入

- [ ] TeamManagement 页面接入
- [ ] AssetsManagement 页面接入（个人/团队资产库）
- [ ] ProjectSettings 页面接入（成员管理 + 权限）
- [ ] 通知中心 UI
- [ ] 提示词模板覆盖 UI

---

## M9 · 上线与优化（第 25~26 周）

> 完成标准: 系统稳定运行，可对外开放

### M9.1 性能优化

- [ ] 慢 SQL 排查与优化
- [ ] N+1 查询检测与修复
- [ ] 热数据缓存策略（Spring Cache + Redis，TTL 配置）
- [ ] 大表分区（tasks/balance_transactions/audit_logs 按时间分区）

### M9.2 压测

- [ ] JMeter / k6 压测脚本编写
- [ ] API 接口压测（目标 p99 < 2s）
- [ ] MQ 消费能力压测
- [ ] 并发用户场景模拟

### M9.3 监控与告警

- [ ] Prometheus + Grafana 监控面板搭建
  - [ ] API 延迟 / 5xx 率
  - [ ] MQ 队列积压
  - [ ] Worker 失败率
  - [ ] DB 慢查询
  - [ ] AI Provider 错误率
  - [ ] 余额扣减异常
  - [ ] 任务 stuck 检测
- [ ] SkyWalking / OpenTelemetry 链路追踪
- [ ] 告警接入钉钉/企业微信

### M9.4 安全加固

- [ ] HTTPS 全站（Let's Encrypt）
- [ ] WAF 配置（阿里云 / Cloudflare）
- [ ] SQL 注入防护验证
- [ ] XSS 防护验证
- [ ] 依赖扫描（Dependabot + Snyk）
- [ ] API Key 加密存储（Jasypt + KMS）

### M9.5 部署

- [ ] K8s Helm chart 编写
- [ ] HPA 配置（API 按 CPU，Worker 按队列深度）
- [ ] Secret 管理（ExternalSecrets + Vault）
- [ ] 灰度发布方案
- [ ] 蓝绿部署 / 滚动更新策略

### M9.6 运营后台

- [ ] 用户查询
- [ ] 订单查询
- [ ] 运营数据看板
- [ ] Runbook 编写（视频任务卡住/余额异常/Worker OOM）

### M9.7 文档

- [ ] 用户使用文档
- [ ] API 文档（OpenAPI 导出）
- [ ] 部署文档
- [ ] 运维手册

### M9.8 上线

- [ ] Staging 环境全流程验证
- [ ] 数据迁移计划
- [ ] 上线 checklist 走查
- [ ] 生产发布 🚀

---

## 补充任务（跨阶段）

### 前端模型配置（M2 后可做）

- [ ] ModelSettings 页面接入
  - [ ] 语言模型配置（通义千问 Max/Plus/Turbo）
  - [ ] 图片模型配置（通义万相/DALL-E）
  - [ ] 视频模型配置（通义万相/Seedance/Kling）
- [ ] 模型配置 CRUD API
  - [ ] `GET /models/config` — 获取项目模型配置
  - [ ] `PUT /models/config` — 更新模型配置
  - [ ] `GET /models/available` — 可用模型列表

### 设计文档同步更新

- [ ] doc 02 更新：风格数量从 6 种改为 9+ 种
- [ ] doc 07 补充：子账号管理 API、模型配置 CRUD API、充值/购买 API、资产批量操作 API
- [ ] doc 09 调整：购买页提前（原型已实现，原计划 M7）
- [ ] doc 11 更新：里程碑时间线根据实际进度调整

### 未来版本（v2+）

- [ ] 第三方登录（Sa-Token-OAuth2: Google/GitHub/微信/钉钉）
- [ ] 密码重置（邮件发送）
- [ ] 口型同步（LipSync，Pro 功能）
- [ ] 移动端 App（React Native）
- [ ] 实时协作编辑分镜（CRDT / Yjs + WebSocket）
- [ ] 模型市场（用户上传 LoRA）
- [ ] 资产市场（付费分享角色/场景）
- [ ] 多语言配音（英日韩）
- [ ] 导出到剪映/PR 的 XML 工程
- [ ] 开放 API（面向第三方开发者）
- [ ] GDPR 数据导出/删除

---

## 进度统计

| 阶段 | 总任务数 | 已完成 | 进度 |
|------|---------|--------|------|
| M0 · 基建 | 30 | 0 | 0% |
| M1 · 认证与项目 | 30 | 0 | 0% |
| M2 · 剧本解析 | 45 | 0 | 0% |
| M3 · 资产生成 | 28 | 0 | 0% |
| M4 · 分镜工作台 | 35 | 0 | 0% |
| M5 · 视觉生成 | 22 | 0 | 0% |
| M6 · 合成与导出 | 18 | 0 | 0% |
| M7 · 计费与 SaaS | 28 | 0 | 0% |
| M8 · 团队协作 | 30 | 0 | 0% |
| M9 · 上线优化 | 28 | 0 | 0% |
| 补充任务 | 8 | 0 | 0% |
| **总计** | **~302** | **0** | **0%** |
