Browse Source

Merge branch 'zx_online_cbs' of http://git.dayaedu.com/yonge/cooleshow into develop-new

# Conflicts:
#	cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/SysMessageController.java
#	cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/SysMessageController.java
zouxuan 1 year ago
parent
commit
18e17323bb
22 changed files with 747 additions and 117 deletions
  1. 21 5
      cooleshow-app/src/main/java/com/yonge/cooleshow/admin/controller/MusicSheetApplicationExtendController.java
  2. 13 0
      cooleshow-app/src/main/java/com/yonge/cooleshow/admin/controller/MusicSheetController.java
  3. 1 1
      cooleshow-app/src/main/java/com/yonge/cooleshow/admin/controller/MusicalInstrumentController.java
  4. 101 13
      cooleshow-app/src/main/java/com/yonge/cooleshow/admin/controller/SubjectController.java
  5. 3 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/MusicSheetDao.java
  6. 3 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/SubjectDao.java
  7. 14 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/PageUtil.java
  8. 1 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/MusicSheetService.java
  9. 2 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/SubjectService.java
  10. 2 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CbsUserServiceImpl.java
  11. 227 9
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/MusicSheetServiceImpl.java
  12. 3 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/SmsCodeServiceImpl.java
  13. 69 42
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/SubjectServiceImpl.java
  14. 19 8
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/SysMessageServiceImpl.java
  15. 9 7
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TeacherServiceImpl.java
  16. 3 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/MusicSheetDetailVo.java
  17. 191 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/wrapper/MusicSheetWrapper.java
  18. 7 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/wrapper/SubjectWrapper.java
  19. 7 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/MusicSheetMapper.xml
  20. 51 28
      cooleshow-user/user-biz/src/main/resources/config/mybatis/SubjectMapper.xml
  21. 0 0
      cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/SysMessageController.java
  22. 0 0
      cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/SysMessageController.java

+ 21 - 5
cooleshow-app/src/main/java/com/yonge/cooleshow/admin/controller/MusicSheetApplicationExtendController.java

@@ -11,23 +11,23 @@ import com.dayaedu.cbs.openfeign.wrapper.music.CbsMusicSheetWrapper;
 import com.microsvc.toolkit.common.response.paging.PageInfo;
 import com.microsvc.toolkit.common.response.template.R;
 import com.microsvc.toolkit.common.webportal.exception.BizException;
-import com.microsvc.toolkit.config.jwt.utils.JwtUserInfo;
+import com.yonge.cooleshow.biz.dal.dto.PageUtil;
 import com.yonge.cooleshow.biz.dal.entity.MusicSheet;
 import com.yonge.cooleshow.biz.dal.service.MusicSheetService;
+import com.yonge.cooleshow.biz.dal.wrapper.MusicSheetWrapper;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections.CollectionUtils;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
-import springfox.documentation.annotations.ApiIgnore;
 
 import javax.annotation.Resource;
