瀏覽代碼

fix 云教练整合接口cbsDetail

shangke 8 月之前
父節點
當前提交
46c9d40eb8

+ 86 - 0
mec-application/src/main/java/com/ym/mec/student/controller/MusicSheetController.java

@@ -0,0 +1,86 @@
+package com.ym.mec.student.controller;
+
+import com.alibaba.fastjson.JSON;
+import com.dayaedu.cbs.openfeign.wrapper.music.CbsMusicSheetWrapper;
+import com.microsvc.toolkit.common.response.template.R;
+import com.ym.mec.biz.dal.entity.SysMusicScore;
+import com.ym.mec.biz.dal.wrapper.InstrumentWrapper;
+import com.ym.mec.biz.service.InstrumentService;
+import com.ym.mec.biz.service.SysMusicScoreService;
+import com.ym.mec.vo.MusicSheetVo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+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.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+@Slf4j
+@Validated
+@RestController
+@RequestMapping("${app-config.url.student:}/musicSheet")
+@Api(tags = "曲谱表")
+public class MusicSheetController {
+
+    @Autowired
+    private SysMusicScoreService musicSheetService;
+
+    @Autowired
+    private InstrumentService instrumentService;
+
+    /**
+     * 查询单条
+     *
+     * @param id 详情ID
+     * @return R<MusicSheetVo.MusicSheet>
+     */
+    @ApiOperation(value = "查询内容平台数据")
+    @ApiImplicitParams({
+        @ApiImplicitParam(name = "id", value = "id", dataType = "long")
+    })
+    @GetMapping("/cbsDetail/{id}")
+    public R<MusicSheetVo.OpenMusicSheetDetail> cbsDetail(@PathVariable("id") Integer id) {
+        CbsMusicSheetWrapper.MusicSheet musicSheet = musicSheetService.cbsDetail(id);
+        musicSheet.setBizId(Long.valueOf(id));
+
+        MusicSheetVo.MusicSheetDetail musicSheetDetail = JSON.parseObject(JSON.toJSONString(musicSheet), MusicSheetVo.MusicSheetDetail.class);
+        SysMusicScore detail = musicSheetService.get(id);
+        if (detail == null) {
+            musicSheetDetail.setBizMusicCategoryId(null);
+        } else {
+            //musicSheetDetail.setPaymentType(detail.get());
+            musicSheetDetail.setBizMusicCategoryId(detail.getCategoriesId() == null ? null : detail.getCategoriesId().longValue());
+        }
+
+        // 设置乐器信息
+        if (StringUtils.isNotBlank(musicSheetDetail.getMusicalInstrumentIds())) {
+            List<Integer> instrumentIds = Arrays.stream(musicSheetDetail.getMusicalInstrumentIds().split(","))
+                .map(Integer::parseInt).collect(Collectors.toList());
+
+            if (CollectionUtils.isNotEmpty(instrumentIds) && CollectionUtils.isNotEmpty(musicSheetDetail.getMusicalInstruments())) {
+                Map<Integer, InstrumentWrapper.Instrument> instrumentMap = instrumentService.getMapByIds(instrumentIds);
+                for (CbsMusicSheetWrapper.MusicalInstrument musicalInstrument : musicSheetDetail.getMusicalInstruments()) {
+                    InstrumentWrapper.Instrument instrument = instrumentMap.get(musicalInstrument.getId());
+                    if (instrument != null) {
+                        musicalInstrument.setOrientation(instrument.getOrientation());
+                    }
+
+                }
+            }
+        }
+        return R.from(MusicSheetVo.OpenMusicSheetDetail.from(musicSheetDetail.jsonString()));
+    }
+
+}

+ 86 - 0
mec-application/src/main/java/com/ym/mec/student/controller/open/OpenMusicSheetController.java

@@ -0,0 +1,86 @@
+package com.ym.mec.student.controller.open;
+
+import com.alibaba.fastjson.JSON;
+import com.dayaedu.cbs.openfeign.wrapper.music.CbsMusicSheetWrapper;
+import com.microsvc.toolkit.common.response.template.R;
+import com.ym.mec.biz.dal.entity.SysMusicScore;
+import com.ym.mec.biz.dal.wrapper.InstrumentWrapper;
+import com.ym.mec.biz.service.InstrumentService;
+import com.ym.mec.biz.service.SysMusicScoreService;
+import com.ym.mec.vo.MusicSheetVo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+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.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+@Slf4j
+@Validated
+@RestController
+@RequestMapping("${app-config.url.student:}/open/musicSheet")
+@Api(tags = "曲谱表")
+public class OpenMusicSheetController {
+
+    @Autowired
+    private SysMusicScoreService musicSheetService;
+
+    @Autowired
+    private InstrumentService instrumentService;
+
+    /**
+     * 查询单条
+     *
+     * @param id 详情ID
+     * @return R<MusicSheetVo.MusicSheet>
+     */
+    @ApiOperation(value = "查询内容平台数据")
+    @ApiImplicitParams({
+        @ApiImplicitParam(name = "id", value = "id", dataType = "long")
+    })
+    @GetMapping("/cbsDetail/{id}")
+    public R<MusicSheetVo.OpenMusicSheetDetail> cbsDetail(@PathVariable("id") Integer id) {
+        CbsMusicSheetWrapper.MusicSheet musicSheet = musicSheetService.cbsDetail(id);
+        musicSheet.setBizId(Long.valueOf(id));
+
+        MusicSheetVo.MusicSheetDetail musicSheetDetail = JSON.parseObject(JSON.toJSONString(musicSheet), MusicSheetVo.MusicSheetDetail.class);
+        SysMusicScore detail = musicSheetService.get(id);
+        if (detail == null) {
+            musicSheetDetail.setBizMusicCategoryId(null);
+        } else {
+            //musicSheetDetail.setPaymentType(detail.get());
+            musicSheetDetail.setBizMusicCategoryId(detail.getCategoriesId() == null ? null : detail.getCategoriesId().longValue());
+        }
+
+        // 设置乐器信息
+        if (StringUtils.isNotBlank(musicSheetDetail.getMusicalInstrumentIds())) {
+            List<Integer> instrumentIds = Arrays.stream(musicSheetDetail.getMusicalInstrumentIds().split(","))
+                .map(Integer::parseInt).collect(Collectors.toList());
+
+            if (CollectionUtils.isNotEmpty(instrumentIds) && CollectionUtils.isNotEmpty(musicSheetDetail.getMusicalInstruments())) {
+                Map<Integer, InstrumentWrapper.Instrument> instrumentMap = instrumentService.getMapByIds(instrumentIds);
+                for (CbsMusicSheetWrapper.MusicalInstrument musicalInstrument : musicSheetDetail.getMusicalInstruments()) {
+                    InstrumentWrapper.Instrument instrument = instrumentMap.get(musicalInstrument.getId());
+                    if (instrument != null) {
+                        musicalInstrument.setOrientation(instrument.getOrientation());
+                    }
+
+                }
+            }
+        }
+        return R.from(MusicSheetVo.OpenMusicSheetDetail.from(musicSheetDetail.jsonString()));
+    }
+
+}

