瀏覽代碼

Merge branch 'courseware_search_1211' of http://git.dayaedu.com/yonge/cooleshow into test

zouxuan 6 月之前
父節點
當前提交
f8b0bfedc6

+ 17 - 7
cooleshow-app/src/main/java/com/yonge/cooleshow/admin/controller/TenantAlbumSheetController.java

@@ -16,10 +16,10 @@ import com.yonge.toolset.base.page.PageInfo;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.apache.commons.collections.CollectionUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.security.access.prepost.PreAuthorize;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.web.bind.annotation.*;
 
+import javax.annotation.Resource;
 import javax.validation.Valid;
 import java.util.ArrayList;
 import java.util.List;
@@ -35,13 +35,13 @@ import java.util.List;
 @Api(tags = "机构专辑曲目 API接口")
 public class TenantAlbumSheetController extends BaseController {
 
-    @Autowired
+    @Resource
     private CoursewareFeignService coursewareFeignService;
 
-    @Autowired
+    @Resource
     private TenantAlbumMusicService tenantAlbumMusicService;
 
-    @Autowired
+    @Resource
     private SysUserFeignService sysUserFeignService;
 
 
@@ -67,9 +67,19 @@ public class TenantAlbumSheetController extends BaseController {
 
     @ApiOperation(value = "获取课件关联的课程列表")
     @GetMapping("/getLessonCoursewareCourseList/{id}")
-    public HttpResponseResult<List<LessonCoursewareWrapper.CourseScheduleCoursewareDetail>> getLessonCoursewareCourseList(@PathVariable("id") Long id){
-        List<CbsLessonCoursewareWrapper.CourseScheduleCoursewareDetail> courseScheduleCoursewareDetails = coursewareFeignService.coursewareDetail(id).feignData();
+    public HttpResponseResult<List<LessonCoursewareWrapper.CourseScheduleCoursewareDetail>> getLessonCoursewareCourseList(@PathVariable("id") Long id,
+                                                                                                                          String search,
+                                                                                                                          Boolean detailFlag){
+        CbsLessonCoursewareWrapper.CoursewareDetailQuery query = new CbsLessonCoursewareWrapper.CoursewareDetailQuery();
+        query.setId(id);
+        query.setSearch(search);
+        query.setDetailFlag(detailFlag);
+        List<CbsLessonCoursewareWrapper.CourseScheduleCoursewareDetail> courseScheduleCoursewareDetails = coursewareFeignService.coursewareDetail(query).feignData();
         if (CollectionUtils.isNotEmpty(courseScheduleCoursewareDetails)) {
+            //过滤酷乐秀相关的权限
+            courseScheduleCoursewareDetails.forEach(tenantAlbumMusicService::filterLessonCourseDetail);
+            //剔除空数据
+            courseScheduleCoursewareDetails.removeIf(e->!tenantAlbumMusicService.filterAndUpdateKnowledgePointList(e));
             String jsonString = JSONObject.toJSONString(courseScheduleCoursewareDetails);
             List<LessonCoursewareWrapper.CourseScheduleCoursewareDetail> courseScheduleCoursewareDetailList = JSONObject.parseArray(jsonString, LessonCoursewareWrapper.CourseScheduleCoursewareDetail.class);
             return succeed(courseScheduleCoursewareDetailList);

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

@@ -2,18 +2,13 @@ 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;
@@ -28,16 +23,15 @@ import com.yonge.toolset.mybatis.support.PageUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.apache.commons.collections.CollectionUtils;
-import org.springframework.beans.factory.annotation.Autowired;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.http.HttpStatus;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
+import javax.annotation.Resource;
 import javax.validation.Valid;
 import java.util.ArrayList;
 import java.util.List;
-import java.util.Map;
-import java.util.stream.Collectors;
 
 /**
  * 专辑表 web 控制层
@@ -50,21 +44,18 @@ import java.util.stream.Collectors;
 @Api(tags = "机构专辑曲目 API接口")
 public class TenantAlbumSheetController extends BaseController {
 
-    @Autowired
+    @Resource
     private TenantAlbumMusicService tenantAlbumMusicService;
 
-    @Autowired
+    @Resource
     private SysUserFeignService sysUserFeignService;
 
-    @Autowired
+    @Resource
     private StudentService studentService;
 
-    @Autowired
+    @Resource
     private CoursewareFeignService coursewareFeignService;
 
-    @Autowired
-    private MusicSheetService musicSheetService;
-
     @ApiOperation(value = "查询条件")
     @PostMapping("/selectCondition")
     public HttpResponseResult<TenantAlbumMusicWrapper.TenantAlbumMusicSelectData> selectCondition(@RequestBody TenantAlbumMusicWrapper.TenantAlbumMusicSelect query) {
@@ -125,9 +116,18 @@ public class TenantAlbumSheetController extends BaseController {
 
     @ApiOperation(value = "获取课件关联的课程列表")
     @GetMapping("/getLessonCoursewareCourseList/{id}")
-    public HttpResponseResult<List<LessonCoursewareWrapper.CourseScheduleCoursewareDetail>> getLessonCoursewareCourseList(@PathVariable("id") Long id){
-        List<CbsLessonCoursewareWrapper.CourseScheduleCoursewareDetail> courseScheduleCoursewareDetails = coursewareFeignService.coursewareDetail(id).feignData();
+    public HttpResponseResult<List<LessonCoursewareWrapper.CourseScheduleCoursewareDetail>> getLessonCoursewareCourseList(@PathVariable("id") Long id,
+                                                                                                                          String search,
+                                                                                                                          Boolean detailFlag){
+        CbsLessonCoursewareWrapper.CoursewareDetailQuery query = new CbsLessonCoursewareWrapper.CoursewareDetailQuery();
+        query.setId(id);
+        query.setSearch(search);
+        query.setDetailFlag(detailFlag);
+        List<CbsLessonCoursewareWrapper.CourseScheduleCoursewareDetail> courseScheduleCoursewareDetails = coursewareFeignService.coursewareDetail(query).feignData();
         if (CollectionUtils.isNotEmpty(courseScheduleCoursewareDetails)) {
+            //过滤酷乐秀相关的权限
+            courseScheduleCoursewareDetails.forEach(tenantAlbumMusicService::filterLessonCourseDetail);
+            courseScheduleCoursewareDetails.removeIf(e->!tenantAlbumMusicService.filterAndUpdateKnowledgePointList(e));
             String jsonString = JSONObject.toJSONString(courseScheduleCoursewareDetails);
             List<LessonCoursewareWrapper.CourseScheduleCoursewareDetail> courseScheduleCoursewareDetailList = JSONObject
                 .parseArray(jsonString, LessonCoursewareWrapper.CourseScheduleCoursewareDetail.class);

+ 14 - 13
cooleshow-app/src/main/java/com/yonge/cooleshow/teacher/controller/TenantAlbumSheetController.java

@@ -5,14 +5,10 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.dayaedu.cbs.openfeign.client.CoursewareFeignService;
 import com.dayaedu.cbs.openfeign.wrapper.courseware.CbsLessonCoursewareWrapper;
 import com.microsvc.toolkit.common.response.paging.QueryInfo;
-import com.microsvc.toolkit.common.response.template.R;
-import com.microsvc.toolkit.config.jwt.utils.JwtUserInfo;
 import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
-import com.yonge.cooleshow.biz.dal.entity.Student;
 import com.yonge.cooleshow.biz.dal.entity.Teacher;
 import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
-import com.yonge.cooleshow.biz.dal.service.MusicSheetService;
 import com.yonge.cooleshow.biz.dal.service.SysUserService;
 import com.yonge.cooleshow.biz.dal.service.TeacherService;
 import com.yonge.cooleshow.biz.dal.service.TenantAlbumMusicService;
@@ -21,19 +17,15 @@ import com.yonge.cooleshow.biz.dal.wrapper.LessonCoursewareWrapper;
 import com.yonge.cooleshow.biz.dal.wrapper.TenantAlbumMusicWrapper;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
-import com.yonge.toolset.base.exception.BizException;
 import com.yonge.toolset.base.page.PageInfo;
-import com.yonge.toolset.base.util.StringUtil;
 import com.yonge.toolset.mybatis.support.PageUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.apache.commons.collections.CollectionUtils;
-import org.springframework.beans.factory.annotation.Autowired;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.http.HttpStatus;
-import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
-import springfox.documentation.annotations.ApiIgnore;
 
 import javax.annotation.Resource;
 import javax.validation.Valid;
@@ -61,10 +53,10 @@ public class TenantAlbumSheetController extends BaseController {
     @Resource
     private CoursewareFeignService coursewareFeignService;
 
-    @Autowired
+    @Resource
     private SysUserFeignService sysUserFeignService;
 
-    @Autowired
+    @Resource
     private TeacherService teacherService;
 
 
@@ -113,9 +105,18 @@ public class TenantAlbumSheetController extends BaseController {
 
     @ApiOperation(value = "获取课件关联的课程列表")
     @GetMapping("/getLessonCoursewareCourseList/{id}")
-    public HttpResponseResult<List<LessonCoursewareWrapper.CourseScheduleCoursewareDetail>> getLessonCoursewareCourseList(@PathVariable("id") Long id){
-        List<CbsLessonCoursewareWrapper.CourseScheduleCoursewareDetail> courseScheduleCoursewareDetails = coursewareFeignService.coursewareDetail(id).feignData();
+    public HttpResponseResult<List<LessonCoursewareWrapper.CourseScheduleCoursewareDetail>> getLessonCoursewareCourseList(@PathVariable("id") Long id,
+                                                                                                                          String search,
+                                                                                                                          Boolean detailFlag){
+        CbsLessonCoursewareWrapper.CoursewareDetailQuery query = new CbsLessonCoursewareWrapper.CoursewareDetailQuery();
+        query.setId(id);
+        query.setSearch(search);
+        query.setDetailFlag(detailFlag);
+        List<CbsLessonCoursewareWrapper.CourseScheduleCoursewareDetail> courseScheduleCoursewareDetails = coursewareFeignService.coursewareDetail(query).feignData();
         if (CollectionUtils.isNotEmpty(courseScheduleCoursewareDetails)) {
+            //过滤酷乐秀相关的权限
+            courseScheduleCoursewareDetails.forEach(tenantAlbumMusicService::filterLessonCourseDetail);
+            courseScheduleCoursewareDetails.removeIf(e->!tenantAlbumMusicService.filterAndUpdateKnowledgePointList(e));
             String jsonString = JSONObject.toJSONString(courseScheduleCoursewareDetails);
             List<LessonCoursewareWrapper.CourseScheduleCoursewareDetail> courseScheduleCoursewareDetailList = JSONObject
                 .parseArray(jsonString, LessonCoursewareWrapper.CourseScheduleCoursewareDetail.class);

+ 14 - 7
cooleshow-app/src/main/java/com/yonge/cooleshow/tenant/controller/TenantAlbumSheetController.java

@@ -3,7 +3,6 @@ package com.yonge.cooleshow.tenant.controller;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 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.microsvc.toolkit.common.response.paging.QueryInfo;
 import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
@@ -20,11 +19,12 @@ import com.yonge.toolset.mybatis.support.PageUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.apache.commons.collections.CollectionUtils;
-import org.springframework.beans.factory.annotation.Autowired;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.http.HttpStatus;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
+import javax.annotation.Resource;
 import javax.validation.Valid;
 import java.util.ArrayList;
 import java.util.List;
@@ -40,13 +40,13 @@ import java.util.List;
 @Api(tags = "机构专辑曲目 API接口")
 public class TenantAlbumSheetController extends BaseController {
 
-    @Autowired
+    @Resource
     private TenantAlbumMusicService tenantAlbumMusicService;
 
-    @Autowired
+    @Resource
     private SysUserFeignService sysUserFeignService;
 
-    @Autowired
+    @Resource
     private CoursewareFeignService coursewareFeignService;
 
     @ApiOperation(value = "查询条件")
@@ -96,9 +96,16 @@ public class TenantAlbumSheetController extends BaseController {
 
     @ApiOperation(value = "获取课件关联的课程列表")
     @GetMapping("/getLessonCoursewareCourseList/{id}")
-    public HttpResponseResult<List<LessonCoursewareWrapper.CourseScheduleCoursewareDetail>> getLessonCoursewareCourseList(@PathVariable("id") Long id){
-        List<CbsLessonCoursewareWrapper.CourseScheduleCoursewareDetail> courseScheduleCoursewareDetails = coursewareFeignService.coursewareDetail(id).feignData();
+    public HttpResponseResult<List<LessonCoursewareWrapper.CourseScheduleCoursewareDetail>> getLessonCoursewareCourseList(@PathVariable("id") Long id,String search,Boolean detailFlag){
+        CbsLessonCoursewareWrapper.CoursewareDetailQuery query = new CbsLessonCoursewareWrapper.CoursewareDetailQuery();
+        query.setId(id);
+        query.setSearch(search);
+        query.setDetailFlag(detailFlag);
+        List<CbsLessonCoursewareWrapper.CourseScheduleCoursewareDetail> courseScheduleCoursewareDetails = coursewareFeignService.coursewareDetail(query).feignData();
         if (CollectionUtils.isNotEmpty(courseScheduleCoursewareDetails)) {
+            //过滤酷乐秀相关的权限
+            courseScheduleCoursewareDetails.forEach(tenantAlbumMusicService::filterLessonCourseDetail);
+            courseScheduleCoursewareDetails.removeIf(e->!tenantAlbumMusicService.filterAndUpdateKnowledgePointList(e));
             String jsonString = JSONObject.toJSONString(courseScheduleCoursewareDetails);
             List<LessonCoursewareWrapper.CourseScheduleCoursewareDetail> courseScheduleCoursewareDetailList = JSONObject
                 .parseArray(jsonString, LessonCoursewareWrapper.CourseScheduleCoursewareDetail.class);

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

@@ -3,6 +3,7 @@ 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.dayaedu.cbs.openfeign.wrapper.courseware.CbsLessonCoursewareWrapper;
 import com.yonge.cooleshow.biz.dal.enums.SubjectTypeEnum;
 import com.yonge.cooleshow.biz.dal.wrapper.LessonCoursewareDetailWrapper;
 import com.yonge.cooleshow.biz.dal.wrapper.LessonCoursewareWrapper;
@@ -71,6 +72,12 @@ public interface TenantAlbumMusicService extends IService<TenantAlbumMusic>  {
 
     LessonCoursewareDetailWrapper.LessonCoursewareDetail getLessonCourseDetail(String lessoncoursewareDetailId);
 
+    CbsLessonCoursewareWrapper.CourseScheduleCoursewareDetail filterLessonCourseDetail(CbsLessonCoursewareWrapper.CourseScheduleCoursewareDetail lessonCoursewareDetail);
+
+    LessonCoursewareDetailWrapper.LessonCoursewareDetail filterLessonCourseDetail(LessonCoursewareDetailWrapper.LessonCoursewareDetail lessonCoursewareDetail);
+
+    boolean filterAndUpdateKnowledgePointList(CbsLessonCoursewareWrapper.CourseScheduleCoursewareDetail courseScheduleCoursewareDetail);
+
     /**
      * 关联课程类型
      */

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

@@ -14,24 +14,21 @@ import com.dayaedu.cbs.openfeign.client.MusicFeignClientService;
 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;
 import com.yonge.cooleshow.biz.dal.entity.*;
 import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
 import com.yonge.cooleshow.biz.dal.enums.SourceTypeEnum;
 import com.yonge.cooleshow.biz.dal.enums.SubjectTypeEnum;
 import com.yonge.cooleshow.biz.dal.mapper.TenantAlbumMapper;
 import com.yonge.cooleshow.biz.dal.mapper.TenantAlbumMusicMapper;
-import com.yonge.cooleshow.biz.dal.mapper.UserTenantAlbumRecordMapper;
 import com.yonge.cooleshow.biz.dal.service.*;
 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.wrapper.TenantAlbumWrapper;
 import com.yonge.cooleshow.common.constant.SysConfigConstant;
-import com.yonge.cooleshow.common.enums.YesOrNoEnum;
-import com.yonge.cooleshow.common.constant.SysConfigConstant;
 import com.yonge.toolset.base.exception.BizException;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections.CollectionUtils;
@@ -477,8 +474,105 @@ public class TenantAlbumMusicServiceImpl extends ServiceImpl<TenantAlbumMusicMap
             throw new BizException("课件不存在");
         }
         LessonCoursewareDetailWrapper.LessonCoursewareDetail lessonCoursewareDetail = JSON.parseObject(JSON.toJSONString(cbsLessonCoursewareDetail), LessonCoursewareDetailWrapper.LessonCoursewareDetail.class);
+        // 过滤调未应用到项目的去练习曲目
+        this.filterLessonCourseDetail(lessonCoursewareDetail);
+        return lessonCoursewareDetail;
+    }
 
+    @Override
+    public CbsLessonCoursewareWrapper.CourseScheduleCoursewareDetail filterLessonCourseDetail(CbsLessonCoursewareWrapper.CourseScheduleCoursewareDetail lessonCoursewareDetail) {
+        // 过滤调未应用到项目的去练习曲目
+        List<CbsLessonCoursewareDetailWrapper.KnowledgePointSmall> knowledgePointList = lessonCoursewareDetail.getKnowledgePointList();
+        List<CbsMaterialRefWrapper.AddMaterialRef> addMaterialRefs = getCbsMaterialRefList(knowledgePointList);
+        List<CbsLessonCoursewareDetailWrapper.MaterialSmall> musicMaterialSmalls = getCbsMaterialSmalls(knowledgePointList);
+        if (CollectionUtils.isNotEmpty(musicMaterialSmalls)) {
+            List<Long> cbsMaterialMusicIds = musicMaterialSmalls.stream().map(CbsLessonCoursewareDetailWrapper.MaterialSmall::getContent)
+                .filter(StringUtils::isNotBlank).map(Long::parseLong).collect(Collectors.toList());
+            Map<Long, Long> idMap = musicSheetService.lambdaQuery()
+                .in(MusicSheet::getCbsMusicSheetId, cbsMaterialMusicIds)
+                .eq(MusicSheet::getTenantDelFlag, false)
+                .eq(MusicSheet::getTenantState, 1)
+                .list()
+                .stream()
+                .collect(Collectors.toMap(MusicSheet::getCbsMusicSheetId, MusicSheet::getId,(o1,o2)->o1));
 
+            // 过滤掉没有对应的曲目
+            filterCbsMusicMaterialList(knowledgePointList,new ArrayList<>(idMap.keySet()));
+            for (CbsLessonCoursewareDetailWrapper.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(CbsMaterialRefWrapper.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::getTenantDelFlag, false)
+                .eq(MusicSheet::getTenantState, 1)
+                .list()
+                .stream()
+                .collect(Collectors.toMap(MusicSheet::getCbsMusicSheetId, MusicSheet::getId,(o1,o2)->o1));
+
+            for (CbsMaterialRefWrapper.AddMaterialRef addMaterialRef : addMaterialRefs) {
+                Long resourceId = addMaterialRef.getResourceId();
+                if (idMap.containsKey(resourceId)) {
+                    addMaterialRef.setResourceId(idMap.get(resourceId));
+                    addMaterialRef.setResourceIdStr(idMap.getOrDefault(resourceId,-1L).toString());
+                }
+            }
+            // 过滤掉没有对应的曲目
+            filterCbsMaterialRefList(knowledgePointList,new ArrayList<>(idMap.values()));
+        }
+
+        return lessonCoursewareDetail;
+    }
+
+
+    private List<CbsLessonCoursewareDetailWrapper.MaterialSmall> getCbsMaterialSmalls(List<CbsLessonCoursewareDetailWrapper.KnowledgePointSmall> knowledgePointList) {
+        List<CbsLessonCoursewareDetailWrapper.MaterialSmall> materialRefList = new ArrayList<>();
+        if (CollectionUtils.isNotEmpty(knowledgePointList)) {
+            for (CbsLessonCoursewareDetailWrapper.KnowledgePointSmall knowledgePointSmall : knowledgePointList) {
+
+                if (CollectionUtils.isNotEmpty(knowledgePointSmall.getChildren())) {
+                    materialRefList.addAll(getCbsMaterialSmalls(knowledgePointSmall.getChildren()));
+                }
+                List<CbsLessonCoursewareDetailWrapper.MaterialSmall> materialList = knowledgePointSmall.getMaterialList();
+                if (CollectionUtils.isNotEmpty(materialList)) {
+                    for (CbsLessonCoursewareDetailWrapper.MaterialSmall materialSmall : materialList) {
+                        if (materialSmall.getType() == EMaterialType.SONG) {
+                            materialRefList.add(materialSmall);
+                        }
+                    }
+                }
+            }
+        }
+        return materialRefList;
+    }
+
+    private List<CbsMaterialRefWrapper.AddMaterialRef> getCbsMaterialRefList(List<CbsLessonCoursewareDetailWrapper.KnowledgePointSmall> knowledgePointList) {
+        List<CbsMaterialRefWrapper.AddMaterialRef> materialRefList = new ArrayList<>();
+        if (CollectionUtils.isNotEmpty(knowledgePointList)) {
+            for (CbsLessonCoursewareDetailWrapper.KnowledgePointSmall knowledgePointSmall : knowledgePointList) {
+
+                if (CollectionUtils.isNotEmpty(knowledgePointSmall.getChildren())) {
+                    materialRefList.addAll(getCbsMaterialRefList(knowledgePointSmall.getChildren()));
+                }
+                List<CbsLessonCoursewareDetailWrapper.MaterialSmall> materialList = knowledgePointSmall.getMaterialList();
+                if (CollectionUtils.isNotEmpty(materialList)) {
+                    for (CbsLessonCoursewareDetailWrapper.MaterialSmall materialSmall : materialList) {
+                        if (CollectionUtils.isNotEmpty(materialSmall.getMaterialRefs())) {
+                            materialRefList.addAll(materialSmall.getMaterialRefs());
+                        }
+                    }
+                }
+            }
+        }
+        return materialRefList;
+    }
+
+    @Override
+    public LessonCoursewareDetailWrapper.LessonCoursewareDetail filterLessonCourseDetail(LessonCoursewareDetailWrapper.LessonCoursewareDetail lessonCoursewareDetail) {
         // 过滤调未应用到项目的去练习曲目
         List<LessonCoursewareDetailWrapper.KnowledgePointSmall> knowledgePointList = lessonCoursewareDetail.getKnowledgePointList();
         List<LessonCoursewareDetailWrapper.AddMaterialRef> addMaterialRefs = getMaterialRefList(knowledgePointList);
@@ -526,6 +620,39 @@ public class TenantAlbumMusicServiceImpl extends ServiceImpl<TenantAlbumMusicMap
         return lessonCoursewareDetail;
     }
 
+    @Override
+    public boolean filterAndUpdateKnowledgePointList(CbsLessonCoursewareWrapper.CourseScheduleCoursewareDetail courseScheduleCoursewareDetail) {
+        List<CbsLessonCoursewareDetailWrapper.KnowledgePointSmall> knowledgePointList = courseScheduleCoursewareDetail.getKnowledgePointList();
+        if (CollectionUtils.isEmpty(knowledgePointList)) {
+            return false; // 如果 knowledgePointList 为空,直接返回 false,后续会删除该 courseScheduleCoursewareDetail
+        }
+
+        // 过滤 KnowledgePointSmall
+        knowledgePointList.removeIf(knowledgePointSmall -> !filterKnowledgePoint(knowledgePointSmall));
+        courseScheduleCoursewareDetail.setKnowledgePointList(knowledgePointList);
+
+        // 如果过滤后的 knowledgePointList 为空,返回 false
+        return CollectionUtils.isNotEmpty(knowledgePointList);
+    }
+
+    private boolean filterKnowledgePoint(CbsLessonCoursewareDetailWrapper.KnowledgePointSmall knowledgePointSmall) {
+        // 过滤 materialList
+//        if (CollectionUtils.isNotEmpty(knowledgePointSmall.getMaterialList())) {
+//            filterAndUpdateMaterialList(knowledgePointSmall.getMaterialList(), search);
+//        }
+        // 过滤子知识点 children
+        if (CollectionUtils.isNotEmpty(knowledgePointSmall.getChildren())) {
+            knowledgePointSmall.getChildren().removeIf(child -> !filterKnowledgePoint(child));
+        }
+        // 保留当前的条件:materialList 不为空 或者 children 不为空,**否则删除当前节点**
+        return CollectionUtils.isNotEmpty(knowledgePointSmall.getMaterialList()) ||
+                CollectionUtils.isNotEmpty(knowledgePointSmall.getChildren());
+    }
+
+    private void filterAndUpdateMaterialList(List<CbsLessonCoursewareDetailWrapper.MaterialSmall> materialList, String search) {
+        materialList.removeIf(materialSmall -> !materialSmall.getName().contains(search));
+    }
+
     /**
      * 关联课程类型
      *
@@ -631,6 +758,22 @@ public class TenantAlbumMusicServiceImpl extends ServiceImpl<TenantAlbumMusicMap
 
     }
 
+    private void filterCbsMusicMaterialList(List<CbsLessonCoursewareDetailWrapper.KnowledgePointSmall> knowledgePointList, List<Long> cbsMusicSheetIds) {
+        if (CollectionUtils.isNotEmpty(knowledgePointList)) {
+            for (CbsLessonCoursewareDetailWrapper.KnowledgePointSmall knowledgePointSmall : knowledgePointList) {
+
+                if (CollectionUtils.isNotEmpty(knowledgePointSmall.getChildren())) {
+                    filterCbsMusicMaterialList(knowledgePointSmall.getChildren(),cbsMusicSheetIds);
+                }
+                List<CbsLessonCoursewareDetailWrapper.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 void filterMusicMaterialList(List<LessonCoursewareDetailWrapper.KnowledgePointSmall> knowledgePointList, List<Long> cbsMusicSheetIds) {
         if (CollectionUtils.isNotEmpty(knowledgePointList)) {
             for (LessonCoursewareDetailWrapper.KnowledgePointSmall knowledgePointSmall : knowledgePointList) {
@@ -668,6 +811,27 @@ public class TenantAlbumMusicServiceImpl extends ServiceImpl<TenantAlbumMusicMap
         return materialRefList;
     }
 
+    private void filterCbsMaterialRefList(List<CbsLessonCoursewareDetailWrapper.KnowledgePointSmall> knowledgePointList,List<Long> cbsMusicSheetIds) {
+        if (CollectionUtils.isNotEmpty(knowledgePointList)) {
+            for (CbsLessonCoursewareDetailWrapper.KnowledgePointSmall knowledgePointSmall : knowledgePointList) {
+
+                if (CollectionUtils.isNotEmpty(knowledgePointSmall.getChildren())) {
+                    filterCbsMaterialRefList(knowledgePointSmall.getChildren(),cbsMusicSheetIds);
+                }
+                List<CbsLessonCoursewareDetailWrapper.MaterialSmall> materialList = knowledgePointSmall.getMaterialList();
+                if (CollectionUtils.isNotEmpty(materialList)) {
+                    for (CbsLessonCoursewareDetailWrapper.MaterialSmall materialSmall : materialList) {
+                        if (CollectionUtils.isNotEmpty(materialSmall.getMaterialRefs())) {
+                            List<CbsMaterialRefWrapper.AddMaterialRef> refList = materialSmall.getMaterialRefs().stream()
+                                .filter(next -> !(EKnowledgeType.MUSIC.equals(next.getKnowledgeType()) && !cbsMusicSheetIds.contains(next.getResourceId())))
+                                .collect(Collectors.toList());
+                            materialSmall.setMaterialRefs(refList);
+                        }
+                    }
+                }
+            }
+        }
+    }
     private void filterMaterialRefList(List<LessonCoursewareDetailWrapper.KnowledgePointSmall> knowledgePointList,List<Long> cbsMusicSheetIds) {
         if (CollectionUtils.isNotEmpty(knowledgePointList)) {
             for (LessonCoursewareDetailWrapper.KnowledgePointSmall knowledgePointSmall : knowledgePointList) {

+ 1 - 1
pom.xml

@@ -23,7 +23,7 @@
 		<google.zxing.version>3.4.0</google.zxing.version>
 		<redisson.version>3.11.5</redisson.version>
 		<maven.test.skip>true</maven.test.skip>
-		<cbs.version>1.0.23</cbs.version>
+		<cbs.version>1.0.24</cbs.version>
 		<microsvc.version>1.1.4</microsvc.version>
 	</properties>