Kaynağa Gözat

Merge branch 'saas' of http://git.dayaedu.com/yonge/mec into zx_saas_export_0814

zouxuan 11 ay önce
ebeveyn
işleme
385154e18d
27 değiştirilmiş dosya ile 455 ekleme ve 76 silme
  1. 84 11
      mec-application/src/main/java/com/ym/mec/student/controller/LessonCoursewareController.java
  2. 2 2
      mec-application/src/main/java/com/ym/mec/student/controller/MusicPracticeRecordController.java
  3. 2 2
      mec-application/src/main/java/com/ym/mec/student/controller/MusicSheetController.java
  4. 2 2
      mec-application/src/main/java/com/ym/mec/student/controller/open/OpenMusicSheetController.java
  5. 66 11
      mec-application/src/main/java/com/ym/mec/teacher/controller/LessonCoursewareController.java
  6. 2 2
      mec-application/src/main/java/com/ym/mec/teacher/controller/MusicPracticeRecordController.java
  7. 2 2
      mec-application/src/main/java/com/ym/mec/teacher/controller/MusicSheetController.java
  8. 20 0
      mec-application/src/main/java/com/ym/mec/teacher/controller/SysMusicScoreController.java
  9. 2 2
      mec-application/src/main/java/com/ym/mec/teacher/controller/open/OpenMusicSheetController.java
  10. 2 2
      mec-application/src/main/java/com/ym/mec/web/controller/MusicPracticeRecordController.java
  11. 2 2
      mec-application/src/main/java/com/ym/mec/web/controller/MusicSheetController.java
  12. 2 2
      mec-application/src/main/java/com/ym/mec/web/controller/open/OpenMusicSheetController.java
  13. 2 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseScheduleDao.java
  14. 5 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/SysMusicScoreDao.java
  15. 3 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/wrapper/LessonCoursewareWrapper.java
  16. 19 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/wrapper/MusicSheetWrapper.java
  17. 10 0
      mec-biz/src/main/java/com/ym/mec/biz/service/LessonCoursewareService.java
  18. 7 1
      mec-biz/src/main/java/com/ym/mec/biz/service/SysMusicScoreService.java
  19. 10 8
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleConvertServiceImpl.java
  20. 25 12
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleServiceImpl.java
  21. 61 7
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/LessonCoursewareServiceImpl.java
  22. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentStatisticsServiceImpl.java
  23. 77 2
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysMusicScoreServiceImpl.java
  24. 4 1
      mec-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml
  25. 1 1
      mec-biz/src/main/resources/config/mybatis/CourseScheduleTeacherSalaryMapper.xml
  26. 41 2
      mec-biz/src/main/resources/config/mybatis/SysMusicScoreMapper.xml
  27. 1 1
      pom.xml

+ 84 - 11
mec-application/src/main/java/com/ym/mec/student/controller/LessonCoursewareController.java

@@ -10,8 +10,6 @@ import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.dao.CloudTeacherOrderDao;
 import com.ym.mec.biz.dal.entity.*;
 import com.ym.mec.biz.dal.enums.ClientEnum;
-import com.ym.mec.biz.dal.entity.Subject;
-import com.ym.mec.biz.dal.enums.ClientEnum;
 import com.ym.mec.biz.dal.wrapper.LessonCoursewareWrapper;
 import com.ym.mec.biz.service.*;
 import com.ym.mec.common.controller.BaseController;
@@ -22,13 +20,15 @@ import com.ym.mec.common.page.PageUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.lang3.StringUtils;
 import org.jetbrains.annotations.NotNull;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 import java.util.stream.Collectors;
 
 @RequestMapping("${app-config.url.student:}/lessonCourseware")
@@ -47,15 +47,18 @@ public class LessonCoursewareController extends BaseController {
 	@Resource
 	private CbsMusicScoreCategoriesService cbsMusicScoreCategoriesService;
 
-    @Autowired
+    @Resource
     private CloudTeacherOrderDao cloudTeacherOrderDao;
 
-    @Autowired
+    @Resource
     private MemberRankCourseTypeMapperService memberRankCourseTypeMapperService;
 
-    @Autowired
+    @Resource
     private MemberRankCategoryMapperService memberRankCategoryMapperService;
 
+    @Resource
+    private SysMusicScoreService sysMusicScoreService;
+
 	@ApiOperation(value = "分页查询已添加的课件")
 	@PostMapping("/queryLessonCourseware")
 	public HttpResponseResult<PageInfo<LessonCoursewareWrapper.LessonCoursewareDto>> queryLessonCourseware(@RequestBody LessonCoursewareWrapper.LessonCoursewareQuery query){
@@ -129,16 +132,87 @@ public class LessonCoursewareController 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)) {
+            SysUser sysUser = sysUserService.getUser();
+            // 机构可用曲目分类
+            String teachingMaterialIds = organizationService.getTeachingMaterialIds(sysUser.getOrganId().toString(),sysUser.getTenantId());
+            List<Integer> categoryIdList = cbsMusicScoreCategoriesService.getAllCategoryIdList(teachingMaterialIds);
+            // 学生会员可用曲目分类
+            List<Integer> activationVipIds = cloudTeacherOrderDao.getActivationVipIds(sysUser.getId());
+            // 获取会员的曲目分类
+            List<Integer> categoryIds = new ArrayList<>();
+            if (CollectionUtils.isNotEmpty(activationVipIds)) {
+                List<MemberRankCategoryMapper> categoryMapperList = memberRankCategoryMapperService.getByMemberRankId(activationVipIds);
+                if (CollectionUtils.isEmpty(categoryMapperList)) {
+                    categoryMapperList = new ArrayList<>();
+                }
+                categoryIds = categoryMapperList.stream().map(MemberRankCategoryMapper::getCategoryId)
+                        .distinct().collect(Collectors.toList());
+            }
+            LessonCoursewareWrapper.LessonCoursewareDetailQuery query1 = new LessonCoursewareWrapper.LessonCoursewareDetailQuery();
+            query1.setUserType(ClientEnum.STUDENT);
+            query1.setTenantCategoriesIdList(categoryIdList);
+            query1.setStudentCategoriesIdList(categoryIds);
+            //获取课件下面包含的所有的曲目编号
+            List<Long> musicScoreIds = lessonCoursewareService.getMusicScoreIds(courseScheduleCoursewareDetails);
+            Map<Long, SysMusicScore> musicScoreMap = new HashMap<>();
+            if (CollectionUtils.isNotEmpty(musicScoreIds)) {
+                List<SysMusicScore> musicScores = sysMusicScoreService.getDao().findByCbsId(musicScoreIds,false);
+                musicScoreMap = musicScores.stream().collect(Collectors.toMap(e -> Long.parseLong(e.getCbsMusicSheetId()), o -> o));
+            }
+            for (CbsLessonCoursewareWrapper.CourseScheduleCoursewareDetail e : courseScheduleCoursewareDetails) {
+                lessonCoursewareService.setTreeResourceId(e.getKnowledgePointList(), query1, musicScoreMap);
+            }
+            courseScheduleCoursewareDetails.removeIf(courseScheduleCoursewareDetail -> !filterAndUpdateKnowledgePointList(courseScheduleCoursewareDetail));
 			String jsonString = JSONObject.toJSONString(courseScheduleCoursewareDetails);
-			List<LessonCoursewareWrapper.CourseScheduleCoursewareDetail> courseScheduleCoursewareDetailList = JSONObject.parseArray(jsonString, LessonCoursewareWrapper.CourseScheduleCoursewareDetail.class);
+			List<LessonCoursewareWrapper.CourseScheduleCoursewareDetail> courseScheduleCoursewareDetailList =
+                    JSONObject.parseArray(jsonString, LessonCoursewareWrapper.CourseScheduleCoursewareDetail.class);
 			return succeed(courseScheduleCoursewareDetailList);
 		}
 		return succeed(new ArrayList<>());
 	}
 
