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

9.8 KiB
Raw Blame History

混剪场景编排功能重新设计 - 任务清单

任务列表

阶段一:需求分析与设计

任务 1.1:需求确认

  • 确认用户对多候选场景模式的具体需求
  • 明确每个场景的默认候选数量和最大限制1-10个
  • 确认两层随机选择算法:
    • 第一层:从每个场景的候选中随机选择一个素材
    • 第二层:对选中的素材使用随机起点
  • 确认随机选择算法要求(确定性随机,基于场景索引)

任务 1.2:数据结构设计

  • 设计前端场景数据结构:{index: [{fileId, duration, candidates, fileUrl, fileDuration}]}
  • 设计后端 API 数据结构:List<SceneConfig>
  • 定义防重复验证规则(同一场景内不重复)

任务 1.3API 接口设计

  • 设计新的创建混剪任务 API支持scenes格式
  • 定义场景配置数据结构SceneConfig内部类
  • 确认向后兼容性保留materials字段

阶段二:前端实现

任务 2.1Mix.vue 组件重构

  • 修改场景数据结构
    • scenesArray<{fileId, fileUrl}> 改为 Array<{index, duration, candidates: Array<Material>}>
    • 更新场景初始化逻辑
    • 修改场景数组监听器watch
  • 更新场景格子 UI
    • 添加候选数量徽标badge显示 候选 X/10
    • 更新场景格子样式:纵向布局,空态显示
    • 添加候选预览:卡片形式展示候选缩略图
    • 添加移除功能:支持点击移除候选
  • 实现候选选择弹窗
    • 创建候选选择器:使用现有文件选择弹窗
    • 弹窗内容:场景信息 + 素材库网格 + 操作按钮
    • 支持多选:批量选择功能
    • 显示已选状态:实时更新候选列表

任务 2.2:交互逻辑实现

  • 实现场景候选的添加/删除功能
    • addCandidateToScene(sceneIndex, material):添加候选到指定场景
    • removeCandidateFromScene(sceneIndex, candidateIndex):从场景移除候选
    • clearScene(sceneIndex):清空指定场景的所有候选
    • selectFileForScene(file, sceneIndex):选择文件添加到场景
  • 实现防重复验证
    • isCandidateDuplicate(sceneIndex, fileId):检查候选是否重复
    • 前端实时检查:在选择素材时即时验证
    • 视觉反馈:已选择的素材显示禁用状态
    • 提示信息:重复选择时显示警告提示
  • 优化一键填充功能
    • 实现三种填充策略
      • EMPTY_ONLY:仅填充空场景(默认)
      • SUPPLEMENT:补充不足场景到目标数量
      • FULL_FILL:全量重新填充所有场景
    • 重构 autoFillScenes() 方法
      • 收集所有可用素材,过滤已使用素材
      • 实现Fisher-Yates洗牌算法进行随机选择
      • 支持基于场景索引的确定性随机种子
      • 动态调整目标候选数量(根据素材库总量)
      • 实时更新已使用素材列表,避免跨场景重复
    • 实现 randomlySelectMaterials() 工具函数
      • 支持指定选择数量和随机种子
      • 确保选择结果可重现(相同种子相同结果)
      • 优化性能:避免重复洗牌相同素材池
    • 添加用户体验优化
      • 填充进度提示(进度条或加载动画)
      • 填充结果反馈(显示"已为X个场景填充Y个候选"
      • 支持一键撤销最近的填充操作
      • 智能建议:根据素材库情况推荐最佳策略

任务 2.3UI/UX 优化

  • 设计候选列表展示方式
    • 纵向布局:每个场景独立显示,标题在上方
    • 候选列表:卡片形式展示所有候选缩略图
    • 缩略图展示:每个候选显示缩略图 + 文件名
  • 添加候选数量提示
    • 场景格子上方显示徽标:候选 3/10
    • 颜色编码0个灰色、1-3个黄色、4-10个绿色
    • 空态显示:大号加号图标 + "点击添加候选"文字
  • 实现候选使用状态可视化
    • 候选卡片:带阴影的卡片样式
    • 悬停效果:鼠标悬停时卡片放大 + 阴影加深
    • 移除功能:支持点击移除候选
  • 优化移动端适配
    • 响应式布局:移动端自适应宽度
    • 触摸优化:支持触摸操作
    • 性能优化CSS Flexbox高效渲染

任务 2.4:数据处理

  • 更新表单数据处理逻辑
    • 修改 formData 结构:移除单个素材相关字段
    • 更新场景计算:sceneCountfilledCount
    • 调整提交检查逻辑:验证每个场景至少有一个候选
  • 实现候选数据的序列化/反序列化
    • 场景数据持久化:保存到 Vue 响应式数据
    • 数据格式转换:新旧格式兼容处理
    • 状态恢复:页面刷新后保持场景配置
  • 更新提交前的数据验证
    • 验证场景完整性:每个场景至少 1 个候选
    • 验证候选数量:每个场景最多 10 个候选
    • 验证总时长:计算总时长并检查范围
    • 验证素材有效性:检查 fileId 和 fileUrl 是否有效

阶段三:后端实现

任务 3.1API 对象修改

  • 更新 MixTaskSaveReqVO.MaterialItem 结构
  • 添加场景配置对象:SceneConfig(内部类)
  • 更新请求/响应 VO添加 scenes 字段,保留 materials 字段)

