Browse Source

Merge branch 'feature/0820_courseware' into online

liujc 7 months ago
parent
commit
9ca3c23933

+ 14 - 2
cooleshow-app/src/main/java/com/yonge/cooleshow/student/controller/TenantAlbumSheetController.java

@@ -2,16 +2,21 @@ package com.yonge.cooleshow.student.controller;
 
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.dayaedu.cbs.common.enums.school.EKnowledgeType;
 import com.dayaedu.cbs.openfeign.client.CoursewareFeignService;
 import com.dayaedu.cbs.openfeign.wrapper.courseware.CbsLessonCoursewareDetailWrapper;
 import com.dayaedu.cbs.openfeign.wrapper.courseware.CbsLessonCoursewareWrapper;
+import com.dayaedu.cbs.openfeign.wrapper.courseware.CbsMaterialRefWrapper;
 import com.microsvc.toolkit.common.response.paging.QueryInfo;
 import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
+import com.yonge.cooleshow.biz.dal.entity.MusicSheet;
 import com.yonge.cooleshow.biz.dal.entity.Student;
 import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
+import com.yonge.cooleshow.biz.dal.service.MusicSheetService;
 import com.yonge.cooleshow.biz.dal.service.StudentService;
 import com.yonge.cooleshow.biz.dal.service.TenantAlbumMusicService;
+import com.yonge.cooleshow.biz.dal.wrapper.LessonCoursewareDetailWrapper;
 import com.yonge.cooleshow.biz.dal.wrapper.LessonCoursewareWrapper;
 import com.yonge.cooleshow.biz.dal.wrapper.TenantAlbumMusicWrapper;
 import com.yonge.cooleshow.common.controller.BaseController;
@@ -31,6 +36,8 @@ import org.springframework.web.bind.annotation.*;
 import javax.validation.Valid;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
  * 专辑表 web 控制层