+
+    private 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));
+    }
+
 	@ApiOperation(value = "获取课程详情")
 	@GetMapping("/getLessonCourseDetail/{id}")
 	public HttpResponseResult<CbsLessonCoursewareDetailWrapper.LessonCoursewareDetail> getLessonCourseDetail(@PathVariable("id") Long id){
@@ -148,8 +222,7 @@ public class LessonCoursewareController extends BaseController {
 		List<Integer> categoryIdList = cbsMusicScoreCategoriesService.getAllCategoryIdList(teachingMaterialIds);
 
         // 学生会员可用曲目分类
-        Integer userId = sysUserService.getUserId();
-        List<Integer> activationVipIds = cloudTeacherOrderDao.getActivationVipIds(userId);
+        List<Integer> activationVipIds = cloudTeacherOrderDao.getActivationVipIds(sysUser.getId());
 
         // 获取会员的曲目分类
 

+ 2 - 2
mec-application/src/main/java/com/ym/mec/student/controller/MusicPracticeRecordController.java

@@ -56,7 +56,7 @@ public class MusicPracticeRecordController {
             @ApiImplicitParam(name = "id", value = "id", dataType = "long")
     })
     @GetMapping("/detail/{id}")
-    public R<MusicPracticeRecordWrapper.MusicPracticeRecord> detail(@PathVariable("id") Long id) {
+    public R<MusicPracticeRecordWrapper.MusicPracticeRecord> detail(@PathVariable("id") Long id,Boolean simpleFlag) {
 
         MusicPracticeRecordWrapper.Entity wrapper = musicPracticeRecordService.detail(id);
 
@@ -74,7 +74,7 @@ public class MusicPracticeRecordController {
         }
         MusicPracticeRecordWrapper.MusicPracticeRecord from = MusicPracticeRecordWrapper.MusicPracticeRecord.from(JSON.toJSONString(wrapper));
 
-        CbsMusicSheetWrapper.MusicSheet musicSheet = musicSheetService.cbsDetail(Integer.parseInt(wrapper.getMusicSheetId()));
+        CbsMusicSheetWrapper.MusicSheet musicSheet = musicSheetService.cbsDetail(Integer.parseInt(wrapper.getMusicSheetId()),simpleFlag);
         if (musicSheet != null) {
             from.setRhythmFlag(musicSheet.getEvaluationStandard() != EEvaluationStandard.FREQUENCY);
         }

+ 2 - 2
mec-application/src/main/java/com/ym/mec/student/controller/MusicSheetController.java

@@ -67,8 +67,8 @@ public class MusicSheetController {
         @ApiImplicitParam(name = "id", value = "id", dataType = "long")
     })
     @GetMapping("/cbsDetail/{id}")
-    public R<MusicSheetVo.MusicSheetDetail> cbsDetail(@PathVariable("id") Integer id) {
-        CbsMusicSheetWrapper.MusicSheet musicSheet = musicSheetService.cbsDetail(id);
+    public R<MusicSheetVo.MusicSheetDetail> cbsDetail(@PathVariable("id") Integer id,Boolean simpleFlag) {
+        CbsMusicSheetWrapper.MusicSheet musicSheet = musicSheetService.cbsDetail(id, simpleFlag);
         musicSheet.setBizId(Long.valueOf(id));
 
         MusicSheetVo.MusicSheetDetail musicSheetDetail = JSON.parseObject(JSON.toJSONString(musicSheet), MusicSheetVo.MusicSheetDetail.class);

+ 2 - 2
mec-application/src/main/java/com/ym/mec/student/controller/open/OpenMusicSheetController.java

@@ -52,8 +52,8 @@ public class OpenMusicSheetController {
         @ApiImplicitParam(name = "id", value = "id", dataType = "long")
     })
     @GetMapping("/cbsDetail/{id}")
-    public R<MusicSheetVo.OpenMusicSheetDetail> cbsDetail(@PathVariable("id") Integer id) {
-        CbsMusicSheetWrapper.MusicSheet musicSheet = musicSheetService.cbsDetail(id);
+    public R<MusicSheetVo.OpenMusicSheetDetail> cbsDetail(@PathVariable("id") Integer id,Boolean simpleFlag) {
+        CbsMusicSheetWrapper.MusicSheet musicSheet = musicSheetService.cbsDetail(id, simpleFlag);
         musicSheet.setBizId(Long.valueOf(id));
 
         MusicSheetVo.MusicSheetDetail musicSheetDetail = JSON.parseObject(JSON.toJSONString(musicSheet), MusicSheetVo.MusicSheetDetail.class);

+ 66 - 11
mec-application/src/main/java/com/ym/mec/teacher/controller/LessonCoursewareController.java

@@ -6,18 +6,14 @@ 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.microsvc.toolkit.common.response.template.R;
-import com.microsvc.toolkit.config.jwt.utils.JwtUserInfo;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.dao.TeacherDao;
 import com.ym.mec.biz.dal.entity.Subject;
+import com.ym.mec.biz.dal.entity.SysMusicScore;
 import com.ym.mec.biz.dal.entity.Teacher;
 import com.ym.mec.biz.dal.enums.ClientEnum;
 import com.ym.mec.biz.dal.wrapper.LessonCoursewareWrapper;
-import com.ym.mec.biz.service.CbsMusicScoreCategoriesService;
-import com.ym.mec.biz.service.LessonCoursewareService;
-import com.ym.mec.biz.service.OrganizationService;
-import com.ym.mec.biz.service.SysUserService;
+import com.ym.mec.biz.service.*;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.entity.HttpResponseResult;
 import com.ym.mec.common.exception.BizException;
@@ -26,13 +22,14 @@ import com.ym.mec.common.page.PageUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.apache.commons.collections.CollectionUtils;
-import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
-import springfox.documentation.annotations.ApiIgnore;
 
 import javax.annotation.Resource;
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
 
 @RequestMapping("${app-config.url.teacher:}/lessonCourseware")
 @Api(tags = "课件教材")
@@ -48,6 +45,8 @@ public class LessonCoursewareController extends BaseController {
 	@Resource
 	private OrganizationService organizationService;
 	@Resource
+	private SysMusicScoreService sysMusicScoreService;
+	@Resource
 	private CbsMusicScoreCategoriesService cbsMusicScoreCategoriesService;
 	@Resource
 	private TeacherDao teacherDao;
@@ -79,16 +78,72 @@ public class LessonCoursewareController 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)) {
+			SysUser sysUser = sysUserService.getUser();
+			String teachingMaterialIds = organizationService.getTeachingMaterialIds(sysUser.getOrganId().toString(),sysUser.getTenantId());
+			List<Integer> categoryIdList = cbsMusicScoreCategoriesService.getAllCategoryIdList(teachingMaterialIds);
+			LessonCoursewareWrapper.LessonCoursewareDetailQuery query1 = new LessonCoursewareWrapper.LessonCoursewareDetailQuery();
+			query1.setUserType(ClientEnum.TEACHER);
+			query1.setTenantCategoriesIdList(categoryIdList);
+			//获取课件下面包含的所有的曲目编号
+			List<Long> musicScoreIds = lessonCoursewareService.getMusicScoreIds(courseScheduleCoursewareDetails);
+			Map<Long, SysMusicScore> musicScoreMap = new HashMap<>();
+			if (CollectionUtils.isNotEmpty(musicScoreIds)) {
+				List<SysMusicScore> musicScores = sysMusicScoreService.getDao().findByCbsId(musicScoreIds,false);
+				musicScoreMap = musicScores.stream().collect(Collectors.toMap(e -> Long.parseLong(e.getCbsMusicSheetId()), o -> o));
+			}
+			for (CbsLessonCoursewareWrapper.CourseScheduleCoursewareDetail e : courseScheduleCoursewareDetails) {
+				lessonCoursewareService.setTreeResourceId(e.getKnowledgePointList(), query1, musicScoreMap);
+			}
+			courseScheduleCoursewareDetails.removeIf(courseScheduleCoursewareDetail -> !filterAndUpdateKnowledgePointList(courseScheduleCoursewareDetail));
 			String jsonString = JSONObject.toJSONString(courseScheduleCoursewareDetails);
-			List<LessonCoursewareWrapper.CourseScheduleCoursewareDetail> courseScheduleCoursewareDetailList = JSONObject.parseArray(jsonString, LessonCoursewareWrapper.CourseScheduleCoursewareDetail.class);
+			List<LessonCoursewareWrapper.CourseScheduleCoursewareDetail> courseScheduleCoursewareDetailList =
+					JSONObject.parseArray(jsonString, LessonCoursewareWrapper.CourseScheduleCoursewareDetail.class);
 			return succeed(courseScheduleCoursewareDetailList);
 		}
 		return succeed(new ArrayList<>());
 	}
 
+	private 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));
+	}
+
 	@ApiOperation(value = "获取课程详情")
 	@GetMapping("/getLessonCourseDetail/{id}")
 	public HttpResponseResult<CbsLessonCoursewareDetailWrapper.LessonCoursewareDetail> getLessonCourseDetail(@PathVariable("id") Long id){

+ 2 - 2
mec-application/src/main/java/com/ym/mec/teacher/controller/MusicPracticeRecordController.java

@@ -57,7 +57,7 @@ public class MusicPracticeRecordController {
             @ApiImplicitParam(name = "id", value = "id", dataType = "long")
     })
     @GetMapping("/detail/{id}")
