Przeglądaj źródła

管乐迷优化需求

zouxuan 1 rok temu
rodzic
commit
63b2877684

+ 90 - 1
mec-application/src/main/java/com/ym/mec/web/controller/SubjectController.java

@@ -1,16 +1,25 @@
 package com.ym.mec.web.controller;
 
+import com.alibaba.fastjson.JSON;
+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.ym.mec.biz.dal.entity.Subject;
 import com.ym.mec.biz.dal.entity.SubjectGoodsMapper;
 import com.ym.mec.biz.dal.page.SubjectQueryInfo;
+import com.ym.mec.biz.dal.wrapper.SubjectWrapper;
 import com.ym.mec.biz.service.SubjectService;
 import com.ym.mec.common.controller.BaseController;
+import com.ym.mec.common.entity.HttpResponseResult;
 import io.swagger.annotations.*;
+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.List;
+import java.util.*;
+import java.util.stream.Collectors;
 
 @RequestMapping("${app-config.url.web:}/subject")
 @Api(tags = "科目服务")
@@ -101,4 +110,84 @@ public class SubjectController extends BaseController {
     public Object list(){
         return succeed(subjectService.list());
     }
+
+
+    /**
+     * 声部分页
+     */
+    @ApiOperation(value = "内容平台对应的声部数据")
+    @PostMapping("/cbsSubject/page")
+    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("内容平台服务异常");
+        }
+    }
 }

+ 123 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/wrapper/InstrumentWrapper.java

@@ -0,0 +1,123 @@
+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 javax.validation.constraints.NotNull;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 乐器设置
+ * 2024-04-22 16:55:18
+ */
+@ApiModel(value = "InstrumentWrapper对象", description = "乐器设置查询对象")
+public class InstrumentWrapper {
+
+    @Data
+	@Builder
+    @NoArgsConstructor
+    @AllArgsConstructor
+    @ApiModel(" InstrumentQuery-乐器设置")
+    public static class InstrumentQuery implements QueryInfo {
+    	@ApiModelProperty("当前页")
+        private Integer page;
+        @ApiModelProperty("分页行数")
+        private Integer rows;
+        @ApiModelProperty("声部")
+        private Integer subjectId;
+        @ApiModelProperty("声部")
+        private List<Integer> subjectIds;
+        @ApiModelProperty("是否启用")
+        private Boolean enableFlag;
+
+        public String jsonString() {
+            return JSON.toJSONString(this);
+        }
+
+        public static InstrumentQuery from(String json) {
+            return JSON.parseObject(json, InstrumentQuery.class);
+        }
+    }
+
+    @Data
+	@ApiModel(" Instrument-乐器设置")
+    public static class Instrument {
+
+        @ApiModelProperty("乐器ID")
+        private Long id;
+
+        @ApiModelProperty("乐器名称")
+        private String name;
+
+        @ApiModelProperty("声部ID")
+        private Long subjectId;
+
+        @ApiModelProperty("声部名称")
+        private String subjectName;
+
+        @ApiModelProperty("横竖屏:1:竖 0:横")
+        private Boolean orientation;
+
+        @ApiModelProperty("启用/停用")
+        private Boolean enableFlag;
+
+        @ApiModelProperty("创建时间")
+        private Date createTime;
+
+        @ApiModelProperty("更新时间")
+        private Date updateTime;
+
+        @ApiModelProperty("操作人")
+        private Long operator;
+
+        @ApiModelProperty("编码")
+        private String code;
+
+
+        @ApiModelProperty("是否可转普")
+        private Boolean transferFlag;
+
+        @ApiModelProperty("图片")
+        private String img;
+
+        @ApiModelProperty("音频")
+        private String media;
+
+        @ApiModelProperty("频率")
+        private Integer hz;
+
+        @ApiModelProperty("默认谱面(STAVE: 五线谱; JIAN: 固定调; FIRST: 首调)")
+        private String defaultScore;
+        public String jsonString() {
+            return JSON.toJSONString(this);
+        }
+
+        public static Instrument from(String json) {
+            return JSON.parseObject(json, Instrument.class);
+        }
+	}
+
+    @Data
+    public static class Update {
+
+        @ApiModelProperty("乐器ID")
+        @NotNull(message = "乐器ID不能为空")
+        private Long id;
+
+        @ApiModelProperty("操作人")
+        private Long operator;
+
+        @ApiModelProperty("横竖屏:1:竖 0:横")
+        private Boolean orientation;
+
+        @ApiModelProperty("启用/停用")
+        private Boolean enableFlag;
+    }
+}

+ 268 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/wrapper/SubjectWrapper.java