+import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 import java.util.Objects;
@@ -88,10 +88,26 @@ public class MusicSheetApplicationExtendController {
 
     @PreAuthorize("@pcs.hasPermissions('musicSheetApplicationExtend/page')")
     @PostMapping({"/page"})
-    public R<PageInfo<CbsMusicSheetWrapper.MusicSheet>> musicSheetPage(@RequestBody CbsMusicSheetWrapper.MusicSheetQuery var1) {
+    public R<PageInfo> musicSheetPage(@RequestBody CbsMusicSheetWrapper.MusicSheetQuery var1) {
         var1.setAddAppId(Long.parseLong(openFeignClientConfigProperties.getAppId()));
         try {
-            return R.from(this.musicFeignClientService.musicSheetPage(var1).feignData());
+            PageInfo<CbsMusicSheetWrapper.MusicSheet> info = this.musicFeignClientService.musicSheetPage(var1).feignData();
+            if (CollectionUtils.isNotEmpty(info.getRows())) {
+                List<MusicSheetWrapper.CbsMusicSheet> result = new ArrayList<>();
+                for (CbsMusicSheetWrapper.MusicSheet row : info.getRows()) {
+                    MusicSheetWrapper.CbsMusicSheet cbsMusicSheet = JSONObject.parseObject(JSONObject.toJSONString(row), MusicSheetWrapper.CbsMusicSheet.class);
+                    cbsMusicSheet.setId(row.getId().toString());
+                    if (Objects.nonNull(row.getBizId())) {
+                        cbsMusicSheet.setBizId(row.getBizId().toString());
+                    }
+                    if (Objects.nonNull(row.getMusicCategoryId())) {
+                        cbsMusicSheet.setMusicCategoryId(row.getMusicCategoryId().toString());
+                    }
+                    result.add(cbsMusicSheet);
+                }
+                return R.from(PageUtil.transPageInfo(info, result));
+            }
+            return R.from(info);
         } catch (Exception e) {
             log.error("查询曲目应用拓展表异常", e);
             if (e instanceof BizException) {

+ 13 - 0
cooleshow-app/src/main/java/com/yonge/cooleshow/admin/controller/MusicSheetController.java

@@ -29,6 +29,7 @@ import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
 import javax.validation.Valid;
+import java.util.concurrent.CompletableFuture;
 
 @RestController
 @RequestMapping("${app-config.url.admin:}/music/sheet")
@@ -145,4 +146,16 @@ public class MusicSheetController extends BaseController {
 
         return succeed();
     }
+
+
+    @ApiOperation(value = "数据同步", notes = "曲谱表- 修改曲目缓存 MusicSheetVo.MusicSheet")
+    @PostMapping("/sync")
+    public R<JSONObject> sync() {
+
+        CompletableFuture.runAsync(() -> {
+            musicSheetService.sync();
+        });
+
+        return R.defaultR();
+    }
 }

+ 1 - 1
cooleshow-app/src/main/java/com/yonge/cooleshow/admin/controller/MusicalInstrumentController.java

@@ -21,7 +21,7 @@ import java.util.List;
 @Slf4j
 @Validated
 @RestController
-@RequestMapping("/musicalInstrument")
+@RequestMapping("${app-config.url.admin:}/musicalInstrument")
 @Api(tags = "曲目乐器")
 public class MusicalInstrumentController {
 

+ 101 - 13
cooleshow-app/src/main/java/com/yonge/cooleshow/admin/controller/SubjectController.java

@@ -1,13 +1,15 @@
 package com.yonge.cooleshow.admin.controller;
 
+import com.alibaba.fastjson.JSON;
 import com.dayaedu.cbs.openfeign.client.MusicFeignClientService;
 import com.dayaedu.cbs.openfeign.wrapper.music.CbsSubjectWrapper;
+import com.dayaedu.cbs.openfeign.wrapper.musicInstrument.CbsMusicalInstrumentWrapper;
 import com.microsvc.toolkit.common.webportal.exception.BizException;
-import com.yonge.cooleshow.biz.dal.dto.PageUtil;
 import com.yonge.cooleshow.biz.dal.entity.Subject;
 import com.yonge.cooleshow.biz.dal.queryInfo.SubjectQueryInfo;
 import com.yonge.cooleshow.biz.dal.service.SubjectService;
 import com.yonge.cooleshow.biz.dal.service.SysUserService;
+import com.yonge.cooleshow.biz.dal.wrapper.InstrumentWrapper;
 import com.yonge.cooleshow.biz.dal.wrapper.SubjectWrapper;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
@@ -16,10 +18,15 @@ import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.collections.CollectionUtils;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
 
+import java.util.*;
+import java.util.stream.Collectors;
+
 @RequestMapping("${app-config.url.admin:}/subject")
 @Api(tags = "声部服务")
 @RestController
@@ -56,7 +63,7 @@ public class SubjectController extends BaseController {
 		return succeed(subjectService.queryPageTree(queryInfo));
 	}
 
-	@ApiOperation(value = "修改、新增声部")
+	@ApiOperation(value = "新增声部")
 	@PostMapping("/upset")
 	@PreAuthorize("@pcs.hasPermissions('subject/upset')")
 	public Object update(@RequestBody SubjectWrapper.AddSubject add) {
@@ -65,6 +72,26 @@ public class SubjectController extends BaseController {
 		return succeed();
 	}
 
+	@ApiOperation(value = "修改分类名称")
+	@PostMapping("/updateCategoryName")
+	@PreAuthorize("@pcs.hasPermissions('subject/updateCategoryName')")
+	public HttpResponseResult<Object> updateCategoryName(@RequestBody Subject subject) {
+		Subject s = subjectService.get(subject.getId());
+		s.setName(subject.getName());
+		subjectService.update(s);
+		return succeed();
+	}
+
+	@ApiOperation(value = "修改分类")
+	@PostMapping("/updateCategory")
+	@PreAuthorize("@pcs.hasPermissions('subject/updateCategory')")
+	public HttpResponseResult<Object> updateCategory(@RequestBody Subject subject) {
+		Subject s = subjectService.get(subject.getId());
+		s.setParentSubjectId(subject.getParentSubjectId());
+		subjectService.update(s);
+		return succeed();
+	}
+
 	@PreAuthorize("@pcs.hasPermissions('subject/enable')")
 	@PostMapping("/enable")
 	public HttpResponseResult<Boolean> enable(@RequestBody SubjectWrapper.SubjectEnable subjectEnable) {
@@ -79,16 +106,77 @@ public class SubjectController extends BaseController {
      */
     @ApiOperation(value = "内容平台对应的声部数据")
     @PostMapping("/cbsSubject/page")
-    public HttpResponseResult<PageInfo<CbsSubjectWrapper.Subject>> subjectPage(){
-        CbsSubjectWrapper.SubjectQuery subjectQuery = new CbsSubjectWrapper.SubjectQuery();
-        subjectQuery.setPage(1);
-        subjectQuery.setRows(-1);
-
-        try {
-            return succeed(PageUtil.pageInfo(musicFeignClientService.subjectPage(subjectQuery).feignData()));
-        } catch (Exception e) {
-            log.error("内容平台对应的声部数据查询失败", e);
-            throw BizException.from("内容平台服务异常");
-        }
+    public HttpResponseResult<List<SubjectWrapper.CbsSubject>> subjectPage(@RequestBody SubjectWrapper.CbsSubjectQuery query){
+		// 移除已被使用的声部ID
+		if (Boolean.TRUE.equals(query.getRemoveUsed())) {
+			List<Subject> list = subjectService.getDao().notInSubjectIds(query.getSubjectId());
+			if (CollectionUtils.isNotEmpty(list)) {
+				List<Long> cbsSubjectIds = list.stream().map(Subject::getCbsSubjectId).filter(Objects::nonNull).distinct().collect(Collectors.toList());
+				if (CollectionUtils.isNotEmpty(cbsSubjectIds)) {
+					query.setRemoveIds(cbsSubjectIds);
+				}
+			}
+		}
+
+		try {
+			query.setPage(1);
+			query.setRows(-1);
+			List<CbsSubjectWrapper.Subject> subjectPageInfo = musicFeignClientService.subjectPage(query).feignData().getRows();
+			if (CollectionUtils.isEmpty(subjectPageInfo)) {
+				return succeed(new ArrayList<>());
+			}
+			List<Integer> subjectIds = subjectPageInfo.stream().map(CbsSubjectWrapper.Subject::getId).map(Long::intValue).collect(Collectors.toList());
+
+			// 查询乐器信息
+			CbsMusicalInstrumentWrapper.MusicalInstrumentQuery musicalInstrumentQuery = new CbsMusicalInstrumentWrapper.MusicalInstrumentQuery();
+			musicalInstrumentQuery.setSubjectIds(subjectIds);
+			musicalInstrumentQuery.setPage(1);
+			musicalInstrumentQuery.setRows(9999);
+			List<CbsMusicalInstrumentWrapper.MusicalInstrumentQueryDto> rows = musicFeignClientService
+					.musicalInstrumentPage(musicalInstrumentQuery).feignData().getRows();
+			Map<Long, List<CbsMusicalInstrumentWrapper.MusicalInstrumentQueryDto>> subjectIdMap = rows.stream()
+					.collect(Collectors.groupingBy(o -> o.getSubjectId().longValue(), LinkedHashMap::new, Collectors.toList()));
+
+			// 查询本地已经添加过的曲目数据
+			SubjectWrapper.SubjectQuery query1 = new SubjectWrapper.SubjectQuery();
+			query1.setHasInstrument(true);
+			List<SubjectWrapper.Subject> list = subjectService.list(query1);
+			// 转map
+			Map<Long, SubjectWrapper.Subject> subjectMap = list.stream().collect(Collectors.groupingBy(e -> e.getCbsSubjectId(), Collectors.collectingAndThen(Collectors.toList(), v -> v.get(0))));
+
+			List<SubjectWrapper.CbsSubject> cbsSubjects = new ArrayList<>();
+			for (CbsSubjectWrapper.Subject subject : subjectPageInfo) {
+				SubjectWrapper.CbsSubject cbsSubject = new SubjectWrapper.CbsSubject();
+				BeanUtils.copyProperties(subject, cbsSubject);
+
+				List<CbsMusicalInstrumentWrapper.MusicalInstrumentQueryDto> musicalInstrumentQueryDtos = subjectIdMap.get(cbsSubject.getId());
+				if (CollectionUtils.isEmpty(musicalInstrumentQueryDtos)) {
+					continue;
+				}
+				cbsSubject.setInstruments(JSON.parseArray(JSON.toJSONString(musicalInstrumentQueryDtos), SubjectWrapper.Instrument.class));
+
+				cbsSubjects.add(cbsSubject);
+				// 本地已经添加过的曲目数据
+				SubjectWrapper.Subject subject1 = subjectMap.get(subject.getId());
+				if (subject1 == null) {
+					continue;
+				}
+				List<InstrumentWrapper.Instrument> instruments = subject1.getInstruments();
+				if (CollectionUtils.isEmpty(instruments)) {
+					continue;
+				}
+				// instruments 转map
+				Map<Long, InstrumentWrapper.Instrument> instrumentMap = instruments.stream().collect(Collectors.toMap(InstrumentWrapper.Instrument::getId, o -> o));
+				for (SubjectWrapper.Instrument instrument : cbsSubject.getInstruments()) {
+					instrument.setAdded(instrumentMap.containsKey(instrument.getId().longValue()));
+				}
+
+			}
+
+			return succeed(cbsSubjects);
+		} catch (Exception e) {
+			log.error("内容平台对应的声部数据查询失败", e);
+			throw BizException.from("内容平台服务异常");
+		}
     }
 }

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

@@ -2,6 +2,7 @@ package com.yonge.cooleshow.biz.dal.dao;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.dayaedu.cbs.openfeign.wrapper.music.CbsMusicSheetApiWrapper;
 import com.dayaedu.cbs.openfeign.wrapper.music.CbsMusicSheetApplicationExtendWrapper;
 import com.dayaedu.cbs.openfeign.wrapper.music.CbsMusicSheetExtendWrapper;
@@ -207,4 +208,6 @@ public interface MusicSheetDao extends BaseMapper<MusicSheet> {
     void updateMusicSheet(@Param("param") CbsMusicSheetApiWrapper.MusicSheetUpdate musicSheetUpdate);
 
     MusicSheet get(Long id);
+
+    IPage<MusicSheet> selectSyncPage(Page<Object> objectPage);
 }

+ 3 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/SubjectDao.java

@@ -77,5 +77,7 @@ public interface SubjectDao extends BaseDAO<Long, Subject> {
 
     int findCount(Map<String, Object> params);
 
-    List<SubjectWrapper.Subject> findPage(@Param("params") Map<String, Object> params);
+    List<SubjectWrapper.Subject> findPage(Map<String, Object> params);
+
+    List<Subject> notInSubjectIds(Long subjectId);
 }

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

@@ -39,4 +39,18 @@ public class PageUtil {
         resultPage.setTotal(total);
         return resultPage;
     }
+
+    public static <T,E> com.microsvc.toolkit.common.response.paging.PageInfo<T> transPageInfo(com.microsvc.toolkit.common.response.paging.PageInfo<E> source, List<T> rows) {
+        if (Objects.isNull(source)) {
+            return new com.microsvc.toolkit.common.response.paging.PageInfo<>();
+        }
+        int total = Integer.parseInt(String.valueOf(source.getTotal()));
+        int limit = Integer.parseInt(String.valueOf(source.getLimit()));
+        com.microsvc.toolkit.common.response.paging.PageInfo<T> resultPage = new com.microsvc.toolkit.common.response.paging.PageInfo<>();
+        resultPage.setRows(rows);
+        resultPage.setCurrent(Long.valueOf(source.getCurrent()).intValue());
+        resultPage.setLimit(limit);
+        resultPage.setTotal(total);
+        return resultPage;
+    }
 }

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

@@ -397,4 +397,5 @@ public interface MusicSheetService extends IService<MusicSheet> {
 
     MusicSheet initMusicSheet(String musicSheetJson);
 
+    void sync();
 }

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

@@ -68,4 +68,6 @@ public interface SubjectService extends BaseService<Long, Subject> {
 	Boolean enable(Subject subject);
 
 	PageInfo<SubjectWrapper.Subject> selectPage(SubjectWrapper.SubjectQuery query);
+
+	List<SubjectWrapper.Subject> list(SubjectWrapper.SubjectQuery query1);
 }

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

@@ -12,6 +12,7 @@ import javax.annotation.Resource;
 import java.util.ArrayList;
 import java.util.HashSet;
 import java.util.List;
+import java.util.Optional;
 
 @Service
 public class CbsUserServiceImpl implements CbsUserService {
@@ -31,7 +32,7 @@ public class CbsUserServiceImpl implements CbsUserService {
                 CbsUserWrapper.User user = new CbsUserWrapper.User();
                 user.setId(simpleUserDto.getUserId());
                 user.setUsername(query.getClientType() == null || query.getClientType() == EClientType.STUDENT ?
-                        simpleUserDto.getUsername() : simpleUserDto.getRealName());
+                        simpleUserDto.getUsername() : Optional.ofNullable(simpleUserDto.getRealName()).orElse(simpleUserDto.getUsername()));
                 user.setPhone(simpleUserDto.getPhone());
                 result.add(user);
             }

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

@@ -3,10 +3,12 @@ package com.yonge.cooleshow.biz.dal.service.impl;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.beust.jcommander.internal.Lists;
+import com.dayaedu.cbs.common.enums.EClientType;
+import com.dayaedu.cbs.common.enums.music.*;
 import com.dayaedu.cbs.common.enums.music.EMusicAvailableType;
-import com.dayaedu.cbs.common.enums.music.EMusicPaymentType;
 import com.dayaedu.cbs.common.enums.school.EMusicSheetType;
 import com.dayaedu.cbs.openfeign.client.MusicFeignClientService;
 import com.dayaedu.cbs.openfeign.properties.OpenFeignClientConfigProperties;
@@ -36,9 +38,7 @@ import com.yonge.cooleshow.biz.dal.service.*;
 import com.yonge.cooleshow.biz.dal.service.cbs.CbsMusicScoreService;
 import com.yonge.cooleshow.biz.dal.vo.*;
 import com.yonge.cooleshow.biz.dal.vo.res.OrderCreateRes;
-import com.yonge.cooleshow.biz.dal.wrapper.StatGroupWrapper;
-import com.yonge.cooleshow.biz.dal.wrapper.TenantGroupAlbumWrapper;
-import com.yonge.cooleshow.biz.dal.wrapper.UserPaymentOrderWrapper;
+import com.yonge.cooleshow.biz.dal.wrapper.*;
 import com.yonge.cooleshow.biz.dal.wrapper.music.MusicCompareWrapper;
 import com.yonge.cooleshow.common.constant.SysConfigConstant;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
@@ -65,6 +65,9 @@ import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.text.MessageFormat;
 import java.util.*;
+import java.util.concurrent.LinkedBlockingQueue;
+import java.util.concurrent.ThreadPoolExecutor;
+import java.util.concurrent.TimeUnit;
 import java.util.function.Function;
 import java.util.stream.Collectors;
 
@@ -430,6 +433,8 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao, MusicSheet
         }
         detailVo.setId(musicSheet.getId());
         detailVo.setCbsMusicSheetId(musicSheet1.getId());
+        detailVo.setMp3Type(AudioTypeEnum.valueOf(musicSheet1.getIsPlayBeat()&&musicSheet1.getIsUseSystemBeat()?"MP3":"MP3_METRONOME"));
+        detailVo.setIsPlayBeat(musicSheet1.getIsPlayBeat());
         detailVo.setAudioType(AudioTypeEnum.valueOf(musicSheet1.getPlayMode().getCode()));
         detailVo.setCanEvaluate(musicSheet1.getIsEvaluated() ? YesOrNoEnum.YES : YesOrNoEnum.NO);
         detailVo.setShowFingering(musicSheet1.getIsShowFingering() ? YesOrNoEnum.YES : YesOrNoEnum.NO);
@@ -461,7 +466,7 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao, MusicSheet
                 background.add(accompaniment);
             }
             //按照sortNumber排序
-            background.sort(Comparator.comparing(MusicSheetAccompaniment::getSortNumber));
+//            background.sort(Comparator.comparing(MusicSheetAccompaniment::getSortNumber));
             detailVo.setBackground(background);
         }
     }
@@ -1476,10 +1481,9 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao, MusicSheet
         addMusicSheetApplicationExtend.setTopFlag(musicSheet.getTopFlag() != YesOrNoEnum.YES);
         addMusicSheetApplicationExtend.setMusicTagIds(musicSheet.getMusicTag());
         addMusicSheetApplicationExtend.setMusicPrice(musicSheet.getMusicPrice());
-        addMusicSheetApplicationExtend.setPaymentType(EMusicPaymentType.valueOf(musicSheet.getPaymentType()));
+        addMusicSheetApplicationExtend.setPaymentType(musicSheet.getPaymentType());
         addMusicSheetApplicationExtend.setAvailableType(EMusicAvailableType.valueOf("TEACHER".equals(musicSheet.getPaymentType()) ?
                 "PERSON" : "PLATFORM".equals(musicSheet.getPaymentType()) ? "PLATFORM":"ORG"));
-        addMusicSheetApplicationExtend.setTopFlag(musicSheet.getTopFlag() == YesOrNoEnum.YES);
         addMusicSheetApplicationExtend.setExquisiteFlag(musicSheet.getExquisiteFlag() == YesOrNoEnum.YES);
         addMusicSheetApplicationExtend.setSortNo(musicSheet.getSortNumber());
         R<JSONObject> jsonObjectR = musicFeignClientService.musicSheetApplicationExtendUpdate(addMusicSheetApplicationExtend);
@@ -2002,8 +2006,8 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao, MusicSheet
             CbsMusicSheetApplicationExtendClientWrapper.AddMusicSheetApplicationExtend applicationExtend = extend.get(0);
             musicSheetAudit.setMusicTag(applicationExtend.getMusicTagIds());
             if(applicationExtend.getPaymentType() != null){
-                musicSheetAudit.setPaymentType(applicationExtend.getPaymentType().getCode());
-                musicSheetAudit.setChargeType(ChargeTypeEnum.valueOf(applicationExtend.getPaymentType().getCode()));
+                musicSheetAudit.setPaymentType(applicationExtend.getPaymentType());
+                musicSheetAudit.setChargeType(ChargeTypeEnum.valueOf(applicationExtend.getPaymentType()));
             }
             if(applicationExtend.getTopFlag() != null){
                 musicSheetAudit.setTopFlag(applicationExtend.getTopFlag()? YesOrNoEnum.YES: YesOrNoEnum.NO);
@@ -2020,6 +2024,220 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao, MusicSheet
         return musicSheetAudit;
     }
 
+
+    @Override
+    public void sync() {
+        // 分页查询,每次100条
+        int curPage = 1;
+        int pageSize = 50;
+        Date date = new Date();
+        // 100个线程的无界线程池
+        ThreadPoolExecutor executorService =  new ThreadPoolExecutor(50, 50,
+            0L, TimeUnit.MILLISECONDS,
+            new LinkedBlockingQueue<>());
+        while (true) {
+            IPage<MusicSheet> page = baseMapper.selectSyncPage(new Page<>(curPage, pageSize));
+            List<MusicSheet> records = page.getRecords();
+            if (CollectionUtils.isEmpty(records)) {
+                break;
+            }
+            for (MusicSheet record : records) {
+                if (record.getCbsMusicSheetId() != null) {
+                    continue;
+                }
+
+                executorService.submit(() ->
+                    {
+
+                        try {
+
+                            syncMusicSheet(record, date);
+                        }catch (Exception e) {
+                            log.error("曲目同步异常,曲目ID:{}", record.getId(), e);
+                        }
+                    }
+                );
+            }
+
+            curPage++;
+        }
+
+        while (!executorService.getQueue().isEmpty()) {
+            try {
+                log.info("线程池中正在执行的任务数量:{},等待数量:{}", executorService.getActiveCount(),executorService.getQueue().size());
+                Thread.sleep(1000);
+            } catch (InterruptedException e) {
+                log.error("线程等待异常", e);
+            }
+        }
+        log.info("-------------------- 曲目数据同步成功! -------------------------------");
+        executorService.shutdown();
+    }
+
+
+    private void syncMusicSheet(MusicSheet record, Date date) {
+        if (record.getCbsMusicSheetId() !=null) {
+            return;
+        }
+        List<MusicSheetAccompaniment> list = musicSheetAccompanimentService.lambdaQuery().eq(MusicSheetAccompaniment::getMusicSheetId, record.getId()).list();
+
+        CbsMusicSheetWrapper.AddMusicSheet addMusicSheet = this.musicToAddMusicSheet(record,list);
+
+        R<CbsMusicSheetWrapper.MusicSheet> musicSheetR = musicFeignClientService.musicCbsSync(addMusicSheet);
+        try {
+            CbsMusicSheetWrapper.MusicSheet musicSheet = musicSheetR.feignData();
+            if (musicSheet == null) {
+                log.error("曲目同步失败,曲目ID:{}", record.getId());
+                return;
+            }
+            MusicSheet musicSheet1 = new MusicSheet();
+            musicSheet1.setId(record.getId());
+            musicSheet1.setCbsMusicSheetId(musicSheet.getId());
+//            musicSheet1.setCbsSubjectId(musicSheet.getSubjectIds());
+            musicSheet1.setMusicSheetName(musicSheet.getName());
+            this.updateById(musicSheet1);
+        } catch (Exception e){
+            log.error("曲目同步失败,曲目ID:{}", record.getId());
+        }
+
+    }
+
+    private CbsMusicSheetWrapper.AddMusicSheet musicToAddMusicSheet(MusicSheet from, List<MusicSheetAccompaniment> accList) {
+        if (from == null) {
+            throw com.microsvc.toolkit.common.webportal.exception.BizException.from("参数错误");
+        }
+        CbsMusicSheetWrapper.AddMusicSheet addMusicSheet = new CbsMusicSheetWrapper.AddMusicSheet();
+        addMusicSheet.setId(from.getId());
+        addMusicSheet.setMusicCover(from.getTitleImg());
+        addMusicSheet.setName(from.getMusicSheetName());
+        if (StringUtils.isNotBlank(from.getMusicSubject())) {
+            List<Long> subjectIds = Arrays.stream(from.getMusicSubject().split(","))
+                .map(Long::parseLong).collect(Collectors.toList());
+            List<Subject> list = subjectService.findBySubjectByIdList(subjectIds);
+            if (CollectionUtils.isNotEmpty(list)) {
+                addMusicSheet.setSubjectIds(list.stream().map(o->o.getCbsSubjectId().toString()).collect(Collectors.joining(",")));
+            }
+        }
+        addMusicSheet.setSendAppFlag(false);
+        addMusicSheet.setAppAuditFlag(from.getAuditVersion() ==YesOrNoEnum.YES);
+        addMusicSheet.setRemark(from.getRemark());
+
+        addMusicSheet.setMusicCategoryId(110061L);
+        addMusicSheet.setComposer(from.getComposer());
+        if (from.getMusicSheetType() != null) {
+            addMusicSheet.setMusicSheetType(from.getMusicSheetType() == MusicSheetTypeEnum.CONCERT?EMusicSheetType.CONCERT:EMusicSheetType.SINGLE);
+        } else {
+            addMusicSheet.setMusicSheetType(EMusicSheetType.SINGLE);
+
+        }
+        if (from.getMp3Type() !=null && from.getMp3Type() == AudioTypeEnum.MP3) {
+            addMusicSheet.setIsPlayBeat(true);
+            addMusicSheet.setIsUseSystemBeat(true);
+        } else {
+            addMusicSheet.setIsPlayBeat(true);
+            addMusicSheet.setIsUseSystemBeat(false);
+        }
+        if (from.getCanEvaluate() !=null) {
+            addMusicSheet.setIsEvaluated(from.getCanEvaluate() == YesOrNoEnum.YES);
+        } else {
+            addMusicSheet.setIsEvaluated(true);
+        }
+        addMusicSheet.setIsConvertibleScore(from.getNotation() == null ||from.getNotation() == YesOrNoEnum.YES);
+        addMusicSheet.setIsShowFingering(from.getShowFingering()  ==null ||from.getShowFingering() ==YesOrNoEnum.YES);
+        addMusicSheet.setPlaySpeed(Optional.ofNullable(from.getPlaySpeed()).map(String::valueOf).orElse(null));
+        if (from.getAudioType() !=null) {
+            addMusicSheet.setPlayMode( from.getAudioType() == AudioTypeEnum.MP3?EMusicPlayMode.MP3:EMusicPlayMode.MIDI);
+        } else {
+            addMusicSheet.setPlayMode(EMusicPlayMode.MP3);
+
+        }
+        addMusicSheet.setXmlFileUrl(from.getXmlFileUrl());
+        addMusicSheet.setMidiFileUrl(from.getMidiUrl());
+        addMusicSheet.setMusicJson(from.getMusicJSON());
+        addMusicSheet.setMusicSvg(from.getMusicSvg());
+        addMusicSheet.setMusicJianSvg(from.getMusicJianSvg());
+        addMusicSheet.setMusicFirstSvg(from.getMusicFirstSvg());
+
+        addMusicSheet.setMusicJianImg(from.getMusicJianSvg());
+        addMusicSheet.setMusicFirstImg(from.getMusicFirstSvg());
+        addMusicSheet.setMusicImg(from.getMusicImg());
+        addMusicSheet.setExtConfigJson(from.getExtConfigJson());
+        addMusicSheet.setCreateTime(from.getCreateTime());
+        addMusicSheet.setAudioType(from.getAccompanimentType() !=null && from.getAccompanimentType() == AccompanimentTypeEnum.COMMON? EAudioType.COMMON:EAudioType.HOMEMODE);
+        if (from.getSourceType() !=null) {
+            addMusicSheet.setAvailableType(from.getSourceType() == SourceTypeEnum.PLATFORM?EMusicAvailableType.PLATFORM:EMusicAvailableType.PERSON);
+            addMusicSheet.setSourceType(from.getSourceType() == SourceTypeEnum.PLATFORM?EMusicSourceType.PLATFORM:EMusicSourceType.PERSON);
+        } else {
+            addMusicSheet.setAvailableType(EMusicAvailableType.PLATFORM);
+            addMusicSheet.setSourceType(EMusicSourceType.PLATFORM);
+        }
+        addMusicSheet.setStatus(from.getState() == YesOrNoEnum.YES);
+        addMusicSheet.setReason(from.getReason());
+
+        String tracks = "";
+        // 伴奏,原音 扩展信息
+        if (addMusicSheet.getPlayMode() == EMusicPlayMode.MP3) {
+            CbsMusicSheetWrapper.MusicSheetAccompaniment musicSheetAccompaniment = new CbsMusicSheetWrapper.MusicSheetAccompaniment();
+            if (StringUtils.isNotBlank(from.getMetronomeUrl())) {
+                musicSheetAccompaniment.setAudioFileUrl(from.getMetronomeUrl());
+            }else if (StringUtils.isNotBlank(from.getUrl())) {
+                musicSheetAccompaniment.setAudioFileUrl(from.getUrl());
+            } else if (StringUtils.isNotBlank(from.getAudioFileUrl())) {
+                musicSheetAccompaniment.setAudioFileUrl(from.getAudioFileUrl());
+            }
+            if (StringUtils.isNotBlank(musicSheetAccompaniment.getAudioFileUrl())) {
+                addMusicSheet.setMusicSheetAccompanimentList(Lists.newArrayList(musicSheetAccompaniment));
+            }
+            if (CollectionUtils.isNotEmpty(accList)) {
+                List<CbsMusicSheetWrapper.MusicSheetSound> musicSheetSounds = new ArrayList<>();
+                for (MusicSheetAccompaniment sheetAccompaniment : accList) {
+                    CbsMusicSheetWrapper.MusicSheetSound musicSheetSound = new CbsMusicSheetWrapper.MusicSheetSound();
+                    if (StringUtils.isNotBlank(sheetAccompaniment.getAudioFileUrl())){
+                        musicSheetSound.setAudioFileUrl(sheetAccompaniment.getAudioFileUrl());
+                    } else if (StringUtils.isNotBlank(sheetAccompaniment.getMetronomeUrl())) {
+                        musicSheetSound.setAudioFileUrl(sheetAccompaniment.getMetronomeUrl());
+                    }
+                    musicSheetSound.setTrack(sheetAccompaniment.getTrack());
+                    musicSheetSound.setSortNumber(sheetAccompaniment.getSortNumber());
+                    if (StringUtils.isNotBlank(musicSheetSound.getAudioFileUrl())) {
+                        musicSheetSounds.add(musicSheetSound);
+                    }
+                }
+                tracks = musicSheetSounds.stream().map(CbsMusicSheetWrapper.MusicSheetSound::getTrack).collect(Collectors.joining(","));
+                addMusicSheet.setMusicSheetSoundList(musicSheetSounds);
+            }
+        }
+        addMusicSheet.setMultiTracksSelection(tracks);
+
+        CbsMusicSheetWrapper.MusicSheetExtend musicSheetExtend = new CbsMusicSheetWrapper.MusicSheetExtend();
+        musicSheetExtend.setApplicationId(Long.parseLong(openFeignClientConfigProperties.getAppId()));
+        if (from.getSourceType() !=null) {
+            if (from.getSourceType() == SourceTypeEnum.TEACHER) {
+                musicSheetExtend.setUserId(from.getUserId());
+                musicSheetExtend.setClientType(EClientType.TEACHER.name());
+            } else {
+                musicSheetExtend.setClientType(EClientType.BACKEND.name());
+            }
+        }
+        addMusicSheet.setMusicSheetExtend(musicSheetExtend);
+
+        // 应用扩展信息
+        CbsMusicSheetApplicationExtendClientWrapper.AddMusicSheetApplicationExtend addMusicSheetApplicationExtend = new CbsMusicSheetApplicationExtendClientWrapper.AddMusicSheetApplicationExtend();
+        addMusicSheetApplicationExtend.setApplicationId(Long.parseLong(openFeignClientConfigProperties.getAppId()));
+        addMusicSheetApplicationExtend.setStatus(addMusicSheet.getStatus());
+        addMusicSheetApplicationExtend.setSortNo(from.getSortNumber());
+        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.setMusicTagIds(from.getMusicTag());
+        addMusicSheetApplicationExtend.setMusicPrice(from.getMusicPrice());
+        addMusicSheet.setAddMusicSheetApplicationExtend(Lists.newArrayList(addMusicSheetApplicationExtend));
+        addMusicSheet.setIsConvertibleScore(true);
+        return addMusicSheet;
+    }
+
+
     private SysUser getSysUser(Long userId) {
         return Optional.ofNullable(userId)
                 .map(sysUserFeignService::queryUserById)

+ 3 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/SmsCodeServiceImpl.java

@@ -165,7 +165,9 @@ public class SmsCodeServiceImpl implements SmsCodeService {
 			sysUser = sysUserFeignService.queryUserInfo();
 			if (sysUser != null) {
 				userId = sysUser.getId();
-			}
+            } else {
+                userId = -1L;
+            }
 		}
 		SysConfig sysConfig = sysConfigService.findByParamName(SysConfigService.SMS_MAX_TIMES);
 		int times = 3;

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

@@ -4,7 +4,6 @@ import com.dayaedu.cbs.openfeign.client.MusicFeignClientService;
 import com.dayaedu.cbs.openfeign.wrapper.music.CbsSubjectWrapper;
 import com.dayaedu.cbs.openfeign.wrapper.musicInstrument.CbsMusicalInstrumentWrapper;
 import com.yonge.cooleshow.biz.dal.dao.SubjectDao;
-import com.yonge.cooleshow.biz.dal.dao.TeacherDao;
 import com.yonge.cooleshow.biz.dal.entity.Instrument;
 import com.yonge.cooleshow.biz.dal.entity.Subject;
 import com.yonge.cooleshow.biz.dal.queryInfo.SubjectQueryInfo;
@@ -45,8 +44,6 @@ public class SubjectServiceImpl extends BaseServiceImpl<Long, Subject> implement
     private MusicFeignClientService musicFeignClientService;
     @Resource
     private InstrumentService instrumentService;
-    @Resource
-    private TeacherDao teacherDao;
 
     @Override
     public BaseDAO<Long, Subject> getDAO() {
@@ -263,6 +260,7 @@ public class SubjectServiceImpl extends BaseServiceImpl<Long, Subject> implement
                 Subject subject = new Subject();
                 subject.setCbsSubjectId(addSubject.getCbsSubjectId());
                 subject.setEnableFlag(false);
+                subject.setParentSubjectId(addSubject.getParentSubjectId());
                 this.insert(subject);
                 subjectId= subject.getId();
             } else {
@@ -315,49 +313,51 @@ public class SubjectServiceImpl extends BaseServiceImpl<Long, Subject> implement
             pageInfo.setTotal(count);
             params.put("offset", pageInfo.getOffset());
             dataList = subjectDao.findPage(params);
-            // 转map
-            Map<Long, SubjectWrapper.Subject> subjectMap = dataList.stream().collect(Collectors.toMap(SubjectWrapper.Subject::getCbsSubjectId, Function.identity(),(o1, o2)->o1));
-            // cbs声部ID集合
-            List<Long> cbsSubjectIds = dataList.stream().map(SubjectWrapper.Subject::getCbsSubjectId).collect(Collectors.toList());
-            dataList = new ArrayList<>();
-            CbsSubjectWrapper.SubjectQuery subjectQuery = new CbsSubjectWrapper.SubjectQuery();
-            subjectQuery.setIds(cbsSubjectIds);
-            subjectQuery.setName(query.getKeyword());
-            subjectQuery.setPage(query.getPage());
-            subjectQuery.setRows(query.getRows());
-            try {
-                com.microsvc.toolkit.common.response.paging.PageInfo<CbsSubjectWrapper.Subject> subjectPageInfo = musicFeignClientService.subjectPage(subjectQuery).feignData();
-                List<CbsSubjectWrapper.Subject> rows = subjectPageInfo.getRows();
-                if (org.apache.commons.collections.CollectionUtils.isNotEmpty(rows)) {
-                    for (CbsSubjectWrapper.Subject row : rows) {
-                        SubjectWrapper.Subject subject = subjectMap.get(row.getId());
-                        if (subject == null) {
-                            log.warn("未查询到声部信息,id:{}", row.getId());
-                            continue;
+            if(query.getParentSubjectId() == null || query.getParentSubjectId() > 0){
+                // 转map
+                Map<Long, SubjectWrapper.Subject> subjectMap = dataList.stream().collect(Collectors.toMap(SubjectWrapper.Subject::getCbsSubjectId, Function.identity(),(o1, o2)->o1));
+                // cbs声部ID集合
+                List<Long> cbsSubjectIds = dataList.stream().map(SubjectWrapper.Subject::getCbsSubjectId).collect(Collectors.toList());
+                dataList = new ArrayList<>();
+                CbsSubjectWrapper.SubjectQuery subjectQuery = new CbsSubjectWrapper.SubjectQuery();
+                subjectQuery.setIds(cbsSubjectIds);
+                subjectQuery.setName(query.getKeyword());
+                subjectQuery.setPage(1);
+                subjectQuery.setRows(query.getRows());
+                try {
+                    com.microsvc.toolkit.common.response.paging.PageInfo<CbsSubjectWrapper.Subject> subjectPageInfo = musicFeignClientService.subjectPage(subjectQuery).feignData();
+                    List<CbsSubjectWrapper.Subject> rows = subjectPageInfo.getRows();
+                    if (org.apache.commons.collections.CollectionUtils.isNotEmpty(rows)) {
+                        for (CbsSubjectWrapper.Subject row : rows) {
+                            SubjectWrapper.Subject subject = subjectMap.get(row.getId());
+                            if (subject == null) {
+                                log.warn("未查询到声部信息,id:{}", row.getId());
+                                continue;
+                            }
+                            subject.setCbsSubjectName(row.getName());
+                            subject.setName(row.getName());
+                            subject.setCode(row.getCode());
+                            dataList.add(subject);
                         }
-                        subject.setCbsSubjectName(row.getName());
-                        subject.setName(row.getName());
-                        subject.setCode(row.getCode());
-                        dataList.add(subject);
                     }
+                } catch (Exception e) {
+                    log.error("调用音乐服务查询曲目详情失败", e);
                 }
-            } catch (Exception e) {
-                log.error("调用音乐服务查询曲目详情失败", e);
+                // 设置声部下的乐器信息
+                List<Integer> subjectIds = dataList.stream().map(SubjectWrapper.Subject::getId).distinct().collect(Collectors.toList());
+                Map<Integer, List<InstrumentWrapper.Instrument>> groupBySubjectId = instrumentService.getGroupBySubjectId(subjectIds, query.getEnableFlag());
+                Map<Long, Subject> map = this.findBySubjectByIdList(dataList.stream().map(SubjectWrapper.Subject::getParentSubjectId).collect(Collectors.toList())).stream()
+                        .collect(Collectors.toMap(Subject::getId, t -> t));
+                dataList.forEach(e -> {
+                    if(e.getParentSubjectId() != null && e.getParentSubjectId() > 0) {
+                        e.setParentSubjectName(map.get(e.getParentSubjectId()).getName());
+                    }
+                    List<InstrumentWrapper.Instrument> instruments = groupBySubjectId.get(e.getId());
+                    if (org.apache.commons.collections.CollectionUtils.isNotEmpty(instruments)) {
+                        e.setInstruments(instruments);
+                    }
+                });
             }
-            // 设置声部下的乐器信息
-            List<Integer> subjectIds = dataList.stream().map(SubjectWrapper.Subject::getId).distinct().collect(Collectors.toList());
-            Map<Integer, List<InstrumentWrapper.Instrument>> groupBySubjectId = instrumentService.getGroupBySubjectId(subjectIds, query.getEnableFlag());
-            Map<Long, Subject> map = this.findBySubjectByIdList(dataList.stream().map(SubjectWrapper.Subject::getParentSubjectId).collect(Collectors.toList())).stream()
-                    .collect(Collectors.toMap(Subject::getId, t -> t));
-            dataList.forEach(e -> {
-                if(e.getParentSubjectId() != null && e.getParentSubjectId() > 0) {
-                    e.setParentSubjectName(map.get(e.getParentSubjectId()).getName());
-                }
-                List<InstrumentWrapper.Instrument> instruments = groupBySubjectId.get(e.getId());
-                if (org.apache.commons.collections.CollectionUtils.isNotEmpty(instruments)) {
-                    e.setInstruments(instruments);
-                }
-            });
         }
         if (count == 0) {
             dataList = new ArrayList<>();
@@ -366,6 +366,33 @@ public class SubjectServiceImpl extends BaseServiceImpl<Long, Subject> implement
         return pageInfo;
     }
 
+    @Override
+    public List<SubjectWrapper.Subject> list(SubjectWrapper.SubjectQuery query) {
+        query.setPage(1);
+        query.setRows(9999);
+        Map<String, Object> params = new HashMap<>();
+        MapUtil.populateMap(params, query);
+
+        PageInfo<SubjectWrapper.Subject> subjectIPage = this.selectPage(query);
+        List<SubjectWrapper.Subject> records = subjectIPage.getRows();
+        if (CollectionUtils.isEmpty(records)) {
+            return records;
+        }
+        String instrumentIds = query.getInstrumentIds();
+        List<Long> instrumentIdList = new ArrayList<>();
+        if (StringUtils.isNotEmpty(instrumentIds)) {
+            List<Long> collect = Arrays.stream(instrumentIds.split(",")).map(Long::valueOf).distinct().collect(Collectors.toList());
+            instrumentIdList.addAll(collect);
+        }
+        if (!instrumentIdList.isEmpty()) {
+            records.forEach(record -> {
+                List<InstrumentWrapper.Instrument> instruments = record.getInstruments();
+                instruments.removeIf(next -> !instrumentIdList.contains(next.getId()));
+            });
+        }
+        return records;
+    }
+
     /***
      * 查询声部树
      * @param: sub

+ 19 - 8
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/SysMessageServiceImpl.java

@@ -39,6 +39,7 @@ import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
 import java.util.*;
+import java.util.stream.Collectors;
 
 @Service
 public class SysMessageServiceImpl extends BaseServiceImpl<Long, SysMessage> implements SysMessageService {
@@ -82,33 +83,43 @@ public class SysMessageServiceImpl extends BaseServiceImpl<Long, SysMessage> imp
 			LOGGER.error("接收地址不能为空");
 			return;
 		}
-		List<BasicUserInfo> basicUserInfo = teacherDao.findBasicUserInfo(receivers.keySet());
+		// 处理注册时没有用户ID
+		if (receivers.containsKey(null)) {
+			String phone = receivers.get(null);
+			receivers.remove(null);
+			if (StringUtils.isNotEmpty(phone)) {
+				receivers.put(-1L, phone);
+			}
+		}
 		List<CbsMessageWrapper.MessageParam> messageParams = new ArrayList<>();
-		for (BasicUserInfo user : basicUserInfo) {
+		List<BasicUserInfo> basicUserInfo = teacherDao.findBasicUserInfo(receivers.keySet());
+		Map<Long, String> userIdPhoneMap = basicUserInfo.stream().collect(Collectors.toMap(BasicUserInfo::getUserId, BasicUserInfo::getPhone));
+		receivers.forEach((userId, value) -> {
+			String phone = userIdPhoneMap.getOrDefault(userId, null);
 			CbsMessageWrapper.MessageParam messageParam = new CbsMessageWrapper.MessageParam();
-			messageParam.setUserId(user.getUserId());
+			messageParam.setUserId(userId);
 			messageParam.setAppKey(EAppKey.KLX);
 			messageParam.setClientType(getClientType(jpushType));
 			messageParam.setClientId(messageParam.getClientType());
 			messageParam.setType(type.getCode());
 			messageParam.setUrl(url);
 			Map<Long, String> params = new HashMap<>();
-			params.put(user.getUserId(), user.getPhone());
+			params.put(userId, Optional.ofNullable(phone).orElse(value));
 			messageParam.setReceivers(params);
 			messageParam.setRealSend(!debugMode);
-			if(args != null && args.length > 0){
+			if (args != null && args.length > 0) {
 				String[] argsStr = new String[args.length];
 				for (int i = 0; i < args.length; i++) {
-					if (args[i]!=null){
+					if (args[i] != null) {
 						argsStr[i] = args[i].toString();
-					}else {
+					} else {
 						argsStr[i] = "";
 					}
 				}
 				messageParam.setContentArgs(argsStr);
 			}
 			messageParams.add(messageParam);
-		}
+		});
 		messageFeignClientService.sysMessageBatchSendMessage(messageParams);
 	}
 

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

@@ -574,7 +574,9 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme
         if (null == teacher) {
             teacher = new Teacher();
             teacher.setUserId(teacherSubmitReq.getUserId());
-            teacher = getTeacherDetil(teacher, teacherSubmitReq);
+            teacher.setEntryFlag(YesOrNoEnum.NO);
+            teacher.setMusicianFlag(YesOrNoEnum.NO);
+            getTeacherDetil(teacher, teacherSubmitReq);
             baseMapper.insert(teacher);
 
             // 导入IM账号到三方
@@ -693,10 +695,6 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme
      */
     private Teacher getTeacherDetil(Teacher teacher, TeacherSubmitReq teacherSubmitReq) {
         teacher.setSubjectId(teacherSubmitReq.getSubjectId());
-        teacher.setEntryFlag(YesOrNoEnum.NO);
-        teacher.setEntryAuthDate(null);
-        teacher.setMusicianFlag(YesOrNoEnum.NO);
-        teacher.setMusicianDate(null);
         teacher.setIsSettlement(teacherSubmitReq.getIsSettlement());
         teacher.setIsTestUser(teacherSubmitReq.getIsTestUser());
         teacher.setSettlementFrom(teacherSubmitReq.getSettlementFrom());
@@ -709,11 +707,15 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme
         for (String teacherType : teacherTypes) {
             if (TeacherTypeEnum.ENTRY.getCode().equals(teacherType)) {
                 teacher.setEntryFlag(YesOrNoEnum.YES);
-                teacher.setEntryAuthDate(new Date());
+                if (teacher.getTeacherDate() == null) {
+                    teacher.setEntryAuthDate(new Date());
+                }
             }
             if (TeacherTypeEnum.MUSICIAN.getCode().equals(teacherType)) {
                 teacher.setMusicianFlag(YesOrNoEnum.YES);
-                teacher.setMusicianDate(new Date());
+                if (teacher.getMusicDate() == null) {
+                    teacher.setMusicianDate(new Date());
+                }
             }
         }
         return teacher;

+ 3 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/MusicSheetDetailVo.java

@@ -56,6 +56,9 @@ public class MusicSheetDetailVo extends MusicSheet {
     @ApiModelProperty("审核理由")
     private String reason;
 
+    @ApiModelProperty("是否使用节拍器")
+    private Boolean isPlayBeat;
+
 //    @ApiModelProperty("上一次审核的曲目信息")
 //    private MusicSheetDetailVo lastMusicSheet;
 

+ 191 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/wrapper/MusicSheetWrapper.java

@@ -2,9 +2,11 @@ package com.yonge.cooleshow.biz.dal.wrapper;
 
 import com.alibaba.fastjson.JSON;
 import com.dayaedu.cbs.common.enums.EClientType;
-import com.dayaedu.cbs.common.enums.music.EAudioType;
+import com.dayaedu.cbs.common.enums.music.*;
 import com.dayaedu.cbs.common.enums.school.EMusicSheetType;
+import com.dayaedu.cbs.openfeign.wrapper.music.CbsMusicSheetWrapper;
 import com.microsvc.toolkit.common.response.paging.QueryInfo;
+import com.yonge.cooleshow.common.enums.YesOrNoEnum;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.AllArgsConstructor;
@@ -280,6 +282,9 @@ public class MusicSheetWrapper {
         @ApiModelProperty("所属学校ID")
         private String schoolIds;
 
+        @ApiModelProperty(value = "是否审核时可见 (0:否  1:是)")
+        private YesOrNoEnum auditVersion;
+
         public String jsonString() {
             return JSON.toJSONString(this);
         }
@@ -289,4 +294,189 @@ public class MusicSheetWrapper {
         }
 	}
 
+    @Data
+    @ApiModel(" MusicSheet-曲目表")
+    public static class CbsMusicSheet {
+
+        @ApiModelProperty("主键")
+        private String id;
+
+        @ApiModelProperty("业务平台曲目ID")
+        private String bizId;
+
+        @ApiModelProperty("曲目分类ID")
+        private String musicCategoryId;
+
+        @ApiModelProperty("曲目分类名称")
+        private String musicCategoryName;
+
+        @ApiModelProperty("曲目标签")
+        private String musicTag;
+
+        @ApiModelProperty("曲目标签名称")
+        private String musicTagNames;
+
+        @ApiModelProperty("曲目封面图")
+        private String musicCover;
+
+        @ApiModelProperty("曲目名称")
+        private String name;
+
+        @ApiModelProperty("是否审核版本")
+        private Boolean appAuditFlag;
+
+        @ApiModelProperty("曲目声部(多个,用逗号分隔)")
+        private String subjectIds;
+
+        @ApiModelProperty("曲目声部code")
+        private String subjectCodes;
+
+        @ApiModelProperty("曲目声部名称")
+        private String subjectNames;
+
+        @ApiModelProperty("曲目乐器(多个,用逗号分隔)")
+        private String musicalInstrumentIds;
+
+        @ApiModelProperty("曲目乐器code")
+        private String musicalInstrumentIdCodes;
+
+        @ApiModelProperty("曲目乐器名称")
+        private String musicalInstrumentNames;
+
+        @ApiModelProperty("作曲人/音乐人")
+        private String composer;
+
+        @ApiModelProperty("曲目类型(SINGLE:单曲 CONCERT:合奏)")
+        private EMusicSheetType musicSheetType;
+
+        @ApiModelProperty("是否使用系统节拍器(0:否;1:是)")
+        private Boolean isUseSystemBeat;
+
+        @ApiModelProperty("是否可评测(0:否;1:是)") //  midi默认1, mp3 有伴奏1
+        private Boolean isEvaluated;
+
+        @ApiModelProperty("是否可转谱(0:否; 1:是)") // 固定调,首调 有值 1
+        private Boolean isConvertibleScore;
+
+        @ApiModelProperty("是否展示指法(0:否;1:是)") // moren 1
+        private Boolean isShowFingering;
+
+        @ApiModelProperty("是否播入节拍器(0: 否 1:是)")
+        private Boolean isPlayBeat;
+
+        @ApiModelProperty("多声轨选择")
+        private String multiTracksSelection;
+
+        @ApiModelProperty("播放速度")
+        private String playSpeed;
+
+        @ApiModelProperty("播放模式(MIDI;MP3)")
+        private EMusicPlayMode playMode;
+
+        @ApiModelProperty("XML文件")
+        private String xmlFileUrl;
+
+        @ApiModelProperty("MIDI文件(保留字段)")
+        private String midiFileUrl;
+
+        @ApiModelProperty("曲目JSON")
+        private String musicJson;
+
+        @ApiModelProperty("曲目缓存JSON(后续使用)")
+        private String musicSvgJson;
+
+        @ApiModelProperty("曲目缓存")
+        private String musicSvg;
+
+
+        @ApiModelProperty("评测标准 节奏 AMPLITUDE 音准 FREQUENCY 分贝 DECIBELS")
+        private EEvaluationStandard evaluationStandard;
+
+        @ApiModelProperty("简谱缓存")
+        private String musicJianSvg;
+
+        @ApiModelProperty("首调缓存")
+        private String musicFirstSvg;
+
+        @ApiModelProperty("谱面图片JSON(后续使用)")
+        private String musicImgJson;
+
+        @ApiModelProperty("五线谱图片")
+        private String musicImg;
+
+        @ApiModelProperty("首调图片")
+        private String musicFirstImg;
+
+        @ApiModelProperty("固定调图片")
+        private String musicJianImg;
+
+        @ApiModelProperty("谱面参数设置")
+        private String extConfigJson;
+
+        @ApiModelProperty("谱面样式参数设置")
+        private String extStyleConfigJson;
+
+        @ApiModelProperty("可用类型(PLATFORM: 平台; ORG: 机构; PERSON: 个人)") // 暂时没有
+        private EMusicAvailableType availableType;
+
+        @ApiModelProperty("来源类型/作者属性(PLATFORM: 平台; ORG: 机构; PERSON: 个人)") // 作者属性
+        private EMusicSourceType sourceType;
+
+        @ApiModelProperty("音频类型(HOMEMODE: 自制 COMMON: 普通)")
+        private EAudioType audioType;
+
+        @ApiModelProperty("曲目状态(0:停用,1:启用)")
+        private Boolean status;
+
+        @ApiModelProperty("停用原因")
+        private String reason;
+
+        @ApiModelProperty("备注")
+        private String remark;
+
+        @ApiModelProperty("逻辑删除标识(0: 未删 1:已删)")
+        private Boolean delFlag;
+
+        @ApiModelProperty("更新人")
+        private Long updateBy;
+
+        @ApiModelProperty("更新时间")
+        private Date updateTime;
+
+        @ApiModelProperty("创建人")
+        private Long createBy;
+
+        @ApiModelProperty("上传人名称")
+        private String createByName;
+
+        @ApiModelProperty("创建时间")
+        private Date createTime;
+
+        @ApiModelProperty("评测频率,详情返回,指定应用端")
+        private String evaluationFrequency;
+
+
+        @ApiModelProperty("曲目伴奏")
+        private List<CbsMusicSheetWrapper.MusicSheetAccompaniment> musicSheetAccompanimentList;
+
+
+        @ApiModelProperty("曲目原音")
+        private List<CbsMusicSheetWrapper.MusicSheetSound> musicSheetSoundList;
+
+
+        @ApiModelProperty("所属人信息")
+        private CbsMusicSheetWrapper.MusicSheetExtend musicSheetExtend;
+
+        @ApiModelProperty("乐器信息")
+        private List<CbsMusicSheetWrapper.MusicalInstrument> musicalInstruments;
+
+        public String jsonString() {
+            return JSON.toJSONString(this);
+        }
+
+        public static CbsMusicSheetWrapper.MusicSheet from(String json) {
+            return JSON.parseObject(json, CbsMusicSheetWrapper.MusicSheet.class);
+        }
+    }
+
 }

+ 7 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/wrapper/SubjectWrapper.java

@@ -39,6 +39,9 @@ public class SubjectWrapper {
         @ApiModelProperty("声部ID")
         private Integer subjectId;
 
+        @ApiModelProperty("父级声部ID")
+        private Integer parentSubjectId;
+
         @ApiModelProperty("多个声部ID")
         private String subjectIds;
 
@@ -211,6 +214,10 @@ public class SubjectWrapper {
         @NotNull(message = "内容平台声部ID不能为空")
         private Long cbsSubjectId;
 
+        @ApiModelProperty("分类编号")
+        @NotNull(message = "分类编号不能为空")
+        private Long parentSubjectId;
+
         @ApiModelProperty("乐器ID")
         private List<Long> instrumentIds;
     }

+ 7 - 0
cooleshow-user/user-biz/src/main/resources/config/mybatis/MusicSheetMapper.xml

@@ -959,5 +959,12 @@
         from music_sheet t
         where t.id_ = #{id}
     </select>
+
+
+    <select id="selectSyncPage" resultType="com.yonge.cooleshow.biz.dal.entity.MusicSheet">
+        select *
+        from music_sheet
+        where del_flag_ = 0 and audit_status_ = 'PASS'
+    </select>
     <!--单曲专辑数量统计-->
 </mapper>

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

@@ -88,6 +88,9 @@
             <if test="delFlag != null">
                 del_flag_ = #{delFlag},
             </if>
+            <if test="enableFlag != null">
+                enable_flag_ = #{enableFlag},
+            </if>
             <if test="parentSubjectId != null">
                 parent_subject_id_ = #{parentSubjectId},
             </if>
@@ -237,29 +240,37 @@
         FROM subject t
         LEFT JOIN instrument i on t.id_ = i.subject_id_
         <where>
-            t.parent_subject_id_ != 0
-            <if test="param.delFlag != null">
-                AND t.del_flag_ = #{param.delFlag}
+            <if test="parentSubjectId != null">
+                AND t.parent_subject_id_ = #{parentSubjectId}
             </if>
-            <if test="param.subjectId != null">
-                AND t.id_ = #{param.subjectId}
+            <if test="parentSubjectId == null">
+                AND t.parent_subject_id_ != 0 AND t.cbs_subject_id_ is not null
             </if>
-            <if test="param.subjectIds != null">
-                AND find_in_set(t.id_,#{param.subjectIds})
+            <if test="keyword != null and keyword != ''">
+                AND t.name_ LIKE CONCAT('%',#{keyword},'%')
+            </if>
+            <if test="delFlag != null">
+                AND t.del_flag_ = #{delFlag}
             </if>
-            <if test="param.instrumentIds != null">
-                AND find_in_set(i.id_, #{param.instrumentIds})
+            <if test="subjectId != null">
+                AND t.id_ = #{subjectId}
             </if>
-            <if test="param.enableFlag != null">
-                AND t.enable_flag_ = #{param.enableFlag} and i.enable_flag_ = #{param.enableFlag}
+            <if test="subjectIds != null">
+                AND find_in_set(t.id_,#{subjectIds})
+            </if>
+            <if test="instrumentIds != null">
+                AND find_in_set(i.id_, #{instrumentIds})
+            </if>
+            <if test="enableFlag != null">
+                AND t.enable_flag_ = #{enableFlag} and i.enable_flag_ = #{enableFlag}
             </if>
         </where>
         group by t.id_
-        <if test="param.hasInstrument != null">
-            <if test="param.hasInstrument == true">
+        <if test="hasInstrument != null">
+            <if test="hasInstrument == true">
                 having count(i.id_) > 0
             </if>
-            <if test="param.hasInstrument == false">
+            <if test="hasInstrument == false">
                 having count(i.id_) = 0
             </if>
         </if>) t
@@ -286,32 +297,44 @@
         FROM subject t
         LEFT JOIN instrument i on t.id_ = i.subject_id_
         <where>
-            t.parent_subject_id_ != 0
-            <if test="param.delFlag != null">
-                AND t.del_flag_ = #{param.delFlag}
+            <if test="parentSubjectId != null">
+                AND t.parent_subject_id_ = #{parentSubjectId}
             </if>
-            <if test="param.subjectId != null">
-                AND t.id_ = #{param.subjectId}
+            <if test="parentSubjectId == null">
+                AND t.parent_subject_id_ != 0 AND t.cbs_subject_id_ is not null
             </if>
-            <if test="param.subjectIds != null">
-                AND find_in_set(t.id_,#{param.subjectIds})
+            <if test="keyword != null and keyword != ''">
+                AND t.name_ LIKE CONCAT('%',#{keyword},'%')
             </if>
-            <if test="param.instrumentIds != null">
-                AND find_in_set(i.id_, #{param.instrumentIds})
+            <if test="delFlag != null">
+                AND t.del_flag_ = #{delFlag}
+            </if>
+            <if test="subjectId != null">
+                AND t.id_ = #{subjectId}
+            </if>
+            <if test="subjectIds != null">
+                AND find_in_set(t.id_,#{subjectIds})
             </if>
-            <if test="param.enableFlag != null">
-                AND t.enable_flag_ = #{param.enableFlag} and i.enable_flag_ = #{param.enableFlag}
+            <if test="instrumentIds != null">
+                AND find_in_set(i.id_, #{instrumentIds})
+            </if>
+            <if test="enableFlag != null">
+                AND t.enable_flag_ = #{enableFlag} and i.enable_flag_ = #{enableFlag}
             </if>
         </where>
         group by t.id_
-        <if test="param.hasInstrument != null">
-            <if test="param.hasInstrument == true">
+        <if test="hasInstrument != null">
+            <if test="hasInstrument == true">
                 having count(i.id_) > 0
             </if>
-            <if test="param.hasInstrument == false">
+            <if test="hasInstrument == false">
                 having count(i.id_) = 0
             </if>
         </if>
+        <include refid="global.limit"/>
+    </select>
+    <select id="notInSubjectIds" resultMap="Subject">
+        SELECT * FROM subject WHERE del_flag_ = 0 and id_ != #{subjectId}
     </select>
 
     <update id="updateCbsSubjectIdNull">

+ 0 - 0
cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/SysMessageController.java


+ 0 - 0
cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/SysMessageController.java