Forráskód Böngészése

Merge branch 'feature/0826_music' into test

liujc 10 hónapja
szülő
commit
6fc40d3520
24 módosított fájl, 1044 hozzáadás és 258 törlés
  1. 127 112
      cooleshow-app/src/main/java/com/yonge/cooleshow/admin/controller/TenantAlbumController.java
  2. 196 0
      cooleshow-app/src/main/java/com/yonge/cooleshow/admin/controller/TenantMusicSheetApplicationExtendController.java
  3. 8 0
      cooleshow-app/src/main/java/com/yonge/cooleshow/student/controller/MusicSheetController.java
  4. 22 0
      cooleshow-common/src/main/java/com/yonge/cooleshow/common/constant/SysConfigConstant.java
  5. 11 3
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/MusicSheetDao.java
  6. 12 2
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/MusicSheetSearch.java
  7. 45 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/MusicSheet.java
  8. 2 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/MusicSheetService.java
  9. 81 45
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CbsMusicSheetServiceImpl.java
  10. 52 4
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/MusicSheetServiceImpl.java
  11. 143 46
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TenantAlbumMusicServiceImpl.java
  12. 8 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/MusicSheetVoResult.java
  13. 64 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/wrapper/MusicSheetWrapper.java
  14. 11 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/wrapper/TenantAlbumMusicWrapper.java
  15. 6 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/wrapper/TenantAlbumWrapper.java
  16. 4 4
      cooleshow-user/user-biz/src/main/resources/config/mybatis/ActivityEvaluationMapper.xml
  17. 1 1
      cooleshow-user/user-biz/src/main/resources/config/mybatis/ActivityRegistrationMapper.xml
  18. 2 2
      cooleshow-user/user-biz/src/main/resources/config/mybatis/MusicAlbumMapper.xml
  19. 213 12
      cooleshow-user/user-biz/src/main/resources/config/mybatis/MusicSheetMapper.xml
  20. 14 2
      cooleshow-user/user-biz/src/main/resources/config/mybatis/MusicSheetPracticeRecordMapper.xml
  21. 5 5
      cooleshow-user/user-biz/src/main/resources/config/mybatis/MusicTagMapper.xml
  22. 1 1
      cooleshow-user/user-biz/src/main/resources/config/mybatis/SubjectMapper.xml
  23. 15 16
      cooleshow-user/user-biz/src/main/resources/config/mybatis/TenantAlbumMusicMapper.xml
  24. 1 1
      pom.xml

+ 127 - 112
cooleshow-app/src/main/java/com/yonge/cooleshow/admin/controller/TenantAlbumController.java

@@ -4,15 +4,19 @@ 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.client.MusicFeignClientService;
 import com.dayaedu.cbs.openfeign.wrapper.courseware.CbsLessonCoursewareWrapper;
+import com.dayaedu.cbs.openfeign.wrapper.music.MusicSheetCategoriesWrapper;
 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.*;
+import com.yonge.cooleshow.biz.dal.enums.SourceTypeEnum;
 import com.yonge.cooleshow.biz.dal.enums.SubjectTypeEnum;
 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.constant.SysConfigConstant;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.toolset.base.exception.BizException;
 import com.yonge.toolset.base.page.PageInfo;
@@ -56,15 +60,14 @@ public class TenantAlbumController {
     @Autowired
     private MusicSheetService musicSheetService;
 
-    @Autowired
-    private SubjectService subjectService;
-
-    @Autowired
-    private MusicTagService musicTagService;
 
     @Autowired
     private CoursewareFeignService coursewareFeignService;
 
+    @Autowired
+    private MusicFeignClientService musicFeignClientService;
+    @Autowired
+    private SysConfigService sysConfigService;
     /**
      * 查询分页
      *
@@ -85,135 +88,147 @@ public class TenantAlbumController {
      * @param id 详情ID
      * @return TenantAlbum
      */
-    @PostMapping("/detail")
+    @GetMapping("/detailInfo")
     @ApiOperation(value = "查询详情", notes = "detail")
-    @PreAuthorize("@pcs.hasPermissions('tenantAlbum/detail')")
-    public HttpResponseResult<TenantAlbumWrapper.TenantAlbum> detail(@RequestParam("id") Long id) {
+    @PreAuthorize("@pcs.hasPermissions('tenantAlbum/detailInfo')")
+    public HttpResponseResult<List<TenantAlbumWrapper.TenantAlbumSheet>> detailInfo(@RequestParam("id") Long id,@RequestParam("subjectType") String subjectType) {
         TenantAlbum tenantAlbum = tenantAlbumService.detail(id);
         if (tenantAlbum == null) {
             throw new BizException("专辑信息不存在");
         }
 
-        TenantAlbumWrapper.TenantAlbum vo = JSON.parseObject(JSON.toJSONString(tenantAlbum),
-                TenantAlbumWrapper.TenantAlbum.class);
-
-        //查关联表
-        TenantAlbumRef one = tenantAlbumRefService.lambdaQuery().eq(TenantAlbumRef::getTenantAlbumId, id)
-                .last("limit 1").one();
-        vo.setTenantId(one.getTenantId().toString());
-        //查询曲目表
 
-        TenantInfo tenantInfo = tenantInfoService.getById(one.getTenantId());
-        vo.setTenantName(tenantInfo.getName());
         List<TenantAlbumMusic> tenantAlbumMusics = tenantAlbumMusicService.lambdaQuery()
-                .eq(TenantAlbumMusic::getTenantAlbumId, id)
-                .eq(TenantAlbumMusic::getDelFlag, false)
-                .list();
-
-        Map<SubjectTypeEnum, List<TenantAlbumMusic>> groupByType =
-                tenantAlbumMusics.stream().collect(Collectors.groupingBy(TenantAlbumMusic::getSubjectType));
-
-
-        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<>();
+            .eq(TenantAlbumMusic::getTenantAlbumId, id)
+            .eq(TenantAlbumMusic::getSubjectType, SubjectTypeEnum.valueOf(subjectType))
+            .eq(TenantAlbumMusic::getDelFlag, false)
+            .orderByAsc(TenantAlbumMusic::getSortNumber,TenantAlbumMusic::getId)
+            .list();
+        if (CollectionUtils.isEmpty(tenantAlbumMusics)) {
+            return HttpResponseResult.succeed();
+        }
 
-        if (CollectionUtils.isNotEmpty(coursewareList)) {
+        if (subjectType.equals(SubjectTypeEnum.COURSEWARE.name())) {
+            List<Long> coursewareList = tenantAlbumMusics.stream().map(TenantAlbumMusic::getMusicSheetId).collect(Collectors.toList());
             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())));
-        }
+            return HttpResponseResult.succeed(entities.stream().map(o -> {
+                TenantAlbumWrapper.TenantAlbumSheet tenantAlbumSheet = new TenantAlbumWrapper.TenantAlbumSheet();
+                tenantAlbumSheet.setId(o.getId().toString());
+                tenantAlbumSheet.setMusicSheetName(o.getName());
+                tenantAlbumSheet.setTitleImg(o.getCoverImg());
+                tenantAlbumSheet.setMusicSubject(o.getCourseTypeCode());
+                tenantAlbumSheet.setMusicSubjectName(ECourseType.valueOf(o.getCourseTypeCode()).getName());
+                return tenantAlbumSheet;
+            }).collect(Collectors.toList()));
+        } else {
+
+            String cbsTenantAppId = sysConfigService.findConfigValue(SysConfigConstant.CBS_TENANT_APP_ID);
+            Long categoryId = getCategoryId(subjectType);
 
-        Map<Long, MusicSheetVo> idMsMap = new HashMap<>();
-        Map<Integer,Subject> subjectMap = subjectService.getAllMap();
-        Map<Long, MusicTag> musicTagMap = musicTagService.getAllMap();
-        if (CollectionUtils.isNotEmpty(musicSheetIdlist)) {
+            List<Long> musicSheetIdlist = tenantAlbumMusics.stream().map(TenantAlbumMusic::getMusicSheetId).collect(Collectors.toList());
             StudentMusicSheetSearch search = new StudentMusicSheetSearch();
             search.setMusicSheetIdlist(musicSheetIdlist);
+            search.setProviderType(SourceTypeEnum.TENANT);
             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));
-            TenantAlbumWrapper.MusicSheetData sheetData = new TenantAlbumWrapper.MusicSheetData();
-            sheetData.setSubjectType(key);
-            List<TenantAlbumWrapper.TenantAlbumSheet> tenantAlbumSheets = value.stream().map(next -> {
 
+            // 获取分类ID
+            List<MusicSheetVo> records1 = records.getRecords();
+            if (CollectionUtils.isEmpty(records1)) {
+                return HttpResponseResult.succeed();
+            }
+
+            List<MusicSheetCategoriesWrapper.MusicSheetCategories> musicSheetCategories = musicFeignClientService.queryTreeByAppId(Long.parseLong(cbsTenantAppId)).feignData();
+
+            return HttpResponseResult.succeed(records1.stream().map(o -> {
                 TenantAlbumWrapper.TenantAlbumSheet tenantAlbumSheet = new TenantAlbumWrapper.TenantAlbumSheet();
-                BeanUtils.copyProperties(next, tenantAlbumSheet);
-                Long musicSheetId = tenantAlbumSheet.getMusicSheetId();
-                switch (key) {
-                    case COURSEWARE:
-                        CbsLessonCoursewareWrapper.Entity entity = coursewareDtoMap.get(musicSheetId);
-                        if (entity != null) {
-                            tenantAlbumSheet.setMusicSheetName(entity.getName());
-                            tenantAlbumSheet.setTitleImg(entity.getCoverImg());
-                            tenantAlbumSheet.setMusicSubject(entity.getCourseTypeCode());
-                            tenantAlbumSheet.setMusicSubjectName(ECourseType.valueOf(entity.getCourseTypeCode()).getName());
-                        } else {
-                            return null;
-                        }
-                        break;
-                    case MUSIC:
-                    case SUBJECT:
-                    case ENSEMBLE:
-                    {
-                        MusicSheetVo musicSheet = idMsMap.get(musicSheetId);
-                        if (musicSheet == null) {
-                            return null;
-                        }
-                        tenantAlbumSheet.setMusicSheetName(musicSheet.getMusicSheetName());
-                        tenantAlbumSheet.setMusicTag(musicSheet.getMusicTag());
-                        tenantAlbumSheet.setComposer(musicSheet.getComposer());
-                        tenantAlbumSheet.setMusicSubject(musicSheet.getMusicSubject());
-                        tenantAlbumSheet.setMusicSubjectName(musicSheet.getSubjectNames());
-                        tenantAlbumSheet.setMusicTagName(musicSheet.getMusicTagNames());
-/*
-                        //设置对应标签名称
-                        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);
-                        }*/
-
-                    }
-                    break;
-                    default:
-                        break;
-                }
+                tenantAlbumSheet.setId(o.getId().toString());
+                tenantAlbumSheet.setMusicSheetName(o.getMusicSheetName());
+                tenantAlbumSheet.setMusicTag(o.getMusicTag());
+                tenantAlbumSheet.setComposer(o.getComposer());
+                tenantAlbumSheet.setMusicSubject(o.getMusicSubject());
+                tenantAlbumSheet.setMusicSubjectName(o.getSubjectNames());
+                tenantAlbumSheet.setErrFlag(true);
+                tenantAlbumSheet.setLoop(true);
+                tenantAlbumSheet.setMusicTagName(updateCategory(musicSheetCategories, categoryId, o.getTenantCategoryId(),tenantAlbumSheet));
 
                 return tenantAlbumSheet;
-            }).filter(Objects::nonNull).collect(Collectors.toList());
+            }).collect(Collectors.toList()));
+        }
+
 