+ 86 - 0
mec-application/src/main/java/com/ym/mec/teacher/controller/MusicSheetController.java

@@ -0,0 +1,86 @@
+package com.ym.mec.teacher.controller;
+
+import com.alibaba.fastjson.JSON;
+import com.dayaedu.cbs.openfeign.wrapper.music.CbsMusicSheetWrapper;
+import com.microsvc.toolkit.common.response.template.R;
+import com.ym.mec.biz.dal.entity.SysMusicScore;
+import com.ym.mec.biz.dal.wrapper.InstrumentWrapper;
+import com.ym.mec.biz.service.InstrumentService;
+import com.ym.mec.biz.service.SysMusicScoreService;
+import com.ym.mec.vo.MusicSheetVo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+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.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+@Slf4j
+@Validated
+@RestController
+@RequestMapping("${app-config.url.teacher:}/musicSheet")
+@Api(tags = "曲谱表")
+public class MusicSheetController {
+
+    @Autowired
+    private SysMusicScoreService musicSheetService;
+
+    @Autowired
+    private InstrumentService instrumentService;
+
+    /**
+     * 查询单条
+     *
+     * @param id 详情ID
+     * @return R<MusicSheetVo.MusicSheet>
+     */
+    @ApiOperation(value = "查询内容平台数据")
+    @ApiImplicitParams({
+        @ApiImplicitParam(name = "id", value = "id", dataType = "long")
+    })
+    @GetMapping("/cbsDetail/{id}")
+    public R<MusicSheetVo.OpenMusicSheetDetail> cbsDetail(@PathVariable("id") Integer id) {
+        CbsMusicSheetWrapper.MusicSheet musicSheet = musicSheetService.cbsDetail(id);
+        musicSheet.setBizId(Long.valueOf(id));
+
+        MusicSheetVo.MusicSheetDetail musicSheetDetail = JSON.parseObject(JSON.toJSONString(musicSheet), MusicSheetVo.MusicSheetDetail.class);
+        SysMusicScore detail = musicSheetService.get(id);
+        if (detail == null) {
+            musicSheetDetail.setBizMusicCategoryId(null);
+        } else {
+            //musicSheetDetail.setPaymentType(detail.get());
+            musicSheetDetail.setBizMusicCategoryId(detail.getCategoriesId() == null ? null : detail.getCategoriesId().longValue());
+        }
+
+        // 设置乐器信息
+        if (StringUtils.isNotBlank(musicSheetDetail.getMusicalInstrumentIds())) {
+            List<Integer> instrumentIds = Arrays.stream(musicSheetDetail.getMusicalInstrumentIds().split(","))
+                .map(Integer::parseInt).collect(Collectors.toList());
+
+            if (CollectionUtils.isNotEmpty(instrumentIds) && CollectionUtils.isNotEmpty(musicSheetDetail.getMusicalInstruments())) {
+                Map<Integer, InstrumentWrapper.Instrument> instrumentMap = instrumentService.getMapByIds(instrumentIds);
+                for (CbsMusicSheetWrapper.MusicalInstrument musicalInstrument : musicSheetDetail.getMusicalInstruments()) {
+                    InstrumentWrapper.Instrument instrument = instrumentMap.get(musicalInstrument.getId());
+                    if (instrument != null) {
+                        musicalInstrument.setOrientation(instrument.getOrientation());
+                    }
+
+                }
+            }
+        }
+        return R.from(MusicSheetVo.OpenMusicSheetDetail.from(musicSheetDetail.jsonString()));
+    }
+
+}

+ 86 - 0
mec-application/src/main/java/com/ym/mec/teacher/controller/open/OpenMusicSheetController.java

@@ -0,0 +1,86 @@
+package com.ym.mec.teacher.controller.open;
+
+import com.alibaba.fastjson.JSON;
+import com.dayaedu.cbs.openfeign.wrapper.music.CbsMusicSheetWrapper;
+import com.microsvc.toolkit.common.response.template.R;
+import com.ym.mec.biz.dal.entity.SysMusicScore;
+import com.ym.mec.biz.dal.wrapper.InstrumentWrapper;
+import com.ym.mec.biz.service.InstrumentService;
+import com.ym.mec.biz.service.SysMusicScoreService;
+import com.ym.mec.vo.MusicSheetVo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+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.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+@Slf4j
+@Validated
+@RestController
+@RequestMapping("${app-config.url.teacher:}/open/musicSheet")
+@Api(tags = "曲谱表")
+public class OpenMusicSheetController {
+
+    @Autowired
+    private SysMusicScoreService musicSheetService;
+
+    @Autowired
+    private InstrumentService instrumentService;
+
+    /**
+     * 查询单条
+     *
+     * @param id 详情ID
+     * @return R<MusicSheetVo.MusicSheet>
+     */
+    @ApiOperation(value = "查询内容平台数据")
+    @ApiImplicitParams({
+        @ApiImplicitParam(name = "id", value = "id", dataType = "long")
+    })
+    @GetMapping("/cbsDetail/{id}")
+    public R<MusicSheetVo.OpenMusicSheetDetail> cbsDetail(@PathVariable("id") Integer id) {
+        CbsMusicSheetWrapper.MusicSheet musicSheet = musicSheetService.cbsDetail(id);
+        musicSheet.setBizId(Long.valueOf(id));
+
+        MusicSheetVo.MusicSheetDetail musicSheetDetail = JSON.parseObject(JSON.toJSONString(musicSheet), MusicSheetVo.MusicSheetDetail.class);
+        SysMusicScore detail = musicSheetService.get(id);
+        if (detail == null) {
+            musicSheetDetail.setBizMusicCategoryId(null);
+        } else {
+            //musicSheetDetail.setPaymentType(detail.get());
+            musicSheetDetail.setBizMusicCategoryId(detail.getCategoriesId() == null ? null : detail.getCategoriesId().longValue());
+        }
+
+        // 设置乐器信息
+        if (StringUtils.isNotBlank(musicSheetDetail.getMusicalInstrumentIds())) {
+            List<Integer> instrumentIds = Arrays.stream(musicSheetDetail.getMusicalInstrumentIds().split(","))
+                .map(Integer::parseInt).collect(Collectors.toList());
+
+            if (CollectionUtils.isNotEmpty(instrumentIds) && CollectionUtils.isNotEmpty(musicSheetDetail.getMusicalInstruments())) {
+                Map<Integer, InstrumentWrapper.Instrument> instrumentMap = instrumentService.getMapByIds(instrumentIds);
+                for (CbsMusicSheetWrapper.MusicalInstrument musicalInstrument : musicSheetDetail.getMusicalInstruments()) {
+                    InstrumentWrapper.Instrument instrument = instrumentMap.get(musicalInstrument.getId());
+                    if (instrument != null) {
+                        musicalInstrument.setOrientation(instrument.getOrientation());
+                    }
+
+                }
+            }
+        }
+        return R.from(MusicSheetVo.OpenMusicSheetDetail.from(musicSheetDetail.jsonString()));
+    }
+
+}

