diff --git a/music-houduan/src/main/java/com/test/musichouduan/controller/HotMusicController.java b/music-houduan/src/main/java/com/test/musichouduan/controller/HotMusicController.java index 0cfdf6f..04d80f9 100644 --- a/music-houduan/src/main/java/com/test/musichouduan/controller/HotMusicController.java +++ b/music-houduan/src/main/java/com/test/musichouduan/controller/HotMusicController.java @@ -49,6 +49,7 @@ public class HotMusicController { * 主要用于测试或紧急情况。 * @return 响应结果 */ + @SaIgnore @GetMapping("/refresh-cache") public Result refreshHotMusicCache() { // 异步执行,立即返回,不阻塞当前请求 diff --git a/music-houduan/src/main/java/com/test/musichouduan/dto/MusicDTO.java b/music-houduan/src/main/java/com/test/musichouduan/dto/MusicDTO.java index 616f9b6..dc2c534 100644 --- a/music-houduan/src/main/java/com/test/musichouduan/dto/MusicDTO.java +++ b/music-houduan/src/main/java/com/test/musichouduan/dto/MusicDTO.java @@ -71,6 +71,11 @@ public class MusicDTO { */ private String singer; + /** + * 歌手头像 + */ + private String singerAvatar; + /** * 音乐类型列表 */ diff --git a/music-houduan/src/main/java/com/test/musichouduan/repository/MusicRepository.java b/music-houduan/src/main/java/com/test/musichouduan/repository/MusicRepository.java index 835e73a..be68b15 100644 --- a/music-houduan/src/main/java/com/test/musichouduan/repository/MusicRepository.java +++ b/music-houduan/src/main/java/com/test/musichouduan/repository/MusicRepository.java @@ -113,4 +113,12 @@ public interface MusicRepository extends JpaRepository, JpaSpecific */ @Query("SELECT t.name, COUNT(m) FROM Music m JOIN m.types t GROUP BY t.name ORDER BY COUNT(m) DESC") List countByMusicType(); + + /** + * 查询所有音乐,并立即加载关联的歌手信息 + * + * @return 音乐列表 + */ + @Query("SELECT DISTINCT m FROM Music m LEFT JOIN FETCH m.singers") + List findAllWithSingers(); } diff --git a/music-houduan/src/main/java/com/test/musichouduan/service/impl/FileServiceImpl.java b/music-houduan/src/main/java/com/test/musichouduan/service/impl/FileServiceImpl.java index e9dcf89..3a31639 100644 --- a/music-houduan/src/main/java/com/test/musichouduan/service/impl/FileServiceImpl.java +++ b/music-houduan/src/main/java/com/test/musichouduan/service/impl/FileServiceImpl.java @@ -95,7 +95,7 @@ public class FileServiceImpl implements FileService { int duration = audioFile.getAudioHeader().getTrackLength(); return duration; } catch (Exception e) { - logger.error("获取音乐时长失败", e); + logger.error("获取音乐 '{}' 时长失败", file.getOriginalFilename(), e); return 0; } finally { if (tempFile != null) { diff --git a/music-houduan/src/main/java/com/test/musichouduan/service/impl/MusicServiceImpl.java b/music-houduan/src/main/java/com/test/musichouduan/service/impl/MusicServiceImpl.java index ae3ebcd..7043b13 100644 --- a/music-houduan/src/main/java/com/test/musichouduan/service/impl/MusicServiceImpl.java +++ b/music-houduan/src/main/java/com/test/musichouduan/service/impl/MusicServiceImpl.java @@ -240,18 +240,8 @@ public class MusicServiceImpl implements MusicService { @Transactional(readOnly = true) // 使用只读事务,提高查询性能 @Override public CompletableFuture> updateHotMusicCache() { - // 为了处理大数据量,我们使用分页查询来代替一次性加载所有数据 - List allMusic = new ArrayList<>(); - Page musicPage; - int pageNum = 0; - int pageSize = 500; // 每次查询500条 - - do { - Pageable pageable = PageRequest.of(pageNum, pageSize); - musicPage = musicRepository.findAll(pageable); - allMusic.addAll(musicPage.getContent()); - pageNum++; - } while (musicPage.hasNext()); + // 使用 JOIN FETCH 一次性加载所有音乐及其关联的歌手信息 + List allMusic = musicRepository.findAllWithSingers(); // 使用并行流来加速计算过程 allMusic.parallelStream().forEach(music -> { @@ -659,6 +649,11 @@ public class MusicServiceImpl implements MusicService { List singerNames = music.getSingers().stream().map(Singer::getName).collect(Collectors.toList()); musicDTO.setSingerNames(singerNames); musicDTO.setSinger(String.join("、", singerNames)); + + // 设置歌手头像 + if (music.getSingers().size() == 1) { + musicDTO.setSingerAvatar(music.getSingers().iterator().next().getAvatar()); + } } // 如果传入了用户ID,则查询该用户的收藏和点赞状态 diff --git a/music-qianduan/src/api/music.js b/music-qianduan/src/api/music.js index 69569cc..3c0745d 100644 --- a/music-qianduan/src/api/music.js +++ b/music-qianduan/src/api/music.js @@ -73,7 +73,19 @@ export function getHotMusic(limit = 10) { // 更新:调用新的热门音乐接口 return api.get('/hot-music/list', { params: { limit } - }) + }).then(res => { + if (res.code === 200 && res.data && Array.isArray(res.data)) { + res.data.forEach(item => { + if (item.cover) { + item.cover = processMusicUrl(item.cover); + } + if (item.singerAvatar) { + item.singerAvatar = processMusicUrl(item.singerAvatar); + } + }); + } + return res; + }); } /** diff --git a/music-qianduan/src/views/MusicDetail.vue b/music-qianduan/src/views/MusicDetail.vue index dbb4dc1..2ef7f1d 100644 --- a/music-qianduan/src/views/MusicDetail.vue +++ b/music-qianduan/src/views/MusicDetail.vue @@ -170,7 +170,7 @@