Bladeren bron

add:添加平台方的曲目管理和专辑管理

liujunchi 3 jaren geleden
bovenliggende
commit
b948674fe2
22 gewijzigde bestanden met toevoegingen van 870 en 203 verwijderingen
  1. 107 32
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/MusicAlbumController.java
  2. 1 2
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/MusicSheetController.java
  3. 13 0
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/MusicTagController.java
  4. 16 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/MusicAlbumDao.java
  5. 15 5
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/MusicSheetDao.java
  6. 42 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/MusicAlbumDetailSearch.java
  7. 55 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/MusicAlbumSearch.java
  8. 31 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/MusicSheetSearch.java
  9. 21 14
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/MusicAlbum.java
  10. 90 117
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/MusicSheet.java
  11. 21 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/AlbumMusicRelateService.java
  12. 64 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/MusicAlbumService.java
  13. 10 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/MusicSheetService.java
  14. 8 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/MusicTagService.java
  15. 42 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/AlbumMusicRelateServiceImpl.java
  16. 102 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/MusicAlbumServiceImpl.java
  17. 12 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/MusicSheetServiceImpl.java
  18. 35 4
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/MusicTagServiceImpl.java
  19. 48 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/AlbumDetailVo.java
  20. 36 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/MusicAlbumVo.java
  21. 52 23
      cooleshow-user/user-biz/src/main/resources/config/mybatis/MusicAlbumMapper.xml
  22. 49 5
      cooleshow-user/user-biz/src/main/resources/config/mybatis/MusicSheetMapper.xml

+ 107 - 32
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/MusicAlbumController.java

@@ -1,12 +1,18 @@
 package com.yonge.cooleshow.admin.controller;
 
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+
 import javax.validation.Valid;
-import com.yonge.cooleshow.biz.dal.dto.MusicAlbumDto;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
+
+import com.yonge.cooleshow.biz.dal.dto.search.MusicAlbumDetailSearch;
+import com.yonge.cooleshow.biz.dal.dto.search.MusicAlbumSearch;
+import com.yonge.cooleshow.biz.dal.enums.StateEnum;
+import com.yonge.cooleshow.biz.dal.support.Condition;
+import com.yonge.cooleshow.biz.dal.vo.AlbumDetailVo;
+import com.yonge.cooleshow.biz.dal.vo.MusicAlbumVo;
+import com.yonge.cooleshow.common.page.PageInfo;
+import com.yonge.toolset.utils.string.StringUtil;
+import io.swagger.annotations.*;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -17,6 +23,8 @@ import com.yonge.cooleshow.biz.dal.service.MusicAlbumService;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
 
+import java.util.Date;
+
 /**
  * 专辑表 web 控制层
  * @author yzp
@@ -41,9 +49,10 @@ public class MusicAlbumController extends BaseController {
             return failed("用户信息获取失败");
         }
 
-        //musicAlbum.setCreateBy(sysUser.getId());
-        //musicAlbum.setCreateTime(new Date());
-        musicAlbumService.save(musicAlbum);
+        musicAlbum.setCreateBy(sysUser.getId());
+        musicAlbum.setCreateTime(new Date());
+        musicAlbum.setAlbumStatus(StateEnum.STOP);
+        musicAlbumService.createMusicAlbum(musicAlbum);
         return succeed();
     }
 
@@ -70,39 +79,105 @@ public class MusicAlbumController extends BaseController {
             return failed("缺少ID");
         }
 
-        //musicAlbum.setUpdateBy(sysUser.getId());
-        //musicAlbum.setUpdateTime(new Date());
-        musicAlbumService.updateById(musicAlbum);
+        musicAlbum.setUpdateBy(sysUser.getId());
+        musicAlbum.setUpdateTime(new Date());
+        musicAlbumService.updateMusicAlbum(musicAlbum);
         return succeed();
     }
 
     @ApiOperation(value = "分页查询", httpMethod="POST", consumes="application/json", produces="application/json")
     @PostMapping(value="/list", consumes="application/json", produces="application/json")
-    public HttpResponseResult<Object> list(@RequestBody MusicAlbumDto musicAlbumDto) {
+    public HttpResponseResult<PageInfo<MusicAlbumVo>> list(@RequestBody MusicAlbumSearch query) {
         SysUser sysUser = sysUserFeignService.queryUserInfo();
         if (sysUser == null) {
             return failed("用户信息获取失败");
         }
+        IPage<MusicAlbumVo> iPage = musicAlbumService.selectPage(Condition.getPage(query),query);
+        return succeed(Condition.pageInfo(iPage));
+    }
+
+    /**
+     * 启用/停用
+     */
+    @PostMapping("/state")
+    @ApiOperation(value = "启用/停用", notes = "传入id")
+    public HttpResponseResult<Boolean> state(@ApiParam(value = "专辑编号", required = true) @RequestParam Long id) {
+        if (StringUtil.isEmpty(id)) {
+            return failed("参数不能为空");
+        }
+        return status(musicAlbumService.state(id));
+    }
+
+
+    /**
+     * 专辑详情
+     */
+    @PostMapping("/detail")
+    @ApiOperation(value = "专辑详情", consumes="application/json", produces="application/json")
+    public HttpResponseResult<AlbumDetailVo> detail(@Valid @RequestBody MusicAlbumDetailSearch query) {
+
+        query.setType(2);
+        AlbumDetailVo albumDetailVo = musicAlbumService.detail(Condition.getPage(query),query);
+        return succeed(albumDetailVo);
+    }
+
+
+    /**
+     * 专辑详情能新增的曲目列表
+     */
+    @PostMapping("/detail/canAddMusicSheet")
+    @ApiOperation(value = "专辑详情能新增的曲目列表")
+    public HttpResponseResult<AlbumDetailVo> detailAddMusicSheet(@Valid @RequestBody MusicAlbumDetailSearch query) {
+
+        query.setType(1);
+        query.setState(StateEnum.ENABLE);
+        AlbumDetailVo albumDetailVo = musicAlbumService.detail(Condition.getPage(query),query);
+        return succeed(albumDetailVo);
+    }
+
+
+    /**
+     * 专辑详情删除曲目列表
+     */
+    @PostMapping("/detail/delMusicSheet")
+    @ApiOperation(value = "专辑详情删除曲目列表")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "albumId",value = "专辑编号ID", required = true, dataType = "Integer"),
+            @ApiImplicitParam(name = "musicSheetIds",value = "删除曲目编号,多个逗号隔开", required = true, dataType = "String")
+    })
+    public HttpResponseResult<Boolean> detailDelMusicSheet(Long albumId, String musicSheetIds) {
+        if (StringUtil.isEmpty(albumId)) {
+            return failed("专辑编号ID不能为空");
+        }
+        if (StringUtil.isEmpty(musicSheetIds)) {
+            return failed("曲目编号不能为空");
+        }
+        return status(musicAlbumService.delMusicSheet(albumId,musicSheetIds));
+    }
+
 
