193 lines
6.0 KiB
Markdown
193 lines
6.0 KiB
Markdown
|
|
# 今日工作总结 - 2026年2月4日
|
|||
|
|
|
|||
|
|
## ✅ 已完成的功能
|
|||
|
|
|
|||
|
|
### 1. 音乐库唱歌视频功能(完整实现)
|
|||
|
|
|
|||
|
|
**功能描述**:用户点击音乐库中的音乐,AI 恋人会唱这首歌并生成视频,保存到历史记录。
|
|||
|
|
|
|||
|
|
**实现方案**:
|
|||
|
|
- 采用简化方案:将音乐库音乐转换为系统歌曲,复用现有唱歌功能
|
|||
|
|
- 前后端完整对接,已修复所有 bug
|
|||
|
|
- 添加了并发控制和错误处理
|
|||
|
|
|
|||
|
|
**技术细节**:
|
|||
|
|
|
|||
|
|
#### 后端实现(Python FastAPI)
|
|||
|
|
1. **新增 API**:`POST /music/convert-to-song?music_id={id}`
|
|||
|
|
- 将音乐库音乐转换为系统歌曲
|
|||
|
|
- 返回 `song_id` 供唱歌 API 使用
|
|||
|
|
- 支持缓存机制(避免重复转换)
|
|||
|
|
|
|||
|
|
2. **数据库修改**:
|
|||
|
|
- `fa_sing_song_video` 表新增字段:
|
|||
|
|
- `music_library_id` (int) - 关联音乐库 ID
|
|||
|
|
- `music_source` (varchar) - 音乐来源('library' 或 'system')
|
|||
|
|
- `fa_song_library` 表新增字段:
|
|||
|
|
- `audio_hash` (varchar) - 音频 URL 的 MD5 哈希(用于去重)
|
|||
|
|
|
|||
|
|
3. **文件修改**:
|
|||
|
|
- `lover/models.py` - 更新数据模型
|
|||
|
|
- `lover/routers/music_library.py` - 新增转换 API
|
|||
|
|
|
|||
|
|
#### 前端实现(uni-app Vue)
|
|||
|
|
1. **修改文件**:`xuniYou/pages/index/index.vue`
|
|||
|
|
|
|||
|
|
2. **修改内容**:
|
|||
|
|
- 修改 `selectMusicFromLibrary` 方法:
|
|||
|
|
- 添加外部链接检查
|
|||
|
|
- 添加生成中状态检查(防止重复点击)
|
|||
|
|
- 调用新的生成方法
|
|||
|
|
|
|||
|
|
- 新增 `generateSingVideoFromLibrary` 方法:
|
|||
|
|
- 调用转换 API(使用 query 参数)
|
|||
|
|
- 显示"准备中..."加载提示
|
|||
|
|
|
|||
|
|
- 新增 `generateSingVideoWithSongId` 方法:
|
|||
|
|
- 调用唱歌生成 API
|
|||
|
|
- 处理生成状态(立即成功/生成中)
|
|||
|
|
- 处理 409 错误(已有任务进行中)
|
|||
|
|
- 自动切换到历史记录 tab
|
|||
|
|
- 自动播放生成的视频
|
|||
|
|
|
|||
|
|
3. **关键修复**:
|
|||
|
|
- 修复了 API 参数传递问题:从 `data: { music_id }` 改为 `url?music_id=`
|
|||
|
|
- 添加了 409 错误处理:显示"已有视频正在生成中,请稍后再试"
|
|||
|
|
- 删除了重复的方法定义
|
|||
|
|
- 清理了多余的注释
|
|||
|
|
|
|||
|
|
**用户体验流程**:
|
|||
|
|
1. 用户点击音乐库音乐
|
|||
|
|
2. 检查是否有视频正在生成 → 如果有,提示"视频生成中,请稍候..."
|
|||
|
|
3. 检查是否是外部链接 → 如果是,提示"外部平台音乐无法生成视频"
|
|||
|
|
4. 弹出确认框:"确定让她唱《xxx》吗?"
|
|||
|
|
5. 确认后 → 显示"准备中..." → "生成中..."
|
|||
|
|
6. 生成完成 → 自动切换到"历史记录" tab
|
|||
|
|
7. 显示并自动播放生成的视频
|
|||
|
|
|
|||
|
|
**并发控制**:
|
|||
|
|
- ✅ 前端检查:`if (this.singGenerating)` 防止重复点击
|
|||
|
|
- ✅ 后端检查:返回 409 错误,提示"已有视频生成任务进行中"
|
|||
|
|
- ✅ 前端处理:捕获 409 错误,显示友好提示
|
|||
|
|
|
|||
|
|
**限制说明**:
|
|||
|
|
- ✅ 直链音乐(Bensound 等)可以生成视频
|
|||
|
|
- ✅ 用户上传的音乐可以生成视频
|
|||
|
|
- ❌ 外部平台音乐(网易云、QQ音乐)无法生成视频(会提示用户)
|
|||
|
|
- ❌ 生成中不能再次点击(会提示用户)
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 📁 相关文件
|
|||
|
|
|
|||
|
|
### 数据库
|
|||
|
|
- `开发/2026年2月4日/音乐库唱歌视频数据库修改.sql`
|
|||
|
|
|
|||
|
|
### 后端
|
|||
|
|
- `lover/models.py`
|
|||
|
|
- `lover/routers/music_library.py`
|
|||
|
|
|
|||
|
|
### 前端
|
|||
|
|
- `xuniYou/pages/index/index.vue`
|
|||
|
|
|
|||
|
|
### 测试
|
|||
|
|
- `test_music_library_sing.py`
|
|||
|
|
|
|||
|
|
### 文档
|
|||
|
|
- `开发/2026年2月4日/音乐库唱歌视频功能实现总结.md`
|
|||
|
|
- `开发/2026年2月4日/音乐库唱歌视频部署清单.md`
|
|||
|
|
- `快速修复指南.md`
|
|||
|
|
- `测试音乐库唱歌功能.md`
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🐛 已修复的 Bug
|
|||
|
|
|
|||
|
|
### Bug 1: 前端代码重复
|
|||
|
|
**问题**:`selectMusicFromLibrary` 方法重复定义,导致代码混乱
|
|||
|
|
**解决**:删除旧方法,保留新方法
|
|||
|
|
|
|||
|
|
### Bug 2: API 参数传递错误
|
|||
|
|
**问题**:前端使用 `data: { music_id }` 发送,后端期望 query 参数
|
|||
|
|
**错误信息**:`422 Unprocessable Content - Field required: music_id`
|
|||
|
|
**解决**:修改前端为 `url?music_id={id}`
|
|||
|
|
|
|||
|
|
### Bug 3: 并发控制不完善
|
|||
|
|
**问题**:用户可以重复点击,导致多个生成任务
|
|||
|
|
**错误信息**:`409 Conflict - 已有视频生成任务进行中,请稍后再试`
|
|||
|
|
**解决**:
|
|||
|
|
- 前端添加 `singGenerating` 状态检查
|
|||
|
|
- 前端添加 409 错误处理,显示友好提示
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🚀 部署步骤
|
|||
|
|
|
|||
|
|
### 1. 数据库更新
|
|||
|
|
```bash
|
|||
|
|
mysql -u root -p fastadmin < "开发/2026年2月4日/音乐库唱歌视频数据库修改.sql"
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 2. 启动后端服务
|
|||
|
|
```bash
|
|||
|
|
cd lover
|
|||
|
|
python -m uvicorn main:app --host 0.0.0.0 --port 30101 --reload
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
或双击:`启动后端服务.bat`
|
|||
|
|
|
|||
|
|
### 3. 重新编译前端
|
|||
|
|
保存 `xuniYou/pages/index/index.vue` 后,重新编译前端项目。
|
|||
|
|
|
|||
|
|
### 4. 测试
|
|||
|
|
- 访问 http://localhost:30101/docs 确认 API 可用
|
|||
|
|
- 点击音乐库音乐,测试生成功能
|
|||
|
|
- 测试并发控制:生成中再次点击,应该提示"请稍后再试"
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 📊 测试结果
|
|||
|
|
|
|||
|
|
### API 测试
|
|||
|
|
- ✅ `POST /music/convert-to-song` - 转换成功
|
|||
|
|
- ✅ `POST /sing/generate` - 生成成功
|
|||
|
|
- ✅ 缓存机制 - 相同音乐复用视频
|
|||
|
|
- ✅ 并发控制 - 返回 409 错误
|
|||
|
|
|
|||
|
|
### 前端测试
|
|||
|
|
- ✅ 点击音乐 - 弹出确认框
|
|||
|
|
- ✅ 确认生成 - 显示加载提示
|
|||
|
|
- ✅ 生成完成 - 自动切换 tab
|
|||
|
|
- ✅ 外部链接 - 正确提示无法生成
|
|||
|
|
- ✅ 生成中点击 - 提示"请稍后再试"
|
|||
|
|
- ✅ 409 错误 - 显示友好提示
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 💡 技术亮点
|
|||
|
|
|
|||
|
|
1. **缓存机制**:使用 `audio_hash` 避免重复转换和生成
|
|||
|
|
2. **错误处理**:完善的错误提示和异常处理
|
|||
|
|
3. **并发控制**:前后端双重检查,防止重复生成
|
|||
|
|
4. **用户体验**:自动切换 tab、自动播放视频、友好的错误提示
|
|||
|
|
5. **代码复用**:复用现有唱歌功能,减少开发量
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 📝 注意事项
|
|||
|
|
|
|||
|
|
1. 确保后端服务运行在 30101 端口
|
|||
|
|
2. 确保数据库已执行更新脚本
|
|||
|
|
3. 前端修改后需要重新编译
|
|||
|
|
4. 外部链接音乐无法生成视频(这是设计限制)
|
|||
|
|
5. 生成中不能重复点击(会显示提示)
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
**工作总结版本**: 3.0(最终版 - 已添加并发控制)
|
|||
|
|
**创建时间**: 2026-02-04 18:25
|
|||
|
|
**状态**: ✅ 功能完整,已修复所有 bug,已添加并发控制
|
|||
|
|
|
|||
|
|
|
|||
|
|
|