Browse Source

Merge remote-tracking branch 'origin/master'

Joburgess 4 years ago
parent
commit
a31d29c668
27 changed files with 514 additions and 75 deletions
  1. 2 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentDao.java
  2. 9 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/SysMusicCompareRecordDao.java
  3. 6 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/IndexBaseDto.java
  4. 46 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/MusicCompareRankingDto.java
  5. 41 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/MusicalNotesPlayStatDto.java
  6. 42 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/SoundCompareHelper.java
  7. 67 10
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/WebSocketInfo.java
  8. 5 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/IndexBaseMonthData.java
  9. 10 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/SysMusicScore.java
  10. 12 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/SysSuggestion.java
  11. 3 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/IndexDataType.java
  12. 38 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/MusicalErrorTypeEnum.java
  13. 10 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/SysMusicCompareRecordQueryInfo.java
  14. 31 6
      mec-biz/src/main/java/com/ym/mec/biz/handler/WebSocketHandler.java
  15. 14 7
      mec-biz/src/main/java/com/ym/mec/biz/service/SysMusicCompareRecordService.java
  16. 2 3
      mec-biz/src/main/java/com/ym/mec/biz/service/WebSocketEventHandler.java
  17. 2 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/SoundCheckHandler.java
  18. 29 22
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/SoundCompareHandler.java
  19. 72 18
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysMusicCompareRecordServiceImpl.java
  20. 10 0
      mec-biz/src/main/resources/config/mybatis/StudentMapper.xml
  21. 9 2
      mec-biz/src/main/resources/config/mybatis/SysMusicCompareRecordMapper.xml
  22. 6 2
      mec-biz/src/main/resources/config/mybatis/SysMusicScoreMapper.xml
  23. 6 2
      mec-biz/src/main/resources/config/mybatis/SysSuggestionMapper.xml
  24. 3 2
      mec-student/src/main/java/com/ym/mec/student/controller/CloudStudyController.java
  25. 13 0
      mec-student/src/main/java/com/ym/mec/student/controller/SysMusicCompareRecordController.java
  26. 13 0
      mec-teacher/src/main/java/com/ym/mec/teacher/controller/SysMusicCompareRecordController.java
  27. 13 0
      mec-web/src/main/java/com/ym/mec/web/controller/education/SysMusicCompareRecordController.java

+ 2 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentDao.java

@@ -351,4 +351,6 @@ public interface StudentDao extends com.ym.mec.common.dal.BaseDAO<Integer, Stude
 
     List<Map<Integer, Integer>> getTeacherExperienceMemberStudentNum(@Param("teacherIds") List<Integer> teacherIds,
                                                                      @Param("organId") Integer organId);
+
+    List<Map<Integer, String>> getStudentSubjectMapList(@Param("studentIds") List<Integer> studentIds);
 }

+ 9 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/SysMusicCompareRecordDao.java

@@ -23,6 +23,15 @@ public interface SysMusicCompareRecordDao extends BaseDAO<Long, SysMusicCompareR
                                                   @Param("endTime") String endTime);
 
     /**
+     * @describe 获取用户最后一次评测数据
+     * @author Joburgess
+     * @date 2021/8/23 0023
+     * @param userId:
+     * @return com.ym.mec.biz.dal.entity.SysMusicCompareRecord
+     */
+    SysMusicCompareRecord getUserLastEvaluationData(@Param("userId") Integer userId);
+
+    /**
      * @describe 获取用户训练总览
      * @author Joburgess
      * @date 2021/8/11 0011

+ 6 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/IndexBaseDto.java

@@ -37,6 +37,12 @@ public class IndexBaseDto {
         this.title = title;
     }
 
+    public IndexBaseDto(IndexDataType dataType, List<IndexBaseMonthData> indexMonthData) {
+        this.dataType = dataType;
+        this.title = dataType.getMsg();
+        this.indexMonthData = indexMonthData;
+    }
+
     public IndexBaseDto(String title, BigDecimal percent, List<IndexBaseMonthData> indexMonthData) {
         this.title = title;
         this.percent = percent;

+ 46 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/MusicCompareRankingDto.java

@@ -2,6 +2,8 @@ package com.ym.mec.biz.dal.dto;
 
 import io.swagger.annotations.ApiModelProperty;
 
+import java.math.BigDecimal;
+
 /**
  * @Author Joburgess
  * @Date 2021/8/11 0011
@@ -17,9 +19,21 @@ public class MusicCompareRankingDto {
     @ApiModelProperty("学员姓名")
     private String studentName;
 
+    @ApiModelProperty("声部编号")
+    private Integer subjectId;
+
+    @ApiModelProperty("声部名称")
+    private String subjectName;
+
+    @ApiModelProperty("演奏曲目")
+    private String musicScoreName;
+
     @ApiModelProperty("排名")
     private int rankNum = -1;
 
+    @ApiModelProperty("得分")
+    private int score;
+
     @ApiModelProperty("训练天数")
     private int trainDays = 0;
 
@@ -64,6 +78,22 @@ public class MusicCompareRankingDto {
         this.rankNum = rankNum;
     }
 
+    public Integer getSubjectId() {
+        return subjectId;
+    }
+
+    public void setSubjectId(Integer subjectId) {
+        this.subjectId = subjectId;
+    }
+
+    public String getSubjectName() {
+        return subjectName;
+    }
+
+    public void setSubjectName(String subjectName) {
+        this.subjectName = subjectName;
+    }
+
     public int getTrainDays() {
         return trainDays;
     }
@@ -72,6 +102,14 @@ public class MusicCompareRankingDto {
         this.trainDays = trainDays;
     }
 
+    public String getMusicScoreName() {
+        return musicScoreName;
+    }
+
+    public void setMusicScoreName(String musicScoreName) {
+        this.musicScoreName = musicScoreName;
+    }
+
     public int getTrainTime() {
         return trainTime;
     }
@@ -95,4 +133,12 @@ public class MusicCompareRankingDto {
     public void setVipUser(int vipUser) {
         this.vipUser = vipUser;
     }
+
+    public int getScore() {
+        return score;
+    }
+
+    public void setScore(int score) {
+        this.score = score;
+    }
 }

+ 41 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/MusicalNotesPlayStatDto.java

@@ -0,0 +1,41 @@
+package com.ym.mec.biz.dal.dto;
+
+import com.ym.mec.biz.dal.enums.MusicalErrorTypeEnum;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * @Author Joburgess
+ * @Date 2021/8/23 0023
+ */
+public class MusicalNotesPlayStatDto {
+
+    @ApiModelProperty("音符数")
+    private int musicalNotesIndex;
+
+    @ApiModelProperty("错误类型")
+    private MusicalErrorTypeEnum musicalErrorType;
+
+    public MusicalNotesPlayStatDto() {
+    }
+
+    public MusicalNotesPlayStatDto(int musicalNotesIndex, MusicalErrorTypeEnum musicalErrorType) {
+        this.musicalNotesIndex = musicalNotesIndex;
+        this.musicalErrorType = musicalErrorType;
+    }
+
+    public int getMusicalNotesIndex() {
+        return musicalNotesIndex;
+    }
+
+    public void setMusicalNotesIndex(int musicalNotesIndex) {
+        this.musicalNotesIndex = musicalNotesIndex;
+    }
+
+    public MusicalErrorTypeEnum getMusicalErrorType() {
+        return musicalErrorType;
+    }
+
+    public void setMusicalErrorType(MusicalErrorTypeEnum musicalErrorType) {
+        this.musicalErrorType = musicalErrorType;
+    }
+}

