Browse Source

调整视频课关联曲目数据来源

Eric 2 years ago
parent
commit
c6ca742e8f

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

@@ -20,7 +20,7 @@ import java.util.List;
  **/
 public interface VideoLessonGroupDetailDao extends BaseMapper<VideoLessonGroupDetail> {
     //查询视频课
-    List<VideoLessonGroupDetail> selectPage(IPage page,@Param("param") VideoLessonSearch query);
+    List<VideoLessonGroupDetailDto> selectPage(IPage page,@Param("param") VideoLessonSearch query);
 
     //根据组id查询购买用户
     List<VideoLessonPurchaseStudent> selectPageStudent(IPage page,@Param("param")  VideoLessonSearch query);

+ 13 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/VideoLessonGroupDetailDto.java

@@ -1,6 +1,7 @@
 package com.yonge.cooleshow.biz.dal.dto;
 
 import com.yonge.cooleshow.biz.dal.entity.VideoLessonGroupDetail;
+import com.yonge.cooleshow.biz.dal.wrapper.course.CourseRelationWrapper;
 import io.swagger.annotations.ApiModelProperty;
 
 import java.util.List;
@@ -8,9 +9,12 @@ import java.util.List;
 
 public class VideoLessonGroupDetailDto extends VideoLessonGroupDetail {
 
-    @ApiModelProperty("关联信息")
+    @ApiModelProperty("关联信息(更新或新增)")
     private List<CourseMusicAlbumRelationDto> relationList;
 
+    @ApiModelProperty("关联曲目/专辑信息(查看) ")
+    private List<CourseRelationWrapper.MusicAlbumInfo> musicAlbumInfos;
+
     public List<CourseMusicAlbumRelationDto> getRelationList() {
         return relationList;
     }
@@ -18,4 +22,12 @@ public class VideoLessonGroupDetailDto extends VideoLessonGroupDetail {
     public void setRelationList(List<CourseMusicAlbumRelationDto> relationList) {
         this.relationList = relationList;
     }
+
+    public List<CourseRelationWrapper.MusicAlbumInfo> getMusicAlbumInfos() {
+        return musicAlbumInfos;
+    }
+
+    public void setMusicAlbumInfos(List<CourseRelationWrapper.MusicAlbumInfo> musicAlbumInfos) {
+        this.musicAlbumInfos = musicAlbumInfos;
+    }
 }

+ 1 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/VideoLessonGroupDetail.java

@@ -22,7 +22,7 @@ import javax.validation.constraints.NotNull;
  * @version v1.0
  **/
 @ApiModel(value = "video_lesson_group_detail-视频课明细表")
-public class 	VideoLessonGroupDetail extends BaseEntity {
+public class VideoLessonGroupDetail extends BaseEntity {
 
     @TableId(value = "id_", type = IdType.AUTO)
     @ApiModelProperty(value = "主键id")

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

@@ -2,12 +2,20 @@ package com.yonge.cooleshow.biz.dal.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.yonge.cooleshow.biz.dal.entity.CourseRelationMusicAlbum;
+import com.yonge.cooleshow.biz.dal.enums.course.CourseTypeEnum;
 
 /**
  * 课程关联曲目专辑 服务类
  * @author liweifan
  * @date 2022-10-24
  */
-public interface CourseRelationMusicAlbumService extends IService<CourseRelationMusicAlbum>  {
+public interface CourseRelationMusicAlbumService extends IService<CourseRelationMusicAlbum> {
+
+    /**
+     * 异常更新课程关联曲目专辑
+     * @param groupId 课程组ID
+     * @param courseType 课程组类型
+     */
+    void asyncUpdateCourseRelationMusicAlbumInfo(Long groupId, CourseTypeEnum courseType);
 
 }

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

@@ -38,4 +38,12 @@ public interface VideoLessonGroupDetailService extends IService<VideoLessonGroup
      */
     List<CourseRelationWrapper.MusicAlbumInfo> getCourseRelationMusicAlbumInfos(List<CourseRelationMusicAlbum> recordInfos);
 
+    /**
+     * 填充课程关联曲目、专辑信息
+     * @param lessonStudentVo VideoLessonStudentVo
+     * @param musicAlbumInfos List<CourseRelationWrapper.MusicAlbumInfo>
+     */
+    void updateCourseRelationMusicAlbumInfo(VideoLessonStudentVo lessonStudentVo,
+                                            List<CourseRelationWrapper.MusicAlbumInfo> musicAlbumInfos);
+
 }

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

@@ -3,15 +3,69 @@ package com.yonge.cooleshow.biz.dal.service.impl;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.yonge.cooleshow.biz.dal.dao.CourseRelationMusicAlbumDao;
 import com.yonge.cooleshow.biz.dal.entity.CourseRelationMusicAlbum;
+import com.yonge.cooleshow.biz.dal.enums.course.CourseRelationTypeEnum;
+import com.yonge.cooleshow.biz.dal.enums.course.CourseTypeEnum;
 import com.yonge.cooleshow.biz.dal.service.CourseRelationMusicAlbumService;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import com.yonge.cooleshow.biz.dal.service.MusicSheetPurchaseRecordService;
+import com.yonge.toolset.base.util.ThreadPool;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.collections.CollectionUtils;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
 
+
+@Slf4j
 @Service
 public class CourseRelationMusicAlbumServiceImpl extends ServiceImpl<CourseRelationMusicAlbumDao, CourseRelationMusicAlbum> implements CourseRelationMusicAlbumService {
-    private final static Logger log = LoggerFactory.getLogger(CourseRelationMusicAlbumServiceImpl.class);
 
-	
+    @Autowired
+    private MusicSheetPurchaseRecordService musicSheetPurchaseRecordService;
+
+    /**
+     * 异常更新课程关联曲目专辑
+     *
+     * @param groupId 课程组ID
+     * @param courseType 课程组类型
+     */
+    @Override
+    public void asyncUpdateCourseRelationMusicAlbumInfo(Long groupId, CourseTypeEnum courseType) {
+
+        // 课程组关联曲目、专辑信息
+        List<CourseRelationMusicAlbum> musicAlbums = lambdaQuery()
+                .eq(CourseRelationMusicAlbum::getCourseGroupId, groupId)
+                .list();
+
+        if (CollectionUtils.isEmpty(musicAlbums)) {
+            return;
+        }
+
+        ThreadPool.getExecutor().submit(() -> {
+
+            try {
+
+                Map<CourseRelationTypeEnum, List<CourseRelationMusicAlbum>> musicAlbumGroupMap = musicAlbums.stream()
+                        .collect(Collectors.groupingBy(CourseRelationMusicAlbum::getUseRelationType));
+
+                // 推荐类型直接删除购买记录
+                if (musicAlbumGroupMap.containsKey(CourseRelationTypeEnum.RECOMMEND)) {
+
+                    List<Long> deleteRelationId = musicAlbumGroupMap.get(CourseRelationTypeEnum.RECOMMEND).stream()
+                            .map(CourseRelationMusicAlbum::getId).distinct().collect(Collectors.toList());
+
+
+                }
+
+                // 赠送按状态进行数据同步更新
+
+            } catch (Exception e) {
+                log.error("asyncUpdateCourseRelationMusicAlbumInfo groupId={}, courseType={}", groupId, courseType, e);
+            }
+
+        });
+
+    }
 }

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

@@ -11,6 +11,7 @@ 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.dto.CourseMusicAlbumRelationDto;
 import com.yonge.cooleshow.biz.dal.entity.CourseRelationMusicAlbum;
 import com.yonge.cooleshow.biz.dal.entity.MusicAlbum;
 import com.yonge.cooleshow.biz.dal.entity.MusicSheet;
@@ -235,29 +236,55 @@ public class VideoLessonGroupDetailServiceImpl extends ServiceImpl<VideoLessonGr
 
         VideoLessonSearch search = new VideoLessonSearch();
         search.setVideoLessonGroupId(groupId);
-        lessonStudentVo.setDetailList(JsonUtil.parseArray(videoLessonGroupLog.getVideoDetailJson(), VideoLessonGroupDetail.class));
+        lessonStudentVo.setDetailList(JsonUtil.parseArray(videoLessonGroupLog.getVideoDetailJson(), VideoLessonGroupDetailDto.class));
 
+        List<CourseMusicAlbumRelationDto> relationMusicAlbums = lessonStudentVo.getDetailList().stream()
+                .flatMap(x -> x.getRelationList().stream()).collect(Collectors.toList());
         // 课程关联曲目、专辑信息
-        List<CourseRelationMusicAlbum> recordInfos = courseRelationMusicAlbumService.lambdaQuery()
-                .eq(CourseRelationMusicAlbum::getCourseGroupId, groupId)
-                .list();
+        List<CourseRelationMusicAlbum> recordInfos = JSON.parseArray(JSON.toJSONString(relationMusicAlbums),
+                CourseRelationMusicAlbum.class);
 
-        List<CourseRelationWrapper.MusicAlbumInfo> musicAlbumInfos = Lists.newArrayList();
+        List<CourseRelationWrapper.MusicAlbumInfo> musicAlbumInfos;
         if (CollectionUtils.isNotEmpty(recordInfos)) {
 
             musicAlbumInfos = getCourseRelationMusicAlbumInfos(recordInfos);
+
+            // 填充课程关联曲目、专辑信息
+            updateCourseRelationMusicAlbumInfo(lessonStudentVo, musicAlbumInfos);
         }
-        lessonStudentVo.setMusicAlbumInfos(musicAlbumInfos);
+        //lessonStudentVo.setMusicAlbumInfos(musicAlbumInfos);
 
 
         return lessonStudentVo;
     }
 
     /**
+     * 填充课程关联曲目、专辑信息
+     * @param lessonStudentVo VideoLessonStudentVo
+     * @param musicAlbumInfos List<CourseRelationWrapper.MusicAlbumInfo>
+     */
+    @Override
+    public void updateCourseRelationMusicAlbumInfo(VideoLessonStudentVo lessonStudentVo,
+                                                   List<CourseRelationWrapper.MusicAlbumInfo> musicAlbumInfos) {
+
+        Map<Long, List<CourseRelationWrapper.MusicAlbumInfo>> collect = musicAlbumInfos.stream()
+                .collect(Collectors.groupingBy(CourseRelationWrapper.MusicAlbumInfo::getCourseId));
+
+        if (CollectionUtils.isNotEmpty(lessonStudentVo.getDetailList())) {
+
+            for (VideoLessonGroupDetailDto item : lessonStudentVo.getDetailList()) {
+
+                item.setMusicAlbumInfos(collect.getOrDefault(item.getId(), Lists.newArrayList()));
+            }
+        }
+    }
+
+    /**
      * 课程关联曲目/专辑信息
      * @param recordInfos
      * @return List<CourseRelationWrapper.MusicAlbumInfo>
      */
+    @Override
     public List<CourseRelationWrapper.MusicAlbumInfo> getCourseRelationMusicAlbumInfos(List<CourseRelationMusicAlbum> recordInfos) {
 
         List<CourseRelationWrapper.MusicAlbumInfo> musicAlbumInfos = JSON.parseArray(JSON.toJSONString(recordInfos),

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

@@ -478,12 +478,15 @@ public class VideoLessonGroupServiceImpl extends ServiceImpl<VideoLessonGroupDao
                 .eq(CourseRelationMusicAlbum::getCourseGroupId, groupId)
                 .list();
 
-        List<CourseRelationWrapper.MusicAlbumInfo> musicAlbumInfos = Lists.newArrayList();
+        List<CourseRelationWrapper.MusicAlbumInfo> musicAlbumInfos;
         if (CollectionUtils.isNotEmpty(recordInfos)) {
 
             musicAlbumInfos = videoLessonGroupDetailService.getCourseRelationMusicAlbumInfos(recordInfos);
+
+            // 填充课程关联曲目、专辑信息
+            videoLessonGroupDetailService.updateCourseRelationMusicAlbumInfo(lessonStudentVo, musicAlbumInfos);
         }
-        lessonStudentVo.setMusicAlbumInfos(musicAlbumInfos);
+        //lessonStudentVo.setMusicAlbumInfos(musicAlbumInfos);
 
         return lessonStudentVo;
     }

+ 4 - 5
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/VideoLessonStudentVo.java

@@ -1,7 +1,6 @@
 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.dto.VideoLessonGroupDetailDto;
 import com.yonge.cooleshow.biz.dal.wrapper.course.CourseRelationWrapper;
 import com.yonge.cooleshow.common.entity.BaseEntity;
 import com.yonge.cooleshow.common.enums.YesOrNoEnum;
@@ -19,7 +18,7 @@ public class VideoLessonStudentVo extends BaseEntity {
     private VideoLessonGroupVo lessonGroup;
 
     @ApiModelProperty("课程详情信息 ")
-    private List<VideoLessonGroupDetail> detailList;
+    private List<VideoLessonGroupDetailDto> detailList;
 
     @ApiModelProperty("关联曲目/专辑信息 ")
     private List<CourseRelationWrapper.MusicAlbumInfo> musicAlbumInfos;
@@ -69,11 +68,11 @@ public class VideoLessonStudentVo extends BaseEntity {
         this.lessonGroup = lessonGroup;
     }
 
-    public List<VideoLessonGroupDetail> getDetailList() {
+    public List<VideoLessonGroupDetailDto> getDetailList() {
         return detailList;
     }
 
-    public void setDetailList(List<VideoLessonGroupDetail> detailList) {
+    public void setDetailList(List<VideoLessonGroupDetailDto> detailList) {
         this.detailList = detailList;
     }
 

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

@@ -52,7 +52,7 @@
 		create_time_ AS createTime
 	</sql>
 
-	<select id="selectPage" resultType="com.yonge.cooleshow.biz.dal.entity.VideoLessonGroupDetail">
+	<select id="selectPage" resultType="com.yonge.cooleshow.biz.dal.dto.VideoLessonGroupDetailDto">
 		SELECT
 		<include refid="baseColumns"/>
 		FROM video_lesson_group_detail