+ 107 - 0
mec-application/src/main/java/com/ym/mec/vo/MusicSheetAccompanimentVo.java

@@ -0,0 +1,107 @@
+package com.ym.mec.vo;
+
+import com.alibaba.fastjson.JSON;
+import com.microsvc.toolkit.common.response.paging.QueryInfo;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * 曲谱伴奏表
+ * 2022-12-07 10:16:58
+ */
+@ApiModel(value = "MusicSheetAccompanimentVo对象", description = "曲谱伴奏表查询视图对象")
+public class MusicSheetAccompanimentVo {
+
+    @Data
+    @ApiModel(" MusicSheetAccompanimentQuery-曲谱伴奏表")
+    public static class MusicSheetAccompanimentQuery implements QueryInfo {
+
+        @ApiModelProperty("当前页")
+        private Integer page;
+
+        @ApiModelProperty("分页行数")
+        private Integer rows;
+
+        public String jsonString() {
+            return JSON.toJSONString(this);
+        }
+
+        public static MusicSheetAccompanimentQuery from(String json) {
+            return JSON.parseObject(json, MusicSheetAccompanimentQuery.class);
+        }
+    }
+
+    @Data
+    @ApiModel(" MusicSheetAccompaniment-曲谱伴奏表")
+    public static class MusicSheetAccompaniment {
+
+
+		@ApiModelProperty("主键")
+        private Long id;
+
+
+		@ApiModelProperty("曲谱ID")
+        private Long musicId;
+
+
+		@ApiModelProperty("声部")
+        private String musicSubject;
+
+
+		@ApiModelProperty("MP3原声音频文件URL")
+        private String audioFileUrl;
+
+
+		@ApiModelProperty("map节拍器伴奏")
+        private String metronomeUrl;
+
+
+		@ApiModelProperty("伴奏轨迹")
+        private String track;
+
+
+		@ApiModelProperty("排序号")
+        private Boolean sortNumber;
+
+
+		@ApiModelProperty("速度")
+        private String speed;
+
+        @ApiModelProperty("曲目缓存")
+        private String musicSvg;
+
+		@ApiModelProperty("创建人(老师或者是后台平台用户)")
+        private Long createBy;
+
+
+		@ApiModelProperty("创建时间")
+        private Date createTime;
+
+
+        @ApiModelProperty("五线谱PDF文件")
+        private String musicPdfUrl;
+
+
+        @ApiModelProperty("首调PDF文件")
+        private String firstPdfUrl;
+
+
+        @ApiModelProperty("固定调PDF文件")
+        private String jianPdfUrl;
+
+
+        @ApiModelProperty("音频类型,SING:演唱,PLAY:演奏")
+        private String audioPlayType;
+        public String jsonString() {
+            return JSON.toJSONString(this);
+        }
+
+        public static MusicSheetAccompaniment from(String json) {
+            return JSON.parseObject(json, MusicSheetAccompaniment.class);
+        }
+    }
+
+}

+ 631 - 0
mec-application/src/main/java/com/ym/mec/vo/MusicSheetVo.java