+ 42 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/SoundCompareHelper.java

@@ -63,12 +63,22 @@ public class SoundCompareHelper implements PitchDetectionHandler {
     @ApiModelProperty(value = "音符频率字典")
     private Map<Integer, Float> musicalNotePitchMap = new HashMap<>();
 
+    @ApiModelProperty(value = "每个音符评测结果")
+    private List<MusicalNotesPlayStatDto> musicalNotesPlayStats = new ArrayList<>();
+
     @ApiModelProperty(value = "偏移时间量,解决客户端录音播放不同步导致的声音留白")
     private int offsetTime = -1;
 
     private List<MusicPitchDetailDto> musicXmlInfos;
 
     private String clientId;
+
+    private Integer detailId;
+
+    private Integer examSongId;
+
+    private String xmlUrl;
+
     /**
      * @describe 分贝检测器
      */
@@ -114,6 +124,30 @@ public class SoundCompareHelper implements PitchDetectionHandler {
         this.deviceType = deviceType;
     }
 
+    public Integer getDetailId() {
+        return detailId;
+    }
+
+    public void setDetailId(Integer detailId) {
+        this.detailId = detailId;
+    }
+
+    public Integer getExamSongId() {
+        return examSongId;
+    }
+
+    public void setExamSongId(Integer examSongId) {
+        this.examSongId = examSongId;
+    }
+
+    public String getXmlUrl() {
+        return xmlUrl;
+    }
+
+    public void setXmlUrl(String xmlUrl) {
+        this.xmlUrl = xmlUrl;
+    }
+
     public int getOffsetTime() {
         return offsetTime;
     }
@@ -186,6 +220,14 @@ public class SoundCompareHelper implements PitchDetectionHandler {
         this.measureEndTime = measureEndTime;
     }
 
+    public List<MusicalNotesPlayStatDto> getMusicalNotesPlayStats() {
+        return musicalNotesPlayStats;
+    }
+
+    public void setMusicalNotesPlayStats(List<MusicalNotesPlayStatDto> musicalNotesPlayStats) {
+        this.musicalNotesPlayStats = musicalNotesPlayStats;
+    }
+
     public List<MusicPitchDetailDto> getRecordMeasurePithInfo() {
         return recordMeasurePithInfo;
     }

+ 67 - 10
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/WebSocketInfo.java

@@ -1,32 +1,89 @@
 package com.ym.mec.biz.dal.dto;
 
-import com.alibaba.fastjson.JSONObject;
-
-import java.util.HashMap;
+import com.ym.mec.biz.dal.enums.WebsocketTypeEnum;
+import org.springframework.http.HttpStatus;
 
 /**
  * @Author Joburgess
  * @Date 2021/6/17 0017
  */
-public class WebSocketInfo {
+public class WebSocketInfo<T> {
+
+    private Head header = new Head();
+
+    private T body;
+
+    public static class Head{
+        private HttpStatus status = HttpStatus.OK;
+        private String commond = "";
+        private WebsocketTypeEnum type;
+
+        public Head() {
+        }
+
+        public Head(HttpStatus status) {
+            this.status = status;
+        }
+
+        public Head(String commond) {
+            this.commond = commond;
+        }
+
+        public Head(String commond, WebsocketTypeEnum type) {
+            this.commond = commond;
+            this.type = type;
+        }
+
+        public HttpStatus getStatus() {
+            return status;
+        }
+
+        public void setStatus(HttpStatus status) {
+            this.status = status;
+        }
+
+        public String getCommond() {
+            return commond;
+        }
 
-    private HashMap<String, String> header = new HashMap<>();
+        public void setCommond(String commond) {
+            this.commond = commond;
+        }
+
+        public WebsocketTypeEnum getType() {
+            return type;
+        }
+
+        public void setType(WebsocketTypeEnum type) {
+            this.type = type;
+        }
+    }
+
+    public WebSocketInfo() {
+    }
+
+    public WebSocketInfo(Head header) {
+        this.header = header;
+    }
+
+    public static WebSocketInfo success(){
+        return new WebSocketInfo(new Head());
+    }
 
-    private Object body;
 
-    public HashMap<String, String> getHeader() {
+    public Head getHeader() {
         return header;
     }
 
-    public void setHeader(HashMap<String, String> header) {
+    public void setHeader(Head header) {
         this.header = header;
     }
 
-    public Object getBody() {
+    public T getBody() {
         return body;
     }
 
-    public void setBody(Object body) {
+    public void setBody(T body) {
         this.body = body;
     }
 }

+ 5 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/IndexBaseMonthData.java

@@ -60,6 +60,11 @@ public class IndexBaseMonthData {
 		this.percent = BigDecimal.ZERO;
 	}
 
+	public IndexBaseMonthData(Date month, Integer organId, BigDecimal percent) {
+		this.month = month;
+		this.percent = percent;
+	}
+
 	public Long getId() {
 		return id;
 	}

+ 10 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/SysMusicScore.java

@@ -51,6 +51,8 @@ public class SysMusicScore {
 	 * 客户端类型
 	 */
 	private ClientTypeEnum clientType;
+
+	private String rankIds;
 	
 	/**  */
 	private java.util.Date updateTime;
@@ -58,6 +60,14 @@ public class SysMusicScore {
 	/**  */
 	private java.util.Date createTime;
 
+	public String getRankIds() {
+		return rankIds;
+	}
+
+	public void setRankIds(String rankIds) {
+		this.rankIds = rankIds;
+	}
+
 	public ClientTypeEnum getClientType() {
 		return clientType;
 	}

+ 12 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/SysSuggestion.java

@@ -23,6 +23,10 @@ public class SysSuggestion {
 	/** 内容 */
 	@ApiModelProperty(value = "内容",required = false)
 	private String content;
+
+	/** 媒体 */
+	@ApiModelProperty(value = "媒体",required = false)
+	private String url;
 	
 	/** 用户编号 */
 	@ApiModelProperty(value = "用户编号",required = false)
@@ -40,6 +44,14 @@ public class SysSuggestion {
 	/** 提交时间 */
 	private java.util.Date createTime;
 
+	public String getUrl() {
+		return url;
+	}
+
+	public void setUrl(String url) {
+		this.url = url;
+	}
+
 	public String getUsername() {
 		return username;
 	}

+ 3 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/enums/IndexDataType.java

@@ -78,6 +78,9 @@ public enum IndexDataType implements BaseEnum<String, IndexDataType> {
     MEMBER_STUDENT_NUM("MEMBER_STUDENT_NUM", "会员数量", false, false),
     EXPERIENCE_MEMBER_STUDENT_NUM("EXPERIENCE_MEMBER_STUDENT_NUM", "试用会员数量", false, false),
     NEW_MEMBER_STUDENT_NUM("NEW_MEMBER_STUDENT_NUM", "新增会员数量", false, false),
+
+    CLOUD_STUDY_TRAIN_NUM("CLOUD_STUDY_TRAIN_NUM", "云教练训练次数", false, false),
+    CLOUD_STUDY_TRAIN_TIME("CLOUD_STUDY_TRAIN_TIME", "云教练训练时长", false, false),
     ;
 
     private String code;

+ 38 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/enums/MusicalErrorTypeEnum.java

@@ -0,0 +1,38 @@
+package com.ym.mec.biz.dal.enums;
+
+import com.ym.mec.common.enums.BaseEnum;
+
+/**
+ * 员工角色枚举
+ */
+public enum MusicalErrorTypeEnum implements BaseEnum<String, MusicalErrorTypeEnum> {
+	RIGHT("RIGHT", "演奏正确"),
+	WRONG("WRONG", "错音"),
+	NOT_PLAY("NOT_PLAY", "未演奏");
+
+	private String code;
+
+	private String msg;
+
+	MusicalErrorTypeEnum(String code, String msg) {
+		this.code = code;
+		this.msg = msg;
+	}
+
+	public void setCode(String code) {
+		this.code = code;
+	}
+
+	public String getMsg() {
+		return msg;
+	}
+
+	public void setMsg(String msg) {
+		this.msg = msg;
+	}
+
+	@Override
+	public String getCode() {
+		return this.code;
+	}
+}

+ 10 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/page/SysMusicCompareRecordQueryInfo.java

@@ -21,6 +21,8 @@ public class SysMusicCompareRecordQueryInfo extends QueryInfo {
 
     private String musicGroupId;
 
+    private int orderType;
+
     @ApiModelProperty("排序字段:TRAINDAYS(训练天数);TRAINTIME(训练时长);TRAINNUM(训练次数)")
     private String sortField = "TRAINDAYS";
 
@@ -42,6 +44,14 @@ public class SysMusicCompareRecordQueryInfo extends QueryInfo {
         this.teacherId = teacherId;
     }
 
+    public int getOrderType() {
+        return orderType;
+    }
+
+    public void setOrderType(int orderType) {
+        this.orderType = orderType;
+    }
+
     public Integer getUserId() {
         return userId;
     }

+ 31 - 6
mec-biz/src/main/java/com/ym/mec/biz/handler/WebSocketHandler.java

@@ -1,20 +1,24 @@
 package com.ym.mec.biz.handler;
 
 import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
 import com.ym.mec.biz.dal.dto.WebSocketClientDetail;
 import com.ym.mec.biz.dal.dto.WebSocketInfo;
 import com.ym.mec.biz.dal.enums.WebsocketTypeEnum;
 import com.ym.mec.biz.service.SoundSocketService;
 import com.ym.mec.biz.service.WebSocketEventHandler;
 import org.apache.commons.lang3.StringUtils;
+import org.apache.poi.ss.formula.functions.T;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Service;
 import org.springframework.web.socket.*;
 import org.springframework.web.socket.handler.AbstractWebSocketHandler;
 
+import java.io.IOException;
 import java.util.Date;
 import java.util.Map;
+import java.util.Objects;
 import java.util.concurrent.ConcurrentHashMap;
 
 /**
@@ -24,7 +28,7 @@ import java.util.concurrent.ConcurrentHashMap;
 @Service
 public class WebSocketHandler extends AbstractWebSocketHandler {
 
-    private final Logger LOGGER = LoggerFactory.getLogger(WebSocketHandler.class);
+    private static final Logger LOGGER = LoggerFactory.getLogger(WebSocketHandler.class);
 
     /**
      * @describe 存储客户端链接
@@ -67,13 +71,13 @@ public class WebSocketHandler extends AbstractWebSocketHandler {
     protected void handleTextMessage(WebSocketSession session, TextMessage message){
         String phone = session.getPrincipal().getName().split(":")[1];
         LOGGER.info("{}: {}", phone, message.getPayload());
-        WebSocketInfo webSocketInfo = JSON.parseObject(message.getPayload(), WebSocketInfo.class);
+        WebSocketInfo<JSONObject> webSocketInfo = JSON.parseObject(message.getPayload(), WebSocketInfo.class);
 
-        WebsocketTypeEnum websocketType = WebsocketTypeEnum.SOUND_COMPARE;
-        if(webSocketInfo.getHeader().containsKey(SoundSocketService.TAG)){
-            websocketType = WebsocketTypeEnum.valueOf(webSocketInfo.getHeader().get(SoundSocketService.TAG));
+        if(Objects.isNull(webSocketInfo.getHeader().getType())){
+            webSocketInfo.getHeader().setType(WebsocketTypeEnum.SOUND_COMPARE);
         }
-        appMap.get(websocketType).receiveTextMessage(session, phone, message);
+
+        appMap.get(webSocketInfo.getHeader().getType()).receiveTextMessage(session, phone, webSocketInfo);
     }
 
     @Override
@@ -114,4 +118,25 @@ public class WebSocketHandler extends AbstractWebSocketHandler {
     public boolean supportsPartialMessages() {
         return super.supportsPartialMessages();
     }
+
+    /**
+     * @describe 发送文本消息
+     * @author Joburgess
+     * @date 2021/8/23 0023
+     * @param phone: 接收人手机号
+     * @param message:
+     * @return boolean
+     */
+    public static <T> boolean sendTextMessage(String phone, T message){
+        if(!WS_CLIENTS.containsKey(phone)||!WS_CLIENTS.get(phone).getSession().isOpen()){
+            return false;
+        }
+        try {
+            WS_CLIENTS.get(phone).getSession().sendMessage(new TextMessage(JSON.toJSONString(message)));
+        } catch (IOException e) {
+            LOGGER.error("消息发送失败:{}", e);
+            return false;
+        }
+        return true;
+    }
 }

+ 14 - 7
mec-biz/src/main/java/com/ym/mec/biz/service/SysMusicCompareRecordService.java

@@ -1,14 +1,13 @@
 package com.ym.mec.biz.service;
 
-import com.ym.mec.biz.dal.dto.CountStudentTrainDataDto;
-import com.ym.mec.biz.dal.dto.MusicCompareRankingDto;
-import com.ym.mec.biz.dal.dto.SoundCompareHelper;
-import com.ym.mec.biz.dal.dto.StatDto;
+import com.alibaba.fastjson.JSONObject;
+import com.ym.mec.biz.dal.dto.*;
 import com.ym.mec.biz.dal.entity.SysMusicCompareRecord;
 import com.ym.mec.biz.dal.page.SysMusicCompareRecordQueryInfo;
 import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.service.BaseService;
 
+import java.util.List;
 import java.util.Map;
 
 public interface SysMusicCompareRecordService extends BaseService<Long, SysMusicCompareRecord> {
@@ -24,14 +23,22 @@ public interface SysMusicCompareRecordService extends BaseService<Long, SysMusic
     void saveMusicCompareData(String phone, SoundCompareHelper soundCompareInfo);
 
     /**
+     * @describe 用户最后一次评测数据
+     * @author Joburgess
+     * @date 2021/8/23 0023
+     * @param userId:
+     * @return java.util.List<com.ym.mec.biz.dal.dto.MusicalNotesPlayStatDto>
+     */
+    Object getLastEvaluationMusicalNotesPlayStats(Integer userId);
+
+    /**
      * @describe 云教练排行榜
      * @author Joburgess
      * @date 2021/8/11 0011
-     * @param startDate:
-     * @param endDate:
+     * @param queryInfo:
      * @return com.ym.mec.biz.dal.dto.StatDto
      */
-    StatDto rankingList(Integer headUserId, String startDate, String endDate);
+    StatDto rankingList(SysMusicCompareRecordQueryInfo queryInfo);
 
     /**
      * @describe 学员训练数据统计

+ 2 - 3
mec-biz/src/main/java/com/ym/mec/biz/service/WebSocketEventHandler.java

@@ -1,5 +1,6 @@
 package com.ym.mec.biz.service;
 
+import com.ym.mec.biz.dal.dto.WebSocketInfo;
 import org.springframework.web.socket.BinaryMessage;
 import org.springframework.web.socket.TextMessage;
 import org.springframework.web.socket.WebSocketSession;
@@ -10,8 +11,6 @@ import org.springframework.web.socket.WebSocketSession;
  **/
 public interface WebSocketEventHandler {
 
-
-
     /**
      * @describe 连接成功
      * @author Joburgess
@@ -29,7 +28,7 @@ public interface WebSocketEventHandler {
      * @param message: 文本信息
      * @return void
      */
-    void receiveTextMessage(WebSocketSession session, String phone, TextMessage message);
+    void receiveTextMessage(WebSocketSession session, String phone, WebSocketInfo message);
 
     /**
      * @describe 接收到二进制数据

+ 2 - 1
mec-biz/src/main/java/com/ym/mec/biz/service/impl/SoundCheckHandler.java

@@ -50,7 +50,7 @@ public class SoundCheckHandler implements WebSocketEventHandler {
     }
 
     @Override
-    public void receiveTextMessage(WebSocketSession session, String phone, TextMessage message) {
+    public void receiveTextMessage(WebSocketSession session, String phone, WebSocketInfo message) {
         userSoundCheckInfo.put(phone, 0);
     }
 
@@ -68,6 +68,7 @@ public class SoundCheckHandler implements WebSocketEventHandler {
         } catch (UnsupportedAudioFileException e) {
             throw new BizException("{}校音异常:{}", phone, e);
         }
+        WebSocketHandler.sendTextMessage(phone, WebSocketInfo.success());
     }
 
     @Override

+ 29 - 22
mec-biz/src/main/java/com/ym/mec/biz/service/impl/SoundCompareHandler.java

@@ -8,11 +8,9 @@ import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.ym.mec.biz.dal.config.SoundCompareConfig;
 import com.ym.mec.biz.dal.dao.SysMusicScoreAccompanimentDao;
-import com.ym.mec.biz.dal.dto.MusicPitchDetailDto;
-import com.ym.mec.biz.dal.dto.SoundCompareHelper;
-import com.ym.mec.biz.dal.dto.WavHeader;
-import com.ym.mec.biz.dal.dto.WebSocketInfo;
+import com.ym.mec.biz.dal.dto.*;
 import com.ym.mec.biz.dal.enums.DeviceTypeEnum;
+import com.ym.mec.biz.dal.enums.MusicalErrorTypeEnum;
 import com.ym.mec.biz.dal.enums.WebsocketTypeEnum;
 import com.ym.mec.biz.handler.WebSocketHandler;
 import com.ym.mec.biz.service.SoundSocketService;
@@ -23,7 +21,6 @@ import com.ym.mec.common.exception.BizException;
 import com.ym.mec.thirdparty.storage.StoragePluginContext;
 import com.ym.mec.thirdparty.storage.provider.KS3StoragePlugin;
 import com.ym.mec.util.upload.UploadUtil;
-import org.apache.commons.io.FileUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -31,7 +28,6 @@ import org.springframework.security.oauth2.provider.OAuth2Authentication;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
 import org.springframework.web.socket.BinaryMessage;
-import org.springframework.web.socket.TextMessage;
 import org.springframework.web.socket.WebSocketSession;
 
 import javax.sound.sampled.UnsupportedAudioFileException;
@@ -88,15 +84,10 @@ public class SoundCompareHandler implements WebSocketEventHandler {
     }
 
     @Override
-    public void receiveTextMessage(WebSocketSession session, String phone, TextMessage message) {
-        WebSocketInfo webSocketInfo = JSON.parseObject(message.getPayload(), WebSocketInfo.class);
-        JSONObject bodyObject = (JSONObject) webSocketInfo.getBody();
+    public void receiveTextMessage(WebSocketSession session, String phone, WebSocketInfo message) {
+        JSONObject bodyObject = (JSONObject) message.getBody();
 
-        String commond = "";
-        if(webSocketInfo.getHeader().containsKey(SoundSocketService.COMMOND)){
-            commond = webSocketInfo.getHeader().get(SoundSocketService.COMMOND);
-        }
-        switch (commond){
+        switch (message.getHeader().getCommond()){
             case SoundSocketService.MUSIC_XML:
                 userSoundInfoMap.put(phone, new SoundCompareHelper());
                 userSoundInfoMap.get(phone).setClientId(((OAuth2Authentication)session.getPrincipal()).getOAuth2Request().getClientId());
@@ -110,6 +101,15 @@ public class SoundCompareHandler implements WebSocketEventHandler {
                 if(bodyObject.containsKey("behaviorId")){
                     userSoundInfoMap.get(phone).setBehaviorId(bodyObject.getString("behaviorId"));
                 }
+                if(bodyObject.containsKey("detailId")){
+                    userSoundInfoMap.get(phone).setDetailId(bodyObject.getInteger("detailId"));
+                }
+                if(bodyObject.containsKey("examSongId")){
+                    userSoundInfoMap.get(phone).setExamSongId(bodyObject.getInteger("examSongId"));
+                }
+                if(bodyObject.containsKey("xmlUrl")){
+                    userSoundInfoMap.get(phone).setXmlUrl(bodyObject.getString("xmlUrl"));
+                }
                 List<Integer> subjectIds = sysMusicScoreAccompanimentDao.findSubjectByMusicScoreId(userSoundInfoMap.get(phone).getMusicScoreId(), null);
                 if(!CollectionUtils.isEmpty(subjectIds)){
                     userSoundInfoMap.get(phone).setSubjectId(subjectIds.get(0));
@@ -397,6 +397,9 @@ public class SoundCompareHandler implements WebSocketEventHandler {
                     userSoundInfoMap.get(phone).getMusicalNotePitchMap().put(musicXmlInfo.getMusicalNotesIndex(), (float) pitch);
                 }
 
+                boolean cadenceRight = false;
+                boolean intonationRight = false;
+
                 //有效节奏占比
                 float cadenceDuty = cadenceValidNum/compareNum;
                 //如果频率出现断层或这个音量出现断层,则当前音符节奏无效
@@ -406,6 +409,7 @@ public class SoundCompareHandler implements WebSocketEventHandler {
                 //节奏
                 if(cadenceDuty>=soundCompareConfig.cadenceValidDuty){
                     cadenceNum++;
+                    cadenceRight = true;
                 }
                 //音准
                 if (!CollectionUtils.isEmpty(measureSoundPitchInfos)){
@@ -427,6 +431,7 @@ public class SoundCompareHandler implements WebSocketEventHandler {
                     }
                     intonationScore += score;
                     musicXmlInfo.setAvgFrequency(avgPitch.floatValue());
+                    intonationRight = score>70;
                 }
                 //完成度
                 if(integrityValidNum > compareNum){
@@ -434,6 +439,14 @@ public class SoundCompareHandler implements WebSocketEventHandler {
                 }
                 float integrityDuty = integrityValidNum/compareNum;
                 integrityScore += integrityDuty;
+
+                if(cadenceRight&&intonationRight){
+                    userSoundInfoMap.get(phone).getMusicalNotesPlayStats().add(new MusicalNotesPlayStatDto(musicXmlInfo.getMusicalNotesIndex(), MusicalErrorTypeEnum.RIGHT));
+                }else if(cadenceRight&&!intonationRight){
+                    userSoundInfoMap.get(phone).getMusicalNotesPlayStats().add(new MusicalNotesPlayStatDto(musicXmlInfo.getMusicalNotesIndex(), MusicalErrorTypeEnum.WRONG));
+                }else{
+                    userSoundInfoMap.get(phone).getMusicalNotesPlayStats().add(new MusicalNotesPlayStatDto(musicXmlInfo.getMusicalNotesIndex(), MusicalErrorTypeEnum.NOT_PLAY));
+                }
             }
 
             BigDecimal measureNum = new BigDecimal(totalCompareNum);
@@ -508,9 +521,7 @@ public class SoundCompareHandler implements WebSocketEventHandler {
     private WebSocketInfo createPushInfo(String phone, String command, Integer measureIndex,
                                          BigDecimal intonation, BigDecimal cadence, BigDecimal integrity){
         WebSocketInfo webSocketInfo = new WebSocketInfo();
-        HashMap<String, String> header = new HashMap<>();
-        header.put("commond", command);
-        webSocketInfo.setHeader(header);
+        webSocketInfo.setHeader(new WebSocketInfo.Head(command));
         Map<String, Object> result = new HashMap<>(5);
         BigDecimal score = cadence;
         if(Objects.isNull(userSoundInfoMap.get(phone).getSubjectId())||userSoundInfoMap.get(phone).getSubjectId()!=23){
@@ -528,11 +539,7 @@ public class SoundCompareHandler implements WebSocketEventHandler {
         LOGGER.info("小节频分:{}", JSON.toJSONString(webSocketInfo));
 
         //推送结果
-        try {
-            WebSocketHandler.WS_CLIENTS.get(phone).getSession().sendMessage(new TextMessage(JSON.toJSONString(webSocketInfo)));
-        } catch (IOException e) {
-            LOGGER.error("{}评分结果推送失败", phone);
-        }
+        WebSocketHandler.sendTextMessage(phone, webSocketInfo);
         return webSocketInfo;
     }
 }

+ 72 - 18
mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysMusicCompareRecordServiceImpl.java

@@ -1,13 +1,16 @@
 package com.ym.mec.biz.service.impl;
 
 import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.dao.StudentDao;
 import com.ym.mec.biz.dal.dao.SysMusicCompareRecordDao;
 import com.ym.mec.biz.dal.dao.TeacherDao;
 import com.ym.mec.biz.dal.dto.*;
+import com.ym.mec.biz.dal.entity.IndexBaseMonthData;
 import com.ym.mec.biz.dal.entity.SysMusicCompareRecord;
 import com.ym.mec.biz.dal.enums.FeatureType;
+import com.ym.mec.biz.dal.enums.IndexDataType;
 import com.ym.mec.biz.dal.page.SysMusicCompareRecordQueryInfo;
 import com.ym.mec.biz.service.SysMusicCompareRecordService;
 import com.ym.mec.common.dal.BaseDAO;
@@ -15,6 +18,8 @@ import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
 import com.ym.mec.util.collection.MapUtil;
 import com.ym.mec.util.date.DateUtil;
+import io.swagger.models.auth.In;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
@@ -56,7 +61,15 @@ public class SysMusicCompareRecordServiceImpl extends BaseServiceImpl<Long, SysM
 		sysMusicCompareRecord.setUserId(user.getId());
 		sysMusicCompareRecord.setSysMusicScoreId(soundCompareInfo.getMusicScoreId());
 		sysMusicCompareRecord.setBehaviorId(soundCompareInfo.getBehaviorId());
-		sysMusicCompareRecord.setScoreData(JSON.toJSONString(soundCompareInfo.getUserMeasureScoreMap()));
+		Map<String, Object> scoreData = new HashMap<>();
+		scoreData.put("userMeasureScore", soundCompareInfo.getUserMeasureScoreMap());
+		Map<String, Object> musicalNotesPlayStats = new HashMap<>();
+		musicalNotesPlayStats.put("detailId", soundCompareInfo.getDetailId());
+		musicalNotesPlayStats.put("examSongId", soundCompareInfo.getExamSongId());
+		musicalNotesPlayStats.put("xmlUrl", soundCompareInfo.getXmlUrl());
+		musicalNotesPlayStats.put("notesData", soundCompareInfo.getMusicalNotesPlayStats());
+		scoreData.put("musicalNotesPlayStats", musicalNotesPlayStats);
+		sysMusicCompareRecord.setScoreData(JSON.toJSONString(scoreData));
 		if (Objects.nonNull(soundCompareInfo.getUserMeasureScoreMap()) && soundCompareInfo.getUserMeasureScoreMap().containsKey(-1)){
 			Map<String, Object> finalScore = soundCompareInfo.getUserMeasureScoreMap().get(-1);
 			sysMusicCompareRecord.setScore((BigDecimal) finalScore.get("score"));
@@ -76,28 +89,55 @@ public class SysMusicCompareRecordServiceImpl extends BaseServiceImpl<Long, SysM
 	}
 
 	@Override
-	public StatDto rankingList(Integer headUserId, String startDate, String endDate) {
-		SysUser user = teacherDao.getUser(headUserId);
+	public Object getLastEvaluationMusicalNotesPlayStats(Integer userId) {
+		SysMusicCompareRecord userLastEvaluationData = sysMusicCompareRecordDao.getUserLastEvaluationData(userId);
+		if(StringUtils.isBlank(userLastEvaluationData.getScoreData())){
+			return null;
+		}
+		JSONObject jsonObject = JSON.parseObject(userLastEvaluationData.getScoreData());
+		if(!jsonObject.containsKey("musicalNotesPlayStats")){
+			return null;
+		}
+		return jsonObject.get("musicalNotesPlayStats");
+	}
+
+	@Override
+	public StatDto rankingList(SysMusicCompareRecordQueryInfo queryInfo) {
 		StatDto result = new StatDto();
 		MusicCompareRankingDto head = new MusicCompareRankingDto();
-		head.setUserId(headUserId);
-		List<MusicCompareRankingDto> userTrainStat = sysMusicCompareRecordDao.getUserTrainStat(startDate, endDate);
+		head.setUserId(queryInfo.getUserId());
+		List<MusicCompareRankingDto> userTrainStat = sysMusicCompareRecordDao.getUserTrainStat(queryInfo.getStartTime(), queryInfo.getEndTime());
 		List<MusicCompareRankingDto> detail = new ArrayList<>();
-		userTrainStat.sort(Comparator.comparing(m->m.getTrainDays()+m.getTrainNum()+m.getTrainTime()));
-		for (int i = 0; i < userTrainStat.size(); i++) {
-			userTrainStat.get(i).setRankNum(userTrainStat.size()-i);
-			userTrainStat.get(i).setTrainTime(userTrainStat.get(i).getTrainTime()/60);
-			if(userTrainStat.get(i).getUserId().equals(headUserId)){
-				head = userTrainStat.get(i);
+		switch (queryInfo.getOrderType()){
+			case 1:
+				userTrainStat.sort(Comparator.comparing(m->m.getScore(), Comparator.reverseOrder()));
+				break;
+			case 2:
+				userTrainStat.sort(Comparator.comparing(m->m.getTrainDays(), Comparator.reverseOrder()));
+				break;
+			default:
+				userTrainStat.sort(Comparator.comparing(m->m.getTrainTime(), Comparator.reverseOrder()));
+				break;
+		}
+
+		detail = userTrainStat.subList(0, 10);
+		List<Integer> studentIds = detail.stream().map(MusicCompareRankingDto::getUserId).collect(Collectors.toList());
+		Map<Integer, String> studentSubjectMap = new HashMap<>();
+		if(!CollectionUtils.isEmpty(studentIds)){
+			List<Map<Integer, String>> studentSubjectMapList = studentDao.getStudentSubjectMapList(studentIds);
+			studentSubjectMap = MapUtil.convertIntegerMap(studentSubjectMapList);
+		}
+
+		for (int i = 0; i < detail.size(); i++) {
+			detail.get(i).setRankNum(i+1);
+			detail.get(i).setTrainTime(detail.get(i).getTrainTime()/60);
+			if(detail.get(i).getUserId().equals(queryInfo.getUserId())){
+				head = detail.get(i);
 			}
-			if(userTrainStat.get(i).getRankNum()<=10){
-				detail.add(userTrainStat.get(i));
+			if(studentSubjectMap.containsKey(detail.get(i).getUserId())){
+				detail.get(i).setSubjectName(studentSubjectMap.get(detail.get(i).getUserId()));
 			}
 		}
-		if(Objects.isNull(head.getRankNum())&&Objects.nonNull(user)){
-			head.setAvatar(user.getAvatar());
-			head.setStudentName(user.getUsername());
-		}
 		result.setHead(head);
 		detail.sort(Comparator.comparing(MusicCompareRankingDto::getRankNum).thenComparing(MusicCompareRankingDto::getUserId));
 		result.setDetail(detail);
@@ -142,7 +182,21 @@ public class SysMusicCompareRecordServiceImpl extends BaseServiceImpl<Long, SysM
 		pageInfo.setRows(dataList);
 		Map<String, Object> result = new HashMap<>();
 		result.put("userTrainOverView",userTrainOverView);
-		result.put("userTrainChartData",userTrainChartData);
+
+		List<IndexBaseDto> userTrainChartResult = new ArrayList<>();
+		List<IndexBaseMonthData> trainNumData = new ArrayList<>();
+		List<IndexBaseMonthData> trainTimeData = new ArrayList<>();
+
+		for (StudentTrainChartDto data : userTrainChartData) {
+			Date trainDate = Date.from(data.getTrainDate().atStartOfDay(DateUtil.zoneId).toInstant());
+			trainTimeData.add(new IndexBaseMonthData(trainDate, null, new BigDecimal(data.getTrainTime())));
+			trainNumData.add(new IndexBaseMonthData(trainDate, null, new BigDecimal(data.getTrainNum())));
+		}
+
+		userTrainChartResult.add(new IndexBaseDto(IndexDataType.CLOUD_STUDY_TRAIN_TIME, trainTimeData));
+		userTrainChartResult.add(new IndexBaseDto(IndexDataType.CLOUD_STUDY_TRAIN_NUM, trainNumData));
+
+		result.put("userTrainChartData", userTrainChartResult);
 		result.put("detail",pageInfo);
 		return result;
 	}

+ 10 - 0
mec-biz/src/main/resources/config/mybatis/StudentMapper.xml

@@ -1180,6 +1180,16 @@
         GROUP BY stu.teacher_id_
     </select>
 
+    <select id="getStudentSubjectMapList" resultType="java.util.Map">
+        SELECT stu.user_id_ 'key',sub.name_ 'value'
+        FROM student stu
+             LEFT JOIN `subject` sub ON stu.subject_id_list_ = sub.id_
+        WHERE stu.user_id_ IN
+        <foreach collection="studentIds" item="studentId" open="(" close=")" separator=",">
+            #{studentId}
+        </foreach>
+    </select>
+
     <update id="updateGrade"><![CDATA[
         UPDATE student SET current_grade_num_=current_grade_num_+1
         WHERE current_grade_num_>=1

+ 9 - 2
mec-biz/src/main/resources/config/mybatis/SysMusicCompareRecordMapper.xml

@@ -140,11 +140,14 @@
 			smcr.user_id_ userId,
 			su.avatar_ avatar,
 		    su.username_ studentName,
+		    sms.name_ musicScoreName,
 			COUNT(smcr.id_) trainNum,
-			COUNT(DISTINCT DAY(smcr.create_time_)) trainDays,
+		    SUM(smcr.score_)/COUNT(smcr.id_) score,
+			COUNT(DISTINCT DATE(smcr.create_time_)) trainDays,
 			SUM(smcr.play_time_) trainTime
 		FROM sys_music_compare_record smcr
-				 LEFT JOIN sys_user su ON smcr.user_id_=su.id_
+			LEFT JOIN sys_user su ON smcr.user_id_=su.id_
+			LEFT JOIN sys_music_score sms ON smcr.sys_music_score_id_ = sms.id_
 		WHERE EXISTS (SELECT user_id_ FROM student WHERE user_id_=smcr.user_id_)
 		AND DATE_FORMAT(smcr.create_time_, '%Y-%m-%d') BETWEEN #{startTime} AND #{endTime}
 		GROUP BY smcr.user_id_
@@ -369,4 +372,8 @@
 							   DATE( smcr.create_time_ ))= CURDATE()) t
 		GROUP BY t.organ_id_
 	</select>
+
+    <select id="getUserLastEvaluationData" resultMap="SysMusicCompareRecord">
+		SELECT * FROM sys_music_compare_record WHERE user_id_=#{userId} ORDER BY create_time_ DESC LIMIT 1
+	</select>
 </mapper>

+ 6 - 2
mec-biz/src/main/resources/config/mybatis/SysMusicScoreMapper.xml

@@ -19,6 +19,7 @@
 		<result column="create_user_name_" property="createUserName" />
 		<result column="del_flag_" property="delFlag" />
 		<result column="order_" property="order" />
+		<result column="rank_ids_" property="rankIds" />
 		<result column="client_type_" property="clientType" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
 		<result column="update_time_" property="updateTime" />
 		<result column="create_time_" property="createTime" />
@@ -36,9 +37,9 @@
 	
 	<!-- 向数据库增加一条记录 -->
 	<insert id="insert" parameterType="com.ym.mec.biz.dal.entity.SysMusicScore" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
-		INSERT INTO sys_music_score (music_score_categories_id_,name_,type_,speed_,url_,create_user_id_,order_,update_time_,create_time_,client_type_)
+		INSERT INTO sys_music_score (music_score_categories_id_,name_,type_,speed_,url_,create_user_id_,order_,update_time_,create_time_,client_type_,rank_ids_)
 		VALUES(#{musicScoreCategoriesId},#{name},#{type,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
-		       #{speed},#{url},#{createUserId},#{order},NOW(),NOW(),#{clientType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler})
+		       #{speed},#{url},#{createUserId},#{order},NOW(),NOW(),#{clientType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{rankIds})
 	</insert>
 
 	<!-- 根据主键查询一条记录 -->
@@ -47,6 +48,9 @@
 		<if test="clientType != null">
 			client_type_ = #{clientType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
 		</if>
+		<if test="rankIds != null">
+			rank_ids_ = #{rankIds},
+		</if>
 		<if test="order != null">
 			order_ = #{order},
 		</if>

+ 6 - 2
mec-biz/src/main/resources/config/mybatis/SysSuggestionMapper.xml

@@ -11,6 +11,7 @@
         <result column="mobile_no_" property="mobileNo"/>
         <result column="title_" property="title"/>
         <result column="content_" property="content"/>
+        <result column="url_" property="url"/>
         <result column="user_id_" property="userId"/>
         <result column="username_" property="username"/>
         <result column="create_time_" property="createTime"/>
@@ -31,14 +32,17 @@
     <!-- 向数据库增加一条记录 -->
     <insert id="insert" parameterType="com.ym.mec.biz.dal.entity.SysSuggestion" useGeneratedKeys="true" keyColumn="id"
             keyProperty="id">
-        INSERT INTO sys_suggestion (id_,mobile_no_,title_,content_,user_id_,create_time_,client_type_,type_)
-        VALUES(#{id},#{mobileNo},#{title},#{content},#{userId},now(),#{clientType},#{type, typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler})
+        INSERT INTO sys_suggestion (mobile_no_,title_,content_,user_id_,create_time_,client_type_,type_,url_)
+        VALUES(#{mobileNo},#{title},#{content},#{userId},now(),#{clientType},#{type, typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{url})
     </insert>
 
     <!-- 根据主键查询一条记录 -->
     <update id="update" parameterType="com.ym.mec.biz.dal.entity.SysSuggestion">
         UPDATE sys_suggestion
         <set>
+            <if test="url != null">
+                url_ = #{url},
+            </if>
             <if test="clientType != null">
                 client_type_ = #{clientType},
             </if>

+ 3 - 2
mec-student/src/main/java/com/ym/mec/student/controller/CloudStudyController.java

@@ -32,12 +32,13 @@ public class CloudStudyController extends BaseController {
 
     @ApiOperation("云教练排行榜")
     @GetMapping("rankingList")
-    public HttpResponseResult rankingList(String startDate, String endDate){
+    public HttpResponseResult rankingList(SysMusicCompareRecordQueryInfo queryInfo){
         SysUser sysUser = sysUserFeignService.queryUserInfo();
         if (sysUser == null) {
             return failed("获取用户信息失败");
         }
-        return succeed(sysMusicCompareRecordService.rankingList(sysUser.getId(), startDate, endDate));
+        queryInfo.setUserId(sysUser.getId());
+        return succeed(sysMusicCompareRecordService.rankingList(queryInfo));
     }
 
     @ApiOperation("学员训练数据统计")

+ 13 - 0
mec-student/src/main/java/com/ym/mec/student/controller/SysMusicCompareRecordController.java

@@ -2,6 +2,7 @@ package com.ym.mec.student.controller;
 
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
+import com.ym.mec.biz.dal.dto.MusicalNotesPlayStatDto;
 import com.ym.mec.biz.dal.entity.SysMusicCompareRecord;
 import com.ym.mec.biz.service.SysMusicCompareRecordService;
 import com.ym.mec.common.controller.BaseController;
@@ -10,10 +11,12 @@ import com.ym.mec.common.exception.BizException;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import java.util.List;
 import java.util.Objects;
 
 /**
@@ -45,4 +48,14 @@ public class SysMusicCompareRecordController extends BaseController {
         return succeed(sysMusicCompareRecordService.insert(record));
     }
 
+    @ApiOperation(value = "用户最后一次评测数据")
+    @GetMapping("getLastEvaluationMusicalNotesPlayStats")
+    public HttpResponseResult getLastEvaluationMusicalNotesPlayStats(){
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if(sysUser == null){
+            throw new BizException("请登录");
+        }
+        return succeed(sysMusicCompareRecordService.getLastEvaluationMusicalNotesPlayStats(sysUser.getId()));
+    }
+
 }

+ 13 - 0
mec-teacher/src/main/java/com/ym/mec/teacher/controller/SysMusicCompareRecordController.java

@@ -2,6 +2,7 @@ package com.ym.mec.teacher.controller;
 
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
+import com.ym.mec.biz.dal.dto.MusicalNotesPlayStatDto;
 import com.ym.mec.biz.dal.entity.SysMusicCompareRecord;
 import com.ym.mec.biz.service.SysMusicCompareRecordService;
 import com.ym.mec.common.controller.BaseController;
@@ -10,10 +11,12 @@ import com.ym.mec.common.exception.BizException;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import java.util.List;
 import java.util.Objects;
 
 /**
@@ -45,4 +48,14 @@ public class SysMusicCompareRecordController extends BaseController {
         return succeed(sysMusicCompareRecordService.insert(record));
     }
 
+    @ApiOperation(value = "用户最后一次评测数据")
+    @GetMapping("getLastEvaluationMusicalNotesPlayStats")
+    public HttpResponseResult getLastEvaluationMusicalNotesPlayStats(){
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if(sysUser == null){
+            throw new BizException("请登录");
+        }
+        return succeed(sysMusicCompareRecordService.getLastEvaluationMusicalNotesPlayStats(sysUser.getId()));
+    }
+
 }

+ 13 - 0
mec-web/src/main/java/com/ym/mec/web/controller/education/SysMusicCompareRecordController.java

@@ -2,6 +2,7 @@ package com.ym.mec.web.controller.education;
 
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
+import com.ym.mec.biz.dal.dto.MusicalNotesPlayStatDto;
 import com.ym.mec.biz.dal.entity.SysMusicCompareRecord;
 import com.ym.mec.biz.service.SysMusicCompareRecordService;
 import com.ym.mec.common.controller.BaseController;
@@ -10,10 +11,12 @@ import com.ym.mec.common.exception.BizException;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import java.util.List;
 import java.util.Objects;
 
 /**
@@ -45,4 +48,14 @@ public class SysMusicCompareRecordController extends BaseController {
         return succeed(sysMusicCompareRecordService.insert(record));
     }
 
+    @ApiOperation(value = "用户最后一次评测数据")
+    @GetMapping("getLastEvaluationMusicalNotesPlayStats")
+    public HttpResponseResult getLastEvaluationMusicalNotesPlayStats(){
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if(sysUser == null){
+            throw new BizException("请登录");
+        }
+        return succeed(sysMusicCompareRecordService.getLastEvaluationMusicalNotesPlayStats(sysUser.getId()));
+    }
+
 }