喜欢等bug

This commit is contained in:
menxipeng
2025-09-26 21:47:28 +08:00
parent e6c413d907
commit c00eb734e2
13 changed files with 148 additions and 98 deletions

View File

@@ -6,6 +6,7 @@ import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.domain.entity.UserLikeMusic; import com.ruoyi.common.core.domain.entity.UserLikeMusic;
import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.enums.BusinessType; import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.poi.ExcelUtil; import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.system.service.IUserLikeMusicService; import com.ruoyi.system.service.IUserLikeMusicService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@@ -17,7 +18,7 @@ import java.util.List;
/** /**
* 【请填写功能名称】Controller * 【请填写功能名称】Controller
* *
* @author ruoyi * @author ruoyi
* @date 2025-07-15 * @date 2025-07-15
*/ */
@@ -95,4 +96,6 @@ public class UserLikeMusicController extends BaseController
{ {
return toAjax(userLikeMusicService.deleteUserLikeMusicByIds(ids)); return toAjax(userLikeMusicService.deleteUserLikeMusicByIds(ids));
} }
} }

View File

@@ -5,6 +5,7 @@ import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.domain.entity.MusicInfo; import com.ruoyi.common.core.domain.entity.MusicInfo;
import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.system.service.IBannerInfoService; import com.ruoyi.system.service.IBannerInfoService;
import com.ruoyi.system.service.ICategoryInfoService; import com.ruoyi.system.service.ICategoryInfoService;
import com.ruoyi.system.service.IMusicInfoService; import com.ruoyi.system.service.IMusicInfoService;
@@ -29,7 +30,8 @@ public class IndexController extends BaseController {
private IMusicInfoService musicInfoService; private IMusicInfoService musicInfoService;
@Autowired @Autowired
private IRecommendInfoService recommendInfoService; private IRecommendInfoService recommendInfoService;
@Autowired
private IMusicInfoService musicService;
/** /**
* @return com.ruoyi.common.core.domain.AjaxResult * @return com.ruoyi.common.core.domain.AjaxResult
* 获取banner * 获取banner
@@ -58,6 +60,14 @@ public class IndexController extends BaseController {
public TableDataInfo getRecommendMusic(){ public TableDataInfo getRecommendMusic(){
startPage(); startPage();
List<MusicInfo> list = recommendInfoService.findRecommendMusic(); List<MusicInfo> list = recommendInfoService.findRecommendMusic();
Long userId = SecurityUtils.getUserId();
for (MusicInfo musicInfo : list) {
Long musicId = musicInfo.getMusicId();
MusicInfo selectUserLikeMusic = musicService.selectUserLikeMusic(String.valueOf(musicId), userId);
musicInfo.setLike(selectUserLikeMusic.isLike());
}
return getDataTableData(list); return getDataTableData(list);
} }
@@ -75,6 +85,6 @@ public class IndexController extends BaseController {
return getDataTableData(list); return getDataTableData(list);
} }
} }

View File

@@ -211,4 +211,11 @@ public class MusicController extends BaseController {
// return AjaxResult.success(musicInfos); // return AjaxResult.success(musicInfos);
} }
// 查找该音乐是否是我喜欢的音乐
@GetMapping("/selectUserLikeMusic/{musicId}")
public AjaxResult selectUserLikeMusic(@PathVariable("musicId") String musicId) {
Long userId = SecurityUtils.getUserId();
return AjaxResult.success(musicService.selectUserLikeMusic(musicId,userId));
}
} }

View File

@@ -42,22 +42,22 @@ public class UmengConfig {
private final PushClient client = new PushClient(); private final PushClient client = new PushClient();
public UmResp send(String token,String deviceTypeUp){ public UmResp send(String token,String deviceTypeUp){
String umAppkey = null; // String umAppkey = null;
if (deviceTypeUp.equals(DeviceTypeEnum.ANDROID.name())){ // if (deviceTypeUp.equals(DeviceTypeEnum.ANDROID.name())){
umAppkey = AliKeyConfig.UMApp_Android_Key; // umAppkey = AliKeyConfig.UMApp_Android_Key;
}else if (deviceTypeUp.equals(DeviceTypeEnum.IOS.name())){ // }else if (deviceTypeUp.equals(DeviceTypeEnum.IOS.name())){
umAppkey = AliKeyConfig.UMApp_IOS_Key; // umAppkey = AliKeyConfig.UMApp_IOS_Key;
} // }
//687b2df479267e0210b79b6f //687b2df479267e0210b79b6f
String appKey = AliKeyConfig.UMApp_AliKey; // String appKey = AliKeyConfig.UMApp_AliKey;
String appSecret = AliKeyConfig.UMApp_AliSecret; // String appSecret = AliKeyConfig.UMApp_AliSecret;
// if (deviceTypeUp.equals(DeviceTypeEnum.ANDROID.name())){ // if (deviceTypeUp.equals(DeviceTypeEnum.ANDROID.name())){
// //
// } // }
// //687b2df479267e0210b79b6f // //687b2df479267e0210b79b6f
// String umAppkey = "68a99a66ec2b5b6f8825b8b1"; String umAppkey = "68a99a66ec2b5b6f8825b8b1";
// String appKey = "204918113"; String appKey = "204918113";
// String appSecret = "v4UrIhhLZlo0adpmevyCfvThGFbrRer0"; String appSecret = "v4UrIhhLZlo0adpmevyCfvThGFbrRer0";
// 下面的url要和阿里云云市场购买的商品对应 // 下面的url要和阿里云云市场购买的商品对应
String url = "https://verify5.market.alicloudapi.com/api/v1/mobile/info?appkey=" + umAppkey; String url = "https://verify5.market.alicloudapi.com/api/v1/mobile/info?appkey=" + umAppkey;
HttpPost httpPost = new HttpPost(url); HttpPost httpPost = new HttpPost(url);
@@ -161,11 +161,12 @@ public class UmengConfig {
public static void main(String[] args) throws Exception { public static void main(String[] args) throws Exception {
UmengConfig umengConfig = new UmengConfig(); UmengConfig umengConfig = new UmengConfig();
// System.out.println(DeviceTypeEnum.ANDROID.name()); System.out.println(DeviceTypeEnum.ANDROID.name());
// UmResp sss1 = umengConfig.send("eyJvIjoiaU9TIiwiayI6ImJNSGJwMktVdjhVaE5zOW1wQWhwYlwvWCtVRTlqcnZKeXhjb091N3BDdVlqcHNEc2RKM3A2M0pJZ056U0JrdlY5UlFPSHo3U25ZMmNcL3ZpbUI3ZHN2THFwQXlkbmRJeDB4NHhLSytFR2pvVEF4eU1oUnpUVHlrNHYzZThCSjNIajJOamJoK0VPdUtRTXV3N2pnS0dIdHJoT3FJRFF4QXJ0NisrUTI1ODhhQWdEVnp5TUVZdmxpTFhKeDUwS1wvZWI5VjdSb1VoNkMzc2E5Mm1xcHI1S3FxMm9KZHk3THoyYkVPQUVnM1hvWHJWVlwvcmtOMFluV1AyMVBZb0xrVFgxXC84TWZhVXZJRkY2aWJldDVaYkNzMVNhZU9LVU1rcnlicVpINHBMNlF5TzBFRjkrUHljT01hOGlVTjZabVZ6dm1HOFJHK3BjQjF1amVpSVpRN2N5bDRPOGxnPT0iLCJjIjoiSW02VTJVV3IxYTlDTkpmN29WR2FpRGxCZ3RSamQ5djUwaENCajJMWXd5N2Y3dzV2SndnWHFSXC8zeTlWYzFpSDFITnFHN1wvcUZpN2cxXC94cGQ5RGNsVjE0SXFKYmsxSHppZkNcL0JSU0NaeGpFTm5qWndTR3l1K1VnR3luajhnMWlHbkFhOHRmVWRUN0lGNWdrOGpVSVlteTZBNllkXC92Z2RXXC9wa1krcE9pczVWZEUrTjhXMjhEXC9idXhjQm1Wbm5obHpMWmdzRHUrdWcwQ0FMY2M0V3JybWdGdFcyOWN4Mkh5SGNNZ3AwY2xuOW5GQnNaS20zbDV3QWZIeUd2WkRpU1R3Q0lpSjFHUzNXUm1oZFVVdXo4NHRqMnBhWHZ1Y01Sa0tnNGt6Mk9cLyt4QmMrRzJ1VGpETXNtcW1nVUdBSWFoMlNyaGs5MEJMZWlKSFRLY0diTjlZbmN2cjZlMTBlZE1nSDR3QTB5K0lnTzlXd2t5OVAwb1FUbEZpUHd1Tm9PMm1OUEFpTDVwb3ZkZEp0QmY4TDZmb3B1NWl4a0FnVzBUdFM2OHN3Y3BaeWhuT25zRks0dXI2OHc3YWIySWJPNWpZMnhLTHZvb1NjMmRcLzhcL2JSTmxFM0txUUFLcDRGQUpxdWJ2bjhQRzdPcGN2bXhuSkF4bTJYNTFkQUZtaTdsSjZuZlc0MlJSNDRZWDBtMlhkczAwY3hZa2s5Q29zeVdWVUdGUkVDMjdjUUFURU9PMWp2TzdlMHEwOTRLZjdnaEx2UFJadlo2bFIxSUxmTTJxeWlQc0V5dmRiSUJyaG1yVEtJOWdqRW5Qc3U2dEZPc1RiZ0oxaVwvNGZBRFBKWDhOczF1Ym9taVl2KzZnVGsyNzlZTmQ3WU9OT21mMzlTOG05RktrNEN3Uk1QT1wvcVVSMGRJN25HbER4U1wvWEFFbWNHU0wxcDllczN0U0lsVUIrbHNcL3luWWZFNWNicDIwRE9NV3ZcL0xLa0I2cXA5RkVtaXV6eDY2MWYzZE9hZnk2WUJ2V2dsQnljU05TSkdDNkpYeTZnWHEwR1wvNE9XTkRPdjFhakIxMnhGRk9PK1dhbUVKcG9Takxic0FFV0V5eEtDb3pXaU9meG0ydEJ0bHdoM2hwXC9Vb3RyRCtIbkY2Z1NOOGtCblVtYnJRU3FzYUdsM2g3WDZSZUREbXdRSmMzSzY0QkxNcCJ9", "ios"); UmResp sss1 = umengConfig.send(
// String sss; "eyJvIjoiaU9TIiwiayI6ImJNSGJwMktVdjhVaE5zOW1wQWhwYlwvWCtVRTlqcnZKeXhjb091N3BDdVlqcHNEc2RKM3A2M0pJZ056U0JrdlY5UlFPSHo3U25ZMmNcL3ZpbUI3ZHN2THFwQXlkbmRJeDB4NHhLSytFR2pvVEF4eU1oUnpUVHlrNHYzZThCSjNIajJOamJoK0VPdUtRTXV3N2pnS0dIdHJoT3FJRFF4QXJ0NisrUTI1ODhhQWdEVnp5TUVZdmxpTFhKeDUwS1wvZWI5VjdSb1VoNkMzc2E5Mm1xcHI1S3FxMm9KZHk3THoyYkVPQUVnM1hvWHJWVlwvcmtOMFluV1AyMVBZb0xrVFgxXC84TWZhVXZJRkY2aWJldDVaYkNzMVNhZU9LVU1rcnlicVpINHBMNlF5TzBFRjkrUHljT01hOGlVTjZabVZ6dm1HOFJHK3BjQjF1amVpSVpRN2N5bDRPOGxnPT0iLCJjIjoiSW02VTJVV3IxYTlDTkpmN29WR2FpRGxCZ3RSamQ5djUwaENCajJMWXd5N2Y3dzV2SndnWHFSXC8zeTlWYzFpSDFITnFHN1wvcUZpN2cxXC94cGQ5RGNsVjE0SXFKYmsxSHppZkNcL0JSU0NaeGpFTm5qWndTR3l1K1VnR3luajhnMWlHbkFhOHRmVWRUN0lGNWdrOGpVSVlteTZBNllkXC92Z2RXXC9wa1krcE9pczVWZEUrTjhXMjhEXC9idXhjQm1Wbm5obHpMWmdzRHUrdWcwQ0FMY2M0V3JybWdGdFcyOWN4Mkh5SGNNZ3AwY2xuOW5GQnNaS20zbDV3QWZIeUd2WkRpU1R3Q0lpSjFHUzNXUm1oZFVVdXo4NHRqMnBhWHZ1Y01Sa0tnNGt6Mk9cLyt4QmMrRzJ1VGpETXNtcW1nVUdBSWFoMlNyaGs5MEJMZWlKSFRLY0diTjlZbmN2cjZlMTBlZE1nSDR3QTB5K0lnTzlXd2t5OVAwb1FUbEZpUHd1Tm9PMm1OUEFpTDVwb3ZkZEp0QmY4TDZmb3B1NWl4a0FnVzBUdFM2OHN3Y3BaeWhuT25zRks0dXI2OHc3YWIySWJPNWpZMnhLTHZvb1NjMmRcLzhcL2JSTmxFM0txUUFLcDRGQUpxdWJ2bjhQRzdPcGN2bXhuSkF4bTJYNTFkQUZtaTdsSjZuZlc0MlJSNDRZWDBtMlhkczAwY3hZa2s5Q29zeVdWVUdGUkVDMjdjUUFURU9PMWp2TzdlMHEwOTRLZjdnaEx2UFJadlo2bFIxSUxmTTJxeWlQc0V5dmRiSUJyaG1yVEtJOWdqRW5Qc3U2dEZPc1RiZ0oxaVwvNGZBRFBKWDhOczF1Ym9taVl2KzZnVGsyNzlZTmQ3WU9OT21mMzlTOG05RktrNEN3Uk1QT1wvcVVSMGRJN25HbER4U1wvWEFFbWNHU0wxcDllczN0U0lsVUIrbHNcL3luWWZFNWNicDIwRE9NV3ZcL0xLa0I2cXA5RkVtaXV6eDY2MWYzZE9hZnk2WUJ2V2dsQnljU05TSkdDNkpYeTZnWHEwR1wvNE9XTkRPdjFhakIxMnhGRk9PK1dhbUVKcG9Takxic0FFV0V5eEtDb3pXaU9meG0ydEJ0bHdoM2hwXC9Vb3RyRCtIbkY2Z1NOOGtCblVtYnJRU3FzYUdsM2g3WDZSZUREbXdRSmMzSzY0QkxNcCJ9", "IOS");
// // String sss;
// sss = "{\"success\":true,\"data\":{\"mobile\":\"18518753918\",\"score\":null,\"activeScore\":null,\"aesEncryptKey\":null},\"code\":2001,\"message\":\"gain mobile&#39;s result success\",\"requestId\":\"0E87E249-42A0-42C0-94D3-7424D45E571E\"}\n";
// sss = "{\"success\":true,\"data\":{\"mobile\":\"18518753918\",\"score\":null,\"activeScore\":null,\"aesEncryptKey\":null},\"code\":2001,\"message\":\"gain mobile&#39;s result success\",\"requestId\":\"0E87E249-42A0-42C0-94D3-7424D45E571E\"}\n";
// //
// UmResp ss = JSONUtil.toBean(sss, UmResp.class); // UmResp ss = JSONUtil.toBean(sss, UmResp.class);
// System.out.println(ss); // System.out.println(ss);

View File

@@ -7,15 +7,15 @@ import java.util.List;
/** /**
* 【请填写功能名称】Mapper接口 * 【请填写功能名称】Mapper接口
* *
* @author ruoyi * @author ruoyi
* @date 2025-07-18 * @date 2025-07-18
*/ */
public interface MusicCollectMapper public interface MusicCollectMapper
{ {
/** /**
* 查询【请填写功能名称】 * 查询【请填写功能名称】
* *
* @param id 【请填写功能名称】主键 * @param id 【请填写功能名称】主键
* @return 【请填写功能名称】 * @return 【请填写功能名称】
*/ */
@@ -23,7 +23,7 @@ public interface MusicCollectMapper
/** /**
* 查询【请填写功能名称】列表 * 查询【请填写功能名称】列表
* *
* @param musicCollect 【请填写功能名称】 * @param musicCollect 【请填写功能名称】
* @return 【请填写功能名称】集合 * @return 【请填写功能名称】集合
*/ */
@@ -31,7 +31,7 @@ public interface MusicCollectMapper
/** /**
* 新增【请填写功能名称】 * 新增【请填写功能名称】
* *
* @param musicCollect 【请填写功能名称】 * @param musicCollect 【请填写功能名称】
* @return 结果 * @return 结果
*/ */
@@ -39,7 +39,7 @@ public interface MusicCollectMapper
/** /**
* 修改【请填写功能名称】 * 修改【请填写功能名称】
* *
* @param musicCollect 【请填写功能名称】 * @param musicCollect 【请填写功能名称】
* @return 结果 * @return 结果
*/ */
@@ -47,7 +47,7 @@ public interface MusicCollectMapper
/** /**
* 删除【请填写功能名称】 * 删除【请填写功能名称】
* *
* @param id 【请填写功能名称】主键 * @param id 【请填写功能名称】主键
* @return 结果 * @return 结果
*/ */
@@ -55,7 +55,7 @@ public interface MusicCollectMapper
/** /**
* 批量删除【请填写功能名称】 * 批量删除【请填写功能名称】
* *
* @param ids 需要删除的数据主键集合 * @param ids 需要删除的数据主键集合
* @return 结果 * @return 结果
*/ */
@@ -64,4 +64,6 @@ public interface MusicCollectMapper
int delBindMusic(MusicCollect musicCollect); int delBindMusic(MusicCollect musicCollect);
MusicCollect selectCollectIdAndMusicId(MusicCollect musicCollect); MusicCollect selectCollectIdAndMusicId(MusicCollect musicCollect);
int deleteMusicCollectByCollectIds(Long[] ids);
} }

View File

@@ -9,15 +9,15 @@ import java.util.List;
/** /**
* 音乐信息Mapper接口 * 音乐信息Mapper接口
* *
* @author ruoyi * @author ruoyi
* @date 2025-07-15 * @date 2025-07-15
*/ */
public interface MusicInfoMapper public interface MusicInfoMapper
{ {
/** /**
* 查询音乐信息 * 查询音乐信息
* *
* @param id 音乐信息主键 * @param id 音乐信息主键
* @return 音乐信息 * @return 音乐信息
*/ */
@@ -25,7 +25,7 @@ public interface MusicInfoMapper
/** /**
* 查询音乐信息列表 * 查询音乐信息列表
* *
* @param musicInfo 音乐信息 * @param musicInfo 音乐信息
* @return 音乐信息集合 * @return 音乐信息集合
*/ */
@@ -33,7 +33,7 @@ public interface MusicInfoMapper
/** /**
* 新增音乐信息 * 新增音乐信息
* *
* @param musicInfo 音乐信息 * @param musicInfo 音乐信息
* @return 结果 * @return 结果
*/ */
@@ -41,7 +41,7 @@ public interface MusicInfoMapper
/** /**
* 修改音乐信息 * 修改音乐信息
* *
* @param musicInfo 音乐信息 * @param musicInfo 音乐信息
* @return 结果 * @return 结果
*/ */
@@ -49,7 +49,7 @@ public interface MusicInfoMapper
/** /**
* 删除音乐信息 * 删除音乐信息
* *
* @param id 音乐信息主键 * @param id 音乐信息主键
* @return 结果 * @return 结果
*/ */
@@ -57,7 +57,7 @@ public interface MusicInfoMapper
/** /**
* 批量删除音乐信息 * 批量删除音乐信息
* *
* @param ids 需要删除的数据主键集合 * @param ids 需要删除的数据主键集合
* @return 结果 * @return 结果
*/ */
@@ -92,18 +92,18 @@ public interface MusicInfoMapper
MusicInfo selectByPath(String path); MusicInfo selectByPath(String path);
List<MusicInfo> selectMusicInfoByReId(String reId); List<MusicInfo> selectMusicInfoByReId(String reId);
/** /**
* 根据用户ID查询喜欢的音乐中的一张图片 * 根据用户ID查询喜欢的音乐中的一张图片
* *
* @param userId 用户ID * @param userId 用户ID
* @return 音乐图片URL * @return 音乐图片URL
*/ */
String selectLikeMusicImageByUserId(@Param("userId") Long userId); String selectLikeMusicImageByUserId(@Param("userId") Long userId);
/** /**
* 根据作者名称或音乐名称模糊搜索音乐 * 根据作者名称或音乐名称模糊搜索音乐
* *
* @param search 搜索关键词 * @param search 搜索关键词
* @return 音乐信息列表 * @return 音乐信息列表
*/ */
@@ -112,4 +112,6 @@ public interface MusicInfoMapper
String selectListRandomMusic(String currentMusicId); String selectListRandomMusic(String currentMusicId);
UserLikeMusic selectMusicAndUserLike(@Param("userId") Long userId,@Param("musicId") String musicId); UserLikeMusic selectMusicAndUserLike(@Param("userId") Long userId,@Param("musicId") String musicId);
MusicInfo selectUserLikeMusic(@Param("musicId") String musicId,@Param("userId") Long userId);
} }

View File

@@ -138,4 +138,6 @@ public interface IMusicInfoService
* @return 音乐信息列表,包含是否是当前用户喜欢的标识 * @return 音乐信息列表,包含是否是当前用户喜欢的标识
*/ */
List<MusicInfo> findLikeSearch(String search); List<MusicInfo> findLikeSearch(String search);
MusicInfo selectUserLikeMusic(String musicId, Long userId);
} }