任务 3.2:混剪服务逻辑修改

  • 更新 MixTaskServiceImpl.submitToICE() 方法
  • 修改场景数据解析逻辑(支持新旧格式)
  • 实现随机选择算法(selectRandomMaterialsFromScenes()

任务 3.3:批量处理优化

  • 实现两层随机选择逻辑:
    • 第一层:从每个场景的候选中随机选择素材
    • 第二层:对选中素材应用随机起点(保留 [x] 修改原有逻辑)
  • BatchProduceAlignment.produceSingleVideoWithOffset() 调用
  • 调整随机种子算法(基于 videoIndex、sceneIndex

任务 3.4:数据验证

  • 添加场景候选数量验证(validateScenesFormat()
  • 实现候选视频有效性检查(validateMaterialsFormat()
  • 添加总时长验证(保留 validateDuration() 方法)

阶段四:测试与验证

任务 4.1:单元测试

  • 测试前端场景数据处理
  • 测试后端 API 数据解析
  • 测试随机选择算法(确定性随机验证)

任务 4.2:集成测试

  • 测试完整的混剪流程
  • 测试批量混剪功能
  • 测试各种边界情况

任务 4.3:性能测试

  • 测试大量候选场景的性能
  • 测试批量混剪的响应时间
  • 测试内存使用情况

任务 4.4:用户验收测试

  • 验证功能完整性
  • 验证操作便捷性
  • 收集用户反馈

阶段五:文档与发布

任务 5.1:文档更新

  • 更新 API 文档MixTaskSaveReqVO.java Swagger注释
  • 更新用户使用指南(实施摘要文档)
  • 添加开发者文档(样式更新说明)

任务 5.2:代码审查

  • 代码质量检查前端Vue组件、后端Java代码
  • 安全性审查(数据验证、输入校验)
  • 性能优化审查(两层随机算法优化)

任务 5.3:部署准备

  • 准备发布说明IMPLEMENTATION_SUMMARY.md
  • 配置部署脚本通过OpenSpec管理
  • 准备回滚方案(保持向后兼容)

任务依赖关系

关键路径

  1. 需求确认数据结构设计API 设计
  2. API 设计前端实现后端实现
  3. 前后端实现集成测试发布

并行任务

  • 任务 2.1(前端组件重构)和 任务 3.1API 对象修改)可以并行进行
  • 任务 4.1(单元测试)和任务 4.2(集成测试)可以并行进行

验收标准

功能验收

  • 每个场景可以添加多个候选视频1-10个
  • 同一场景内候选视频不重复
  • 一键填充功能正常(修复数组初始化问题)
  • 批量混剪时从候选中随机选择(两层随机算法)
  • UI 展示清晰,操作流畅(纵向布局,空态优化)

性能验收

  • 场景加载时间 < 2 秒Vue响应式数据
  • 混剪任务创建响应时间 < 3 秒(优化随机算法)
  • 批量混剪性能无明显下降(保持原有第二层随机)

代码验收

  • 代码质量良好前端Vue 3 + 后端Java
  • 无严重代码质量问题(遵循项目规范)
  • 关键逻辑有充分注释(算法实现详细说明)

风险缓解

技术风险

  • 风险:修改涉及多个文件,可能引入 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 天 发布说明、部署完成