@@ -0,0 +1,631 @@
+package com.ym.mec.vo;
+
+import com.alibaba.fastjson.JSON;
+import com.dayaedu.cbs.common.enums.music.EAudioType;
+import com.dayaedu.cbs.common.enums.music.EEvaluationStandard;
+import com.dayaedu.cbs.common.enums.music.EMusicAvailableType;
+import com.dayaedu.cbs.common.enums.music.EMusicPlayMode;
+import com.dayaedu.cbs.common.enums.music.EMusicSourceType;
+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.ym.mec.biz.dal.wrapper.InstrumentWrapper;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 曲谱表
+ * 2022-12-07 10:16:58
+ */
+@ApiModel(value = "MusicSheetVo对象", description = "曲谱表查询视图对象")
+public class MusicSheetVo {
+
+    @Data
+    @ApiModel(" MusicSheetQuery-曲谱表")
+    public static class MusicSheetQuery implements QueryInfo {
+
+        @ApiModelProperty("当前页")
+        private Integer page;
+
+        @ApiModelProperty("分页行数")
+        private Integer rows;
+
+        public String jsonString() {
+            return JSON.toJSONString(this);
+        }
+
+        public static MusicSheetQuery from(String json) {
+            return JSON.parseObject(json, MusicSheetQuery.class);
+        }
+    }
+
+    @Data
+    @Builder
+    @NoArgsConstructor
+    @AllArgsConstructor
+    @ApiModel(" MusicSheet-曲谱表")
+    public static class MusicSheet {
+
+		@ApiModelProperty("主键")
+        private Long id;
+
+        @ApiModelProperty("曲谱分类")
+        private Integer musicSheetCategoriesId;
+
+//        @ApiModelProperty(value = "曲谱类型(SINGLE:单曲,CONCERT:合奏)")
+//        private EMusicSheetType musicSheetType;
+
+        @ApiModelProperty("曲谱分类名称")
+        private String musicSheetCategoriesName;
+
+		@ApiModelProperty("曲谱名称")
+        private String musicSheetName;
+
+		@ApiModelProperty("封面图")
+        private String titleImg;
+
+		@ApiModelProperty("曲谱来源id")
+        private Long userId;
+
+//		@ApiModelProperty("曲目来源类型 TEACHER 老师 PLATFORM 平台")
+//        private ESourceFrom sourceType;
+
+        @ApiModelProperty("多声轨选择")
+        private String multiTracksSelection;
+
+        @ApiModelProperty("是否公开")
+        private Boolean openFlag;
+
+        @ApiModelProperty("作曲人")
+        private String composer;
+
+        @ApiModelProperty("上传人")
+        private String uploadUser;
+
+		@ApiModelProperty("曲谱声部(适用的乐器,可能是多个,用逗号分隔)")
+        private String musicSubject;
+
+		@ApiModelProperty("mp3曲谱类型  MP3;MP3_METRONOME")
+        private String mp3Type;
+
+		@ApiModelProperty("曲目图片")
+        private String musicImg;
+
+		@ApiModelProperty("曲谱音频文件类型(midi;mp3)")
+        private EAudioType audioType;
+
+		@ApiModelProperty("是否可以转简谱(0:否,1:是)")
+        private Integer notation;
+
+		@ApiModelProperty("曲谱标签(多个标签用逗号分隔)")
+        private String musicTag;
+
+		@ApiModelProperty("默认播放速度")
+        private String playSpeed;
+
+		@ApiModelProperty("是否可以评测(0:否;1:是)")
+        private Boolean canEvaluate;
+
+        @ApiModelProperty("是否支持混音节拍器")
+        private Boolean isMixBeat;
+
+		@ApiModelProperty("伴奏类型  HOMEMODE:自制 COMMON:普通")
+        private String accompanimentType;
+
+		@ApiModelProperty("是否展示指法(0:否;1:是)")
+        private Boolean showFingering;
+
+		@ApiModelProperty("曲目状态(0:停用,1:启用)")
+        private Boolean status;
+
+		@ApiModelProperty("曲目停用原因")
+        private String reason;
+
+		@ApiModelProperty("排序号")
+        private Integer sortNumber;
+
+		@ApiModelProperty("midi路径")
+        private String midiUrl;
+
+		@ApiModelProperty("伴奏含节拍器路径")
+        private String metronomeUrl;
+
+		@ApiModelProperty("伴奏(不含节拍器)路径")
+        private String url;
+
+		@ApiModelProperty("音频文件存储路径")
+        private String audioFileUrl;
+
+		@ApiModelProperty("XML文件存储路径")
+        private String xmlFileUrl;
+
+		@ApiModelProperty("是否自带节拍器(0:否;1:是)")
+        private Boolean hasBeat;
+
+		@ApiModelProperty("曲目配置")
+        private String extConfigJson;
+
+
+        @ApiModelProperty("是否节奏音乐")
+        private Boolean rhythmFlag;
+
+
+        @ApiModelProperty("创建时间")
+        private Date createTime;
+
+		@ApiModelProperty("创建人(老师或者是后台平台用户)")
+        private Long createBy;
+
+        @ApiModelProperty("创建用户")
+        private String createUser;
+
+		@ApiModelProperty("更新时间")
+        private Date updateTime;
+
+		@ApiModelProperty("更新人(老师或者是后台平台用户)")
+        private Long updateBy;
+
+        @ApiModelProperty("更新用户")
+        private String updateUser;
+
+		@ApiModelProperty("备注")
+        private String remark;
+
+		@ApiModelProperty("假删除标识 0:未删除 1:已删除")
+        private Boolean delFlag;
+
+        @ApiModelProperty("伴奏")
+        private List<MusicSheetAccompanimentVo.MusicSheetAccompaniment> background;
+
+        @ApiModelProperty("曲目缓存")
+        private String musicJSON;
+
+        @ApiModelProperty("曲目缓存svg")
+        private String musicSvg;
+
+        @ApiModelProperty("曲目缓存简谱svg")
+        private String musicJianSvg;
+
+        @ApiModelProperty("曲目缓存首调svg")
+        private String musicFirstSvg;
+
+
+        @ApiModelProperty("被使用次数")
+        private Long usedNum = 0L;
+
+        @ApiModelProperty("曲目赏析")
+        private String appreciationUrl;
+
+        @ApiModelProperty("曲目创作ID")
+        private Long musicSheetCreationId;
+
+        @ApiModelProperty(" 可用乐器(多个,用逗号分隔)")
+        private String cbsMusicalInstrumentIds;
+
+
+
+        @ApiModelProperty(" 可用乐器(多个,用逗号分隔)")
+        private String cbsMusicalInstrumentIdNames;
+
+        @ApiModelProperty("内容平台曲目ID")
+        private Long cbsMusicSheetId;
+
+        @ApiModelProperty("首调图片")
+        private String musicFirstImg;
+        @ApiModelProperty("固定调图片")
+        private String musicJianImg;
+
+
+        @ApiModelProperty("五线谱PDF文件")
+        private String musicPdfUrl;
+
+
+        @ApiModelProperty("首调PDF文件")
+        private String firstPdfUrl;
+
+
+        @ApiModelProperty("固定调PDF文件")
+        private String jianPdfUrl;
+
+
+
+        @ApiModelProperty("曲目类型(SINGLE:单曲 CONCERT:合奏)")
+        private String musicSheetType;
+
+        @ApiModelProperty("乐器信息")
+        private List<InstrumentWrapper.Instrument> musicalInstruments;
+
+        @ApiModelProperty("收费类型(FREE:免费;VIP:会员;CHARGE:单曲收费)")
+        private String paymentType;
+
+
+
+        @ApiModelProperty("是否可转谱(0:否; 1:是)")
+        private Boolean isConvertibleScore;
+
+        @ApiModelProperty("谱面类型")
+        private String scoreType;
+
+
+        @ApiModelProperty("音频类型,SING:演唱,PLAY:演奏")
+        private String audioPlayTypes;
+
+
+        @ApiModelProperty("是否总谱渲染")
+        private Boolean isScoreRender;
+
+        @ApiModelProperty("演奏是否默认展示总谱渲染")
+        private Boolean defaultScoreRender;
+
+
+        public String jsonString() {
+            return JSON.toJSONString(this);
+        }
+
+        public static MusicSheet from(String json) {
+            return JSON.parseObject(json, MusicSheet.class);
+        }
+
+
+        public MusicSheet createBy(String createBy) {
+            this.createBy = Long.parseLong(createBy);
+            return this;
+        }
+
+        public MusicSheet createUser(String createUser) {
+            this.createUser = createUser;
+            return this;
+        }
+
+        public MusicSheet updateBy(String updateBy) {
+            this.updateBy = Long.parseLong(updateBy);
+            return this;
+        }
+
+        public MusicSheet updateUser(String updateUser) {
+            this.updateUser = updateUser;
+            return this;
+        }
+
+        public MusicSheet notation(Integer notation) {
+            this.notation = notation;
+            return this;
+        }
+
+        public MusicSheet userId(String userId) {
+            this.userId = Long.valueOf(userId);
+            return this;
+        }
+    }
+
+
+    @Data
+    @EqualsAndHashCode(callSuper = true)
+    public static class MusicSheetDetail extends CbsMusicSheetWrapper.MusicSheet {
+        @ApiModelProperty
+        private Long bizMusicCategoryId;
+
+        @ApiModelProperty("收费类型(FREE:免费;VIP:会员;CHARGE:单曲收费)")
+        private String paymentType;
+
+        @ApiModelProperty("是否可转谱(0:否; 1:是)")
+        private Boolean isConvertibleScore;
+
+        @ApiModelProperty("谱面类型")
+        private String scoreType;
+    }
+
+    @Data
+    @NoArgsConstructor
+    @AllArgsConstructor
+    @ApiModel(" MusicSheet-曲谱表")
+    public static class OpenMusicSheetDetail implements Serializable {
+
+        @ApiModelProperty("主键")
+        private Long id;
+
+        @ApiModelProperty("业务平台曲目ID")
+        private Long bizId;
+
+        @ApiModelProperty("曲目分类ID")
+        private Long 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:是)")
+        private Boolean isEvaluated;
+
+        @ApiModelProperty("是否可转谱(0:否; 1:是)")
+        private Boolean isConvertibleScore;
+
+        @ApiModelProperty("是否展示指法(0:否;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 com.dayaedu.cbs.common.enums.music.EAudioType audioType;
+
+        @ApiModelProperty("曲目状态(0:停用,1:启用)")
+        private Boolean status;
+
+        @ApiModelProperty("停用原因")
+        private String reason;
+
+        @ApiModelProperty("备注")
+        private String remark;
+
+        @ApiModelProperty("逻辑删除标识(0: 未删 1:已删)")
+        private Boolean delFlag;
+
+        @ApiModelProperty("评测频率,详情返回,指定应用端")
+        private String evaluationFrequency;
+
+        @ApiModelProperty("乐器信息")
+        private List<CbsMusicSheetWrapper.MusicalInstrument> musicalInstruments;
+
+        @ApiModelProperty
+        private Long bizMusicCategoryId;
+
+        @ApiModelProperty("收费类型(FREE:免费;VIP:会员;CHARGE:单曲收费)")
+        private String paymentType;
+
+        public static OpenMusicSheetDetail from(String json) {
+            return JSON.parseObject(json, OpenMusicSheetDetail.class);
+        }
+    }
+
+    @Data
+    @NoArgsConstructor
+    @AllArgsConstructor
+    @ApiModel(" MusicSheet-曲谱表")
+    public static class OpenMusicSheet implements Serializable {
+
+        @ApiModelProperty("主键")
+        private Long id;
+
+        @ApiModelProperty("曲谱分类")
+        private Integer musicSheetCategoriesId;
+
+        @ApiModelProperty("曲谱分类名称")
+        private String musicSheetCategoriesName;
+
+        @ApiModelProperty("曲谱名称")
+        private String musicSheetName;
+
+        @ApiModelProperty("封面图")
+        private String titleImg;
+
+//        @ApiModelProperty("曲目来源类型 TEACHER 老师 PLATFORM 平台")
+//        private ESourceFrom sourceType;
+
+        @ApiModelProperty("多声轨选择")
+        private String multiTracksSelection;
+
+        @ApiModelProperty("是否公开")
+        private Boolean openFlag;
+
+        @ApiModelProperty("作曲人")
+        private String composer;
+
+        @ApiModelProperty("曲谱声部(适用的乐器,可能是多个,用逗号分隔)")
+        private String musicSubject;
+
+        @ApiModelProperty("mp3曲谱类型  MP3;MP3_METRONOME")
+        private String mp3Type;
+
+        @ApiModelProperty("曲目图片")
+        private String musicImg;
+
+        @ApiModelProperty("曲谱音频文件类型(midi;mp3)")
+        private EAudioType audioType;
+
+        @ApiModelProperty("是否可以转简谱(0:否,1:是)")
+        private Integer notation;
+
+        @ApiModelProperty("曲谱标签(多个标签用逗号分隔)")
+        private String musicTag;
+
+        @ApiModelProperty("默认播放速度")
+        private String playSpeed;
+
+        @ApiModelProperty("是否可以评测(0:否;1:是)")
+        private Boolean canEvaluate;
+
+        @ApiModelProperty("伴奏类型  HOMEMODE:自制 COMMON:普通")
+        private String accompanimentType;
+
+        @ApiModelProperty("是否展示指法(0:否;1:是)")
+        private Boolean showFingering;
+
+        @ApiModelProperty("曲目状态(0:停用,1:启用)")
+        private Boolean status;
+
+        @ApiModelProperty("曲目停用原因")
+        private String reason;
+
+        @ApiModelProperty("排序号")
+        private Integer sortNumber;
+
+        @ApiModelProperty("midi路径")
+        private String midiUrl;
+
+        @ApiModelProperty("XML文件存储路径")
+        private String xmlFileUrl;
+
+        @ApiModelProperty("是否自带节拍器(0:否;1:是)")
+        private Boolean hasBeat;
+
+        @ApiModelProperty("曲目配置")
+        private String extConfigJson;
+
+        @ApiModelProperty("是否节奏音乐")
+        private Boolean rhythmFlag;
+
+        @ApiModelProperty("备注")
+        private String remark;
+
+        @ApiModelProperty("假删除标识 0:未删除 1:已删除")
+        private Boolean delFlag;
+
+        @ApiModelProperty("曲目缓存")
+        private String musicJSON;
+
+        @ApiModelProperty("曲目缓存svg")
+        private String musicSvg;
+
+        @ApiModelProperty("曲目缓存简谱svg")
+        private String musicJianSvg;
+
+        @ApiModelProperty("曲目缓存首调svg")
+        private String musicFirstSvg;
+
+        @ApiModelProperty("被使用次数")
+        private Long usedNum = 0L;
+
+        @ApiModelProperty("曲目赏析")
+        private String appreciationUrl;
+
+        @ApiModelProperty("曲目创作ID")
+        private Long musicSheetCreationId;
+
+        @ApiModelProperty(" 可用乐器(多个,用逗号分隔)")
+        private String cbsMusicalInstrumentIds;
+
+        @ApiModelProperty(" 可用乐器(多个,用逗号分隔)")
+        private String cbsMusicalInstrumentIdNames;
+
+        @ApiModelProperty("内容平台曲目ID")
+        private Long cbsMusicSheetId;
+
+        @ApiModelProperty("首调图片")
+        private String musicFirstImg;
+
+        @ApiModelProperty("固定调图片")
+        private String musicJianImg;
+
+        @ApiModelProperty("曲目类型(SINGLE:单曲 CONCERT:合奏)")
+        private String musicSheetType;
+
+        /*@ApiModelProperty("乐器信息")
+        private List<InstrumentWrapper.Instrument> musicalInstruments;*/
+
+        @ApiModelProperty("收费类型(FREE:免费;VIP:会员;CHARGE:单曲收费)")
+        private String paymentType;
+
+        public static OpenMusicSheet from(String json) {
+            return JSON.parseObject(json, OpenMusicSheet.class);
+        }
+
+    }
+}

