Browse Source

机构专辑加课件

刘俊驰 1 year ago
parent
commit
46f748f3d4
26 changed files with 785 additions and 259 deletions
  1. 56 4
      cooleshow-app/src/main/java/com/yonge/cooleshow/admin/controller/SubjectController.java
  2. 91 68
      cooleshow-app/src/main/java/com/yonge/cooleshow/admin/controller/TenantAlbumController.java
  3. 87 0
      cooleshow-app/src/main/java/com/yonge/cooleshow/admin/controller/TenantAlbumSheetController.java
  4. 48 4
      cooleshow-app/src/main/java/com/yonge/cooleshow/student/controller/TenantAlbumSheetController.java
  5. 46 4
      cooleshow-app/src/main/java/com/yonge/cooleshow/teacher/controller/TenantAlbumSheetController.java
  6. 47 4
      cooleshow-app/src/main/java/com/yonge/cooleshow/tenant/controller/TenantAlbumSheetController.java
  7. 19 0
      cooleshow-user/user-biz/pom.xml
  8. 2 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/MusicTagDao.java
  9. 4 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/SubjectDao.java
  10. 27 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/PageUtil.java
  11. 9 96
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/Subject.java
  12. 2 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/SubjectTypeEnum.java
  13. 4 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/MusicTagService.java
  14. 2 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/SubjectService.java
  15. 6 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/TenantAlbumMusicService.java
  16. 9 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/MusicTagServiceImpl.java
  17. 14 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/SubjectServiceImpl.java
  18. 154 70
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TenantAlbumMusicServiceImpl.java
  19. 15 5
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TenantGroupAlbumServiceImpl.java
  20. 107 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/wrapper/LessonCoursewareWrapper.java
  21. 6 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/wrapper/TenantAlbumMusicWrapper.java
  22. 3 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/wrapper/TenantGroupAlbumWrapper.java
  23. 6 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/MusicTagMapper.xml
  24. 14 2
      cooleshow-user/user-biz/src/main/resources/config/mybatis/SubjectMapper.xml
  25. 3 1
      toolset/toolset-base/src/main/java/com/yonge/toolset/base/page/PageInfo.java
  26. 4 0
      toolset/toolset-mybatis/pom.xml

+ 56 - 4
cooleshow-app/src/main/java/com/yonge/cooleshow/admin/controller/SubjectController.java

@@ -1,5 +1,9 @@
 package com.yonge.cooleshow.admin.controller;
 
+import com.dayaedu.cbs.openfeign.client.MusicFeignClientService;
+import com.dayaedu.cbs.openfeign.wrapper.music.CbsSubjectWrapper;
+import com.microsvc.toolkit.common.webportal.exception.BizException;
+import com.yonge.cooleshow.biz.dal.dto.PageUtil;
 import com.yonge.cooleshow.biz.dal.entity.Subject;
 import com.yonge.cooleshow.biz.dal.queryInfo.SubjectQueryInfo;
 import com.yonge.cooleshow.biz.dal.service.SubjectService;
@@ -9,6 +13,8 @@ import com.yonge.toolset.base.page.PageInfo;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.collections.CollectionUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.GetMapping;
@@ -18,17 +24,22 @@ import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import java.util.List;
 import java.util.Map;
 import java.util.stream.Collectors;
 
 @RequestMapping("${app-config.url.admin:}/subject")
 @Api(tags = "声部服务")
 @RestController
