Browse Source

学生端、老师端课程关联曲目/专辑显示

Eric 2 years ago
parent
commit
f5b5058a85

+ 9 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/VideoLessonGroupDetailService.java

@@ -3,9 +3,11 @@ 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.search.VideoLessonSearch;
+import com.yonge.cooleshow.biz.dal.entity.CourseRelationMusicAlbum;
 import com.yonge.cooleshow.biz.dal.entity.VideoLessonGroupDetail;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.yonge.cooleshow.biz.dal.vo.*;
+import com.yonge.cooleshow.biz.dal.wrapper.course.CourseRelationWrapper;
 
 import java.util.List;
 
@@ -28,4 +30,11 @@ public interface VideoLessonGroupDetailService extends IService<VideoLessonGroup
 
     VideoLessonStudentVo selectVideoLesson(Long groupId,Long userId);
 
+    /**
+     * 课程关联曲目/专辑信息
+     * @param recordInfos
+     * @return List<CourseRelationWrapper.MusicAlbumInfo>
+     */
+    List<CourseRelationWrapper.MusicAlbumInfo> getCourseRelationMusicAlbumInfos(List<CourseRelationMusicAlbum> recordInfos);
+
 }

+ 91 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/VideoLessonGroupDetailServiceImpl.java

@@ -3,8 +3,23 @@ package com.yonge.cooleshow.biz.dal.service.impl;
 import java.util.Collections;
 import java.util.HashSet;
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
+import java.util.function.Function;
+import java.util.stream.Collectors;
 
+import com.alibaba.fastjson.JSON;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+import com.yonge.cooleshow.biz.dal.entity.CourseRelationMusicAlbum;
+import com.yonge.cooleshow.biz.dal.entity.MusicAlbum;
+import com.yonge.cooleshow.biz.dal.entity.MusicSheet;
+import com.yonge.cooleshow.biz.dal.enums.course.RelationMusicAlbumEnum;
+import com.yonge.cooleshow.biz.dal.service.CourseRelationMusicAlbumService;
+import com.yonge.cooleshow.biz.dal.service.MusicAlbumService;
+import com.yonge.cooleshow.biz.dal.service.MusicSheetService;
+import com.yonge.cooleshow.biz.dal.wrapper.course.CourseRelationWrapper;
+import org.apache.commons.collections.CollectionUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.BeanUtils;
@@ -13,7 +28,6 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
@@ -71,6 +85,12 @@ public class VideoLessonGroupDetailServiceImpl extends ServiceImpl<VideoLessonGr
 
     @Autowired
     private TeacherService teacherService;