+ 23 - 0
mec-application/src/main/java/com/ym/mec/vo/MusicalInstrumentWrapper.java

@@ -0,0 +1,23 @@
+package com.ym.mec.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+public class MusicalInstrumentWrapper {
+
+
+    @Data
+    @ApiModel(" MusicalInstrumentQuery-曲目乐器")
+    public static class MusicalInstrumentQuery  {
+
+        @ApiModelProperty("声部")
+        private Integer subjectId;
+        @ApiModelProperty("声部")
+        private List<Integer> subjectIds;
+        @ApiModelProperty("是否启用")
+        private Boolean enableFlag;
+    }
+}

+ 86 - 0
mec-application/src/main/java/com/ym/mec/web/controller/MusicSheetController.java

@@ -0,0 +1,86 @@
+package com.ym.mec.web.controller;
+
+import com.alibaba.fastjson.JSON;
+import com.dayaedu.cbs.openfeign.wrapper.music.CbsMusicSheetWrapper;
+import com.microsvc.toolkit.common.response.template.R;
+import com.ym.mec.biz.dal.entity.SysMusicScore;
+import com.ym.mec.biz.dal.wrapper.InstrumentWrapper;
+import com.ym.mec.biz.service.InstrumentService;
+import com.ym.mec.biz.service.SysMusicScoreService;
+import com.ym.mec.vo.MusicSheetVo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+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.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+@Slf4j
+@Validated
+@RestController
+@RequestMapping("${app-config.url.web:}/musicSheet")
+@Api(tags = "曲谱表")
+public class MusicSheetController {
+
+    @Autowired
+    private SysMusicScoreService musicSheetService;
+
+    @Autowired
+    private InstrumentService instrumentService;
+
+    /**
+     * 查询单条
+     *
+     * @param id 详情ID
+     * @return R<MusicSheetVo.MusicSheet>
+     */
+    @ApiOperation(value = "查询内容平台数据")
+    @ApiImplicitParams({
+        @ApiImplicitParam(name = "id", value = "id", dataType = "long")
+    })
+    @GetMapping("/cbsDetail/{id}")
+    public R<MusicSheetVo.OpenMusicSheetDetail> cbsDetail(@PathVariable("id") Integer id) {
+        CbsMusicSheetWrapper.MusicSheet musicSheet = musicSheetService.cbsDetail(id);
+        musicSheet.setBizId(Long.valueOf(id));
+
+        MusicSheetVo.MusicSheetDetail musicSheetDetail = JSON.parseObject(JSON.toJSONString(musicSheet), MusicSheetVo.MusicSheetDetail.class);
+        SysMusicScore detail = musicSheetService.get(id);
+        if (detail == null) {
+            musicSheetDetail.setBizMusicCategoryId(null);
+        } else {
+            //musicSheetDetail.setPaymentType(detail.get());
+            musicSheetDetail.setBizMusicCategoryId(detail.getCategoriesId() == null ? null : detail.getCategoriesId().longValue());
+        }
+
+        // 设置乐器信息
+        if (StringUtils.isNotBlank(musicSheetDetail.getMusicalInstrumentIds())) {
+            List<Integer> instrumentIds = Arrays.stream(musicSheetDetail.getMusicalInstrumentIds().split(","))
+                .map(Integer::parseInt).collect(Collectors.toList());
+
+            if (CollectionUtils.isNotEmpty(instrumentIds) && CollectionUtils.isNotEmpty(musicSheetDetail.getMusicalInstruments())) {
+                Map<Integer, InstrumentWrapper.Instrument> instrumentMap = instrumentService.getMapByIds(instrumentIds);
+                for (CbsMusicSheetWrapper.MusicalInstrument musicalInstrument : musicSheetDetail.getMusicalInstruments()) {
+                    InstrumentWrapper.Instrument instrument = instrumentMap.get(musicalInstrument.getId());
+                    if (instrument != null) {
+                        musicalInstrument.setOrientation(instrument.getOrientation());
+                    }
+
+                }
+            }
+        }
+        return R.from(MusicSheetVo.OpenMusicSheetDetail.from(musicSheetDetail.jsonString()));
+    }
+
+}

