|
@@ -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 再次对内容进行审核
|
|
|
}
|
|
|
```
|