第二次课程提交 (2)
This commit is contained in:
parent
c282d5ff1f
commit
6b0d3c13e8
|
@ -3,15 +3,19 @@ package com.atguigu.tingshu.album.api;
|
|||
import com.atguigu.tingshu.album.service.AlbumInfoService;
|
||||
import com.atguigu.tingshu.common.result.Result;
|
||||
import com.atguigu.tingshu.common.util.AuthContextHolder;
|
||||
import com.atguigu.tingshu.model.album.AlbumInfo;
|
||||
import com.atguigu.tingshu.query.album.AlbumInfoQuery;
|
||||
import com.atguigu.tingshu.vo.album.AlbumInfoVo;
|
||||
import com.atguigu.tingshu.vo.album.AlbumListVo;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Tag(name = "专辑管理")
|
||||
@RestController
|
||||
|
@ -32,6 +36,48 @@ public class AlbumInfoApiController {
|
|||
|
||||
}
|
||||
|
||||
//这个是在登录到专辑页面的时候,会调用这个接口,获取当前登录用户的专辑信息
|
||||
@Operation(summary = "分页条件查询当前登录用户发布专辑")
|
||||
@PostMapping("/albumInfo/findUserAlbumPage/{page}/{limit}")
|
||||
public Result<IPage<AlbumListVo>> findUserAlbumPage(@PathVariable Long page,
|
||||
@PathVariable Long limit,
|
||||
@RequestBody AlbumInfoQuery albumInfoQuery){
|
||||
//先从线程中取出来用户id
|
||||
Long userId = AuthContextHolder.getUserId();
|
||||
//将用户id放进到查询条件中
|
||||
albumInfoQuery.setUserId(userId);
|
||||
//new一个新的pageInfo对象 用来封装数据
|
||||
IPage<AlbumListVo> pageInfo = new Page<>(page, limit);
|
||||
pageInfo =albumInfoService.findUserAlbumPage(pageInfo, albumInfoQuery);
|
||||
return Result.ok(pageInfo);
|
||||
}
|
||||
|
||||
@Operation(summary = "根据专辑ID删除专辑")
|
||||
@DeleteMapping("/albumInfo/removeAlbumInfo/{id}")
|
||||
public Result removeAlbumInfo(@PathVariable Long id) {
|
||||
albumInfoService.removeAlbumInfo(id);
|
||||
return Result.ok();
|
||||
}
|
||||
/**
|
||||
* 查询专辑信息,包含专辑标签列表
|
||||
*
|
||||
* @param id
|
||||
* @return
|
||||
*/
|
||||
@Operation(summary = "查询专辑信息,包含专辑标签列表")
|
||||
@GetMapping("/albumInfo/getAlbumInfo/{id}")
|
||||
public Result<AlbumInfo> getAlbumInfo(@PathVariable Long id) {
|
||||
AlbumInfo albumInfo = albumInfoService.getAlbumInfo(id);
|
||||
return Result.ok(albumInfo);
|
||||
}
|
||||
@Operation(summary = "更新专辑信息")
|
||||
@PutMapping("/albumInfo/updateAlbumInfo/{id}")
|
||||
public Result updateAlbumInfo(@PathVariable Long id, @Validated @RequestBody AlbumInfoVo albumInfoVo) {
|
||||
albumInfoService.updateAlbumInfo(id, albumInfoVo);
|
||||
return Result.ok();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -1,10 +1,15 @@
|
|||
package com.atguigu.tingshu.album.mapper;
|
||||
|
||||
import com.atguigu.tingshu.model.album.AlbumInfo;
|
||||
import com.atguigu.tingshu.query.album.AlbumInfoQuery;
|
||||
import com.atguigu.tingshu.vo.album.AlbumListVo;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
@Mapper
|
||||
public interface AlbumInfoMapper extends BaseMapper<AlbumInfo> {
|
||||
|
||||
IPage<AlbumListVo> findUserAlbumPage(IPage<AlbumListVo> pageInfo, @Param("vo")AlbumInfoQuery albumInfoQuery);
|
||||
}
|
||||
|
|
|
@ -1,7 +1,10 @@
|
|||
package com.atguigu.tingshu.album.service;
|
||||
|
||||
import com.atguigu.tingshu.model.album.AlbumInfo;
|
||||
import com.atguigu.tingshu.query.album.AlbumInfoQuery;
|
||||
import com.atguigu.tingshu.vo.album.AlbumInfoVo;
|
||||
import com.atguigu.tingshu.vo.album.AlbumListVo;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
|
||||
public interface AlbumInfoService extends IService<AlbumInfo> {
|
||||
|
@ -11,4 +14,13 @@ public interface AlbumInfoService extends IService<AlbumInfo> {
|
|||
void saveAlbumInfo(AlbumInfoVo albumInfoVo, Long userId);
|
||||
//保存专辑的状态
|
||||
void saveAlbumInfoStat(Long albumId, String statType, int statNum);
|
||||
|
||||
|
||||
IPage<AlbumListVo> findUserAlbumPage(IPage<AlbumListVo> pageInfo, AlbumInfoQuery albumInfoQuery);
|
||||
|
||||
void removeAlbumInfo(Long id);
|
||||
|
||||
AlbumInfo getAlbumInfo(Long id);
|
||||
|
||||
void updateAlbumInfo(Long id, AlbumInfoVo albumInfoVo);
|
||||
}
|
||||
|
|
|
@ -4,14 +4,22 @@ import cn.hutool.core.bean.BeanUtil;
|
|||
import cn.hutool.core.collection.CollUtil;
|
||||
import com.atguigu.tingshu.album.mapper.AlbumInfoMapper;
|
||||
import com.atguigu.tingshu.album.mapper.AlbumStatMapper;
|
||||
import com.atguigu.tingshu.album.mapper.TrackInfoMapper;
|
||||
import com.atguigu.tingshu.album.service.AlbumAttributeValueService;
|
||||
import com.atguigu.tingshu.album.service.AlbumInfoService;
|
||||
import com.atguigu.tingshu.common.constant.SystemConstant;
|
||||
import com.atguigu.tingshu.common.execption.GuiguException;
|
||||
import com.atguigu.tingshu.model.album.AlbumAttributeValue;
|
||||
import com.atguigu.tingshu.model.album.AlbumInfo;
|
||||
import com.atguigu.tingshu.model.album.AlbumStat;
|
||||
import com.atguigu.tingshu.model.album.TrackInfo;
|
||||
import com.atguigu.tingshu.query.album.AlbumInfoQuery;
|
||||
import com.atguigu.tingshu.vo.album.AlbumAttributeValueVo;
|
||||
import com.atguigu.tingshu.vo.album.AlbumInfoVo;
|
||||
import com.atguigu.tingshu.vo.album.AlbumListVo;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
|
@ -33,6 +41,8 @@ public class AlbumInfoServiceImpl extends ServiceImpl<AlbumInfoMapper, AlbumInfo
|
|||
|
||||
@Autowired
|
||||
private AlbumStatMapper albumStatMapper;
|
||||
@Autowired
|
||||
private TrackInfoMapper trackInfoMapper;
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
|
@ -85,4 +95,82 @@ public class AlbumInfoServiceImpl extends ServiceImpl<AlbumInfoMapper, AlbumInfo
|
|||
albumStat.setStatNum(statNum);
|
||||
albumStatMapper.insert(albumStat);
|
||||
}
|
||||
|
||||
@Override
|
||||
public IPage<AlbumListVo> findUserAlbumPage(IPage<AlbumListVo> pageInfo, AlbumInfoQuery albumInfoQuery) {
|
||||
return albumInfoMapper.findUserAlbumPage(pageInfo, albumInfoQuery);
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeAlbumInfo(Long id) {
|
||||
Long count = trackInfoMapper.selectCount(new LambdaQueryWrapper<TrackInfo>()
|
||||
.eq(TrackInfo::getAlbumId, id));
|
||||
|
||||
if (count>0){
|
||||
throw new GuiguException(500,"专辑下有声音,请先删除专辑下的声音");
|
||||
}
|
||||
//2.删除专辑
|
||||
albumInfoMapper.deleteById(id);
|
||||
|
||||
//3.删除专辑统计
|
||||
albumStatMapper.delete(
|
||||
new LambdaQueryWrapper<AlbumStat>()
|
||||
.eq(AlbumStat::getAlbumId, id)
|
||||
);
|
||||
|
||||
//4.删除专辑标签关系
|
||||
albumAttributeValueService.remove(
|
||||
new LambdaQueryWrapper<AlbumAttributeValue>()
|
||||
.eq(AlbumAttributeValue::getAlbumId, id)
|
||||
);
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public AlbumInfo getAlbumInfo(Long id) {
|
||||
//1.根据专辑ID查询专辑信息
|
||||
AlbumInfo albumInfo = albumInfoMapper.selectById(id);
|
||||
|
||||
//2.根据专辑ID查询专辑标签列表
|
||||
List<AlbumAttributeValue> albumAttributeValues = albumAttributeValueService.list(
|
||||
new LambdaQueryWrapper<AlbumAttributeValue>()
|
||||
.eq(AlbumAttributeValue::getAlbumId, id)
|
||||
);
|
||||
albumInfo.setAlbumAttributeValueVoList(albumAttributeValues);
|
||||
return albumInfo;
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void updateAlbumInfo(Long id, AlbumInfoVo albumInfoVo) { //1.更新专辑信息
|
||||
AlbumInfo albumInfo = BeanUtil.copyProperties(albumInfoVo, AlbumInfo.class);
|
||||
albumInfo.setId(id);
|
||||
albumInfoMapper.updateById(albumInfo);
|
||||
|
||||
//2.更新专辑标签关系
|
||||
//2.1 根据专辑ID删除原有专辑标签关系
|
||||
albumAttributeValueService.remove(
|
||||
new LambdaQueryWrapper<AlbumAttributeValue>()
|
||||
.eq(AlbumAttributeValue::getAlbumId, id)
|
||||
);
|
||||
//2.2 如果有新提交专辑标签关系再次进行新增即可
|
||||
List<AlbumAttributeValueVo> albumAttributeValueVoList = albumInfoVo.getAlbumAttributeValueVoList();
|
||||
if (CollUtil.isNotEmpty(albumAttributeValueVoList)) {
|
||||
//2.1 将集合泛型从AlbumAttributeValueVo转为AlbumAttributeValue
|
||||
List<AlbumAttributeValue> attributeValueList = albumAttributeValueVoList
|
||||
.stream()
|
||||
.map(vo -> {
|
||||
AlbumAttributeValue albumAttributeValue = BeanUtil.copyProperties(vo, AlbumAttributeValue.class);
|
||||
//2.2 为每个专辑标签关系 关联 专辑ID
|
||||
albumAttributeValue.setAlbumId(id);
|
||||
return albumAttributeValue;
|
||||
}).collect(Collectors.toList());
|
||||
//2.3 批量保存
|
||||
albumAttributeValueService.saveBatch(attributeValueList);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -3,7 +3,35 @@
|
|||
|
||||
|
||||
<mapper namespace="com.atguigu.tingshu.album.mapper.AlbumInfoMapper">
|
||||
|
||||
<select id="findUserAlbumPage" resultType="com.atguigu.tingshu.vo.album.AlbumListVo">
|
||||
select
|
||||
ai.id album_id,
|
||||
ai.album_title,
|
||||
ai.cover_url,
|
||||
ai.include_track_count,
|
||||
ai.is_finished,
|
||||
ai.status,
|
||||
sum(if(stat_type = '0401', stat_num, 0)) playStatNum,
|
||||
max(if(stat_type = '0402', stat_num, 0)) subscribeSta,
|
||||
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>
|
||||
<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}, '%')
|
||||
</if>
|
||||
and ai.is_deleted = 0
|
||||
</where>
|
||||
group by ai.id
|
||||
order by ai.id desc
|
||||
</select>
|
||||
|
||||
|
||||
</mapper>
|
||||
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Loading…
Reference in New Issue