+ 86 - 0
mec-application/src/main/java/com/ym/mec/web/controller/open/OpenMusicSheetController.java

@@ -0,0 +1,86 @@
+package com.ym.mec.web.controller.open;
+
+import com.alibaba.fastjson.JSON;
+import com.dayaedu.cbs.openfeign.wrapper.music.CbsMusicSheetWrapper;
+import com.microsvc.toolkit.common.response.template.R;
+import com.ym.mec.biz.dal.entity.SysMusicScore;
+import com.ym.mec.biz.dal.wrapper.InstrumentWrapper;
+import com.ym.mec.biz.service.InstrumentService;
+import com.ym.mec.biz.service.SysMusicScoreService;
+import com.ym.mec.vo.MusicSheetVo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+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.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+@Slf4j
+@Validated
+@RestController
+@RequestMapping("${app-config.url.web:}/open/musicSheet")
+@Api(tags = "曲谱表")
+public class OpenMusicSheetController {
+
+    @Autowired
+    private SysMusicScoreService musicSheetService;
+
+    @Autowired
+    private InstrumentService instrumentService;
+
+    /**
+     * 查询单条
+     *
+     * @param id 详情ID
+     * @return R<MusicSheetVo.MusicSheet>
+     */
+    @ApiOperation(value = "查询内容平台数据")
+    @ApiImplicitParams({
+        @ApiImplicitParam(name = "id", value = "id", dataType = "long")
+    })
+    @GetMapping("/cbsDetail/{id}")
+    public R<MusicSheetVo.OpenMusicSheetDetail> cbsDetail(@PathVariable("id") Integer id) {
+        CbsMusicSheetWrapper.MusicSheet musicSheet = musicSheetService.cbsDetail(id);
+        musicSheet.setBizId(Long.valueOf(id));
+
+        MusicSheetVo.MusicSheetDetail musicSheetDetail = JSON.parseObject(JSON.toJSONString(musicSheet), MusicSheetVo.MusicSheetDetail.class);
+        SysMusicScore detail = musicSheetService.get(id);
+        if (detail == null) {
+            musicSheetDetail.setBizMusicCategoryId(null);
+        } else {
+            //musicSheetDetail.setPaymentType(detail.get());
+            musicSheetDetail.setBizMusicCategoryId(detail.getCategoriesId() == null ? null : detail.getCategoriesId().longValue());
+        }
+
+        // 设置乐器信息
+        if (StringUtils.isNotBlank(musicSheetDetail.getMusicalInstrumentIds())) {
+            List<Integer> instrumentIds = Arrays.stream(musicSheetDetail.getMusicalInstrumentIds().split(","))
+                .map(Integer::parseInt).collect(Collectors.toList());
+
+            if (CollectionUtils.isNotEmpty(instrumentIds) && CollectionUtils.isNotEmpty(musicSheetDetail.getMusicalInstruments())) {
+                Map<Integer, InstrumentWrapper.Instrument> instrumentMap = instrumentService.getMapByIds(instrumentIds);
+                for (CbsMusicSheetWrapper.MusicalInstrument musicalInstrument : musicSheetDetail.getMusicalInstruments()) {
+                    InstrumentWrapper.Instrument instrument = instrumentMap.get(musicalInstrument.getId());
+                    if (instrument != null) {
+                        musicalInstrument.setOrientation(instrument.getOrientation());
+                    }
+
+                }
+            }
+        }
+        return R.from(MusicSheetVo.OpenMusicSheetDetail.from(musicSheetDetail.jsonString()));
+    }
+
+}

+ 132 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/wrapper/MusicSheetAccompanimentWrapper.java