+    @Autowired
+    private CourseRelationMusicAlbumService courseRelationMusicAlbumService;
+    @Autowired
+    private MusicSheetService musicSheetService;
+    @Autowired
+    private MusicAlbumService musicAlbumService;
 
     public VideoLessonGroupDetailDao getDao() {
         return videoLessonGroupDetailDao;
@@ -217,11 +237,81 @@ public class VideoLessonGroupDetailServiceImpl extends ServiceImpl<VideoLessonGr
         lessonStudentVo.setDetailList(JsonUtil.parseArray(videoLessonGroupLog.getVideoDetailJson(), VideoLessonGroupDetail.class));
 
         // 课程关联曲目、专辑信息
+        List<CourseRelationMusicAlbum> recordInfos = courseRelationMusicAlbumService.lambdaQuery()
+                .eq(CourseRelationMusicAlbum::getCourseGroupId, groupId)
+                .list();
+
+        List<CourseRelationWrapper.MusicAlbumInfo> musicAlbumInfos = Lists.newArrayList();
+        if (CollectionUtils.isNotEmpty(recordInfos)) {
+
+            musicAlbumInfos = getCourseRelationMusicAlbumInfos(recordInfos);
+        }
+        lessonStudentVo.setMusicAlbumInfos(musicAlbumInfos);
+
 
         return lessonStudentVo;
     }
 
     /**
+     * 课程关联曲目/专辑信息
+     * @param recordInfos
+     * @return List<CourseRelationWrapper.MusicAlbumInfo>
+     */
+    public List<CourseRelationWrapper.MusicAlbumInfo> getCourseRelationMusicAlbumInfos(List<CourseRelationMusicAlbum> recordInfos) {
+
+        List<CourseRelationWrapper.MusicAlbumInfo> musicAlbumInfos = JSON.parseArray(JSON.toJSONString(recordInfos),
+                CourseRelationWrapper.MusicAlbumInfo.class);
+
+        // 分别查询曲目/专辑信息
+        Map<String, List<Long>> collect = musicAlbumInfos.stream()
+                .collect(Collectors.groupingBy(x -> x.getRelationType().getCode(),
+                        Collectors.mapping(CourseRelationWrapper.MusicAlbumInfo::getMusicAlbumId, Collectors.toList())));
+
+        Map<Long, MusicSheet> musicInfoMap = Maps.newHashMap();
+        // 曲目信息
+        if (collect.containsKey(RelationMusicAlbumEnum.MUSIC.name())) {
+
+            List<Long> musicIds = collect.get(RelationMusicAlbumEnum.MUSIC.name());
+
+            musicInfoMap = musicSheetService.listByIds(musicIds).stream()
+                    .collect(Collectors.toMap(MusicSheet::getId, Function.identity(), (o, n) -> n));
+        }
+
+        Map<Long, MusicAlbum> albumInfoMap = Maps.newHashMap();
+        // 专辑信息
+        if (collect.containsKey(RelationMusicAlbumEnum.ALBUM.name())) {
+
+            List<Long> albumIds = collect.get(RelationMusicAlbumEnum.ALBUM.name());
+
+            albumInfoMap = musicAlbumService.listByIds(albumIds).stream()
+                    .collect(Collectors.toMap(MusicAlbum::getId, Function.identity(), (o, n) -> n));
+        }
+
+        for (CourseRelationWrapper.MusicAlbumInfo item : musicAlbumInfos) {
+
+            item.name("").cover("");
+            if (RelationMusicAlbumEnum.MUSIC == item.getRelationType()
+                    && musicInfoMap.containsKey(item.getMusicAlbumId())) {
+
+                MusicSheet music = musicInfoMap.get(item.getMusicAlbumId());
+
+                item.name(music.getMusicSheetName())
+                        .cover(music.getTitleImg());
+            }
+
+            if (RelationMusicAlbumEnum.ALBUM == item.getRelationType()
+                    && albumInfoMap.containsKey(item.getMusicAlbumId())) {
+
+                MusicAlbum album = albumInfoMap.get(item.getMusicAlbumId());
+
+                item.name(album.getAlbumName())
+                        .cover(album.getAlbumCoverUrl());
+            }
+        }
+        return musicAlbumInfos;
+    }
+
+    /**
     * @Description: 刷新组内lesson_count_
     * @Author: cy 
     * @Date: 2022/3/31 

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

@@ -7,6 +7,11 @@ import java.util.List;
 import java.util.Map;
 import java.util.stream.Collectors;
 
+import com.google.common.collect.Lists;
+import com.yonge.cooleshow.biz.dal.entity.CourseRelationMusicAlbum;
+import com.yonge.cooleshow.biz.dal.service.CourseRelationMusicAlbumService;
+import com.yonge.cooleshow.biz.dal.service.VideoLessonGroupDetailService;
+import com.yonge.cooleshow.biz.dal.wrapper.course.CourseRelationWrapper;
 import org.apache.commons.collections.CollectionUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -96,6 +101,10 @@ public class VideoLessonGroupServiceImpl extends ServiceImpl<VideoLessonGroupDao
     
     @Autowired
     private VideoLessonGroupLogService videoLessonGroupLogService;
+    @Autowired
+    private VideoLessonGroupDetailService videoLessonGroupDetailService;
+    @Autowired
+    private CourseRelationMusicAlbumService courseRelationMusicAlbumService;
 
     public VideoLessonGroupDao getDao() {
         return videoLessonGroupDao;
@@ -378,6 +387,19 @@ public class VideoLessonGroupServiceImpl extends ServiceImpl<VideoLessonGroupDao
         VideoLessonSearch search = new VideoLessonSearch();
         search.setVideoLessonGroupId(groupId);
         lessonStudentVo.setDetailList(videoLessonGroupDetailDao.selectPage(null, search));
+
+        // 课程关联曲目/专辑信息
+        List<CourseRelationMusicAlbum> recordInfos = courseRelationMusicAlbumService.lambdaQuery()
+                .eq(CourseRelationMusicAlbum::getCourseGroupId, groupId)
+                .list();
+
+        List<CourseRelationWrapper.MusicAlbumInfo> musicAlbumInfos = Lists.newArrayList();
+        if (CollectionUtils.isNotEmpty(recordInfos)) {
+
+            musicAlbumInfos = videoLessonGroupDetailService.getCourseRelationMusicAlbumInfos(recordInfos);
+        }
+        lessonStudentVo.setMusicAlbumInfos(musicAlbumInfos);
+
         return lessonStudentVo;
     }
 

+ 11 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/VideoLessonStudentVo.java

@@ -2,6 +2,7 @@ package com.yonge.cooleshow.biz.dal.vo;
 
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.yonge.cooleshow.biz.dal.entity.VideoLessonGroupDetail;
+import com.yonge.cooleshow.biz.dal.wrapper.course.CourseRelationWrapper;
 import com.yonge.cooleshow.common.entity.BaseEntity;
 import com.yonge.cooleshow.common.enums.YesOrNoEnum;
 import io.swagger.annotations.ApiModel;
@@ -20,7 +21,8 @@ public class VideoLessonStudentVo extends BaseEntity {
     @ApiModelProperty("课程详情信息 ")
     private List<VideoLessonGroupDetail> detailList;
 
-
+    @ApiModelProperty("关联曲目/专辑信息 ")
+    private List<CourseRelationWrapper.MusicAlbumInfo> musicAlbumInfos;
 
     @ApiModelProperty(value = "true已买,false未买")
     private Boolean alreadyBuy;
@@ -82,4 +84,12 @@ public class VideoLessonStudentVo extends BaseEntity {
     public void setAlreadyBuy(Boolean alreadyBuy) {
         this.alreadyBuy = alreadyBuy;
     }
+
+    public List<CourseRelationWrapper.MusicAlbumInfo> getMusicAlbumInfos() {
+        return musicAlbumInfos;
+    }
+
+    public void setMusicAlbumInfos(List<CourseRelationWrapper.MusicAlbumInfo> musicAlbumInfos) {
+        this.musicAlbumInfos = musicAlbumInfos;
+    }
 }

+ 38 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/wrapper/course/CourseRelationWrapper.java

@@ -1,5 +1,10 @@
 package com.yonge.cooleshow.biz.dal.wrapper.course;
 
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.yonge.cooleshow.biz.dal.enums.course.CourseTypeEnum;
+import com.yonge.cooleshow.biz.dal.enums.course.RelationMusicAlbumEnum;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiModelProperty;
 import lombok.AllArgsConstructor;
 import lombok.Builder;
 import lombok.Data;
@@ -22,6 +27,39 @@ public class CourseRelationWrapper {
     @AllArgsConstructor
     public static class MusicAlbumInfo implements Serializable {
 
+        @ApiModelProperty("主键 ")
+        private Long id;
 
+        @ApiModelProperty("课程组id ")
+        private Long courseGroupId;
+
+        @ApiModelProperty("课程ID ")
+        private Long courseId;
+
+        @ApiModelProperty("课程类型 ")
+        private CourseTypeEnum courseType;
+
+        @ApiModelProperty("关联类型, MUSIC, ALBUM ")
+        private RelationMusicAlbumEnum relationType;
+
+        @ApiModelProperty("关联曲目专辑ID ")
+        private Long musicAlbumId;
+
+        @ApiModelProperty("曲目/专辑名称")
+        private String name;
+
+        @ApiModelProperty("图标/封面")
+        private String cover;
+
+
+        public MusicAlbumInfo name(String name) {
+            this.name = name;
+            return this;
+        }
+
+        public MusicAlbumInfo cover(String cover) {
+            this.cover = cover;
+            return this;
+        }
     }
 }

+ 1 - 0
cooleshow-user/user-biz/src/main/resources/config/mybatis/VideoLessonGroupMapper.xml

@@ -49,6 +49,7 @@
 		g.update_time_ AS updateTime,
 		g.audit_id_ AS auditId,
 		g.audit_name_ AS auditName,
+		g.relation_type_ AS relationType,
 	</sql>
 	<sql id="recordColumns">
 		g.id_ AS id,