|  | @@ -194,6 +194,13 @@ public class WebSocketHandler extends AbstractWebSocketHandler {
 | 
	
		
			
				|  |  |          return super.supportsPartialMessages();
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +    /**
 | 
	
		
			
				|  |  | +     * @describe 保存录音数据,并生成wav头信息
 | 
	
		
			
				|  |  | +     * @author Joburgess
 | 
	
		
			
				|  |  | +     * @date 2021/6/25 0025
 | 
	
		
			
				|  |  | +     * @param phone:
 | 
	
		
			
				|  |  | +     * @return void
 | 
	
		
			
				|  |  | +     */
 | 
	
		
			
				|  |  |      private void createHeader(String phone) throws IOException {
 | 
	
		
			
				|  |  |          if(!userSoundInfoMap.containsKey(phone)){
 | 
	
		
			
				|  |  |              return;
 | 
	
	
		
			
				|  | @@ -211,6 +218,14 @@ public class WebSocketHandler extends AbstractWebSocketHandler {
 | 
	
		
			
				|  |  |          userSoundInfoMap.remove(phone);
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +    /**
 | 
	
		
			
				|  |  | +     * @describe 数据比对,生成分数
 | 
	
		
			
				|  |  | +     * @author Joburgess
 | 
	
		
			
				|  |  | +     * @date 2021/6/25 0025
 | 
	
		
			
				|  |  | +     * @param phone:
 | 
	
		
			
				|  |  | +     * @param measureIndex:
 | 
	
		
			
				|  |  | +     * @return void
 | 
	
		
			
				|  |  | +     */
 | 
	
		
			
				|  |  |      private void measureCompare(String phone, int measureIndex) throws IOException {
 | 
	
		
			
				|  |  |          //总分
 | 
	
		
			
				|  |  |          BigDecimal score = BigDecimal.ZERO;
 | 
	
	
		
			
				|  | @@ -242,7 +257,7 @@ public class WebSocketHandler extends AbstractWebSocketHandler {
 | 
	
		
			
				|  |  |              //节奏匹配误差范围
 | 
	
		
			
				|  |  |              float cadenceErrRange = 100;
 | 
	
		
			
				|  |  |              //节奏有效阈值
 | 
	
		
			
				|  |  | -            float cadenceValidDuty = 0.7f;
 | 
	
		
			
				|  |  | +            float cadenceValidDuty = 0.5f;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |              int totalCompareNum = userSoundInfoMap.get(phone).getMeasureXmlInfoMap().get(measureIndex).size();
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -332,16 +347,24 @@ public class WebSocketHandler extends AbstractWebSocketHandler {
 | 
	
		
			
				|  |  |          WS_CLIENTS.get(phone).sendMessage(new TextMessage(JSON.toJSONString(createPushInfo("measureScore", measureIndex, intonation, cadence, integrity))));
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +    /**
 | 
	
		
			
				|  |  | +     * @describe 计算最终评分
 | 
	
		
			
				|  |  | +     * @author Joburgess
 | 
	
		
			
				|  |  | +     * @date 2021/6/25 0025
 | 
	
		
			
				|  |  | +     * @param phone:
 | 
	
		
			
				|  |  | +     * @return void
 | 
	
		
			
				|  |  | +     */
 | 
	
		
			
				|  |  |      private void calTotalScore(String phone) throws IOException {
 | 
	
		
			
				|  |  | -        int totalCompareNum = userSoundInfoMap.get(phone).getMeasureXmlInfoMap().keySet().size()-userSoundInfoMap.get(phone).getMeasureEndTime().keySet().size();
 | 
	
		
			
				|  |  | +        int totalCompareNum = userSoundInfoMap.get(phone).getMeasureXmlInfoMap().keySet().size();
 | 
	
		
			
				|  |  | +        int currentCompareNum = totalCompareNum-userSoundInfoMap.get(phone).getMeasureEndTime().keySet().size();
 | 
	
		
			
				|  |  |          BigDecimal intonation = BigDecimal.ZERO;
 | 
	
		
			
				|  |  |          BigDecimal cadence = BigDecimal.ZERO;
 | 
	
		
			
				|  |  |          BigDecimal integrity = BigDecimal.ZERO;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          if(totalCompareNum>0){
 | 
	
		
			
				|  |  | -            intonation = userSoundInfoMap.get(phone).getUserScoreMap().get("intonation").divide(new BigDecimal(totalCompareNum), 0, BigDecimal.ROUND_DOWN);
 | 
	
		
			
				|  |  | -            cadence = userSoundInfoMap.get(phone).getUserScoreMap().get("cadence").divide(new BigDecimal(totalCompareNum), 0, BigDecimal.ROUND_DOWN);
 | 
	
		
			
				|  |  | -            integrity = userSoundInfoMap.get(phone).getUserScoreMap().get("integrity").divide(new BigDecimal(totalCompareNum), 0, BigDecimal.ROUND_DOWN);
 | 
	
		
			
				|  |  | +            intonation = userSoundInfoMap.get(phone).getUserScoreMap().get("intonation").divide(new BigDecimal(currentCompareNum), 0, BigDecimal.ROUND_DOWN);
 | 
	
		
			
				|  |  | +            cadence = userSoundInfoMap.get(phone).getUserScoreMap().get("cadence").divide(new BigDecimal(currentCompareNum), 0, BigDecimal.ROUND_DOWN);
 | 
	
		
			
				|  |  | +            integrity = new BigDecimal(currentCompareNum).divide(new BigDecimal(totalCompareNum), CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN).multiply(oneHundred).setScale(0, BigDecimal.ROUND_DOWN);
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          WS_CLIENTS.get(phone).sendMessage(new TextMessage(JSON.toJSONString(createPushInfo("overall", -1, intonation, cadence, integrity))));
 | 
	
	
		
			
				|  | @@ -350,11 +373,22 @@ public class WebSocketHandler extends AbstractWebSocketHandler {
 | 
	
		
			
				|  |  |          sysMusicCompareRecordService.saveMusicCompareData(phone, userSoundInfoMap.get(phone).getMusicScoreId(), userSoundInfoMap.get(phone).getUserMeasureScoreMap());
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    private WebSocketInfo createPushInfo(String commond, Integer measureIndex,
 | 
	
		
			
				|  |  | +    /**
 | 
	
		
			
				|  |  | +     * @describe 生成评分结果
 | 
	
		
			
				|  |  | +     * @author Joburgess
 | 
	
		
			
				|  |  | +     * @date 2021/6/25 0025
 | 
	
		
			
				|  |  | +     * @param command:
 | 
	
		
			
				|  |  | +     * @param measureIndex:
 | 
	
		
			
				|  |  | +     * @param intonation:
 | 
	
		
			
				|  |  | +     * @param cadence:
 | 
	
		
			
				|  |  | +     * @param integrity:
 | 
	
		
			
				|  |  | +     * @return com.ym.mec.biz.dal.dto.WebSocketInfo
 | 
	
		
			
				|  |  | +     */
 | 
	
		
			
				|  |  | +    private WebSocketInfo createPushInfo(String command, Integer measureIndex,
 | 
	
		
			
				|  |  |                                           BigDecimal intonation, BigDecimal cadence, BigDecimal integrity){
 | 
	
		
			
				|  |  |          WebSocketInfo webSocketInfo = new WebSocketInfo();
 | 
	
		
			
				|  |  |          HashMap<String, String> header = new HashMap<>();
 | 
	
		
			
				|  |  | -        header.put("commond", commond);
 | 
	
		
			
				|  |  | +        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);
 |