@@ -0,0 +1,132 @@
+package com.ym.mec.biz.dal.wrapper;
+
+import com.alibaba.fastjson.JSON;
+import com.microsvc.toolkit.common.response.paging.QueryInfo;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.apache.commons.lang3.StringUtils;
+
+import java.util.Date;
+import java.util.Optional;
+
+/**
+ * 曲谱伴奏表
+ * 2022-12-07 10:16:58
+ */
+@ApiModel(value = "MusicSheetAccompanimentWrapper对象", description = "曲谱伴奏表查询对象")
+public class MusicSheetAccompanimentWrapper {
+
+    @Data
+	@Builder
+    @NoArgsConstructor
+    @AllArgsConstructor
+    @ApiModel(" MusicSheetAccompanimentQuery-曲谱伴奏表")
+    public static class MusicSheetAccompanimentQuery implements QueryInfo {
+
+    	@ApiModelProperty("当前页")
+        private Integer page;
+
+        @ApiModelProperty("分页行数")
+        private Integer rows;
+
+        @ApiModelProperty("关键字匹配")
+		private String keyword;
+
+        public String getKeyword() {
+            return Optional.ofNullable(keyword).filter(StringUtils::isNotBlank).orElse(null);
+        }
+
+        public String jsonString() {
+            return JSON.toJSONString(this);
+        }
+
+        public static MusicSheetAccompanimentQuery from(String json) {
+            return JSON.parseObject(json, MusicSheetAccompanimentQuery.class);
+        }
+    }
+
+    @Data
+    @Builder
+    @NoArgsConstructor
+    @AllArgsConstructor
+	@ApiModel(" MusicSheetAccompaniment-曲谱伴奏表")
+    public static class MusicSheetAccompaniment {
+
+        @ApiModelProperty("主键")
+        private Long id;
+
+        @ApiModelProperty("曲谱ID")
+        private Long musicId;
+
+        @ApiModelProperty("声部")
+        private String musicSubject;
+
+        @ApiModelProperty("MP3原声音频文件URL")
+        private String audioFileUrl;
+
+        @ApiModelProperty("map节拍器伴奏")
+        private String metronomeUrl;
+
+        @ApiModelProperty("伴奏轨迹")
+        private String track;
+
+        @ApiModelProperty("排序号")
+        private Boolean sortNumber;
+
+        @ApiModelProperty("速度")
+        private String speed;
+
+        @ApiModelProperty("曲目缓存")
+        private String musicSvg;
+
+        @ApiModelProperty("创建人(老师或者是后台平台用户)")
+        private Long createBy;
+
+        @ApiModelProperty("创建时间")
+        private Date createTime;
+
+        @ApiModelProperty("五线谱PDF文件")
+        private String musicPdfUrl;
+
+
+        @ApiModelProperty("首调PDF文件")
+        private String firstPdfUrl;
+
+
+        @ApiModelProperty("固定调PDF文件")
+        private String jianPdfUrl;
+
+
+        @ApiModelProperty("音频类型,SING:演唱,PLAY:演奏")
+        private String audioPlayType;
+
+        public String jsonString() {
+            return JSON.toJSONString(this);
+        }
+
+        public static MusicSheetAccompaniment from(String json) {
+            return JSON.parseObject(json, MusicSheetAccompaniment.class);
+        }
+
+
+        public MusicSheetAccompaniment musicId(Long musicId) {
+            this.musicId = musicId;
+            return this;
+        }
+
+        public MusicSheetAccompaniment musicSubject(String musicSubject) {
+            this.musicSubject = musicSubject;
+            return this;
+        }
+
+        public MusicSheetAccompaniment createBy(Long createBy) {
+            this.createBy = createBy;
+            return this;
+        }
+    }
+
+}

+ 240 - 3
mec-biz/src/main/java/com/ym/mec/biz/dal/wrapper/MusicSheetWrapper.java

@@ -1,10 +1,11 @@
-package com.dayaedu.cbs.domain.wrapper;
+package com.ym.mec.biz.dal.wrapper;
 
 import com.alibaba.fastjson.JSON;
 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.ym.mec.biz.dal.wrapper.MusicSheetAccompanimentWrapper;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.AllArgsConstructor;
@@ -55,9 +56,245 @@ public class MusicSheetWrapper {
         }
     }
 