@@ -55,6 +62,9 @@ public class TenantAlbumSheetController extends BaseController {
     @Autowired
     private CoursewareFeignService coursewareFeignService;
 
+    @Autowired
+    private MusicSheetService musicSheetService;
+
     @ApiOperation(value = "查询条件")
     @PostMapping("/selectCondition")
     public HttpResponseResult<TenantAlbumMusicWrapper.TenantAlbumMusicSelectData> selectCondition(@RequestBody TenantAlbumMusicWrapper.TenantAlbumMusicSelect query) {
@@ -128,8 +138,10 @@ public class TenantAlbumSheetController extends BaseController {
 
     @ApiOperation(value = "获取课程详情")
     @GetMapping("/getLessonCourseDetail/{id}")
-    public HttpResponseResult<CbsLessonCoursewareDetailWrapper.LessonCoursewareDetail> getLessonCourseDetail(@PathVariable("id") String id){
-        return succeed(coursewareFeignService.lessonCoursewareDetailDetail(Long.parseLong(id)).feignData());
+    public HttpResponseResult<LessonCoursewareDetailWrapper.LessonCoursewareDetail> getLessonCourseDetail(@PathVariable("id") String id) {
+
+        return succeed(tenantAlbumMusicService.getLessonCourseDetail(id));
+
     }
 
 }

+ 3 - 2
cooleshow-app/src/main/java/com/yonge/cooleshow/teacher/controller/TenantAlbumSheetController.java

@@ -12,6 +12,7 @@ import com.yonge.cooleshow.biz.dal.entity.Teacher;
 import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
 import com.yonge.cooleshow.biz.dal.service.TeacherService;
 import com.yonge.cooleshow.biz.dal.service.TenantAlbumMusicService;
+import com.yonge.cooleshow.biz.dal.wrapper.LessonCoursewareDetailWrapper;
 import com.yonge.cooleshow.biz.dal.wrapper.LessonCoursewareWrapper;
 import com.yonge.cooleshow.biz.dal.wrapper.TenantAlbumMusicWrapper;
 import com.yonge.cooleshow.common.controller.BaseController;
@@ -100,8 +101,8 @@ public class TenantAlbumSheetController extends BaseController {
 
     @ApiOperation(value = "获取课程详情")
     @GetMapping("/getLessonCourseDetail/{id}")
-    public HttpResponseResult<CbsLessonCoursewareDetailWrapper.LessonCoursewareDetail> getLessonCourseDetail(@PathVariable("id") String id){
-        return succeed(coursewareFeignService.lessonCoursewareDetailDetail(Long.parseLong(id)).feignData());
+    public HttpResponseResult<LessonCoursewareDetailWrapper.LessonCoursewareDetail> getLessonCourseDetail(@PathVariable("id") String id){
+        return succeed(tenantAlbumMusicService.getLessonCourseDetail(id));
     }
 
 }

+ 3 - 2
cooleshow-app/src/main/java/com/yonge/cooleshow/tenant/controller/TenantAlbumSheetController.java

@@ -10,6 +10,7 @@ import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
 import com.yonge.cooleshow.biz.dal.service.TenantAlbumMusicService;
+import com.yonge.cooleshow.biz.dal.wrapper.LessonCoursewareDetailWrapper;
 import com.yonge.cooleshow.biz.dal.wrapper.LessonCoursewareWrapper;
 import com.yonge.cooleshow.biz.dal.wrapper.TenantAlbumMusicWrapper;
 import com.yonge.cooleshow.common.controller.BaseController;
@@ -108,8 +109,8 @@ public class TenantAlbumSheetController extends BaseController {
 
     @ApiOperation(value = "获取课程详情")
     @GetMapping("/getLessonCourseDetail/{id}")
-    public HttpResponseResult<CbsLessonCoursewareDetailWrapper.LessonCoursewareDetail> getLessonCourseDetail(@PathVariable("id") String id){
-        return succeed(coursewareFeignService.lessonCoursewareDetailDetail(Long.parseLong(id)).feignData());
+    public HttpResponseResult<LessonCoursewareDetailWrapper.LessonCoursewareDetail> getLessonCourseDetail(@PathVariable("id") String id){
+        return succeed(tenantAlbumMusicService.getLessonCourseDetail(id));
     }
 
 

+ 4 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/TenantAlbumMusicService.java

@@ -2,7 +2,9 @@ package com.yonge.cooleshow.biz.dal.service;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.dayaedu.cbs.openfeign.wrapper.courseware.CbsLessonCoursewareDetailWrapper;
 import com.yonge.cooleshow.biz.dal.enums.SubjectTypeEnum;
+import com.yonge.cooleshow.biz.dal.wrapper.LessonCoursewareDetailWrapper;
 import com.yonge.cooleshow.biz.dal.wrapper.LessonCoursewareWrapper;
 import com.yonge.cooleshow.biz.dal.wrapper.TenantAlbumMusicWrapper;
 import com.yonge.cooleshow.biz.dal.entity.TenantAlbumMusic;
@@ -66,4 +68,6 @@ public interface TenantAlbumMusicService extends IService<TenantAlbumMusic>  {
     List<Long> getMusicIdsByTenantIds(Long tenantId);
 
     LessonCoursewareWrapper.LessonCourseware getLessonCoursewareDetail(LessonCoursewareWrapper.LessonCourseQuery query);
+
+    LessonCoursewareDetailWrapper.LessonCoursewareDetail getLessonCourseDetail(String lessoncoursewareDetailId);
 }

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

@@ -6,11 +6,15 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.dayaedu.cbs.common.enums.EClientType;
 import com.dayaedu.cbs.common.enums.school.ECourseType;
+import com.dayaedu.cbs.common.enums.school.EKnowledgeType;
+import com.dayaedu.cbs.common.enums.school.EMaterialType;
 import com.dayaedu.cbs.openfeign.client.CoursewareFeignService;
 import com.dayaedu.cbs.openfeign.client.MusicFeignClientService;
 import com.dayaedu.cbs.openfeign.service.CbsMusicSheetService;
 import com.dayaedu.cbs.openfeign.wrapper.courseware.CbsCourseTypeWrapper;
+import com.dayaedu.cbs.openfeign.wrapper.courseware.CbsLessonCoursewareDetailWrapper;
 import com.dayaedu.cbs.openfeign.wrapper.courseware.CbsLessonCoursewareWrapper;
+import com.dayaedu.cbs.openfeign.wrapper.courseware.CbsMaterialRefWrapper;
 import com.dayaedu.cbs.openfeign.wrapper.music.CbsMusicSheetWrapper;
 import com.microsvc.toolkit.common.response.paging.PageInfo;
 import com.microsvc.toolkit.common.response.template.R;
@@ -22,6 +26,7 @@ import com.yonge.cooleshow.biz.dal.mapper.SysUserMapper;
 import com.yonge.cooleshow.biz.dal.mapper.TenantAlbumMusicMapper;
 import com.yonge.cooleshow.biz.dal.service.*;
 import com.yonge.cooleshow.biz.dal.service.cbs.CbsMusicScoreService;
+import com.yonge.cooleshow.biz.dal.wrapper.LessonCoursewareDetailWrapper;
 import com.yonge.cooleshow.biz.dal.wrapper.LessonCoursewareWrapper;
 import com.yonge.cooleshow.biz.dal.wrapper.TenantAlbumMusicWrapper;
 import com.yonge.toolset.base.exception.BizException;
@@ -436,4 +441,140 @@ public class TenantAlbumMusicServiceImpl extends ServiceImpl<TenantAlbumMusicMap
 
         return lessonCoursewareDto;
     }
+
+    @Override
+    public LessonCoursewareDetailWrapper.LessonCoursewareDetail getLessonCourseDetail(String lessonCoursewareDetailId) {
+        CbsLessonCoursewareDetailWrapper.LessonCoursewareDetail cbsLessonCoursewareDetail = coursewareFeignService.lessonCoursewareDetailDetail(Long.parseLong(lessonCoursewareDetailId)).feignData();
+        if (cbsLessonCoursewareDetail == null) {
+            throw new BizException("课件不存在");
+        }
+        LessonCoursewareDetailWrapper.LessonCoursewareDetail lessonCoursewareDetail = JSON.parseObject(JSON.toJSONString(cbsLessonCoursewareDetail), LessonCoursewareDetailWrapper.LessonCoursewareDetail.class);
+
+
+        // 过滤调未应用到项目的去练习曲目
+        List<LessonCoursewareDetailWrapper.KnowledgePointSmall> knowledgePointList = lessonCoursewareDetail.getKnowledgePointList();
+        List<LessonCoursewareDetailWrapper.AddMaterialRef> addMaterialRefs = getMaterialRefList(knowledgePointList);
+        List<LessonCoursewareDetailWrapper.MaterialSmall> musicMaterialSmalls = getMaterialSmalls(knowledgePointList);
+        if (CollectionUtils.isNotEmpty(musicMaterialSmalls)) {
+            List<Long> cbsMaterialMusicIds = musicMaterialSmalls.stream().map(LessonCoursewareDetailWrapper.MaterialSmall::getContent)
+                .filter(StringUtils::isNotBlank).map(Long::parseLong).collect(Collectors.toList());
+            Map<Long, Long> idMap = musicSheetService.lambdaQuery()
+                .in(MusicSheet::getCbsMusicSheetId, cbsMaterialMusicIds)
+                .eq(MusicSheet::getDelFlag, false)
+                .eq(MusicSheet::getState, 1)
+                .list()
+                .stream()
+                .collect(Collectors.toMap(MusicSheet::getCbsMusicSheetId, MusicSheet::getId,(o1,o2)->o1));
+
+            // 过滤掉没有对应的曲目
+            filterMusicMaterialList(knowledgePointList,new ArrayList<>(idMap.keySet()));
+            for (LessonCoursewareDetailWrapper.MaterialSmall musicMaterialSmall : musicMaterialSmalls) {
+                musicMaterialSmall.setContent(idMap.getOrDefault(Long.parseLong(musicMaterialSmall.getContent()),-1L).toString());
+            }
+        }
+        List<Long> cbsMusicSheetIdList =
+            addMaterialRefs.stream().filter(next -> EKnowledgeType.MUSIC.equals(next.getKnowledgeType()))
+                .map(LessonCoursewareDetailWrapper.AddMaterialRef::getResourceId).distinct().collect(Collectors.toList());
+        if (!org.springframework.util.CollectionUtils.isEmpty(cbsMusicSheetIdList)) {
+            Map<Long, Long> idMap = musicSheetService.lambdaQuery()
+                .in(MusicSheet::getCbsMusicSheetId, cbsMusicSheetIdList)
+                .eq(MusicSheet::getDelFlag, false)
+                .eq(MusicSheet::getState, 1)
+                .list()
+                .stream()
+                .collect(Collectors.toMap(MusicSheet::getCbsMusicSheetId, MusicSheet::getId,(o1,o2)->o1));
+
+            for (LessonCoursewareDetailWrapper.AddMaterialRef addMaterialRef : addMaterialRefs) {
+                Long resourceId = addMaterialRef.getResourceId();
+                if (idMap.containsKey(resourceId)) {
+                    addMaterialRef.setResourceId(idMap.get(resourceId));
+                    addMaterialRef.setResourceIdStr(idMap.getOrDefault(resourceId,-1L).toString());
+                }
+            }
+            // 过滤掉没有对应的曲目
+            filterMaterialRefList(knowledgePointList,new ArrayList<>(idMap.values()));
+        }
+
+        return lessonCoursewareDetail;
+    }
+
+    private void filterMusicMaterialList(List<LessonCoursewareDetailWrapper.KnowledgePointSmall> knowledgePointList, List<Long> cbsMusicSheetIds) {
+        if (CollectionUtils.isNotEmpty(knowledgePointList)) {
+            for (LessonCoursewareDetailWrapper.KnowledgePointSmall knowledgePointSmall : knowledgePointList) {
+
+                if (CollectionUtils.isNotEmpty(knowledgePointSmall.getChildren())) {
+                    filterMusicMaterialList(knowledgePointSmall.getChildren(),cbsMusicSheetIds);
+                }
+                List<LessonCoursewareDetailWrapper.MaterialSmall> materialList = knowledgePointSmall.getMaterialList();
+                if (CollectionUtils.isNotEmpty(materialList)) {
+                    materialList.removeIf(next -> (EMaterialType.SONG.equals(next.getType()) && !cbsMusicSheetIds.contains(Long.parseLong(next.getContent()))));
+                    knowledgePointSmall.setMaterialList(materialList);
+                }
+            }
+        }
+    }
+
+    private List<LessonCoursewareDetailWrapper.MaterialSmall> getMaterialSmalls(List<LessonCoursewareDetailWrapper.KnowledgePointSmall> knowledgePointList) {
+        List<LessonCoursewareDetailWrapper.MaterialSmall> materialRefList = new ArrayList<>();
+        if (CollectionUtils.isNotEmpty(knowledgePointList)) {
+            for (LessonCoursewareDetailWrapper.KnowledgePointSmall knowledgePointSmall : knowledgePointList) {
+
+                if (CollectionUtils.isNotEmpty(knowledgePointSmall.getChildren())) {
+                    materialRefList.addAll(getMaterialSmalls(knowledgePointSmall.getChildren()));
+                }
+                List<LessonCoursewareDetailWrapper.MaterialSmall> materialList = knowledgePointSmall.getMaterialList();
+                if (CollectionUtils.isNotEmpty(materialList)) {
+                    for (LessonCoursewareDetailWrapper.MaterialSmall materialSmall : materialList) {
+                        if (materialSmall.getType() == EMaterialType.SONG) {
+                            materialRefList.add(materialSmall);
+                        }
+                    }
+                }
+            }
+        }
+        return materialRefList;
+    }
+
+    private void filterMaterialRefList(List<LessonCoursewareDetailWrapper.KnowledgePointSmall> knowledgePointList,List<Long> cbsMusicSheetIds) {
+        if (CollectionUtils.isNotEmpty(knowledgePointList)) {
+            for (LessonCoursewareDetailWrapper.KnowledgePointSmall knowledgePointSmall : knowledgePointList) {
+
+                if (CollectionUtils.isNotEmpty(knowledgePointSmall.getChildren())) {
+                    filterMaterialRefList(knowledgePointSmall.getChildren(),cbsMusicSheetIds);
+                }
+                List<LessonCoursewareDetailWrapper.MaterialSmall> materialList = knowledgePointSmall.getMaterialList();
+                if (CollectionUtils.isNotEmpty(materialList)) {
+                    for (LessonCoursewareDetailWrapper.MaterialSmall materialSmall : materialList) {
+                        if (CollectionUtils.isNotEmpty(materialSmall.getMaterialRefs())) {
+                            List<LessonCoursewareDetailWrapper.AddMaterialRef> refList = materialSmall.getMaterialRefs().stream()
+                                .filter(next -> !(EKnowledgeType.MUSIC.equals(next.getKnowledgeType()) && !cbsMusicSheetIds.contains(next.getResourceId())))
+                                .collect(Collectors.toList());
+                            materialSmall.setMaterialRefs(refList);
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+    private List<LessonCoursewareDetailWrapper.AddMaterialRef> getMaterialRefList(List<LessonCoursewareDetailWrapper.KnowledgePointSmall> knowledgePointList) {
+        List<LessonCoursewareDetailWrapper.AddMaterialRef> materialRefList = new ArrayList<>();
+        if (CollectionUtils.isNotEmpty(knowledgePointList)) {
+            for (LessonCoursewareDetailWrapper.KnowledgePointSmall knowledgePointSmall : knowledgePointList) {
+
+                if (CollectionUtils.isNotEmpty(knowledgePointSmall.getChildren())) {
+                    materialRefList.addAll(getMaterialRefList(knowledgePointSmall.getChildren()));
+                }
+                List<LessonCoursewareDetailWrapper.MaterialSmall> materialList = knowledgePointSmall.getMaterialList();
+                if (CollectionUtils.isNotEmpty(materialList)) {
+                    for (LessonCoursewareDetailWrapper.MaterialSmall materialSmall : materialList) {
+                        if (CollectionUtils.isNotEmpty(materialSmall.getMaterialRefs())) {
+                            materialRefList.addAll(materialSmall.getMaterialRefs());
+                        }
+                    }
+                }
+            }
+        }
+        return materialRefList;
+    }
 }

+ 120 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/wrapper/LessonCoursewareDetailWrapper.java

@@ -0,0 +1,120 @@
+package com.yonge.cooleshow.biz.dal.wrapper;
+
+import com.dayaedu.cbs.common.enums.school.EKnowledgeType;
+import com.dayaedu.cbs.common.enums.school.EMaterialRefType;
+import com.dayaedu.cbs.common.enums.school.EMaterialType;
+import com.dayaedu.cbs.openfeign.wrapper.courseware.CbsMaterialRefWrapper;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+import java.util.List;
+
+public class LessonCoursewareDetailWrapper {
+
+
+    @Data
+    @ApiModel(" LessonCoursewareDetail-课件内容")
+    public static class LessonCoursewareDetail {
+        @ApiModelProperty("主键ID")
+        private String id;
+        @ApiModelProperty("课件编号")
+        private Long lessonCoursewareId;
+        @ApiModelProperty("课时名称")
+        private String name;
+        @ApiModelProperty("课时目标描述")
+        private String lessonTargetDesc;
+        @ApiModelProperty("课后训练编号")
+        private Long lessonTrainingId;
+        @ApiModelProperty("课后训练名称")
+        private String lessonTrainingName;
+        @ApiModelProperty("课程时长(秒)")
+        private Integer lessonDurationSecond;
+        @ApiModelProperty("课程排序")
+        private Integer lessonOrder;
+        @ApiModelProperty("是否锁定")
+        private Boolean lockFlag;
+        @ApiModelProperty("是否需要锁定课件")
+        private Boolean lockEnable;
+        @ApiModelProperty("创建时间")
+        private Date createTime;
+        @ApiModelProperty("更新时间")
+        private Date updateTime;
+        private String knowledgePointIds;
+        @ApiModelProperty("可见范围,0:所有人课件,1:仅VIP学生可见")
+        private Integer accessScope;
+        @ApiModelProperty("知识点")
+        private List<KnowledgePointSmall> knowledgePointList;
+        private List<Long> lessonCoursewareIds;
+        private List<Long> lessonCoursewareDetailIds;
+    }
+
+    @Data
+    @ApiModel(" KnowledgePointSmall-知识点")
+    public static class KnowledgePointSmall {
+        @ApiModelProperty("知识点编号")
+        private Long id;
+        @ApiModelProperty("排序")
+        private Integer sortNo;
+        @ApiModelProperty("知识点名称")
+        private String name;
+        @ApiModelProperty("建议学习时长")
+        private Integer totalMaterialTimeSecond = 0;
+        @ApiModelProperty("素材")
+        private List<MaterialSmall> materialList;
+        @ApiModelProperty("子节点")
+        private List<KnowledgePointSmall> children;
+    }
+
+    @Data
+    @ApiModel(" MaterialSmall-素材")
+    public static class MaterialSmall {
+        @ApiModelProperty("素材编号")
+        private Long id;
+        @ApiModelProperty("素材知识点关联编号")
+        private Long knowledgePointMaterialRelationId;
+        @ApiModelProperty("知识点编号")
+        private Long knowledgePointId;
+        @ApiModelProperty("素材名称")
+        private String name;
+        @ApiModelProperty("分段编号")
+        private String sn;
+        @ApiModelProperty("课程类型")
+        private String courseTypeCode;
+        @ApiModelProperty("素材时长")
+        private Integer adviseStudyTimeSecond;
+        @ApiModelProperty("素材类型")
+        private EMaterialType type;
+        @ApiModelProperty("素材类型-兼容管乐迷")
+        private String typeCode;
+        @ApiModelProperty("视频、图片链接或者是曲目编号")
+        private String content;
+        @ApiModelProperty("更新时间")
+        private Date updateTime;
+
+        @ApiModelProperty("关联资源数据")
+        private List<AddMaterialRef> materialRefs;
+
+//        @ApiModelProperty("状态")
+//        private boolean status = true;
+    }
+
+    @Data
+    @ApiModel(" AddMaterialRef-素材关联")
+    public static class AddMaterialRef {
+        @ApiModelProperty("关联素材ID")
+        private Long resourceId;
+        @ApiModelProperty("类型,MUSIC,MATERIAL")
+        private EKnowledgeType knowledgeType;
+        @ApiModelProperty("关联类型,强:STRONG,弱:WEAK")
+        private EMaterialRefType refType;
+        @ApiModelProperty("资源名称")
+        private String resourceName;
+        @ApiModelProperty("资源信息")
+        private CbsMaterialRefWrapper.RelateMaterialInfo relateMaterialInfo;
+
+        @ApiModelProperty("关联素材ID")
+        private String resourceIdStr;
+    }
+}