View File

@@ -268,7 +268,7 @@ public class MusicInfoServiceImpl implements IMusicInfoService
/** /**
* 获取上一首播放的音乐ID * 获取上一首播放的音乐ID
* *
* @param userId 用户ID * @param userId 用户ID
* @param playMode 播放模式1-顺序播放2-随机播放 * @param playMode 播放模式1-顺序播放2-随机播放
* @param playlistType 播放列表类型1-历史播放2-分类播放3-推荐播放4-收藏播放5-喜欢播放 * @param playlistType 播放列表类型1-历史播放2-分类播放3-推荐播放4-收藏播放5-喜欢播放
@@ -281,7 +281,7 @@ public class MusicInfoServiceImpl implements IMusicInfoService
@Override @Override
public String getPrevMusicId(Long userId, Integer playMode, Integer playlistType, String categoryId, String collectId, String reId, String currentMusicId) { public String getPrevMusicId(Long userId, Integer playMode, Integer playlistType, String categoryId, String collectId, String reId, String currentMusicId) {
List<MusicInfo> musicList = null; List<MusicInfo> musicList = null;
// 根据播放列表类型获取对应的音乐列表 // 根据播放列表类型获取对应的音乐列表
switch (playlistType) { switch (playlistType) {
case 1: // 历史播放 case 1: // 历史播放
@@ -313,13 +313,13 @@ public class MusicInfoServiceImpl implements IMusicInfoService
default: default:
return null; return null;
} }
// 如果列表为空返回null // 如果列表为空返回null
if (musicList == null || musicList.isEmpty()) { if (musicList == null || musicList.isEmpty()) {
return null; return null;
} }
// 根据播放模式获取上一首音乐ID // 根据播放模式获取上一首音乐ID
if (playMode == 1) { // 顺序播放 if (playMode == 1) { // 顺序播放
// 按照ID排序列表 // 按照ID排序列表
@@ -328,14 +328,14 @@ public class MusicInfoServiceImpl implements IMusicInfoService
Long idB = b.getMusicId(); Long idB = b.getMusicId();
return idA.compareTo(idB); return idA.compareTo(idB);
}); });
// 如果没有当前音乐ID返回列表中的最后一首 // 如果没有当前音乐ID返回列表中的最后一首
if (currentMusicId == null || currentMusicId.isEmpty()) { if (currentMusicId == null || currentMusicId.isEmpty()) {
return musicList.get(musicList.size() - 1).getMusicId().toString(); return musicList.get(musicList.size() - 1).getMusicId().toString();
} }
// 查找当前音乐在列表中的位置 // 查找当前音乐在列表中的位置
int currentIndex = -1; int currentIndex = -1;
for (int i = 0; i < musicList.size(); i++) { for (int i = 0; i < musicList.size(); i++) {
@@ -366,7 +366,7 @@ public class MusicInfoServiceImpl implements IMusicInfoService
/** /**
* 获取下一首播放的音乐ID * 获取下一首播放的音乐ID
* *
* @param userId 用户ID * @param userId 用户ID
* @param playMode 播放模式1-顺序播放2-随机播放 * @param playMode 播放模式1-顺序播放2-随机播放
* @param playlistType 播放列表类型1-历史播放2-分类播放3-推荐播放4-收藏播放5-喜欢播放 6-列表随机 * @param playlistType 播放列表类型1-历史播放2-分类播放3-推荐播放4-收藏播放5-喜欢播放 6-列表随机
@@ -378,7 +378,7 @@ public class MusicInfoServiceImpl implements IMusicInfoService
@Override @Override
public String getNextMusicId(Long userId, Integer playMode, Integer playlistType, String categoryId, String collectId, String reId, String currentMusicId) { public String getNextMusicId(Long userId, Integer playMode, Integer playlistType, String categoryId, String collectId, String reId, String currentMusicId) {
List<MusicInfo> musicList = null; List<MusicInfo> musicList = null;
// 根据播放列表类型获取对应的音乐列表 // 根据播放列表类型获取对应的音乐列表
switch (playlistType) { switch (playlistType) {
case 1: // 历史播放 case 1: // 历史播放
@@ -410,15 +410,15 @@ public class MusicInfoServiceImpl implements IMusicInfoService
default: default:
return null; return null;
} }
// 如果列表为空返回null // 如果列表为空返回null
if (musicList == null || musicList.isEmpty()) { if (musicList == null || musicList.isEmpty()) {
return null; return null;
} }
// 打印调试信息列表大小和当前音乐ID // 打印调试信息列表大小和当前音乐ID
System.out.println("播放列表大小: " + musicList.size() + ", 当前音乐ID: " + currentMusicId); System.out.println("播放列表大小: " + musicList.size() + ", 当前音乐ID: " + currentMusicId);
// 根据播放模式获取下一首音乐ID // 根据播放模式获取下一首音乐ID
if (playMode == 1) { // 顺序播放 if (playMode == 1) { // 顺序播放
// 按照ID排序列表 // 按照ID排序列表
@@ -427,17 +427,17 @@ public class MusicInfoServiceImpl implements IMusicInfoService
Long idB = b.getMusicId(); Long idB = b.getMusicId();
return idA.compareTo(idB); return idA.compareTo(idB);
}); });
// 打印排序后的ID列表用于调试 // 打印排序后的ID列表用于调试
for (MusicInfo music : musicList) { for (MusicInfo music : musicList) {
System.out.println(music.getMusicId()); System.out.println(music.getMusicId());
} }
// 如果没有当前音乐ID返回列表中的第一首 // 如果没有当前音乐ID返回列表中的第一首
if (currentMusicId == null || currentMusicId.isEmpty()) { if (currentMusicId == null || currentMusicId.isEmpty()) {
return musicList.get(0).getMusicId().toString(); return musicList.get(0).getMusicId().toString();
} }
// 查找当前音乐在列表中的位置 // 查找当前音乐在列表中的位置
int currentIndex = -1; int currentIndex = -1;
for (int i = 0; i < musicList.size(); i++) { for (int i = 0; i < musicList.size(); i++) {
@@ -469,7 +469,7 @@ public class MusicInfoServiceImpl implements IMusicInfoService
/** /**
* 根据用户ID查询喜欢的音乐数量 * 根据用户ID查询喜欢的音乐数量
* *
* @param userId 用户ID * @param userId 用户ID
* @return 喜欢的音乐数量 * @return 喜欢的音乐数量
*/ */
@@ -477,10 +477,10 @@ public class MusicInfoServiceImpl implements IMusicInfoService
public int findLikeNumsByUserId(Long userId) { public int findLikeNumsByUserId(Long userId) {
return userLikeMusicMapper.selectLikeMusicCountByUserId(userId); return userLikeMusicMapper.selectLikeMusicCountByUserId(userId);
} }
/** /**
* 获取用户喜欢的音乐中的一张图片 * 获取用户喜欢的音乐中的一张图片
* *
* @param userId 用户ID * @param userId 用户ID
* @return 音乐图片URL * @return 音乐图片URL
*/ */
@@ -488,17 +488,17 @@ public class MusicInfoServiceImpl implements IMusicInfoService
public String findLikeMusicImageByUserId(Long userId) { public String findLikeMusicImageByUserId(Long userId) {
return musicInfoMapper.selectLikeMusicImageByUserId(userId); return musicInfoMapper.selectLikeMusicImageByUserId(userId);
} }
/** /**
* 根据作者名称或音乐名称模糊搜索音乐 * 根据作者名称或音乐名称模糊搜索音乐
* *
* @param search 搜索关键词 * @param search 搜索关键词
* @return 音乐信息列表,包含是否是当前用户喜欢的标识 * @return 音乐信息列表,包含是否是当前用户喜欢的标识
*/ */
@Override @Override
public List<MusicInfo> findLikeSearch(String search) { public List<MusicInfo> findLikeSearch(String search) {
// 根据作者名称或音乐名称模糊搜索音乐 // 根据作者名称或音乐名称模糊搜索音乐
List<MusicInfo> musicList = musicInfoMapper.selectMusicInfoBySearch(search); List<MusicInfo> musicList = musicInfoMapper.selectMusicInfoBySearch(search);
@@ -532,4 +532,13 @@ public class MusicInfoServiceImpl implements IMusicInfoService
return null; return null;
} }
@Override
public MusicInfo selectUserLikeMusic(String musicId, Long userId) {
MusicInfo musicInfo = musicInfoMapper.selectUserLikeMusic(musicId, userId);
if (musicInfo != null){
musicInfo.setLike(true);
return musicInfo;
}
return new MusicInfo();
}
} }

