it_lv 1 mese fa
parent
commit
3b16dd6f50
1 ha cambiato i file con 109 aggiunte e 103 eliminazioni
  1. 109 103
      第1章 专辑管理.md

+ 109 - 103
第1章 专辑管理.md

@@ -762,7 +762,7 @@ MinIO是一个非常轻量的服务,可以很简单的和其他应用的结合
 > 第五步:启用ntp同步
 > timedatectl set-ntp yes
 > 第六步:同步时间
-> ntpq -p
+>     ntpq -p
 > ```
 
 ### 2.3.3 专辑图片上传
@@ -1191,27 +1191,27 @@ public class AlbumInfoServiceImpl extends ServiceImpl<AlbumInfoMapper, AlbumInfo
 
 ```java
 /**
- * TODO 该接口必须登录才能访问
- * 分页查询当前用户专辑列表
+ * TODO 该接口登录才可以访问
+ * 分页条件查询当前登录用户发布专辑
  *
  * @param page
  * @param limit
+ * @param albumInfoQuery
  * @return
  */
-@Operation(summary = "分页查询当前用户专辑列表")
+@Operation(summary = "分页条件查询当前登录用户发布专辑")
 @PostMapping("/albumInfo/findUserAlbumPage/{page}/{limit}")
-public Result<Page<AlbumListVo>> getUserAlbumPage(
-        @PathVariable int page,
-        @PathVariable int limit,
-        @RequestBody AlbumInfoQuery albumInfoQuery
-) {
-    //1.获取当前用户ID
+public Result<Page<AlbumListVo>> findUserAlbumPage(@PathVariable Long page,
+                                                   @PathVariable Long limit,
+                                                   @RequestBody AlbumInfoQuery albumInfoQuery) {
+    //1.获取当前用户登录ID
     Long userId = AuthContextHolder.getUserId();
-    //2.创建MP所需分页对象Page - 封装入参中页码跟页大小
-    Page<AlbumListVo> pageInfo = new Page<>(page, limit);
-    //3.调用业务层->持久层封装分页对象其他属性:总记录数,总页数,记录
-    pageInfo = albumInfoService.getUserAlbumPage(pageInfo, userId, albumInfoQuery);
-    return Result.ok(pageInfo);
+    albumInfoQuery.setUserId(userId);
+    //2.控制层封装分页参数:页码、页大小
+    Page<AlbumListVo> pageParam = new Page<>(page, limit);
+    //3.调用业务逻辑层完成分页查询 封装:总记录数,总页数,当前页数据
+    pageParam = albumInfoService.findUserAlbumPage(pageParam, albumInfoQuery);
+    return Result.ok(pageParam);
 }
 ```
 
@@ -1221,30 +1221,27 @@ public Result<Page<AlbumListVo>> getUserAlbumPage(
 
 ```java
 /**
- * 分页查询当前用户专辑列表
- *
- * @param pageInfo       分页对象
- * @param userId         用户ID
+ *  分页条件查询当前登录用户发布专辑
+ * @param pageParam MP分页对象
  * @param albumInfoQuery 查询条件
  * @return
  */
-Page<AlbumListVo> getUserAlbumPage(Page<AlbumListVo> pageInfo, Long userId, AlbumInfoQuery albumInfoQuery);
+Page<AlbumListVo> findUserAlbumPage(Page<AlbumListVo> pageParam, AlbumInfoQuery albumInfoQuery);
 ```
 
 **AlbumInfoServiceImpl实现类**
 
 ```java
 /**
- * 分页查询当前用户专辑列表
+ * 分页条件查询当前登录用户发布专辑
  *
- * @param pageInfo       分页对象
- * @param userId         用户ID
+ * @param pageParam      MP分页对象
  * @param albumInfoQuery 查询条件
  * @return
  */
 @Override
-public Page<AlbumListVo> getUserAlbumPage(Page<AlbumListVo> pageInfo, Long userId, AlbumInfoQuery albumInfoQuery) {
-    return albumInfoMapper.getUserAlbumPage(pageInfo, userId, albumInfoQuery);
+public Page<AlbumListVo> findUserAlbumPage(Page<AlbumListVo> pageParam, AlbumInfoQuery albumInfoQuery) {
+    return albumInfoMapper.findUserAlbumPage(pageParam, albumInfoQuery);
 }
 ```
 
@@ -1375,16 +1372,13 @@ import org.apache.ibatis.annotations.Param;
 public interface AlbumInfoMapper extends BaseMapper<AlbumInfo> {
 
     /**
-     * 分页查询当前用户专辑列表
-     *
-     * @param pageInfo       分页对象;MP框架自动完成分页,自动拼接SQL limit 10;
-     * @param userId         用户ID
-     * @param albumInfoQuery
+     * 页条件查询当前登录用户发布专辑
+     * @param pageParam MP提供分页对象,自动根据页码、页大小计算SQL limit 部分
+     * @param albumInfoQuery 查询条件:用户ID,状态,关键字
      * @return
      */
-    Page<AlbumListVo> getUserAlbumPage(Page<AlbumListVo> pageInfo, @Param("userId") Long userId, @Param("vo") AlbumInfoQuery albumInfoQuery);
+    Page<AlbumListVo> findUserAlbumPage(Page<AlbumListVo> pageParam, @Param("vo") AlbumInfoQuery albumInfoQuery);
 }
-
 ```
 
 **AlbumInfoMapper.xml 实现**
@@ -1397,29 +1391,31 @@ public interface AlbumInfoMapper extends BaseMapper<AlbumInfo> {
 <mapper namespace="com.atguigu.tingshu.album.mapper.AlbumInfoMapper">
 
 
-    <!--分页查询当前用户专辑列表-->
-    <select id="getUserAlbumPage" resultType="com.atguigu.tingshu.vo.album.AlbumListVo">
-        select ai.id albumId,
-               ai.album_title,
-               ai.cover_url,
-               ai.include_track_count,
-               ai.is_finished,
-               ai.status,
-               max(if(stat.stat_type='0401', stat.stat_num, 0)) playStatNum,
-               max(if(stat.stat_type='0402', stat.stat_num, 0)) subscribeStatNum,
-               max(if(stat.stat_type='0403', stat.stat_num, 0)) buyStatNum,
-               max(if(stat.stat_type='0404', stat.stat_num, 0)) commentStatNum
-        from album_info ai
-                 left join album_stat stat
-                           on stat.album_id = ai.id
+    <select id="findUserAlbumPage" resultType="com.atguigu.tingshu.vo.album.AlbumListVo">
+        select
+            ai.id as album_id,
+            ai.album_title,
+            ai.cover_url,
+            ai.include_track_count,
+            ai.is_finished,
+            ai.status,
+            max(if(stat_type='0401', stat_num, 0)) playStatNum,
+            max(if(stat_type='0402', stat_num, 0)) subscribeStatNum,
+            max(if(stat_type='0403', stat_num, 0)) buyStatNum,
+            max(if(stat_type='0404', stat_num, 0)) commentStatNum
+        from album_info ai inner join album_stat stat
+                                      on stat.album_id = ai.id and stat.is_deleted = 0
         <where>
-            ai.user_id = #{userId} and ai.is_deleted = 0
+            <if test="vo.userId != null">
+                and ai.user_id = #{vo.userId}
+            </if>
             <if test="vo.status != null and vo.status != ''">
                 and ai.status = #{vo.status}
             </if>
             <if test="vo.albumTitle != null and vo.albumTitle != ''">
-                and ai.album_title like concat('%', #{vo.albumTitle} ,'%')
+                and ai.album_title like concat('%',#{vo.albumTitle},'%')
             </if>
+            and ai.is_deleted = 0
         </where>
         group by ai.id
         order by ai.id desc
@@ -1476,11 +1472,7 @@ void removeAlbumInfo(Long id);
 private TrackInfoMapper trackInfoMapper;
 
 /**
- * 根据专辑ID删除专辑
- * 1.判断该专辑是否关联声音
- * 2.删除专辑记录
- * 3.删除统计记录
- * 4.删除专辑标签记录
+ * 删除专辑(包括标签关系、统计数值)
  *
  * @param id
  * @return
@@ -1488,23 +1480,30 @@ private TrackInfoMapper trackInfoMapper;
 @Override
 @Transactional(rollbackFor = Exception.class)
 public void removeAlbumInfo(Long id) {
-    //1.判断该专辑是否关联声音-根据专辑ID查询声音表数量进行判断
-    LambdaQueryWrapper<TrackInfo> queryWrapper = new LambdaQueryWrapper<>();
-    queryWrapper.eq(TrackInfo::getAlbumId, id);
-    Long count = trackInfoMapper.selectCount(queryWrapper);
+    //1.根据专辑ID查询声音表判断该专辑下是否关联声音 如果存在 不允许删除
+    Long count = trackInfoMapper.selectCount(
+            new LambdaQueryWrapper<TrackInfo>()
+                    .eq(TrackInfo::getAlbumId, id)
+    );
     if (count > 0) {
-        throw new GuiguException(500, "该专辑下存在声音");
+        throw new GuiguException(500, "该专辑下存在关联声音");
     }
-    //2.删除专辑记录
+    //2.删除专辑
     albumInfoMapper.deleteById(id);
-    //3.删除统计记录
-    LambdaQueryWrapper<AlbumStat> statLambdaQueryWrapper = new LambdaQueryWrapper<>();
-    statLambdaQueryWrapper.eq(AlbumStat::getAlbumId, id);
-    albumStatMapper.delete(statLambdaQueryWrapper);
-    //4.删除专辑标签记录
-    LambdaQueryWrapper<AlbumAttributeValue> attributeValueLambdaQueryWrapper = new LambdaQueryWrapper<>();
-    attributeValueLambdaQueryWrapper.eq(AlbumAttributeValue::getAlbumId, id);
-    albumAttributeValueMapper.delete(attributeValueLambdaQueryWrapper);
+
+    //3.删除专辑标签关系
+    albumAttributeValueMapper.delete(
+            new LambdaQueryWrapper<AlbumAttributeValue>()
+                    .eq(AlbumAttributeValue::getAlbumId, id)
+    );
+
+    //4.删除专辑统计信息
+    albumStatMapper.delete(
+            new LambdaQueryWrapper<AlbumStat>()
+                    .eq(AlbumStat::getAlbumId, id)
+    );
+
+    //5.TODO 基于MQ删除存在Elasticsearch(全文搜索引擎)中数据
 }
 ```
 
@@ -1552,23 +1551,22 @@ AlbumInfo getAlbumInfo(Long id);
 
 ```java
 /**
- * 根据专辑ID查询专辑信息(包专辑标签列表)
+ * 根据专辑ID查询专辑信息(包专辑标签列表)
  *
  * @param id 专辑ID
- * @return 专辑信息
+ * @return
  */
 @Override
 public AlbumInfo getAlbumInfo(Long id) {
-    //1.根据专辑ID查询专辑信息
+    //1.根据ID查询专辑
     AlbumInfo albumInfo = albumInfoMapper.selectById(id);
-
-    //TODO 业务校验,校验专辑状态是否为下架状态,只有下架状态专辑才可以被修改
-
-    //2.根据专辑ID查询专辑标签列表
-    LambdaQueryWrapper<AlbumAttributeValue> queryWrapper = new LambdaQueryWrapper<>();
-    queryWrapper.eq(AlbumAttributeValue::getAlbumId, id);
-    List<AlbumAttributeValue> albumAttributeValues = albumAttributeValueMapper.selectList(queryWrapper);
-    if (CollectionUtil.isNotEmpty(albumAttributeValues)) {
+    //2.根据专辑ID查询专辑标签关系列表
+    if (albumInfo != null) {
+        List<AlbumAttributeValue> albumAttributeValues = albumAttributeValueMapper
+                .selectList(
+                        new LambdaQueryWrapper<AlbumAttributeValue>()
+                                .eq(AlbumAttributeValue::getAlbumId, id)
+                );
         albumInfo.setAlbumAttributeValueVoList(albumAttributeValues);
     }
     return albumInfo;
@@ -1595,11 +1593,11 @@ public AlbumInfo getAlbumInfo(Long id) {
  * @param albumInfo 专辑修改后信息
  * @return
  */
-@Operation(summary = "修改专辑信息")
+@Operation(summary = "更新专辑信息")
 @PutMapping("/albumInfo/updateAlbumInfo/{id}")
-public Result updateAlbumInfo(@PathVariable Long id, @RequestBody AlbumInfo albumInfo){
-    albumInfoService.updateAlbumInfo(albumInfo);
-    return Result.ok(albumInfo);
+public Result updateAlbumInfo(@PathVariable Long id, @Validated @RequestBody AlbumInfoVo albumInfoVo) {
+    albumInfoService.updateAlbumInfo(id, albumInfoVo);
+    return Result.ok();
 }
 ```
 
@@ -1607,40 +1605,48 @@ public Result updateAlbumInfo(@PathVariable Long id, @RequestBody AlbumInfo albu
 
 ```java
 /**
- * 修改专辑信息
- * @param albumInfo
+ * 更新专辑信息
+ * @param id
+ * @param albumInfoVo
  */
-void updateAlbumInfo(AlbumInfo albumInfo);
+void updateAlbumInfo(Long id, AlbumInfoVo albumInfoVo);
 ```
 
 **AlbumInfoServiceImpl实现类**
 
 ```java
 /**
- * 修改专辑信息
+ * 更新专辑信息
  *
- * @param albumInfo
+ * @param id
+ * @param albumInfoVo
  */
 @Override
 @Transactional(rollbackFor = Exception.class)
-public void updateAlbumInfo(AlbumInfo albumInfo) {
-    //1.修改专辑相关信息
+public void updateAlbumInfo(Long id, AlbumInfoVo albumInfoVo) {
+    //1.更新专辑信息 状态:未审核
+    AlbumInfo albumInfo = BeanUtil.copyProperties(albumInfoVo, AlbumInfo.class);
+    albumInfo.setId(id);
+    albumInfo.setStatus(ALBUM_STATUS_NO_PASS);
     albumInfoMapper.updateById(albumInfo);
-    Long albumId = albumInfo.getId();
-    //2.可能需要-修改专辑标签关系
-    //3.1 根据专辑ID删除专辑标签关系记录
-    LambdaQueryWrapper<AlbumAttributeValue> queryWrapper = new LambdaQueryWrapper<>();
-    queryWrapper.eq(AlbumAttributeValue::getAlbumId, albumId);
-    albumAttributeValueMapper.delete(queryWrapper);
-
-    //3.2 重新保存专辑标签关系
-    List<AlbumAttributeValue> albumAttributeValueVoList = albumInfo.getAlbumAttributeValueVoList();
-    if (CollectionUtil.isNotEmpty(albumAttributeValueVoList)) {
-        for (AlbumAttributeValue albumAttributeValue : albumAttributeValueVoList) {
-            albumAttributeValue.setAlbumId(albumId);
+
+    //2.更新专辑标签关系
+    //2.1 根据专辑ID删除原有标签关系
+    albumAttributeValueMapper.delete(
+            new LambdaQueryWrapper<AlbumAttributeValue>()
+                    .eq(AlbumAttributeValue::getAlbumId, id)
+    );
+
+    //2.2 从VO中获取提交专辑标签关系集合 再次批量保存
+    List<AlbumAttributeValueVo> albumAttributeValueVoList = albumInfoVo.getAlbumAttributeValueVoList();
+    if(CollUtil.isNotEmpty(albumAttributeValueVoList)){
+        //为专辑标签关联专辑ID,"批量"新增专辑标签关系
+        for (AlbumAttributeValueVo albumAttributeValueVo : albumAttributeValueVoList) {
+            AlbumAttributeValue albumAttributeValue = BeanUtil.copyProperties(albumAttributeValueVo, AlbumAttributeValue.class);
+            albumAttributeValue.setAlbumId(id);
             albumAttributeValueMapper.insert(albumAttributeValue);
         }
     }
-    //TODO 对修改后内容进行再次内容审核
+    //3.TODO 再次对内容进行审核
 }
 ```