-    public R<MusicPracticeRecordWrapper.MusicPracticeRecord> detail(@PathVariable("id") Long id) {
+    public R<MusicPracticeRecordWrapper.MusicPracticeRecord> detail(@PathVariable("id") Long id,Boolean simpleFlag) {
 
         MusicPracticeRecordWrapper.Entity wrapper = musicPracticeRecordService.detail(id);
 
@@ -75,7 +75,7 @@ public class MusicPracticeRecordController {
         }
         MusicPracticeRecordWrapper.MusicPracticeRecord from = MusicPracticeRecordWrapper.MusicPracticeRecord.from(JSON.toJSONString(wrapper));
 
-        CbsMusicSheetWrapper.MusicSheet musicSheet = musicSheetService.cbsDetail(Integer.parseInt(wrapper.getMusicSheetId()));
+        CbsMusicSheetWrapper.MusicSheet musicSheet = musicSheetService.cbsDetail(Integer.parseInt(wrapper.getMusicSheetId()),simpleFlag);
         if (musicSheet != null) {
             from.setRhythmFlag(musicSheet.getEvaluationStandard() != EEvaluationStandard.FREQUENCY);
         }

+ 2 - 2
mec-application/src/main/java/com/ym/mec/teacher/controller/MusicSheetController.java

@@ -65,8 +65,8 @@ public class MusicSheetController {
         @ApiImplicitParam(name = "id", value = "id", dataType = "long")
     })
     @GetMapping("/cbsDetail/{id}")
-    public R<MusicSheetVo.MusicSheetDetail> cbsDetail(@PathVariable("id") Integer id) {
-        CbsMusicSheetWrapper.MusicSheet musicSheet = musicSheetService.cbsDetail(id);
+    public R<MusicSheetVo.MusicSheetDetail> cbsDetail(@PathVariable("id") Integer id,Boolean simpleFlag) {
+        CbsMusicSheetWrapper.MusicSheet musicSheet = musicSheetService.cbsDetail(id, simpleFlag);
         musicSheet.setBizId(Long.valueOf(id));
 
         MusicSheetVo.MusicSheetDetail musicSheetDetail = JSON.parseObject(JSON.toJSONString(musicSheet), MusicSheetVo.MusicSheetDetail.class);

+ 20 - 0
mec-application/src/main/java/com/ym/mec/teacher/controller/SysMusicScoreController.java

@@ -5,6 +5,7 @@ import com.ym.mec.biz.dal.entity.SysMusicScore;
 import com.ym.mec.biz.dal.entity.Teacher;
 import com.ym.mec.biz.dal.enums.ClientTypeEnum;
 import com.ym.mec.biz.dal.page.SysExamSongQueryInfo;
+import com.ym.mec.biz.dal.wrapper.MusicSheetWrapper;
 import com.ym.mec.biz.service.SysMusicScoreService;
 import com.ym.mec.biz.service.SysUserService;
 import com.ym.mec.biz.service.TeacherService;
@@ -50,4 +51,23 @@ public class SysMusicScoreController extends BaseController {
         queryInfo.setClientType(ClientTypeEnum.SMART_PRACTICE);
         return succeed(sysMusicScoreService.queryMusicScorePageInfo(queryInfo));
     }
+
+    @ApiOperation(value = "分页查询简化")
+    @GetMapping("/queryPageSimple")
+    public HttpResponseResult<PageInfo<MusicSheetWrapper.MusicSheetSimpleDto>> queryPageSimple(SysExamSongQueryInfo queryInfo) {
+        //判断用户是否可以访问云练习
+        Integer userId = sysUserService.getUserId();
+        Teacher teacher = teacherDao.get(userId);
+        if (teacher == null) {
+            throw new BizException("老师信息不存在");
+        }
+        //是否限制用户使用云教练
+        if(teacher.getCoursewareLimit()){
+            throw new BizException("您没有权限使用云练习");
+        }
+        queryInfo.setType("COMMON");
+        queryInfo.setClientFlag(true);
+        queryInfo.setClientType(ClientTypeEnum.SMART_PRACTICE);
+        return succeed(sysMusicScoreService.queryMusicScorePageInfoSimple(queryInfo));
+    }
 }

+ 2 - 2
mec-application/src/main/java/com/ym/mec/teacher/controller/open/OpenMusicSheetController.java

@@ -52,8 +52,8 @@ public class OpenMusicSheetController {
         @ApiImplicitParam(name = "id", value = "id", dataType = "long")
     })
     @GetMapping("/cbsDetail/{id}")
-    public R<MusicSheetVo.OpenMusicSheetDetail> cbsDetail(@PathVariable("id") Integer id) {
-        CbsMusicSheetWrapper.MusicSheet musicSheet = musicSheetService.cbsDetail(id);
+    public R<MusicSheetVo.OpenMusicSheetDetail> cbsDetail(@PathVariable("id") Integer id,Boolean simpleFlag) {
+        CbsMusicSheetWrapper.MusicSheet musicSheet = musicSheetService.cbsDetail(id, simpleFlag);
         musicSheet.setBizId(Long.valueOf(id));
 
         MusicSheetVo.MusicSheetDetail musicSheetDetail = JSON.parseObject(JSON.toJSONString(musicSheet), MusicSheetVo.MusicSheetDetail.class);

+ 2 - 2
mec-application/src/main/java/com/ym/mec/web/controller/MusicPracticeRecordController.java

@@ -55,7 +55,7 @@ public class MusicPracticeRecordController {
             @ApiImplicitParam(name = "id", value = "id", dataType = "long")
     })
     @GetMapping("/detail/{id}")
-    public R<MusicPracticeRecordWrapper.MusicPracticeRecord> detail(@PathVariable("id") Long id) {
+    public R<MusicPracticeRecordWrapper.MusicPracticeRecord> detail(@PathVariable("id") Long id,Boolean simpleFlag) {
 
         MusicPracticeRecordWrapper.Entity wrapper = musicPracticeRecordService.detail(id);
 
@@ -73,7 +73,7 @@ public class MusicPracticeRecordController {
         }
         MusicPracticeRecordWrapper.MusicPracticeRecord from = MusicPracticeRecordWrapper.MusicPracticeRecord.from(JSON.toJSONString(wrapper));
 
-        CbsMusicSheetWrapper.MusicSheet musicSheet = musicSheetService.cbsDetail(Integer.parseInt(wrapper.getMusicSheetId()));
+        CbsMusicSheetWrapper.MusicSheet musicSheet = musicSheetService.cbsDetail(Integer.parseInt(wrapper.getMusicSheetId()),simpleFlag);
         if (musicSheet != null) {
             from.setRhythmFlag(musicSheet.getEvaluationStandard() != EEvaluationStandard.FREQUENCY);
         }

+ 2 - 2
mec-application/src/main/java/com/ym/mec/web/controller/MusicSheetController.java

@@ -59,8 +59,8 @@ public class MusicSheetController {
         @ApiImplicitParam(name = "id", value = "id", dataType = "long")
     })
     @GetMapping("/cbsDetail/{id}")
-    public R<MusicSheetVo.MusicSheetDetail> cbsDetail(@PathVariable("id") Integer id) {
-        CbsMusicSheetWrapper.MusicSheet musicSheet = musicSheetService.cbsDetail(id);
+    public R<MusicSheetVo.MusicSheetDetail> cbsDetail(@PathVariable("id") Integer id,Boolean simpleFlag) {
+        CbsMusicSheetWrapper.MusicSheet musicSheet = musicSheetService.cbsDetail(id, simpleFlag);
         musicSheet.setBizId(Long.valueOf(id));
 
         MusicSheetVo.MusicSheetDetail musicSheetDetail = JSON.parseObject(JSON.toJSONString(musicSheet), MusicSheetVo.MusicSheetDetail.class);

+ 2 - 2
mec-application/src/main/java/com/ym/mec/web/controller/open/OpenMusicSheetController.java

@@ -52,8 +52,8 @@ public class OpenMusicSheetController {
         @ApiImplicitParam(name = "id", value = "id", dataType = "long")
     })
     @GetMapping("/cbsDetail/{id}")
-    public R<MusicSheetVo.OpenMusicSheetDetail> cbsDetail(@PathVariable("id") Integer id) {
-        CbsMusicSheetWrapper.MusicSheet musicSheet = musicSheetService.cbsDetail(id);
+    public R<MusicSheetVo.OpenMusicSheetDetail> cbsDetail(@PathVariable("id") Integer id,Boolean simpleFlag) {
+        CbsMusicSheetWrapper.MusicSheet musicSheet = musicSheetService.cbsDetail(id, simpleFlag);
         musicSheet.setBizId(Long.valueOf(id));
 
         MusicSheetVo.MusicSheetDetail musicSheetDetail = JSON.parseObject(JSON.toJSONString(musicSheet), MusicSheetVo.MusicSheetDetail.class);

+ 2 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseScheduleDao.java

@@ -2087,4 +2087,6 @@ public interface CourseScheduleDao extends BaseDAO<Long, CourseSchedule> {
 
     //获取老师可以查看的班级课程列表
     List<Long> queryTeacherCanViewClassCourseSchedule(@Param("classGroupId") Long classGroupId, @Param("userId") Long userId);
+
+    void cleanDelFlag(@Param("courseIds") String courseIds);
 }

+ 5 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/SysMusicScoreDao.java

@@ -9,6 +9,7 @@ import com.ym.mec.common.dal.BaseDAO;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
+import java.util.Map;
 
 public interface SysMusicScoreDao extends BaseDAO<Integer, SysMusicScore> {
 
@@ -35,4 +36,8 @@ public interface SysMusicScoreDao extends BaseDAO<Integer, SysMusicScore> {
     SysMusicScore getCbsId(@Param("cbsMusicSheetId") Long cbsMusicSheetId);
 
     List<MusicSheetWrapper.CategoryMusicNumStat> getNumByCategoryIds(@Param("categoryIds") List<Integer> categoryIds);
+
+    List<MusicSheetWrapper.MusicSheetSimpleDto> queryPageSimple(Map<String, Object> params);
+
+    int findCountSimple(Map<String, Object> params);
 }

+ 3 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/wrapper/LessonCoursewareWrapper.java

@@ -138,6 +138,9 @@ public class LessonCoursewareWrapper {
         @ApiModelProperty("课件详情名称")
         private String coursewareDetailName;
 
+        @ApiModelProperty("课时目标描述")
+        private String lessonTargetDesc;
+
         @ApiModelProperty("知识点")
         private List<CbsLessonCoursewareDetailWrapper.KnowledgePointSmall> knowledgePointList;
 

+ 19 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/wrapper/MusicSheetWrapper.java

@@ -532,4 +532,23 @@ public class MusicSheetWrapper {
         @ApiModelProperty("用户类型")
         private ClientEnum userType;
     }
+
+    @Data
+    public static class MusicSheetSimpleDto{
+
+        @ApiModelProperty("主键")
+        private Long id;
+
+        @ApiModelProperty("内容平台曲目ID")
+        private String cbsMusicSheetId;
+
+        @ApiModelProperty("曲目封面图")
+        private String titleImg;
+
+        @ApiModelProperty("曲目名称")
+        private String name;
+
+        @ApiModelProperty("音频文件")
+        private String audioFileUrl;
+    }
 }

+ 10 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/LessonCoursewareService.java

@@ -3,11 +3,14 @@ package com.ym.mec.biz.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.ym.mec.biz.dal.entity.SysMusicScore;
 import com.ym.mec.biz.dal.mapper.LessonCoursewareMapper;
 import com.ym.mec.biz.dal.entity.LessonCourseware;
 import com.ym.mec.biz.dal.wrapper.LessonCoursewareWrapper;
 
 import java.util.List;
+import java.util.Map;
 
 public interface LessonCoursewareService extends IService<LessonCourseware> {
 
@@ -29,5 +32,12 @@ public interface LessonCoursewareService extends IService<LessonCourseware> {
     LessonCourseware getByLessonCoursewareId(Long lessonCoursewareId);
 
     List<LessonCourseware> getByLessonCoursewareIds(List<Integer> categoryIds);
+
+    //递归处理CbsLessonCoursewareDetailWrapper.KnowledgePointSmall
+    void setTreeResourceId(List<CbsLessonCoursewareDetailWrapper.KnowledgePointSmall> knowledgePointList,
+                           LessonCoursewareWrapper.LessonCoursewareDetailQuery query,
+                           Map<Long, SysMusicScore> musicScores);
+
+    List<Long> getMusicScoreIds(List<CbsLessonCoursewareWrapper.CourseScheduleCoursewareDetail> courseScheduleCoursewareDetails);
 }
 

+ 7 - 1
mec-biz/src/main/java/com/ym/mec/biz/service/SysMusicScoreService.java

@@ -24,10 +24,14 @@ public interface SysMusicScoreService extends BaseService<Integer, SysMusicScore
 
     List<CbsMusicSheetWrapper.MusicSheetApplication> queryCbsMusicSheetApplication(CbsMusicSheetWrapper.MusicSheetApplicationQuery query);
 
+    List<CbsMusicSheetWrapper.MusicSheetApplicationSimple> queryCbsMusicSheetApplicationSimple(CbsMusicSheetWrapper.MusicSheetApplicationQuery query);
+
     PageInfo<CbsMusicSheetWrapper.MusicSheetAccApplication> queryCbsMusicSheetSoundApplication(CbsMusicSheetWrapper.MusicSheetApplicationQuery query);
 
     List<CbsMusicSheetWrapper.MusicSheetApplication> queryCbsMusicSheetApplication(List<String> cbsMusicSheetIds);
 
+    List<CbsMusicSheetWrapper.MusicSheetApplicationSimple> queryCbsMusicSheetApplicationSimple(List<String> cbsMusicSheetIds);
+
     //获取乐器名称
     List<CbsMusicalInstrumentWrapper.MusicalInstrumentQueryDto> queryMusicalInstrument(List<Integer> musicalInstrumentIds);
 
@@ -37,6 +41,8 @@ public interface SysMusicScoreService extends BaseService<Integer, SysMusicScore
     
     PageInfo<SysMusicScore> queryMusicScorePageInfo(SysExamSongQueryInfo queryInfo);
 
+    PageInfo<MusicSheetWrapper.MusicSheetSimpleDto> queryMusicScorePageInfoSimple(SysExamSongQueryInfo queryInfo);
+
     Map<Long, SysMusicScore> getMapByIds(List<Long> musicSheetIds);
 
     Boolean stateList(ReasonDto reasonDto);
@@ -54,7 +60,7 @@ public interface SysMusicScoreService extends BaseService<Integer, SysMusicScore
      * @param musicSheetId 业务端曲目ID
      * @return CbsMusicSheetWrapper.MusicSheet
      */
-    CbsMusicSheetWrapper.MusicSheet cbsDetail(Integer musicSheetId);
+    CbsMusicSheetWrapper.MusicSheet cbsDetail(Integer musicSheetId,Boolean simpleFlag);
 
     /**
      * 查询总控平台曲目信息

+ 10 - 8
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleConvertServiceImpl.java

@@ -78,14 +78,14 @@ public class CourseScheduleConvertServiceImpl implements CourseScheduleConvertSe
     @Transactional(rollbackFor = Exception.class)
     public HttpResponseResult action(List<ClassGroupDto> classGroups) {
         ClassGroupDto classGroupDto = classGroups.get(0);
-        List<Long> oldCourseIdList = Arrays.stream(classGroupDto.getCourseIds().split(",")).map(id -> Long.parseLong(id)).collect(Collectors.toList());
+        List<Long> oldCourseIdList = Arrays.stream(classGroupDto.getCourseIds().split(",")).map(Long::parseLong).collect(Collectors.toList());
         //校验课程是否可以进行转换
         this.checkConvertCourseIds(oldCourseIdList);
         if(!classGroupDto.getConfirmGenerate()){
             TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
         }
         //校验主教助教是否冲突
-        classGroups.stream().forEach(e->classGroupTeacherMapperService.checkTeachingBishop(e.getClassGroupTeacherMapperList()));
+        classGroups.forEach(e->classGroupTeacherMapperService.checkTeachingBishop(e.getClassGroupTeacherMapperList()));
         int classNum = classGroups.size();
         //课程列表
         List<CourseSchedule> courseScheduleList = new ArrayList<>();
@@ -96,7 +96,7 @@ public class CourseScheduleConvertServiceImpl implements CourseScheduleConvertSe
         List<Integer> studentIdList = new ArrayList<>();
 
         for (ClassGroupDto groupDto : classGroups) {
-            List<Integer> userIdStrSet = Arrays.stream(groupDto.getUserIds().split(",")).map(id -> Integer.valueOf(id)).collect(Collectors.toList());
+            List<Integer> userIdStrSet = Arrays.stream(groupDto.getUserIds().split(",")).map(Integer::valueOf).collect(Collectors.toList());
             studentIdList.addAll(userIdStrSet);
             groupDto.setStudentNum(userIdStrSet.size());
             //创建班级
@@ -125,7 +125,7 @@ public class CourseScheduleConvertServiceImpl implements CourseScheduleConvertSe
                     courseScheduleStudentPayments.addAll(groupDto.getCourseScheduleStudentPayments());
                 }else {
                     List<CourseSchedule> schedules = result.getData();
-                    List<Integer> teacherIdList = schedules.stream().map(e -> e.getActualTeacherId()).collect(Collectors.toList());
+                    List<Integer> teacherIdList = schedules.stream().map(CourseSchedule::getActualTeacherId).collect(Collectors.toList());
                     Map<Integer, String> maps = MapUtil.convertIntegerMap(teacherDao.queryNameByIdList(teacherIdList));
                     for (CourseSchedule e : schedules) {e.setActualTeacherName(maps.get(e.getActualTeacherId()));}
                     return result;
@@ -159,18 +159,20 @@ public class CourseScheduleConvertServiceImpl implements CourseScheduleConvertSe
         CourseConvertLog courseConvertLog = courseConvertLogService.get(courseConvertId);
         //校验是否可以还原
         this.checkConvertRevoke(courseConvertLog);
-        List<Long> newCourseIdList = Arrays.stream(courseConvertLog.getNewCourseIds().split(",")).map(e -> Long.parseLong(e)).collect(Collectors.toList());
-        List<Integer> userIdList = Arrays.stream(courseConvertLog.getStudentIds().split(",")).map(e -> Integer.parseInt(e)).collect(Collectors.toList());
+        List<Long> newCourseIdList = Arrays.stream(courseConvertLog.getNewCourseIds().split(",")).map(Long::parseLong).collect(Collectors.toList());
+        List<Integer> userIdList = Arrays.stream(courseConvertLog.getStudentIds().split(",")).map(Integer::parseInt).collect(Collectors.toList());
         List<CourseSchedule> courseSchedules = JSONArray.parseArray(courseConvertLog.getOldCourseJson(), CourseSchedule.class);
 //        courseScheduleService.getDao().batchUpdateDelFlag(courseConvertLog.getOldCourseIds());
-        courseScheduleService.getDao().batchInsert(courseSchedules);
+        //清除课程删除标记
+        courseScheduleService.getDao().cleanDelFlag(courseConvertLog.getOldCourseIds());
+//        courseScheduleService.getDao().batchUpdate(courseSchedules);
 
         String studentMapperJson = courseConvertLog.getOldCourseStudentMapperJson();
         List<CourseScheduleStudentPayment> studentPayments = JSONArray.parseArray(studentMapperJson, CourseScheduleStudentPayment.class);
         //获取学员课程价值
         List<CourseScheduleStudentPayment> paymentList = courseScheduleStudentPaymentService.getDao().findByCourseScheduleIds(newCourseIdList);
         //获取现有所有学员列表
-        List<Integer> currentUserIdList = paymentList.stream().map(e -> e.getUserId()).distinct().collect(Collectors.toList());
+        List<Integer> currentUserIdList = paymentList.stream().map(CourseScheduleStudentPayment::getUserId).distinct().collect(Collectors.toList());
         userIdList.removeAll(currentUserIdList);
         if(!CollectionUtils.isEmpty(userIdList)){
             studentPayments = studentPayments.stream().filter(e->!userIdList.contains(e.getUserId())).collect(Collectors.toList());

+ 25 - 12
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleServiceImpl.java

@@ -5823,8 +5823,8 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 		DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
 
 		//2、获取班级学生
-		List<Integer> studentIds = Arrays.stream(groupDto.getUserIds().split(",")).map(id -> Integer.valueOf(id)).distinct().collect(Collectors.toList());
-		List<Long> oldCourseIdList = Arrays.stream(groupDto.getCourseIds().split(",")).map(id -> Long.parseLong(id)).collect(Collectors.toList());
+		List<Integer> studentIds = Arrays.stream(groupDto.getUserIds().split(",")).map(Integer::valueOf).distinct().collect(Collectors.toList());
+		List<Long> oldCourseIdList = Arrays.stream(groupDto.getCourseIds().split(",")).map(Long::parseLong).collect(Collectors.toList());
 
 		//获取可转换课程时长,学员数量,课程数量
 		CourseConvertSumDto courseConvertSumDto = courseScheduleConvertDao.sumCourseConvert(oldCourseIdList);
@@ -5833,8 +5833,8 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 		List<CourseScheduleTeacherSalary> courseScheduleTeacherSalaryList = new ArrayList<>();
 		List<CourseSchedule> courseScheduleList = new ArrayList<>();
 		//校验老师是否冲突
-		courseTimeDtoList.stream().forEach(e->classGroupTeacherMapperService.checkTeachingBishop(e.getClassGroupTeacherMapperList()));
-		LocalDateTime now = LocalDateTime.now().withHour(0).withMinute(0).withSecond(0).withNano(0);
+		courseTimeDtoList.forEach(e->classGroupTeacherMapperService.checkTeachingBishop(e.getClassGroupTeacherMapperList()));
+//		LocalDateTime now = LocalDateTime.now().withHour(0).withMinute(0).withSecond(0).withNano(0);
 		//获取排课总时长
 		int totalCourseTimes = 0;
 		long totalCourseDuration = 0;
@@ -5867,28 +5867,39 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 		int generateCourseTimes = 0;
 		WhileNode:
 		while (true) {
-			int dayOfWeek = now.getDayOfWeek().getValue();
+//			int dayOfWeek = now.getDayOfWeek().getValue();
 			for (CourseTimeDto courseTimeDto : courseTimeDtoList) {
+				if(courseTimeDto.getCalendar() == null){
+					//排课开始时间
+					courseTimeDto.setCalendar(courseTimeDto.getStartDate().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime());
+				}
 				List<ClassGroupTeacherMapper> newClassGroupTeacherMapperList = courseTimeDto.getClassGroupTeacherMapperList();
+
+				Set<Integer> noRepeatTeacherIds = newClassGroupTeacherMapperList.stream().map(ClassGroupTeacherMapper::getUserId).collect(Collectors.toSet());
+				if (noRepeatTeacherIds.size() != newClassGroupTeacherMapperList.size()) {
+					throw new BizException("主教与助教存在冲突");
+				}
+
 				Integer teacherId = newClassGroupTeacherMapperList.stream().filter(ct -> TeachTypeEnum.BISHOP.equals(ct.getTeacherRole())).findAny().get().getUserId();
 				if (Objects.isNull(teacherId)) {
 					throw new BizException("请设置主教");
 				}
-				if (courseTimeDto.getDayOfWeek() < 1 || courseTimeDto.getDayOfWeek() > 7) {
-					throw new BizException("排课循环周期错误,请核查");
-				}
+//				if (courseTimeDto.getDayOfWeek() < 1 || courseTimeDto.getDayOfWeek() > 7) {
+//					throw new BizException("排课循环周期错误,请核查");
+//				}
 				if (Objects.isNull(courseTimeDto.getStartDate()) || Objects.isNull(courseTimeDto.getEndDate())) {
 					throw new BizException("排课循环周期错误,请核查");
 				}
 
 				//跳过节假日
-				if (courseTimeDto.getHoliday() && holidayDays.contains(now.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")))) {
+				if (courseTimeDto.getHoliday() && holidayDays.contains(courseTimeDto.getCalendar().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")))) {
+					courseTimeDto.setCalendar(courseTimeDto.getCalendar().plusDays(courseTimeDto.getIntervalDays()));
 					continue;
 				}
 
-				if (!courseTimeDto.getDayOfWeek().equals(dayOfWeek)) continue;
+//				if (!courseTimeDto.getDayOfWeek().equals(dayOfWeek)) continue;
 
-				Date classDate = DateConvertor.toDate(now);
+				Date classDate = DateConvertor.toDate(courseTimeDto.getCalendar());
 
 				if (courseTimeDto.getStartDate().compareTo(classDate) > 0
 						|| courseTimeDto.getEndDate().compareTo(classDate) < 0
@@ -5899,6 +5910,7 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 					if (totalCourseTimes <= generateCourseTimes) {
 						break WhileNode;
 					}
+					courseTimeDto.setCalendar(courseTimeDto.getCalendar().plusDays(courseTimeDto.getIntervalDays()));
 					continue;
 				}
 
@@ -5944,8 +5956,9 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 				courseScheduleList.add(courseSchedule);
 				courseScheduleTeacherSalaryService.initMusicGroupCourseTeacherSalary(newClassGroupTeacherMapperList,courseSchedule,
 						musicGroup,courseScheduleTeacherSalaryList);
+
+				courseTimeDto.setCalendar(courseTimeDto.getCalendar().plusDays(courseTimeDto.getIntervalDays()));
 			}
-			now = now.plusDays(1);
 		}
 		this.checkNewCourseSchedules(courseScheduleList, false, false);
 		if(!groupDto.getConfirmGenerate()){

+ 61 - 7
mec-biz/src/main/java/com/ym/mec/biz/service/impl/LessonCoursewareServiceImpl.java

@@ -204,8 +204,16 @@ public class LessonCoursewareServiceImpl extends ServiceImpl<LessonCoursewareMap
         if (detail == null) {
             return null;
         }
+        //获取课件下面包含的所有的曲目编号
+        List<Long> musicScoreIds = new ArrayList<>();
+        this.setMusicSheetId(detail.getKnowledgePointList(),musicScoreIds);
+        Map<Long, SysMusicScore> musicScoreMap = new HashMap<>();
+        if (CollectionUtils.isNotEmpty(musicScoreIds)) {
+            List<SysMusicScore> musicScores = sysMusicScoreService.getDao().findByCbsId(musicScoreIds,false);
+            musicScoreMap = musicScores.stream().collect(Collectors.toMap(e -> Long.parseLong(e.getCbsMusicSheetId()), o -> o));
+        }
         //获取知识点下的素材列表、下面关联的资源列表,如果applicationIdList是空的,那么把他剔除掉
-        this.setTreeResourceId(detail.getKnowledgePointList(),query);
+        this.setTreeResourceId(detail.getKnowledgePointList(),query,musicScoreMap);
         return detail;
     }
 
@@ -349,25 +357,71 @@ public class LessonCoursewareServiceImpl extends ServiceImpl<LessonCoursewareMap
     }
 
     //递归处理CbsLessonCoursewareDetailWrapper.KnowledgePointSmall
-    private void setTreeResourceId(List<CbsLessonCoursewareDetailWrapper.KnowledgePointSmall> knowledgePointList,LessonCoursewareWrapper.LessonCoursewareDetailQuery query){
+    @Override
+    public void setTreeResourceId(List<CbsLessonCoursewareDetailWrapper.KnowledgePointSmall> knowledgePointList,
+                                  LessonCoursewareWrapper.LessonCoursewareDetailQuery query,
+                                  Map<Long, SysMusicScore> musicScores){
         if(CollectionUtils.isNotEmpty(knowledgePointList)){
             knowledgePointList.forEach(knowledgePointSmall -> {
-                this.setResourceId(knowledgePointSmall,query);
+                this.setResourceId(knowledgePointSmall,query,musicScores);
                 List<CbsLessonCoursewareDetailWrapper.KnowledgePointSmall> children = knowledgePointSmall.getChildren();
                 if(CollectionUtils.isNotEmpty(children)){
-                    this.setTreeResourceId(children,query);
+                    this.setTreeResourceId(children,query,musicScores);
                 }
             });
         }
     }
 
+    @Override
+    public List<Long> getMusicScoreIds(List<CbsLessonCoursewareWrapper.CourseScheduleCoursewareDetail> courseScheduleCoursewareDetails) {
+        List<Long> musicScoreIds = new ArrayList<>();
+        //获取所有曲目的ID
+        if(CollectionUtils.isNotEmpty(courseScheduleCoursewareDetails)){
+            courseScheduleCoursewareDetails.forEach(courseScheduleCoursewareDetail -> {
+                this.setMusicSheetId(courseScheduleCoursewareDetail.getKnowledgePointList(),musicScoreIds);
+            });
+        }
+        return musicScoreIds;
+    }
+
+    private void setMusicSheetId(List<CbsLessonCoursewareDetailWrapper.KnowledgePointSmall> knowledgePointList,List<Long> musicScoreIds){
+        if(CollectionUtils.isNotEmpty(knowledgePointList)){
+            for (CbsLessonCoursewareDetailWrapper.KnowledgePointSmall knowledgePointSmall : knowledgePointList) {
+                List<CbsLessonCoursewareDetailWrapper.MaterialSmall> materialList = knowledgePointSmall.getMaterialList();
+                if(CollectionUtils.isNotEmpty(materialList)){
+                    //获取所有曲目的ID
+                    List<Long> musicScoreIds1 = materialList.stream().filter(materialSmall -> materialSmall.getType() == EMaterialType.SONG)
+                            .map(materialSmall -> Long.parseLong(materialSmall.getContent())).collect(Collectors.toList());
+                    musicScoreIds.addAll(musicScoreIds1);
+                    for (CbsLessonCoursewareDetailWrapper.MaterialSmall materialSmall : materialList) {
+                        List<CbsMaterialRefWrapper.AddMaterialRef> materialRefs = materialSmall.getMaterialRefs();
+                        if(CollectionUtils.isNotEmpty(materialRefs)){
+                            //获取所有曲目的ID
+                            List<Long> musicScoreIds2 = materialRefs.stream().filter(materialRef -> materialRef.getRelateMaterialInfo() != null
+                                    && StringUtils.equals(materialRef.getRelateMaterialInfo().getType(),"SONG")
+                                    && CollectionUtils.isNotEmpty(materialRef.getRelateMaterialInfo().getApplicationIdList()))
+                                    .map(materialRef -> materialRef.getRelateMaterialInfo().getId()).collect(Collectors.toList());
+                            musicScoreIds.addAll(musicScoreIds2);
+                        }
+                    }
+                }
+                List<CbsLessonCoursewareDetailWrapper.KnowledgePointSmall> children = knowledgePointSmall.getChildren();
+                if(CollectionUtils.isNotEmpty(children)){
+                    this.setMusicSheetId(children,musicScoreIds);
+                }
+            }
+        }
+    }
+
 
-    private void setResourceId(CbsLessonCoursewareDetailWrapper.KnowledgePointSmall knowledgePointSmall,LessonCoursewareWrapper.LessonCoursewareDetailQuery query){
+    private void setResourceId(CbsLessonCoursewareDetailWrapper.KnowledgePointSmall knowledgePointSmall,
+                               LessonCoursewareWrapper.LessonCoursewareDetailQuery query,
+                               Map<Long, SysMusicScore> musicScoreMap){
         List<CbsLessonCoursewareDetailWrapper.MaterialSmall> materialList = knowledgePointSmall.getMaterialList();
         if(CollectionUtils.isNotEmpty(materialList)){
             for (CbsLessonCoursewareDetailWrapper.MaterialSmall materialSmall : materialList) {
                 if(materialSmall.getType() == EMaterialType.SONG){
-                    SysMusicScore musicScore = sysMusicScoreService.getDao().getCbsId(Long.parseLong(materialSmall.getContent()));
+                    SysMusicScore musicScore = musicScoreMap.get(Long.parseLong(materialSmall.getContent()));
                     //没有启用的曲目不显示
                     if(musicScore != null && musicScore.getShowFlag() == 1 && musicScore.getClientShowFlag() == 1) {
                         materialSmall.setContent(musicScore.getId().toString());
@@ -382,7 +436,7 @@ public class LessonCoursewareServiceImpl extends ServiceImpl<LessonCoursewareMap
                         CbsMaterialRefWrapper.RelateMaterialInfo relateMaterialInfo = materialRef.getRelateMaterialInfo();
                         if(relateMaterialInfo != null && StringUtils.equals(relateMaterialInfo.getType(),"SONG")
                                 && CollectionUtils.isNotEmpty(relateMaterialInfo.getApplicationIdList())){
-                            SysMusicScore musicScore = sysMusicScoreService.getDao().getCbsId(relateMaterialInfo.getId());
+                            SysMusicScore musicScore = musicScoreMap.get(relateMaterialInfo.getId());
                             if(musicScore != null && musicScore.getShowFlag() == 1 && musicScore.getClientShowFlag() == 1
                                     && query.getTenantCategoriesIdList().contains(musicScore.getCbsMusicCategoriesId())) {
                                 materialRef.setResourceIdStr(musicScore.getId().toString());

+ 1 - 1
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentStatisticsServiceImpl.java

@@ -107,7 +107,7 @@ public class StudentStatisticsServiceImpl extends BaseServiceImpl<Integer, Stude
 		Map<String, Object> params = new HashMap<String, Object>();
 		MapUtil.populateMap(params, queryInfo);
 		if(StringUtils.isNotEmpty(queryInfo.getOrganId())){
-			List<Integer> organIdList = Arrays.stream(queryInfo.getOrganId().split(",")).map(id -> Integer.valueOf(id)).collect(Collectors.toList());
+			List<Integer> organIdList = Arrays.stream(queryInfo.getOrganId().split(",")).map(Integer::valueOf).collect(Collectors.toList());
 			params.put("organIdList",organIdList);
 		}
 		List<StudentStatisticsDto> dataList = null;

+ 77 - 2
mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysMusicScoreServiceImpl.java

@@ -130,6 +130,20 @@ public class SysMusicScoreServiceImpl extends BaseServiceImpl<Integer, SysMusicS
     }
 
     @Override
+    public List<CbsMusicSheetWrapper.MusicSheetApplicationSimple> queryCbsMusicSheetApplicationSimple(CbsMusicSheetWrapper.MusicSheetApplicationQuery query) {
+        R<com.microsvc.toolkit.common.response.paging.PageInfo<CbsMusicSheetWrapper.MusicSheetApplicationSimple>> pageInfoR =
+                musicFeignClientService.musicSheetPageByApplicationSimple(query);
+        if(pageInfoR.getCode() != 200){
+            throw new BizException("获取曲目信息失败");
+        }
+        com.microsvc.toolkit.common.response.paging.PageInfo<CbsMusicSheetWrapper.MusicSheetApplicationSimple> pageInfo = pageInfoR.getData();
+        if(pageInfo != null && CollectionUtils.isNotEmpty(pageInfo.getRows())){
+            return pageInfo.getRows();
+        }
+        return new ArrayList<>();
+    }
+
+    @Override
     public PageInfo<CbsMusicSheetWrapper.MusicSheetAccApplication> queryCbsMusicSheetSoundApplication(CbsMusicSheetWrapper.MusicSheetApplicationQuery query) {
         R<com.microsvc.toolkit.common.response.paging.PageInfo<CbsMusicSheetWrapper.MusicSheetAccApplication>> pageInfoR =
                 musicFeignClientService.musicSheetAccPageByApplication(query);
@@ -148,6 +162,14 @@ public class SysMusicScoreServiceImpl extends BaseServiceImpl<Integer, SysMusicS
         return this.queryCbsMusicSheetApplication(query);
     }
 
+    @Override
+    public List<CbsMusicSheetWrapper.MusicSheetApplicationSimple> queryCbsMusicSheetApplicationSimple(List<String> cbsMusicSheetIds){
+        CbsMusicSheetWrapper.MusicSheetApplicationQuery query = this.getMusicSheetApplicationQuery();
+        query.setMusicSheetIds(cbsMusicSheetIds.stream().map(Long::parseLong).collect(Collectors.toList()));
+        query.setRows(cbsMusicSheetIds.size());
+        return this.queryCbsMusicSheetApplicationSimple(query);
+    }
+
     //获取乐器名称
     @Override
     public List<CbsMusicalInstrumentWrapper.MusicalInstrumentQueryDto> queryMusicalInstrument(List<Integer> musicalInstrumentIds){
@@ -164,6 +186,7 @@ public class SysMusicScoreServiceImpl extends BaseServiceImpl<Integer, SysMusicS
         return infoR.getData().getRows();
     }
 
+
     private void dealMusicScoreData(List<SysMusicScore> records){
         if (CollectionUtils.isNotEmpty(records)) {
             List<String> cbsMusicSheetIds = records.stream().map(SysMusicScore::getCbsMusicSheetId).collect(Collectors.toList());
@@ -385,6 +408,52 @@ public class SysMusicScoreServiceImpl extends BaseServiceImpl<Integer, SysMusicS
         }
         return pageInfo;
     }
+    @Override
+    public PageInfo<MusicSheetWrapper.MusicSheetSimpleDto> queryMusicScorePageInfoSimple(SysExamSongQueryInfo queryInfo) {
+        this.initCategoryIds(queryInfo);
+        if(queryInfo.getSubjectId() != null){
+            if(queryInfo.getSubjectId() == 5){
+                queryInfo.setSubjectId(null);
+                queryInfo.setSubjectIds("6");
+            }else if(queryInfo.getSubjectId() == 122){
+                queryInfo.setSubjectId(null);
+                queryInfo.setSubjectIds("122,121,113,23");
+            }else {
+                queryInfo.setSubjectIds(queryInfo.getSubjectId().toString());
+            }
+        }
+        if(CollectionUtils.isEmpty(queryInfo.getCategoriesIdList())){
+            return new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
+        }
+        PageInfo<MusicSheetWrapper.MusicSheetSimpleDto> pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
+        Map<String, Object> params = new HashMap<String, Object>();
+        MapUtil.populateMap(params, queryInfo);
+
+        List<MusicSheetWrapper.MusicSheetSimpleDto> dataList = null;
+        int count = sysMusicScoreDao.findCountSimple(params);
+        if (count > 0) {
+            pageInfo.setTotal(count);
+            params.put("offset", pageInfo.getOffset());
+            dataList = sysMusicScoreDao.queryPageSimple(params);
+            List<String> cbsMusicSheetIds = dataList.stream().map(MusicSheetWrapper.MusicSheetSimpleDto::getCbsMusicSheetId).collect(Collectors.toList());
+            List<CbsMusicSheetWrapper.MusicSheetApplicationSimple> applications = this.queryCbsMusicSheetApplicationSimple(cbsMusicSheetIds);
+            if(CollectionUtils.isNotEmpty(applications)){
+                Map<Long, CbsMusicSheetWrapper.MusicSheetApplicationSimple> musicSheetApplicationMap = applications
+                        .stream().collect(Collectors.toMap(CbsMusicSheetWrapper.MusicSheetApplicationSimple::getId, Function.identity()));
+                for (MusicSheetWrapper.MusicSheetSimpleDto record : dataList) {
+                    CbsMusicSheetWrapper.MusicSheetApplicationSimple simple = musicSheetApplicationMap.get(Long.parseLong(record.getCbsMusicSheetId()));
+                    record.setAudioFileUrl(simple.getAudioFileUrl());
+                    record.setName(simple.getName());
+                    record.setTitleImg(simple.getTitleImg());
+                }
+            }
+        }
+        if (count == 0) {
+            dataList = new ArrayList<>();
+        }
+        pageInfo.setRows(dataList);
+        return pageInfo;
+    }
 
     @Override
     public Map<Long, SysMusicScore> getMapByIds(List<Long> musicSheetIds) {
@@ -701,7 +770,7 @@ public class SysMusicScoreServiceImpl extends BaseServiceImpl<Integer, SysMusicS
      * @return CbsMusicSheetWrapper.MusicSheet
      */
     @Override
-    public CbsMusicSheetWrapper.MusicSheet cbsDetail(Integer musicSheetId) {
+    public CbsMusicSheetWrapper.MusicSheet cbsDetail(Integer musicSheetId,Boolean simpleFlag) {
         // 曲目信息
         SysMusicScore musicSheet = getDao().get(musicSheetId);
         if (Objects.isNull(musicSheet)) {
@@ -712,7 +781,13 @@ public class SysMusicScoreServiceImpl extends BaseServiceImpl<Integer, SysMusicS
         if (StringUtils.isBlank(musicSheet.getCbsMusicSheetId())) {
             throw new BizException("曲目信息异常");
         }
-        return getCbsMusicSheetByCbsId(Long.parseLong(musicSheet.getCbsMusicSheetId()));
+        CbsMusicSheetWrapper.MusicSheet sheet = getCbsMusicSheetByCbsId(Long.parseLong(musicSheet.getCbsMusicSheetId()));
+        if(simpleFlag!= null && simpleFlag){
+            sheet.setExtConfigJson(null);
+            sheet.setExtStyleConfigJson(null);
+            sheet.setExtJianStyleConfigJson(null);
+        }
+        return sheet;
     }
 
     /**

+ 4 - 1
mec-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml

@@ -1428,7 +1428,7 @@
                 <if test="item.leaveStudentNum != null">
                     leave_student_num_ = #{item.leaveStudentNum},
                 </if>
-                schoole_id_ = #{item.schoolId},
+                schoole_id_ = #{item.schoolId},del_flag_ = 0,
                 service_provider_ = #{item.serviceProvider},
                 <if test="item.schoolId == null">
                     schoole_id_ = null,
@@ -4551,6 +4551,9 @@
     <update id="configCourseware">
         update course_schedule set courseware_detail_id_ = #{coursewareDetailId} where id_ = #{courseId}
     </update>
+    <update id="cleanDelFlag">
+        update course_schedule set del_flag_ = 0,del_time_ = NULL where FIND_IN_SET(id_,#{courseIds})
+    </update>
 
     <select id="getTeacherContinuousCourse" resultMap="CourseSchedule">
         SELECT <include refid="resultSql"/> FROM course_schedule cs

+ 1 - 1
mec-biz/src/main/resources/config/mybatis/CourseScheduleTeacherSalaryMapper.xml

@@ -262,7 +262,7 @@
 
 	<sql id="vipGroupSalaryQueryCondition">
 		<where>
-			cs.music_group_id_ = #{vipGroupId}
+			cs.music_group_id_ = #{vipGroupId} AND cs.del_flag_ = '0'
 			<if test="groupType != null and groupType != ''">
 				AND cs.group_type_= #{groupType}
 			</if>

+ 41 - 2
mec-biz/src/main/resources/config/mybatis/SysMusicScoreMapper.xml

@@ -194,7 +194,7 @@
 			update sys_music_score set music_score_categories_id_ = #{item.musicSheetCategoryId},
 			client_type_ = 'SMART_PRACTICE',type_ = 'COMMON',
 			rank_ids_ = CASE WHEN #{item.paymentType} = 'FREE' THEN NULL ELSE '1' END,
-			order_ = #{item.sortNo},del_flag_ = 0,client_show_flag_ = #{item.status},
+			order_ = #{item.sortNo},del_flag_ = 0,client_show_flag_ = #{item.clientStatus},
 			score_type_ = #{item.scoreType},is_convertible_score_ = #{item.isConvertibleScore}
 			<if test="item.musicSheetUpdate != null">
 				,name_ = #{item.musicSheetUpdate.name},
@@ -256,7 +256,7 @@
 			#{item.musicSheetUpdate.subjectIds},
 			#{item.musicSheetUpdate.playSpeed},
 			#{item.musicSheetUpdate.canEvaluate},
-			#{item.musicSheetUpdate.playMode},#{item.status},#{item.musicSheetUpdate.platformStatus},
+			#{item.musicSheetUpdate.playMode},#{item.clientStatus},#{item.musicSheetUpdate.platformStatus},
 			#{item.musicSheetId},#{item.musicSheetUpdate.musicSheetType},
 			#{item.scoreType},#{item.isConvertibleScore},
 			#{item.musicSheetUpdate.isAllSubject},
@@ -357,4 +357,43 @@
         and del_flag_ = 0 and cbs_music_sheet_id_ is not null GROUP BY cbs_music_categories_id_
 
     </select>
+	<select id="queryPageSimple" resultType="com.ym.mec.biz.dal.wrapper.MusicSheetWrapper$MusicSheetSimpleDto">
+		SELECT ses.cbs_music_sheet_id_ cbsMusicSheetId,ses.id_ id
+		FROM sys_music_score ses
+		<include refid="queryPageSqlSimple"/>
+		order by ses.sort_group_, ses.sort_num_, ses.sort_num2_, ses.alias_
+		<include refid="global.limit"/>
+	</select>
+	<select id="findCountSimple" resultType="java.lang.Integer">
+		SELECT COUNT(0) FROM sys_music_score ses
+		<include refid="queryPageSqlSimple"/>
+	</select>
+
+
+	<sql id="queryPageSqlSimple">
+		<where>
+			ses.del_flag_ = 0 AND ses.cbs_music_sheet_id_ IS NOT NULL
+			<if test="categoriesIdList != null">
+				AND ses.cbs_music_categories_id_ IN
+				<foreach collection="categoriesIdList" separator="," item="item" open="(" close=")">
+					#{item}
+				</foreach>
+			</if>
+			<if test="search != null and search != ''">
+				AND (ses.cbs_music_sheet_id_ = #{search} OR ses.name_ LIKE CONCAT('%',#{search},'%'))
+			</if>
+			<if test="clientFlag != null and clientFlag == true">
+				AND ses.client_show_flag_ = true AND ses.show_flag_ = true
+			</if>
+			<if test="subjectIds != null and subjectIds != ''">
+				AND (INTE_ARRAY(#{subjectIds},ses.subject_ids_) OR ses.subject_ids_ IS NULL OR ses.subject_ids_ = '' OR ses.is_all_subject_)
+			</if>
+			<if test="clientType != null">
+				AND ses.client_type_ = #{clientType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
+			</if>
+			<if test="type != null and type == 'COMMON'">
+				AND ses.type_ = #{type}
+			</if>
+		</where>
+	</sql>
 </mapper>

+ 1 - 1
pom.xml

@@ -26,7 +26,7 @@
 		<docker.registry.repository>127.0.0.1:5000</docker.registry.repository>
 		<docker.maven.plugin.version>1.2.2</docker.maven.plugin.version>
 		<com.microsvc.toolkit.version>1.0.8-RC1</com.microsvc.toolkit.version>
-		<cbs.version>1.0.23</cbs.version>
+		<cbs.version>1.0.26</cbs.version>
 	</properties>
 
 	<dependencyManagement>