View File

@@ -19,12 +19,12 @@ import java.util.stream.Collectors;
/** /**
* 推荐Service业务层处理 * 推荐Service业务层处理
* *
* @author ruoyi * @author ruoyi
* @date 2025-07-15 * @date 2025-07-15
*/ */
@Service @Service
public class RecommendInfoServiceImpl implements IRecommendInfoService public class RecommendInfoServiceImpl implements IRecommendInfoService
{ {
@Autowired @Autowired
private RecommendInfoMapper recommendInfoMapper; private RecommendInfoMapper recommendInfoMapper;
@@ -35,7 +35,7 @@ public class RecommendInfoServiceImpl implements IRecommendInfoService
/** /**
* 查询推荐 * 查询推荐
* *
* @param id 推荐主键 * @param id 推荐主键
* @return 推荐 * @return 推荐
*/ */
@@ -47,7 +47,7 @@ public class RecommendInfoServiceImpl implements IRecommendInfoService
/** /**
* 查询推荐列表 * 查询推荐列表
* *
* @param recommendInfo 推荐 * @param recommendInfo 推荐
* @return 推荐 * @return 推荐
*/ */
@@ -59,7 +59,7 @@ public class RecommendInfoServiceImpl implements IRecommendInfoService
/** /**
* 新增推荐 * 新增推荐
* *
* @param recommendInfo 推荐 * @param recommendInfo 推荐
* @return 结果 * @return 结果
*/ */
@@ -73,7 +73,7 @@ public class RecommendInfoServiceImpl implements IRecommendInfoService
/** /**
* 修改推荐 * 修改推荐
* *
* @param recommendInfo 推荐 * @param recommendInfo 推荐
* @return 结果 * @return 结果
*/ */
@@ -86,7 +86,7 @@ public class RecommendInfoServiceImpl implements IRecommendInfoService
/** /**
* 批量删除推荐 * 批量删除推荐
* *
* @param ids 需要删除的推荐主键 * @param ids 需要删除的推荐主键
* @return 结果 * @return 结果
*/ */
@@ -99,7 +99,7 @@ public class RecommendInfoServiceImpl implements IRecommendInfoService
/** /**
* 删除推荐信息 * 删除推荐信息
* *
* @param id 推荐主键 * @param id 推荐主键
* @return 结果 * @return 结果
*/ */

View File

@@ -17,12 +17,12 @@ import java.util.stream.Collectors;
/** /**
* 用户收藏音乐Service业务层处理 * 用户收藏音乐Service业务层处理
* *
* @author ruoyi * @author ruoyi
* @date 2025-07-15 * @date 2025-07-15
*/ */
@Service @Service
public class UserCollectServiceImpl implements IUserCollectService public class UserCollectServiceImpl implements IUserCollectService
{ {
@Autowired @Autowired
private UserCollectMapper userCollectMapper; private UserCollectMapper userCollectMapper;
@@ -31,7 +31,7 @@ public class UserCollectServiceImpl implements IUserCollectService
/** /**
* 查询用户收藏音乐 * 查询用户收藏音乐
* *
* @param id 用户收藏音乐主键 * @param id 用户收藏音乐主键
* @return 用户收藏音乐 * @return 用户收藏音乐
*/ */
@@ -43,7 +43,7 @@ public class UserCollectServiceImpl implements IUserCollectService
/** /**
* 查询用户收藏音乐列表 * 查询用户收藏音乐列表
* *
* @param userCollect 用户收藏音乐 * @param userCollect 用户收藏音乐
* @return 用户收藏音乐 * @return 用户收藏音乐
*/ */
@@ -58,7 +58,7 @@ public class UserCollectServiceImpl implements IUserCollectService
if (!collectIdList.isEmpty()) { if (!collectIdList.isEmpty()) {
List<Map<String, Object>> collectNums = userCollectMapper.selectNumUserCollectIdList(collectIdList); List<Map<String, Object>> collectNums = userCollectMapper.selectNumUserCollectIdList(collectIdList);
// 将查询到的歌单音乐数量设置到对应的UserCollect对象中 // 将查询到的歌单音乐数量设置到对应的UserCollect对象中
list.forEach(item -> { list.forEach(item -> {
Map<String, Object> collectNum = collectNums.stream() Map<String, Object> collectNum = collectNums.stream()
@@ -73,7 +73,7 @@ public class UserCollectServiceImpl implements IUserCollectService
/** /**
* 新增用户收藏音乐 * 新增用户收藏音乐
* *
* @param userCollect 用户收藏音乐 * @param userCollect 用户收藏音乐
* @return 结果 * @return 结果
*/ */
@@ -89,7 +89,7 @@ public class UserCollectServiceImpl implements IUserCollectService
/** /**
* 修改用户收藏音乐 * 修改用户收藏音乐
* *
* @param userCollect 用户收藏音乐 * @param userCollect 用户收藏音乐
* @return 结果 * @return 结果
*/ */
@@ -102,19 +102,21 @@ public class UserCollectServiceImpl implements IUserCollectService
/** /**
* 批量删除用户收藏音乐 * 批量删除用户收藏音乐
* *
* @param ids 需要删除的用户收藏音乐主键 * @param ids 需要删除的用户收藏音乐主键
* @return 结果 * @return 结果
*/ */
@Override @Override
public int deleteUserCollectByIds(Long[] ids) public int deleteUserCollectByIds(Long[] ids)
{ {
// 删除关联
musicCollectMapper.deleteMusicCollectByCollectIds(ids);
return userCollectMapper.deleteUserCollectByIds(ids); return userCollectMapper.deleteUserCollectByIds(ids);
} }
/** /**
* 删除用户收藏音乐信息 * 删除用户收藏音乐信息
* *
* @param id 用户收藏音乐主键 * @param id 用户收藏音乐主键
* @return 结果 * @return 结果
*/ */

View File

@@ -3,7 +3,7 @@
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd"> "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.system.mapper.MusicCollectMapper"> <mapper namespace="com.ruoyi.system.mapper.MusicCollectMapper">
<resultMap type="MusicCollect" id="MusicCollectResult"> <resultMap type="MusicCollect" id="MusicCollectResult">
<result property="id" column="id" /> <result property="id" column="id" />
<result property="musicId" column="music_id" /> <result property="musicId" column="music_id" />
@@ -16,12 +16,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<select id="selectMusicCollectList" parameterType="MusicCollect" resultMap="MusicCollectResult"> <select id="selectMusicCollectList" parameterType="MusicCollect" resultMap="MusicCollectResult">
<include refid="selectMusicCollectVo"/> <include refid="selectMusicCollectVo"/>
<where> <where>
<if test="musicId != null "> and music_id = #{musicId}</if> <if test="musicId != null "> and music_id = #{musicId}</if>
<if test="collectId != null "> and collect_id = #{collectId}</if> <if test="collectId != null "> and collect_id = #{collectId}</if>
</where> </where>
</select> </select>
<select id="selectMusicCollectById" parameterType="String" resultMap="MusicCollectResult"> <select id="selectMusicCollectById" parameterType="String" resultMap="MusicCollectResult">
<include refid="selectMusicCollectVo"/> <include refid="selectMusicCollectVo"/>
where id = #{id} where id = #{id}
@@ -69,4 +69,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<select id="selectCollectIdAndMusicId" resultMap="MusicCollectResult"> <select id="selectCollectIdAndMusicId" resultMap="MusicCollectResult">
SELECT * FROM music_collect where music_id=#{musicId} and collect_id=#{collectId} SELECT * FROM music_collect where music_id=#{musicId} and collect_id=#{collectId}
</select> </select>
</mapper>
<delete id="deleteMusicCollectByCollectIds">
delete from music_collect where collect_id in
<foreach item="collectId" collection="array" open="(" separator="," close=")">
#{collectId}
</foreach>
</delete>
</mapper>

View File

@@ -3,7 +3,7 @@
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd"> "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.system.mapper.MusicInfoMapper"> <mapper namespace="com.ruoyi.system.mapper.MusicInfoMapper">
<resultMap type="MusicInfo" id="MusicInfoResult"> <resultMap type="MusicInfo" id="MusicInfoResult">
<result property="id" column="id" /> <result property="id" column="id" />
<result property="musicId" column="music_id" /> <result property="musicId" column="music_id" />
@@ -30,7 +30,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<select id="selectMusicInfoList" parameterType="MusicInfo" resultMap="MusicInfoResult"> <select id="selectMusicInfoList" parameterType="MusicInfo" resultMap="MusicInfoResult">
<include refid="selectMusicInfoVo"/> <include refid="selectMusicInfoVo"/>
<where> <where>
<if test="musicId != null "> and music_id = #{musicId}</if> <if test="musicId != null "> and music_id = #{musicId}</if>
<if test="name != null and name != ''"> and name like concat('%', #{name}, '%')</if> <if test="name != null and name != ''"> and name like concat('%', #{name}, '%')</if>
<if test="author != null and author != ''"> and author = #{author}</if> <if test="author != null and author != ''"> and author = #{author}</if>
@@ -45,7 +45,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="label != null and label != ''"> and label = #{label}</if> <if test="label != null and label != ''"> and label = #{label}</if>
</where> </where>
</select> </select>
<select id="selectMusicInfoById" parameterType="String" resultMap="MusicInfoResult"> <select id="selectMusicInfoById" parameterType="String" resultMap="MusicInfoResult">
<include refid="selectMusicInfoVo"/> <include refid="selectMusicInfoVo"/>
where id = #{id} where id = #{id}
@@ -116,14 +116,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</delete> </delete>
<delete id="deleteMusicInfoByIds" parameterType="String"> <delete id="deleteMusicInfoByIds" parameterType="String">
delete from music_info where id in delete from music_info where id in
<foreach item="id" collection="array" open="(" separator="," close=")"> <foreach item="id" collection="array" open="(" separator="," close=")">
#{id} #{id}
</foreach> </foreach>
</delete> </delete>
<select id="selectByCate" resultType="com.ruoyi.common.core.domain.entity.MusicInfo"> <select id="selectByCate" resultType="com.ruoyi.common.core.domain.entity.MusicInfo">
</select> </select>
<select id="selectMusicInfoByCid" resultMap="MusicInfoResult"> <select id="selectMusicInfoByCid" resultMap="MusicInfoResult">
@@ -140,7 +140,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</select> </select>
<select id="selectRecommendMusic" resultMap="MusicInfoResult"> <select id="selectRecommendMusic" resultMap="MusicInfoResult">
SELECT mi.*,mr.recommend_id FROM music_recommend mr LEFT JOIN music_info mi on mr.music_id = mi.music_id and mi.is_del=0 SELECT mi.*,mr.recommend_id FROM music_recommend mr
LEFT JOIN music_info mi on mr.music_id = mi.music_id and mi.is_del=0
</select> </select>
<select id="selectMusicByCollectId" resultMap="MusicInfoResult"> <select id="selectMusicByCollectId" resultMap="MusicInfoResult">
@@ -192,14 +193,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<select id="selectMusicInfoByReId" resultMap="MusicInfoResult"> <select id="selectMusicInfoByReId" resultMap="MusicInfoResult">
SELECT * FROM music_recommend mr left join music_info mi on mi.music_id=mr.music_id WHERE mi.is_del=0 and mr.recommend_id =#{reId} SELECT * FROM music_recommend mr left join music_info mi on mi.music_id=mr.music_id WHERE mi.is_del=0 and mr.recommend_id =#{reId}
</select> </select>
<select id="selectLikeMusicImageByUserId" resultType="java.lang.String"> <select id="selectLikeMusicImageByUserId" resultType="java.lang.String">
SELECT mi.img_addr FROM user_like_music ulm SELECT mi.img_addr FROM user_like_music ulm
LEFT JOIN music_info mi ON ulm.music_id = mi.music_id LEFT JOIN music_info mi ON ulm.music_id = mi.music_id
WHERE ulm.user_id = #{userId} AND mi.is_del = 0 AND mi.img_addr IS NOT NULL AND mi.img_addr != '' WHERE ulm.user_id = #{userId} AND mi.is_del = 0 AND mi.img_addr IS NOT NULL AND mi.img_addr != ''
LIMIT 1 LIMIT 1
</select> </select>
<select id="selectMusicInfoBySearch" resultMap="MusicInfoResult"> <select id="selectMusicInfoBySearch" resultMap="MusicInfoResult">
<include refid="selectMusicInfoVo"/> <include refid="selectMusicInfoVo"/>
WHERE (name LIKE concat(#{search}, '%') OR author LIKE concat(#{search}, '%')) WHERE (name LIKE concat(#{search}, '%') OR author LIKE concat(#{search}, '%'))
@@ -207,10 +208,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</select> </select>
<select id="selectListRandomMusic" resultType="java.lang.String"> <select id="selectListRandomMusic" resultType="java.lang.String">
SELECT music_info.music_id from music_info where music_id != #{currentMusicId} ORDER BY RAND() LIMIT 1 SELECT music_info.music_id from music_info where music_id != #{currentMusicId} and music_type != 'mixing' ORDER BY RAND() LIMIT 1
</select> </select>
<select id="selectMusicAndUserLike" resultType="com.ruoyi.common.core.domain.entity.UserLikeMusic"> <select id="selectMusicAndUserLike" resultType="com.ruoyi.common.core.domain.entity.UserLikeMusic">
SELECT user_id as userId , music_id as musicId FROm user_like_music where user_id=#{userId} and music_id=#{musicId} limit 1 SELECT user_id as userId , music_id as musicId FROm user_like_music where user_id=#{userId} and music_id=#{musicId} limit 1
</select> </select>
</mapper>
<select id="selectUserLikeMusic" resultMap="MusicInfoResult">
SELECT * FROM user_like_music where user_id= #{userId} and music_id= #{musicId}
</select>
</mapper>

View File

@@ -3,7 +3,7 @@
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd"> "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.system.mapper.MusicRecommendMapper"> <mapper namespace="com.ruoyi.system.mapper.MusicRecommendMapper">
<resultMap type="MusicRecommend" id="MusicRecommendResult"> <resultMap type="MusicRecommend" id="MusicRecommendResult">
<result property="id" column="id" /> <result property="id" column="id" />
<result property="recommendId" column="recommend_id" /> <result property="recommendId" column="recommend_id" />
@@ -16,12 +16,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<select id="selectMusicRecommendList" parameterType="MusicRecommend" resultMap="MusicRecommendResult"> <select id="selectMusicRecommendList" parameterType="MusicRecommend" resultMap="MusicRecommendResult">
<include refid="selectMusicRecommendVo"/> <include refid="selectMusicRecommendVo"/>
<where> <where>
<if test="recommendId != null "> and recommend_id = #{recommendId}</if> <if test="recommendId != null "> and recommend_id = #{recommendId}</if>
<if test="musicId != null "> and music_id = #{musicId}</if> <if test="musicId != null "> and music_id = #{musicId}</if>
</where> </where>
</select> </select>
<select id="selectMusicRecommendById" parameterType="String" resultMap="MusicRecommendResult"> <select id="selectMusicRecommendById" parameterType="String" resultMap="MusicRecommendResult">
<include refid="selectMusicRecommendVo"/> <include refid="selectMusicRecommendVo"/>
where id = #{id} where id = #{id}
@@ -53,9 +53,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</delete> </delete>
<delete id="deleteMusicRecommendByIds" parameterType="String"> <delete id="deleteMusicRecommendByIds" parameterType="String">
delete from music_recommend where id in delete from music_recommend where recommend_id in
<foreach item="id" collection="array" open="(" separator="," close=")"> <foreach item="id" collection="array" open="(" separator="," close=")">
#{id} #{id}
</foreach> </foreach>
</delete> </delete>
</mapper> </mapper>