فهرست منبع

feat:小节评分重构

Joburgess 4 سال پیش
والد
کامیت
8a9bd73637

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

@@ -55,7 +55,7 @@ public class SoundCompareHelper implements PitchDetectionHandler {
 
     private List<MusicPitchDetailDto> musicXmlInfos;
 
-    private byte[] preDataArray = new byte[0];
+    private String clientId;
     /**
      * @describe 分贝检测器
      */
@@ -77,14 +77,6 @@ public class SoundCompareHelper implements PitchDetectionHandler {
         this.musicalNotePitchMap = musicalNotePitchMap;
     }
 
-    public byte[] getPreDataArray() {
-        return preDataArray;
-    }
-
-    public void setPreDataArray(byte[] preDataArray) {
-        this.preDataArray = preDataArray;
-    }
-
     public int getOffsetTime() {
         return offsetTime;
     }
@@ -117,6 +109,14 @@ public class SoundCompareHelper implements PitchDetectionHandler {
         this.accessFile = accessFile;
     }
 
+    public String getClientId() {
+        return clientId;
+    }
+
+    public void setClientId(String clientId) {
+        this.clientId = clientId;
+    }
+
     public double getMeasureStartTime() {
         return measureStartTime;
     }

+ 11 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/SysMusicCompareRecord.java

@@ -38,6 +38,8 @@ public class SysMusicCompareRecord {
 	
 	/** 创建时间 */
 	private java.util.Date createTime;
+
+	private String clientId;
 	
 	public void setId(Long id){
 		this.id = id;
@@ -54,7 +56,15 @@ public class SysMusicCompareRecord {
 	public Integer getUserId(){
 		return this.userId;
 	}
-			
+
+	public String getClientId() {
+		return clientId;
+	}
+
+	public void setClientId(String clientId) {
+		this.clientId = clientId;
+	}
+
 	public void setSysMusicScoreId(Integer sysMusicScoreId){
 		this.sysMusicScoreId = sysMusicScoreId;
 	}

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

@@ -53,7 +53,7 @@ public class WebSocketHandler extends AbstractWebSocketHandler {
         String phone = session.getPrincipal().getName().split(":")[1];
         LOGGER.info("{}上线", phone);
         WS_CLIENTS.put(phone, new WebSocketClientDetail(session, new Date()));
-        appMap.values().forEach(e->e.afterConnectionEstablished(session));
+        appMap.values().forEach(e->e.afterConnectionEstablished(session, phone));
         super.afterConnectionEstablished(session);
     }
 
@@ -72,15 +72,16 @@ public class WebSocketHandler extends AbstractWebSocketHandler {
             tag = webSocketInfo.getHeader().get(SoundSocketService.TAG);
         }
         if(StringUtils.isNotBlank(tag)){
-            appMap.get(tag).receiveTextMessage(session, message);
+            appMap.get(tag).receiveTextMessage(session, phone, message);
         }else{
-            appMap.values().forEach(e->e.receiveTextMessage(session, message));
+            appMap.values().forEach(e->e.receiveTextMessage(session, phone, message));
         }
     }
 
     @Override
     protected void handleBinaryMessage(WebSocketSession session, BinaryMessage message) {
-        appMap.values().forEach(e->e.receiveBinaryMessage(session, message));
+        String phone = session.getPrincipal().getName().split(":")[1];
+        appMap.values().forEach(e->e.receiveBinaryMessage(session, phone, message));
     }
 
     @Override
@@ -94,7 +95,7 @@ public class WebSocketHandler extends AbstractWebSocketHandler {
         String phone = session.getPrincipal().getName().split(":")[1];
         session.close();
         LOGGER.info("发生了错误,移除客户端: {}", phone);
-        appMap.values().forEach(e->e.afterConnectionClosed(session));
+        appMap.values().forEach(e->e.afterConnectionClosed(session, phone));
         exception.printStackTrace();
         if(!WS_CLIENTS.containsKey(phone)){
             return;
@@ -107,7 +108,7 @@ public class WebSocketHandler extends AbstractWebSocketHandler {
         super.afterConnectionClosed(session, status);
         String phone = session.getPrincipal().getName().split(":")[1];
         LOGGER.info("{}离线", phone);
-        appMap.values().forEach(e->e.afterConnectionClosed(session));
+        appMap.values().forEach(e->e.afterConnectionClosed(session, phone));
         WS_CLIENTS.remove(phone);
     }
 

+ 6 - 4
mec-biz/src/main/java/com/ym/mec/biz/service/WebSocketEventHandler.java

@@ -10,6 +10,8 @@ import org.springframework.web.socket.WebSocketSession;
  **/
 public interface WebSocketEventHandler {
 
+
+
     /**
      * @describe 连接成功
      * @author Joburgess
@@ -17,7 +19,7 @@ public interface WebSocketEventHandler {
      * @param session: 会话信息
      * @return void
      */
-    void afterConnectionEstablished(WebSocketSession session);
+    void afterConnectionEstablished(WebSocketSession session, String phone);
 
     /**
      * @describe 接受到文本信息
@@ -27,7 +29,7 @@ public interface WebSocketEventHandler {
      * @param message: 文本信息
      * @return void
      */
-    void receiveTextMessage(WebSocketSession session, TextMessage message);
+    void receiveTextMessage(WebSocketSession session, String phone, TextMessage message);
 
     /**
      * @describe 接收到二进制数据
@@ -37,7 +39,7 @@ public interface WebSocketEventHandler {
      * @param message: 二进制数据
      * @return void
      */
-    void receiveBinaryMessage(WebSocketSession session, BinaryMessage message);
+    void receiveBinaryMessage(WebSocketSession session, String phone, BinaryMessage message);
 
     /**
      * @describe 连接关闭
@@ -46,6 +48,6 @@ public interface WebSocketEventHandler {
      * @param session: 会话信息
      * @return void
      */
-    void afterConnectionClosed(WebSocketSession session);
+    void afterConnectionClosed(WebSocketSession session, String phone);
 
 }

+ 11 - 14
mec-biz/src/main/java/com/ym/mec/biz/service/impl/SoundCompareHandler.java

@@ -21,6 +21,8 @@ import org.apache.commons.io.FileUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.security.oauth2.provider.OAuth2Authentication;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
 import org.springframework.web.socket.BinaryMessage;
@@ -52,7 +54,7 @@ public class SoundCompareHandler implements WebSocketEventHandler {
 
     private final String tmpDir = FileUtils.getTempDirectoryPath() + "/soundCompare/";
     /**
-     * @describe 用户对应评分信息------------------------------------------------------------------------------
+     * @describe 用户对应评分信息
      */
     private Map<String, SoundCompareHelper> userSoundInfoMap = new ConcurrentHashMap<>();
     /**
@@ -72,13 +74,12 @@ public class SoundCompareHandler implements WebSocketEventHandler {
     }
 
     @Override
-    public void afterConnectionEstablished(WebSocketSession session) {
-        System.out.println("已登录:+++++++++++++++++++++++++++++++++++++++++++++++++++");
+    public void afterConnectionEstablished(WebSocketSession session, String phone) {
+
     }
 
     @Override
-    public void receiveTextMessage(WebSocketSession session, TextMessage message) {
-        String phone = session.getPrincipal().getName().split(":")[1];
+    public void receiveTextMessage(WebSocketSession session, String phone, TextMessage message) {
         WebSocketInfo webSocketInfo = JSON.parseObject(message.getPayload(), WebSocketInfo.class);
         JSONObject bodyObject = (JSONObject) webSocketInfo.getBody();
 
@@ -89,6 +90,7 @@ public class SoundCompareHandler implements WebSocketEventHandler {
         switch (commond){
             case SoundSocketService.MUSIC_XML:
                 userSoundInfoMap.put(phone, new SoundCompareHelper());
+                userSoundInfoMap.get(phone).setClientId(((OAuth2Authentication)session.getPrincipal()).getOAuth2Request().getClientId());
                 List<MusicPitchDetailDto> musicXmlInfos = JSON.parseArray(bodyObject.getString("musicXmlInfos"), MusicPitchDetailDto.class);
                 userSoundInfoMap.get(phone).setMusicXmlInfos(musicXmlInfos);
                 musicXmlInfos = musicXmlInfos.stream().filter(m->!m.getDontEvaluating()).collect(Collectors.toList());
@@ -153,8 +155,7 @@ public class SoundCompareHandler implements WebSocketEventHandler {
     }
 
     @Override
-    public void receiveBinaryMessage(WebSocketSession session, BinaryMessage message) {
-        String phone = session.getPrincipal().getName().split(":")[1];
+    public void receiveBinaryMessage(WebSocketSession session, String phone, BinaryMessage message) {
         if(!userSoundInfoMap.containsKey(phone)){
             return;
         }
@@ -191,9 +192,7 @@ public class SoundCompareHandler implements WebSocketEventHandler {
     }
 
     @Override
-    public void afterConnectionClosed(WebSocketSession session){
-        String phone = session.getPrincipal().getName().split(":")[1];
-        LOGGER.info("发生了错误,移除客户端: {}", phone);
+    public void afterConnectionClosed(WebSocketSession session, String phone){
         createHeader(phone);
         userSoundInfoMap.remove(phone);
     }
@@ -439,7 +438,7 @@ public class SoundCompareHandler implements WebSocketEventHandler {
      * @param phone:
      * @return void
      */
-    private void calTotalScore(String phone) throws IOException {
+    private void calTotalScore(String phone) {
         int totalCompareNum = userSoundInfoMap.get(phone).getMeasureXmlInfoMap().keySet().size();
         int currentCompareNum = totalCompareNum-userSoundInfoMap.get(phone).getMeasureEndTime().keySet().size();
         BigDecimal intonation = BigDecimal.ZERO;
@@ -478,10 +477,8 @@ public class SoundCompareHandler implements WebSocketEventHandler {
         HashMap<String, String> header = new HashMap<>();
         header.put("commond", command);
         webSocketInfo.setHeader(header);
-        Map<String, Object> result = new HashMap<>();
-//        BigDecimal score = intonation.multiply(new BigDecimal(0.5)).add(cadence.multiply(new BigDecimal(0.5))).setScale(0, BigDecimal.ROUND_HALF_UP);
+        Map<String, Object> result = new HashMap<>(5);
         BigDecimal score = intonation.add(cadence).add(integrity).divide(new BigDecimal(3), CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN).setScale(0, BigDecimal.ROUND_UP);
-//        BigDecimal score = integrity.setScale(0, BigDecimal.ROUND_HALF_UP);
         result.put("score", score);
         result.put("intonation", intonation);
         result.put("cadence", cadence);

+ 1 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysMusicCompareRecordServiceImpl.java

@@ -47,6 +47,7 @@ public class SysMusicCompareRecordServiceImpl extends BaseServiceImpl<Long, SysM
 			sysMusicCompareRecord.setIntegrity((BigDecimal) finalScore.get("integrity"));
 		}
 		sysMusicCompareRecord.setRecordFilePath(soundCompareInfo.getRecordFilePath());
+		sysMusicCompareRecord.setClientId(soundCompareInfo.getClientId());
 		sysMusicCompareRecordDao.insert(sysMusicCompareRecord);
 	}
 }

+ 6 - 4
mec-biz/src/main/resources/config/mybatis/SysMusicCompareRecordMapper.xml

@@ -16,6 +16,7 @@
 		<result column="cadence_" property="cadence" />
 		<result column="integrity_" property="integrity" />
 		<result column="record_file_path_" property="recordFilePath" />
+		<result column="client_id_" property="clientId" />
 		<result column="create_time_" property="createTime" />
 	</resultMap>
 
@@ -36,8 +37,9 @@
 		SELECT SEQ_WSDEFINITION_ID.nextval AS ID FROM DUAL 
 		</selectKey>
 		-->
-		INSERT INTO sys_music_compare_record (id_,user_id_,sys_music_score_id_,score_data_,score_,intonation_,cadence_,integrity_,record_file_path_,create_time_)
-		VALUES(#{id},#{userId},#{sysMusicScoreId},#{scoreData},#{score},#{intonation},#{cadence},#{integrity},#{recordFilePath},NOW())
+		INSERT INTO sys_music_compare_record (id_,user_id_,sys_music_score_id_,score_data_,score_,intonation_,cadence_,integrity_,
+		                                      record_file_path_,client_id_,create_time_)
+		VALUES(#{id},#{userId},#{sysMusicScoreId},#{scoreData},#{score},#{intonation},#{cadence},#{integrity},#{recordFilePath},#{clientId},NOW())
 	</insert>
 
 	<!-- 根据主键查询一条记录 -->
@@ -70,8 +72,8 @@
 		<if test="recordFilePath != null">
 			record_file_path_ = #{recordFilePath},
 		</if>
-		<if test="createTime != null">
-			create_time_ = #{createTime},
+		<if test="clientId != null">
+			client_id_ = #{clientId},
 		</if>
 	</set> WHERE id_ = #{id}
 	</update>