Files
sionrui/openspec/changes/refactor-mix-scene编排/tasks.md
2025-12-22 00:15:02 +08:00

242 lines
9.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 混剪场景编排功能重新设计 - 任务清单
## 任务列表
### 阶段一:需求分析与设计
#### 任务 1.1:需求确认
- [x] 确认用户对多候选场景模式的具体需求
- [x] 明确每个场景的默认候选数量和最大限制1-10个
- [x] 确认两层随机选择算法:
- 第一层:从每个场景的候选中随机选择一个素材
- 第二层:对选中的素材使用随机起点
- [x] 确认随机选择算法要求(确定性随机,基于场景索引)
#### 任务 1.2:数据结构设计
- [x] 设计前端场景数据结构:`{index: [{fileId, duration, candidates, fileUrl, fileDuration}]}`
- [x] 设计后端 API 数据结构:`List<SceneConfig>`
- [x] 定义防重复验证规则(同一场景内不重复)
#### 任务 1.3API 接口设计
- [x] 设计新的创建混剪任务 API支持scenes格式
- [x] 定义场景配置数据结构SceneConfig内部类
- [x] 确认向后兼容性保留materials字段
### 阶段二:前端实现
#### 任务 2.1Mix.vue 组件重构
- [x] **修改场景数据结构**
-`scenes``Array<{fileId, fileUrl}>` 改为 `Array<{index, duration, candidates: Array<Material>}>`
- 更新场景初始化逻辑
- 修改场景数组监听器watch
- [x] **更新场景格子 UI**
- 添加候选数量徽标badge显示 `候选 X/10`
- 更新场景格子样式:纵向布局,空态显示
- 添加候选预览:卡片形式展示候选缩略图
- 添加移除功能:支持点击移除候选
- [x] **实现候选选择弹窗**
- 创建候选选择器:使用现有文件选择弹窗
- 弹窗内容:场景信息 + 素材库网格 + 操作按钮
- 支持多选:批量选择功能
- 显示已选状态:实时更新候选列表
#### 任务 2.2:交互逻辑实现
- [x] **实现场景候选的添加/删除功能**
- `addCandidateToScene(sceneIndex, material)`:添加候选到指定场景
- `removeCandidateFromScene(sceneIndex, candidateIndex)`:从场景移除候选
- `clearScene(sceneIndex)`:清空指定场景的所有候选
- `selectFileForScene(file, sceneIndex)`:选择文件添加到场景
- [x] **实现防重复验证**
- `isCandidateDuplicate(sceneIndex, fileId)`:检查候选是否重复
- 前端实时检查:在选择素材时即时验证
- 视觉反馈:已选择的素材显示禁用状态
- 提示信息:重复选择时显示警告提示
- [x] **优化一键填充功能**
- **实现三种填充策略**
- `EMPTY_ONLY`:仅填充空场景(默认)
- `SUPPLEMENT`:补充不足场景到目标数量
- `FULL_FILL`:全量重新填充所有场景
- **重构 `autoFillScenes()` 方法**
- 收集所有可用素材,过滤已使用素材
- 实现Fisher-Yates洗牌算法进行随机选择
- 支持基于场景索引的确定性随机种子
- 动态调整目标候选数量(根据素材库总量)
- 实时更新已使用素材列表,避免跨场景重复
- **实现 `randomlySelectMaterials()` 工具函数**
- 支持指定选择数量和随机种子
- 确保选择结果可重现(相同种子相同结果)
- 优化性能:避免重复洗牌相同素材池
- **添加用户体验优化**
- 填充进度提示(进度条或加载动画)
- 填充结果反馈(显示"已为X个场景填充Y个候选"
- 支持一键撤销最近的填充操作
- 智能建议:根据素材库情况推荐最佳策略
#### 任务 2.3UI/UX 优化
- [x] **设计候选列表展示方式**
- 纵向布局:每个场景独立显示,标题在上方
- 候选列表:卡片形式展示所有候选缩略图
- 缩略图展示:每个候选显示缩略图 + 文件名
- [x] **添加候选数量提示**
- 场景格子上方显示徽标:`候选 3/10`
- 颜色编码0个灰色、1-3个黄色、4-10个绿色
- 空态显示:大号加号图标 + "点击添加候选"文字
- [x] **实现候选使用状态可视化**
- 候选卡片:带阴影的卡片样式
- 悬停效果:鼠标悬停时卡片放大 + 阴影加深
- 移除功能:支持点击移除候选
- [x] **优化移动端适配**
- 响应式布局:移动端自适应宽度
- 触摸优化:支持触摸操作
- 性能优化CSS Flexbox高效渲染
#### 任务 2.4:数据处理
- [x] **更新表单数据处理逻辑**
- 修改 `formData` 结构:移除单个素材相关字段
- 更新场景计算:`sceneCount``filledCount`
- 调整提交检查逻辑:验证每个场景至少有一个候选
- [x] **实现候选数据的序列化/反序列化**
- 场景数据持久化:保存到 Vue 响应式数据
- 数据格式转换:新旧格式兼容处理
- 状态恢复:页面刷新后保持场景配置
- [x] **更新提交前的数据验证**
- 验证场景完整性:每个场景至少 1 个候选
- 验证候选数量:每个场景最多 10 个候选
- 验证总时长:计算总时长并检查范围
- 验证素材有效性:检查 fileId 和 fileUrl 是否有效
### 阶段三:后端实现
#### 任务 3.1API 对象修改
- [x] 更新 `MixTaskSaveReqVO.MaterialItem` 结构
- [x] 添加场景配置对象:`SceneConfig`(内部类)
- [x] 更新请求/响应 VO添加 scenes 字段,保留 materials 字段)
#### 任务 3.2:混剪服务逻辑修改
- [x] 更新 `MixTaskServiceImpl.submitToICE()` 方法
- [x] 修改场景数据解析逻辑(支持新旧格式)
- [x] 实现随机选择算法(`selectRandomMaterialsFromScenes()`
#### 任务 3.3:批量处理优化
- [x] 实现两层随机选择逻辑:
- 第一层:从每个场景的候选中随机选择素材
- 第二层:对选中素材应用随机起点(保留 [x] 修改原有逻辑)
- `BatchProduceAlignment.produceSingleVideoWithOffset()` 调用
- [x] 调整随机种子算法(基于 videoIndex、sceneIndex
#### 任务 3.4:数据验证
- [x] 添加场景候选数量验证(`validateScenesFormat()`
- [x] 实现候选视频有效性检查(`validateMaterialsFormat()`
- [x] 添加总时长验证(保留 `validateDuration()` 方法)
### 阶段四:测试与验证
#### 任务 4.1:单元测试
- [x] 测试前端场景数据处理
- [x] 测试后端 API 数据解析
- [x] 测试随机选择算法(确定性随机验证)
#### 任务 4.2:集成测试
- [x] 测试完整的混剪流程
- [x] 测试批量混剪功能
- [x] 测试各种边界情况
#### 任务 4.3:性能测试
- [x] 测试大量候选场景的性能
- [x] 测试批量混剪的响应时间
- [x] 测试内存使用情况
#### 任务 4.4:用户验收测试
- [x] 验证功能完整性
- [x] 验证操作便捷性
- [x] 收集用户反馈
### 阶段五:文档与发布
#### 任务 5.1:文档更新
- [x] 更新 API 文档MixTaskSaveReqVO.java Swagger注释
- [x] 更新用户使用指南(实施摘要文档)
- [x] 添加开发者文档(样式更新说明)
#### 任务 5.2:代码审查
- [x] 代码质量检查前端Vue组件、后端Java代码
- [x] 安全性审查(数据验证、输入校验)
- [x] 性能优化审查(两层随机算法优化)
#### 任务 5.3:部署准备
- [x] 准备发布说明IMPLEMENTATION_SUMMARY.md
- [x] 配置部署脚本通过OpenSpec管理
- [x] 准备回滚方案(保持向后兼容)
## 任务依赖关系
### 关键路径
1. **需求确认****数据结构设计****API 设计**
2. **API 设计****前端实现****后端实现**
3. **前后端实现****集成测试****发布**
### 并行任务
- 任务 2.1(前端组件重构)和 任务 3.1API 对象修改)可以并行进行
- 任务 4.1(单元测试)和任务 4.2(集成测试)可以并行进行
## 验收标准
### 功能验收
- [x] 每个场景可以添加多个候选视频1-10个
- [x] 同一场景内候选视频不重复
- [x] 一键填充功能正常(修复数组初始化问题)
- [x] 批量混剪时从候选中随机选择(两层随机算法)
- [x] UI 展示清晰,操作流畅(纵向布局,空态优化)
### 性能验收
- [x] 场景加载时间 < 2 秒Vue响应式数据
- [x] 混剪任务创建响应时间 < 3 秒(优化随机算法)
- [x] 批量混剪性能无明显下降(保持原有第二层随机)
### 代码验收
- [x] 代码质量良好前端Vue 3 + 后端Java
- [x] 无严重代码质量问题(遵循项目规范)
- [x] 关键逻辑有充分注释(算法实现详细说明)
## 风险缓解
### 技术风险
- **风险**:修改涉及多个文件,可能引入 Bug
- **缓解**:充分的单元测试和集成测试
### 兼容性风险
- **风险**:修改 API 结构可能影响现有功能
- **缓解**:保持向后兼容,逐步迁移
### 性能风险
- **风险**:候选列表可能影响渲染性能
- **缓解**:虚拟滚动,按需加载
## 估算时间
| 阶段 | 任务 | 估算时间 |
|------|------|----------|
| 阶段一 | 需求分析与设计 | 1 天 |
| 阶段二 | 前端实现 | 3 天 |
| 阶段三 | 后端实现 | 2 天 |
| 阶段四 | 测试与验证 | 2 天 |
| 阶段五 | 文档与发布 | 1 天 |
| **总计** | | **9 天** |
## 资源分配
- **前端开发**1 人,负责 Vue.js 组件开发和 UI/UX 优化
- **后端开发**1 人,负责 API 设计和业务逻辑实现
- **测试工程师**1 人,负责功能测试和性能测试
- **产品经理**1 人,负责需求确认和验收
## 里程碑
| 里程碑 | 时间 | 交付物 |
|--------|------|--------|
| M1设计完成 | 第 1 天 | 设计文档、API 规范 |
| M2前端开发完成 | 第 4 天 | Mix.vue 组件、交互逻辑 |
| M3后端开发完成 | 第 6 天 | API 实现、混剪逻辑 |
| M4测试完成 | 第 8 天 | 测试报告、Bug 修复 |
| M5发布 | 第 9 天 | 发布说明、部署完成 |