فهرست منبع

Merge remote-tracking branch 'origin/master'

weifanli 3 سال پیش
والد
کامیت
b8f6cc55fb
40فایلهای تغییر یافته به همراه1595 افزوده شده و 78 حذف شده
  1. 22 2
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/MusicSheetController.java
  2. 11 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/MusicAlbumDao.java
  3. 47 2
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/MusicSheetDao.java
  4. 40 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/MusicSheetPracticeRecordDao.java
  5. 0 33
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/MusicSheetDto.java
  6. 2 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/MusicAlbumDetailSearch.java
  7. 12 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/MusicAlbumSearch.java
  8. 14 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/MusicSheetPracticeRecordSearch.java
  9. 23 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/MusicSheetSearch.java
  10. 25 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/StudentMusicAlbumSearch.java
  11. 25 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/StudentMusicSheetSearch.java
  12. 5 9
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/MusicSheet.java
  13. 69 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/MusicSheetPracticeRecord.java
  14. 43 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/AudioTypeEnum.java
  15. 10 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/AlbumFavoriteService.java
  16. 29 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/MusicAlbumService.java
  17. 10 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/MusicFavoriteService.java
  18. 48 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/MusicSheetPracticeRecordService.java
  19. 9 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/MusicSheetPurchaseRecordService.java
  20. 67 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/MusicSheetService.java
  21. 11 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/AlbumFavoriteServiceImpl.java
  22. 48 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/MusicAlbumServiceImpl.java
  23. 12 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/MusicFavoriteServiceImpl.java
  24. 48 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/MusicSheetPracticeRecordServiceImpl.java
  25. 11 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/MusicSheetPurchaseRecordServiceImpl.java
  26. 126 11
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/MusicSheetServiceImpl.java
  27. 5 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/MusicTagServiceImpl.java
  28. 34 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/AlbumDetailVo.java
  29. 11 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/MusicAlbumVo.java
  30. 40 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/MusicSheetDetailVo.java
  31. 14 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/MusicSheetPracticeRecordVo.java
  32. 60 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/MusicSheetShareVo.java
  33. 23 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/MusicSheetVo.java
  34. 35 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/MusicAlbumMapper.xml
  35. 167 19
      cooleshow-user/user-biz/src/main/resources/config/mybatis/MusicSheetMapper.xml
  36. 36 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/MusicSheetPracticeRecordMapper.xml
  37. 106 0
      cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/MusicAlbumController.java
  38. 141 0
      cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/MusicSheetController.java
  39. 122 0
      cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/MusicSheetController.java
  40. 34 0
      cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/MusicTagController.java

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

@@ -3,14 +3,17 @@ package com.yonge.cooleshow.admin.controller;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
+import com.yonge.cooleshow.auth.api.enums.SysUserType;
 import com.yonge.cooleshow.biz.dal.dto.MusicSheetDto;
 import com.yonge.cooleshow.biz.dal.dto.search.MusicSheetSearch;
 import com.yonge.cooleshow.biz.dal.entity.MusicSheet;
 import com.yonge.cooleshow.biz.dal.entity.MusicSheetAccompaniment;
+import com.yonge.cooleshow.biz.dal.enums.AudioTypeEnum;
 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.service.MusicSheetService;
+import com.yonge.cooleshow.biz.dal.vo.MusicSheetDetailVo;
 import com.yonge.cooleshow.biz.dal.support.PageUtil;
 import com.yonge.cooleshow.biz.dal.vo.MusicSheetVo;
 import com.yonge.cooleshow.common.controller.BaseController;