@@ -0,0 +1,268 @@
+package com.ym.mec.biz.dal.wrapper;
+
+import com.dayaedu.cbs.openfeign.wrapper.music.CbsSubjectWrapper;
+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 javax.validation.constraints.NotNull;
+import java.util.Date;
+import java.util.List;
+
+public class SubjectWrapper {
+
+    @Data
+    @Builder
+    @NoArgsConstructor
+    @AllArgsConstructor
+    public static class SubjectQuery implements QueryInfo {
+
+        @ApiModelProperty("当前页")
+        private Integer page;
+
+        @ApiModelProperty("分页行数")
+        private Integer rows;
+
+        @ApiModelProperty("关键字匹配")
+        private String keyword;
+
+        @ApiModelProperty("删除标识")
+        private Integer delFlag;
+
+        @ApiModelProperty("启用标识")
+        private Boolean enableFlag;
+
+        @ApiModelProperty("声部ID")
+        private Integer subjectId;
+
+        @ApiModelProperty("父级声部ID")
+        private Integer parentSubjectId;
+
+        @ApiModelProperty("多个声部ID")
+        private String subjectIds;
+
+        @ApiModelProperty("多个乐器ID")
+        private String instrumentIds;
+
+        @ApiModelProperty("有乐器")
+        private Boolean hasInstrument;
+
+    }
+
+    @Data
+    @Builder
+    @NoArgsConstructor
+    @AllArgsConstructor
+    public static class Subject {
+
+        @ApiModelProperty("主键")
+        private Integer id;
+
+        @ApiModelProperty("内容平台声部ID")
+        private Long cbsSubjectId;
+
+        @ApiModelProperty("内容平台声部名称")
+        private String cbsSubjectName;
+
+        @ApiModelProperty("名称")
+        private String name;
+
+        @ApiModelProperty("编码")
+        private String code;
+
+        @ApiModelProperty(value = "父级编号",required = false)
+        private Long parentSubjectId;
+
+        private String parentSubjectName;
+
+        @ApiModelProperty("封面")
+        private String img;
+
+        @ApiModelProperty("orientation:1:竖 0:横")
+        private Boolean orientation;
+
+        @ApiModelProperty("删除标识")
+        private Boolean delFlag;
+
+        @ApiModelProperty("描述信息")
+        private String desc;
+
+        @ApiModelProperty("logo")
+        private String logo;
+
+        @ApiModelProperty("音频")
+        private String media;
+
+        @ApiModelProperty("更新时间")
+        private Date updateTime;
+
+        @ApiModelProperty("创建时间")
+        private Date createTime;
+
+        @ApiModelProperty("启用标识")
+        private Boolean enableFlag;
+
+        @ApiModelProperty("声部列表")
+        private List<Subject> subjects;
+
+        @ApiModelProperty("乐器列表")
+        private List<InstrumentWrapper.Instrument> instruments;
+
+    }
+
+
+    @Data
+    @Builder
+    @NoArgsConstructor
+    @AllArgsConstructor
+    public static class SmallInstrument {
+
+        @ApiModelProperty("乐器ID")
+        private Integer id;
+
+        @ApiModelProperty("乐器名称")
+        private String name;
+
+        @ApiModelProperty("编码")
+        private String code;
+
+        @ApiModelProperty("横竖屏:1:竖 0:横")
+        private Boolean orientation;
+
+        @ApiModelProperty("是否可转普")
+        private Boolean transferFlag;
+
+        @ApiModelProperty("图片")
+        private String img;
+
+        @ApiModelProperty("音频")
+        private String media;
+
+        @ApiModelProperty("频率")
+        private Integer hz;
+
+        @ApiModelProperty("是否启用")
+        private Boolean enableFlag = false;
+
+        @ApiModelProperty("操作人")
+        private Long operator;
+    }
+
+
+    @Data
+    @Builder
+    @NoArgsConstructor
+    @AllArgsConstructor
+    public static class SmallSubject {
+
+        @ApiModelProperty("声部ID")
+        private Integer id;
+
+        @ApiModelProperty("声部名称")
+        private String name;
+    }
+
+
+    @Data
+    @Builder
+    @NoArgsConstructor
+    @AllArgsConstructor
+    public static class SmallMusicSheet {
+
+        @ApiModelProperty("id")
+        private Long id;
+
+        @ApiModelProperty("声部ID")
+        private String musicSubject;
+
+        @ApiModelProperty("内容平台声部ID")
+        private String cbsSubjectId;
+    }
+
+    @Data
+    @ApiModel("声部启用")
+    public static class SubjectEnable {
+
+        @ApiModelProperty("声部ID")
+        @NotNull(message = "声部ID不能为空")
+        private Long id;
+
+        @ApiModelProperty("启用标识")
+        @NotNull(message = "启用标识不能为空")
+        private Boolean enableFlag;
+    }
+
+
+    @Data
+    public static class AddSubject {
+
+        @ApiModelProperty("内容平台声部")
+        private List<AddSubjectInstrument> subjects;
+
+        @ApiModelProperty("操作人")
+        private Long operator;
+    }
+
+    @Data
+    public static class AddSubjectInstrument {
+
+        @ApiModelProperty("内容平台声部ID")
+        @NotNull(message = "内容平台声部ID不能为空")
+        private Long cbsSubjectId;
+
+        @ApiModelProperty("分类编号")
+        @NotNull(message = "分类编号不能为空")
+        private Long parentSubjectId;
+
+        @ApiModelProperty("乐器ID")
+        private List<Long> instrumentIds;
+    }
+
+    @Data
+    public static class CbsSubject{
+        @ApiModelProperty("声部ID")
+        private Long id;
+
+        @ApiModelProperty("名称")
+        private String name;
+
+        @ApiModelProperty("编码")
+        private String code;
+
+        @ApiModelProperty("是否启用")
+        private Boolean enableFlag;
+
+        @ApiModelProperty("乐器列表")
+        private List<Instrument> instruments;
+    }
+
+
+    @Data
+    @ApiModel(" Instrument-乐器设置")
+    public static class Instrument {
+
+        @ApiModelProperty("乐器ID")
+        private Integer id;
+
+        @ApiModelProperty("乐器名称")
+        private String name;
+
+        @ApiModelProperty("是否已被添加过")
+        private Boolean added = false;
+    }
+
+    @Data
+    @ApiModel(" SubjectList-声部表")
+    public static class CbsSubjectQuery extends CbsSubjectWrapper.SubjectQuery {
+
+        @ApiModelProperty("当前声部ID")
+        private Long subjectId;
+
+        @ApiModelProperty("是否移除被使用过的声部")
+        private Boolean removeUsed = false;
+    }
+}