feat: 优化功能

This commit is contained in:
2025-12-22 00:15:02 +08:00
parent b80de78d7c
commit 8d7bc0d47f
12 changed files with 2513 additions and 595 deletions

View File

@@ -0,0 +1,241 @@
# 混剪场景编排功能重新设计 - 任务清单
## 任务列表
### 阶段一:需求分析与设计
#### 任务 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 天 | 发布说明、部署完成 |