@@ -45,6 +48,20 @@ public class MusicSheetController extends BaseController {
 	@Autowired
 	private MusicSheetService musicSheetService;
 
+
+    /**
+     * 查询单条
+     */
+    @GetMapping("/detail/{id}")
+    @ApiOperation(value = "详情", notes = "传入musicTag")
+    public HttpResponseResult<MusicSheetDetailVo> detail(@ApiParam(value = "曲谱编号", required = true) @PathVariable("id") Long id) {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null) {
+            return failed("用户信息获取失败");
+        }
+        return succeed(musicSheetService.detail(id, sysUser, SysUserType.SYSTEM));
+    }
+
 	@ApiOperation(value = "新增", httpMethod="POST", consumes="application/json", produces="application/json")
     @PostMapping(value="/create", consumes="application/json", produces="application/json")
     public HttpResponseResult<Object> create(@Valid @RequestBody MusicSheetDto musicSheetDto) {
@@ -57,9 +74,13 @@ public class MusicSheetController extends BaseController {
                 && musicSheetDto.getMusicPrice()==null){
             return failed("此曲谱为收费曲谱,需要提供价格");
         }
+        if (StringUtil.isEmpty(musicSheetDto.getMusicSubject())) {
+            return failed("曲目声部不能为空");
+        }
 
+        musicSheetDto.setUserId(0L);
         List<MusicSheetAccompaniment> list;
-        if (!musicSheetDto.getAudioType().equalsIgnoreCase("midi")){
+        if (!AudioTypeEnum.MIDI.getCode().equals(musicSheetDto.getAudioType().getCode())){
             list = musicSheetDto.getBackground();
             if (CollectionUtils.isEmpty(list)){
                 return failed("mp3音频文件对应的主音或者伴奏文件没有提供");
@@ -70,7 +91,6 @@ public class MusicSheetController extends BaseController {
             BeanUtils.copyProperties(musicSheetDto, musicSheet);
             musicSheet.setAuditStatus(AuditEnum.AUDITING);
             musicSheet.setCreateBy(sysUser.getId());
-            musicSheet.setUserId(0L);
             musicSheet.setCreateTime(new Date());
             musicSheet.setState(StateEnum.STOP);
             musicSheetService.save(musicSheet);

+ 11 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/MusicAlbumDao.java

@@ -2,6 +2,7 @@ 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.dto.search.StudentMusicAlbumSearch;
 import com.yonge.cooleshow.biz.dal.entity.MusicAlbum;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.yonge.cooleshow.biz.dal.vo.MusicAlbumVo;
@@ -26,4 +27,14 @@ public interface MusicAlbumDao extends BaseMapper<MusicAlbum> {
      * @return page
      */
     List<MusicAlbumVo> selectPage(@Param("page") IPage<MusicAlbumVo> page, @Param("query") MusicAlbumSearch query);
+
+    /**
+     * 收藏专辑列表
+     *
+     * @param page   分页
+     * @param search 查询条件
+     * @return
+     */
+    List<MusicAlbumVo> selectFavoritePage(@Param("page") IPage<MusicAlbumVo> page, @Param(
+            "query") StudentMusicAlbumSearch search);
 }

+ 47 - 2
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/MusicSheetDao.java

@@ -4,7 +4,9 @@ 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.StudentMusicSheetSearch;
 import com.yonge.cooleshow.biz.dal.entity.MusicSheet;
+import com.yonge.cooleshow.biz.dal.vo.MusicSheetDetailVo;
 import com.yonge.cooleshow.biz.dal.vo.MusicSheetVo;
 import org.apache.ibatis.annotations.Param;
 
@@ -32,6 +34,49 @@ public interface MusicSheetDao extends BaseMapper<MusicSheet> {
      * @param query 查询条件
      * @return
      */
-    List<MusicSheet> selectAlbumDetailPage(@Param("page") IPage<MusicSheet> page,
-                                           @Param("param") MusicAlbumDetailSearch query);
+    List<MusicSheet> selectAlbumDetailPage(@Param("page") IPage<MusicSheet> page, @Param("param") MusicAlbumDetailSearch query);
+
+    /**
+     * 获取曲目详情
+     *
+     * @param id 曲目id
+     * @return 曲目信息
+     */
+    MusicSheetDetailVo detail(Long id);
+
+    /**
+     * 分页查询
+     */
+    List<MusicSheetVo> selectStudentMusicPage(@Param("page") IPage<MusicSheetVo> page, @Param(
+            "param") StudentMusicSheetSearch query);
+
+    /**
+     * 我的单曲
+     *
+     * @param page  分页信息
+     * @param query 查询条件
+     * @return list
+     */
+    List<MusicSheetVo> selectMyMusicPage(@Param("page") IPage<MusicSheetVo> page, @Param(
+            "param") StudentMusicSheetSearch query);
+
+    /**
+     * 收藏单曲
+     *
+     * @param page  分页信息
+     * @param query 查询条件
+     * @return list
+     */
+    List<MusicSheetVo> selectFavoriteMusicPage(@Param("page") IPage<MusicSheetVo> page, @Param(
+            "param") StudentMusicSheetSearch query);
+
+    /**
+     * 最近练习曲目
+     *
+     * @param query               查询条件
+     * @param practiceMusicIdList 最近练习曲目id
+     * @return list
+     */
+    List<MusicSheetVo> selectPracticeMusicPage(@Param("param") StudentMusicSheetSearch query,
+                                               @Param("practiceMusicIdList") List<Long> practiceMusicIdList);
 }

+ 40 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/MusicSheetPracticeRecordDao.java

@@ -0,0 +1,40 @@
+package com.yonge.cooleshow.biz.dal.dao;
+
+import java.util.List;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.yonge.cooleshow.biz.dal.dto.search.StudentMusicSheetSearch;
+import org.apache.ibatis.annotations.Param;
+import com.yonge.cooleshow.biz.dal.entity.MusicSheetPracticeRecord;
+import com.yonge.cooleshow.biz.dal.vo.MusicSheetPracticeRecordVo;
+import com.yonge.cooleshow.biz.dal.dto.search.MusicSheetPracticeRecordSearch;
+
+
+public interface MusicSheetPracticeRecordDao extends BaseMapper<MusicSheetPracticeRecord> {
+	/**
+	 * 查询详情
+	 *
+	 * @author liweifan
+	 * @date 2022-04-02 10:05:39
+	 * @return: com.yonge.cooleshow.biz.dal.vo.MusicSheetPracticeRecordVo
+	 */
+	MusicSheetPracticeRecordVo detail(@Param("id") Long id);
+
+	/**
+	 * 分页查询
+	 *
+	 * @author liweifan
+	 * @date 2022-04-02 10:05:39
+	 * @return: com.yonge.cooleshow.biz.dal.vo.MusicSheetPracticeRecordVo
+	 */
+	List<MusicSheetPracticeRecordVo> selectPage(@Param("page") IPage page, @Param("param") MusicSheetPracticeRecordSearch musicSheetPracticeRecord);
+
+	/**
+	 * 查询学生最近练习的曲目id
+	 *
+	 * @param query 查询条件
+	 * @return 曲目id 集合
+	 */
+	List<Long> selectPracticeMusicIdPage(@Param("iPage") IPage<Long> iPage, @Param("param") StudentMusicSheetSearch query);
+}

+ 0 - 33
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/MusicSheetDto.java

@@ -1,6 +1,5 @@
 package com.yonge.cooleshow.biz.dal.dto;
 
-import com.fasterxml.jackson.annotation.JsonIgnore;
 import com.yonge.cooleshow.biz.dal.entity.MusicSheet;
 import com.yonge.cooleshow.biz.dal.entity.MusicSheetAccompaniment;
 
@@ -13,42 +12,10 @@ import java.util.List;
  * @version v1.0
  **/
 public class MusicSheetDto extends MusicSheet {
-    @JsonIgnore
-    private Integer pageNo;
 
-    @JsonIgnore
-    private Integer pageSize;
 
-    @JsonIgnore
-    private String search;
-
-    @JsonIgnore
     private List<MusicSheetAccompaniment> background;
 
-    public Integer getPageNo() {
-        return pageNo;
-    }
-
-    public void setPageNo(Integer pageNo) {
-        this.pageNo = pageNo;
-    }
-
-    public Integer getPageSize() {
-        return pageSize;
-    }
-
-    public void setPageSize(Integer pageSize) {
-        this.pageSize = pageSize;
-    }
-
-    public String getSearch() {
-        return search;
-    }
-
-    public void setSearch(String search) {
-        this.search = search;
-    }
-
     public List<MusicSheetAccompaniment> getBackground() {
         return background;
     }

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

@@ -21,9 +21,10 @@ public class MusicAlbumDetailSearch extends MusicSheetSearch {
     /**
      * 1:新增曲目,2:已有曲目
      */
-    @ApiModelProperty(hidden = true,value = "1:新增曲目,2:已有曲目1:新增曲目,2:已有曲目")
+    @ApiModelProperty(hidden = true,value = "1:新增曲目,2:已有曲目")
     private Integer type;
 
+
     public Long getId() {
         return id;
     }

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

@@ -1,5 +1,6 @@
 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;
@@ -26,6 +27,9 @@ public class MusicAlbumSearch extends Query {
     @ApiModelProperty(hidden = true)
     private List<Long> albumTagIdList;
 
+    @ApiModelProperty("专辑状态0:停用,1:启用")
+    private StateEnum albumStatus;
+
     public String getIdAndName() {
         return idAndName;
     }
@@ -52,4 +56,12 @@ public class MusicAlbumSearch extends Query {
     public void setAlbumTagIdList(List<Long> albumTagIdList) {
         this.albumTagIdList = albumTagIdList;
     }
+
+    public StateEnum getAlbumStatus() {
+        return albumStatus;
+    }
+
+    public void setAlbumStatus(StateEnum albumStatus) {
+        this.albumStatus = albumStatus;
+    }
 }

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

@@ -0,0 +1,14 @@
+package com.yonge.cooleshow.biz.dal.dto.search;
+
+import com.yonge.cooleshow.biz.dal.support.Query;
+import io.swagger.annotations.ApiModel;
+
+/**
+ * @Author: liweifan
+ * @Data: 2022-04-02 10:05:39
+ */
+@ApiModel(value = "MusicSheetPracticeRecordSearch对象", description = "曲目练习记录表查询对象")
+public class MusicSheetPracticeRecordSearch extends Query{
+	private static final long serialVersionUID = 1L;
+
+}

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

@@ -1,5 +1,6 @@
 package com.yonge.cooleshow.biz.dal.dto.search;
 
+import com.yonge.cooleshow.biz.dal.enums.AuditEnum;
 import com.yonge.cooleshow.biz.dal.enums.StateEnum;
 import com.yonge.cooleshow.biz.dal.support.Query;
 import com.yonge.toolset.utils.string.StringUtil;
@@ -36,6 +37,12 @@ public class MusicSheetSearch  extends Query {
     @ApiModelProperty("曲目状态(0:停用,1:启用))")
     private StateEnum state;
 
+    @ApiModelProperty("曲目审核状态(0:待审核;1:通过;2:未通过)")
+    private AuditEnum auditStatus;
+
+    @ApiModelProperty(value = "创建人id (老师id)")
+    private Long createBy;
+
     public String getIdAndName() {
         return idAndName;
     }
@@ -89,4 +96,20 @@ public class MusicSheetSearch  extends Query {
     public void setState(StateEnum state) {
         this.state = state;
     }
+
+    public AuditEnum getAuditStatus() {
+        return auditStatus;
+    }
+
+    public void setAuditStatus(AuditEnum auditStatus) {
+        this.auditStatus = auditStatus;
+    }
+
+    public Long getCreateBy() {
+        return createBy;
+    }
+
+    public void setCreateBy(Long createBy) {
+        this.createBy = createBy;
+    }
 }

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

@@ -0,0 +1,25 @@
+package com.yonge.cooleshow.biz.dal.dto.search;
+
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * Description 学生查询乐谱
+ *
+ * @author liujunchi
+ * @date 2022-04-01
+ */
+public class StudentMusicAlbumSearch extends MusicAlbumSearch{
+
+
+    @ApiModelProperty(value = "登录学生id",hidden = true)
+    private Long studentId;
+
+
+    public Long getStudentId() {
+        return studentId;
+    }
+
+    public void setStudentId(Long studentId) {
+        this.studentId = studentId;
+    }
+}

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

@@ -0,0 +1,25 @@
+package com.yonge.cooleshow.biz.dal.dto.search;
+
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * Description 学生查询乐谱
+ *
+ * @author liujunchi
+ * @date 2022-04-01
+ */
+public class StudentMusicSheetSearch  extends MusicSheetSearch{
+
+
+    @ApiModelProperty(value = "登录学生id",hidden = true)
+    private Long studentId;
+
+
+    public Long getStudentId() {
+        return studentId;
+    }
+
+    public void setStudentId(Long studentId) {
+        this.studentId = studentId;
+    }
+}

+ 5 - 9
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/MusicSheet.java

@@ -3,10 +3,7 @@ package com.yonge.cooleshow.biz.dal.entity;
 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 com.yonge.cooleshow.biz.dal.enums.*;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 
@@ -46,15 +43,14 @@ public class MusicSheet implements Serializable {
     @ApiModelProperty(value = "作曲人")
     private String composer;  //作曲人
 
-    @NotBlank(message = "曲谱声部不能为空!")
     @TableField("music_subject_")
     @ApiModelProperty(value = "曲谱声部(适用的乐器,可能是多个,用逗号分隔)")
     private String musicSubject;  //曲谱声部(适用的乐器,可能是多个,用逗号分隔)
 
     @NotBlank(message = "曲谱音频文件类型不能为空!")
     @TableField("audio_type_")
-    @ApiModelProperty(value = "曲谱音频文件类型(midi;mp3)")
-    private String audioType;  //曲谱音频文件类型(midi;mp3)
+    @ApiModelProperty(value = "曲目音频类型 1:mp3, 2:midi, 3:mp3_metronome")
+    private AudioTypeEnum audioType;  //曲谱音频文件类型(midi;mp3)
 
     @NotBlank(message = "曲谱标签不能为空!")
     @TableField("music_tag_")
@@ -177,11 +173,11 @@ public class MusicSheet implements Serializable {
 		this.musicSubject = musicSubject;
 	}
 
-	public String getAudioType() {
+	public AudioTypeEnum getAudioType() {
 		return audioType;
 	}
 
-	public void setAudioType(String audioType) {
+	public void setAudioType(AudioTypeEnum audioType) {
 		this.audioType = audioType;
 	}
 

+ 69 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/MusicSheetPracticeRecord.java

@@ -0,0 +1,69 @@
+package com.yonge.cooleshow.biz.dal.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.io.Serializable;
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.springframework.format.annotation.DateTimeFormat;
+
+/**
+ * 曲目练习记录表
+ */
+@TableName("music_sheet_practice_record")
+@ApiModel(value = "MusicSheetPracticeRecord对象", description = "曲目练习记录表")
+public class MusicSheetPracticeRecord implements Serializable {
+	private static final long serialVersionUID = 1L;
+    @ApiModelProperty("主键 ")
+    @TableId(value = "id_", type = IdType.AUTO)
+    private Long id;
+    @ApiModelProperty("用户ID(目前只是学生ID) ")
+	@TableField(value = "user_id_")
+    private Long userId;
+    @ApiModelProperty("曲目ID ")
+	@TableField(value = "music_sheet_id_")
+    private Long musicSheetId;
+    @ApiModelProperty("创建时间 ")
+	@TableField(value = "create_time_")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
+    private Date createTime;
+
+	public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+    
+	public Long getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Long userId) {
+        this.userId = userId;
+    }
+    
+	public Long getMusicSheetId() {
+        return musicSheetId;
+    }
+
+    public void setMusicSheetId(Long musicSheetId) {
+        this.musicSheetId = musicSheetId;
+    }
+    
+	public Date getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+    
+}

+ 43 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/AudioTypeEnum.java

@@ -0,0 +1,43 @@
+package com.yonge.cooleshow.biz.dal.enums;
+
+import com.baomidou.mybatisplus.annotation.EnumValue;
+import com.yonge.cooleshow.common.enums.BaseEnum;
+
+/**
+ * Description 曲目音频类型 1:mp3,2:midi,3:mp3_metronome
+ *
+ * @author liujunchi
+ * @date 2022-04-01
+ */
+public enum AudioTypeEnum implements BaseEnum<Integer,AudioTypeEnum> {
+
+
+    MP3(1,"mp3"),
+    MIDI(2,"midi"),
+    MP3_METRONOME(3,"mp3_metronome");
+    @EnumValue
+    private Integer code;
+    private String msg;
+
+    AudioTypeEnum(Integer code, String msg) {
+        this.code = code;
+        this.msg = msg;
+    }
+
+    public void setCode(Integer code) {
+        this.code = code;
+    }
+
+    public String getMsg() {
+        return msg;
+    }
+
+    public void setMsg(String msg) {
+        this.msg = msg;
+    }
+
+    @Override
+    public Integer getCode() {
+        return this.code;
+    }
+}

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

@@ -3,6 +3,8 @@ package com.yonge.cooleshow.biz.dal.service;
 import com.yonge.cooleshow.biz.dal.entity.AlbumFavorite;
 import com.baomidou.mybatisplus.extension.service.IService;
 
+import java.util.List;
+
 /**
  * AlbumFavoriteService服务类
  * @author yzp
@@ -11,4 +13,12 @@ import com.baomidou.mybatisplus.extension.service.IService;
  **/
 public interface AlbumFavoriteService extends IService<AlbumFavorite> {
 
+    /**
+     * 获取收藏信息
+     *
+     * @param studentId 学生id
+     * @param albumId 专辑id
+     * @return list
+     */
+    List<AlbumFavorite> getFavorite(Long studentId, Long albumId);
 }

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

@@ -3,9 +3,11 @@ 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.dto.search.StudentMusicAlbumSearch;
 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.enums.YesOrNoEnum;
 import com.yonge.cooleshow.biz.dal.vo.AlbumDetailVo;
 import com.yonge.cooleshow.biz.dal.vo.MusicAlbumVo;
 
@@ -75,4 +77,31 @@ public interface MusicAlbumService extends IService<MusicAlbum> {
      * @param musicAlbum 专辑对象
      */
     void updateMusicAlbum(MusicAlbum musicAlbum);
+
+    /**
+     * 判断是否已收藏
+     *
+     * @param studentId 学生id
+     * @param albumId 专辑id
+     * @return YesOrNoEnum
+     */
+    YesOrNoEnum checkFavorite(Long studentId, Long albumId);
+
+    /**
+     * 设置学生收藏/取消收藏 专辑
+     *
+     * @param studentId 学生id
+     * @param albumId 专辑id
+     * @return boolean
+     */
+    Boolean setFavorite(Long studentId, Long albumId);
+
+    /**
+     * 收藏专辑列表
+     *
+     * @param page 分页
+     * @param search 查询条件
+     * @return list
+     */
+    IPage<MusicAlbumVo> favoriteAlbum(IPage<MusicAlbumVo> page, StudentMusicAlbumSearch search);
 }

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

@@ -3,6 +3,8 @@ package com.yonge.cooleshow.biz.dal.service;
 import com.yonge.cooleshow.biz.dal.entity.MusicFavorite;
 import com.baomidou.mybatisplus.extension.service.IService;
 
+import java.util.List;
+
 /**
  * MusicFavoriteService服务类
  * @author yzp
@@ -11,4 +13,12 @@ import com.baomidou.mybatisplus.extension.service.IService;
  **/
 public interface MusicFavoriteService extends IService<MusicFavorite> {
 
+    /**
+     * 获取收藏信息
+     *
+     * @param userId 学生id
+     * @param musicSheetId 专辑id
+     * @return list
+     */
+    List<MusicFavorite> getFavorite(Long userId, Long musicSheetId);
 }

+ 48 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/MusicSheetPracticeRecordService.java

@@ -0,0 +1,48 @@
+package com.yonge.cooleshow.biz.dal.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.yonge.cooleshow.biz.dal.dto.search.StudentMusicSheetSearch;
+import com.yonge.cooleshow.biz.dal.vo.MusicSheetPracticeRecordVo;
+import com.yonge.cooleshow.biz.dal.dto.search.MusicSheetPracticeRecordSearch;
+import com.yonge.cooleshow.biz.dal.entity.MusicSheetPracticeRecord;
+
+/**
+ * 曲目练习记录表 服务类
+ * @author liweifan
+ * @date 2022-04-02
+ */
+public interface MusicSheetPracticeRecordService extends IService<MusicSheetPracticeRecord>  {
+
+	/**
+     * 查询详情
+     * @author liweifan
+ 	 * @date 2022-04-02
+     */
+	MusicSheetPracticeRecordVo detail(Long id);
+
+    /**
+     * 分页查询
+     * @author liweifan
+ 	 * @date 2022-04-02
+     */
+    IPage<MusicSheetPracticeRecordVo> selectPage(IPage<MusicSheetPracticeRecordVo> page, MusicSheetPracticeRecordSearch query);
+
+	/**
+	 * 添加曲目练习记录
+	 *
+	 * @param musicSheetId 曲目id
+	 * @param userId 用户id
+	 */
+	void addRecord(Long musicSheetId, Long userId);
+
+	/**
+	 * 查询学生最近练习的曲目id
+	 *
+	 * @param query 查询条件
+	 * @param page 当前页
+	 * @param size 展示数据
+	 * @return 曲目id 集合
+	 */
+	IPage<Long> selectPracticeMusic(StudentMusicSheetSearch query, long page, long size);
+}

+ 9 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/MusicSheetPurchaseRecordService.java

@@ -11,4 +11,12 @@ import com.baomidou.mybatisplus.extension.service.IService;
  **/
 public interface MusicSheetPurchaseRecordService extends IService<MusicSheetPurchaseRecord> {
 
-}
+    /**
+     * 检查是否购买乐谱
+     *
+     * @param userId 用户id
+     * @param musicSheetId 曲目id
+     * @return boolean
+     */
+    boolean checkPurchase(Long userId, Long musicSheetId);
+}

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

@@ -2,11 +2,15 @@ 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.auth.api.enums.SysUserType;
 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.dto.search.StudentMusicSheetSearch;
 import com.yonge.cooleshow.biz.dal.entity.MusicSheet;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.yonge.cooleshow.biz.dal.vo.MusicSheetDetailVo;
+import com.yonge.cooleshow.biz.dal.vo.MusicSheetShareVo;
 import com.yonge.cooleshow.biz.dal.vo.MusicSheetVo;
 
 /**
@@ -49,4 +53,67 @@ public interface MusicSheetService extends IService<MusicSheet> {
      * @return MusicSheet
      */
     IPage<MusicSheet> selectAlbumDetailPage(IPage<MusicSheet> page, MusicAlbumDetailSearch query);
+
+    /**
+     * 老师分享乐谱信息
+     *
+     * @param sysUser 老师登录信息
+     * @return 分享信息
+     */
+    MusicSheetShareVo shareMusicSheet(SysUser sysUser);
+
+    /**
+     * 查询详情
+     *
+     * @param id 曲谱id
+     * @param sysUser 登录用户
+     * @return 曲谱信息
+     */
+    MusicSheetDetailVo detail(Long id, SysUser sysUser, SysUserType userType);
+
+    /**
+     * 学生端 曲目分页查询
+     *
+     * @param page 分页
+     * @param query 查询条件
+     * @return iPage 分页信息
+     */
+    IPage<MusicSheetVo> selectStudentPage(IPage<MusicSheetVo> page, StudentMusicSheetSearch query);
+
+    /**
+     * 收藏/取消收藏 曲目
+     *
+     * @param userId 用户id , 学生id
+     * @param musicSheetId 曲目id
+     * @return boolean
+     */
+    boolean setFavorite(Long userId, Long musicSheetId);
+
+    /**
+     * 我的单曲
+     *
+     * @param page 分页信息
+     * @param query 查询条件
+     * @return
+     */
+    IPage<MusicSheetVo> myMusic(IPage<MusicSheetVo> page, StudentMusicSheetSearch query);
+
+
+    /**
+     * 收藏单曲
+     *
+     * @param page 分页信息
+     * @param query 查询条件
+     * @return
+     */
+    IPage<MusicSheetVo> favoriteMusic(IPage<MusicSheetVo> page, StudentMusicSheetSearch query);
+
+    /**
+     * 最近练习曲目
+     *
+     * @param page 分页信息
+     * @param query 查询条件
+     * @return page
+     */
+    IPage<MusicSheetVo> practiceMusic(IPage<MusicSheetVo> page, StudentMusicSheetSearch query);
 }

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

@@ -9,6 +9,8 @@ import org.springframework.stereotype.Service;
 import org.springframework.beans.factory.annotation.Autowired;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 
+import java.util.List;
+
 /**
  * AlbumFavoriteService服务实现类
  * @author yzp
@@ -26,4 +28,13 @@ public class AlbumFavoriteServiceImpl extends ServiceImpl<AlbumFavoriteDao,Album
     public AlbumFavoriteDao getDao() {
         return albumFavoriteDao;
     }
+
+    @Override
+    public List<AlbumFavorite> getFavorite(Long studentId, Long albumId) {
+
+        return this.lambdaQuery()
+                    .eq(AlbumFavorite::getAlbumId, albumId)
+                    .eq(AlbumFavorite::getUserId, studentId)
+                    .list();
+    }
 }

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

@@ -4,10 +4,15 @@ 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.dto.search.StudentMusicAlbumSearch;
+import com.yonge.cooleshow.biz.dal.entity.AlbumFavorite;
 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.enums.StateEnum;
+
+import com.yonge.cooleshow.biz.dal.enums.YesOrNoEnum;
+import com.yonge.cooleshow.biz.dal.service.AlbumFavoriteService;
 import com.yonge.cooleshow.biz.dal.service.AlbumMusicRelateService;
 import com.yonge.cooleshow.biz.dal.service.MusicAlbumService;
 import com.yonge.cooleshow.biz.dal.service.MusicSheetService;
@@ -21,8 +26,12 @@ 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.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
 
+import java.util.Date;
 import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * MusicAlbumService服务实现类
@@ -44,6 +53,9 @@ public class MusicAlbumServiceImpl extends ServiceImpl<MusicAlbumDao,MusicAlbum>
     @Autowired
     private MusicSheetService musicSheetService;
 
+    @Autowired
+    private AlbumFavoriteService albumFavoriteService;
+
     public MusicAlbumDao getDao() {
         return musicAlbumDao;
     }
@@ -54,6 +66,7 @@ public class MusicAlbumServiceImpl extends ServiceImpl<MusicAlbumDao,MusicAlbum>
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public boolean state(Long id) {
         MusicAlbum musicAlbum = this.getById(id);
         if (musicAlbum == null) {
@@ -76,6 +89,7 @@ public class MusicAlbumServiceImpl extends ServiceImpl<MusicAlbumDao,MusicAlbum>
         AlbumDetailVo albumDetailVo = new AlbumDetailVo();
         albumDetailVo.setId(musicAlbum.getId());
         albumDetailVo.setAlbumName(musicAlbum.getAlbumName());
+        albumDetailVo.setAlbumDesc(musicAlbum.getAlbumDesc());
 
         IPage<MusicSheet> musicSheetVoIPage = musicSheetService.selectAlbumDetailPage(page,query);
         albumDetailVo.setMusicSheetList(PageUtil.pageInfo(musicSheetVoIPage));
@@ -83,6 +97,7 @@ public class MusicAlbumServiceImpl extends ServiceImpl<MusicAlbumDao,MusicAlbum>
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public boolean delMusicSheet(Long albumId, String musicSheetIds) {
         MusicAlbum musicAlbum = this.getById(albumId);
         if (musicAlbum == null) {
@@ -93,6 +108,7 @@ public class MusicAlbumServiceImpl extends ServiceImpl<MusicAlbumDao,MusicAlbum>
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public boolean addMusicSheet(Long albumId, String musicSheetIds, Long userId) {
         MusicAlbum musicAlbum = this.getById(albumId);
         if (musicAlbum == null) {
@@ -103,6 +119,7 @@ public class MusicAlbumServiceImpl extends ServiceImpl<MusicAlbumDao,MusicAlbum>
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public void createMusicAlbum(MusicAlbum musicAlbum) {
         if (checkNameRepeat(musicAlbum.getAlbumName(),musicAlbum.getId())) {
             throw new BizException("专辑名称重复");
@@ -111,6 +128,7 @@ public class MusicAlbumServiceImpl extends ServiceImpl<MusicAlbumDao,MusicAlbum>
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public void updateMusicAlbum(MusicAlbum musicAlbum) {
         if (checkNameRepeat(musicAlbum.getAlbumName(),musicAlbum.getId())) {
             throw new BizException("专辑名称重复");
@@ -118,6 +136,36 @@ public class MusicAlbumServiceImpl extends ServiceImpl<MusicAlbumDao,MusicAlbum>
         this.updateById(musicAlbum);
     }
 
+    @Override
+    public YesOrNoEnum checkFavorite(Long studentId, Long albumId) {
+        List<AlbumFavorite> albumFavorites = albumFavoriteService.getFavorite(studentId,albumId);
+
+        return CollectionUtils.isEmpty(albumFavorites)?YesOrNoEnum.NO:YesOrNoEnum.YES;
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Boolean setFavorite(Long studentId, Long albumId) {
+        List<AlbumFavorite> albumFavorites = albumFavoriteService.getFavorite(studentId,albumId);
+        if (CollectionUtils.isEmpty(albumFavorites)) {
+            AlbumFavorite albumFavorite = new AlbumFavorite();
+            albumFavorite.setAlbumId(albumId);
+            albumFavorite.setUserId(studentId);
+            albumFavorite.setFavoriteTime(new Date());
+            return albumFavoriteService.save(albumFavorite);
+        } else {
+            List<Long> ids = albumFavorites.stream().map(AlbumFavorite::getId).collect(Collectors.toList());
+            return albumFavoriteService.removeByIds(ids);
+        }
+    }
+
+    @Override
+    public IPage<MusicAlbumVo> favoriteAlbum(IPage<MusicAlbumVo> page, StudentMusicAlbumSearch search) {
+
+        return page.setRecords(baseMapper.selectFavoritePage(page,search));
+
+    }
+
     private boolean checkNameRepeat(String albumName, Long id) {
         LambdaQueryChainWrapper<MusicAlbum> eq = this.lambdaQuery()
                                                    .eq(MusicAlbum::getAlbumName, albumName);

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

@@ -1,5 +1,6 @@
 package com.yonge.cooleshow.biz.dal.service.impl;
 
+import com.yonge.cooleshow.biz.dal.entity.AlbumFavorite;
 import com.yonge.cooleshow.biz.dal.entity.MusicFavorite;
 import com.yonge.cooleshow.biz.dal.dao.MusicFavoriteDao;
 import com.yonge.cooleshow.biz.dal.service.MusicFavoriteService;
@@ -9,6 +10,8 @@ import org.springframework.stereotype.Service;
 import org.springframework.beans.factory.annotation.Autowired;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 
+import java.util.List;
+
 /**
  * MusicFavoriteService服务实现类
  * @author yzp
@@ -26,4 +29,13 @@ public class MusicFavoriteServiceImpl extends ServiceImpl<MusicFavoriteDao,Music
     public MusicFavoriteDao getDao() {
         return musicFavoriteDao;
     }
+
+    @Override
+    public List<MusicFavorite> getFavorite(Long userId, Long musicSheetId) {
+        return this.lambdaQuery()
+                   .eq(MusicFavorite::getMusicSheetId, musicSheetId)
+                   .eq(MusicFavorite::getUserId, userId)
+                   .list();
+
+    }
 }

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

@@ -0,0 +1,48 @@
+package com.yonge.cooleshow.biz.dal.service.impl;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.yonge.cooleshow.biz.dal.dto.search.StudentMusicSheetSearch;
+import org.springframework.stereotype.Service;
+import com.yonge.cooleshow.biz.dal.entity.MusicSheetPracticeRecord;
+import com.yonge.cooleshow.biz.dal.vo.MusicSheetPracticeRecordVo;
+import com.yonge.cooleshow.biz.dal.dto.search.MusicSheetPracticeRecordSearch;
+import com.yonge.cooleshow.biz.dal.dao.MusicSheetPracticeRecordDao;
+import com.yonge.cooleshow.biz.dal.service.MusicSheetPracticeRecordService;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.Date;
+
+
+@Service
+public class MusicSheetPracticeRecordServiceImpl extends ServiceImpl<MusicSheetPracticeRecordDao, MusicSheetPracticeRecord> implements MusicSheetPracticeRecordService {
+
+	@Override
+    public MusicSheetPracticeRecordVo detail(Long id) {
+        MusicSheetPracticeRecordVo detail = baseMapper.detail(id);
+        return detail;
+    }
+    
+     @Override
+    public IPage<MusicSheetPracticeRecordVo> selectPage(IPage<MusicSheetPracticeRecordVo> page, MusicSheetPracticeRecordSearch query){
+        return page.setRecords(baseMapper.selectPage(page, query));
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void addRecord(Long musicSheetId, Long userId) {
+        MusicSheetPracticeRecord musicSheetPracticeRecord = new MusicSheetPracticeRecord();
+        musicSheetPracticeRecord.setMusicSheetId(musicSheetId);
+        musicSheetPracticeRecord.setUserId(userId);
+        musicSheetPracticeRecord.setCreateTime(new Date());
+        this.save(musicSheetPracticeRecord);
+    }
+
+    @Override
+    public IPage<Long> selectPracticeMusic(StudentMusicSheetSearch query, long page, long size) {
+        IPage<Long> iPage = new Page<>(page,size);
+        return iPage.setRecords(baseMapper.selectPracticeMusicIdPage(iPage,query));
+    }
+
+}

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

@@ -2,6 +2,7 @@ package com.yonge.cooleshow.biz.dal.service.impl;
 
 import com.yonge.cooleshow.biz.dal.entity.MusicSheetPurchaseRecord;
 import com.yonge.cooleshow.biz.dal.dao.MusicSheetPurchaseRecordDao;
+import com.yonge.cooleshow.biz.dal.enums.YesOrNoEnum;
 import com.yonge.cooleshow.biz.dal.service.MusicSheetPurchaseRecordService;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -26,4 +27,14 @@ public class MusicSheetPurchaseRecordServiceImpl extends ServiceImpl<MusicSheetP
     public MusicSheetPurchaseRecordDao getDao() {
         return musicSheetPurchaseRecordDao;
     }
+
+    @Override
+    public boolean checkPurchase(Long userId, Long musicSheetId) {
+        Integer count = this.lambdaQuery()
+                            .eq(MusicSheetPurchaseRecord::getMusicSheetId, musicSheetId)
+                            .eq(MusicSheetPurchaseRecord::getStudentId, userId)
+                            .eq(MusicSheetPurchaseRecord::getOrderStatus, YesOrNoEnum.YES.getCode())
+                            .count();
+        return count > 0 ;
+    }
 }

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

@@ -1,30 +1,37 @@
 package com.yonge.cooleshow.biz.dal.service.impl;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
-import com.yonge.cooleshow.biz.dal.dao.MusicSheetAccompanimentDao;
+import com.yonge.cooleshow.auth.api.enums.SysUserType;
+import com.yonge.cooleshow.biz.dal.dao.MusicSheetDao;
 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;
-import com.yonge.cooleshow.biz.dal.entity.MusicSheetAccompaniment;
+import com.yonge.cooleshow.biz.dal.dto.search.StudentMusicSheetSearch;
+import com.yonge.cooleshow.biz.dal.entity.*;
 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.service.MusicSheetAccompanimentService;
-import com.yonge.cooleshow.biz.dal.service.MusicSheetService;
+import com.yonge.cooleshow.biz.dal.enums.YesOrNoEnum;
+import com.yonge.cooleshow.biz.dal.service.*;
+import com.yonge.cooleshow.biz.dal.support.PageUtil;
+import com.yonge.cooleshow.biz.dal.vo.MusicSheetDetailVo;
+import com.yonge.cooleshow.biz.dal.vo.MusicSheetShareVo;
 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;
-import org.springframework.stereotype.Service;
 import org.springframework.beans.factory.annotation.Autowired;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
 
+import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * MusicSheetService服务实现类
@@ -43,20 +50,30 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao,MusicSheet>
     @Autowired
     private MusicSheetAccompanimentService musicSheetAccompanimentService;
 
+    @Autowired
+    private MusicFavoriteService musicFavoriteService;
+
+    @Autowired
+    private MusicSheetPurchaseRecordService musicSheetPurchaseRecordService;
+
+    @Autowired
+    private MusicSheetPracticeRecordService musicSheetPracticeRecordService;
+
+    @Autowired
+    private StudentService studentService;
+
     public MusicSheetDao getDao() {
         return musicSheetDao;
     }
 
     @Override
-    @Transactional(readOnly = false)
+    @Transactional(rollbackFor = Exception.class)
     public boolean saveMp3AndAccompaniment(MusicSheetDto musicSheetDto, SysUser sysUser) {
         MusicSheet musicSheet = new MusicSheet();
         BeanUtils.copyProperties(musicSheetDto, 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);
@@ -77,6 +94,7 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao,MusicSheet>
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public boolean state(Long id) {
         MusicSheet musicSheet = this.getById(id);
         if (musicSheet == null) {
@@ -95,4 +113,101 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao,MusicSheet>
     public IPage<MusicSheet> selectAlbumDetailPage(IPage<MusicSheet> page, MusicAlbumDetailSearch query) {
         return page.setRecords(baseMapper.selectAlbumDetailPage(page, query));
     }
+
+    @Override
+    public MusicSheetShareVo shareMusicSheet(SysUser sysUser) {
+        MusicSheetSearch query = new MusicSheetSearch();
+        // 设置只查老师用户
+        query.setCreateBy(sysUser.getId());
+        query.setAuditStatus(AuditEnum.OPEN);
+        query.setState(StateEnum.ENABLE);
+        // 只查3条
+        query.setRows(3);
+        IPage<MusicSheetVo> musicSheetVoIPage = selectPage(PageUtil.getPage(query), query);
+        MusicSheetShareVo musicSheetShareVo = new MusicSheetShareVo();
+        musicSheetShareVo.setMusicSheetCount(musicSheetVoIPage.getTotal());
+        musicSheetShareVo.setMusicSheetVoList(musicSheetVoIPage.getRecords());
+        musicSheetShareVo.setName(sysUser.getUsername());
+        musicSheetShareVo.setAvatar(sysUser.getAvatar());
+        return musicSheetShareVo;
+    }
+
+    @Override
+    public MusicSheetDetailVo detail(Long id, SysUser sysUser,SysUserType userType) {
+        MusicSheetDetailVo detail = baseMapper.detail(id);
+        if (ChargeTypeEnum.FREE.getCode().equals(detail.getChargeType().getCode())) {
+            detail.setPlay(YesOrNoEnum.YES);
+        }  else if (SysUserType.STUDENT.getCode().equals(userType.getCode())) {
+            detail.setPlay(YesOrNoEnum.NO);
+            // 单曲购买 判断购买记录,有记录课播放
+            if (ChargeTypeEnum.CHARGE.getCode().equals(detail.getChargeType().getCode())) {
+                // 学生须判断是否能播放曲目
+                boolean b = musicSheetPurchaseRecordService.checkPurchase(sysUser.getId(),detail.getId());
+                if (b) {
+                    detail.setPlay(YesOrNoEnum.YES);
+                }
+            } else if  (ChargeTypeEnum.VIP.getCode().equals(detail.getChargeType().getCode())) {
+                // 会员 判断是否为会员, 会员可播放
+                Student student = studentService.getById(sysUser.getId());
+                if (new Date().compareTo(student.getMembershipEndTime()) < 0) {
+                    detail.setPlay(YesOrNoEnum.YES);
+                }
+            }
+            // 学生进入云教练练习,添加一条练习记录
+            musicSheetPracticeRecordService.addRecord(id,sysUser.getId());
+        } else {
+            detail.setPlay(YesOrNoEnum.YES);
+        }
+        return detail;
+    }
+
+    @Override
+    public IPage<MusicSheetVo> selectStudentPage(IPage<MusicSheetVo> page, StudentMusicSheetSearch query) {
+        return page.setRecords(baseMapper.selectStudentMusicPage(page, query));
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public boolean setFavorite(Long userId, Long musicSheetId) {
+        List<MusicFavorite> musicFavorites = musicFavoriteService.getFavorite(userId, musicSheetId);
+        if (CollectionUtils.isEmpty(musicFavorites)) {
+            MusicFavorite musicFavorite = new MusicFavorite();
+            musicFavorite.setMusicSheetId(musicSheetId);
+            musicFavorite.setUserId(userId);
+            musicFavorite.setFavoriteTime(new Date());
+            return musicFavoriteService.save(musicFavorite);
+        } else {
+            List<Long> ids = musicFavorites.stream().map(MusicFavorite::getId).collect(Collectors.toList());
+            return musicFavoriteService.removeByIds(ids);
+        }
+    }
+
+    @Override
+    public IPage<MusicSheetVo> myMusic(IPage<MusicSheetVo> page, StudentMusicSheetSearch query) {
+        return page.setRecords(baseMapper.selectMyMusicPage(page,query));
+    }
+
+    @Override
+    public IPage<MusicSheetVo> favoriteMusic(IPage<MusicSheetVo> page, StudentMusicSheetSearch query) {
+        return page.setRecords(baseMapper.selectFavoriteMusicPage(page,query));
+    }
+
+    @Override
+    public IPage<MusicSheetVo> practiceMusic(IPage<MusicSheetVo> page, StudentMusicSheetSearch query) {
+        // 预计最近练习表数据量会很多
+        // 先找到最近练习的曲目id 在根据曲目id进行精确查找
+        IPage<Long> practiceMusicIdPage = musicSheetPracticeRecordService.selectPracticeMusic(query,page.getPages(),page.getSize());
+        List<Long> practiceMusicIdList = practiceMusicIdPage.getRecords();
+        if (CollectionUtils.isEmpty(practiceMusicIdList)) {
+            page.setRecords(new ArrayList<>());
+            return page;
+        }
+        // 构建分页信息
+        page.setRecords(baseMapper.selectPracticeMusicPage(query,practiceMusicIdList));
+        page.setPages(practiceMusicIdPage.getPages());
+        page.setCurrent(practiceMusicIdPage.getCurrent());
+        page.setSize(practiceMusicIdPage.getSize());
+        page.setTotal(practiceMusicIdPage.getTotal());
+        return page;
+    }
 }

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

@@ -19,6 +19,7 @@ import jodd.util.StringUtil;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.util.*;
 import java.util.stream.Collectors;
@@ -76,6 +77,7 @@ public class MusicTagServiceImpl extends ServiceImpl<MusicTagDao, MusicTag> impl
      }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public boolean del(Long musicTagId) {
         MusicTag musicTag = new MusicTag();
         musicTag.setId(musicTagId);
@@ -84,6 +86,7 @@ public class MusicTagServiceImpl extends ServiceImpl<MusicTagDao, MusicTag> impl
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public boolean state(Long musicTagId) {
         MusicTag tag = this.getById(musicTagId);
         if (Objects.isNull(tag)) {
@@ -100,6 +103,7 @@ public class MusicTagServiceImpl extends ServiceImpl<MusicTagDao, MusicTag> impl
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public void createMusicTag(MusicTagSaveDto musicTagSaveDto) {
 
         if (checkNameRepeat(musicTagSaveDto.getName(), musicTagSaveDto.getId())) {
@@ -139,6 +143,7 @@ public class MusicTagServiceImpl extends ServiceImpl<MusicTagDao, MusicTag> impl
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public void updateMusicTag(MusicTagSaveDto musicTagSaveDto) {
 
         if (checkNameRepeat(musicTagSaveDto.getName(), musicTagSaveDto.getId())) {

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

@@ -1,6 +1,7 @@
 package com.yonge.cooleshow.biz.dal.vo;
 
 import com.yonge.cooleshow.biz.dal.entity.MusicSheet;
+import com.yonge.cooleshow.biz.dal.enums.YesOrNoEnum;
 import com.yonge.cooleshow.common.page.PageInfo;
 import io.swagger.annotations.ApiModelProperty;
 
@@ -18,6 +19,15 @@ public class AlbumDetailVo {
     @ApiModelProperty(value = "专辑名称")
     private String albumName;
 
+    @ApiModelProperty("专辑封面图片URL")
+    private String albumCoverUrl;
+
+    @ApiModelProperty("专辑简介")
+    private String albumDesc;
+
+    @ApiModelProperty("收藏0:否,1:是")
+    private YesOrNoEnum favorite;
+
     @ApiModelProperty("专辑详情曲目")
     private PageInfo<MusicSheet> musicSheetList;
 
@@ -45,4 +55,28 @@ public class AlbumDetailVo {
     public void setMusicSheetList(PageInfo<MusicSheet> musicSheetList) {
         this.musicSheetList = musicSheetList;
     }
+
+    public String getAlbumDesc() {
+        return albumDesc;
+    }
+
+    public void setAlbumDesc(String albumDesc) {
+        this.albumDesc = albumDesc;
+    }
+
+    public String getAlbumCoverUrl() {
+        return albumCoverUrl;
+    }
+
+    public void setAlbumCoverUrl(String albumCoverUrl) {
+        this.albumCoverUrl = albumCoverUrl;
+    }
+
+    public YesOrNoEnum getFavorite() {
+        return favorite;
+    }
+
+    public void setFavorite(YesOrNoEnum favorite) {
+        this.favorite = favorite;
+    }
 }

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

@@ -17,6 +17,9 @@ public class MusicAlbumVo extends MusicAlbum {
     @ApiModelProperty("曲目数量")
     private Integer musicSheetCount;
 
+    @ApiModelProperty("收藏数量")
+    private Integer albumFavoriteCount;
+
 
     public String getMusicTagNames() {
         return musicTagNames;
@@ -33,4 +36,12 @@ public class MusicAlbumVo extends MusicAlbum {
     public void setMusicSheetCount(Integer musicSheetCount) {
         this.musicSheetCount = musicSheetCount;
     }
+
+    public Integer getAlbumFavoriteCount() {
+        return albumFavoriteCount;
+    }
+
+    public void setAlbumFavoriteCount(Integer albumFavoriteCount) {
+        this.albumFavoriteCount = albumFavoriteCount;
+    }
 }

+ 40 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/MusicSheetDetailVo.java

@@ -0,0 +1,40 @@
+package com.yonge.cooleshow.biz.dal.vo;
+
+import com.yonge.cooleshow.biz.dal.entity.MusicSheet;
+import com.yonge.cooleshow.biz.dal.entity.MusicSheetAccompaniment;
+import com.yonge.cooleshow.biz.dal.enums.YesOrNoEnum;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.util.List;
+
+/**
+ * Description
+ *
+ * @author liujunchi
+ * @date 2022-04-01
+ */
+public class MusicSheetDetailVo extends MusicSheet {
+
+    @ApiModelProperty("曲谱伴奏")
+    private List<MusicSheetAccompaniment> background;
+
+    @ApiModelProperty("是否能播放(0:否,1:是) 学生端进入云教练判断 试用/完整 播放")
+    private YesOrNoEnum play;
+
+    public List<MusicSheetAccompaniment> getBackground() {
+        return background;
+    }
+
+    public void setBackground(List<MusicSheetAccompaniment> background) {
+        this.background = background;
+    }
+
+    public YesOrNoEnum getPlay() {
+        return play;
+    }
+
+    public void setPlay(YesOrNoEnum play) {
+        this.play = play;
+    }
+}
+

+ 14 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/MusicSheetPracticeRecordVo.java

@@ -0,0 +1,14 @@
+package com.yonge.cooleshow.biz.dal.vo;
+
+import com.yonge.cooleshow.biz.dal.entity.MusicSheetPracticeRecord;
+import io.swagger.annotations.ApiModel;
+
+/**
+ * @Author: liweifan
+ * @Data: 2022-04-02 10:05:39
+ */
+@ApiModel(value = "MusicSheetPracticeRecordVo对象", description = "曲目练习记录表查询视图对象")
+public class MusicSheetPracticeRecordVo extends MusicSheetPracticeRecord{
+	private static final long serialVersionUID = 1L;
+
+}

+ 60 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/MusicSheetShareVo.java

@@ -0,0 +1,60 @@
+package com.yonge.cooleshow.biz.dal.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.util.List;
+
+/**
+ * Description 老师乐谱分享信息
+ *
+ * @author liujunchi
+ * @date 2022-04-01
+ */
+@ApiModel(value = "MusicSheetShareVo对象", description = "老师乐谱分享信息")
+public class MusicSheetShareVo {
+
+    @ApiModelProperty("老师姓名")
+    private String name;
+
+    @ApiModelProperty("老师头像")
+    private String avatar;
+
+    @ApiModelProperty("乐谱数量")
+    private Long musicSheetCount;
+
+    @ApiModelProperty("乐谱信息")
+    private List<MusicSheetVo> musicSheetVoList;
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getAvatar() {
+        return avatar;
+    }
+
+    public void setAvatar(String avatar) {
+        this.avatar = avatar;
+    }
+
+    public Long getMusicSheetCount() {
+        return musicSheetCount;
+    }
+
+    public void setMusicSheetCount(Long musicSheetCount) {
+        this.musicSheetCount = musicSheetCount;
+    }
+
+    public List<MusicSheetVo> getMusicSheetVoList() {
+        return musicSheetVoList;
+    }
+
+    public void setMusicSheetVoList(List<MusicSheetVo> musicSheetVoList) {
+        this.musicSheetVoList = musicSheetVoList;
+    }
+}

+ 23 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/MusicSheetVo.java

@@ -1,6 +1,7 @@
 package com.yonge.cooleshow.biz.dal.vo;
 
 import com.yonge.cooleshow.biz.dal.entity.MusicSheet;
+import com.yonge.cooleshow.biz.dal.enums.YesOrNoEnum;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 
@@ -16,12 +17,18 @@ public class MusicSheetVo extends MusicSheet {
     @ApiModelProperty("添加人")
     private String addName;
 
+    @ApiModelProperty("添加头像(老师头像)")
+    private String addUserAvatar;
+
     @ApiModelProperty("标签名")
     private String musicTagNames;
 
     @ApiModelProperty("声部名")
     private String subjectNames;
 
+    @ApiModelProperty("收藏 0:否,1:是")
+    private YesOrNoEnum favorite;
+
     public String getAddName() {
         return addName;
     }
@@ -45,4 +52,20 @@ public class MusicSheetVo extends MusicSheet {
     public void setSubjectNames(String subjectNames) {
         this.subjectNames = subjectNames;
     }
+
+    public String getAddUserAvatar() {
+        return addUserAvatar;
+    }
+
+    public void setAddUserAvatar(String addUserAvatar) {
+        this.addUserAvatar = addUserAvatar;
+    }
+
+    public YesOrNoEnum getFavorite() {
+        return favorite;
+    }
+
+    public void setFavorite(YesOrNoEnum favorite) {
+        this.favorite = favorite;
+    }
 }

+ 35 - 0
cooleshow-user/user-biz/src/main/resources/config/mybatis/MusicAlbumMapper.xml

@@ -39,8 +39,10 @@
         ,(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
+        ,t2.num as albumFavoriteCount
         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_
+        left join (select count(1) as num,af.album_id_ from album_favorite af group by af.album_id_) t2 on t2.album_id_ = t.id_
         <where>
             <if test="query.idAndName != null and query.idAndName != ''">
                 and (t.id_ like concat('%',#{query.idAndName},'%') or
@@ -52,6 +54,39 @@
                     find_in_set(#{item},t.album_tag_)
                 </foreach>
             </if>
+            <if test="query.albumStatus != null">
+                and t.album_status_ = #{query.albumStatus}
+            </if>
+        </where>
+    </select>
+
+    <select id="selectFavoritePage" 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
+        ,t2.num as albumFavoriteCount
+        from music_album t
+        left join album_favorite af2 on af2.album_id_ = t.id_
+        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_
+        left join (select count(1) as num,af.album_id_ from album_favorite af group by af.album_id_) t2 on t2.album_id_ = t.id_
+        <where>
+            <if test="query.studentId != null">
+                and af2.user_id_ = #{query.studentId}
+            </if>
+            <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>
+            <if test="query.albumStatus != null">
+                and t.album_status_ = #{query.albumStatus}
+            </if>
         </where>
     </select>
 </mapper>

+ 167 - 19
cooleshow-user/user-biz/src/main/resources/config/mybatis/MusicSheetMapper.xml

@@ -60,34 +60,45 @@
     <select id="selectPage" resultType="com.yonge.cooleshow.biz.dal.vo.MusicSheetVo">
         select <include refid="Base_Column_List"/>
         ,su.username_ as addName
+        ,su.avatar_ as addUserAvatar
         ,(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},'%') 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>
+            <include refid="QueryInfo"/>
         </where>
     </select>
 
+    <sql id="QueryInfo">
+        <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.auditStatus != null">
+            and t.audit_status_ = #{param.auditStatus}
+        </if>
+        <if test="param.createBy != null">
+            and t.create_by_ = #{param.createBy}
+        </if>
+    </sql>
+
     <select id="selectAlbumDetailPage" resultType="com.yonge.cooleshow.biz.dal.entity.MusicSheet">
         select <include refid="Base_Column_List"/>
         from music_sheet t
@@ -123,4 +134,141 @@
             </if>
         </where>
     </select>
+
+    <select id="detail" resultMap="DetailResultMap">
+        SELECT
+        <include refid="Base_Column_List"/>
+        ,msa.id_ as accompanimentId
+        ,msa.music_sheet_id_ as accompanimentMusicSheetId
+        ,msa.music_subject_ as accompanimentMusicSubject
+        ,msa.audio_file_url_ as accompanimentAudioFileUrl
+        ,msa.sort_number_ as accompanimentSortNumber
+        ,msa.create_time_ as accompanimentCreateTime
+
+        FROM music_sheet t
+        left join music_sheet_accompaniment msa on msa.music_sheet_id_ = t.id_
+        where t.id_ = #{id}
+         order by  msa.sort_number_
+    </select>
+
+
+    <resultMap id="DetailResultMap" type="com.yonge.cooleshow.biz.dal.vo.MusicSheetDetailVo">
+        <id column="id" jdbcType="BIGINT" property="id"/>
+        <result column="musicSheetName" jdbcType="VARCHAR" property="musicSheetName"/>
+        <result column="userId" jdbcType="BIGINT" property="userId"/>
+        <result column="composer" jdbcType="VARCHAR" property="composer"/>
+        <result column="musicSubject" jdbcType="VARCHAR" property="musicSubject"/>
+        <result column="audioType" jdbcType="VARCHAR" property="audioType"/>
+        <result column="musicTag" jdbcType="VARCHAR" property="musicTag"/>
+        <result column="playSpeed" jdbcType="INTEGER" property="playSpeed"/>
+        <result column="canEvaluate" jdbcType="TINYINT" property="canEvaluate"/>
+        <result column="showFingering" jdbcType="TINYINT" property="showFingering"/>
+        <result column="chargeType" jdbcType="TINYINT" property="chargeType"/>
+        <result column="auditStatus" jdbcType="TINYINT" property="auditStatus"/>
+        <result column="sortNumber" jdbcType="INTEGER" property="sortNumber"/>
+        <result column="topFlag" jdbcType="TINYINT" property="topFlag"/>
+        <result column="hotFlag" jdbcType="TINYINT" property="hotFlag"/>
+        <result column="musicPrice" jdbcType="DECIMAL" property="musicPrice"/>
+        <result column="audioFileUrl" jdbcType="VARCHAR" property="audioFileUrl"/>
+        <result column="xmlFileUrl" jdbcType="VARCHAR" property="xmlFileUrl"/>
+        <result column="hasBeat" jdbcType="TINYINT" property="hasBeat"/>
+        <result column="createTime" jdbcType="TIMESTAMP" property="createTime"/>
+        <result column="createBy" jdbcType="BIGINT" property="createBy"/>
+        <result column="updateTime" jdbcType="TIMESTAMP" property="updateTime"/>
+        <result column="updateBy" jdbcType="BIGINT" property="updateBy"/>
+        <result column="remark" jdbcType="VARCHAR" property="remark"/>
+        <collection property="background" ofType="com.yonge.cooleshow.biz.dal.entity.MusicSheetAccompaniment">
+            <id column="accompanimentId" jdbcType="BIGINT" property="id"/>
+            <result column="accompanimentMusicSheetId" jdbcType="BIGINT" property="musicSheetId"/>
+            <result column="accompanimentMusicSubject" jdbcType="VARCHAR" property="musicSubject"/>
+            <result column="accompanimentAudioFileUrl" jdbcType="VARCHAR" property="audioFileUrl"/>
+            <result column="accompanimentSortNumber" jdbcType="TINYINT" property="sortNumber"/>
+            <result column="accompanimentCreateTime" jdbcType="TIMESTAMP" property="createTime"/>
+        </collection>
+    </resultMap>
+
+    <select id="selectStudentMusicPage" resultType="com.yonge.cooleshow.biz.dal.vo.MusicSheetVo">
+        select <include refid="Base_Column_List"/>
+        ,su.username_ as addName
+        ,su.avatar_ as addUserAvatar
+        ,(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
+        <if test="param.studentId != null">
+            ,if(mf.id_ is not null,1,0) as favorite
+        </if>
+        from music_sheet t
+        left join sys_user su on t.create_by_ = su.id_
+        <if test="param.studentId != null">
+            left join music_favorite mf on t.id_ = mf.music_sheet_id_ and mf.user_id_ = #{param.studentId}
+        </if>
+        <where>
+            <include refid="QueryInfo"/>
+        </where>
+    </select>
+
+    <select id="selectMyMusicPage" resultType="com.yonge.cooleshow.biz.dal.vo.MusicSheetVo">
+        select <include refid="Base_Column_List"/>
+        ,su.username_ as addName
+        ,su.avatar_ as addUserAvatar
+        ,(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_
+        left join music_sheet_purchase_record mspr on mspr.music_sheet_id_ = t.id_
+        <where>
+            <include refid="QueryInfo"/>
+            <if test="param.studentId != null">
+                and mspr.student_id_ = #{param.studentId}
+                and mspr.order_status_ = 1
+            </if>
+        </where>
+    </select>
+
+    <select id="selectFavoriteMusicPage" resultType="com.yonge.cooleshow.biz.dal.vo.MusicSheetVo">
+        select <include refid="Base_Column_List"/>
+        ,su.username_ as addName
+        ,su.avatar_ as addUserAvatar
+        ,(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
+        ,if(mf.id_ is not null,1,0) as favorite
+        from music_sheet t
+        left join sys_user su on t.create_by_ = su.id_
+        left join music_favorite mf on t.id_ = mf.music_sheet_id_
+        <where>
+            <include refid="QueryInfo"/>
+            <if test="param.studentId != null">
+                and mf.user_id_ = #{param.studentId}
+            </if>
+        </where>
+    </select>
+
+    <select id="selectPracticeMusicPage" resultType="com.yonge.cooleshow.biz.dal.vo.MusicSheetVo">
+        select <include refid="Base_Column_List"/>
+        ,su.username_ as addName
+        ,su.avatar_ as addUserAvatar
+        ,(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>
+            <include refid="QueryInfo"/>
+            <if test="practiceMusicIdList != null and practiceMusicIdList.size() != 0">
+                and t.id_ in
+                <foreach collection="practiceMusicIdList" item="item" open="(" close=")" separator=",">
+                    #{item}
+                </foreach>
+            </if>
+        </where>
+        <if test="practiceMusicIdList != null and practiceMusicIdList.size() != 0">
+            order by field(t.id_,
+            <foreach collection="practiceMusicIdList" item="item" separator=",">
+                #{item}
+            </foreach>
+        </if>
+        )
+    </select>
 </mapper>

+ 36 - 0
cooleshow-user/user-biz/src/main/resources/config/mybatis/MusicSheetPracticeRecordMapper.xml

@@ -0,0 +1,36 @@
+<?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" >
+<mapper namespace="com.yonge.cooleshow.biz.dal.dao.MusicSheetPracticeRecordDao">
+	<resultMap id="BaseResultMap" type="com.yonge.cooleshow.biz.dal.entity.MusicSheetPracticeRecord">
+            <result column="id_" property="id" />
+	        <result column="user_id_" property="userId" />
+	        <result column="music_sheet_id_" property="musicSheetId" />
+	        <result column="create_time_" property="createTime" />
+		</resultMap>  
+    
+    <!-- 表字段 -->
+    <sql id="baseColumns">
+         t.id_
+        , t.user_id_
+        , t.music_sheet_id_
+        , t.create_time_
+        </sql>
+
+	<select id="selectPracticeMusicIdPage" resultType="java.lang.Long">
+        select t.music_sheet_id_ from  (select mspr.music_sheet_id_
+        from music_sheet_practice_record mspr
+        left join music_sheet ms on mspr.music_sheet_id_ = ms.id_
+        <where>
+            <if test="param.auditStatus !=null">
+                and ms.audit_status_ = #{param.auditStatus}
+            </if>
+            <if test="param.state != null">
+                and ms.state_ = #{param.state}
+            </if>
+            <if test="param.studentId != null">
+                and mspr.user_id_ = #{param.studentId}
+            </if>
+        </where>
+        order by mspr.create_time_) t group by t.music_sheet_id_
+    </select>
+</mapper>

+ 106 - 0
cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/MusicAlbumController.java

@@ -0,0 +1,106 @@
+package com.yonge.cooleshow.student.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
+import com.yonge.cooleshow.auth.api.entity.SysUser;
+import com.yonge.cooleshow.biz.dal.dto.search.MusicAlbumDetailSearch;
+import com.yonge.cooleshow.biz.dal.dto.search.MusicAlbumSearch;
+import com.yonge.cooleshow.biz.dal.dto.search.StudentMusicAlbumSearch;
+import com.yonge.cooleshow.biz.dal.enums.StateEnum;
+import com.yonge.cooleshow.biz.dal.enums.YesOrNoEnum;
+import com.yonge.cooleshow.biz.dal.service.MusicAlbumService;
+import com.yonge.cooleshow.biz.dal.support.PageUtil;
+import com.yonge.cooleshow.biz.dal.support.Query;
+import com.yonge.cooleshow.biz.dal.vo.AlbumDetailVo;
+import com.yonge.cooleshow.biz.dal.vo.MusicAlbumVo;
+import com.yonge.cooleshow.common.controller.BaseController;
+import com.yonge.cooleshow.common.entity.HttpResponseResult;
+import com.yonge.cooleshow.common.page.PageInfo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.Valid;
+
+/**
+ * 专辑表 web 控制层
+ * @author yzp
+ * @date 2022-03-26 00:21:46
+ * @version v1.0
+ **/
+@RestController
+@RequestMapping("/music/album")
+@Api(tags = "专辑表 API接口")
+public class MusicAlbumController extends BaseController {
+    @Autowired
+    private SysUserFeignService sysUserFeignService;
+
+	@Autowired
+	private MusicAlbumService musicAlbumService;
+
+
+    @ApiOperation(value = "分页查询", httpMethod="POST", consumes="application/json", produces="application/json")
+    @PostMapping(value="/list", consumes="application/json", produces="application/json")
+    public HttpResponseResult<PageInfo<MusicAlbumVo>> list(@RequestBody MusicAlbumSearch query) {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null) {
+            return failed("用户信息获取失败");
+        }
+        query.setAlbumStatus(StateEnum.ENABLE);
+        IPage<MusicAlbumVo> iPage = musicAlbumService.selectPage(PageUtil.getPage(query),query);
+        return succeed(PageUtil.pageInfo(iPage));
+    }
+
+
+    /**
+     * 专辑详情
+     */
+    @PostMapping("/detail")
+    @ApiOperation(value = "专辑详情", consumes="application/json", produces="application/json")
+    public HttpResponseResult<AlbumDetailVo> detail(@Valid @RequestBody MusicAlbumDetailSearch query) {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null) {
+            return failed("用户信息获取失败");
+        }
+        query.setType(2);
+        query.setState(StateEnum.ENABLE);
+        YesOrNoEnum yesOrNoEnum = musicAlbumService.checkFavorite(sysUser.getId(),query.getId() );
+        AlbumDetailVo albumDetailVo = musicAlbumService.detail(PageUtil.getPage(query), query);
+        albumDetailVo.setFavorite(yesOrNoEnum);
+        return succeed(albumDetailVo);
+    }
+
+    /**
+     * 专辑收藏
+     */
+    @PostMapping("/favorite/{id}")
+    @ApiOperation(value = "专辑收藏/取消收藏")
+    public HttpResponseResult<Boolean> favorite(@ApiParam(value = "专辑编号", required = true) @PathVariable("id") Long id) {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null) {
+            return failed("用户信息获取失败");
+        }
+
+        return succeed(musicAlbumService.setFavorite(sysUser.getId(),id));
+    }
+
+
+    /**
+     * 专辑收藏
+     */
+    @GetMapping("/favorite")
+    @ApiOperation(value = "收藏专辑列表")
+    public HttpResponseResult<PageInfo<MusicAlbumVo>> favoriteAlbum(Query query) {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null) {
+            return failed("用户信息获取失败");
+        }
+        StudentMusicAlbumSearch search = new StudentMusicAlbumSearch();
+        search.setStudentId(sysUser.getId());
+        search.setAlbumStatus(StateEnum.ENABLE);
+        IPage<MusicAlbumVo> albumVoIPage = musicAlbumService.favoriteAlbum(PageUtil.getPage(query), search);
+        return succeed(PageUtil.pageInfo(albumVoIPage));
+    }
+}

+ 141 - 0
cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/MusicSheetController.java

@@ -0,0 +1,141 @@
+package com.yonge.cooleshow.student.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
+import com.yonge.cooleshow.auth.api.entity.SysUser;
+import com.yonge.cooleshow.auth.api.enums.SysUserType;
+import com.yonge.cooleshow.biz.dal.dto.search.StudentMusicSheetSearch;
+import com.yonge.cooleshow.biz.dal.enums.AuditEnum;
+import com.yonge.cooleshow.biz.dal.enums.StateEnum;
+import com.yonge.cooleshow.biz.dal.service.MusicSheetService;
+import com.yonge.cooleshow.biz.dal.support.PageUtil;
+import com.yonge.cooleshow.biz.dal.support.Query;
+import com.yonge.cooleshow.biz.dal.vo.MusicSheetDetailVo;
+import com.yonge.cooleshow.biz.dal.vo.MusicSheetVo;
+import com.yonge.cooleshow.common.controller.BaseController;
+import com.yonge.cooleshow.common.entity.HttpResponseResult;
+import com.yonge.cooleshow.common.page.PageInfo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * 曲谱表 web 控制层
+ * @author yzp
+ * @date 2022-03-26 00:21:46
+ * @version v1.0
+ **/
+@RestController
+@RequestMapping("/music/sheet")
+@Api(tags = "曲谱表 API接口")
+public class MusicSheetController extends BaseController {
+    @Autowired
+    private SysUserFeignService sysUserFeignService;
+
+	@Autowired
+	private MusicSheetService musicSheetService;
+
+
+    /**
+     * 查询单条
+     */
+    @GetMapping("/detail/{id}")
+    @ApiOperation(value = "详情", notes = "传入musicTag")
+    public HttpResponseResult<MusicSheetDetailVo> detail(@ApiParam(value = "曲谱编号", required = true) @PathVariable("id") Long id) {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null) {
+            return failed("用户信息获取失败");
+        }
+        return succeed(musicSheetService.detail(id, sysUser, SysUserType.STUDENT));
+    }
+
+    @ApiOperation(value = "分页查询", httpMethod="POST", consumes="application/json", produces="application/json")
+    @PostMapping(value="/list", consumes="application/json", produces="application/json")
+    public HttpResponseResult<PageInfo<MusicSheetVo>> list(@RequestBody StudentMusicSheetSearch query) {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null) {
+            return failed("用户信息获取失败");
+        }
+
+        // 学生 只能看通过审核 并且 启用的 曲目
+        query.setState(StateEnum.ENABLE);
+        query.setAuditStatus(AuditEnum.OPEN);
+        query.setStudentId(sysUser.getId());
+        IPage<MusicSheetVo> musicSheetVoIPage = musicSheetService.selectStudentPage(PageUtil.getPage(query), query);
+        return succeed(PageUtil.pageInfo(musicSheetVoIPage));
+    }
+
+    /**
+     * 曲目收藏
+     */
+    @PostMapping("/favorite/{id}")
+    @ApiOperation(value = "曲目收藏/取消收藏")
+    public HttpResponseResult<Boolean> favorite(@ApiParam(value = "曲目编号", required = true) @PathVariable("id") Long id) {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null) {
+            return failed("用户信息获取失败");
+        }
+        return succeed(musicSheetService.setFavorite(sysUser.getId(),id));
+    }
+
+
+
+    /**
+     * 我的单曲,收藏单曲
+     */
+    @GetMapping("/my")
+    @ApiOperation(value = "我的单曲")
+    public HttpResponseResult<PageInfo<MusicSheetVo>> myMusic(Query query) {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null) {
+            return failed("用户信息获取失败");
+        }
+        StudentMusicSheetSearch search = new StudentMusicSheetSearch();
+        search.setStudentId(sysUser.getId());
+        search.setState(StateEnum.ENABLE);
+        search.setAuditStatus(AuditEnum.OPEN);
+        IPage<MusicSheetVo> sheetVoIPage = musicSheetService.myMusic(PageUtil.getPage(query),search);
+        return succeed(PageUtil.pageInfo(sheetVoIPage));
+    }
+
+
+    /**
+     * 我的单曲,收藏单曲
+     */
+    @GetMapping("/favorite")
+    @ApiOperation(value = "收藏单曲")
+    public HttpResponseResult<PageInfo<MusicSheetVo>> favoriteMusic(Query query) {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null) {
+            return failed("用户信息获取失败");
+        }
+        StudentMusicSheetSearch search = new StudentMusicSheetSearch();
+        search.setStudentId(sysUser.getId());
+        search.setState(StateEnum.ENABLE);
+        search.setAuditStatus(AuditEnum.OPEN);
+        IPage<MusicSheetVo> sheetVoIPage = musicSheetService.favoriteMusic(PageUtil.getPage(query),search);
+        return succeed(PageUtil.pageInfo(sheetVoIPage));
+    }
+
+
+    /**
+     * 最近练习
+     */
+    @GetMapping("/practice")
+    @ApiOperation(value = "最近练习")
+    public HttpResponseResult<PageInfo<MusicSheetVo>> practiceMusic(Query query) {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null) {
+            return failed("用户信息获取失败");
+        }
+        StudentMusicSheetSearch search = new StudentMusicSheetSearch();
+        search.setStudentId(sysUser.getId());
+        search.setState(StateEnum.ENABLE);
+        search.setAuditStatus(AuditEnum.OPEN);
+        IPage<MusicSheetVo> sheetVoIPage = musicSheetService.practiceMusic(PageUtil.getPage(query),search);
+        return succeed(PageUtil.pageInfo(sheetVoIPage));
+    }
+
+}

+ 122 - 0
cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/MusicSheetController.java

@@ -0,0 +1,122 @@
+package com.yonge.cooleshow.teacher.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
+import com.yonge.cooleshow.auth.api.entity.SysUser;
+import com.yonge.cooleshow.auth.api.enums.SysUserType;
+import com.yonge.cooleshow.biz.dal.dto.MusicSheetDto;
+import com.yonge.cooleshow.biz.dal.dto.search.MusicSheetSearch;
+import com.yonge.cooleshow.biz.dal.entity.MusicSheet;
+import com.yonge.cooleshow.biz.dal.entity.MusicSheetAccompaniment;
+import com.yonge.cooleshow.biz.dal.enums.AudioTypeEnum;
+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.service.MusicSheetService;
+import com.yonge.cooleshow.biz.dal.support.PageUtil;
+import com.yonge.cooleshow.biz.dal.vo.MusicSheetDetailVo;
+import com.yonge.cooleshow.biz.dal.vo.MusicSheetShareVo;
+import com.yonge.cooleshow.biz.dal.vo.MusicSheetVo;
+import com.yonge.cooleshow.common.controller.BaseController;
+import com.yonge.cooleshow.common.entity.HttpResponseResult;
+import com.yonge.cooleshow.common.page.PageInfo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.util.CollectionUtils;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.Valid;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 曲谱表 web 控制层
+ * @author yzp
+ * @date 2022-03-26 00:21:46
+ * @version v1.0
+ **/
+@RestController
+@RequestMapping("/music/sheet")
+@Api(tags = "曲谱表 API接口")
+public class MusicSheetController extends BaseController {
+    @Autowired
+    private SysUserFeignService sysUserFeignService;
+
+	@Autowired
+	private MusicSheetService musicSheetService;
+
+
+    /**
+     * 查询单条
+     */
+    @GetMapping("/detail/{id}")
+    @ApiOperation(value = "详情", notes = "传入musicTag")
+    public HttpResponseResult<MusicSheetDetailVo> detail(@ApiParam(value = "曲谱编号", required = true) @PathVariable("id") Long id) {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null) {
+            return failed("用户信息获取失败");
+        }
+        return succeed(musicSheetService.detail(id, sysUser, SysUserType.TEACHER));
+    }
+
+	@ApiOperation(value = "新增", httpMethod="POST", consumes="application/json", produces="application/json")
+    @PostMapping(value="/create", consumes="application/json", produces="application/json")
+    public HttpResponseResult<Object> create(@Valid @RequestBody MusicSheetDto musicSheetDto) {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null) {
+            return failed("用户信息获取失败");
+        }
+
+        if (ChargeTypeEnum.CHARGE.getCode().equals(musicSheetDto.getChargeType().getCode())
+                && musicSheetDto.getMusicPrice()==null){
+            return failed("此曲谱为收费曲谱,需要提供价格");
+        }
+
+        musicSheetDto.setUserId(sysUser.getId());
+        List<MusicSheetAccompaniment> list;
+        if (!AudioTypeEnum.MIDI.getCode().equals(musicSheetDto.getAudioType().getCode())){
+            list = musicSheetDto.getBackground();
+            if (CollectionUtils.isEmpty(list)){
+                return failed("mp3音频文件对应的主音或者伴奏文件没有提供");
+            }
+            musicSheetService.saveMp3AndAccompaniment(musicSheetDto,sysUser);
+        } else {
+            MusicSheet musicSheet = new MusicSheet();
+            BeanUtils.copyProperties(musicSheetDto, musicSheet);
+            musicSheet.setAuditStatus(AuditEnum.AUDITING);
+            musicSheet.setCreateBy(sysUser.getId());
+            musicSheet.setCreateTime(new Date());
+            musicSheet.setState(StateEnum.STOP);
+            musicSheetService.save(musicSheet);
+        }
+        return succeed("新增曲谱成功");
+    }
+
+    @ApiOperation(value = "分页查询", httpMethod="POST", consumes="application/json", produces="application/json")
+    @PostMapping(value="/list", consumes="application/json", produces="application/json")
+    public HttpResponseResult<PageInfo<MusicSheetVo>> list(@RequestBody MusicSheetSearch query) {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null) {
+            return failed("用户信息获取失败");
+        }
+        // 设置只查老师用户 状态为启用
+        query.setCreateBy(sysUser.getId());
+        query.setState(StateEnum.ENABLE);
+
+        IPage<MusicSheetVo> musicSheetVoIPage = musicSheetService.selectPage(PageUtil.getPage(query), query);
+        return succeed(PageUtil.pageInfo(musicSheetVoIPage));
+    }
+
+    @ApiOperation(value = "乐谱分享")
+    @GetMapping(value="/share")
+    public HttpResponseResult<MusicSheetShareVo> shareMusicSheet() {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null) {
+            return failed("用户信息获取失败");
+        }
+        return succeed(musicSheetService.shareMusicSheet(sysUser));
+    }
+}

+ 34 - 0
cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/MusicTagController.java

@@ -0,0 +1,34 @@
+package com.yonge.cooleshow.teacher.controller;
+
+import com.yonge.cooleshow.biz.dal.service.MusicTagService;
+import com.yonge.cooleshow.biz.dal.vo.MusicTagVo;
+import com.yonge.cooleshow.common.controller.BaseController;
+import com.yonge.cooleshow.common.entity.HttpResponseResult;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+@RestController
+@RequestMapping("/MusicTag")
+@Api(value = "音乐标签表", tags = "音乐标签表")
+public class MusicTagController extends BaseController {
+
+    @Autowired
+    private MusicTagService musicTagService;
+
+	/**
+	 * 查询分页tree
+	 */
+	@GetMapping("/tree")
+	@ApiOperation(value = "查询标签树列表", notes = "传入musicTag")
+	public HttpResponseResult<List<MusicTagVo>> tree() {
+		List<MusicTagVo> treeList = musicTagService.selectMusicTagTree();
+		return succeed(treeList);
+	}
+
+}