+@Slf4j
 public class SubjectController extends BaseController {
 
 	@Autowired
 	private SubjectService subjectService;
 
+    @Autowired
+    private MusicFeignClientService musicFeignClientService;
+
 	@ApiOperation(value = "根据声部编号查询声部")
 	@GetMapping("/get/{id}")
 	@PreAuthorize("@pcs.hasPermissions('subject/get')")
@@ -41,22 +52,44 @@ public class SubjectController extends BaseController {
 	@PreAuthorize("@pcs.hasPermissions('subject/queryPage')")
 	public HttpResponseResult<PageInfo<Subject>> queryPage(SubjectQueryInfo queryInfo) {
 		PageInfo<Subject> pageInfo = subjectService.queryPage(queryInfo);
-		
-		if(pageInfo.getRows().size() == 0){
+
+        List<Subject> records = pageInfo.getRows();
+        if(records.isEmpty()){
 			return succeed(pageInfo);
 		}
 
-		Map<Long, Subject> map = subjectService.findBySubjectByIdList(pageInfo.getRows().stream().map(t -> t.getParentSubjectId()).collect(Collectors.toList())).stream()
+		Map<Long, Subject> map = subjectService.findBySubjectByIdList(records.stream().map(Subject::getParentSubjectId).collect(Collectors.toList())).stream()
 				.collect(Collectors.toMap(Subject::getId, t -> t));
 
-		pageInfo.getRows().forEach(row -> {
+		records.forEach(row -> {
 			if(row.getParentSubjectId() != null && row.getParentSubjectId() > 0) {
 				row.setParentSubjectName(map.get(row.getParentSubjectId()).getName());
 			}
 		});
+
+        setCbsSubjectName(records);
 		return succeed(pageInfo);
 	}
 
+
+    private void setCbsSubjectName(List<Subject> records) {
+        // cbs声部ID集合
+        List<Long> cbsSubjectIds = records.stream().map(Subject::getCbsSubjectId).collect(Collectors.toList());
+        CbsSubjectWrapper.SubjectQuery subjectQuery = new CbsSubjectWrapper.SubjectQuery();
+        subjectQuery.setIds(cbsSubjectIds);
+        subjectQuery.setPage(1);
+        subjectQuery.setRows(-1);
+        try {
+            List<CbsSubjectWrapper.Subject> rows = musicFeignClientService.subjectPage(subjectQuery).feignData().getRows();
+            if (CollectionUtils.isNotEmpty(rows)) {
+                Map<Long, String> cbsSubjectMap = rows.stream().collect(Collectors.toMap(CbsSubjectWrapper.Subject::getId, CbsSubjectWrapper.Subject::getName));
+                records.stream().forEach(e -> e.setCbsSubjectName(cbsSubjectMap.get(e.getCbsSubjectId())));
+            }
+        } catch (Exception e) {
+            log.error("调用音乐服务查询曲目详情失败", e);
+        }
+    }
+
 	@ApiOperation(value = "分页查询声部树状列表")
 	@GetMapping("/queryPageTree")
 	@PreAuthorize("@pcs.hasPermissions('subject/queryPageTree')")
@@ -79,4 +112,23 @@ public class SubjectController extends BaseController {
 		subjectService.deleteById(id);
 		return succeed();
 	}*/
+
+
+    /**
+     * 声部分页
+     */
+    @ApiOperation(value = "内容平台对应的声部数据")
+    @PostMapping("/cbsSubject/list")
+    public HttpResponseResult<PageInfo<CbsSubjectWrapper.Subject>> subjectPage(){
+        CbsSubjectWrapper.SubjectQuery subjectQuery = new CbsSubjectWrapper.SubjectQuery();
+        subjectQuery.setPage(1);
+        subjectQuery.setRows(-1);
+
+        try {
+            return succeed(PageUtil.pageInfo(musicFeignClientService.subjectPage(subjectQuery).feignData()));
+        } catch (Exception e) {
+            log.error("内容平台对应的声部数据查询失败", e);
+            throw BizException.from("内容平台服务异常");
+        }
+    }
 }

+ 91 - 68
cooleshow-app/src/main/java/com/yonge/cooleshow/admin/controller/TenantAlbumController.java

@@ -2,23 +2,15 @@ package com.yonge.cooleshow.admin.controller;
 
 import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.dayaedu.cbs.common.enums.school.ECourseType;
+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.yonge.cooleshow.admin.io.request.TenantAlbumVo;
 import com.yonge.cooleshow.biz.dal.dto.search.StudentMusicSheetSearch;
-import com.yonge.cooleshow.biz.dal.entity.MusicSheet;
-import com.yonge.cooleshow.biz.dal.entity.Subject;
-import com.yonge.cooleshow.biz.dal.entity.TenantAlbum;
-import com.yonge.cooleshow.biz.dal.entity.TenantAlbumMusic;
-import com.yonge.cooleshow.biz.dal.entity.TenantAlbumRef;
-import com.yonge.cooleshow.biz.dal.entity.TenantInfo;
+import com.yonge.cooleshow.biz.dal.entity.*;
 import com.yonge.cooleshow.biz.dal.enums.SubjectTypeEnum;
-import com.yonge.cooleshow.biz.dal.service.MusicSheetService;
-import com.yonge.cooleshow.biz.dal.service.MusicTagService;
-import com.yonge.cooleshow.biz.dal.service.SubjectService;
-import com.yonge.cooleshow.biz.dal.service.TenantAlbumMusicService;
-import com.yonge.cooleshow.biz.dal.service.TenantAlbumRefService;
-import com.yonge.cooleshow.biz.dal.service.TenantAlbumService;
-import com.yonge.cooleshow.biz.dal.service.TenantInfoService;
+import com.yonge.cooleshow.biz.dal.service.*;
 import com.yonge.cooleshow.biz.dal.vo.MusicSheetVo;
 import com.yonge.cooleshow.biz.dal.wrapper.TenantAlbumWrapper;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
@@ -33,18 +25,9 @@ import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.RestController;
-
-import java.util.ArrayList;
-import java.util.Comparator;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.*;
 import java.util.function.Function;
 import java.util.stream.Collectors;
 
@@ -79,6 +62,9 @@ public class TenantAlbumController {
     @Autowired
     private MusicTagService musicTagService;
 
+    @Autowired
+    private CoursewareFeignService coursewareFeignService;
+
     /**
      * 查询分页
      *
@@ -128,16 +114,34 @@ public class TenantAlbumController {
                 tenantAlbumMusics.stream().collect(Collectors.groupingBy(TenantAlbumMusic::getSubjectType));
 
 
-        List<Long> musicSheetIdlist = tenantAlbumMusics.stream().map(next -> next.getMusicSheetId()).distinct().collect(Collectors.toList());
-
+        List<Long> musicSheetIdlist = tenantAlbumMusics.stream()
+            .filter(o ->o.getSubjectType() !=SubjectTypeEnum.COURSEWARE)
+            .map(TenantAlbumMusic::getMusicSheetId).distinct()
+            .collect(Collectors.toList());
+        // 过滤出课件
+        List<Long> coursewareList = tenantAlbumMusics.stream()
+                .filter(o -> o.getSubjectType() == SubjectTypeEnum.COURSEWARE)
+                .map(TenantAlbumMusic::getMusicSheetId).distinct().collect(Collectors.toList());
+        Map<Long,CbsLessonCoursewareWrapper.Entity> coursewareDtoMap = new HashMap<>();
+
+        if (CollectionUtils.isNotEmpty(coursewareList)) {
+            List<CbsLessonCoursewareWrapper.Entity> entities = coursewareFeignService
+                .lessonCoursewareLambdaQuery(CbsLessonCoursewareWrapper.LambdaQuery.builder().ids(coursewareList).build()).feignData();
+            coursewareDtoMap.putAll(entities.stream().collect(Collectors.toMap(CbsLessonCoursewareWrapper.Entity::getId, Function.identity())));
+        }
 
-        StudentMusicSheetSearch search = new StudentMusicSheetSearch();
-        search.setMusicSheetIdlist(musicSheetIdlist);
-        search.setPage(1);
-        search.setRows(9999);
-        IPage<MusicSheetVo> records = musicSheetService.selectStudentPage(PageUtil.getPage(search), search, null);
-        Map<Long, MusicSheetVo> idMsMap = records.getRecords().stream()
-                .collect(Collectors.toMap(MusicSheet::getId, Function.identity()));
+        Map<Long, MusicSheetVo> idMsMap = new HashMap<>();
+        Map<Integer,Subject> subjectMap = subjectService.getAllMap();
+        Map<Long, MusicTag> musicTagMap = musicTagService.getAllMap();
+        if (CollectionUtils.isNotEmpty(musicSheetIdlist)) {
+            StudentMusicSheetSearch search = new StudentMusicSheetSearch();
+            search.setMusicSheetIdlist(musicSheetIdlist);
+            search.setPage(1);
+            search.setRows(9999);
+            IPage<MusicSheetVo> records = musicSheetService.selectStudentPage(PageUtil.getPage(search), search, null);
+            idMsMap.putAll(records.getRecords().stream()
+                .collect(Collectors.toMap(MusicSheet::getId, Function.identity())));
+        }
         List<TenantAlbumWrapper.MusicSheetData> musicSheetData = vo.getMusicSheetData();
         groupByType.forEach((key, value) -> {
             value.sort(Comparator.comparing(TenantAlbumMusic::getSortNumber));
@@ -148,39 +152,55 @@ public class TenantAlbumController {
                 TenantAlbumWrapper.TenantAlbumSheet tenantAlbumSheet = new TenantAlbumWrapper.TenantAlbumSheet();
                 BeanUtils.copyProperties(next, tenantAlbumSheet);
                 Long musicSheetId = tenantAlbumSheet.getMusicSheetId();
-                MusicSheetVo musicSheet = idMsMap.getOrDefault(musicSheetId, new MusicSheetVo());
-                tenantAlbumSheet.setMusicSheetName(musicSheet.getMusicSheetName());
-                tenantAlbumSheet.setMusicTag(musicSheet.getMusicTag());
-                tenantAlbumSheet.setComposer(musicSheet.getComposer());
-                tenantAlbumSheet.setMusicSubject(musicSheet.getMusicSubject());
-                return tenantAlbumSheet;
-            }).collect(Collectors.toList());
-            tenantAlbumSheets.stream().forEach(t->{
-                String musicSubject = t.getMusicSubject();
-
-                if (StringUtils.isNotBlank(musicSubject)){
-                    //设置对应声部名称
-                    List<Subject> subject = subjectService.findBySubjectByIdList(musicSubject);
-                    if (CollectionUtils.isNotEmpty(subject)) {
-                        t.setMusicSubjectName(subject.get(0).getName());
-                    }
-                }
-
+                switch (key) {
+                    case COURSEWARE:
+                        CbsLessonCoursewareWrapper.Entity entity = coursewareDtoMap.get(musicSheetId);
+                        if (entity != null) {
+                            tenantAlbumSheet.setMusicSheetName(entity.getName());
+                            tenantAlbumSheet.setTitleImg(entity.getCoverImg());
+                            tenantAlbumSheet.setMusicSubjectName(ECourseType.valueOf(entity.getCourseTypeCode()).getName());
+                        }
+                        break;
+                    case MUSIC:
+                    case SUBJECT:
+                    case ENSEMBLE:
+                    {
+                        MusicSheetVo musicSheet = idMsMap.getOrDefault(musicSheetId, new MusicSheetVo());
+                        tenantAlbumSheet.setMusicSheetName(musicSheet.getMusicSheetName());
+                        tenantAlbumSheet.setMusicTag(musicSheet.getMusicTag());
+                        tenantAlbumSheet.setComposer(musicSheet.getComposer());
+                        tenantAlbumSheet.setMusicSubject(musicSheet.getMusicSubject());
+
+                        //设置对应标签名称
+                        String musicTag = tenantAlbumSheet.getMusicTag();
+                        if (StringUtils.isNotBlank(musicTag)){
+                            String[] split = musicTag.split(",");
+                            List<String> tagNames = Arrays.stream(split).map(Long::parseLong).map(musicTagMap::get)
+                                .filter(Objects::nonNull).map(MusicTag::getName).collect(Collectors.toList());
+                            tenantAlbumSheet.setMusicTagName(String.join(",", tagNames));
+                        }
+                        if (StringUtils.isNotBlank(tenantAlbumSheet.getMusicSubject())){
+                            //设置对应声部名称
+                            String subjectName = Arrays.stream(tenantAlbumSheet.getMusicSubject().split(","))
+                                .map(Integer::parseInt).map(o -> {
+
+                                Subject subject = subjectMap.get(o);
+                                if (subject != null) {
+                                    return subject.getName();
+                                }
+                                return null;
+                            }).filter(Objects::nonNull).collect(Collectors.joining(","));
+                            tenantAlbumSheet.setMusicSubjectName(subjectName);
+                        }
 
-                //设置对应标签名称
-                String musicTag = t.getMusicTag();
-                if (StringUtils.isNotBlank(musicTag)){
-                    String[] split = musicTag.split(",");
-                    for (String s : split) {
-                        List<Long> list = new ArrayList<>();
-                        list.add(Long.parseLong(s));
-                        String tagName = musicTagService.getMusicTagNames(list);
-                        t.setMusicTagName(tagName);
                     }
+                    break;
+                    default:
+                        break;
                 }
 
-            });
-
+                return tenantAlbumSheet;
+            }).collect(Collectors.toList());
 
             sheetData.setTenantAlbumSheetList(tenantAlbumSheets);
             musicSheetData.add(sheetData);
@@ -201,7 +221,10 @@ public class TenantAlbumController {
 
         // 检查曲目重复
         if (CollectionUtils.isNotEmpty(album.getMusicSheetData())) {
-            List<Long> musicIds = album.getMusicSheetData().stream().flatMap(o -> o.getMusicSheetList().stream().map(m -> m.getId())).collect(Collectors.toList());
+            List<Long> musicIds = album.getMusicSheetData().stream()
+                .filter(o ->o.getSubjectType() !=SubjectTypeEnum.COURSEWARE)
+                .flatMap(o -> o.getMusicSheetList().stream().map(TenantAlbumVo.MusicObject::getId))
+                .collect(Collectors.toList());
             Set<Long> musicSet = new HashSet<>(musicIds);
             if (musicSet.size() < musicIds.size()) {
                 throw new BizException("不能添加相同的曲目");
@@ -212,7 +235,6 @@ public class TenantAlbumController {
         List<TenantAlbumVo.MusicSheetData> musicSheetData = album.getMusicSheetData();
 
         List<TenantAlbumWrapper.MusicSheetData> musicSheetDataList = musicSheetData.stream().map(next ->{
-                    //TenantAlbumWrapper.MusicSheetData sheetData =new TenantAlbumWrapper.MusicSheetData();
                     TenantAlbumWrapper.MusicSheetData sheetData =new TenantAlbumWrapper.MusicSheetData();
 
                     List<TenantAlbumVo.MusicObject> musicSheetList = next.getMusicSheetList();
@@ -238,8 +260,10 @@ public class TenantAlbumController {
 
         // 检查曲目重复
         if (CollectionUtils.isNotEmpty(album.getMusicSheetData())) {
-            List<Long> musicIds = album.getMusicSheetData().stream().flatMap(o -> o.getMusicSheetList()
-                    .stream().map(TenantAlbumVo.MusicObject::getId)).collect(Collectors.toList());
+            List<Long> musicIds = album.getMusicSheetData().stream()
+                .filter(o -> o.getSubjectType() != SubjectTypeEnum.COURSEWARE)
+                .flatMap(o -> o.getMusicSheetList().stream().map(TenantAlbumVo.MusicObject::getId))
+                .collect(Collectors.toList());
             Set<Long> musicSet = new HashSet<>(musicIds);
             if (musicSet.size() < musicIds.size()) {
                 throw new BizException("不能添加相同的曲目");
@@ -250,7 +274,6 @@ public class TenantAlbumController {
         List<TenantAlbumVo.MusicSheetData> musicSheetData = album.getMusicSheetData();
 
         List<TenantAlbumWrapper.MusicSheetData> musicSheetDataList = musicSheetData.stream().map(next ->{
-            //TenantAlbumWrapper.MusicSheetData sheetData =new TenantAlbumWrapper.MusicSheetData();
             TenantAlbumWrapper.MusicSheetData sheetData =new TenantAlbumWrapper.MusicSheetData();
 
             List<TenantAlbumVo.MusicObject> musicSheetList = next.getMusicSheetList();

+ 87 - 0
cooleshow-app/src/main/java/com/yonge/cooleshow/admin/controller/TenantAlbumSheetController.java

@@ -0,0 +1,87 @@
+package com.yonge.cooleshow.admin.controller;
+
+import com.alibaba.fastjson.JSONObject;
+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.yonge.cooleshow.auth.api.client.SysUserFeignService;
+import com.yonge.cooleshow.auth.api.entity.SysUser;
+import com.yonge.cooleshow.biz.dal.dto.PageUtil;
+import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
+import com.yonge.cooleshow.biz.dal.service.TenantAlbumMusicService;
+import com.yonge.cooleshow.biz.dal.wrapper.LessonCoursewareWrapper;
+import com.yonge.cooleshow.common.controller.BaseController;
+import com.yonge.cooleshow.common.entity.HttpResponseResult;
+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.springframework.web.bind.annotation.*;
+
+import javax.validation.Valid;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 专辑表 web 控制层
+ * @author yzp
+ * @date 2022-03-26 00:21:46
+ * @version v1.0
+ **/
+@RestController
+@RequestMapping("${app-config.url.admin:}/tenantAlbumMusic")
+@Api(tags = "机构专辑曲目 API接口")
+public class TenantAlbumSheetController extends BaseController {
+
+    @Autowired
+    private CoursewareFeignService coursewareFeignService;
+
+    @Autowired
+    private TenantAlbumMusicService tenantAlbumMusicService;
+
+    @Autowired
+    private SysUserFeignService sysUserFeignService;
+
+
+    @ApiOperation(value = "获取内容平台课件教材")
+    @PostMapping("/queryPage")
+    @PreAuthorize("@pcs.hasPermissions('lessonCourseware/queryPage')")
+    public HttpResponseResult<PageInfo<CbsLessonCoursewareWrapper.LessonCourseware>> queryPage(@RequestBody CbsLessonCoursewareWrapper.LessonCoursewareQuery query) throws Exception {
+//        query.setEnableFlag(true);
+        return succeed(PageUtil.pageInfo(coursewareFeignService.lessonCoursewarePage(query).feignData()));
+    }
+
+    @ApiOperation(value = "获取课件详情")
+    @PostMapping("/getLessonCoursewareDetail")
+    public HttpResponseResult<LessonCoursewareWrapper.LessonCoursewareDto> getLessonCoursewareDetail(@RequestBody @Valid LessonCoursewareWrapper.LessonCourseQuery query){
+        query.setClient(ClientEnum.SYSTEM);
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null || null == sysUser.getId()) {
+            return failed("用户信息获取失败");
+        }
+        query.setUserId(sysUser.getId());
+        LessonCoursewareWrapper.LessonCoursewareDto lessonCoursewareDto= tenantAlbumMusicService.getLessonCoursewareDetail(query);
+        return succeed(lessonCoursewareDto);
+    }
+
+    @ApiOperation(value = "获取课件关联的课程列表")
+    @GetMapping("/getLessonCoursewareCourseList/{id}")
+    public HttpResponseResult<List<LessonCoursewareWrapper.CourseScheduleCoursewareDetail>> getLessonCoursewareCourseList(@PathVariable("id") Long id){
+        List<CbsLessonCoursewareWrapper.CourseScheduleCoursewareDetail> courseScheduleCoursewareDetails = coursewareFeignService.coursewareDetail(id).feignData();
+        if (CollectionUtils.isNotEmpty(courseScheduleCoursewareDetails)) {
+            String jsonString = JSONObject.toJSONString(courseScheduleCoursewareDetails);
+            List<LessonCoursewareWrapper.CourseScheduleCoursewareDetail> courseScheduleCoursewareDetailList = JSONObject.parseArray(jsonString, LessonCoursewareWrapper.CourseScheduleCoursewareDetail.class);
+            return succeed(courseScheduleCoursewareDetailList);
+        }
+        return succeed(new ArrayList<>());
+    }
+
+    @ApiOperation(value = "获取课程详情")
+    @GetMapping("/getLessonCourseDetail/{id}")
+    public HttpResponseResult<CbsLessonCoursewareDetailWrapper.LessonCoursewareDetail> getLessonCourseDetail(@PathVariable("id") String id){
+        return succeed(coursewareFeignService.lessonCoursewareDetailDetail(Long.parseLong(id)).feignData());
+    }
+
+}

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

@@ -1,7 +1,11 @@
 package com.yonge.cooleshow.student.controller;
 
 import com.alibaba.cloud.commons.lang.StringUtils;
+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;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
@@ -9,6 +13,7 @@ import com.yonge.cooleshow.biz.dal.entity.Student;
 import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
 import com.yonge.cooleshow.biz.dal.service.StudentService;
 import com.yonge.cooleshow.biz.dal.service.TenantAlbumMusicService;
+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;
@@ -18,14 +23,15 @@ 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.springframework.http.HttpStatus;
 import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
+import javax.validation.Valid;
+import java.util.ArrayList;
+import java.util.List;
 import java.util.Optional;
 
 /**
@@ -48,6 +54,9 @@ public class TenantAlbumSheetController extends BaseController {
     @Autowired
     private StudentService studentService;
 
+    @Autowired
+    private CoursewareFeignService coursewareFeignService;
+
     @ApiOperation(value = "查询条件")
     @PostMapping("/selectCondition")
     public HttpResponseResult<TenantAlbumMusicWrapper.TenantAlbumMusicSelectData> selectCondition(@RequestBody TenantAlbumMusicWrapper.TenantAlbumMusicSelect query) {
@@ -90,4 +99,39 @@ public class TenantAlbumSheetController extends BaseController {
         IPage<TenantAlbumMusicWrapper.StudentTenantAlbumMusic> page = tenantAlbumMusicService.selectPage(QueryInfo.getPage(query), query);
         return succeed((PageUtil.pageInfo(page)));
     }
+
+
+    @ApiOperation(value = "获取课件详情")
+    @PostMapping("/getLessonCoursewareDetail")
+    public HttpResponseResult<LessonCoursewareWrapper.LessonCoursewareDto> getLessonCoursewareDetail(@RequestBody @Valid LessonCoursewareWrapper.LessonCourseQuery query){
+        query.setClient(ClientEnum.STUDENT);
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null || null == sysUser.getId()) {
+            return failed("用户信息获取失败");
+        }
+        query.setUserId(sysUser.getId());
+        LessonCoursewareWrapper.LessonCoursewareDto lessonCoursewareDto= tenantAlbumMusicService.getLessonCoursewareDetail(query);
+        return succeed(lessonCoursewareDto);
+    }
+
+
+    @ApiOperation(value = "获取课件关联的课程列表")
+    @GetMapping("/getLessonCoursewareCourseList/{id}")
+    public HttpResponseResult<List<LessonCoursewareWrapper.CourseScheduleCoursewareDetail>> getLessonCoursewareCourseList(@PathVariable("id") Long id){
+        List<CbsLessonCoursewareWrapper.CourseScheduleCoursewareDetail> courseScheduleCoursewareDetails = coursewareFeignService.coursewareDetail(id).feignData();
+        if (CollectionUtils.isNotEmpty(courseScheduleCoursewareDetails)) {
+            String jsonString = JSONObject.toJSONString(courseScheduleCoursewareDetails);
+            List<LessonCoursewareWrapper.CourseScheduleCoursewareDetail> courseScheduleCoursewareDetailList = JSONObject
+                .parseArray(jsonString, LessonCoursewareWrapper.CourseScheduleCoursewareDetail.class);
+            return succeed(courseScheduleCoursewareDetailList);
+        }
+        return succeed(new ArrayList<>());
+    }
+
+    @ApiOperation(value = "获取课程详情")
+    @GetMapping("/getLessonCourseDetail/{id}")
+    public HttpResponseResult<CbsLessonCoursewareDetailWrapper.LessonCoursewareDetail> getLessonCourseDetail(@PathVariable("id") String id){
+        return succeed(coursewareFeignService.lessonCoursewareDetailDetail(Long.parseLong(id)).feignData());
+    }
+
 }

+ 46 - 4
cooleshow-app/src/main/java/com/yonge/cooleshow/teacher/controller/TenantAlbumSheetController.java

@@ -1,6 +1,10 @@
 package com.yonge.cooleshow.teacher.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;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
@@ -8,6 +12,7 @@ import com.yonge.cooleshow.biz.dal.entity.Teacher;
 import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
 import com.yonge.cooleshow.biz.dal.service.TeacherService;
 import com.yonge.cooleshow.biz.dal.service.TenantAlbumMusicService;
+import com.yonge.cooleshow.biz.dal.wrapper.LessonCoursewareWrapper;
 import com.yonge.cooleshow.biz.dal.wrapper.TenantAlbumMusicWrapper;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
@@ -15,14 +20,15 @@ import com.yonge.toolset.base.page.PageInfo;
 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.springframework.http.HttpStatus;
 import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
+import javax.validation.Valid;
+import java.util.ArrayList;
+import java.util.List;
 import java.util.Optional;
 
 /**
@@ -46,6 +52,9 @@ public class TenantAlbumSheetController extends BaseController {
     @Autowired
     private TeacherService teacherService;
 
+    @Autowired
+    private CoursewareFeignService coursewareFeignService;
+
 
     @ApiOperation(value = "分页查询")
     @PostMapping("/page")
@@ -63,4 +72,37 @@ public class TenantAlbumSheetController extends BaseController {
     }
 
 
+    @ApiOperation(value = "获取课件详情")
+    @PostMapping("/getLessonCoursewareDetail")
+    public HttpResponseResult<LessonCoursewareWrapper.LessonCoursewareDto> getLessonCoursewareDetail(@RequestBody @Valid LessonCoursewareWrapper.LessonCourseQuery query){
+        query.setClient(ClientEnum.TEACHER);
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null || null == sysUser.getId()) {
+            return failed("用户信息获取失败");
+        }
+        query.setUserId(sysUser.getId());
+        LessonCoursewareWrapper.LessonCoursewareDto lessonCoursewareDto= tenantAlbumMusicService.getLessonCoursewareDetail(query);
+        return succeed(lessonCoursewareDto);
+    }
+
+
+    @ApiOperation(value = "获取课件关联的课程列表")
+    @GetMapping("/getLessonCoursewareCourseList/{id}")
+    public HttpResponseResult<List<LessonCoursewareWrapper.CourseScheduleCoursewareDetail>> getLessonCoursewareCourseList(@PathVariable("id") Long id){
+        List<CbsLessonCoursewareWrapper.CourseScheduleCoursewareDetail> courseScheduleCoursewareDetails = coursewareFeignService.coursewareDetail(id).feignData();
+        if (CollectionUtils.isNotEmpty(courseScheduleCoursewareDetails)) {
+            String jsonString = JSONObject.toJSONString(courseScheduleCoursewareDetails);
+            List<LessonCoursewareWrapper.CourseScheduleCoursewareDetail> courseScheduleCoursewareDetailList = JSONObject
+                .parseArray(jsonString, LessonCoursewareWrapper.CourseScheduleCoursewareDetail.class);
+            return succeed(courseScheduleCoursewareDetailList);
+        }
+        return succeed(new ArrayList<>());
+    }
+
+    @ApiOperation(value = "获取课程详情")
+    @GetMapping("/getLessonCourseDetail/{id}")
+    public HttpResponseResult<CbsLessonCoursewareDetailWrapper.LessonCoursewareDetail> getLessonCourseDetail(@PathVariable("id") String id){
+        return succeed(coursewareFeignService.lessonCoursewareDetailDetail(Long.parseLong(id)).feignData());
+    }
+
 }

+ 47 - 4
cooleshow-app/src/main/java/com/yonge/cooleshow/tenant/controller/TenantAlbumSheetController.java

@@ -1,11 +1,16 @@
 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;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
 import com.yonge.cooleshow.biz.dal.service.TenantAlbumMusicService;
+import com.yonge.cooleshow.biz.dal.wrapper.LessonCoursewareWrapper;
 import com.yonge.cooleshow.biz.dal.wrapper.TenantAlbumMusicWrapper;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
@@ -13,14 +18,15 @@ import com.yonge.toolset.base.page.PageInfo;
 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.springframework.http.HttpStatus;
 import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
+import javax.validation.Valid;
+import java.util.ArrayList;
+import java.util.List;
 import java.util.Optional;
 
 /**
@@ -40,6 +46,9 @@ public class TenantAlbumSheetController extends BaseController {
     @Autowired
     private SysUserFeignService sysUserFeignService;
 
+    @Autowired
+    private CoursewareFeignService coursewareFeignService;
+
     @ApiOperation(value = "查询条件")
     @PostMapping("/selectCondition")
     public HttpResponseResult<TenantAlbumMusicWrapper.TenantAlbumMusicSelectData> selectCondition(@RequestBody TenantAlbumMusicWrapper.TenantAlbumMusicSelect query) {
@@ -71,4 +80,38 @@ public class TenantAlbumSheetController extends BaseController {
     }
 
 
+    @ApiOperation(value = "获取课件详情")
+    @PostMapping("/getLessonCoursewareDetail")
+    public HttpResponseResult<LessonCoursewareWrapper.LessonCoursewareDto> getLessonCoursewareDetail(@RequestBody @Valid LessonCoursewareWrapper.LessonCourseQuery query){
+        query.setClient(ClientEnum.TENANT);
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null || null == sysUser.getId()) {
+            return failed("用户信息获取失败");
+        }
+        query.setUserId(sysUser.getId());
+        LessonCoursewareWrapper.LessonCoursewareDto lessonCoursewareDto= tenantAlbumMusicService.getLessonCoursewareDetail(query);
+        return succeed(lessonCoursewareDto);
+    }
+
+
+    @ApiOperation(value = "获取课件关联的课程列表")
+    @GetMapping("/getLessonCoursewareCourseList/{id}")
+    public HttpResponseResult<List<LessonCoursewareWrapper.CourseScheduleCoursewareDetail>> getLessonCoursewareCourseList(@PathVariable("id") Long id){
+        List<CbsLessonCoursewareWrapper.CourseScheduleCoursewareDetail> courseScheduleCoursewareDetails = coursewareFeignService.coursewareDetail(id).feignData();
+        if (CollectionUtils.isNotEmpty(courseScheduleCoursewareDetails)) {
+            String jsonString = JSONObject.toJSONString(courseScheduleCoursewareDetails);
+            List<LessonCoursewareWrapper.CourseScheduleCoursewareDetail> courseScheduleCoursewareDetailList = JSONObject
+                .parseArray(jsonString, LessonCoursewareWrapper.CourseScheduleCoursewareDetail.class);
+            return succeed(courseScheduleCoursewareDetailList);
+        }
+        return succeed(new ArrayList<>());
+    }
+
+    @ApiOperation(value = "获取课程详情")
+    @GetMapping("/getLessonCourseDetail/{id}")
+    public HttpResponseResult<CbsLessonCoursewareDetailWrapper.LessonCoursewareDetail> getLessonCourseDetail(@PathVariable("id") String id){
+        return succeed(coursewareFeignService.lessonCoursewareDetailDetail(Long.parseLong(id)).feignData());
+    }
+
+
 }

+ 19 - 0
cooleshow-user/user-biz/pom.xml

@@ -140,6 +140,25 @@
             <groupId>org.jetbrains.kotlin</groupId>
             <artifactId>kotlin-stdlib</artifactId>
         </dependency>
+        <dependency>
+            <groupId>com.dayaedu.cbs.openfeign</groupId>
+            <artifactId>dayaedu-openfeign-client</artifactId>
+            <version>1.0.0</version>
+            <exclusions>
+                <exclusion>
+                    <groupId>com.alibaba.cloud</groupId>
+                    <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
+                </exclusion>
+                <exclusion>
+                    <groupId>org.springframework.cloud</groupId>
+                    <artifactId>spring-cloud-loadbalancer</artifactId>
+                </exclusion>
+                <exclusion>
+                    <groupId>org.springframework.cloud</groupId>
+                    <artifactId>spring-cloud-starter-openfeign</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
     </dependencies>
 
     <build>

+ 2 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/MusicTagDao.java

@@ -55,4 +55,6 @@ public interface MusicTagDao extends BaseMapper<MusicTag> {
 	 * @return
 	 */
     Integer checkTagBeUsedMusicAlbum(@Param("longs") List<Long> longs);
+
+    List<MusicTag> getAll();
 }

+ 4 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/SubjectDao.java

@@ -61,4 +61,8 @@ public interface SubjectDao extends BaseDAO<Long, Subject> {
      * @return Subject
      */
     Subject getSubjectMatchByName(@Param("name") String subjectName);
+
+    List<Subject> getAll();
+
+    void updateCbsSubjectIdNull(@Param("subjectId") Long subjectId);
 }

+ 27 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/PageUtil.java

@@ -0,0 +1,27 @@
+package com.yonge.cooleshow.biz.dal.dto;
+
+
+import com.yonge.toolset.base.page.PageInfo;
+
+import java.util.Objects;
+
+/**
+ * @author hgw
+ * Created by 2021-12-03
+ */
+public class PageUtil {
+
+    public static <T> PageInfo<T> pageInfo(com.microsvc.toolkit.common.response.paging.PageInfo<T> source) {
+        if (Objects.isNull(source)) {
+            return new PageInfo<>(1, 20);
+        }
+        int total = Integer.parseInt(String.valueOf(source.getTotal()));
+        int limit = Integer.parseInt(String.valueOf(source.getLimit()));
+        PageInfo<T> resultPage = new PageInfo<>();
+        resultPage.setRows(source.getRows());
+        resultPage.setPageNo(Long.valueOf(source.getCurrent()).intValue());
+        resultPage.setLimit(limit);
+        resultPage.setTotal(total);
+        return resultPage;
+    }
+}

+ 9 - 96
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/Subject.java

@@ -5,11 +5,13 @@ import io.swagger.annotations.ApiModelProperty;
 import java.io.Serializable;
 import java.util.List;
 
+import lombok.Data;
 import org.apache.commons.lang3.builder.ToStringBuilder;
 
 /**
  * 对应数据库表(subject):
  */
+@Data
 public class Subject implements Serializable {
 
 	/**  */
@@ -42,7 +44,13 @@ public class Subject implements Serializable {
 	private java.util.Date updateTime;
 	
 	private String desc;
-	
+
+    @ApiModelProperty(value = "cbs声部id")
+    private Long cbsSubjectId;
+
+    @ApiModelProperty(value = "cbs声部名称")
+    private String cbsSubjectName;
+
 	/**  */
 	@ApiModelProperty(value = "是否删除1是,0否",required = false)
 	private Boolean delFlag= false;
@@ -51,99 +59,4 @@ public class Subject implements Serializable {
 	@ApiModelProperty(value = "子节点列表",required = false)
 	private List<Subject> subjects;
 
-	public Integer getAiDefaultFrequency() {
-		return aiDefaultFrequency;
-	}
-
-	public void setAiDefaultFrequency(Integer aiDefaultFrequency) {
-		this.aiDefaultFrequency = aiDefaultFrequency;
-	}
-
-	public List<Subject> getSubjects() {
-		return subjects;
-	}
-
-	public void setSubjects(List<Subject> subjects) {
-		this.subjects = subjects;
-	}
-
-	public void setId(Long id){
-		this.id = id;
-	}
-	
-	public Long getId(){
-		return this.id;
-	}
-			
-	public void setName(String name){
-		this.name = name;
-	}
-	
-	public String getName(){
-		return this.name;
-	}
-			
-	public void setCode(String code){
-		this.code = code;
-	}
-	
-	public String getCode(){
-		return this.code;
-	}
-			
-	public void setParentSubjectId(Long parentSubjectId){
-		this.parentSubjectId = parentSubjectId;
-	}
-	
-	public Long getParentSubjectId(){
-		return this.parentSubjectId;
-	}
-			
-	public String getParentSubjectName() {
-		return parentSubjectName;
-	}
-
-	public void setParentSubjectName(String parentSubjectName) {
-		this.parentSubjectName = parentSubjectName;
-	}
-
-	public void setCreateTime(java.util.Date createTime){
-		this.createTime = createTime;
-	}
-	
-	public java.util.Date getCreateTime(){
-		return this.createTime;
-	}
-			
-	public void setUpdateTime(java.util.Date updateTime){
-		this.updateTime = updateTime;
-	}
-	
-	public java.util.Date getUpdateTime(){
-		return this.updateTime;
-	}
-
-	public Boolean getDelFlag() {
-		return delFlag;
-	}
-
-	public void setDelFlag(Boolean delFlag) {
-		this.delFlag = delFlag;
-	}
-
-	public String getImg() {
-		return img;
-	}
-
-	public void setImg(String img) {
-		this.img = img;
-	}
-
-	public String getDesc() {
-		return desc;
-	}
-
-	public void setDesc(String desc) {
-		this.desc = desc;
-	}
 }

+ 2 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/SubjectTypeEnum.java

@@ -14,7 +14,8 @@ public enum SubjectTypeEnum implements BaseEnum<String, SubjectTypeEnum> {
 
     ENSEMBLE("合奏"),
     MUSIC("小曲目"),
-    SUBJECT("声部");
+    SUBJECT("声部"),
+    COURSEWARE("课件");
 
     @EnumValue
     private String code;

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

@@ -8,6 +8,7 @@ import com.yonge.cooleshow.biz.dal.entity.MusicTag;
 import com.yonge.cooleshow.biz.dal.vo.MusicTagVo;
 
 import java.util.List;
+import java.util.Map;
 
 /**
  * 音乐标签表 服务类
@@ -83,4 +84,7 @@ public interface MusicTagService extends IService<MusicTag>  {
 	 * @return 标签名字符串
 	 */
     String getMusicTagNames(List<Long> tagIdList);
+
+    Map<Long, MusicTag> getAllMap();
+
 }

+ 2 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/SubjectService.java

@@ -54,4 +54,6 @@ public interface SubjectService extends BaseService<Long, Subject> {
 	List<Subject> subjectSelect(String type, String userExtSubjectIds);
 
     Map<Integer, Subject> getMapByIds(List<String> subjectIds);
+
+    Map<Integer, Subject> getAllMap();
 }

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

@@ -3,6 +3,8 @@ package com.yonge.cooleshow.biz.dal.service;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.yonge.cooleshow.biz.dal.entity.MusicSheet;
+import com.yonge.cooleshow.biz.dal.enums.SubjectTypeEnum;
+import com.yonge.cooleshow.biz.dal.wrapper.LessonCoursewareWrapper;
 import com.yonge.cooleshow.biz.dal.wrapper.TenantAlbumMusicWrapper;
 import com.yonge.cooleshow.biz.dal.entity.TenantAlbumMusic;
 
@@ -48,6 +50,8 @@ public interface TenantAlbumMusicService extends IService<TenantAlbumMusic>  {
      */
     TenantAlbumMusicWrapper.TenantAlbumMusicSelectData getTenantAlbumMusicQuery(TenantAlbumMusicWrapper.TenantAlbumMusicSelect query);
 
+    List<Long> getTenantAlbumMusicIdsByIds(List<Long> tenantAlbumIds, List<SubjectTypeEnum> subjectTypes);
+
     /**
      * 获取机构专辑曲目ID集合
      *
@@ -61,4 +65,6 @@ public interface TenantAlbumMusicService extends IService<TenantAlbumMusic>  {
      * @param tenantId 机构ID
      */
     List<Long> getMusicIdsByTenantIds(Long tenantId);
+
+    LessonCoursewareWrapper.LessonCoursewareDto getLessonCoursewareDetail(LessonCoursewareWrapper.LessonCourseQuery query);
 }

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

@@ -243,5 +243,14 @@ public class MusicTagServiceImpl extends ServiceImpl<MusicTagDao, MusicTag> impl
         return list.stream().map(MusicTag::getName).collect(Collectors.joining(","));
     }
 
+    @Override
+    public Map<Long, MusicTag> getAllMap() {
+        List<MusicTag> all = musicTagDao.getAll();
+        if(CollectionUtils.isEmpty(all)){
+            return new HashMap<>();
+        }
+        return all.stream().collect(Collectors.toMap(MusicTag::getId, o -> o));
+    }
+
 
 }

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

@@ -8,6 +8,7 @@ import org.apache.commons.lang3.StringUtils;
 import org.redisson.api.RedissonClient;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
 
 import com.yonge.cooleshow.biz.dal.dao.SubjectDao;
@@ -70,6 +71,7 @@ public class SubjectServiceImpl extends BaseServiceImpl<Long, Subject> implement
     }
 
     @Override
+    @Transactional
     public void upSetSubject(Subject subject) {
         Subject subjectByCode = subjectDao.queryByCode(subject.getCode());
         if (subjectByCode != null && subjectByCode.getId() != subject.getId()) {
@@ -90,6 +92,9 @@ public class SubjectServiceImpl extends BaseServiceImpl<Long, Subject> implement
         if (subject.getId() != null) {
             subject.setUpdateTime(new Date());
             subjectDao.update(subject);
+            if (subject.getCbsSubjectId() == null) {
+                subjectDao.updateCbsSubjectIdNull(subject.getId());
+            }
         } else {
             subjectDao.insert(subject);
         }
@@ -184,6 +189,15 @@ public class SubjectServiceImpl extends BaseServiceImpl<Long, Subject> implement
         return subjectList.stream().collect(Collectors.toMap(o -> o.getId().intValue(), o -> o));
     }
 
+    @Override
+    public Map<Integer, Subject> getAllMap() {
+        List<Subject> all = subjectDao.getAll();
+        if(CollectionUtils.isEmpty(all)){
+            return new HashMap<>();
+        }
+        return all.stream().collect(Collectors.toMap(o -> o.getId().intValue(), o -> o));
+    }
+
     /***
      * 查询声部树
      * @param: sub

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

@@ -4,23 +4,20 @@ import cn.hutool.core.util.NumberUtil;
 import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.dayaedu.cbs.common.enums.school.ECourseType;
+import com.dayaedu.cbs.openfeign.client.CoursewareFeignService;
+import com.dayaedu.cbs.openfeign.wrapper.courseware.CbsLessonCoursewareWrapper;
+import com.microsvc.toolkit.common.response.paging.PageInfo;
 import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
-import com.yonge.cooleshow.biz.dal.entity.MusicFavorite;
-import com.yonge.cooleshow.biz.dal.entity.MusicSheet;
-import com.yonge.cooleshow.biz.dal.entity.MusicTag;
-import com.yonge.cooleshow.biz.dal.entity.Subject;
-import com.yonge.cooleshow.biz.dal.entity.SysUser;
-import com.yonge.cooleshow.biz.dal.entity.TenantAlbumCategory;
-import com.yonge.cooleshow.biz.dal.entity.TenantAlbumCategoryDetail;
-import com.yonge.cooleshow.biz.dal.entity.TenantAlbumMusic;
+import com.yonge.cooleshow.biz.dal.entity.*;
 import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
 import com.yonge.cooleshow.biz.dal.enums.SubjectTypeEnum;
 import com.yonge.cooleshow.biz.dal.mapper.SysUserMapper;
 import com.yonge.cooleshow.biz.dal.mapper.TenantAlbumMusicMapper;
 import com.yonge.cooleshow.biz.dal.service.*;
+import com.yonge.cooleshow.biz.dal.wrapper.LessonCoursewareWrapper;
 import com.yonge.cooleshow.biz.dal.wrapper.TenantAlbumMusicWrapper;
 import com.yonge.toolset.base.exception.BizException;
-import jodd.util.StringUtil;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
@@ -74,6 +71,9 @@ public class TenantAlbumMusicServiceImpl extends ServiceImpl<TenantAlbumMusicMap
     @Autowired
     private TenantAlbumCategoryDetailService tenantAlbumCategoryDetailService;
 
+    @Autowired
+    private CoursewareFeignService coursewareFeignService;
+
     /**
      * 查询详情
      * @param id 详情ID
@@ -94,66 +94,105 @@ public class TenantAlbumMusicServiceImpl extends ServiceImpl<TenantAlbumMusicMap
     @Override
     public IPage<TenantAlbumMusicWrapper.StudentTenantAlbumMusic> selectPage(IPage<TenantAlbumMusicWrapper.StudentTenantAlbumMusic> page,
                                                                              TenantAlbumMusicWrapper.StudentTenantAlbumMusicQuery query) {
+        List<TenantAlbumMusicWrapper.StudentTenantAlbumMusic> musicSheets = new ArrayList<>();
+        if (query.getSubjectType() != SubjectTypeEnum.COURSEWARE) {
 
+            musicSheets = tenantAlbumMusicMapper.selectPage(page, query);
+            if (CollectionUtils.isEmpty(musicSheets)) {
+                return page.setRecords(musicSheets);
+            }
 
-        List<TenantAlbumMusicWrapper.StudentTenantAlbumMusic> musicSheets = tenantAlbumMusicMapper.selectPage(page, query);
-        if (CollectionUtils.isEmpty(musicSheets)) {
-            return page.setRecords(musicSheets);
-        }
-
-        // 设置声部
-        List<String> subjectIds = musicSheets.stream()
-            .map(TenantAlbumMusicWrapper.StudentTenantAlbumMusic::getMusicSubject)
-            .filter(Objects::nonNull)
-            .flatMap(x -> Arrays.stream(x.split(",")))
-            .distinct()
-            .collect(Collectors.toList());
-        Map<Integer, Subject> subjectMap = subjectService.getMapByIds(subjectIds);
-
-        // 设置上传人
-        List<Long> userIds = musicSheets.stream()
-            .map(TenantAlbumMusicWrapper.StudentTenantAlbumMusic::getUserId)
-            .filter(Objects::nonNull)
-            .distinct()
-            .collect(Collectors.toList());
-        Map<Long, SysUser> userMap = sysUserService.getMapByIds(userIds);
-
-        // 设置是否收藏
-        List<Long> musicSheetIds = musicSheets.stream()
-            .map(TenantAlbumMusicWrapper.StudentTenantAlbumMusic::getId)
-            .filter(Objects::nonNull)
-            .distinct()
-            .collect(Collectors.toList());
-        List<Long> favoriteIds = new ArrayList<>();
-        if (query.getUserId() != null && query.getClientType() != null) {
-            List<MusicFavorite> favoriteList = musicFavoriteService.lambdaQuery()
-                .in(MusicFavorite::getMusicSheetId, musicSheetIds)
-                .eq(MusicFavorite::getUserId, query.getUserId())
-                .eq(MusicFavorite::getClientType, query.getClientType().equals(ClientEnum.TENANT_STUDENT) ? ClientEnum.STUDENT : query.getClientType())
-                .list();
-            favoriteIds = favoriteList.stream().map(MusicFavorite::getMusicSheetId).distinct().collect(Collectors.toList());
+            // 设置声部
+            List<String> subjectIds = musicSheets.stream()
+                .map(TenantAlbumMusicWrapper.StudentTenantAlbumMusic::getMusicSubject)
+                .filter(Objects::nonNull)
+                .flatMap(x -> Arrays.stream(x.split(",")))
+                .distinct()
+                .collect(Collectors.toList());
+            Map<Integer, Subject> subjectMap = subjectService.getMapByIds(subjectIds);
+
+            // 设置上传人
+            List<Long> userIds = musicSheets.stream()
+                .map(TenantAlbumMusicWrapper.StudentTenantAlbumMusic::getUserId)
+                .filter(Objects::nonNull)
+                .distinct()
+                .collect(Collectors.toList());
+            Map<Long, SysUser> userMap = sysUserService.getMapByIds(userIds);
+
+            // 设置是否收藏
+            List<Long> musicSheetIds = musicSheets.stream()
+                .map(TenantAlbumMusicWrapper.StudentTenantAlbumMusic::getId)
+                .filter(Objects::nonNull)
+                .distinct()
+                .collect(Collectors.toList());
+            List<Long> favoriteIds = new ArrayList<>();
+            if (query.getUserId() != null && query.getClientType() != null) {
+                List<MusicFavorite> favoriteList = musicFavoriteService.lambdaQuery()
+                    .in(MusicFavorite::getMusicSheetId, musicSheetIds)
+                    .eq(MusicFavorite::getUserId, query.getUserId())
+                    .eq(MusicFavorite::getClientType, query.getClientType().equals(ClientEnum.TENANT_STUDENT) ? ClientEnum.STUDENT : query.getClientType())
+                    .list();
+                favoriteIds = favoriteList.stream().map(MusicFavorite::getMusicSheetId).distinct().collect(Collectors.toList());
 
-        }
+            }
 
 
-        for (TenantAlbumMusicWrapper.StudentTenantAlbumMusic m : musicSheets) {
-            if (StringUtils.isNotBlank(m.getMusicSubject())) {
-                String subjectNames = Arrays.stream(m.getMusicSubject().split(","))
-                    .distinct()
-                    .map(Integer::parseInt)
-                    .map(subjectMap::get)
-                    .filter(Objects::nonNull)
-                    .map(Subject::getName)
-                    .collect(Collectors.joining(","));
-                m.setMusicSubjectName(subjectNames);
+            for (TenantAlbumMusicWrapper.StudentTenantAlbumMusic m : musicSheets) {
+                if (StringUtils.isNotBlank(m.getMusicSubject())) {
+                    String subjectNames = Arrays.stream(m.getMusicSubject().split(","))
+                        .distinct()
+                        .map(Integer::parseInt)
+                        .map(subjectMap::get)
+                        .filter(Objects::nonNull)
+                        .map(Subject::getName)
+                        .collect(Collectors.joining(","));
+                    m.setMusicSubjectName(subjectNames);
+                }
+                SysUser sysUser = userMap.get(m.getUserId());
+                if (sysUser != null) {
+                    m.setUserName(sysUser.getUsername());
+                }
+                if (CollectionUtils.isNotEmpty(favoriteIds)) {
+                    m.setFavorite(favoriteIds.contains(m.getId()));
+                }
             }
-            SysUser sysUser = userMap.get(m.getUserId());
-            if (sysUser != null) {
-                m.setUserName(sysUser.getUsername());
+        } else {
+            // 查询专辑课件
+            List<TenantAlbumMusic> list = tenantAlbumMusicService.lambdaQuery()
+                .eq(TenantAlbumMusic::getTenantAlbumId, query.getAlbumId())
+                .eq(TenantAlbumMusic::getSubjectType, SubjectTypeEnum.COURSEWARE)
+                .eq(TenantAlbumMusic::getDelFlag, false)
+                .list();
+            if (CollectionUtils.isEmpty(list)) {
+                return page.setRecords(musicSheets);
             }
-            if (CollectionUtils.isNotEmpty(favoriteIds)) {
-                m.setFavorite(favoriteIds.contains(m.getId()));
+            List<Long> coursewareIds = list.stream().map(TenantAlbumMusic::getMusicSheetId).collect(Collectors.toList());
+
+            try {
+
+                PageInfo<CbsLessonCoursewareWrapper.LessonCourseware> lessonCoursewarePageInfo = coursewareFeignService.lessonCoursewarePage(CbsLessonCoursewareWrapper.LessonCoursewareQuery.builder()
+                    .page(query.getPage()).rows(query.getRows()).lessonCoursewareIds(coursewareIds).enableFlag(true)
+                    .courseTypeCode(query.getCourseTypeCode()).build()).feignData();
+
+                for (CbsLessonCoursewareWrapper.LessonCourseware row : lessonCoursewarePageInfo.getRows()) {
+                    TenantAlbumMusicWrapper.StudentTenantAlbumMusic studentTenantAlbumMusic = new TenantAlbumMusicWrapper.StudentTenantAlbumMusic();
+                    studentTenantAlbumMusic.setId(row.getId());
+                    studentTenantAlbumMusic.setTenantAlbumId(query.getAlbumId());
+                    studentTenantAlbumMusic.setMusicSheetName(row.getName());
+                    studentTenantAlbumMusic.setTitleImg(row.getCoverImg());
+                    studentTenantAlbumMusic.setMusicSubject(row.getCourseTypeCode());
+                    studentTenantAlbumMusic.setMusicSubjectName(ECourseType.valueOf(row.getCourseTypeCode()).getName());
+                    musicSheets.add(studentTenantAlbumMusic);
+                }
+
+                page.setRecords(musicSheets);
+                page.setTotal(lessonCoursewarePageInfo.getTotal());
+                return page;
+            }catch (Exception e) {
+                log.error("查询课件失败", e);
+                throw new BizException("内容平台查询课件异常");
             }
+
         }
         return page.setRecords(musicSheets);
     }
@@ -196,18 +235,22 @@ public class TenantAlbumMusicServiceImpl extends ServiceImpl<TenantAlbumMusicMap
         }
 
         // 专辑曲目关联数据
-//        List<TenantAlbumMusic> list = this.lambdaQuery()
-//                .in(TenantAlbumMusic::getTenantAlbumId, albumIds)
-//                .eq(query.getTenantAlbumId() != null, TenantAlbumMusic::getTenantAlbumId, query.getTenantAlbumId())
-//                .eq(query.getSubjectType() != null, TenantAlbumMusic::getSubjectType, query.getSubjectType())
-//                .eq(TenantAlbumMusic::getDelFlag, false)
-//                .list();
         List<TenantAlbumMusic> list = tenantAlbumMusicMapper.getList(query,albumIds);
         if (CollectionUtils.isEmpty(list)) {
             return data;
         }
 
-        List<Long> musicSheetIds = list.stream().map(o -> o.getMusicSheetId()).distinct().collect(Collectors.toList());
+        List<Long> coursewareIds = list.stream().filter(o -> o.getSubjectType() == SubjectTypeEnum.COURSEWARE)
+            .map(TenantAlbumMusic::getMusicSheetId).distinct().collect(Collectors.toList());
+
+        CbsLessonCoursewareWrapper.LambdaQuery lambdaQuery = CbsLessonCoursewareWrapper.LambdaQuery.builder().ids(coursewareIds)
+            .delFlag(false).enableFlag(true).build();
+        List<CbsLessonCoursewareWrapper.Entity> entities = coursewareFeignService.lessonCoursewareLambdaQuery(lambdaQuery).feignData();
+
+
+
+        List<Long> musicSheetIds = list.stream().filter(o -> o.getSubjectType() != SubjectTypeEnum.COURSEWARE)
+            .map(TenantAlbumMusic::getMusicSheetId).distinct().collect(Collectors.toList());
         if (CollectionUtils.isEmpty(musicSheetIds)) {
             return data;
         }
@@ -274,18 +317,27 @@ public class TenantAlbumMusicServiceImpl extends ServiceImpl<TenantAlbumMusicMap
     }
 
     @Override
-    public List<Long> getMusicIdsByIds(List<Long> tenantAlbumIds) {
+    public List<Long> getTenantAlbumMusicIdsByIds(List<Long> tenantAlbumIds, List<SubjectTypeEnum> subjectTypes) {
 
         if (CollectionUtils.isEmpty(tenantAlbumIds)) {
             return Collections.emptyList();
         }
-        List<TenantAlbumMusic> list = this.lambdaQuery().in(TenantAlbumMusic::getTenantAlbumId, tenantAlbumIds).list();
+        List<TenantAlbumMusic> list = this.lambdaQuery()
+            .in(TenantAlbumMusic::getTenantAlbumId, tenantAlbumIds)
+            .in(CollectionUtils.isNotEmpty(subjectTypes),TenantAlbumMusic::getSubjectType,subjectTypes)
+            .list();
         if (CollectionUtils.isEmpty(list)) {
             return Collections.emptyList();
         }
         return list.stream().map(TenantAlbumMusic::getMusicSheetId).collect(Collectors.toList());
     }
 
+    @Override
+    public List<Long> getMusicIdsByIds(List<Long> tenantAlbumIds) {
+
+        return getTenantAlbumMusicIdsByIds(tenantAlbumIds,Arrays.asList(SubjectTypeEnum.MUSIC, SubjectTypeEnum.ENSEMBLE,SubjectTypeEnum.SUBJECT));
+    }
+
 
     /**
      * 获取机构专辑曲目ID集合
@@ -296,4 +348,36 @@ public class TenantAlbumMusicServiceImpl extends ServiceImpl<TenantAlbumMusicMap
     public List<Long> getMusicIdsByTenantIds(Long tenantId) {
         return baseMapper.selectMusicIdsByTenantIds(tenantId);
     }
+
+    @Override
+    public LessonCoursewareWrapper.LessonCoursewareDto getLessonCoursewareDetail(LessonCoursewareWrapper.LessonCourseQuery query) {
+        CbsLessonCoursewareWrapper.LessonCourseware lessonCourseware = coursewareFeignService.lessonCoursewareDetail(query.getLessonCoursewareId()).feignData();
+        if (lessonCourseware == null) {
+            throw new BizException("课件不存在");
+        }
+        LessonCoursewareWrapper.LessonCoursewareDto lessonCoursewareDto = JSON.parseObject(JSON.toJSONString(lessonCourseware), LessonCoursewareWrapper.LessonCoursewareDto.class);
+        lessonCoursewareDto.setStatus(false);
+
+        if (query.getClient() == ClientEnum.STUDENT) {
+            // 判断学生有咩有购买
+            if (query.getAlbumId() != null) {
+                UserTenantAlbumRecord albumRecord = userTenantAlbumRecordService.getNewestByTenantAlbumId(query.getAlbumId(), query.getUserId(), query.getClient());
+                if (albumRecord != null && albumRecord.getEndTime().after(new Date())) {
+                    lessonCoursewareDto.setStatus(true);
+                }
+            } else {
+                List<Long> useAlbumIdsByUserId = userTenantAlbumRecordService.getUseAlbumIdsByUserId(query.getUserId(), query.getClient());
+                if (CollectionUtils.isNotEmpty(useAlbumIdsByUserId)) {
+                    List<Long> list = tenantAlbumMusicService.getTenantAlbumMusicIdsByIds(useAlbumIdsByUserId, Arrays.asList(SubjectTypeEnum.COURSEWARE));
+                    if (list.contains(query.getLessonCoursewareId())) {
+                        lessonCoursewareDto.setStatus(true);
+                    }
+                }
+            }
+        } else {
+            lessonCoursewareDto.setStatus(true);
+        }
+
+        return lessonCoursewareDto;
+    }
 }

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

@@ -14,11 +14,7 @@ import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
 import com.yonge.cooleshow.biz.dal.enums.SubjectTypeEnum;
 import com.yonge.cooleshow.biz.dal.mapper.TenantAlbumMusicMapper;
 import com.yonge.cooleshow.biz.dal.mapper.TenantGroupAlbumMapper;
-import com.yonge.cooleshow.biz.dal.service.StudentService;
-import com.yonge.cooleshow.biz.dal.service.TeacherService;
-import com.yonge.cooleshow.biz.dal.service.TenantAlbumService;
-import com.yonge.cooleshow.biz.dal.service.TenantGroupAlbumService;
-import com.yonge.cooleshow.biz.dal.service.TenantStaffService;
+import com.yonge.cooleshow.biz.dal.service.*;
 import com.yonge.cooleshow.biz.dal.wrapper.TenantGroupAlbumWrapper;
 import com.yonge.toolset.base.exception.BizException;
 import lombok.extern.slf4j.Slf4j;
@@ -58,6 +54,9 @@ public class TenantGroupAlbumServiceImpl extends ServiceImpl<TenantGroupAlbumMap
     @Autowired
     private TenantAlbumService tenantAlbumService;
 
+    @Autowired
+    private UserTenantAlbumRecordService userTenantAlbumRecordService;
+
 	/**
      * 查询详情
      * @param id 详情ID
@@ -164,12 +163,23 @@ public class TenantGroupAlbumServiceImpl extends ServiceImpl<TenantGroupAlbumMap
             // 曲目ID集合
             List<Long> tenantGroupAlbumIds = buyAlbumInfo.stream().map(TenantGroupAlbumWrapper.BuyTenantAlbum::getTenantGroupAlbumId).collect(Collectors.toList());
             List<Long> studentTenantAlbumNum = userOrderDao.getStudentTenantAlbumNum(userId, tenantGroupAlbumIds);
+
+            // 判断是否还在生效中
+            List<Long> useAlbumIds = userTenantAlbumRecordService.getUseAlbumIdsByUserId(userId, ClientEnum.STUDENT);
+
             for (TenantGroupAlbumWrapper.BuyTenantAlbum item : buyAlbumInfo) {
                 item.setBuyedTimes((int) studentTenantAlbumNum.stream().filter(x -> x.equals(item.getTenantGroupAlbumId())).count());
                 if (item.getBuyedTimes() > item.getBuyTimes()) {
                     item.setBuyedTimes(item.getBuyTimes());
                 }
+                if (CollectionUtils.isNotEmpty(useAlbumIds)) {
+                    item.setStatus(useAlbumIds.contains(item.getTenantGroupAlbumId()));
+                } else {
+                    item.setStatus(false);
+                }
             }
+
+
         }
 
         return buyAlbumInfo;

+ 107 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/wrapper/LessonCoursewareWrapper.java

@@ -0,0 +1,107 @@
+package com.yonge.cooleshow.biz.dal.wrapper;
+
+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.biz.dal.enums.ClientEnum;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.validation.constraints.NotNull;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 课件教材
+ */
+@ApiModel(value = "LessonCoursewareWrapper对象", description = "课件教材")
+public class LessonCoursewareWrapper {
+
+    @Data
+	@Builder
+    @AllArgsConstructor
+    @NoArgsConstructor
+    @ApiModel("课件教材分页查询")
+    public static class LessonCoursewareQuery implements QueryInfo {
+        private Integer page = 1;
+
+        private Integer rows = 20;
+
+        @ApiModelProperty("声部")
+        private Integer subjectId;
+
+        @ApiModelProperty("启用状态")
+        private Boolean enable;
+    }
+
+    @Data
+	@Builder
+    @AllArgsConstructor
+    @NoArgsConstructor
+    @ApiModel("课件教材dto")
+    public static class LessonCoursewareDto extends CbsLessonCoursewareWrapper.LessonCourseware {
+
+        @ApiModelProperty("是否生效中")
+        private Boolean status = false;
+
+    }
+
+    @Data
+    @Builder
+    @NoArgsConstructor
+    @AllArgsConstructor
+    @ApiModel("CourseScheduleCoursewareDetail-课程计划课件详情")
+    public static class CourseScheduleCoursewareDetail {
+
+        // 课程计划编号
+        @ApiModelProperty("课程计划编号")
+        private Long lessonCoursewareId;
+
+        // 课程计划编号
+        @ApiModelProperty("课程计划详情编号")
+        private Long lessonCoursewareDetailId;
+
+        @ApiModelProperty("课程计划详情编号")
+        private String coursewareDetailId;
+
+        // 课件名称
+        @ApiModelProperty("课件详情名称")
+        private String coursewareDetailName;
+
+        @ApiModelProperty("知识点")
+        private List<CbsLessonCoursewareDetailWrapper.KnowledgePointSmall> knowledgePointList;
+
+        public void setLessonCoursewareDetailId(Long lessonCoursewareDetailId) {
+        	this.lessonCoursewareDetailId = lessonCoursewareDetailId;
+            this.coursewareDetailId = String.valueOf(lessonCoursewareDetailId);
+        }
+
+    }
+
+    @Data
+    @Builder
+    @NoArgsConstructor
+    @AllArgsConstructor
+    @ApiModel("CourseScheduleCoursewareDetail-课件教材")
+    public static class LessonCourseQuery {
+
+        // 课程计划编号
+        @ApiModelProperty("课程计划编号")
+        @NotNull(message = "课件教材编号不能为空")
+        private Long lessonCoursewareId;
+
+        @ApiModelProperty("机构专辑ID")
+        private Long albumId;
+
+        @ApiModelProperty(value = "客户端",hidden = true)
+        private ClientEnum client;
+
+        @ApiModelProperty(value = "用户id",hidden = true)
+        private Long userId;
+    }
+
+}

+ 6 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/wrapper/TenantAlbumMusicWrapper.java

@@ -2,6 +2,7 @@ package com.yonge.cooleshow.biz.dal.wrapper;
 
 import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.annotation.TableField;
+import com.dayaedu.cbs.common.enums.school.ECourseType;
 import com.microsvc.toolkit.common.response.paging.QueryInfo;
 import com.yonge.cooleshow.biz.dal.entity.MusicTag;
 import com.yonge.cooleshow.biz.dal.entity.Subject;
@@ -121,6 +122,9 @@ public class TenantAlbumMusicWrapper {
         @ApiModelProperty("标签集合")
         private List<MusicTag> tags;
 
+        @ApiModelProperty("课件教材分类集合")
+        private List<ECourseType> courseTypeList;
+
         public String jsonString() {
             return JSON.toJSONString(this);
         }
@@ -172,6 +176,8 @@ public class TenantAlbumMusicWrapper {
         @ApiModelProperty(value = "用户ID",hidden = true)
         private Long userId;
 
+        @ApiModelProperty("课程类型编码")
+        private ECourseType courseTypeCode;
 
         public String getKeyword() {
             return Optional.ofNullable(keyword).filter(StringUtils::isNotBlank).orElse(null);

+ 3 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/wrapper/TenantGroupAlbumWrapper.java

@@ -269,6 +269,9 @@ public class TenantGroupAlbumWrapper {
         @ApiModelProperty("已购买次数")
         private Integer buyedTimes;
 
+        @ApiModelProperty("是否生效中")
+        private Boolean status = false;
+
         public String jsonString() {
             return JSON.toJSONString(this);
         }

+ 6 - 0
cooleshow-user/user-biz/src/main/resources/config/mybatis/MusicTagMapper.xml

@@ -114,4 +114,10 @@
             </if>
         </where>
     </select>
+
+    <select id="getAll" resultType="com.yonge.cooleshow.biz.dal.entity.MusicTag">
+        SELECT
+            <include refid="baseColumns"/>
+        FROM music_tag t
+    </select>
 </mapper>

+ 14 - 2
cooleshow-user/user-biz/src/main/resources/config/mybatis/SubjectMapper.xml

@@ -16,6 +16,7 @@
         <result column="create_time_" property="createTime"/>
         <result column="update_time_" property="updateTime"/>
         <result column="del_flag_" property="delFlag"/>
+        <result column="cbs_subject_id_" property="cbsSubjectId"/>
     </resultMap>
 
     <!-- 根据主键查询一条记录 -->
@@ -77,8 +78,8 @@
     <insert id="insert" parameterType="com.yonge.cooleshow.biz.dal.entity.Subject" useGeneratedKeys="true"
             keyColumn="id"
             keyProperty="id">
-        INSERT INTO subject (id_,name_,code_,parent_subject_id_,img_,create_time_,update_time_,desc_,ai_default_frequency_)
-        VALUES(#{id},#{name},#{code},#{parentSubjectId},#{img},now(),now(),#{desc},#{aiDefaultFrequency})
+        INSERT INTO subject (id_,name_,code_,parent_subject_id_,img_,create_time_,update_time_,desc_,ai_default_frequency_,cbs_subject_id_)
+        VALUES(#{id},#{name},#{code},#{parentSubjectId},#{img},now(),now(),#{desc},#{aiDefaultFrequency},#{cbsSubjectId})
     </insert>
 
     <!-- 根据主键查询一条记录 -->
@@ -109,6 +110,9 @@
             <if test="aiDefaultFrequency != null">
                 ai_default_frequency_ = #{aiDefaultFrequency},
             </if>
+            <if test="cbsSubjectId != null">
+                cbs_subject_id_ = #{cbsSubjectId},
+            </if>
         </set>
         WHERE id_ = #{id}
     </update>
@@ -204,6 +208,14 @@
     <select id="getSubjectMatchByName" resultType="com.yonge.cooleshow.biz.dal.entity.Subject">
         SELECT * FROM subject WHERE del_flag_ = 0 and name_ LIKE CONCAT('%', #{name}, '%') LIMIT 1
     </select>
+
+    <select id="getAll" resultMap="Subject">
+        SELECT * FROM subject
+    </select>
+
+    <update id="updateCbsSubjectIdNull">
+        update subject set cbs_subject_id_ = null where id_ = #{subjectId}
+    </update>
     <!--声部模糊匹配-->
 
 </mapper>

+ 3 - 1
toolset/toolset-base/src/main/java/com/yonge/toolset/base/page/PageInfo.java

@@ -135,7 +135,9 @@ public class PageInfo<T> implements Serializable {
 
 	public void setTotal(int total) {
 		this.total = total;
-		this.totalPage=new BigDecimal(total).divide(new BigDecimal(limit),0,BigDecimal.ROUND_CEILING).intValue();
+        if (limit !=0) {
+            this.totalPage = new BigDecimal(total).divide(new BigDecimal(limit), 0, BigDecimal.ROUND_CEILING).intValue();
+        }
 	}
 
 	public List<T> getRows() {

+ 4 - 0
toolset/toolset-mybatis/pom.xml

@@ -48,6 +48,10 @@
             <artifactId>mybatis-plus-boot-starter</artifactId>
             <version>3.0.7.1</version>
         </dependency>
+        <dependency>
+            <groupId>com.microsvc.toolkit.common</groupId>
+            <artifactId>microsvc-common-response</artifactId>
+        </dependency>
     </dependencies>
 
 </project>