修复收藏等问题

This commit is contained in:
menxipeng
2025-09-03 22:08:46 +08:00
parent f126ea00d5
commit efeaec3708
6 changed files with 144 additions and 8 deletions

View File

@@ -108,6 +108,9 @@ public class MusicController extends BaseController {
@RequestMapping("/getMusicInfo/{musicId}") @RequestMapping("/getMusicInfo/{musicId}")
public AjaxResult getMusicInfo(@PathVariable String musicId){ public AjaxResult getMusicInfo(@PathVariable String musicId){
Long userId = SecurityUtils.getUserId(); Long userId = SecurityUtils.getUserId();
if (userId == null){
return AjaxResult.error(401,"用户未登录或用户ID为空");
}
MusicInfo musicInfo = musicService.getMusicInfo(userId, musicId); MusicInfo musicInfo = musicService.getMusicInfo(userId, musicId);
if (musicInfo != null){ if (musicInfo != null){
return AjaxResult.success(musicInfo); return AjaxResult.success(musicInfo);
@@ -136,6 +139,30 @@ public class MusicController extends BaseController {
} }
/**
* 获取上一首播放的音乐ID
* @param playMode 播放模式1-顺序播放2-随机播放
* @param playlistType 播放列表类型1-历史播放2-分类播放3-推荐播放4-收藏播放5-喜欢播放
* @param categoryId 分类ID当playlistType=2时必填
* @param collectId 收藏ID当playlistType=4时必填
* @param reId 推荐ID当playlistType=3时必填
* @param currentMusicId 当前播放的音乐ID用于顺序播放时获取上一首
* @return 上一首音乐ID
*/
@GetMapping("/getPrevMusicId")
public AjaxResult getPrevMusicId(@RequestParam(defaultValue = "1") Integer playMode,
@RequestParam Integer playlistType,
@RequestParam(required = false) String categoryId,
@RequestParam(required = false) String collectId,
@RequestParam(required = false) String reId,
@RequestParam(required = false) String currentMusicId){
Long userId = SecurityUtils.getUserId();
String prevMusicId = musicService.getPrevMusicId(userId, playMode, playlistType, categoryId, collectId, reId,currentMusicId);
Map<String,Object> result = new HashMap<>();
result.put("musicId",prevMusicId);
return AjaxResult.success("请求成功",result);
}
/** /**
* 获取下一首播放的音乐ID * 获取下一首播放的音乐ID
* @param playMode 播放模式1-顺序播放2-随机播放 * @param playMode 播放模式1-顺序播放2-随机播放

View File

@@ -45,9 +45,12 @@ public class MusicUtil {
*/ */
public static boolean isCurrentTimeInRange(Date startDate, Date endDate) { public static boolean isCurrentTimeInRange(Date startDate, Date endDate) {
Date now = new Date(); // 获取当前时间 Date now = new Date(); // 获取当前时间
if (startDate == null || endDate == null){
return false;
}
// 处理跨越日期的情况(结束时间早于开始时间) // 处理跨越日期的情况(结束时间早于开始时间)
if (endDate.before(startDate)) { if (startDate != null && endDate.before(startDate)) {
// 当前时间 >= 开始时间 或 当前时间 <= 结束时间 // 当前时间 >= 开始时间 或 当前时间 <= 结束时间
return now.after(startDate) || now.before(endDate) || now.equals(startDate) || now.equals(endDate); return now.after(startDate) || now.before(endDate) || now.equals(startDate) || now.equals(endDate);
} else { } else {

View File

@@ -130,7 +130,8 @@ public class SecurityConfig
.authorizeHttpRequests((requests) -> { .authorizeHttpRequests((requests) -> {
permitAllUrl.getUrls().forEach(url -> requests.antMatchers(url).permitAll()); permitAllUrl.getUrls().forEach(url -> requests.antMatchers(url).permitAll());
// 对于登录login 注册register 验证码captchaImage 允许匿名访问 // 对于登录login 注册register 验证码captchaImage 允许匿名访问
requests.antMatchers("/login", "/register","/client/shopLogin","/file/download/**", "/captchaImage","/client/getCode","/client/**","/back/**").permitAll() //"/client/**","/back/**"
requests.antMatchers("/login", "/register","/client/shopLogin","/file/download/**", "/captchaImage","/client/getCode").permitAll()
// 静态资源,可匿名访问 // 静态资源,可匿名访问
.antMatchers(HttpMethod.GET, "/", "/*.html", "/**/*.html", "/**/*.css", "/**/*.js", "/profile/**").permitAll() .antMatchers(HttpMethod.GET, "/", "/*.html", "/**/*.html", "/**/*.css", "/**/*.js", "/profile/**").permitAll()
.antMatchers("/swagger-ui.html", "/swagger-resources/**", "/webjars/**", "/*/api-docs", "/druid/**").permitAll() .antMatchers("/swagger-ui.html", "/swagger-resources/**", "/webjars/**", "/*/api-docs", "/druid/**").permitAll()

View File

@@ -88,6 +88,20 @@ public interface IMusicInfoService
List<MusicInfo> selectMusicInfoByReId(String reId); List<MusicInfo> selectMusicInfoByReId(String reId);
/**
* 获取上一首播放的音乐ID
*
* @param userId 用户ID
* @param playMode 播放模式1-顺序播放2-随机播放
* @param playlistType 播放列表类型1-历史播放2-分类播放3-推荐播放4-收藏播放5-喜欢播放
* @param categoryId 分类ID当playlistType=2时必填
* @param collectId 收藏ID当playlistType=4时必填
* @param reId 推荐ID当playlistType=3时必填
* @param currentMusicId 当前播放的音乐ID用于顺序播放时获取上一首
* @return 上一首音乐ID
*/
String getPrevMusicId(Long userId, Integer playMode, Integer playlistType, String categoryId, String collectId, String reId, String currentMusicId);
/** /**
* 获取下一首播放的音乐ID * 获取下一首播放的音乐ID
* *

View File

@@ -2,20 +2,15 @@ package com.ruoyi.system.service.impl;
import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.IdUtil;
import com.ruoyi.common.core.domain.entity.*; import com.ruoyi.common.core.domain.entity.*;
import com.ruoyi.common.enums.Audio;
import com.ruoyi.common.enums.MusicType; import com.ruoyi.common.enums.MusicType;
import com.ruoyi.common.utils.DateUtils; import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.MusicUtil; import com.ruoyi.common.utils.MusicUtil;
import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.system.config.AliConfig;
import com.ruoyi.system.mapper.*; import com.ruoyi.system.mapper.*;
import com.ruoyi.system.service.IMusicInfoService; import com.ruoyi.system.service.IMusicInfoService;
import com.ruoyi.system.service.IUserHistoryService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@@ -261,6 +256,102 @@ public class MusicInfoServiceImpl implements IMusicInfoService
return musicInfoMapper.selectMusicInfoByReId(reId); return musicInfoMapper.selectMusicInfoByReId(reId);
} }
/**
* 获取上一首播放的音乐ID
*
* @param userId 用户ID
* @param playMode 播放模式1-顺序播放2-随机播放
* @param playlistType 播放列表类型1-历史播放2-分类播放3-推荐播放4-收藏播放5-喜欢播放
* @param categoryId 分类ID当playlistType=2时必填
* @param collectId 收藏ID当playlistType=4时必填
* @param reId 推荐ID当playlistType=3时必填
* @param currentMusicId 当前播放的音乐ID用于顺序播放时获取上一首
* @return 上一首音乐ID
*/
@Override
public String getPrevMusicId(Long userId, Integer playMode, Integer playlistType, String categoryId, String collectId, String reId, String currentMusicId) {
List<MusicInfo> musicList = null;
// 根据播放列表类型获取对应的音乐列表
switch (playlistType) {
case 1: // 历史播放
musicList = musicInfoMapper.selectHistoryMusicByUser(userId);
break;
case 2: // 分类播放
if (categoryId == null || categoryId.isEmpty()) {
return null; // 分类播放必须提供分类ID
}
musicList = musicInfoMapper.selectMusicInfoByCid(categoryId,new MusicInfo());
break;
case 3: // 推荐播放
if (reId == null || reId.isEmpty()) {
return null; // 推荐播放必须提供推荐ID
}
musicList = musicInfoMapper.selectRecommendMusicByReId(reId);
break;
case 4: // 收藏播放
if (collectId == null || collectId.isEmpty()) {
return null; // 收藏播放必须提供收藏ID
}
musicList = musicInfoMapper.selectMusicByCollectId(collectId);
break;
case 5: // 喜欢播放
musicList = musicInfoMapper.selectLikeMusicByUser(userId);
break;
default:
return null;
}
// 如果列表为空返回null
if (musicList == null || musicList.isEmpty()) {
return null;
}
// 根据播放模式获取上一首音乐ID
if (playMode == 1) { // 顺序播放
// 按照ID排序列表
musicList.sort((a, b) -> {
Long idA = a.getMusicId();
Long idB = b.getMusicId();
return idA.compareTo(idB);
});
// 如果没有当前音乐ID返回列表中的最后一首
if (currentMusicId == null || currentMusicId.isEmpty()) {
return musicList.get(musicList.size() - 1).getMusicId().toString();
}
// 查找当前音乐在列表中的位置
int currentIndex = -1;
for (int i = 0; i < musicList.size(); i++) {
if (musicList.get(i).getMusicId().toString().equals(currentMusicId)) {
currentIndex = i;
break;
}
}
// 如果找到当前音乐,返回上一首;否则返回最后一首
if (currentIndex != -1) {
int prevIndex = (currentIndex - 1 + musicList.size()) % musicList.size(); // 循环播放
return musicList.get(prevIndex).getMusicId().toString();
} else {
String lastMusicId = musicList.get(musicList.size() - 1).getMusicId().toString();
//System.out.println("未找到当前音乐,返回最后一首: " + lastMusicId);
return lastMusicId;
}
} else if (playMode == 2) { // 随机播放
// 生成随机索引
int randomIndex = (int) (Math.random() * musicList.size());
String randomMusicId = musicList.get(randomIndex).getMusicId().toString();
//System.out.println("随机播放,索引: " + randomIndex + ", ID: " + randomMusicId);
return randomMusicId;
} else {
return null; // 不支持的播放模式
}
}
/** /**
* 获取下一首播放的音乐ID * 获取下一首播放的音乐ID
* *

View File

@@ -104,6 +104,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</select> </select>
<update id="updateImgByCollectId"> <update id="updateImgByCollectId">
update user_collect set img=#{img} where collectId = #{collectId} update user_collect set img=#{img} where collect_id = #{collectId}
</update> </update>
</mapper> </mapper>