-            sheetData.setTenantAlbumSheetList(tenantAlbumSheets);
-            musicSheetData.add(sheetData);
-            vo.setMusicSheetData(musicSheetData);
-        });
+    }
+
+    private String updateCategory(List<MusicSheetCategoriesWrapper.MusicSheetCategories> musicSheetCategories,
+                                Long categoryId, String tenantCategoryId,TenantAlbumWrapper.TenantAlbumSheet tenantAlbumSheet) {
+
+        if (StringUtils.isBlank(tenantCategoryId)) {
+            return "";
+        }
+        for (MusicSheetCategoriesWrapper.MusicSheetCategories o : musicSheetCategories) {
+            if (o.getId().equals(Long.parseLong(tenantCategoryId))) {
+                return o.getName();
+            }
+            if (CollectionUtils.isNotEmpty(o.getMusicSheetCategoriesList())) {
+                String s = updateCategory( o.getMusicSheetCategoriesList(), categoryId, tenantCategoryId,tenantAlbumSheet);
+                if (!tenantAlbumSheet.getLoop()) {
+                    return s;
+                }
+                if (o.getId().equals(categoryId) && StringUtils.isNotBlank(s)) {
+                    tenantAlbumSheet.setErrFlag(false);
+//                    tenantAlbumSheet.setLoop(false);
+//                    return s;
+                }
+                if (StringUtils.isNotBlank(s)) {
+                    return o.getName() + "/" + s;
+                }
+            }
+        }
+        return "";
+    }
+
+    private Long getCategoryId(String subjectType) {
+        if (StringUtils.isBlank(subjectType)) {
+            return null;
+        }
+        if (SubjectTypeEnum.SUBJECT.name().equals(subjectType)) {
+            return Long.parseLong(sysConfigService.findConfigValue(SysConfigConstant.TENANT_ALBUM_SUBJECT_TYPE_CATEGORY));
+        } else if (SubjectTypeEnum.ENSEMBLE.name().equals(subjectType)) {
+            return Long.parseLong(sysConfigService.findConfigValue(SysConfigConstant.TENANT_ALBUM_ENSEMBLE_TYPE_CATEGORY));
+        } if (SubjectTypeEnum.MUSIC.name().equals(subjectType)) {
+            return Long.parseLong(sysConfigService.findConfigValue(SysConfigConstant.TENANT_ALBUM_MUSIC_TYPE_CATEGORY));
+        }
+        return null;
+    }
+
+    /**
+     * 查询详情
+     *
+     * @param id 详情ID
+     * @return TenantAlbum
+     */
+    @PostMapping("/detail")
+    @ApiOperation(value = "查询详情", notes = "detail")
+    @PreAuthorize("@pcs.hasPermissions('tenantAlbum/detail')")
+    public HttpResponseResult<TenantAlbumWrapper.TenantAlbum> detail(@RequestParam("id") Long id) {
+        TenantAlbum tenantAlbum = tenantAlbumService.detail(id);
+        if (tenantAlbum == null) {
+            throw new BizException("专辑信息不存在");
+        }
+
+        TenantAlbumWrapper.TenantAlbum vo = JSON.parseObject(JSON.toJSONString(tenantAlbum),
+                TenantAlbumWrapper.TenantAlbum.class);
+
+        //查关联表
+        TenantAlbumRef one = tenantAlbumRefService.lambdaQuery().eq(TenantAlbumRef::getTenantAlbumId, id)
+                .last("limit 1").one();
+        vo.setTenantId(one.getTenantId().toString());
+        //查询曲目表
+
+        TenantInfo tenantInfo = tenantInfoService.getById(one.getTenantId());
+        vo.setTenantName(tenantInfo.getName());
 
         return HttpResponseResult.succeed(vo);
     }

+ 196 - 0
cooleshow-app/src/main/java/com/yonge/cooleshow/admin/controller/TenantMusicSheetApplicationExtendController.java

@@ -0,0 +1,196 @@
+package com.yonge.cooleshow.admin.controller;
+
+import com.alibaba.fastjson.JSONObject;
+import com.dayaedu.cbs.openfeign.client.MusicFeignClientService;
+import com.dayaedu.cbs.openfeign.properties.OpenFeignClientConfigProperties;
+import com.dayaedu.cbs.openfeign.service.CbsMusicSheetService;
+import com.dayaedu.cbs.openfeign.wrapper.music.*;
+import com.microsvc.toolkit.common.response.paging.PageInfo;
+import com.microsvc.toolkit.common.response.template.R;
+import com.microsvc.toolkit.common.webportal.exception.BizException;
+import com.microsvc.toolkit.config.jwt.utils.JwtUserInfo;
+import com.yonge.cooleshow.biz.dal.enums.SubjectTypeEnum;
+import com.yonge.cooleshow.biz.dal.service.MusicSheetService;
+import com.yonge.cooleshow.biz.dal.service.SysConfigService;
+import com.yonge.cooleshow.biz.dal.wrapper.MusicSheetWrapper;
+import com.yonge.cooleshow.common.constant.SysConfigConstant;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.lang3.StringUtils;
+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.*;
+import springfox.documentation.annotations.ApiIgnore;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.stream.Collectors;
+
+@Slf4j
+@Validated
+@RestController
+@RequestMapping("${app-config.url.admin:}/tenantMusicSheetApplicationExtend")
+@Api(tags = "曲目应用拓展表")
+public class TenantMusicSheetApplicationExtendController {
+
+    @Autowired
+    private MusicFeignClientService musicFeignClientService;
+
+    @Autowired
+    private MusicSheetService musicSheetService;
+
+    @Autowired
+    private SysConfigService sysConfigService;
+
+    @PreAuthorize("@pcs.hasPermissions('tenantMusicSheetApplicationExtend/pageByApplication')")
+    @PostMapping({"/pageByApplication"})
+    public R<PageInfo<MusicSheetWrapper.MusicSheetApplication>> musicSheetPageByApplication(@RequestBody MusicSheetWrapper.MusicSheetApplicationQuery var1){
+        if (StringUtils.isNotBlank(var1.getSubjectType()) && var1.getMusicCategoryId() == null) {
+            Long categoryId = null;
+            if (SubjectTypeEnum.SUBJECT.name().equals(var1.getSubjectType())) {
+                categoryId= Long.parseLong(sysConfigService.findConfigValue(SysConfigConstant.TENANT_ALBUM_SUBJECT_TYPE_CATEGORY));
+            } else if (SubjectTypeEnum.ENSEMBLE.name().equals(var1.getSubjectType())) {
+                categoryId= Long.parseLong(sysConfigService.findConfigValue(SysConfigConstant.TENANT_ALBUM_ENSEMBLE_TYPE_CATEGORY));
+            } if (SubjectTypeEnum.MUSIC.name().equals(var1.getSubjectType())) {
+                categoryId = Long.parseLong(sysConfigService.findConfigValue(SysConfigConstant.TENANT_ALBUM_MUSIC_TYPE_CATEGORY));
+            }
+            var1.setMusicCategoryId(categoryId);
+        }
+
+        return R.from(musicSheetService.tenantPage(var1));
+    }
+
+
+    @PreAuthorize("@pcs.hasPermissions('tenantMusicSheetApplicationExtend/page')")
+    @PostMapping({"/page"})
+    public R<PageInfo<MusicSheetWrapper.CbsMusicSheet>> musicSheetPage(@RequestBody CbsMusicSheetWrapper.MusicSheetQuery var1){
+
+        String cbsTenantAppId = sysConfigService.findConfigValue(SysConfigConstant.CBS_TENANT_APP_ID);
+        // 更新数据
+        var1.setAddAppId(Long.parseLong(cbsTenantAppId));
+        try {
+            PageInfo<CbsMusicSheetWrapper.MusicSheet> musicSheetPageInfo = this.musicFeignClientService.musicSheetPage(var1).feignData();
+            PageInfo<MusicSheetWrapper.CbsMusicSheet> convert = musicSheetPageInfo.convert(o -> JSONObject.parseObject(JSONObject.toJSONString(o), MusicSheetWrapper.CbsMusicSheet.class));
+
+            return R.from(convert);
+        }catch (Exception e) {
+            log.error("查询曲目应用拓展表异常", e);
+            if(e instanceof BizException) {
+                throw e;
+            }
+            throw BizException.from("内容平台服务异常");
+        }
+    }
+
+    @ApiOperation(value = "修改应用扩展信息", notes = "曲目应用拓展表- 传入 MusicSheetApplicationExtendWrapper.MusicSheetApplicationExtend")
+    @PreAuthorize("@pcs.hasPermissions('tenantMusicSheetApplicationExtend/update')")
+	@PostMapping("/update")
+	public R<JSONObject> update( @RequestBody CbsMusicSheetApplicationExtendClientWrapper.AddMusicSheetApplicationExtend addMusicSheetApplicationExtend) {
+
+        String cbsTenantAppId = sysConfigService.findConfigValue(SysConfigConstant.CBS_TENANT_APP_ID);
+        // 更新数据
+        addMusicSheetApplicationExtend.setApplicationId(Long.parseLong(cbsTenantAppId));
+        try {
+
+            musicFeignClientService.musicSheetApplicationExtendUpdate(addMusicSheetApplicationExtend).feignData();
+        }catch (Exception e) {
+            log.error("修改应用扩展信息异常", e);
+            if(e instanceof BizException) {
+                throw e;
+            }
+            throw BizException.from("内容平台服务异常");
+        }
+
+        return R.defaultR();
+	}
+
+
+    @ApiOperation(value = "启/停用", notes = "曲目应用拓展表- 传入 MusicSheetApplicationExtendWrapper.MusicSheetApplicationExtend")
+    @PreAuthorize("@pcs.hasPermissions('tenantMusicSheetApplicationExtend/status')")
+    @PostMapping("/status")
+    public R<JSONObject> status(@Validated @RequestBody CbsMusicSheetApplicationExtendClientWrapper.MusicSheetApplicationExtendStatus status) {
+
+        // 更新数据
+        try {
+
+            musicFeignClientService.musicSheetApplicationExtendStatus(status).feignData();
+        }catch (Exception e) {
+            log.error("启/停用异常", e);
+            if(e instanceof BizException) {
+                throw e;
+            }
+            throw BizException.from("内容平台服务异常");
+        }
+
+        return R.defaultR();
+    }
+
+    @ApiOperation(value = "批量保存扩展信息")
+    @PreAuthorize("@pcs.hasPermissions('tenantMusicSheetApplicationExtend/saveBatch', {'BACKEND'})")
+    @PostMapping("/saveBatch")
+    public R<JSONObject> saveBatch( @RequestBody List<CbsMusicSheetApplicationExtendClientWrapper.AddMusicSheetApplicationExtend> list) {
+
+        String cbsTenantAppId = sysConfigService.findConfigValue(SysConfigConstant.CBS_TENANT_APP_ID);
+        if (CollectionUtils.isEmpty(list)) {
+            throw BizException.from("参数错误");
+        }
+        for (CbsMusicSheetApplicationExtendClientWrapper.AddMusicSheetApplicationExtend addMusicSheetApplicationExtend : list) {
+            addMusicSheetApplicationExtend.setApplicationId(Long.parseLong(cbsTenantAppId));
+        }
+        // 更新数据
+        try {
+
+            musicFeignClientService.musicSheetApplicationExtendSaveBatch(list).feignData();
+        }catch (Exception e) {
+            log.error("批量保存扩展信息异常", e);
+            if(e instanceof BizException) {
+                throw e;
+            }
+            throw BizException.from("内容平台服务异常");
+        }
+
+        return R.defaultR();
+    }
+
+
+    @ApiOperation(value = "应用分类列表")
+    @PostMapping("/categoryList")
+    public R<List<MusicSheetCategoriesWrapper.MusicSheetCategories>> categoryList(String type) {
+
+        if (StringUtils.isBlank(type)) {
+            String cbsTenantAppId = sysConfigService.findConfigValue(SysConfigConstant.CBS_TENANT_APP_ID);
+
+            return R.from(musicFeignClientService.queryTreeByAppId(Long.parseLong(cbsTenantAppId)).feignData());
+        }
+
+        if (StringUtils.isBlank(type)) {
+            return null;
+        }
+        Long categoryId = null;
+        if (SubjectTypeEnum.SUBJECT.name().equals(type)) {
+            categoryId= Long.parseLong(sysConfigService.findConfigValue(SysConfigConstant.TENANT_ALBUM_SUBJECT_TYPE_CATEGORY));
+        } else if (SubjectTypeEnum.ENSEMBLE.name().equals(type)) {
+            categoryId= Long.parseLong(sysConfigService.findConfigValue(SysConfigConstant.TENANT_ALBUM_ENSEMBLE_TYPE_CATEGORY));
+        } if (SubjectTypeEnum.MUSIC.name().equals(type)) {
+            categoryId = Long.parseLong(sysConfigService.findConfigValue(SysConfigConstant.TENANT_ALBUM_MUSIC_TYPE_CATEGORY));
+        }
+
+        return R.from(musicFeignClientService.getChildTreeById(categoryId).feignData().getMusicSheetCategoriesList());
+    }
+
+    @ApiOperation(value = "删除应用扩展信息", notes = "曲目应用拓展表- 传入 MusicSheetApplicationExtendWrapper.MusicSheetApplicationExtend")
+    @PreAuthorize("@pcs.hasPermissions('tenantMusicSheetApplicationExtend/del')")
+    @PostMapping("/del/{id}")
+    public R<JSONObject> update(@PathVariable Long id) {
+
+        // 更新数据
+        return R.from(musicFeignClientService.musicSheetApplicationExtendDel(id).feignData());
+
+    }
+
+}

+ 8 - 0
cooleshow-app/src/main/java/com/yonge/cooleshow/student/controller/MusicSheetController.java

