刘俊驰 1 年之前
父節點
當前提交
cd78544ddf
共有 28 個文件被更改,包括 744 次插入177 次删除
  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. 57 7
      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. 2 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/MusicTagDao.java
  8. 4 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/SubjectDao.java
  9. 27 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/PageUtil.java
  10. 11 4
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/Subject.java
  11. 2 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/SubjectTypeEnum.java
  12. 2 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/mapper/TenantAlbumMusicMapper.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. 2 2
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/MusicSheetServiceImpl.java
  17. 9 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/MusicTagServiceImpl.java
  18. 14 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/SubjectServiceImpl.java
  19. 155 70
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TenantAlbumMusicServiceImpl.java
  20. 15 5
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TenantGroupAlbumServiceImpl.java
  21. 42 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/wrapper/LessonCoursewareWrapper.java
  22. 8 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/wrapper/TenantAlbumMusicWrapper.java
  23. 3 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/wrapper/TenantGroupAlbumWrapper.java
  24. 6 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/MusicTagMapper.xml
  25. 14 6
      cooleshow-user/user-biz/src/main/resources/config/mybatis/SubjectMapper.xml
  26. 25 1
      cooleshow-user/user-biz/src/main/resources/config/mybatis/TenantAlbumMusicMapper.xml
  27. 3 1
      toolset/toolset-base/src/main/java/com/yonge/toolset/base/page/PageInfo.java
  28. 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.LessonCourseware> 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.LessonCourseware 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());
+    }
+
+}

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

@@ -1,6 +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;
@@ -8,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;
@@ -17,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;
 
 /**
@@ -47,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) {
@@ -55,10 +65,15 @@ public class TenantAlbumSheetController extends BaseController {
             return failed(HttpStatus.FORBIDDEN, "请登录");
         }
         query.setUserId(user.getId());
-        /*if(StringUtils.isBlank(query.getSubjectId())){
+        if(query.getSubjectId() == null){
         	Student student = studentService.getById(user.getId());
-        	query.setSubjectId(student.getSubjectId());
-        }*/
+            if (student == null) {
+                throw new BizException("学生信息不存在");
+            }
+            if (!StringUtil.isEmpty(student.getSubjectId())) {
+                query.setSubjectId(Long.parseLong(student.getSubjectId()));
+            }
+        }
         return succeed(tenantAlbumMusicService.getTenantAlbumMusicQuery(query));
     }
 
@@ -84,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.LessonCourseware> 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.LessonCourseware 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.LessonCourseware> 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.LessonCourseware 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.LessonCourseware> 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.LessonCourseware 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());
+    }
+
+
 }

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

@@ -61,4 +61,6 @@ public interface MusicTagDao extends BaseMapper<MusicTag> {
     List<CbsMusicSheetTagWrapper.MusicSheetTag> tagList(@Param("param") CbsMusicSheetTagWrapper.MusicSheetTagQuery queryInfo);
 
 	List<CbsMusicSheetCategoryWrapper.MusicSheetCategory> categoryList(@Param("param") CbsMusicSheetCategoryWrapper.MusicSheetCategoryQuery queryInfo);
+
+    List<MusicTag> getAll();
 }

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

@@ -66,4 +66,8 @@ public interface SubjectDao extends BaseDAO<Long, Subject> {
     Subject getByCbsId(@Param("subjectId") Integer subjectId);
 
     List<CbsSubjectApiWrapper.Subject> queryCbsList(@Param("query") CbsSubjectApiWrapper.SubjectQuery query);
+
+    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;
+    }
+}

+ 11 - 4
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/Subject.java

@@ -1,11 +1,13 @@
 package com.yonge.cooleshow.biz.dal.entity;
 
 import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
 
 import java.io.Serializable;
 import java.util.List;
 
+import lombok.Data;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+
 /**
  * 对应数据库表(subject):
  */