-        int pageNo = musicAlbumDto.getPageNo();
-        int pageSize = musicAlbumDto.getPageSize();
-
-        try {
-            if (pageNo==0) {
-                pageNo = 1;
-            }
-            if (pageSize==0) {
-                pageSize = 10;
-            }
-
-            LambdaQueryWrapper<MusicAlbum> lambdaQueryWrapper = Wrappers.lambdaQuery();
-            //lambdaQueryWrapper.like(MusicAlbum::getName , "k");
-
-            Page<MusicAlbum> page = new Page<>(pageNo,pageSize);
-            return succeed(musicAlbumService.page(page, lambdaQueryWrapper));
-        } catch (Exception e) {
-            e.printStackTrace();
-            return HttpResponseResult.failed(e.getMessage());
+
+    /**
+     * 专辑详情添加曲目列表
+     */
+    @PostMapping("/detail/addMusicSheet")
+    @ApiOperation(value = "专辑详情添加曲目列表")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "albumId",value = "专辑编号ID", required = true, dataType = "Integer"),
+            @ApiImplicitParam(name = "musicSheetIds",value = "添加曲目编号,多个逗号隔开", required = true, dataType = "String")
+    })
+    public HttpResponseResult<Boolean> detailAddMusicSheet(Long albumId, String musicSheetIds) {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null) {
+            return failed("用户信息获取失败");
         }
+        if (StringUtil.isEmpty(albumId)) {
+            return failed("专辑编号ID不能为空");
+        }
+        if (StringUtil.isEmpty(musicSheetIds)) {
+            return failed("曲目编号不能为空");
+        }
+        return status(musicAlbumService.addMusicSheet(albumId,musicSheetIds,sysUser.getId()));
     }
+
 }

+ 1 - 2
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/MusicSheetController.java

@@ -71,13 +71,12 @@ public class MusicSheetController extends BaseController {
             BeanUtils.copyProperties(musicSheetDto, musicSheet);
             musicSheet.setAuditStatus(AuditEnum.AUDITING);
             musicSheet.setCreateBy(sysUser.getId());
-            musicSheet.setUserId(sysUser.getId());
+            musicSheet.setUserId(0L);
             musicSheet.setCreateTime(new Date());
             musicSheet.setState(StateEnum.STOP);
             musicSheetService.save(musicSheet);
         }
 
-
         return succeed("新增曲谱成功");
 
     }

+ 13 - 0
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/MusicTagController.java

@@ -17,6 +17,8 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
+import java.util.List;
+
 @RestController
 @RequestMapping("/MusicTag")
 @Api(value = "音乐标签表", tags = "音乐标签表")
@@ -44,6 +46,17 @@ public class MusicTagController extends BaseController {
 		return succeed(Condition.pageInfo(pages));
 	}
 
+
+	/**
+	 * 查询分页tree
+	 */
+	@GetMapping("/tree")
+	@ApiOperation(value = "查询标签树列表", notes = "传入musicTag")
+	public HttpResponseResult<List<MusicTagVo>> tree() {
+		List<MusicTagVo> treeList = musicTagService.selectMusicTagTree();
+		return succeed(treeList);
+	}
+
     /**
 	 * 新增
 	 */

+ 16 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/MusicAlbumDao.java

@@ -1,14 +1,29 @@
 package com.yonge.cooleshow.biz.dal.dao;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.yonge.cooleshow.biz.dal.dto.search.MusicAlbumSearch;
 import com.yonge.cooleshow.biz.dal.entity.MusicAlbum;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.yonge.cooleshow.biz.dal.vo.MusicAlbumVo;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 /**
  * MusicAlbumDao数据库访问类
+ *
  * @author yzp
- * @date 2022-03-25 23:46:28
  * @version v1.0
+ * @date 2022-03-25 23:46:28
  **/
 public interface MusicAlbumDao extends BaseMapper<MusicAlbum> {
 
+    /**
+     * 专辑查询
+     *
+     * @param page  分页信息
+     * @param query 查询条件
+     * @return page
+     */
+    List<MusicAlbumVo> selectPage(@Param("page") IPage<MusicAlbumVo> page, @Param("query") MusicAlbumSearch query);
 }

+ 15 - 5
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/MusicSheetDao.java

@@ -1,21 +1,21 @@
 package com.yonge.cooleshow.biz.dal.dao;
 
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.yonge.cooleshow.biz.dal.dto.search.MusicAlbumDetailSearch;
 import com.yonge.cooleshow.biz.dal.dto.search.MusicSheetSearch;
-import com.yonge.cooleshow.biz.dal.dto.search.MusicTagSearch;
 import com.yonge.cooleshow.biz.dal.entity.MusicSheet;
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.yonge.cooleshow.biz.dal.vo.MusicSheetVo;
-import com.yonge.cooleshow.biz.dal.vo.MusicTagVo;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
 
 /**
  * MusicSheetDao数据库访问类
+ *
  * @author yzp
- * @date 2022-03-25 23:46:28
  * @version v1.0
+ * @date 2022-03-25 23:46:28
  **/
 public interface MusicSheetDao extends BaseMapper<MusicSheet> {
     /**
@@ -23,5 +23,15 @@ public interface MusicSheetDao extends BaseMapper<MusicSheet> {
      *
      * @return com.yonge.cooleshow.biz.dal.vo.MusicSheetVo
      */
-    List<MusicSheetVo> selectPage(@Param("page") IPage page, @Param("param") MusicSheetSearch query);
+    List<MusicSheetVo> selectPage(@Param("page") IPage<MusicSheetVo> page, @Param("param") MusicSheetSearch query);
+
+    /**
+     * 分页查询专辑详情里的曲目
+     *
+     * @param page  分页
+     * @param query 查询条件
+     * @return
+     */
+    List<MusicSheet> selectAlbumDetailPage(@Param("page") IPage<MusicSheet> page,
+                                           @Param("param") MusicAlbumDetailSearch query);
 }

+ 42 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/MusicAlbumDetailSearch.java

@@ -0,0 +1,42 @@
+package com.yonge.cooleshow.biz.dal.dto.search;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import javax.validation.constraints.NotNull;
+
+/**
+ * Description 专辑详情下的曲目查询
+ *
+ * @author liujunchi
+ * @date 2022-03-31
+ */
+@ApiModel(value = "MusicAlbumDetailSearch", description = "专辑详情查询")
+public class MusicAlbumDetailSearch extends MusicSheetSearch {
+
+    @NotNull(message = "专辑编号ID不能为空")
+    @ApiModelProperty("专辑编号ID")
+    private Long id;
+
+    /**
+     * 1:新增曲目,2:已有曲目
+     */
+    @ApiModelProperty(hidden = true,value = "1:新增曲目,2:已有曲目1:新增曲目,2:已有曲目")
+    private Integer type;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public Integer getType() {
+        return type;
+    }
+
+    public void setType(Integer type) {
+        this.type = type;
+    }
+}

+ 55 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/MusicAlbumSearch.java

@@ -0,0 +1,55 @@
+package com.yonge.cooleshow.biz.dal.dto.search;
+
+import com.yonge.cooleshow.biz.dal.support.Query;
+import com.yonge.toolset.utils.string.StringUtil;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import org.apache.commons.lang3.StringUtils;
+
+import java.util.List;
+
+/**
+ * Description 专辑查询
+ *
+ * @author: liujunchi
+ * @date: 2022-03-31
+ */
+@ApiModel(value = "MusicAlbumSearch", description = "专辑列表查询")
+public class MusicAlbumSearch extends Query {
+
+    @ApiModelProperty("专辑编号/名称")
+    private String idAndName;
+
+    @ApiModelProperty("标签id,多个逗号隔开")
+    private String albumTagIds;
+
+    @ApiModelProperty(hidden = true)
+    private List<Long> albumTagIdList;
+
+    public String getIdAndName() {
+        return idAndName;
+    }
+
+    public void setIdAndName(String idAndName) {
+        this.idAndName = idAndName;
+    }
+
+    public String getAlbumTagIds() {
+        return albumTagIds;
+    }
+
+    public void setAlbumTagIds(String albumTagIds) {
+        this.albumTagIds = albumTagIds;
+        if (StringUtils.isNotBlank(albumTagIds)) {
+            this.albumTagIdList = StringUtil.toLongList(albumTagIds);
+        }
+    }
+
+    public List<Long> getAlbumTagIdList() {
+        return albumTagIdList;
+    }
+
+    public void setAlbumTagIdList(List<Long> albumTagIdList) {
+        this.albumTagIdList = albumTagIdList;
+    }
+}