-	@ApiModel(" MusicSheet-曲谱表")
+    @Data
+    @Builder
+    @NoArgsConstructor
+    @AllArgsConstructor
+    @ApiModel(" MusicSheet-曲谱表")
     public static class MusicSheet {
 
+        @ApiModelProperty("主键")
+        private Long id;
+
+        @ApiModelProperty("曲谱分类")
+        private Integer musicSheetCategoriesId;
+
+//        @ApiModelProperty(value = "曲谱类型(SINGLE:单曲,CONCERT:合奏)")
+//        private EMusicSheetType musicSheetType;
+
+        @ApiModelProperty("曲谱名称")
+        private String musicSheetName;
+
+
+        @ApiModelProperty("封面图")
+        private String titleImg;
+
+
+        @ApiModelProperty("曲谱来源id")
+        private Long userId;
+
+
+        @ApiModelProperty("是否支持混音节拍器")
+        private Boolean isMixBeat;
+
+        @ApiModelProperty("多声轨选择")
+        private String multiTracksSelection;
+
+//        @ApiModelProperty("曲目来源类型 TEACHER 老师 PLATFORM 平台")
+//        private ESourceFrom sourceType;
+
+
+        @ApiModelProperty("是否公开")
+        private Boolean openFlag;
+
+
+        @ApiModelProperty("作曲人")
+        private String composer;
+
+
+        @ApiModelProperty("曲谱声部(适用的乐器,可能是多个,用逗号分隔)")
+        private String musicSubject;
+
+
+        @ApiModelProperty("mp3曲谱类型  MP3;MP3_METRONOME")
+        private String mp3Type;
+
+
+        @ApiModelProperty("曲目图片")
+        private String musicImg;
+
+
+        @ApiModelProperty("曲谱音频文件类型(midi;mp3)")
+        private EAudioType audioType;
+
+
+        @ApiModelProperty("是否可以转简谱(0:否,1:是)")
+        private Integer notation;
+
+
+        @ApiModelProperty("曲谱标签(多个标签用逗号分隔)")
+        private String musicTag;
+
+
+        @ApiModelProperty("默认播放速度")
+        private String  playSpeed;
+
+
+        @ApiModelProperty("是否可以评测(0:否;1:是)")
+        private Boolean canEvaluate;
+
+
+        @ApiModelProperty("伴奏类型  HOMEMODE:自制 COMMON:普通")
+        private String accompanimentType;
+
+
+        @ApiModelProperty("是否展示指法(0:否;1:是)")
+        private Boolean showFingering;
+
+
+        @ApiModelProperty("曲目状态(0:停用,1:启用)")
+        private Boolean status;
+
+
+        @ApiModelProperty("曲目停用原因")
+        private String reason;
+
+
+        @ApiModelProperty("排序号")
+        private Integer sortNumber;
+
+
+        @ApiModelProperty("midi路径")
+        private String midiUrl;
+
+
+        @ApiModelProperty("伴奏含节拍器路径")
+        private String metronomeUrl;
+
+
+        @ApiModelProperty("伴奏(不含节拍器)路径")
+        private String url;
+
+
+        @ApiModelProperty("音频文件存储路径")
+        private String audioFileUrl;
+
+
+        @ApiModelProperty("XML文件存储路径")
+        private String xmlFileUrl;
+
+
+        @ApiModelProperty("是否自带节拍器(0:否;1:是)")
+        private Boolean hasBeat;
+
+
+        @ApiModelProperty("曲目配置")
+        private String extConfigJson;
+
+
+        @ApiModelProperty("是否节奏音乐")
+        private Boolean rhythmFlag;
+
+        @ApiModelProperty("创建时间")
+        private Date createTime;
+
+        @ApiModelProperty("创建人(老师或者是后台平台用户)")
+        private Long createBy;
+
+        @ApiModelProperty("创建用户")
+        private String createUser;
+
+        @ApiModelProperty("更新时间")
+        private Date updateTime;
+
+        @ApiModelProperty("更新人(老师或者是后台平台用户)")
+        private Long updateBy;
+
+        @ApiModelProperty("更新用户")
+        private String updateUser;
+
+        @ApiModelProperty("备注")
+        private String remark;
+
+        @ApiModelProperty("假删除标识 0:未删除 1:已删除")
+        private Boolean delFlag;
+
+        @ApiModelProperty("伴奏")
+        private List<MusicSheetAccompanimentWrapper.MusicSheetAccompaniment> background;
+
+        @ApiModelProperty("曲目缓存")
+        private String musicJSON;
+
+        @ApiModelProperty("曲目缓存svg")
+        private String musicSvg;
+
+        @ApiModelProperty("曲目缓存简谱svg")
+        private String musicJianSvg;
+
+        @ApiModelProperty("曲目缓存首调svg")
+        private String musicFirstSvg;
+
+
+
+        @ApiModelProperty("曲目赏析")
+        private String appreciationUrl;
+
+        @ApiModelProperty("内容平台曲目ID")
+        private Long cbsMusicSheetId;
+
+
+        @ApiModelProperty("内容平台声部ID")
+        private String cbsSubjectId;
+
+
+        @ApiModelProperty(" 可用乐器(多个,用逗号分隔)")
+        private String cbsMusicalInstrumentIds;
+
+
+
+        @ApiModelProperty(" 可用乐器(多个,用逗号分隔)")
+        private String cbsMusicalInstrumentIdNames;
+
+        @ApiModelProperty("是否审核数据")
+        private Boolean versionFlag;
+
+        @ApiModelProperty("首调图片")
+        private String musicFirstImg;
+        @ApiModelProperty("固定调图片")
+        private String musicJianImg;
+
+        @ApiModelProperty("五线谱PDF文件")
+        private String musicPdfUrl;
+
+
+        @ApiModelProperty("首调PDF文件")
+        private String firstPdfUrl;
+
+
+        @ApiModelProperty("固定调PDF文件")
+        private String jianPdfUrl;
+
+        @ApiModelProperty("曲目类型(SINGLE:单曲 CONCERT:合奏)")
+        private String musicSheetType;
+
+        @ApiModelProperty("被使用次数")
+        private Long usedNum;
+
+        @ApiModelProperty("收费类型(FREE:免费;VIP:会员;CHARGE:单曲收费)")
+        private String paymentType;
+
+        @ApiModelProperty("是否包含伴奏")
+        private Boolean containAccompaniment = false;
+
+        @ApiModelProperty("是否总谱渲染")
+        private Boolean isScoreRender;
+
+        @ApiModelProperty("演奏是否默认展示总谱渲染")
+        private Boolean defaultScoreRender;
+
+        @ApiModelProperty("音频类型,SING:演唱,PLAY:演奏")
+        private String audioPlayTypes;
+
+        @ApiModelProperty("是否可转谱(0:否; 1:是)")
+        private Boolean isConvertibleScore;
+
+        @ApiModelProperty("谱面类型")
+        private String scoreType;
+
+
+        @ApiModelProperty("是否节奏练习曲目,节奏练习曲目不设置声部和乐器,所有声部和乐器都能被查询出来")
+        private Boolean isAllSubject;
+
         public String jsonString() {
             return JSON.toJSONString(this);
         }
@@ -65,7 +302,7 @@ public class MusicSheetWrapper {
         public static MusicSheet from(String json) {
             return JSON.parseObject(json, MusicSheet.class);
         }
-	}
+    }
 
     @Data
     @ApiModel(" AddMusicSheet-曲谱新增/修改表")

+ 15 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/SysMusicScoreService.java

@@ -47,4 +47,19 @@ public interface SysMusicScoreService extends BaseService<Integer, SysMusicScore
     void sync();
 
     void del(Long id);
+
+    /**
+     * 查询总控平台曲目信息
+     * @param musicSheetId 业务端曲目ID
+     * @return CbsMusicSheetWrapper.MusicSheet
+     */
+    CbsMusicSheetWrapper.MusicSheet cbsDetail(Integer musicSheetId);
+
+    /**
+     * 查询总控平台曲目信息
+     * @param cbsMusicSheetId 总控平台曲目ID
+     * @return CbsMusicSheetWrapper.MusicSheet
+     */
+    CbsMusicSheetWrapper.MusicSheet getCbsMusicSheetByCbsId(Long cbsMusicSheetId);
+
 }

+ 37 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysMusicScoreServiceImpl.java

@@ -587,4 +587,41 @@ public class SysMusicScoreServiceImpl extends BaseServiceImpl<Integer, SysMusicS
 
     }
 
+    /**
+     * @param musicSheetId 业务端曲目ID
+     * @return CbsMusicSheetWrapper.MusicSheet
+     */
+    @Override
+    public CbsMusicSheetWrapper.MusicSheet cbsDetail(Integer musicSheetId) {
+        // 曲目信息
+        SysMusicScore musicSheet = getDao().get(musicSheetId);
+        if (Objects.isNull(musicSheet)) {
+            throw new BizException("曲目信息不存在");
+        }
+
+
+        if (StringUtils.isBlank(musicSheet.getCbsMusicSheetId())) {
+            throw new BizException("曲目信息异常");
+        }
+        return getCbsMusicSheetByCbsId(Long.parseLong(musicSheet.getCbsMusicSheetId()));
+    }
+
+    /**
+     * 查询总控平台曲目信息
+     *
+     * @param cbsMusicSheetId 总控平台曲目ID
+     * @return CbsMusicSheetWrapper.MusicSheet
+     */
+    @Override
+    public CbsMusicSheetWrapper.MusicSheet getCbsMusicSheetByCbsId(Long cbsMusicSheetId) {
+        try {
+
+            R<CbsMusicSheetWrapper.MusicSheet> musicSheetR = musicFeignClientService.musicSheetDetail(cbsMusicSheetId, applicationId);
+
+            return musicSheetR.feignData();
+        } catch (Exception e) {
+            log.error("调用音乐服务异常", e);
+            throw new BizException("内容平台服务异常");
+        }
+    }
 }