@@ -304,7 +304,15 @@ public class MusicSheetController extends BaseController {
         if (userId == null) {
             return failed("用户信息不存在");
         }
+        Student student = studentService.getById(userId);
+        if (student == null) {
+            return failed("用户信息不存在");
+        }
         StudentMusicSheetSearch search = new StudentMusicSheetSearch();
+
+        if (student.getTenantId() !=null && student.getTenantId()>0) {
+            search.setProviderType(SourceTypeEnum.TENANT);
+        }
         search.setStudentId(userId);
         search.setState(YesOrNoEnum.YES);
         search.setAuditStatus(null);

+ 22 - 0
cooleshow-common/src/main/java/com/yonge/cooleshow/common/constant/SysConfigConstant.java

@@ -460,4 +460,26 @@ public interface SysConfigConstant {
      * 默认曲目所属人
      */
     String DEFAULT_MUSIC_USER_ID = "default_music_user_id";
+
+    /**
+     * 内容平台机构应用ID
+     */
+    String CBS_TENANT_APP_ID = "cbs_tenant_app_id";
+
+    /**
+     * 机构专辑声部云练分类对应
+     */
+    String TENANT_ALBUM_SUBJECT_TYPE_CATEGORY  = "tenant_album_subject_type_category";
+
+
+    /**
+     * 机构专辑合奏云练分类对应
+     */
+    String TENANT_ALBUM_ENSEMBLE_TYPE_CATEGORY = "tenant_album_ensemble_type_category";
+
+
+    /**
+     * 机构专辑独奏云练分类对应
+     */
+    String TENANT_ALBUM_MUSIC_TYPE_CATEGORY = "tenant_album_music_type_category";
 }

+ 11 - 3
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/MusicSheetDao.java

@@ -196,11 +196,11 @@ public interface MusicSheetDao extends BaseMapper<MusicSheet> {
 
     void updateBatchByCbsId(@Param("vos") List<CbsMusicSheetApplicationExtendWrapper.MusicSheetApplicationExtend> updateMusicScore);
 
-    void batchInsert(@Param("vos") List<CbsMusicSheetApplicationExtendWrapper.MusicSheetApplicationExtend> addMusicSheet);
+//    void batchInsert(@Param("vos") List<CbsMusicSheetApplicationExtendWrapper.MusicSheetApplicationExtend> addMusicSheet);
 
-    void batchEnable(@Param("ids") String cbsMusicSheetIds, @Param("status") Boolean status);
+    void batchEnable(@Param("ids") String cbsMusicSheetIds, @Param("status") Boolean status, @Param("tenantFlag") boolean tenantFlag);
 
-    void batchDel(@Param("ids") String cbsMusicSheetIds);
+    void batchDel(@Param("ids") String cbsMusicSheetIds, @Param("tenantFlag") boolean tenantFlag);
 
     IPage<CbsMusicSheetExtendWrapper.MusicSheetExtend> personOwnerList(@Param("page") IPage<CbsMusicSheetExtendWrapper.MusicSheetExtend> page,
                                                                  @Param("param") CbsMusicSheetExtendWrapper.MusicSheetExtendQuery query);
@@ -215,4 +215,12 @@ public interface MusicSheetDao extends BaseMapper<MusicSheet> {
     IPage<MusicSheet> selectSyncPage(Page<Object> objectPage);
 
     IPage<MusicSheetVo> queryTenantRelatedList(@Param("page") IPage<Object> page, @Param("queryInfo") MusicSheetRelatedQueryInfo queryInfo);
+
+    void updateTenantByCbsId(@Param("item") CbsMusicSheetApplicationExtendWrapper.MusicSheetApplicationExtend extend);
+
+    void updatePlatformByCbsId(@Param("item") CbsMusicSheetApplicationExtendWrapper.MusicSheetApplicationExtend extend);
+
+    void tenantInsert(@Param("item") CbsMusicSheetApplicationExtendWrapper.MusicSheetApplicationExtend extend);
+
+    void platformInsert(@Param("item") CbsMusicSheetApplicationExtendWrapper.MusicSheetApplicationExtend extend);
 }

+ 12 - 2
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/MusicSheetSearch.java

@@ -1,12 +1,12 @@
 package com.yonge.cooleshow.biz.dal.dto.search;
 
-import com.dayaedu.cbs.common.enums.music.EDefaultScoreType;
 import com.yonge.cooleshow.biz.dal.enums.*;
 import com.yonge.cooleshow.common.enums.YesOrNoEnum;
 import com.yonge.toolset.base.page.QueryInfo;
 import com.yonge.toolset.base.util.StringUtil;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
 
@@ -20,9 +20,19 @@ import java.util.stream.Collectors;
  * @author: liujunchi
  * @date: 2022-03-30
  */
+@Data
 @ApiModel(value = "MusicSheetSearch对象", description = "曲目表查询对象")
 public class MusicSheetSearch  extends QueryInfo{
 
+
+
+    @ApiModelProperty(value = "客户端状态曲目状态(0:停用,1:启用)")
+    private Boolean clientState;
+
+    @ApiModelProperty(value = "内容平台状态曲目状态(0:停用,1:启用)")
+    private Boolean  platformState;
+
+
     @ApiModelProperty(value = "曲目音频类型 MP3:mp3, MIDI:midi,")
     private AudioTypeEnum audioType;
 
@@ -46,7 +56,7 @@ public class MusicSheetSearch  extends QueryInfo{
 
 
     @ApiModelProperty(value = "提供方 TENANT 机构 PLATFORM 平台")
-    private SourceTypeEnum providerType;
+    private SourceTypeEnum providerType = SourceTypeEnum.PLATFORM;
 
 
     @ApiModelProperty("曲目状态(0:停用,1:启用))")

+ 45 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/MusicSheet.java

@@ -69,7 +69,7 @@ public class MusicSheet implements Serializable {
 
     @TableField("provider_type_")
     @ApiModelProperty(value = "提供方 TENANT 机构 PLATFORM 平台")
-    private SourceTypeEnum providerType;
+    private String providerType;
 
     @NotBlank(message = "艺术家不能为空!")
     @Size(max = 32, message = "艺术家长度不能超过32位!")
@@ -138,6 +138,16 @@ public class MusicSheet implements Serializable {
 	@ApiModelProperty(value = "曲目状态(0:停用,1:启用)")
 	private YesOrNoEnum state;
 
+
+    @TableField("client_state_")
+    @ApiModelProperty(value = "客户端状态曲目状态(0:停用,1:启用)")
+    private Boolean clientState;
+
+
+    @TableField("platform_state_")
+    @ApiModelProperty(value = "内容平台状态曲目状态(0:停用,1:启用)")
+    private Boolean  platformState;
+
 	@TableField("reason_")
 	@ApiModelProperty(value = "曲目停用原因")
 	private String reason;
@@ -272,6 +282,40 @@ public class MusicSheet implements Serializable {
 	@TableField("is_all_subject_")
 	private Boolean isAllSubject;
 
+
+    @TableField("tenant_sort_number_")
+    @ApiModelProperty(value = "排序号")
+    private Integer tenantSortNumber;  //排序号
+
+
+    @TableField("tenant_state_")
+    @ApiModelProperty(value = "曲目状态(0:停用,1:启用)")
+    private Boolean tenantState;
+
+
+    @TableField("tenant_notation_")
+    @ApiModelProperty("是否可以转简谱(0:否,1:是)")
+    private Boolean tenantNotation;
+
+
+    @TableField("tenant_category_id_")
+    @ApiModelProperty("分类")
+    private String tenantCategoryId;
+
+
+    @ApiModelProperty("谱面类型")
+    @TableField("tenant_score_type_")
+    private String tenantScoreType;
+
+    @TableField("tenant_del_flag_")
+    @ApiModelProperty(value = "假删除标识 0:未删除 1:已删除")
+    private Boolean tenantDelFlag;
+
+
+    @TableField("upload_time_")
+    @ApiModelProperty(value = "机构曲目同步上传时间")
+    private Date uploadTime;  //上传时间
+
 	public ChargeTypeEnum getChargeType() {
 		if (Objects.isNull(this.chargeType) && StringUtils.isNotEmpty(getPaymentType())) {
 

+ 2 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/MusicSheetService.java

@@ -10,7 +10,6 @@ import com.yonge.cooleshow.biz.dal.dto.ReasonDto;
 import com.yonge.cooleshow.biz.dal.dto.req.OrderReq;
 import com.yonge.cooleshow.biz.dal.dto.search.*;
 import com.yonge.cooleshow.biz.dal.entity.MusicSheet;
-import com.yonge.cooleshow.biz.dal.entity.MusicSheetAccompaniment;
 import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
 import com.yonge.cooleshow.biz.dal.enums.OrderTypeEnum;
 import com.yonge.cooleshow.biz.dal.vo.*;
@@ -418,4 +417,6 @@ public interface MusicSheetService extends IService<MusicSheet> {
     List<CbsMusicSheetWrapper.MusicSheetApplication> queryCbsMusicSheetApplication(CbsMusicSheetWrapper.MusicSheetApplicationQuery query);
 
     IPage<MusicSheetVo> queryTenantRelatedList(IPage<Object> page, MusicSheetRelatedQueryInfo queryInfo);
+
+    com.microsvc.toolkit.common.response.paging.PageInfo<MusicSheetWrapper.MusicSheetApplication> tenantPage(CbsMusicSheetWrapper.MusicSheetApplicationQuery query);
 }

+ 81 - 45
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CbsMusicSheetServiceImpl.java

@@ -17,7 +17,10 @@ import com.yonge.cooleshow.biz.dal.service.SubjectService;
 import com.yonge.cooleshow.biz.dal.service.SysConfigService;
 import com.yonge.cooleshow.common.constant.SysConfigConstant;
 import com.yonge.toolset.base.exception.BizException;
+import com.yonge.toolset.payment.util.DistributedLock;
 import org.apache.commons.lang3.StringUtils;
+import org.redisson.api.RLock;
+import org.redisson.api.RedissonClient;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -26,6 +29,8 @@ import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
 import java.util.List;
+import java.util.Objects;
+import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
 
 @Service
@@ -45,54 +50,68 @@ public class CbsMusicSheetServiceImpl implements CbsMusicSheetService {
     @Resource
     private OpenFeignClientConfigProperties openFeignClientConfigProperties;
 
+    @Autowired
+    private RedissonClient redissonClient;
+
+
     @Override
-    @Transactional(rollbackFor = Exception.class)
+//    @Transactional(rollbackFor = Exception.class)
     public Boolean saveApplicationExtend(List<CbsMusicSheetApplicationExtendWrapper.MusicSheetApplicationExtend> addMusicSheet) {
         if (com.baomidou.mybatisplus.core.toolkit.CollectionUtils.isEmpty(addMusicSheet)) {
             throw new BizException("请选择曲目信息");
         }
-        String configValue = sysConfigService.findConfigValue(SysConfigConstant.DEFAULT_MUSIC_USER_ID);
+        String defaultMusicUserId = sysConfigService.findConfigValue(SysConfigConstant.DEFAULT_MUSIC_USER_ID);
+        String cbsTenantAppId = sysConfigService.findConfigValue(SysConfigConstant.CBS_TENANT_APP_ID);
         Long userId = 3L;
-        if (StringUtils.isNotBlank(configValue)) {
-            userId = Long.parseLong(configValue);
+        if (StringUtils.isNotBlank(defaultMusicUserId)) {
+            userId = Long.parseLong(defaultMusicUserId);
         }
 
-        List<Long> cbsMusicSheetIds = addMusicSheet.stream().map(e -> e.getMusicSheetId()).collect(Collectors.toList());
         for (CbsMusicSheetApplicationExtendWrapper.MusicSheetApplicationExtend extend : addMusicSheet) {
+            //是否合奏曲目
             CbsMusicSheetApiWrapper.MusicSheetUpdate musicSheetUpdate = extend.getMusicSheetUpdate();
-            if(StringUtils.isNotBlank(musicSheetUpdate.getSubjectIds())) {
-                List<Subject> subjectIds = subjectService.getDao().getByCbsSubjectIds(musicSheetUpdate.getSubjectIds());
-                if (CollectionUtils.isNotEmpty(subjectIds)) {
-                    musicSheetUpdate.setSubjectIds(subjectIds.stream().map(e -> e.getId().toString()).collect(Collectors.joining(",")));
-                }
-            }
-            // 如果所属人存在,判断是否是当前应用的曲目 不是,设置默认所属用户
-            if (musicSheetUpdate.getUserId() != null && musicSheetUpdate.getUserApplicationId() !=null) {
-                if (musicSheetUpdate.getUserApplicationId().equals(Long.parseLong(openFeignClientConfigProperties.getAppId()))) {
-                    musicSheetUpdate.setUserId(extend.getMusicSheetUpdate().getUserId());
+
+            Long finalUserId = userId;
+            RLock lock = redissonClient.getLock("musicSheetUpdate:" + musicSheetUpdate.getId());
+            try {
+                if (lock.tryLock(10, 10, TimeUnit.SECONDS)) {
+                    updateMusicDataFormat(musicSheetUpdate, finalUserId);
+
+                    //需要修改的曲目
+                    List<MusicSheet> musicSheets = musicSheetService.lambdaQuery()
+                        .in(MusicSheet::getCbsMusicSheetId, extend.getMusicSheetId())
+                        .list();
+                    if (com.baomidou.mybatisplus.core.toolkit.CollectionUtils.isNotEmpty(musicSheets)) {
+                        // 判断是改机构数据,还是平台数据
+                        if (extend.getApplicationId() != null && cbsTenantAppId.equals(extend.getApplicationId().toString())) {
+
+                            musicSheetService.getDao().updateTenantByCbsId(extend);
+                        } else {
+                            musicSheetService.getDao().updatePlatformByCbsId(extend);
+                        }
+                    } else {
+                        if (extend.getApplicationId() != null && cbsTenantAppId.equals(extend.getApplicationId().toString())) {
+
+                            musicSheetService.getDao().tenantInsert(extend);
+                        } else {
+                            musicSheetService.getDao().platformInsert(extend);
+                        }
+                    }
                 } else {
-                    musicSheetUpdate.setUserId(userId);
+                    throw new BizException("获取锁失败");
+                }
+            } catch (BizException e) {
+                log.error("BizException error lockName : musicSheetUpdate:" + musicSheetUpdate.getId(), e);
+                throw e;
+            }  catch (Exception e) {
+                log.error("saveApplicationExtend error lockName : musicSheetUpdate:" + musicSheetUpdate.getId(), e);
+            } finally {
+                if (lock.getHoldCount() != 0 && lock.isHeldByCurrentThread()) {
+                    lock.unlock();
                 }
-            } else {
-                musicSheetUpdate.setUserId(userId);
             }
         }
-        //需要修改的曲目
-        List<MusicSheet> musicSheets = musicSheetService.lambdaQuery()
-                .in(MusicSheet::getCbsMusicSheetId, cbsMusicSheetIds)
-                .list();
-        if (com.baomidou.mybatisplus.core.toolkit.CollectionUtils.isNotEmpty(musicSheets)){
-            List<Long> collect = musicSheets.stream().map(e -> e.getCbsMusicSheetId()).collect(Collectors.toList());
-            //获取需要修改的曲目
-            List<CbsMusicSheetApplicationExtendWrapper.MusicSheetApplicationExtend> updateMusicScore =
-                    addMusicSheet.stream().filter(e -> collect.contains(e.getMusicSheetId())).collect(Collectors.toList());
-            musicSheetService.getDao().updateBatchByCbsId(updateMusicScore);
-            //排除已经存在的曲目
-            addMusicSheet = addMusicSheet.stream().filter(e -> !collect.contains(e.getMusicSheetId())).collect(Collectors.toList());
-        }
-        if(CollectionUtils.isNotEmpty(addMusicSheet)){
-            musicSheetService.getDao().batchInsert(addMusicSheet);
-        }
+
         return true;
     }
 
@@ -103,7 +122,13 @@ public class CbsMusicSheetServiceImpl implements CbsMusicSheetService {
         if (updateMusicSheet.getStatus() == null){
             throw new BizException("请选择状态");
         }
-        musicSheetService.getDao().batchEnable(updateMusicSheet.getIds(),updateMusicSheet.getStatus());
+
+        String cbsTenantAppId = sysConfigService.findConfigValue(SysConfigConstant.CBS_TENANT_APP_ID);
+        if (updateMusicSheet.getApplicationId() != null && cbsTenantAppId.equals(updateMusicSheet.getApplicationId().toString())) {
+            musicSheetService.getDao().batchEnable(updateMusicSheet.getIds(),updateMusicSheet.getStatus(),true);
+        } else {
+            musicSheetService.getDao().batchEnable(updateMusicSheet.getIds(),updateMusicSheet.getStatus(),false);
+        }
         return true;
     }
 
@@ -111,7 +136,13 @@ public class CbsMusicSheetServiceImpl implements CbsMusicSheetService {
         if (musicSheetApplicationExtendDel == null || StringUtils.isEmpty(musicSheetApplicationExtendDel.getIds())){
             throw new BizException("请选择曲目");
         }
-        musicSheetService.getDao().batchDel(musicSheetApplicationExtendDel.getIds());
+
+        String cbsTenantAppId = sysConfigService.findConfigValue(SysConfigConstant.CBS_TENANT_APP_ID);
+        if (musicSheetApplicationExtendDel.getApplicationId() != null && cbsTenantAppId.equals(musicSheetApplicationExtendDel.getApplicationId().toString())) {
+            musicSheetService.getDao().batchDel(musicSheetApplicationExtendDel.getIds(),true);
+        } else {
+            musicSheetService.getDao().batchDel(musicSheetApplicationExtendDel.getIds(),false);
+        }
         return true;
     }
 
@@ -133,19 +164,26 @@ public class CbsMusicSheetServiceImpl implements CbsMusicSheetService {
     }
 
     public boolean updateMusicSheet(CbsMusicSheetApiWrapper.MusicSheetUpdate musicSheetUpdate) {
-        if(StringUtils.isNotBlank(musicSheetUpdate.getSubjectIds())) {
-            List<Subject> subjectIds = subjectService.getDao().getByCbsSubjectIds(musicSheetUpdate.getSubjectIds());
-            if (CollectionUtils.isNotEmpty(subjectIds)) {
-                musicSheetUpdate.setSubjectIds(subjectIds.stream().map(e -> e.getId().toString()).collect(Collectors.joining(",")));
-            }
-        }
         // 如果所属人存在,判断是否是当前应用的曲目 不是,设置默认所属用户
         String configValue = sysConfigService.findConfigValue(SysConfigConstant.DEFAULT_MUSIC_USER_ID);
         Long userId = 3L;
         if (StringUtils.isNotBlank(configValue)) {
             userId = Long.parseLong(configValue);
         }
-        if (musicSheetUpdate.getUserId() != null && musicSheetUpdate.getUserApplicationId() !=null) {
+        updateMusicDataFormat(musicSheetUpdate, userId);
+        musicSheetService.getDao().updateMusicSheet(musicSheetUpdate);
+        return true;
+    }
+
+    private void updateMusicDataFormat(CbsMusicSheetApiWrapper.MusicSheetUpdate musicSheetUpdate,Long userId) {
+        if(StringUtils.isNotBlank(musicSheetUpdate.getSubjectIds())) {
+            List<Subject> subjectIds = subjectService.getDao().getByCbsSubjectIds(musicSheetUpdate.getSubjectIds());
+            if (CollectionUtils.isNotEmpty(subjectIds)) {
+                musicSheetUpdate.setSubjectIds(subjectIds.stream().map(e -> e.getId().toString()).collect(Collectors.joining(",")));
+            }
+        }
+
+        if (musicSheetUpdate.getUserId() != null && musicSheetUpdate.getUserApplicationId() != null) {
             if (musicSheetUpdate.getUserApplicationId().equals(Long.parseLong(openFeignClientConfigProperties.getAppId()))) {
                 musicSheetUpdate.setUserId(musicSheetUpdate.getUserId());
             } else {
@@ -154,7 +192,5 @@ public class CbsMusicSheetServiceImpl implements CbsMusicSheetService {
         } else {
             musicSheetUpdate.setUserId(userId);
         }
-        musicSheetService.getDao().updateMusicSheet(musicSheetUpdate);
-        return true;
     }
 }

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

@@ -687,6 +687,8 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao, MusicSheet
                     }
                 }
             }
+            detail.setNotation(detail.getTenantNotation() !=null&& detail.getTenantNotation()?YesOrNoEnum.YES:YesOrNoEnum.NO);
+            detail.setScoreType(detail.getTenantScoreType());
         }
         return detail;
     }
@@ -925,6 +927,7 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao, MusicSheet
     @Override
     public IPage<MusicSheetVo> myMusic(IPage<MusicSheetVo> page, StudentMusicSheetSearch query) {
         query.setDelFlag(null);
+        query.setProviderType(SourceTypeEnum.PLATFORM);
 
         List<MusicSheetVo> records = baseMapper.selectMyMusicPage(page, query);
         //设置内容平台曲目信息
@@ -1478,7 +1481,7 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao, MusicSheet
         addMusicSheetApplicationExtend.setMusicTagIds(musicSheet.getMusicTag());
         addMusicSheetApplicationExtend.setMusicPrice(musicSheet.getMusicPrice());
         addMusicSheetApplicationExtend.setPaymentType(musicSheet.getPaymentType());
-        addMusicSheetApplicationExtend.setAvailableType(musicSheet.getProviderType() !=null&& musicSheet.getProviderType()==SourceTypeEnum.TENANT
+        addMusicSheetApplicationExtend.setAvailableType(StringUtils.isNotBlank(musicSheet.getProviderType())&& musicSheet.getProviderType().equals("TENANT")
             ?EMusicAvailableType.ORG:EMusicAvailableType.PLATFORM);
         addMusicSheetApplicationExtend.setExquisiteFlag(musicSheet.getExquisiteFlag() == YesOrNoEnum.YES);
         addMusicSheetApplicationExtend.setSortNo(musicSheet.getSortNumber());
@@ -1859,6 +1862,7 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao, MusicSheet
 
             MusicSheetSearch musicSheetSearch = new MusicSheetSearch();
             musicSheetSearch.setMusicSheetIdlist(musicIds);
+            musicSheetSearch.setProviderType(SourceTypeEnum.TENANT);
             IPage<MusicSheetVo> musicSheetVoIPage = selectPage(PageUtil.getPage(queryInfo), musicSheetSearch);
             List<MusicSheetVo> records = musicSheetVoIPage.getRecords();
             if (CollectionUtils.isNotEmpty(records)) {
@@ -1977,7 +1981,7 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao, MusicSheet
         musicSheetAudit.setCreateBy(userId);
         musicSheetAudit.setUpdateBy(userId);
         musicSheetAudit.setSubmitAuditTime(new Date());
-        musicSheetAudit.setProviderType(SourceTypeEnum.TEACHER);
+        musicSheetAudit.setProviderType(SourceTypeEnum.PLATFORM.getCode());
         musicSheetAudit.setSourceType(SourceTypeEnum.TEACHER);
         musicSheetAudit.setAuditStatus(AuthStatusEnum.DOING);
         musicSheetAudit.setState(YesOrNoEnum.NO);
@@ -2202,7 +2206,7 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao, MusicSheet
     }
     @Override
     public void initMusicSheetDetailVo(CbsMusicSheetWrapper.AddMusicSheet addMusicSheet, MusicSheetDetailVo musicSheetAudit) {
-        musicSheetAudit.setProviderType(SourceTypeEnum.TEACHER);
+        musicSheetAudit.setProviderType(SourceTypeEnum.PLATFORM.getCode());
         musicSheetAudit.setSourceType(SourceTypeEnum.TEACHER);
         musicSheetAudit.setMusicSheetName(addMusicSheet.getName());
         musicSheetAudit.setMusicSubject(addMusicSheet.getSubjectIds());
@@ -2373,6 +2377,50 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao, MusicSheet
         return musicSheetDao.queryTenantRelatedList(page,queryInfo);
     }
 
+    @Override
+    public PageInfo<MusicSheetWrapper.MusicSheetApplication> tenantPage(CbsMusicSheetWrapper.MusicSheetApplicationQuery query) {
+        String cbsTenantAppId = sysConfigService.findConfigValue(SysConfigConstant.CBS_TENANT_APP_ID);
+        query.setApplicationId(Long.parseLong(cbsTenantAppId));
+        try {
+            PageInfo<CbsMusicSheetWrapper.MusicSheetApplication> feignedData = this.musicFeignClientService.musicSheetPageByApplication(query).feignData();
+            PageInfo<MusicSheetWrapper.MusicSheetApplication> convert = feignedData.convert(o -> JSON.parseObject(JSON.toJSONString(o),MusicSheetWrapper.MusicSheetApplication.class));
+
+            List<MusicSheetWrapper.MusicSheetApplication> rows = convert.getRows();
+            if (CollectionUtils.isEmpty(rows)) {
+                return convert;
+            }
+            // 查询曲目对应的业务ID
+            List<Long> cbsMusicSheetIds = rows.stream().map(CbsMusicSheetWrapper.MusicSheetApplication::getId).collect(Collectors.toList());
+            Map<Long, MusicSheet> mapByCbsIds = getMapByCbsIds(cbsMusicSheetIds);
+            rows = rows.stream().map(o->{
+                MusicSheet musicSheet = mapByCbsIds.get(o.getId());
+                if (musicSheet != null) {
+                    o.setBizId(musicSheet.getId());
+                    return o;
+                }
+                return null;
+            }).filter(Objects::nonNull).collect(Collectors.toList());
+
+
+            convert.setRows(rows);
+            return convert;
+        } catch (Exception e) {
+            log.error("查询曲目应用拓展表异常", e);
+            if(e instanceof com.microsvc.toolkit.common.webportal.exception.BizException) {
+                throw e;
+            }
+            throw com.microsvc.toolkit.common.webportal.exception.BizException.from("内容平台服务异常");
+        }
+    }
+
+    private Map<Long,MusicSheet> getMapByCbsIds(List<Long> cbsMusicSheetIds) {
+        if (CollectionUtils.isEmpty(cbsMusicSheetIds)) {
+            return new HashMap<>();
+        }
+        List<MusicSheet> musicSheets = this.lambdaQuery().in(MusicSheet::getCbsMusicSheetId, cbsMusicSheetIds).list();
+        return musicSheets.stream().collect(Collectors.toMap(MusicSheet::getCbsMusicSheetId,o->o, (o1,o2)->o2));
+    }
+
 
     private void syncMusicSheet(MusicSheet record, Date date) {
         List<MusicSheetAccompaniment> list = musicSheetAccompanimentService.lambdaQuery().eq(MusicSheetAccompaniment::getMusicSheetId, record.getId()).list();
@@ -2528,7 +2576,7 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao, MusicSheet
         addMusicSheetApplicationExtend.setPaymentType(from.getPaymentType());
         addMusicSheetApplicationExtend.setTopFlag(from.getTopFlag() !=null && from.getTopFlag() == YesOrNoEnum.YES);
         addMusicSheetApplicationExtend.setExquisiteFlag(from.getExquisiteFlag() !=null && from.getExquisiteFlag() == YesOrNoEnum.YES);
-        addMusicSheetApplicationExtend.setAvailableType(from.getProviderType() !=null && from.getProviderType() == SourceTypeEnum.TENANT?EMusicAvailableType.ORG:EMusicAvailableType.PLATFORM);
+        addMusicSheetApplicationExtend.setAvailableType(StringUtils.isNotBlank(from.getProviderType())&& from.getProviderType().equals(SourceTypeEnum.TENANT.getCode())?EMusicAvailableType.ORG:EMusicAvailableType.PLATFORM);
         addMusicSheetApplicationExtend.setMusicTagIds(from.getMusicTag());
         addMusicSheetApplicationExtend.setMusicPrice(from.getMusicPrice());
         addMusicSheet.setAddMusicSheetApplicationExtend(Lists.newArrayList(addMusicSheetApplicationExtend));

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

@@ -1,28 +1,29 @@
 package com.yonge.cooleshow.biz.dal.service.impl;
 
-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.beust.jcommander.internal.Lists;
 import com.dayaedu.cbs.common.enums.school.ECourseType;
 import com.dayaedu.cbs.common.enums.school.EKnowledgeType;
 import com.dayaedu.cbs.common.enums.school.EMaterialType;
 import com.dayaedu.cbs.openfeign.client.CoursewareFeignService;
+import com.dayaedu.cbs.openfeign.client.MusicFeignClientService;
 import com.dayaedu.cbs.openfeign.wrapper.courseware.CbsCourseTypeWrapper;
 import com.dayaedu.cbs.openfeign.wrapper.courseware.CbsLessonCoursewareDetailWrapper;
 import com.dayaedu.cbs.openfeign.wrapper.courseware.CbsLessonCoursewareWrapper;
-import com.dayaedu.cbs.openfeign.wrapper.courseware.CbsMaterialRefWrapper;
 import com.dayaedu.cbs.openfeign.wrapper.music.CbsMusicSheetWrapper;
+import com.dayaedu.cbs.openfeign.wrapper.music.MusicSheetCategoriesWrapper;
 import com.microsvc.toolkit.common.response.paging.PageInfo;
 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.TenantAlbumMusicMapper;
 import com.yonge.cooleshow.biz.dal.service.*;
-import com.yonge.cooleshow.biz.dal.service.cbs.CbsMusicScoreService;
 import com.yonge.cooleshow.biz.dal.wrapper.LessonCoursewareDetailWrapper;
 import com.yonge.cooleshow.biz.dal.wrapper.LessonCoursewareWrapper;
 import com.yonge.cooleshow.biz.dal.wrapper.TenantAlbumMusicWrapper;
+import com.yonge.cooleshow.common.constant.SysConfigConstant;
 import com.yonge.toolset.base.exception.BizException;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections.CollectionUtils;
@@ -33,7 +34,6 @@ import org.springframework.stereotype.Service;
 
 import java.util.*;
 import java.util.stream.Collectors;
-import java.util.stream.Stream;
 
 /**
  * 机构专辑曲目
@@ -57,6 +57,12 @@ public class TenantAlbumMusicServiceImpl extends ServiceImpl<TenantAlbumMusicMap
     private MusicTagService musicTagService;
 
     @Autowired
+    private MusicFeignClientService musicFeignClientService;
+
+    @Autowired
+    private SysConfigService sysConfigService;
+
+    @Autowired
     private TenantAlbumMusicMapper tenantAlbumMusicMapper;
 
     @Autowired
@@ -99,6 +105,20 @@ public class TenantAlbumMusicServiceImpl extends ServiceImpl<TenantAlbumMusicMap
                                                                              TenantAlbumMusicWrapper.StudentTenantAlbumMusicQuery query) {
         List<TenantAlbumMusicWrapper.StudentTenantAlbumMusic> musicSheets = new ArrayList<>();
         if (query.getSubjectType() != SubjectTypeEnum.COURSEWARE) {
+            // 如果分类不为空,查询分类下的曲目
+            List<Long> categoryIds = new ArrayList<>();
+            if (query.getCategoryId() !=null) {
+            } else {
+                Long categoryId = getCategoryId(query.getSubjectType().name());
+                query.setCategoryId(categoryId);
+            }
+            MusicSheetCategoriesWrapper.MusicSheetCategories musicSheetCategories = musicFeignClientService.getChildTreeById(query.getCategoryId()).feignData();
+
+            categoryIds.add(query.getCategoryId());
+            if (musicSheetCategories !=null) {
+                formatCategory(categoryIds, musicSheetCategories.getMusicSheetCategoriesList());
+            }
+            query.setCategoryIds(categoryIds);
 
             musicSheets = tenantAlbumMusicMapper.selectPage(page, query);
             if (CollectionUtils.isEmpty(musicSheets)) {
@@ -207,6 +227,16 @@ public class TenantAlbumMusicServiceImpl extends ServiceImpl<TenantAlbumMusicMap
         return page.setRecords(musicSheets);
     }
 
+    private void formatCategory(List<Long> categoryIds, List<MusicSheetCategoriesWrapper.MusicSheetCategories> musicSheetCategoriesList) {
+        if (CollectionUtils.isEmpty(musicSheetCategoriesList)) {
+            return;
+        }
+        for (MusicSheetCategoriesWrapper.MusicSheetCategories musicSheetCategories : musicSheetCategoriesList) {
+            categoryIds.add(musicSheetCategories.getId());
+            formatCategory(categoryIds,musicSheetCategories.getMusicSheetCategoriesList());
+        }
+    }
+
     /**
      * 添加
      * @param tenantAlbumMusic TenantAlbumMusicWrapper.TenantAlbumMusic
@@ -239,13 +269,13 @@ public class TenantAlbumMusicServiceImpl extends ServiceImpl<TenantAlbumMusicMap
         TenantAlbumMusicWrapper.TenantAlbumMusicSelectData data = new TenantAlbumMusicWrapper.TenantAlbumMusicSelectData();
 
         // 获取学生的专辑
-        List<Long> albumIds = userTenantAlbumRecordService.getUseAlbumIdsByUserId(query.getUserId(), ClientEnum.STUDENT);
-        if (CollectionUtils.isEmpty(albumIds)) {
-            return data;
-        }
+//        List<Long> albumIds = userTenantAlbumRecordService.getUseAlbumIdsByUserId(query.getUserId(), ClientEnum.STUDENT);
+//        if (CollectionUtils.isEmpty(albumIds)) {
+//            return data;
+//        }
 
         // 专辑曲目关联数据
-        List<TenantAlbumMusic> list = tenantAlbumMusicMapper.getList(query,albumIds);
+        List<TenantAlbumMusic> list = tenantAlbumMusicMapper.getList(query, Lists.newArrayList(query.getTenantAlbumId()));
         if (CollectionUtils.isEmpty(list)) {
             return data;
         }
@@ -277,32 +307,46 @@ public class TenantAlbumMusicServiceImpl extends ServiceImpl<TenantAlbumMusicMap
             return data;
         }
 
+        // 获取曲目所有分类
+        List<Long> categoryIds = musicSheets.stream().map(MusicSheet::getTenantCategoryId)
+            .filter(StringUtils::isNotBlank).map(Long::parseLong).distinct().collect(Collectors.toList());
+
+
+        // 查询分类
+        MusicSheetCategoriesWrapper.MusicSheetCategories musicSheetCategories = musicFeignClientService.getChildTreeById(getCategoryId(query.getSubjectType().name())).feignData();
+
+        // 过滤掉不存在的分类
+        List<Long> ids = new ArrayList<>();
+        getCategory(musicSheetCategories.getMusicSheetCategoriesList(),categoryIds,ids);
+        filterCategory(musicSheetCategories.getMusicSheetCategoriesList(),ids);
+        data.setCategoyList(musicSheetCategories.getMusicSheetCategoriesList());
+
         // 类型
-        List<Long> typeIds =list.stream().map(TenantAlbumMusic::getType).distinct().filter(StringUtils::isNotBlank)
-                .filter(NumberUtil::isNumber).map(Long::valueOf).collect(Collectors.toList());
-        if (!typeIds.isEmpty()) {
-            List<TenantAlbumCategoryDetail> typeList = tenantAlbumCategoryDetailService.lambdaQuery()
-                    .in(TenantAlbumCategoryDetail::getId, typeIds).list();
-            List<String> typeNameList = typeList.stream()
-                    .map(TenantAlbumCategoryDetail::getValue).collect(Collectors.toList());
-            data.setTypes(typeNameList);
-            data.setTypeList(typeList);
-        } else {
-            data.setTypes(new ArrayList<>());
-        }
-        // 级别
-        List<Long> levelIds =list.stream().map(TenantAlbumMusic::getLevel).distinct().filter(StringUtils::isNotBlank)
-                .filter(NumberUtil::isNumber).map(Long::valueOf).collect(Collectors.toList());
-        if (!levelIds.isEmpty()) {
-            List<TenantAlbumCategoryDetail> levelList = tenantAlbumCategoryDetailService.lambdaQuery()
-                    .in(TenantAlbumCategoryDetail::getId, levelIds).list();
-            List<String> levelNameList = levelList.stream()
-                    .map(TenantAlbumCategoryDetail::getValue).collect(Collectors.toList());
-            data.setLevels(levelNameList);
-            data.setLevelList(levelList);
-        } else {
-            data.setLevels(new ArrayList<>());
-        }
+//        List<Long> typeIds =list.stream().map(TenantAlbumMusic::getType).distinct().filter(StringUtils::isNotBlank)
+//                .filter(NumberUtil::isNumber).map(Long::valueOf).collect(Collectors.toList());
+//        if (!typeIds.isEmpty()) {
+//            List<TenantAlbumCategoryDetail> typeList = tenantAlbumCategoryDetailService.lambdaQuery()
+//                    .in(TenantAlbumCategoryDetail::getId, typeIds).list();
+//            List<String> typeNameList = typeList.stream()
+//                    .map(TenantAlbumCategoryDetail::getValue).collect(Collectors.toList());
+//            data.setTypes(typeNameList);
+//            data.setTypeList(typeList);
+//        } else {
+//            data.setTypes(new ArrayList<>());
+//        }
+//        // 级别
+//        List<Long> levelIds =list.stream().map(TenantAlbumMusic::getLevel).distinct().filter(StringUtils::isNotBlank)
+//                .filter(NumberUtil::isNumber).map(Long::valueOf).collect(Collectors.toList());
+//        if (!levelIds.isEmpty()) {
+//            List<TenantAlbumCategoryDetail> levelList = tenantAlbumCategoryDetailService.lambdaQuery()
+//                    .in(TenantAlbumCategoryDetail::getId, levelIds).list();
+//            List<String> levelNameList = levelList.stream()
+//                    .map(TenantAlbumCategoryDetail::getValue).collect(Collectors.toList());
+//            data.setLevels(levelNameList);
+//            data.setLevelList(levelList);
+//        } else {
+//            data.setLevels(new ArrayList<>());
+//        }
 
         // 声部
         String subjectIds = musicSheets.stream()
@@ -313,23 +357,76 @@ public class TenantAlbumMusicServiceImpl extends ServiceImpl<TenantAlbumMusicMap
             data.setSubjects(subjects);
         }
 
-        // 标签
-        List<Long> musicTagIds = musicSheets.stream().flatMap(o -> {
-            if (StringUtils.isNotBlank(o.getMusicTag())) {
-                return Arrays.stream(o.getMusicTag().split(","));
-            }
-            return Stream.empty();
+//        // 标签
+//        List<Long> musicTagIds = musicSheets.stream().flatMap(o -> {
+//            if (StringUtils.isNotBlank(o.getMusicTag())) {
+//                return Arrays.stream(o.getMusicTag().split(","));
+//            }
+//            return Stream.empty();
+//
+//        }).filter(StringUtils::isNotBlank).distinct().map(Long::parseLong).collect(Collectors.toList());
+//        if (!CollectionUtils.isEmpty(musicTagIds)) {
+//
+//            List<MusicTag> tagList = musicTagService.listByIds(musicTagIds).parallelStream().collect(Collectors.toList());
+//            data.setTags(tagList);
+//        }
+        data.setSubjects(new ArrayList<>());
+
+        return data;
 
-        }).filter(StringUtils::isNotBlank).distinct().map(Long::parseLong).collect(Collectors.toList());
-        if (!CollectionUtils.isEmpty(musicTagIds)) {
+    }
 
-            List<MusicTag> tagList = musicTagService.listByIds(musicTagIds).parallelStream().collect(Collectors.toList());
-            data.setTags(tagList);
+    private void filterCategory(List<MusicSheetCategoriesWrapper.MusicSheetCategories> musicSheetCategoriesList, List<Long> ids) {
+        if (CollectionUtils.isEmpty(musicSheetCategoriesList)) {
+            return;
         }
-        data.setSubjects(new ArrayList<>());
+        for (int i = 0; i < musicSheetCategoriesList.size(); i++) {
+            MusicSheetCategoriesWrapper.MusicSheetCategories musicSheetCategories = musicSheetCategoriesList.get(i);
+            if (!ids.contains(musicSheetCategories.getId())) {
+                musicSheetCategoriesList.remove(i);
+                i--;
+                continue;
+            }
+            if (CollectionUtils.isNotEmpty(musicSheetCategories.getMusicSheetCategoriesList())) {
+                filterCategory(musicSheetCategories.getMusicSheetCategoriesList(), ids);
+            }
+        }
+    }
 
-        return data;
+    private boolean getCategory(List<MusicSheetCategoriesWrapper.MusicSheetCategories> musicSheetCategoriesList,
+                                List<Long> categoryIds, List<Long> result) {
+        boolean flag = false;
+        if (CollectionUtils.isEmpty(musicSheetCategoriesList)) {
+            return flag;
+        }
+        for (MusicSheetCategoriesWrapper.MusicSheetCategories musicSheetCategories : musicSheetCategoriesList) {
+            if (categoryIds.contains(musicSheetCategories.getId())) {
+                result.add(musicSheetCategories.getId());
+                flag = true;
+            }
+            if (CollectionUtils.isNotEmpty(musicSheetCategories.getMusicSheetCategoriesList())) {
+                boolean b = getCategory(musicSheetCategories.getMusicSheetCategoriesList(), categoryIds, result);
+                if (b) {
+                    result.add(musicSheetCategories.getId());
+                }
+                flag = flag || b;
+            }
+        }
+        return flag;
+    }
 
+    private Long getCategoryId(String subjectType) {
+        if (StringUtils.isBlank(subjectType)) {
+            return null;
+        }
+        if (SubjectTypeEnum.SUBJECT.name().equals(subjectType)) {
+            return Long.parseLong(sysConfigService.findConfigValue(SysConfigConstant.TENANT_ALBUM_SUBJECT_TYPE_CATEGORY));
+        } else if (SubjectTypeEnum.ENSEMBLE.name().equals(subjectType)) {
+            return Long.parseLong(sysConfigService.findConfigValue(SysConfigConstant.TENANT_ALBUM_ENSEMBLE_TYPE_CATEGORY));
+        } if (SubjectTypeEnum.MUSIC.name().equals(subjectType)) {
+            return Long.parseLong(sysConfigService.findConfigValue(SysConfigConstant.TENANT_ALBUM_MUSIC_TYPE_CATEGORY));
+        }
+        return null;
     }
 
     private List<ECourseType> courseTypeBySubject(Long subjectId) {

+ 8 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/MusicSheetVoResult.java

@@ -246,6 +246,14 @@ public class MusicSheetVoResult implements Serializable {
     @ApiModelProperty("谱面类型")
     private EDefaultScoreType scoreType;
 
+
+    @ApiModelProperty(value = "客户端状态曲目状态(0:停用,1:启用)")
+    private Boolean clientState;
+
+    @ApiModelProperty(value = "内容平台状态曲目状态(0:停用,1:启用)")
+    private Boolean  platformState;
+
+
     public ChargeTypeEnum getChargeType() {
         if (Objects.isNull(this.chargeType) && StringUtils.isNotEmpty(getPaymentType())) {
 

+ 64 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/wrapper/MusicSheetWrapper.java

@@ -1,6 +1,8 @@
 package com.yonge.cooleshow.biz.dal.wrapper;
 
 import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.annotation.JSONField;
+import com.alibaba.fastjson.serializer.ToStringSerializer;
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
@@ -862,4 +864,66 @@ public class MusicSheetWrapper {
         @ApiModelProperty("是否购买(0:否,1:是)")
         private Boolean buyed = false;
     }
+
+
+    @Data
+    @Builder
+    @NoArgsConstructor
+    @AllArgsConstructor
+    @ApiModel(" MusicSheetTenantQuery-曲谱表")
+    public static class MusicSheetTenantQuery implements QueryInfo {
+
+        @ApiModelProperty("当前页")
+        private Integer page;
+
+        @ApiModelProperty("分页行数")
+        private Integer rows;
+
+        @ApiModelProperty("关键字匹配 曲目编号/名称")
+        private String keyword;
+
+        @ApiModelProperty(value = "曲目来源类型 TEACHER 老师 PLATFORM 平台")
+        private SourceTypeEnum sourceType;
+
+
+        @ApiModelProperty("伴奏类型  HOMEMODE:自制 COMMON:普通")
+        private String accompanimentType;
+
+
+        @ApiModelProperty("声部Id")
+        private String musicSubject;
+
+        @ApiModelProperty("曲谱分类编号")
+        private Integer musicSheetCategoriesId;
+
+        private List<Integer> musicSheetCategoriesIdList;
+
+        @ApiModelProperty(value = "启用停用标识,曲目状态(0:停用,1:启用)")
+        private Boolean platformStatus;
+
+        @ApiModelProperty(value = "启用停用标识,曲目状态(0:停用,1:启用)")
+        private Boolean clientStatus;
+
+        @ApiModelProperty("需要排查的曲谱ID")
+        private List<Long> excludeMusicIds;
+
+    }
+
+    @Data
+    public static class MusicSheetApplication extends CbsMusicSheetWrapper.MusicSheetApplication{
+        @ApiModelProperty("主键")
+        @JSONField(serializeUsing = ToStringSerializer.class)
+        private Long id;
+
+        @ApiModelProperty("分类ID")
+        @JSONField(serializeUsing = ToStringSerializer.class)
+        private Long musicSheetCategoryId;
+
+    }
+
+    @Data
+    public static class MusicSheetApplicationQuery extends CbsMusicSheetWrapper.MusicSheetApplicationQuery {
+        @ApiModelProperty("类型")
+        private String subjectType;
+    }
 }

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

@@ -3,6 +3,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.dayaedu.cbs.openfeign.wrapper.music.MusicSheetCategoriesWrapper;
 import com.microsvc.toolkit.common.response.paging.QueryInfo;
 import com.yonge.cooleshow.biz.dal.entity.MusicTag;
 import com.yonge.cooleshow.biz.dal.entity.Subject;
@@ -125,6 +126,9 @@ public class TenantAlbumMusicWrapper {
         @ApiModelProperty("课件教材分类集合")
         private List<String> courseTypeList = new ArrayList<>();
 
+        @ApiModelProperty("分类集合")
+        private List<MusicSheetCategoriesWrapper.MusicSheetCategories> categoyList = new ArrayList<>();
+
         public String jsonString() {
             return JSON.toJSONString(this);
         }
@@ -132,6 +136,7 @@ public class TenantAlbumMusicWrapper {
         public static TenantAlbumMusic from(String json) {
             return JSON.parseObject(json, TenantAlbumMusic.class);
         }
+
     }
 
 
@@ -161,6 +166,12 @@ public class TenantAlbumMusicWrapper {
         @ApiModelProperty("声部id")
         private Long subjectId;
 
+        @ApiModelProperty("分类id")
+        private Long categoryId;
+
+        @ApiModelProperty(value = "分类id",hidden = true)
+        private List<Long> categoryIds;
+
         @ApiModelProperty("级别")
         private String level;
 

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

@@ -381,6 +381,12 @@ public class TenantAlbumWrapper {
 
         @ApiModelProperty(value = "上传人")
         private String userName;
+
+        @ApiModelProperty(value = "是否错误")
+        private Boolean errFlag;
+
+        @ApiModelProperty(value = "是否错误",hidden = true)
+        private Boolean loop;
     }
 
 

+ 4 - 4
cooleshow-user/user-biz/src/main/resources/config/mybatis/ActivityEvaluationMapper.xml

@@ -25,7 +25,7 @@
         SELECT
         <include refid="baseColumns"/>
         FROM activity_evaluation t
-        left join music_sheet ms on t.music_sheet_id_ = ms.id_
+        left join music_sheet ms on t.music_sheet_id_ = ms.id_ and find_in_set('PLATFORM',ms.provider_type_)
         where t.id_ = #{id}
     </select>
 
@@ -41,7 +41,7 @@
             , ms.source_type_ as sourceType
             , ms.music_price_ as musicPrice
         FROM activity_evaluation t
-        left join music_sheet ms on t.music_sheet_id_ = ms.id_
+        left join music_sheet ms on t.music_sheet_id_ = ms.id_ and find_in_set('PLATFORM',ms.provider_type_)
         <where>
             <if test="param.activityId != null">
                 and t.activity_id_ = #{param.activityId}
@@ -77,7 +77,7 @@
         , ae.evaluation_difficulty_ AS evaluationDifficulty
         ,(select if(count(1)>0,1,0) as `join` from activity_evaluation_record aer where aer.evaluation_id_ = ae.id_ and aer.user_id_ = #{userId}) as `join`
         from activity_evaluation ae
-        left join music_sheet ms on ms.id_ = ae.music_sheet_id_
+        left join music_sheet ms on ms.id_ = ae.music_sheet_id_ and find_in_set('PLATFORM',ms.provider_type_)
         left join subject s on s.id_ = ms.music_subject_
         <where>
             ms.del_flag_ = 0
@@ -131,7 +131,7 @@
             left join music_sheet_auth_record msar ON msar.music_sheet_id_ = t.id_
         </if>
         <where>
-            su.del_flag_ = 0
+            su.del_flag_ = 0 and find_in_set('PLATFORM',t.provider_type_)
             and not exists(
                 select 1 from activity_evaluation ae where ae.activity_id_ = ${param.activityId} and ae.music_sheet_id_ = t.id_
             )

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

@@ -58,7 +58,7 @@
                 from activity_registration ar
 		        left join activity_evaluation_record aer on ar.activity_id_ = aer.activity_id_ and ar.user_id_ = aer.user_id_
                 left join activity_evaluation ae on aer.evaluation_id_ = ae.id_
-                left join music_sheet ms on ae.music_sheet_id_ = ms.id_
+                left join music_sheet ms on ae.music_sheet_id_ = ms.id_ and find_in_set('PLATFORM',ms.provider_type_)
                 <where>
                     <if test="param.activityId != null">
                         and aer.activity_id_ = #{param.activityId}

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

@@ -53,7 +53,7 @@
         ,(select count(1) as num
             from album_music_relate amr
             join music_sheet ms on amr.music_sheet_id_ = ms.id_
-            where ms.del_flag_ = 0 and ms.state_ = 1 and ms.audit_status_ = 'PASS'
+            where ms.del_flag_ = 0 and ms.state_ = 1 and ms.audit_status_ = 'PASS' and find_in_set('PLATFORM',ms.provider_type_)
             and amr.album_id_ = t.id_) as musicSheetCount
         ,t2.num as albumFavoriteCount
         <if test="query.userId != null">
@@ -221,7 +221,7 @@
             , (
                 select count(1) as num from album_music_relate amr
                 join music_sheet ms on amr.music_sheet_id_ = ms.id_
-                where ms.del_flag_ = 0 and ms.state_ = 1 and ms.audit_status_ = 'PASS'
+                where ms.del_flag_ = 0 and ms.state_ = 1 and ms.audit_status_ = 'PASS' and find_in_set('PLATFORM',ms.provider_type_)
                 and amr.album_id_ = t.id_
             ) as musicSheetCount
             ,(

+ 213 - 12
cooleshow-user/user-biz/src/main/resources/config/mybatis/MusicSheetMapper.xml

@@ -41,6 +41,12 @@
         <result column="provider_type_" jdbcType="VARCHAR" property="providerType"/>
         <result column="cbs_music_sheet_id_" property="cbsMusicSheetId"/>
         <result column="score_type_" property="scoreType"/>
+        <result column="tenant_sort_number_" property="tenantSortNumber"/>
+        <result column="tenant_state_" property="tenantState"/>
+        <result column="tenant_notation_" property="tenantNotation"/>
+        <result column="tenant_category_id_" property="tenantCategoryId"/>
+        <result column="tenant_score_type_" property="tenantScoreType"/>
+        <result column="tenant_del_flag_" property="tenantCategoryId"/>
     </resultMap>
 
     <sql id="Base_Column_List">
@@ -61,6 +67,8 @@
         t.payment_type_ as paymentType,
         t.provider_type_ as providerType,
         t.state_ as state,
+        t.client_state_ as clientState,
+        t.platform_state_ as platformState,
         t.sort_number_ as sortNumber,
         t.top_flag_ as topFlag,
         t.exquisite_flag_ as exquisiteFlag,
@@ -94,7 +102,13 @@
         t.audit_status_ as auditStatus,
         t.submit_audit_time_ as submitAuditTime,
         t.cbs_music_sheet_id_ as cbsMusicSheetId,
-        t.score_type_ as scoreType
+        t.score_type_ as scoreType,
+        t.tenant_sort_number_ as tenantSortNumber,
+        t.tenant_state_ as tenantState,
+        t.tenant_notation_ as tenantNotation,
+        t.tenant_category_id_ as tenantCategoryId,
+        t.tenant_score_type_ as tenantScoreType,
+        t.tenant_del_flag_ as tenantDelFlag
     </sql>
     <insert id="batchInsert">
         insert into music_sheet
@@ -143,6 +157,12 @@
         </if>
         <where>
             1=1
+            <if test="param.clientState != null">
+                and t.client_state_ = #{param.clientState}
+            </if>
+            <if test="param.platformState != null">
+                and t.platform_state_ = #{param.platformState}
+            </if>
             <if test="param.excludeMusicIds != null and param.excludeMusicIds.size() != 0">
                 and t.id_ not in
                 <foreach collection="param.excludeMusicIds" separator="," item="item" open="(" close=")">
@@ -204,7 +224,7 @@
             t.composer_ like concat ('%',#{param.search},'%'))
         </if>
         <if test="param.providerType != null">
-            and t.provider_type_ = #{param.providerType}
+            and find_in_set(#{param.providerType},t.provider_type_)
         </if>
         <if test="param.musicTagIds != null and param.musicTagIds != ''">
             and
@@ -231,7 +251,21 @@
             </foreach>
         </if>
         <if test="param.state != null">
-            and t.state_ = #{param.state}
+
+            <if test="param.providerType != null">
+                <if test="param.providerType.code == 'TENANT'">
+                    and t.tenant_state_ = #{param.state}
+                </if>
+
+                <if test="param.providerType.code == 'PLATFORM'">
+                    and t.state_ = #{param.state}
+                </if>
+            </if>
+
+            <if test="param.providerType == null">
+                and t.state_ = #{param.state}
+            </if>
+
         </if>
         <if test="param.auditStatus != null">
             and msar.last_audit_state_ = #{param.auditStatus}
@@ -243,7 +277,20 @@
             and t.create_by_ = #{param.createBy}
         </if>
         <if test="param.delFlag != null">
-            and t.del_flag_ = #{param.delFlag}
+            <if test="param.providerType != null">
+                <if test="param.providerType.code == 'TENANT'">
+                    and t.tenant_del_flag_ = #{param.delFlag}
+                </if>
+
+                <if test="param.providerType.code == 'PLATFORM'">
+                    and t.del_flag_ = #{param.delFlag}
+                </if>
+            </if>
+
+            <if test="param.providerType == null">
+                and t.del_flag_ = #{param.delFlag}
+            </if>
+
         </if>
         <if test="param.sourceType != null">
             and t.source_type_ = #{param.sourceType}
@@ -278,12 +325,12 @@
         left join album_music_relate amr on t.id_ = amr.music_sheet_id_
         left join sys_user su on t.create_by_ = su.id_
         <where>
-            t.cbs_music_sheet_id_ IS NOT NULL
+            t.cbs_music_sheet_id_ IS NOT NULL and find_in_set('PLATFORM',t.provider_type_)
             <if test="param.composer != null">
                 AND t.composer_ LIKE '%${param.composer}%'
             </if>
             <if test="param.providerType != null">
-                and t.provider_type_ = #{param.providerType}
+                and find_in_set(#{param.providerType},t.provider_type_)
             </if>
             <if test="param.idAndName != null and param.idAndName != ''">
                 and (t.id_ like concat('%',#{param.idAndName},'%') or
@@ -435,6 +482,12 @@
         <result column="musicFirstSvg" jdbcType="VARCHAR" property="musicFirstSvg"/>
         <result column="musicSheetType" jdbcType="VARCHAR" property="musicSheetType"/>
         <result column="musicSheetJson" jdbcType="VARCHAR" property="musicSheetJson"/>
+        <result column="tenantSortNumber" jdbcType="VARCHAR" property="tenantSortNumber"/>
+        <result column="tenantState" jdbcType="VARCHAR" property="tenantState"/>
+        <result column="tenantNotation" jdbcType="VARCHAR" property="tenantNotation"/>
+        <result column="tenantCategoryId" jdbcType="VARCHAR" property="tenantCategoryId"/>
+        <result column="tenantScoreType" jdbcType="VARCHAR" property="tenantScoreType"/>
+        <result column="tenantDelFlag" jdbcType="VARCHAR" property="tenantDelFlag"/>
         <collection property="background" ofType="com.yonge.cooleshow.biz.dal.entity.MusicSheetAccompaniment">
             <id column="accompanimentId" jdbcType="BIGINT" property="id"/>
             <result column="accompanimentMusicSheetId" jdbcType="BIGINT" property="musicSheetId"/>
@@ -941,18 +994,37 @@
         </foreach>
     </update>
     <update id="batchEnable">
-        update music_sheet set state_ = #{status} where FIND_IN_SET(cbs_music_sheet_id_,#{ids})
+        update music_sheet
+        <set>
+            <if test="tenantFlag == 1">
+                tenant_state_ = #{status},
+            </if>
+            <if test="tenantFlag == 0">
+                state_ = #{status},
+                client_state_ = #{status}
+            </if>
+        </set>
+        where FIND_IN_SET(cbs_music_sheet_id_,#{ids})
     </update>
     <update id="batchDel">
-        update music_sheet set del_flag_ = 1 where FIND_IN_SET(cbs_music_sheet_id_,#{ids})
+        update music_sheet
+        <set>
+            <if test="tenantFlag == 1">
+                tenant_del_flag_ = 1,
+            </if>
+            <if test="tenantFlag == 0">
+                del_flag_ = 1
+            </if>
+        </set>
+         where FIND_IN_SET(cbs_music_sheet_id_,#{ids})
     </update>
     <update id="updateMusicSheet">
         update music_sheet
         set music_sheet_name_ = #{param.name},music_subject_ = #{param.subjectIds},music_svg_ = #{param.musicSvg},
             composer_ = #{param.composer},title_img_ = #{param.musicCover},music_img_ = #{param.musicCover},accompaniment_type_ = #{param.audioType},
-            play_speed_ = #{param.playSpeed},is_all_subject_ = #{param.isAllSubject},
+            play_speed_ = #{param.playSpeed},is_all_subject_ = #{param.isAllSubject},platform_state_ = #{param.platformStatus},
             music_sheet_type_ = #{param.musicSheetType},source_type_ = CASE WHEN #{param.sourceType} = 'PLATFORM' THEN 'PLATFORM' ELSE 'TEACHER' END,
-            create_by_ = #{param.userId}
+            create_by_ = #{param.userId},tenant_category_id_ = #{param.musicCategoryId}
         where cbs_music_sheet_id_ = #{param.id}
     </update>
 
@@ -988,7 +1060,7 @@
                     and tam.subject_type_ in ('ENSEMBLE', 'MUSIC', 'SUBJECT')
                 </if>
                 <if test="param.providerType != null">
-                    and t.provider_type_ = #{param.providerType}
+                    and find_in_set(#{param.providerType},t.provider_type_)
                 </if>
             </where>
         order by t.top_flag_ desc, t.sort_number_ desc, t.favorite_count_ desc
@@ -1058,7 +1130,7 @@
         from music_sheet t
             left join tenant_album_music t1 on t1.music_sheet_id_ = t.id_
         <where>
-            t.del_flag_ = 0 and t.state_ =1  and t.audit_status_ = 'PASS' and t.cbs_music_sheet_id_ is not null
+            t.tenant_del_flag_ = 0 and t.tenant_state_ =1  and t.cbs_music_sheet_id_ is not null
             and t1.del_flag_=0 and t1.subject_type_ in ('ENSEMBLE', 'MUSIC', 'SUBJECT')
             <if test="queryInfo.albumId != null">
                 and t1.tenant_album_id_ = #{queryInfo.albumId}
@@ -1079,5 +1151,134 @@
         </where>
 
     </select>
+
+    <update id="updateTenantByCbsId">
+        update music_sheet ms set
+        ms.tenant_sort_number_ = #{item.sortNo},ms.tenant_del_flag_ = 0,
+        ms.tenant_score_type_ = #{item.scoreType},
+        ms.audit_status_ = 'PASS',
+        ms.tenant_state_ = #{item.status},
+        ms.tenant_notation_ = #{item.isConvertibleScore},
+        ms.provider_type_ = CASE WHEN ms.provider_type_ is null or ms.provider_type_ = '' THEN 'TENANT'
+        when find_in_set('TENANT',ms.provider_type_) then ms.provider_type_
+        else concat(ms.provider_type_,',','TENANT') end
+        <if test="item.musicSheetUpdate != null">
+            ,ms.music_sheet_name_ = #{item.musicSheetUpdate.name},
+            ms.music_subject_ = #{item.musicSheetUpdate.subjectIds},
+            ms.music_svg_ = #{item.musicSheetUpdate.musicSvg},
+            ms.composer_ = #{item.musicSheetUpdate.composer},
+            ms.accompaniment_type_ = #{item.musicSheetUpdate.audioType},
+            ms.play_speed_ = #{item.musicSheetUpdate.playSpeed},
+            ms.music_sheet_type_ = #{item.musicSheetUpdate.musicSheetType},
+            ms.create_by_ = #{item.musicSheetUpdate.userId},
+            ms.audio_type_ = #{item.musicSheetUpdate.playMode},
+            ms.tenant_category_id_ = #{item.musicSheetUpdate.musicCategoryId},
+            ms.show_fingering_ = #{item.musicSheetUpdate.showFingering},
+            ms.can_evaluate_ = #{item.musicSheetUpdate.canEvaluate},
+            ms.upload_time_ = #{item.musicSheetUpdate.createTime},
+            ms.source_type_ = CASE WHEN #{item.musicSheetUpdate.sourceType} = 'PLATFORM' THEN 'PLATFORM'
+            WHEN #{item.musicSheetUpdate.sourceType} = 'PERSON' THEN 'TEACHER' ELSE 'TENANT' END
+        </if>
+        where ms.cbs_music_sheet_id_ = #{item.musicSheetId}
+    </update>
+
+    <update id="updatePlatformByCbsId">
+        update music_sheet ms set
+        ms.music_tag_ = #{item.musicTagIds},ms.payment_type_ = #{item.paymentType},
+        ms.charge_type_ = #{item.paymentType},
+        ms.music_price_ = #{item.musicPrice},ms.top_flag_ = #{item.topFlag},
+        ms.exquisite_flag_ = #{item.exquisiteFlag},ms.sort_number_ = #{item.sortNo},ms.del_flag_ = 0,
+        ms.audit_status_ = 'PASS',
+        ms.score_type_ = #{item.scoreType},
+        ms.state_ = #{item.status},
+        ms.client_state_ = #{item.status},
+        ms.notation_ = #{item.isConvertibleScore},
+        ms.provider_type_ = CASE WHEN ms.provider_type_ is null or ms.provider_type_ = '' THEN 'PLATFORM'
+                            when find_in_set('PLATFORM',ms.provider_type_) then ms.provider_type_
+                            else concat(ms.provider_type_,',','PLATFORM') end
+        <if test="item.musicSheetUpdate != null">
+            ,ms.music_sheet_name_ = #{item.musicSheetUpdate.name}
+            ,ms.platform_state_ = #{item.musicSheetUpdate.platformStatus},
+            ms.music_subject_ = #{item.musicSheetUpdate.subjectIds},
+            ms.music_svg_ = #{item.musicSheetUpdate.musicSvg},
+            ms.composer_ = #{item.musicSheetUpdate.composer},
+            ms.accompaniment_type_ = #{item.musicSheetUpdate.audioType},
+            ms.play_speed_ = #{item.musicSheetUpdate.playSpeed},
+            ms.notation_ = #{item.musicSheetUpdate.notation},
+            ms.music_sheet_type_ = #{item.musicSheetUpdate.musicSheetType},
+            ms.create_by_ = #{item.musicSheetUpdate.userId},
+            ms.audio_type_ = #{item.musicSheetUpdate.playMode},
+            ms.show_fingering_ = #{item.musicSheetUpdate.showFingering},
+            ms.can_evaluate_ = #{item.musicSheetUpdate.canEvaluate},
+            ms.source_type_ = CASE WHEN #{item.musicSheetUpdate.sourceType} = 'PLATFORM' THEN 'PLATFORM'
+            WHEN #{item.musicSheetUpdate.sourceType} = 'PERSON' THEN 'TEACHER' ELSE 'TENANT' END
+        </if>
+        where ms.cbs_music_sheet_id_ = #{item.musicSheetId}
+    </update>
+
+    <insert id="tenantInsert">
+        insert into music_sheet
+        (cbs_music_sheet_id_,tenant_sort_number_,tenant_score_type_,tenant_state_,tenant_notation_,tenant_category_id_
+        ,music_sheet_name_,music_subject_,music_svg_,composer_,accompaniment_type_,play_speed_,
+        music_sheet_type_,provider_type_,audio_type_,show_fingering_,
+        can_evaluate_,create_by_,user_id_,audit_status_,upload_time_
+        )
+        values
+            (#{item.musicSheetId},
+        #{item.sortNo},#{item.scoreType},#{item.status},#{item.isConvertibleScore}
+        ,#{item.musicSheetUpdate.musicCategoryId}
+            ,#{item.musicSheetUpdate.name},
+            #{item.musicSheetUpdate.subjectIds},
+            #{item.musicSheetUpdate.musicSvg},
+            #{item.musicSheetUpdate.composer},
+            #{item.musicSheetUpdate.audioType},
+            #{item.musicSheetUpdate.playSpeed},
+            #{item.musicSheetUpdate.musicSheetType},
+            'TENANT',
+            #{item.musicSheetUpdate.playMode},
+            #{item.musicSheetUpdate.showFingering},
+            #{item.musicSheetUpdate.canEvaluate},
+            #{item.musicSheetUpdate.userId},
+            #{item.musicSheetUpdate.userId},
+            'PASS',
+
+        #{item.musicSheetUpdate.createTime}
+            )
+    </insert>
+
+    <insert id="platformInsert">
+        insert into music_sheet
+        (cbs_music_sheet_id_,music_tag_,payment_type_,charge_type_,top_flag_,exquisite_flag_,sort_number_,state_,audit_status_
+        ,music_sheet_name_,music_subject_,music_svg_,composer_,accompaniment_type_,play_speed_,
+        music_price_,notation_,music_sheet_type_,source_type_,provider_type_,audio_type_,show_fingering_,
+        can_evaluate_,create_by_,user_id_,score_type_,platform_state_,client_state_
+        )
+        values
+        (#{item.musicSheetId},
+        #{item.musicTagIds},#{item.paymentType},#{item.paymentType},
+        #{item.topFlag},#{item.exquisiteFlag},#{item.sortNo},0
+        ,'PASS'
+        ,#{item.musicSheetUpdate.name},
+        #{item.musicSheetUpdate.subjectIds},
+        #{item.musicSheetUpdate.musicSvg},
+        #{item.musicSheetUpdate.composer},
+        #{item.musicSheetUpdate.audioType},
+        #{item.musicSheetUpdate.playSpeed},
+        #{item.musicSheetUpdate.musicPrice},
+        #{item.isConvertibleScore},
+        #{item.musicSheetUpdate.musicSheetType},
+        CASE WHEN #{item.musicSheetUpdate.sourceType} = 'PLATFORM' THEN 'PLATFORM'
+        WHEN #{item.musicSheetUpdate.sourceType} = 'PERSON' THEN 'TEACHER'
+        ELSE 'TENANT' END,
+        'PLATFORM',
+        #{item.musicSheetUpdate.playMode},
+        #{item.musicSheetUpdate.showFingering},
+        #{item.musicSheetUpdate.canEvaluate},
+        #{item.musicSheetUpdate.userId},#{item.musicSheetUpdate.userId},
+        #{item.scoreType},
+        #{item.musicSheetUpdate.platformStatus},
+        #{item.musicSheetUpdate.platformStatus}
+        )
+    </insert>
     <!--单曲专辑数量统计-->
 </mapper>

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

@@ -28,8 +28,20 @@
             <if test="param.auditStatus != null">
                 and msar.last_audit_state_ = #{param.auditStatus}
             </if>
-            <if test="param.state != null">
-                and ms.state_ = #{param.state}
+            <if test="param.providerType.code == 'TENANT'">
+                and find_in_set('TENANT',ms.provider_type_)
+
+                <if test="param.state != null">
+                    and ms.tenant_state_ = #{param.state}
+                </if>
+            </if>
+
+            <if test="param.providerType.code == 'PLATFORM'">
+                and find_in_set('PLATFORM',ms.provider_type_)
+
+                <if test="param.state != null">
+                    and ms.state_ = #{param.state}
+                </if>
             </if>
             <if test="param.studentId != null">
                 and mspr.user_id_ = #{param.studentId}

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

@@ -65,10 +65,10 @@
         SELECT
         <include refid="baseColumns" />,
         su.username_ as updateName,
-        (select count(1) from music_sheet ms where find_in_set(t.id_,ms.music_tag_) and ms.del_flag_ = 0 and  ms.state_ = 1 and ms.source_type_ = 'PLATFORM') as enablePlatformMusicSheetNum,
-        (select count(1) from music_sheet ms where find_in_set(t.id_,ms.music_tag_) and ms.del_flag_ = 0  and ms.source_type_ = 'PLATFORM') as musicPlatformSheetNum,
-        (select count(1) from music_sheet ms where find_in_set(t.id_,ms.music_tag_) and ms.del_flag_ = 0 and ms.source_type_ = 'TEACHER' and ms.audit_status_ = 'PASS') as musicTeacherSheetNum,
-        (select count(1) from music_sheet ms where find_in_set(t.id_,ms.music_tag_) and ms.del_flag_ = 0  and ms.source_type_ = 'TEACHER' and ms.state_ = 1 and ms.audit_status_ = 'PASS') as enableTeacherMusicSheetNum,
+        (select count(1) from music_sheet ms where find_in_set(t.id_,ms.music_tag_) and ms.del_flag_ = 0 and find_in_set('PLATFORM',ms.provider_type_) and  ms.state_ = 1 and ms.source_type_ = 'PLATFORM') as enablePlatformMusicSheetNum,
+        (select count(1) from music_sheet ms where find_in_set(t.id_,ms.music_tag_) and ms.del_flag_ = 0 and find_in_set('PLATFORM',ms.provider_type_)  and ms.source_type_ = 'PLATFORM') as musicPlatformSheetNum,
+        (select count(1) from music_sheet ms where find_in_set(t.id_,ms.music_tag_) and ms.del_flag_ = 0 and find_in_set('PLATFORM',ms.provider_type_) and ms.source_type_ = 'TEACHER' and ms.audit_status_ = 'PASS') as musicTeacherSheetNum,
+        (select count(1) from music_sheet ms where find_in_set(t.id_,ms.music_tag_) and ms.del_flag_ = 0 and find_in_set('PLATFORM',ms.provider_type_)  and ms.source_type_ = 'TEACHER' and ms.state_ = 1 and ms.audit_status_ = 'PASS') as enableTeacherMusicSheetNum,
         (select count(1) from music_album ma where find_in_set(t.id_,ma.album_tag_) and ma.del_flag_ = 0    and ma.album_status_ = 1) as enablePlatformAlbumNum,
         (select count(1) from music_album ma where find_in_set(t.id_,ma.album_tag_) and ma.del_flag_ = 0 ) as musicPlatformAlbumNum
         FROM music_tag t
@@ -91,7 +91,7 @@
 
         select count(1) from music_sheet ms
         <where>
-            ms.del_flag_ = 0
+            ms.del_flag_ = 0 and find_in_set('PLATFORM',ms.provider_type_)
             <if test="longs != null and longs.size() != 0">
                 and
                 <foreach collection="longs" item="item" open="(" close=")"  separator="or">

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

@@ -37,7 +37,7 @@
                 <if test="type == null or type =='MUSIC'">
                     union all
                     (select a.music_subject_ as subject_id_ from music_sheet a
-                    where a.del_flag_ = 0 and a.state_ = 1 AND a.cbs_music_sheet_id_ IS NOT NULL
+                    where ((a.del_flag_ = 0 and a.state_ = 1) or (a.tenant_del_flag_ =0 and a.tenant_state_ = 1)) AND a.cbs_music_sheet_id_ IS NOT NULL
                     GROUP BY a.music_subject_)
                 </if>
                 <if test="type == null or type =='ALBUM'">

+ 15 - 16
cooleshow-user/user-biz/src/main/resources/config/mybatis/TenantAlbumMusicMapper.xml

@@ -32,25 +32,23 @@
 		FROM music_sheet m
         left join tenant_album_music t on t.music_sheet_id_ = m.id_
         <where>
-            m.state_ = true and m.del_flag_ = 0 and t.del_flag_ = 0 AND m.cbs_music_sheet_id_ IS NOT NULL
-            <if test="param.musicTagId != null ">
-                and (find_in_set(#{param.musicTagId},m.music_tag_))
-            </if>
+            find_in_set('TENANT',m.provider_type_) and
+            m.tenant_state_ = true and m.tenant_del_flag_ = 0 and t.del_flag_ = 0 AND m.cbs_music_sheet_id_ IS NOT NULL
             <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.is_all_subject_)
             </if>
             <if test="param.subjectType != null">
                 and t.subject_type_ = #{param.subjectType}
             </if>
-            <if test="param.level != null and param.level != ''">
-                and t.level_ = #{param.level}
-            </if>
-            <if test="param.type != null and param.type != ''">
-                and t.type_ = #{param.type}
-            </if>
             <if test="param.albumId != null">
                 and t.tenant_album_id_ = #{param.albumId}
             </if>
+            <if test="param.categoryIds != null and param.categoryIds.size() != 0">
+                and m.tenant_category_id_ in
+                <foreach collection="param.categoryIds" item="item" index="index" open="(" close=")" separator=",">
+                    #{item}
+                </foreach>
+            </if>
 
             <if test="param.keyword != null and param.keyword != ''">
                 and m.music_sheet_name_ LIKE CONCAT('%',#{param.keyword},'%')
@@ -86,17 +84,18 @@
         distinct t.music_sheet_id_
         FROM tenant_album_music t
         left join tenant_album_ref t1 on t1.tenant_album_id_ = t.tenant_album_id_
-        left join music_sheet t2 on t2.id_ = t.music_sheet_id_
-        where t2.state_ = 1 and t2.del_flag_ = 0 and t2.audit_version_ = 0 and t1.tenant_id_ = #{tenantId} and t.del_flag_ = 0
+        left join music_sheet t2 on t2.id_ = t.music_sheet_id_  and find_in_set('TENANT',t2.provider_type_)
+        where t2.tenant_state_ = 1 and t2.tenant_del_flag_ = 0 and t2.audit_version_ = 0 and t1.tenant_id_ = #{tenantId} and t.del_flag_ = 0
     </select>
 
     <select id="getByAlbumAndEnable" resultType="com.yonge.cooleshow.biz.dal.entity.TenantAlbumMusic">
         select
         t.*
         from tenant_album_music t
-        left join music_sheet t1 on t.music_sheet_id_ = t1.id_
+        left join music_sheet t1 on t.music_sheet_id_ = t1.id_  and find_in_set('TENANT',t1.provider_type_)
         where
-        t.del_flag_ = 0 and ((t1.state_ = 1 and t1.del_flag_ = 0 and t.subject_type_ in ('ENSEMBLE', 'MUSIC', 'SUBJECT')) or t.subject_type_ not in ('ENSEMBLE', 'MUSIC', 'SUBJECT'))
+        t.del_flag_ = 0 and ((t1.tenant_state_ = 1 and t1.tenant_del_flag_ = 0 and t.subject_type_ in ('ENSEMBLE', 'MUSIC', 'SUBJECT'))
+            or t.subject_type_ not in ('ENSEMBLE', 'MUSIC', 'SUBJECT'))
         and t.tenant_album_id_ in
         <foreach collection="tenantAlbumIds" item="item" index="index" open="(" close=")" separator=",">
             #{item}
@@ -107,9 +106,9 @@
         select
         t.*
         from tenant_album_music t
-        left join music_sheet m on t.music_sheet_id_ = m.id_
+        left join music_sheet m on t.music_sheet_id_ = m.id_ and find_in_set('TENANT',m.provider_type_)
         where
-        t.del_flag_ = 0
+        t.del_flag_ = 0 and m.tenant_del_flag_ =0 and m.tenant_state_ =1
         <if test="param.tenantAlbumId != null">
             and t.tenant_album_id_ = #{param.tenantAlbumId}
         </if>

+ 1 - 1
pom.xml

@@ -23,7 +23,7 @@
 		<google.zxing.version>3.4.0</google.zxing.version>
 		<redisson.version>3.11.5</redisson.version>
 		<maven.test.skip>true</maven.test.skip>
-		<cbs.version>1.0.13</cbs.version>
+		<cbs.version>1.0.15</cbs.version>
 		<microsvc.version>1.0.8</microsvc.version>
 	</properties>