# 混剪场景编排功能重新设计 - 任务清单 ## 任务列表 ### 阶段一:需求分析与设计 #### 任务 1.1:需求确认 - [x] 确认用户对多候选场景模式的具体需求 - [x] 明确每个场景的默认候选数量和最大限制(1-10个) - [x] 确认两层随机选择算法: - 第一层:从每个场景的候选中随机选择一个素材 - 第二层:对选中的素材使用随机起点 - [x] 确认随机选择算法要求(确定性随机,基于场景索引) #### 任务 1.2:数据结构设计 - [x] 设计前端场景数据结构:`{index: [{fileId, duration, candidates, fileUrl, fileDuration}]}` - [x] 设计后端 API 数据结构:`List` - [x] 定义防重复验证规则(同一场景内不重复) #### 任务 1.3:API 接口设计 - [x] 设计新的创建混剪任务 API(支持scenes格式) - [x] 定义场景配置数据结构(SceneConfig内部类) - [x] 确认向后兼容性(保留materials字段) ### 阶段二:前端实现 #### 任务 2.1:Mix.vue 组件重构 - [x] **修改场景数据结构**: - 将 `scenes` 从 `Array<{fileId, fileUrl}>` 改为 `Array<{index, duration, candidates: Array}>` - 更新场景初始化逻辑 - 修改场景数组监听器(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.3:UI/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.1:API 对象修改 - [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.1(API 对象修改)可以并行进行 - 任务 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 天 | 发布说明、部署完成 |