@@ -14,8 +16,6 @@ public class Subject implements Serializable {
 
 	/**  */
 	private Long id;
-
-	private Integer cbsSubjectId;
 	
 	/**  */
 	@ApiModelProperty(value = "声部名称",required = false)
@@ -44,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;
@@ -52,4 +58,5 @@ public class Subject implements Serializable {
 	/**  */
 	@ApiModelProperty(value = "子节点列表",required = false)
 	private List<Subject> subjects;
+
 }

+ 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;

+ 2 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/mapper/TenantAlbumMusicMapper.java

@@ -37,4 +37,6 @@ public interface TenantAlbumMusicMapper extends BaseMapper<TenantAlbumMusic> {
      * 获取专辑可使用的曲目
      */
     List<TenantAlbumMusic> getByAlbumAndEnable(@Param("tenantAlbumIds") List<Long> tenantAlbumIds);
+
+    List<TenantAlbumMusic> getList(@Param("param") TenantAlbumMusicWrapper.TenantAlbumMusicSelect query, @Param("albumIds") List<Long> albumIds);
 }

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

@@ -9,6 +9,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;
 
 /**
  * 音乐标签表 服务类
@@ -85,4 +86,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

@@ -56,4 +56,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.LessonCourseware getLessonCoursewareDetail(LessonCoursewareWrapper.LessonCourseQuery query);
 }

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

@@ -239,7 +239,7 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao, MusicSheet
         //musicSheet.setState(YesOrNoEnum.NO);
         this.saveOrUpdate(musicSheet);
 
-        if (musicSheet.getMusicSheetType().equals(MusicSheetTypeEnum.CONCERT)) {
+        if (musicSheet.getMusicSheetType() !=null && MusicSheetTypeEnum.CONCERT.equals(musicSheet.getMusicSheetType())) {
             this.lambdaUpdate()
                     .eq(MusicSheet::getId, musicSheet.getId())
                     .set(MusicSheet::getMusicSubject,"")
@@ -1180,7 +1180,7 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao, MusicSheet
             //musicSheet.setState(YesOrNoEnum.NO);
             this.saveOrUpdate(musicSheet);
 
-            if (musicSheet.getMusicSheetType().equals(MusicSheetTypeEnum.CONCERT)) {
+            if (musicSheet.getMusicSheetType() !=null && MusicSheetTypeEnum.CONCERT.equals(musicSheet.getMusicSheetType())) {
                 this.lambdaUpdate()
                         .eq(MusicSheet::getId, musicSheet.getId())
                         .set(MusicSheet::getMusicSubject,"")

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

@@ -247,5 +247,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;
@@ -75,6 +76,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()) {
@@ -95,6 +97,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);
         }
@@ -189,6 +194,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

+ 155 - 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,17 +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;
         }
@@ -273,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集合
@@ -295,4 +348,36 @@ public class TenantAlbumMusicServiceImpl extends ServiceImpl<TenantAlbumMusicMap
     public List<Long> getMusicIdsByTenantIds(Long tenantId) {
         return baseMapper.selectMusicIdsByTenantIds(tenantId);
     }
+
+    @Override
+    public LessonCoursewareWrapper.LessonCourseware getLessonCoursewareDetail(LessonCoursewareWrapper.LessonCourseQuery query) {
+        CbsLessonCoursewareWrapper.LessonCourseware lessonCourseware = coursewareFeignService.lessonCoursewareDetail(query.getLessonCoursewareId()).feignData();
+        if (lessonCourseware == null) {
+            throw new BizException("课件不存在");
+        }
+        LessonCoursewareWrapper.LessonCourseware lessonCoursewareDto = JSON.parseObject(JSON.toJSONString(lessonCourseware), LessonCoursewareWrapper.LessonCourseware.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;

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

@@ -1,7 +1,9 @@
 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;
@@ -9,8 +11,13 @@ 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 {
 
@@ -61,6 +68,19 @@ public class LessonCoursewareWrapper {
         private Integer subjectId;
     }
 
+
+    @Data
+    @Builder
+    @AllArgsConstructor
+    @NoArgsConstructor
+    @ApiModel("课件教材dto")
+    public static class LessonCourseware extends CbsLessonCoursewareWrapper.LessonCourseware {
+
+        @ApiModelProperty("是否生效中")
+        private Boolean status = false;
+
+    }
+
     @Data
     @Builder
     @NoArgsConstructor
@@ -93,4 +113,26 @@ public class LessonCoursewareWrapper {
 
     }
 
+    @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;
+    }
+
 }

+ 8 - 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;
@@ -87,6 +88,8 @@ public class TenantAlbumMusicWrapper {
         @ApiModelProperty(value = "用户ID", hidden = true)
         private Long userId;
 
+        @ApiModelProperty("声部id")
+        private Long subjectId;
         public String jsonString() {
             return JSON.toJSONString(this);
         }
@@ -119,6 +122,9 @@ public class TenantAlbumMusicWrapper {
         @ApiModelProperty("标签集合")
         private List<MusicTag> tags;
 
+        @ApiModelProperty("课件教材分类集合")
+        private List<ECourseType> courseTypeList;
+
         public String jsonString() {
             return JSON.toJSONString(this);
         }
@@ -170,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

@@ -150,4 +150,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 - 6
cooleshow-user/user-biz/src/main/resources/config/mybatis/SubjectMapper.xml

@@ -7,7 +7,6 @@
 <mapper namespace="com.yonge.cooleshow.biz.dal.dao.SubjectDao">
     <resultMap type="com.yonge.cooleshow.biz.dal.entity.Subject" id="Subject">
         <result column="id_" property="id"/>
-        <result column="cbs_subject_id_" property="cbsSubjectId"/>
         <result column="name_" property="name"/>
         <result column="code_" property="code"/>
         <result column="parent_subject_id_" property="parentSubjectId"/>
@@ -17,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>
 
     <!-- 根据主键查询一条记录 -->
@@ -78,17 +78,14 @@
     <insert id="insert" parameterType="com.yonge.cooleshow.biz.dal.entity.Subject" useGeneratedKeys="true"
             keyColumn="id"
             keyProperty="id">
-        INSERT INTO subject (id_,cbs_subject_id_,name_,code_,parent_subject_id_,img_,create_time_,update_time_,desc_,ai_default_frequency_)
-        VALUES(#{id},#{cbsSubjectId},#{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>
 
     <!-- 根据主键查询一条记录 -->
     <update id="update" parameterType="com.yonge.cooleshow.biz.dal.entity.Subject">
         UPDATE subject
         <set>
-            <if test="cbsSubjectId != null">
-                cbs_subject_id_ = #{cbsSubjectId},
-            </if>
             <if test="delFlag != null">
                 del_flag_ = #{delFlag},
             </if>
@@ -113,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>
@@ -228,6 +228,14 @@
             </foreach>
         </if>
     </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>

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

@@ -33,7 +33,7 @@
         <where>
             m.state_ = true and m.del_flag_ = 0 and t.del_flag_ = 0
             <if test="param.musicTagId != null ">
-                and (find_in_set(#{param.musicTagId},m.music_tag_)
+                and (find_in_set(#{param.musicTagId},m.music_tag_))
             </if>
             <if test="param.subjectId != null" >
                 and (find_in_set(#{param.subjectId},m.music_subject_) or m.music_subject_ is null or m.music_subject_ = '' or m.music_sheet_type_ = 'CONCERT')
@@ -101,4 +101,28 @@
             #{item}
         </foreach>
     </select>
+
+    <select id="getList" resultType="com.yonge.cooleshow.biz.dal.entity.TenantAlbumMusic">
+        select
+        t.*
+        from tenant_album_music t
+        left join music_sheet m on t.music_sheet_id_ = m.id_
+        where
+        t.del_flag_ = 0
+        <if test="param.tenantAlbumId != null">
+            and t.tenant_album_id_ = #{param.tenantAlbumId}
+        </if>
+        <if test="param.subjectType != null">
+            and t.subject_type_ = #{param.subjectType}
+        </if>
+        <if test="albumIds != null and albumIds.size() != 0">
+            and t.tenant_album_id_ in
+            <foreach collection="albumIds" item="item" index="index" open="(" close=")" separator=",">
+                #{item}
+            </foreach>
+        </if>
+        <if test="param.subjectId != null">
+            and (find_in_set(#{param.subjectId},m.music_subject_) or m.music_subject_ is null or m.music_subject_ = '' or m.music_sheet_type_ = 'CONCERT')
+        </if>
+    </select>
 </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>