+ 31 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/MusicSheetSearch.java

@@ -2,8 +2,12 @@ package com.yonge.cooleshow.biz.dal.dto.search;
 
 import com.yonge.cooleshow.biz.dal.enums.StateEnum;
 import com.yonge.cooleshow.biz.dal.support.Query;
+import com.yonge.toolset.utils.string.StringUtil;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
+import org.apache.commons.lang3.StringUtils;
+
+import java.util.List;
 
 /**
  * Description
@@ -20,9 +24,14 @@ public class MusicSheetSearch  extends Query {
     @ApiModelProperty("标签id(多个逗号隔开)")
     private String musicTagIds;
 
+    @ApiModelProperty(hidden = true)
+    private List<Long> musicTagIdList;
+
     @ApiModelProperty("声部id(多个逗号隔开)")
     private String subjectIds;
 
+    @ApiModelProperty(hidden = true)
+    private List<Long> subjectIdList;
 
     @ApiModelProperty("曲目状态(0:停用,1:启用))")
     private StateEnum state;
@@ -35,12 +44,31 @@ public class MusicSheetSearch  extends Query {
         this.idAndName = idAndName;
     }
 
+    public List<Long> getMusicTagIdList() {
+        return musicTagIdList;
+    }
+
+    public void setMusicTagIdList(List<Long> musicTagIdList) {
+        this.musicTagIdList = musicTagIdList;
+    }
+
+    public List<Long> getSubjectIdList() {
+        return this.subjectIdList;
+    }
+
+    public void setSubjectIdList(List<Long> subjectIdList) {
+        this.subjectIdList = subjectIdList;
+    }
+
     public String getMusicTagIds() {
         return musicTagIds;
     }
 
     public void setMusicTagIds(String musicTagIds) {
         this.musicTagIds = musicTagIds;
+        if (StringUtils.isNotBlank(musicTagIds)) {
+            this.musicTagIdList = StringUtil.toLongList(musicTagIds);
+        }
     }
 
     public String getSubjectIds() {
@@ -49,6 +77,9 @@ public class MusicSheetSearch  extends Query {
 
     public void setSubjectIds(String subjectIds) {
         this.subjectIds = subjectIds;
+        if (StringUtils.isNotBlank(subjectIds)) {
+            this.subjectIdList = StringUtil.toLongList(subjectIds);
+        }
     }
 
     public StateEnum getState() {

+ 21 - 14
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/MusicAlbum.java

@@ -1,5 +1,7 @@
 package com.yonge.cooleshow.biz.dal.entity;
 
+import com.yonge.cooleshow.biz.dal.enums.StateEnum;
+import com.yonge.cooleshow.biz.dal.enums.YesOrNoEnum;
 import com.yonge.cooleshow.common.entity.BaseEntity;
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableField;
@@ -7,7 +9,8 @@ import com.baomidou.mybatisplus.annotation.TableId;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import org.apache.commons.lang3.builder.ToStringBuilder;
-import java.util.Date;
+
+import javax.validation.constraints.NotBlank;
 
 /**
  * 专辑表
@@ -23,24 +26,28 @@ public class MusicAlbum extends BaseEntity {
     private Long id;  //主键ID
 
     @TableField("album_name_")
-    @ApiModelProperty(value = "专辑名称")
+	@NotBlank(message = "专辑名称不能为空 ")
+    @ApiModelProperty(value = "专辑名称",required = true)
     private String albumName;  //专辑名称
 
     @TableField("album_desc_")
-    @ApiModelProperty(value = "专辑简介")
+	@NotBlank(message = "专辑简介不能为空 ")
+    @ApiModelProperty(value = "专辑简介",required = true)
     private String albumDesc;  //专辑简介
 
     @TableField("album_tag_")
-    @ApiModelProperty(value = "专辑标签(多个标签以逗号分开)")
+	@NotBlank(message = "专辑标签不能为空 ")
+    @ApiModelProperty(value = "专辑标签(多个标签以逗号分开)",required = true)
     private String albumTag;  //专辑标签(多个标签以逗号分开)
 
     @TableField("album_cover_url_")
-    @ApiModelProperty(value = "专辑封面图片URL")
+	@NotBlank(message = "专辑封面图片不能为空 ")
+    @ApiModelProperty(value = "专辑封面图片URL",required = true)
     private String albumCoverUrl;  //专辑封面图片URL
 
     @TableField("album_status_")
     @ApiModelProperty(value = "专辑状态(1:启用;0:停用)")
-    private Integer albumStatus;  //专辑状态(1:启用;0:停用)
+    private StateEnum albumStatus;  //专辑状态(1:启用;0:停用)
 
     @TableField("sort_number_")
     @ApiModelProperty(value = "排序号")
@@ -48,11 +55,11 @@ public class MusicAlbum extends BaseEntity {
 
     @TableField("hot_flag_")
     @ApiModelProperty(value = "是否热门专辑(1:是;0:否)")
-    private Integer hotFlag;  //是否热门专辑(1:是;0:否)
+    private YesOrNoEnum hotFlag;  //是否热门专辑(1:是;0:否)
 
     @TableField("top_flag_")
     @ApiModelProperty(value = "是否置顶(1:是;0:否)")
-    private Integer topFlag;  //是否置顶(1:是;0:否)
+    private YesOrNoEnum topFlag;  //是否置顶(1:是;0:否)
 
     @TableField("create_time_")
     @ApiModelProperty(value = "创建时间")
@@ -116,12 +123,12 @@ public class MusicAlbum extends BaseEntity {
 	    return this.albumCoverUrl;
 	}
 
-	public MusicAlbum setAlbumStatus(Integer albumStatus) {
+	public MusicAlbum setAlbumStatus(StateEnum albumStatus) {
 	    this.albumStatus = albumStatus;
 	    return this;
 	}
 
-	public Integer getAlbumStatus() {
+	public StateEnum getAlbumStatus() {
 	    return this.albumStatus;
 	}
 
@@ -134,21 +141,21 @@ public class MusicAlbum extends BaseEntity {
 	    return this.sortNumber;
 	}
 
-	public MusicAlbum setHotFlag(Integer hotFlag) {
+	public MusicAlbum setHotFlag(YesOrNoEnum hotFlag) {
 	    this.hotFlag = hotFlag;
 	    return this;
 	}
 
-	public Integer getHotFlag() {
+	public YesOrNoEnum getHotFlag() {
 	    return this.hotFlag;
 	}
 
-	public MusicAlbum setTopFlag(Integer topFlag) {
+	public MusicAlbum setTopFlag(YesOrNoEnum topFlag) {
 	    this.topFlag = topFlag;
 	    return this;
 	}
 
-	public Integer getTopFlag() {
+	public YesOrNoEnum getTopFlag() {
 	    return this.topFlag;
 	}
 

+ 90 - 117
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/MusicSheet.java

@@ -1,17 +1,20 @@
 package com.yonge.cooleshow.biz.dal.entity;
 
-import com.yonge.cooleshow.biz.dal.enums.*;
-import com.yonge.cooleshow.common.entity.BaseEntity;
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
+import com.yonge.cooleshow.biz.dal.enums.AuditEnum;
+import com.yonge.cooleshow.biz.dal.enums.ChargeTypeEnum;
+import com.yonge.cooleshow.biz.dal.enums.StateEnum;
+import com.yonge.cooleshow.biz.dal.enums.YesOrNoEnum;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
-import org.apache.commons.lang3.builder.ToStringBuilder;
 
 import javax.validation.constraints.NotBlank;
 import javax.validation.constraints.NotNull;
 import javax.validation.constraints.Size;
+import java.io.Serializable;
+import java.math.BigDecimal;
 import java.util.Date;
 
 /**
@@ -21,7 +24,7 @@ import java.util.Date;
  * @version v1.0
  **/
 @ApiModel(value = "music_sheet-曲谱表")
