瀏覽代碼

曲目同步

刘俊驰 10 月之前
父節點
當前提交
9b24244c69

+ 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();
+    }
 }

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

+ 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();
 }

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

@@ -3,10 +3,11 @@ 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.music.EMusicAvailableType;
-import com.dayaedu.cbs.common.enums.music.EMusicPaymentType;
+import com.dayaedu.cbs.common.enums.EClientType;
+import com.dayaedu.cbs.common.enums.music.*;
 import com.dayaedu.cbs.common.enums.school.EMusicSheetType;
 import com.dayaedu.cbs.openfeign.client.MusicFeignClientService;
 import com.dayaedu.cbs.openfeign.properties.OpenFeignClientConfigProperties;
@@ -36,9 +37,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 +64,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;
 
@@ -1473,7 +1475,7 @@ 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);
@@ -1999,8 +2001,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);
@@ -2017,6 +2019,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)

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

@@ -6,6 +6,7 @@ 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;
@@ -281,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);
         }

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