-public class MusicSheet extends BaseEntity {
+public class MusicSheet implements Serializable {
 
     @TableId(value = "id_", type = IdType.AUTO)
     @ApiModelProperty(value = "主键id")
@@ -134,234 +137,204 @@ public class MusicSheet extends BaseEntity {
     @ApiModelProperty(value = "备注")
     private String remark;  //备注,填写未通过审核的原因
 
-
-	public MusicSheet setId(Long id) {
-	    this.id = id;
-	    return this;
-	}
-
 	public Long getId() {
-	    return this.id;
+		return id;
 	}
 
-	public MusicSheet setMusicSheetName(String musicSheetName) {
-	    this.musicSheetName = musicSheetName;
-	    return this;
+	public void setId(Long id) {
+		this.id = id;
 	}
 
 	public String getMusicSheetName() {
-	    return this.musicSheetName;
+		return musicSheetName;
 	}
 
-	public MusicSheet setUserId(Long userId) {
-	    this.userId = userId;
-	    return this;
+	public void setMusicSheetName(String musicSheetName) {
+		this.musicSheetName = musicSheetName;
 	}
 
 	public Long getUserId() {
-	    return this.userId;
+		return userId;
 	}
 
-	public MusicSheet setComposer(String composer) {
-	    this.composer = composer;
-	    return this;
+	public void setUserId(Long userId) {
+		this.userId = userId;
 	}
 
 	public String getComposer() {
-	    return this.composer;
+		return composer;
 	}
 
-	public MusicSheet setMusicSubject(String musicSubject) {
-	    this.musicSubject = musicSubject;
-	    return this;
+	public void setComposer(String composer) {
+		this.composer = composer;
 	}
 
 	public String getMusicSubject() {
-	    return this.musicSubject;
+		return musicSubject;
 	}
 
-	public MusicSheet setAudioType(String audioType) {
-	    this.audioType = audioType;
-	    return this;
+	public void setMusicSubject(String musicSubject) {
+		this.musicSubject = musicSubject;
 	}
 
 	public String getAudioType() {
-	    return this.audioType;
+		return audioType;
 	}
 
-	public MusicSheet setMusicTag(String musicTag) {
-	    this.musicTag = musicTag;
-	    return this;
+	public void setAudioType(String audioType) {
+		this.audioType = audioType;
 	}
 
 	public String getMusicTag() {
-	    return this.musicTag;
+		return musicTag;
 	}
 
-	public MusicSheet setPlaySpeed(Integer playSpeed) {
-	    this.playSpeed = playSpeed;
-	    return this;
+	public void setMusicTag(String musicTag) {
+		this.musicTag = musicTag;
 	}
 
 	public Integer getPlaySpeed() {
-	    return this.playSpeed;
+		return playSpeed;
 	}
 
-	public MusicSheet setCanEvaluate(YesOrNoEnum canEvaluate) {
-	    this.canEvaluate = canEvaluate;
-	    return this;
+	public void setPlaySpeed(Integer playSpeed) {
+		this.playSpeed = playSpeed;
 	}
 
 	public YesOrNoEnum getCanEvaluate() {
-	    return this.canEvaluate;
+		return canEvaluate;
 	}
 
-	public MusicSheet setShowFingering(YesOrNoEnum showFingering) {
-	    this.showFingering = showFingering;
-	    return this;
+	public void setCanEvaluate(YesOrNoEnum canEvaluate) {
+		this.canEvaluate = canEvaluate;
 	}
 
 	public YesOrNoEnum getShowFingering() {
-	    return this.showFingering;
+		return showFingering;
 	}
 
-	public MusicSheet setChargeType(ChargeTypeEnum chargeType) {
-	    this.chargeType = chargeType;
-	    return this;
+	public void setShowFingering(YesOrNoEnum showFingering) {
+		this.showFingering = showFingering;
 	}
 
 	public ChargeTypeEnum getChargeType() {
-	    return this.chargeType;
+		return chargeType;
+	}
+
+	public void setChargeType(ChargeTypeEnum chargeType) {
+		this.chargeType = chargeType;
+	}
+
+	public StateEnum getState() {
+		return state;
 	}
 
-	public MusicSheet setAuditStatus(AuditEnum auditStatus) {
-	    this.auditStatus = auditStatus;
-	    return this;
+	public void setState(StateEnum state) {
+		this.state = state;
 	}
 
 	public AuditEnum getAuditStatus() {
-	    return this.auditStatus;
+		return auditStatus;
 	}
 
-	public MusicSheet setSortNumber(Integer sortNumber) {
-	    this.sortNumber = sortNumber;
-	    return this;
+	public void setAuditStatus(AuditEnum auditStatus) {
+		this.auditStatus = auditStatus;
 	}
 
 	public Integer getSortNumber() {
-	    return this.sortNumber;
+		return sortNumber;
 	}
 
-	public MusicSheet setTopFlag(YesOrNoEnum topFlag) {
-	    this.topFlag = topFlag;
-	    return this;
+	public void setSortNumber(Integer sortNumber) {
+		this.sortNumber = sortNumber;
 	}
 
 	public YesOrNoEnum getTopFlag() {
-	    return this.topFlag;
+		return topFlag;
 	}
 
-	public MusicSheet setHotFlag(YesOrNoEnum hotFlag) {
-	    this.hotFlag = hotFlag;
-	    return this;
+	public void setTopFlag(YesOrNoEnum topFlag) {
+		this.topFlag = topFlag;
 	}
 
 	public YesOrNoEnum getHotFlag() {
-	    return this.hotFlag;
+		return hotFlag;
 	}
 
-	public MusicSheet setMusicPrice(java.math.BigDecimal musicPrice) {
-	    this.musicPrice = musicPrice;
-	    return this;
+	public void setHotFlag(YesOrNoEnum hotFlag) {
+		this.hotFlag = hotFlag;
 	}
 
-	public java.math.BigDecimal getMusicPrice() {
-	    return this.musicPrice;
+	public BigDecimal getMusicPrice() {
+		return musicPrice;
 	}
 
-	public MusicSheet setAudioFileUrl(String audioFileUrl) {
-	    this.audioFileUrl = audioFileUrl;
-	    return this;
+	public void setMusicPrice(BigDecimal musicPrice) {
+		this.musicPrice = musicPrice;
 	}
 
 	public String getAudioFileUrl() {
-	    return this.audioFileUrl;
+		return audioFileUrl;
 	}
 
-	public MusicSheet setXmlFileUrl(String xmlFileUrl) {
-	    this.xmlFileUrl = xmlFileUrl;
-	    return this;
+	public void setAudioFileUrl(String audioFileUrl) {
+		this.audioFileUrl = audioFileUrl;
 	}
 
 	public String getXmlFileUrl() {
-	    return this.xmlFileUrl;
+		return xmlFileUrl;
 	}
 
-	public MusicSheet setHasBeat(YesOrNoEnum hasBeat) {
-	    this.hasBeat = hasBeat;
-	    return this;
+	public void setXmlFileUrl(String xmlFileUrl) {
+		this.xmlFileUrl = xmlFileUrl;
 	}
 
 	public YesOrNoEnum getHasBeat() {
-	    return this.hasBeat;
+		return hasBeat;
 	}
 
-	public MusicSheet setCreateTime(java.util.Date createTime) {
-	    this.createTime = createTime;
-	    return this;
+	public void setHasBeat(YesOrNoEnum hasBeat) {
+		this.hasBeat = hasBeat;
 	}
 
-	public java.util.Date getCreateTime() {
-	    return this.createTime;
+	public Date getCreateTime() {
+		return createTime;
 	}
 
-	public MusicSheet setCreateBy(Long createBy) {
-	    this.createBy = createBy;
-	    return this;
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
 	}
 
 	public Long getCreateBy() {
-	    return this.createBy;
+		return createBy;
 	}
 
-	public MusicSheet setUpdateTime(java.util.Date updateTime) {
-	    this.updateTime = updateTime;
-	    return this;
+	public void setCreateBy(Long createBy) {
+		this.createBy = createBy;
 	}
 
-	public java.util.Date getUpdateTime() {
-	    return this.updateTime;
+	public Date getUpdateTime() {
+		return updateTime;
 	}
 
-	public MusicSheet setUpdateBy(Long updateBy) {
-	    this.updateBy = updateBy;
-	    return this;
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
 	}
 
 	public Long getUpdateBy() {
-	    return this.updateBy;
+		return updateBy;
 	}
 
-	public MusicSheet setRemark(String remark) {
-	    this.remark = remark;
-	    return this;
+	public void setUpdateBy(Long updateBy) {
+		this.updateBy = updateBy;
 	}
 
 	public String getRemark() {
-	    return this.remark;
+		return remark;
 	}
 
-	public StateEnum getState() {
-		return state;
+	public void setRemark(String remark) {
+		this.remark = remark;
 	}
 
-	public void setState(StateEnum state) {
-		this.state = state;
-	}
-
-	@Override
-    public String toString() {
-        return ToStringBuilder.reflectionToString(this);
-    }
-
 }

+ 21 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/AlbumMusicRelateService.java

@@ -3,6 +3,8 @@ package com.yonge.cooleshow.biz.dal.service;
 import com.yonge.cooleshow.biz.dal.entity.AlbumMusicRelate;
 import com.baomidou.mybatisplus.extension.service.IService;
 
+import java.util.List;
+
 /**
  * AlbumMusicRelateService服务类
  * @author yzp
@@ -11,4 +13,23 @@ import com.baomidou.mybatisplus.extension.service.IService;
  **/
 public interface AlbumMusicRelateService extends IService<AlbumMusicRelate> {
 
+    /**
+     * 删除专辑关联曲目关系
+     *
+     * @param albumId 专辑第
+     * @param musicSheetIdList 曲目id集合
+     * @return boolean
+     */
+    boolean delMusicSheet(Long albumId, List<Long> musicSheetIdList);
+
+    /**
+     * 添加专辑关联曲目关系
+     *
+     * @param albumId 专辑第
+     * @param musicSheetIdList 曲目id集合
+     * @param userId 操作用户id
+     * @return boolean
+     */
+    boolean addMusicSheet(Long albumId, List<Long> musicSheetIdList, Long userId);
+
 }

+ 64 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/MusicAlbumService.java

@@ -1,7 +1,13 @@
 package com.yonge.cooleshow.biz.dal.service;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.yonge.cooleshow.biz.dal.dto.search.MusicAlbumDetailSearch;
+import com.yonge.cooleshow.biz.dal.dto.search.MusicAlbumSearch;
 import com.yonge.cooleshow.biz.dal.entity.MusicAlbum;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.yonge.cooleshow.biz.dal.entity.MusicSheet;
+import com.yonge.cooleshow.biz.dal.vo.AlbumDetailVo;
+import com.yonge.cooleshow.biz.dal.vo.MusicAlbumVo;
 
 /**
  * MusicAlbumService服务类
@@ -11,4 +17,62 @@ import com.baomidou.mybatisplus.extension.service.IService;
  **/
 public interface MusicAlbumService extends IService<MusicAlbum> {
 
+    /**
+     * 专辑查询
+     *
+     * @param page 分页信息
+     * @param query 查询条件
+     * @return page
+     */
+    IPage<MusicAlbumVo> selectPage(IPage<MusicAlbumVo> page, MusicAlbumSearch query);
+
+    /**
+     * 启用/停用 专辑
+     *
+     * @param id 专辑id
+     * @return
+     */
+    boolean state(Long id);
+
+    /**
+     * 专辑详情信息
+     *
+     * @param page 分页信息
+     * @param query 查询条件
+     * @return AlbumDetailVo
+     */
+    AlbumDetailVo detail(IPage<MusicSheet> page, MusicAlbumDetailSearch query);
+
+    /**
+     * 删除专辑详情关联曲目
+     *
+     * @param albumId 专辑id
+     * @param musicSheetIds 曲目id
+     * @return boolean
+     */
+    boolean delMusicSheet(Long albumId, String musicSheetIds);
+
+    /**
+     * 添加专辑详情关联曲目
+     *
+     * @param albumId 专辑id
+     * @param musicSheetIds 曲目id
+     * @param userId 操作用户id
+     * @return boolean
+     */
+    boolean addMusicSheet(Long albumId, String musicSheetIds, Long userId);
+
+    /**
+     * 创建专辑
+     *
+     * @param musicAlbum 专辑对象
+     */
+    void createMusicAlbum(MusicAlbum musicAlbum);
+
+    /**
+     * 修改专辑
+     *
+     * @param musicAlbum 专辑对象
+     */
+    void updateMusicAlbum(MusicAlbum musicAlbum);
 }

+ 10 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/MusicSheetService.java

@@ -3,6 +3,7 @@ package com.yonge.cooleshow.biz.dal.service;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.biz.dal.dto.MusicSheetDto;
+import com.yonge.cooleshow.biz.dal.dto.search.MusicAlbumDetailSearch;
 import com.yonge.cooleshow.biz.dal.dto.search.MusicSheetSearch;
 import com.yonge.cooleshow.biz.dal.entity.MusicSheet;
 import com.baomidou.mybatisplus.extension.service.IService;
@@ -39,4 +40,13 @@ public interface MusicSheetService extends IService<MusicSheet> {
      * @return boolean
      */
     boolean state(Long id);
+
+    /**
+     * 获取专辑详情曲目信息
+     *
+     * @param page 分页信息
+     * @param query 查询条件
+     * @return MusicSheet
+     */
+    IPage<MusicSheet> selectAlbumDetailPage(IPage<MusicSheet> page, MusicAlbumDetailSearch query);
 }

+ 8 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/MusicTagService.java

@@ -7,6 +7,8 @@ import com.yonge.cooleshow.biz.dal.dto.search.MusicTagSearch;
 import com.yonge.cooleshow.biz.dal.entity.MusicTag;
 import com.yonge.cooleshow.biz.dal.vo.MusicTagVo;
 
+import java.util.List;
+
 /**
  * 音乐标签表 服务类
  * @author liweifan
@@ -58,4 +60,10 @@ public interface MusicTagService extends IService<MusicTag>  {
 	 */
 	void updateMusicTag(MusicTagSaveDto musicTagSaveDto);
 
+	/**
+	 * 获取标签树
+	 *
+	 * @return list
+	 */
+    List<MusicTagVo> selectMusicTagTree();
 }

+ 42 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/AlbumMusicRelateServiceImpl.java

@@ -1,5 +1,6 @@
 package com.yonge.cooleshow.biz.dal.service.impl;
 
+import com.baomidou.mybatisplus.extension.service.additional.query.impl.LambdaQueryChainWrapper;
 import com.yonge.cooleshow.biz.dal.entity.AlbumMusicRelate;
 import com.yonge.cooleshow.biz.dal.dao.AlbumMusicRelateDao;
 import com.yonge.cooleshow.biz.dal.service.AlbumMusicRelateService;
@@ -8,6 +9,11 @@ import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Service;
 import org.springframework.beans.factory.annotation.Autowired;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.util.CollectionUtils;
+
+import java.util.Date;
+import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * AlbumMusicRelateService服务实现类
@@ -26,4 +32,40 @@ public class AlbumMusicRelateServiceImpl extends ServiceImpl<AlbumMusicRelateDao
     public AlbumMusicRelateDao getDao() {
         return albumMusicRelateDao;
     }
+
+    @Override
+    public boolean delMusicSheet(Long albumId, List<Long> musicSheetIdList) {
+        List<AlbumMusicRelate> list = this.lambdaQuery()
+                                          .eq(AlbumMusicRelate::getAlbumId, albumId)
+                                          .in(AlbumMusicRelate::getMusicSheetId, musicSheetIdList)
+                                          .list();
+        if (!CollectionUtils.isEmpty(list)) {
+            List<Long> albumMusicRelateIdList = list.stream().map(AlbumMusicRelate::getId).collect(Collectors.toList());
+            return this.removeByIds(albumMusicRelateIdList);
+        }
+        return true;
+    }
+
+    @Override
+    public boolean addMusicSheet(Long albumId, List<Long> musicSheetIdList, Long userId) {
+        List<AlbumMusicRelate> list = this.lambdaQuery()
+                                          .eq(AlbumMusicRelate::getAlbumId, albumId)
+                                          .in(AlbumMusicRelate::getMusicSheetId, musicSheetIdList)
+                                          .list();
+        List<Long> musicSheetIds = list.stream().map(AlbumMusicRelate::getMusicSheetId).collect(Collectors.toList());
+
+        // 去除已有的曲目
+        List<AlbumMusicRelate> albumMusicRelateList = musicSheetIdList.stream()
+                                                                      .filter(id -> !musicSheetIds.contains(id))
+                                                                      .map(id -> {
+            AlbumMusicRelate albumMusicRelate = new AlbumMusicRelate();
+            albumMusicRelate.setAlbumId(albumId);
+            albumMusicRelate.setMusicSheetId(id);
+            albumMusicRelate.setCreateTime(new Date());
+            albumMusicRelate.setCreateBy(userId);
+            return albumMusicRelate;
+        }).collect(Collectors.toList());
+
+        return this.saveBatch(albumMusicRelateList);
+    }
 }

+ 102 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/MusicAlbumServiceImpl.java

@@ -1,14 +1,31 @@
 package com.yonge.cooleshow.biz.dal.service.impl;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.additional.query.impl.LambdaQueryChainWrapper;
+import com.yonge.cooleshow.biz.dal.dto.search.MusicAlbumDetailSearch;
+import com.yonge.cooleshow.biz.dal.dto.search.MusicAlbumSearch;
 import com.yonge.cooleshow.biz.dal.entity.MusicAlbum;
 import com.yonge.cooleshow.biz.dal.dao.MusicAlbumDao;
+import com.yonge.cooleshow.biz.dal.entity.MusicSheet;
+import com.yonge.cooleshow.biz.dal.entity.MusicTag;
+import com.yonge.cooleshow.biz.dal.enums.StateEnum;
+import com.yonge.cooleshow.biz.dal.enums.YesOrNoEnum;
+import com.yonge.cooleshow.biz.dal.service.AlbumMusicRelateService;
 import com.yonge.cooleshow.biz.dal.service.MusicAlbumService;
+import com.yonge.cooleshow.biz.dal.service.MusicSheetService;
+import com.yonge.cooleshow.biz.dal.support.Condition;
+import com.yonge.cooleshow.biz.dal.vo.AlbumDetailVo;
+import com.yonge.cooleshow.biz.dal.vo.MusicAlbumVo;
+import com.yonge.cooleshow.common.exception.BizException;
+import com.yonge.toolset.utils.string.StringUtil;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Service;
 import org.springframework.beans.factory.annotation.Autowired;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 
+import java.util.List;
+
 /**
  * MusicAlbumService服务实现类
  * @author yzp
@@ -23,7 +40,92 @@ public class MusicAlbumServiceImpl extends ServiceImpl<MusicAlbumDao,MusicAlbum>
     @Autowired
     private MusicAlbumDao musicAlbumDao;
 
+    @Autowired
+    private AlbumMusicRelateService albumMusicRelateService;
+
+    @Autowired
+    private MusicSheetService musicSheetService;
+
     public MusicAlbumDao getDao() {
         return musicAlbumDao;
     }
+
+    @Override
+    public IPage<MusicAlbumVo> selectPage(IPage<MusicAlbumVo> page, MusicAlbumSearch query) {
+        return page.setRecords(baseMapper.selectPage(page,query));
+    }
+
+    @Override
+    public boolean state(Long id) {
+        MusicAlbum musicAlbum = this.getById(id);
+        if (musicAlbum == null) {
+            throw  new BizException("未找到专辑信息");
+        }
+        if (StateEnum.STOP.getCode().equals(musicAlbum.getAlbumStatus().getCode())) {
+            musicAlbum.setAlbumStatus(StateEnum.ENABLE);
+        } else {
+            musicAlbum.setAlbumStatus(StateEnum.STOP);
+        }
+        return this.updateById(musicAlbum);
+    }
+
+    @Override
+    public AlbumDetailVo detail(IPage<MusicSheet> page, MusicAlbumDetailSearch query) {
+        MusicAlbum musicAlbum = this.getById(query.getId());
+        if (musicAlbum == null) {
+            throw  new BizException("未找到专辑信息");
+        }
+        AlbumDetailVo albumDetailVo = new AlbumDetailVo();
+        albumDetailVo.setId(musicAlbum.getId());
+        albumDetailVo.setAlbumName(musicAlbum.getAlbumName());
+
+        IPage<MusicSheet> musicSheetVoIPage = musicSheetService.selectAlbumDetailPage(page,query);
+        albumDetailVo.setMusicSheetList(Condition.pageInfo(musicSheetVoIPage));
+        return albumDetailVo;
+    }
+
+    @Override
+    public boolean delMusicSheet(Long albumId, String musicSheetIds) {
+        MusicAlbum musicAlbum = this.getById(albumId);
+        if (musicAlbum == null) {
+            throw  new BizException("未找到专辑信息");
+        }
+        List<Long> musicSheetIdList = StringUtil.toLongList(musicSheetIds);
+        return albumMusicRelateService.delMusicSheet(albumId,musicSheetIdList);
+    }
+
+    @Override
+    public boolean addMusicSheet(Long albumId, String musicSheetIds, Long userId) {
+        MusicAlbum musicAlbum = this.getById(albumId);
+        if (musicAlbum == null) {
+            throw  new BizException("未找到专辑信息");
+        }
+        List<Long> musicSheetIdList = StringUtil.toLongList(musicSheetIds);
+        return albumMusicRelateService.addMusicSheet(albumId,musicSheetIdList,userId);
+    }
+
+    @Override
+    public void createMusicAlbum(MusicAlbum musicAlbum) {
+        if (checkNameRepeat(musicAlbum.getAlbumName(),musicAlbum.getId())) {
+            throw new BizException("专辑名称重复");
+        }
+        this.save(musicAlbum);
+    }
+
+    @Override
+    public void updateMusicAlbum(MusicAlbum musicAlbum) {
+        if (checkNameRepeat(musicAlbum.getAlbumName(),musicAlbum.getId())) {
+            throw new BizException("专辑名称重复");
+        }
+        this.updateById(musicAlbum);
+    }
+
+    private boolean checkNameRepeat(String albumName, Long id) {
+        LambdaQueryChainWrapper<MusicAlbum> eq = this.lambdaQuery()
+                                                   .eq(MusicAlbum::getAlbumName, albumName);
+        if (id != null) {
+            eq.ne(MusicAlbum::getId,id);
+        }
+        return eq.count() != 0;
+    }
 }

+ 12 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/MusicSheetServiceImpl.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.biz.dal.dao.MusicSheetAccompanimentDao;
 import com.yonge.cooleshow.biz.dal.dto.MusicSheetDto;
+import com.yonge.cooleshow.biz.dal.dto.search.MusicAlbumDetailSearch;
 import com.yonge.cooleshow.biz.dal.dto.search.MusicSheetSearch;
 import com.yonge.cooleshow.biz.dal.entity.MusicSheet;
 import com.yonge.cooleshow.biz.dal.dao.MusicSheetDao;
@@ -13,6 +14,7 @@ import com.yonge.cooleshow.biz.dal.enums.StateEnum;
 import com.yonge.cooleshow.biz.dal.service.MusicSheetAccompanimentService;
 import com.yonge.cooleshow.biz.dal.service.MusicSheetService;
 import com.yonge.cooleshow.biz.dal.vo.MusicSheetVo;
+import com.yonge.cooleshow.common.exception.BizException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.BeanUtils;
@@ -54,6 +56,8 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao,MusicSheet>
         musicSheet.setAuditStatus(AuditEnum.AUDITING);
         musicSheet.setCreateBy(sysUser.getId());
         musicSheet.setUserId(sysUser.getId());
+        musicSheet.setUserId(0L);
+        musicSheet.setState(StateEnum.STOP);
         musicSheet.setCreateTime(new Date());
         int count = musicSheetDao.insert(musicSheet);
 
@@ -75,6 +79,9 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao,MusicSheet>
     @Override
     public boolean state(Long id) {
         MusicSheet musicSheet = this.getById(id);
+        if (musicSheet == null) {
+            throw  new BizException("未找到曲目信息");
+        }
         if (StateEnum.STOP.getCode().equals(musicSheet.getState().getCode())) {
             musicSheet.setState(StateEnum.ENABLE);
         } else {
@@ -83,4 +90,9 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao,MusicSheet>
         return this.updateById(musicSheet);
 
     }
+
+    @Override
+    public IPage<MusicSheet> selectAlbumDetailPage(IPage<MusicSheet> page, MusicAlbumDetailSearch query) {
+        return page.setRecords(baseMapper.selectAlbumDetailPage(page, query));
+    }
 }

+ 35 - 4
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/MusicTagServiceImpl.java

@@ -16,13 +16,11 @@ import com.yonge.cooleshow.biz.dal.service.MusicTagService;
 import com.yonge.cooleshow.biz.dal.vo.MusicTagVo;
 import com.yonge.cooleshow.common.exception.BizException;
 import jodd.util.StringUtil;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
+import java.util.*;
 import java.util.stream.Collectors;
 
 
@@ -162,5 +160,38 @@ public class MusicTagServiceImpl extends ServiceImpl<MusicTagDao, MusicTag> impl
         this.updateById(musicTag);
     }
 
+    @Override
+    public List<MusicTagVo> selectMusicTagTree() {
+        List<MusicTag> list = this.lambdaQuery()
+                .eq(MusicTag::getDelFlag,YesOrNoEnum.NO.getCode())
+                .eq(MusicTag::getState,StateEnum.ENABLE.getCode())
+                .list();
+        if (list == null) {
+            return new ArrayList<>();
+        }
+        List<MusicTagVo> musicTagVoList = list.stream().map(musicTag -> {
+            MusicTagVo musicTagVo = new MusicTagVo();
+            BeanUtils.copyProperties(musicTag, musicTagVo);
+            return musicTagVo;
+        }).collect(Collectors.toList());
+
+        List<MusicTagVo> tree = new ArrayList<>();
+        for (MusicTagVo musicTagVo : musicTagVoList) {
+            if (musicTagVo.getParentTagId() == null || musicTagVo.getParentTagId() == 0) {
+                tree.add(musicTagVo);
+            }
+            for (MusicTagVo tagVo : musicTagVoList) {
+                if (tagVo.getParentTagId() != null && tagVo.getParentTagId() != 0
+                        && tagVo.getParentTagId().equals(musicTagVo.getId())) {
+                    if (musicTagVo.getChildren() == null) {
+                        musicTagVo.setChildren(new ArrayList<>());
+                    }
+                    musicTagVo.getChildren().add(tagVo);
+                }
+            }
+        }
+        return tree;
+    }
+
 
 }

+ 48 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/AlbumDetailVo.java

@@ -0,0 +1,48 @@
+package com.yonge.cooleshow.biz.dal.vo;
+
+import com.yonge.cooleshow.biz.dal.entity.MusicSheet;
+import com.yonge.cooleshow.common.page.PageInfo;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * Description 专辑详情展示信息
+ *
+ * @author: liujunchi
+ * @date: 2022-03-31
+ */
+public class AlbumDetailVo {
+
+    @ApiModelProperty(value = "主键id")
+    private Long id;
+
+    @ApiModelProperty(value = "专辑名称")
+    private String albumName;
+
+    @ApiModelProperty("专辑详情曲目")
+    private PageInfo<MusicSheet> musicSheetList;
+
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getAlbumName() {
+        return albumName;
+    }
+
+    public void setAlbumName(String albumName) {
+        this.albumName = albumName;
+    }
+
+    public PageInfo<MusicSheet> getMusicSheetList() {
+        return musicSheetList;
+    }
+
+    public void setMusicSheetList(PageInfo<MusicSheet> musicSheetList) {
+        this.musicSheetList = musicSheetList;
+    }
+}

+ 36 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/MusicAlbumVo.java

@@ -0,0 +1,36 @@
+package com.yonge.cooleshow.biz.dal.vo;
+
+import com.yonge.cooleshow.biz.dal.entity.MusicAlbum;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * Description 专辑查询展示
+ *
+ * @author: liujunchi
+ * @date: 2022-03-31
+ */
+public class MusicAlbumVo extends MusicAlbum {
+
+    @ApiModelProperty("教材标签")
+    private String musicTagNames;
+
+    @ApiModelProperty("曲目数量")
+    private Integer musicSheetCount;
+
+
+    public String getMusicTagNames() {
+        return musicTagNames;
+    }
+
+    public void setMusicTagNames(String musicTagNames) {
+        this.musicTagNames = musicTagNames;
+    }
+
+    public Integer getMusicSheetCount() {
+        return musicSheetCount;
+    }
+
+    public void setMusicSheetCount(Integer musicSheetCount) {
+        this.musicSheetCount = musicSheetCount;
+    }
+}

+ 52 - 23
cooleshow-user/user-biz/src/main/resources/config/mybatis/MusicAlbumMapper.xml

@@ -1,28 +1,57 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 
-    "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.yonge.cooleshow.biz.dal.dao.MusicAlbumDao">
+    <resultMap id="BaseResultMap" type="com.yonge.cooleshow.biz.dal.entity.MusicAlbum">
+        <id column="id_" jdbcType="BIGINT" property="id"/>
+        <result column="album_name_" jdbcType="VARCHAR" property="albumName"/>
+        <result column="album_desc_" jdbcType="VARCHAR" property="albumDesc"/>
+        <result column="album_tag_" jdbcType="VARCHAR" property="albumTag"/>
+        <result column="album_cover_url_" jdbcType="VARCHAR" property="albumCoverUrl"/>
+        <result column="album_status_" jdbcType="TINYINT" property="albumStatus"/>
+        <result column="sort_number_" jdbcType="INTEGER" property="sortNumber"/>
+        <result column="hot_flag_" jdbcType="TINYINT" property="hotFlag"/>
+        <result column="top_flag_" jdbcType="TINYINT" property="topFlag"/>
+        <result column="create_time_" jdbcType="TIMESTAMP" property="createTime"/>
+        <result column="create_by_" jdbcType="BIGINT" property="createBy"/>
+        <result column="update_time_" jdbcType="TIMESTAMP" property="updateTime"/>
+        <result column="update_by_" jdbcType="BIGINT" property="updateBy"/>
+    </resultMap>
 
-	<resultMap id="BaseResultMap" type="com.yonge.cooleshow.biz.dal.entity.MusicAlbum">
-	     <id column="id_" jdbcType="BIGINT" property="id" />
-		 <result column="album_name_" jdbcType="VARCHAR" property="albumName" />
-		 <result column="album_desc_" jdbcType="VARCHAR" property="albumDesc" />
-		 <result column="album_tag_" jdbcType="VARCHAR" property="albumTag" />
-		 <result column="album_cover_url_" jdbcType="VARCHAR" property="albumCoverUrl" />
-		 <result column="album_status_" jdbcType="TINYINT" property="albumStatus" />
-		 <result column="sort_number_" jdbcType="INTEGER" property="sortNumber" />
-		 <result column="hot_flag_" jdbcType="TINYINT" property="hotFlag" />
-		 <result column="top_flag_" jdbcType="TINYINT" property="topFlag" />
-		 <result column="create_time_" jdbcType="TIMESTAMP" property="createTime" />
-		 <result column="create_by_" jdbcType="BIGINT" property="createBy" />
-		 <result column="update_time_" jdbcType="TIMESTAMP" property="updateTime" />
-		 <result column="update_by_" jdbcType="BIGINT" property="updateBy" />
-	</resultMap>
-
-	<sql id="Base_Column_List">
-		id_, album_name_, album_desc_, album_tag_, album_cover_url_, album_status_, sort_number_, hot_flag_, top_flag_, create_time_, create_by_, update_time_, update_by_
-	</sql>
-
-
+    <sql id="Base_Column_List">
+        t.id_,
+        t.album_name_,
+        t.album_desc_,
+        t.album_tag_,
+        t.album_cover_url_,
+        t.album_status_,
+        t.sort_number_,
+        t.hot_flag_,
+        t.top_flag_,
+        t.create_time_,
+        t.create_by_,
+        t.update_time_,
+        t.update_by_
+    </sql>
 
+    <select id="selectPage" resultType="com.yonge.cooleshow.biz.dal.vo.MusicAlbumVo">
+        select <include refid="Base_Column_List"/>
+        ,(select group_concat(mt.name_) from music_tag mt
+            where find_in_set(mt.id_,t.album_tag_) and mt.del_flag_ = 0) as musicTagNames
+        , t1.num as musicSheetCount
+        from music_album t
+        left join (select count(1) as num,amr.album_id_ from album_music_relate amr group by amr.album_id_) t1 on t1.album_id_ = t.id_
+        <where>
+            <if test="query.idAndName != null and query.idAndName != ''">
+                and (t.id_ like concat('%',#{query.idAndName},'%') or
+                    t.album_name_ like concat('%',#{query.idAndName},'%'))
+            </if>
+            <if test="query.albumTagIdList != null and query.albumTagIdList != ''">
+                and
+                <foreach collection="query.albumTagIdList" separator="and" item="item">
+                    find_in_set(#{item},t.album_tag_)
+                </foreach>
+            </if>
+        </where>
+    </select>
 </mapper>

+ 49 - 5
cooleshow-user/user-biz/src/main/resources/config/mybatis/MusicSheetMapper.xml

@@ -60,23 +60,67 @@
     <select id="selectPage" resultType="com.yonge.cooleshow.biz.dal.vo.MusicSheetVo">
         select <include refid="Base_Column_List"/>
         ,su.username_ as addName
-        ,(select group_concat(mt.name_,',') from music_tag mt where mt.id_ in ( t.music_tag_) and mt.del_flag_ = 0) as musicTagNames
-        ,(select group_concat(s.name_,',') from subject s where s.id_ in ( t.music_subject_ )) as subjectNames
+        ,(select group_concat(mt.name_) from music_tag mt
+            where find_in_set(mt.id_,t.music_tag_) and mt.del_flag_ = 0) as musicTagNames
+        ,(select group_concat(s.name_) from subject s where find_in_set(s.id_,t.music_subject_) ) as subjectNames
         from music_sheet t
         left join sys_user su on t.create_by_ = su.id_
         <where>
             <if test="param.idAndName != null and param.idAndName != ''">
-                and t.id_ like concat('%',#{param.idAndName},'%')
+                and (t.id_ like concat('%',#{param.idAndName},'%') or
+                t.music_sheet_name_ like concat('%',#{param.idAndName},'%'))
             </if>
             <if test="param.musicTagIds != null and param.musicTagIds != ''">
-                and t.music_tag_ like concat('%',#{param.musicTagIds},'%')
+                and
+                <foreach collection="param.musicTagIdList" separator="and" item="item">
+                    find_in_set(#{item},t.music_tag_)
+                </foreach>
             </if>
             <if test="param.subjectIds != null and param.subjectIds != ''">
-                and t.music_subject_ like concat('%',#{param.subjectIds},'%')
+                and
+                <foreach collection="param.subjectIdList" separator="and" item="item">
+                    find_in_set(#{item},t.music_subject_)
+                </foreach>
             </if>
             <if test="param.state != null">
                 and t.state_ = #{param.state}
             </if>
         </where>
     </select>
+
+    <select id="selectAlbumDetailPage" resultType="com.yonge.cooleshow.biz.dal.entity.MusicSheet">
+        select <include refid="Base_Column_List"/>
+        from music_sheet t
+        left join album_music_relate amr on t.id_ = amr.music_sheet_id_
+        <where>
+            <if test="param.idAndName != null and param.idAndName != ''">
+                and (t.id_ like concat('%',#{param.idAndName},'%') or
+                t.music_sheet_name_ like concat('%',#{param.idAndName},'%'))
+            </if>
+            <if test="param.musicTagIds != null and param.musicTagIds != ''">
+                and
+                <foreach collection="param.musicTagIdList" separator="and" item="item">
+                    find_in_set(#{item},t.music_tag_)
+                </foreach>
+            </if>
+            <if test="param.subjectIds != null and param.subjectIds != ''">
+                and
+                <foreach collection="param.subjectIdList" separator="and" item="item">
+                    find_in_set(#{item},t.music_subject_)
+                </foreach>
+            </if>
+            <if test="param.state != null">
+                and t.state_ = #{param.state}
+            </if>
+            <if test="param.id != null">
+                <if test="param.type == 2">
+                    and amr.album_id_ = #{param.id}
+                    order by amr.create_time_
+                </if>
+                <if test="param.type == 1">
+                    and (amr.album_id_ &lt;&gt;  #{param.id} or amr.album_id_ is null)
+                </if>
+            </if>
+        </where>
+    </select>
 </mapper>