Browse Source

Merge branch 'online1' of http://git.dayaedu.com/yonge/mec into sys_coupon

zouxuan 3 years ago
parent
commit
030e3fa24d
34 changed files with 330 additions and 233 deletions
  1. 3 3
      cms/src/main/java/com/ym/mec/cms/controller/NewsController.java
  2. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/config/SoundCompareConfig.java
  3. 10 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/IndexBaseDto.java
  4. 11 2
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/MusicCompareRankingDto.java
  5. 80 27
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/SoundCompareHelper.java
  6. 10 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/IndexBaseMonthData.java
  7. 10 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/Student.java
  8. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/SysMusicScore.java
  9. 11 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/SysMusicScoreAccompaniment.java
  10. 3 3
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/HeardLevelEnum.java
  11. 1 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/IndexDataType.java
  12. 5 1
      mec-biz/src/main/java/com/ym/mec/biz/service/MusicGroupPaymentCalenderDetailService.java
  13. 21 6
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/IndexBaseMonthDataServiceImpl.java
  14. 5 4
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupPaymentCalenderDetailServiceImpl.java
  15. 3 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupPaymentCalenderServiceImpl.java
  16. 12 10
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/PracticeGroupServiceImpl.java
  17. 0 11
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/SoundCheckHandler.java
  18. 67 126
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/SoundCompareHandler.java
  19. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentManageServiceImpl.java
  20. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentPaymentOrderServiceImpl.java
  21. 3 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysMessageServiceImpl.java
  22. 1 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysMusicCompareRecordServiceImpl.java
  23. 4 3
      mec-biz/src/main/resources/config/mybatis/IndexBaseMonthDataMapper.xml
  24. 1 0
      mec-biz/src/main/resources/config/mybatis/StudentMapper.xml
  25. 11 4
      mec-biz/src/main/resources/config/mybatis/SysMusicScoreAccompanimentMapper.xml
  26. 1 1
      mec-biz/src/main/resources/config/mybatis/SysMusicScoreMapper.xml
  27. 5 3
      mec-student/src/main/java/com/ym/mec/student/controller/ImGroupController.java
  28. 5 2
      mec-student/src/main/java/com/ym/mec/student/controller/PracticeGroupController.java
  29. 12 3
      mec-student/src/main/java/com/ym/mec/student/controller/StudentManageController.java
  30. 5 3
      mec-teacher/src/main/java/com/ym/mec/teacher/controller/ImGroupController.java
  31. 5 3
      mec-web/src/main/java/com/ym/mec/web/controller/ImGroupController.java
  32. 17 10
      mec-web/src/main/java/com/ym/mec/web/controller/MusicGroupPaymentCalenderDetailController.java
  33. 2 2
      mec-web/src/main/java/com/ym/mec/web/controller/MusicGroupQuitController.java
  34. 2 2
      mec-websocket/src/main/java/com/ym/mec/web/config/WebSocketConfig.java

+ 3 - 3
cms/src/main/java/com/ym/mec/cms/controller/NewsController.java

@@ -62,7 +62,7 @@ public class NewsController extends BaseController {
 	@Autowired
 	private SysConfigService sysConfigService;
 
-	private final LocalDate xiaMenBannerStartShowTime = LocalDate.parse("2021-10-01", DateUtil.dateFormatter);
+	private final LocalDate xiaMenBannerStartShowTime = LocalDate.parse("2021-10-11", DateUtil.dateFormatter);
 
 	@ApiOperation("资讯列表分页查询")
 	@GetMapping(value = "/list")
@@ -95,7 +95,7 @@ public class NewsController extends BaseController {
 			int memberGroupNum = studentRegistrationDao.countStudentMemberGroupNum(user.getId());
 
 			//厦门学员
-			boolean xiaMenNotShow = user.getOrganId()==40&&LocalDate.now().compareTo(xiaMenBannerStartShowTime)<0;
+			boolean xiaMenNotShow = (user.getOrganId()==40 || user.getOrganId() == 23 || user.getOrganId() == 25)&&LocalDate.now().compareTo(xiaMenBannerStartShowTime)<0;
 			if(memberGroupNum>0||xiaMenNotShow){
 				queryInfo.setExcludeIds(excludeIds);
 			}
@@ -146,7 +146,7 @@ public class NewsController extends BaseController {
 			queryInfo.setOrganId(user.getOrganId());
 			int memberGroupNum = studentRegistrationDao.countStudentMemberGroupNum(user.getId());
 			//厦门学员
-			boolean xiaMenNotShow = user.getOrganId()==40&&LocalDate.now().compareTo(xiaMenBannerStartShowTime)<0;
+			boolean xiaMenNotShow = (user.getOrganId()==40 || user.getOrganId() == 23 || user.getOrganId() == 25)&&LocalDate.now().compareTo(xiaMenBannerStartShowTime)<0;
 			if(memberGroupNum>0||xiaMenNotShow){
 				queryInfo.setExcludeIds(excludeIds);
 			}

+ 1 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/config/SoundCompareConfig.java

@@ -35,7 +35,7 @@ public class SoundCompareConfig {
     /**
      * @describe 有效分贝大小
      */
-    public int validDb = -70;
+    public int validDb = 35;
     /**
      * @describe 有效频率
      */

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

@@ -25,6 +25,16 @@ public class IndexBaseDto {
 
     private List<IndexBaseMonthData> indexMonthData;
 
+    private List<IndexBaseMonthData> indexMonthDataDetail;
+
+    public List<IndexBaseMonthData> getIndexMonthDataDetail() {
+        return indexMonthDataDetail;
+    }
+
+    public void setIndexMonthDataDetail(List<IndexBaseMonthData> indexMonthDataDetail) {
+        this.indexMonthDataDetail = indexMonthDataDetail;
+    }
+
     public IndexBaseDto() {
     }
 

+ 11 - 2
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/MusicCompareRankingDto.java

@@ -2,8 +2,6 @@ package com.ym.mec.biz.dal.dto;
 
 import io.swagger.annotations.ApiModelProperty;
 
-import java.math.BigDecimal;
-
 /**
  * @Author Joburgess
  * @Date 2021/8/11 0011
@@ -45,6 +43,9 @@ public class MusicCompareRankingDto {
 
     @ApiModelProperty("是否是会员")
     private int vipUser;
+    
+    @ApiModelProperty("学生总数")
+    private int studentNum;
 
     public Integer getUserId() {
         return userId;
@@ -141,4 +142,12 @@ public class MusicCompareRankingDto {
     public void setScore(int score) {
         this.score = score;
     }
+
+	public int getStudentNum() {
+		return studentNum;
+	}
+
+	public void setStudentNum(int studentNum) {
+		this.studentNum = studentNum;
+	}
 }

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

@@ -4,6 +4,7 @@ import be.tarsos.dsp.AudioEvent;
 import be.tarsos.dsp.SilenceDetector;
 import be.tarsos.dsp.pitch.PitchDetectionHandler;
 import be.tarsos.dsp.pitch.PitchDetectionResult;
+import com.alibaba.fastjson.JSON;
 import com.ym.mec.biz.dal.enums.DeviceTypeEnum;
 import com.ym.mec.biz.dal.enums.HeardLevelEnum;
 import com.ym.mec.biz.service.impl.SoundCompareHandler;
@@ -17,6 +18,7 @@ import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
  * @Author Joburgess
@@ -62,8 +64,8 @@ public class SoundCompareHelper implements PitchDetectionHandler {
     @ApiModelProperty(value = "小节结束时间字典")
     private Map<Integer, MusicPitchDetailDto> measureEndTime = new HashMap<>();
 
-    @ApiModelProperty(value = "录音音频信息")
-    private List<MusicPitchDetailDto> recordMeasurePithInfo = new ArrayList<>();
+//    @ApiModelProperty(value = "录音音频信息")
+//    private List<MusicPitchDetailDto> recordMeasurePithInfo = new ArrayList<>();
 
     @ApiModelProperty(value = "小节分数记录")
     private Map<String, BigDecimal> userScoreMap = new HashMap<>();
@@ -81,6 +83,10 @@ public class SoundCompareHelper implements PitchDetectionHandler {
 
     private List<MusicPitchDetailDto> musicXmlInfos;
 
+    private long firstMeasureStartBytes = 0;
+
+    private long recordBytes = 0;
+
     private String clientId;
 
     private Integer detailId;
@@ -89,6 +95,15 @@ public class SoundCompareHelper implements PitchDetectionHandler {
 
     private String xmlUrl;
 
+    /** 演奏音频数据中频率变更明显持续数量 */
+    private int obviousChangeNum = 0;
+
+    /** 演奏音频中但前小节所有频率数据 */
+    private List<MusicPitchDetailDto> currPitchInfos = new ArrayList<>();
+    private List<MusicPitchDetailDto> currTmpPitchInfos = new ArrayList<>();
+
+    private List<MusicPitchDetailDto> recordMeasurePitchInfos = new ArrayList<>();
+
     /**
      * @describe 分贝检测器
      */
@@ -262,14 +277,6 @@ public class SoundCompareHelper implements PitchDetectionHandler {
         this.musicalNotesPlayStats = musicalNotesPlayStats;
     }
 
-    public List<MusicPitchDetailDto> getRecordMeasurePithInfo() {
-        return recordMeasurePithInfo;
-    }
-
-    public void setRecordMeasurePithInfo(List<MusicPitchDetailDto> recordMeasurePithInfo) {
-        this.recordMeasurePithInfo = recordMeasurePithInfo;
-    }
-
     public Map<String, BigDecimal> getUserScoreMap() {
         return userScoreMap;
     }
@@ -278,6 +285,22 @@ public class SoundCompareHelper implements PitchDetectionHandler {
         this.userScoreMap = userScoreMap;
     }
 
+    public long getFirstMeasureStartBytes() {
+        return firstMeasureStartBytes;
+    }
+
+    public void setFirstMeasureStartBytes(long firstMeasureStartBytes) {
+        this.firstMeasureStartBytes = firstMeasureStartBytes;
+    }
+
+    public long getRecordBytes() {
+        return recordBytes;
+    }
+
+    public void setRecordBytes(long recordBytes) {
+        this.recordBytes = recordBytes;
+    }
+
     public Map<Integer, Map<String, Object>> getUserMeasureScoreMap() {
         return userMeasureScoreMap;
     }
@@ -286,29 +309,59 @@ public class SoundCompareHelper implements PitchDetectionHandler {
         this.userMeasureScoreMap = userMeasureScoreMap;
     }
 
+    public List<MusicPitchDetailDto> getRecordMeasurePitchInfos() {
+        return recordMeasurePitchInfos;
+    }
+
+    public void setRecordMeasurePitchInfos(List<MusicPitchDetailDto> recordMeasurePitchInfos) {
+        this.recordMeasurePitchInfos = recordMeasurePitchInfos;
+    }
+
     @Override
     public void handlePitch(PitchDetectionResult pitchDetectionResult, AudioEvent audioEvent) {
         int timeStamp = (int) (measureStartTime + audioEvent.getTimeStamp()*1000);
         float pitch = pitchDetectionResult.getPitch();
-        if(offsetTime == -1 && !DeviceTypeEnum.IOS.equals(deviceType) && pitch>0){
-            int preTimeStamp = CollectionUtils.isEmpty(recordMeasurePithInfo)?0:recordMeasurePithInfo.get(recordMeasurePithInfo.size()-1).getTimeStamp();
-            offsetTime = timeStamp - (timeStamp - preTimeStamp)/2;
-            for (MusicPitchDetailDto musicXmlInfo : musicXmlInfos) {
-                if(!musicXmlInfo.getDontEvaluating()){
-                    if(offsetTime > musicXmlInfo.getTimeStamp())
-                        offsetTime = offsetTime - musicXmlInfo.getTimeStamp();
-                    break;
-                }
+        int decibel = (int) (100 - Math.abs(silenceDetector.currentSPL()));
+
+        if(decibel <= SoundCompareHandler.soundCompareConfig.validDb){
+            pitch = -1;
+            decibel = 0;
+        }
+
+        SoundCompareHandler.LOGGER.info("时间:{}, 频率:{}, 分贝:{}", timeStamp, pitch, decibel);
+
+        if(currPitchInfos.size()>0&&(Math.abs(currPitchInfos.get(currPitchInfos.size()-1).getFrequency()-pitch)>10||Math.abs(currPitchInfos.get(currPitchInfos.size()-1).getDecibel()-decibel)>10)){
+            Double avgPitch = currPitchInfos.stream().skip(1).collect(Collectors.averagingDouble(MusicPitchDetailDto::getFrequency));
+            Double avgDb = currPitchInfos.stream().skip(1).collect(Collectors.averagingDouble(MusicPitchDetailDto::getDecibel));
+
+            MusicPitchDetailDto measureDetail = new MusicPitchDetailDto(currPitchInfos.get(0).getTimeStamp(), avgPitch.floatValue(), avgDb);
+            measureDetail.setEndTimeStamp(timeStamp);
+            measureDetail.setDuration(measureDetail.getEndTimeStamp()-measureDetail.getTimeStamp());
+
+            if(measureDetail.getDuration()>25&&(avgPitch>0||avgDb>SoundCompareHandler.soundCompareConfig.validDb)){
+                recordMeasurePitchInfos.add(measureDetail);
             }
-            for (Map.Entry<Integer, MusicPitchDetailDto> musicPitchDetailDtoEntry : measureEndTime.entrySet()) {
-                musicPitchDetailDtoEntry.getValue().setTimeStamp(musicPitchDetailDtoEntry.getValue().getTimeStamp() + offsetTime);
-                musicPitchDetailDtoEntry.getValue().setEndTimeStamp(musicPitchDetailDtoEntry.getValue().getEndTimeStamp() + offsetTime);
+
+            currPitchInfos.clear();
+
+            //初始化偏移时间
+            if(offsetTime == -1 && recordMeasurePitchInfos.size() == 1){
+                offsetTime = recordMeasurePitchInfos.get(0).getTimeStamp();
+                for (MusicPitchDetailDto musicXmlInfo : musicXmlInfos) {
+                    if(!musicXmlInfo.getDontEvaluating()){
+                        if(offsetTime > musicXmlInfo.getTimeStamp()) {
+                            offsetTime = offsetTime - musicXmlInfo.getTimeStamp();
+                        }
+                        break;
+                    }
+                }
+                musicXmlInfos.forEach(e->e.setTimeStamp(e.getTimeStamp()+offsetTime));
+                for (Map.Entry<Integer, MusicPitchDetailDto> musicPitchDetailDtoEntry : measureEndTime.entrySet()) {
+                    musicPitchDetailDtoEntry.getValue().setTimeStamp(musicPitchDetailDtoEntry.getValue().getTimeStamp() + offsetTime);
+                    musicPitchDetailDtoEntry.getValue().setEndTimeStamp(musicPitchDetailDtoEntry.getValue().getEndTimeStamp() + offsetTime);
+                }
             }
         }
-        if(silenceDetector.currentSPL()< SoundCompareHandler.soundCompareConfig.validDb){
-            pitch = -1;
-        }
-//            LOGGER.info("时间:{}, 频率:{}, 分贝:{}", timeStamp, pitch, silenceDetecor.currentSPL());
-        recordMeasurePithInfo.add(new MusicPitchDetailDto(timeStamp, pitch, silenceDetector.currentSPL()));
+        currPitchInfos.add(new MusicPitchDetailDto(timeStamp, pitch, decibel));
     }
 }

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

@@ -37,10 +37,20 @@ public class IndexBaseMonthData {
 
 	private String extendInfo;
 
+	private String orderType;
+
 	private Date createTime;
 
 	private Date updateTime;
 
+	public String getOrderType() {
+		return orderType;
+	}
+
+	public void setOrderType(String orderType) {
+		this.orderType = orderType;
+	}
+
 	public String getMonthStr() {
 		return monthStr;
 	}

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

@@ -76,11 +76,21 @@ public class Student extends SysUser {
 	@ApiModelProperty(value = "活动排课信息")
 	private String activityCourseDetail;
 
+	private Integer countFlag;
+
 	public Student(Integer userId, String subjectIdList) {
 		this.userId = userId;
 		this.subjectIdList = subjectIdList;
 	}
 
+	public Integer getCountFlag() {
+		return countFlag;
+	}
+
+	public void setCountFlag(Integer countFlag) {
+		this.countFlag = countFlag;
+	}
+
 	public Integer getExperienceMemberRankSettingId() {
 		return experienceMemberRankSettingId;
 	}

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

@@ -206,7 +206,7 @@ public class SysMusicScore {
 	public java.util.Date getCreateTime(){
 		return this.createTime;
 	}
-			
+
 	@Override
 	public String toString() {
 		return ToStringBuilder.reflectionToString(this);

+ 11 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/SysMusicScoreAccompaniment.java

@@ -1,6 +1,7 @@
 package com.ym.mec.biz.dal.entity;
 
 import com.ym.mec.biz.dal.enums.ClientTypeEnum;
+
 import org.apache.commons.lang3.builder.ToStringBuilder;
 
 /**
@@ -55,6 +56,8 @@ public class SysMusicScoreAccompaniment {
 
 	//是否显示指法
 	private Boolean isShowFingering = true;
+	
+	private Boolean isOpenMetronome;
 
 	private String memo;
 
@@ -214,6 +217,14 @@ public class SysMusicScoreAccompaniment {
 		return this.updateTime;
 	}
 			
+	public Boolean getIsOpenMetronome() {
+		return isOpenMetronome;
+	}
+
+	public void setIsOpenMetronome(Boolean isOpenMetronome) {
+		this.isOpenMetronome = isOpenMetronome;
+	}
+
 	@Override
 	public String toString() {
 		return ToStringBuilder.reflectionToString(this);

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

@@ -3,9 +3,9 @@ package com.ym.mec.biz.dal.enums;
 import com.ym.mec.common.enums.BaseEnum;
 
 public enum HeardLevelEnum implements BaseEnum<String, HeardLevelEnum> {
-    BEGINNER("BEGINNER","入门级", 9, 0.05f, 0),
-    ADVANCED("ADVANCED","进阶级", 3, 0.09f, 0),
-    PERFORMER("PERFORMER","大师级", 1, 0.3f, 0);
+    BEGINNER("BEGINNER","入门级", 0.1f, 0.7f, 1.5f),
+    ADVANCED("ADVANCED","进阶级", 1, 0.9f, 1.3f),
+    PERFORMER("PERFORMER","大师级", 3, 0.93f, 1.1f);
 
     private String code;
 

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

@@ -49,6 +49,7 @@ public enum IndexDataType implements BaseEnum<String, IndexDataType> {
     VIP_AMOUNT("VIP_AMOUNT","VIP课收入", false, false),
     PRACTICE_AMOUNT("PRACTICE_AMOUNT","网管课收入", false, false),
     OTHER_AMOUNT("OTHER_AMOUNT","其他收入", false, false),
+    OTHER_AMOUNT_DETAIL("OTHER_AMOUNT_DETAIL","其他收入明细", false, false),
 
     //业务数据
     HOMEWORK_CREATE_RATE("HOMEWORK_CREATE_RATE","训练布置率", true, true),

+ 5 - 1
mec-biz/src/main/java/com/ym/mec/biz/service/MusicGroupPaymentCalenderDetailService.java

@@ -1,6 +1,7 @@
 package com.ym.mec.biz.service;
 
 import java.math.BigDecimal;
+import java.util.Date;
 import java.util.List;
 import java.util.Set;
 
@@ -15,6 +16,7 @@ import com.ym.mec.biz.dal.page.ArrearageStudentsQueryInfo;
 import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.page.QueryInfo;
 import com.ym.mec.common.service.BaseService;
+
 import org.apache.ibatis.annotations.Param;
 
 public interface MusicGroupPaymentCalenderDetailService extends BaseService<Long, MusicGroupPaymentCalenderDetail> {
@@ -30,8 +32,10 @@ public interface MusicGroupPaymentCalenderDetailService extends BaseService<Long
     /**
      * 开启缴费
      * @param ids
+     * @param startPaymentDate
+     * @param deadlinePaymentDate
      */
-    String openPayment(String ids);
+    String openPayment(String ids, Date startPaymentDate, Date deadlinePaymentDate);
 
     /**
      * 根据声部获取乐团下完成缴费的学员

+ 21 - 6
mec-biz/src/main/java/com/ym/mec/biz/service/impl/IndexBaseMonthDataServiceImpl.java

@@ -245,7 +245,8 @@ public class IndexBaseMonthDataServiceImpl extends BaseServiceImpl<Long, IndexBa
 
 
 		for (Map.Entry<IndexDataType, List<IndexBaseMonthData>> typeDateMapEntry : typeDateMap.entrySet()) {
-			Set<String> hasMonths = typeDateMapEntry.getValue().stream().map(d -> DateUtil.dateToString(d.getMonth(), "yyyy-MM-dd")).collect(Collectors.toSet());
+			List<IndexBaseMonthData> value = typeDateMapEntry.getValue();
+			Set<String> hasMonths = value.stream().map(d -> DateUtil.dateToString(d.getMonth(), "yyyy-MM-dd")).collect(Collectors.toSet());
 			LocalDate currentMonthDate = startDate;
 			while (currentMonthDate.compareTo(endDate)<=0){
 				if((IndexDataType.HOMEWORK_CREATE_RATE.equals(typeDateMapEntry.getKey())
@@ -265,12 +266,12 @@ public class IndexBaseMonthDataServiceImpl extends BaseServiceImpl<Long, IndexBa
 				indexBaseMonthData.setActivateNum(BigDecimal.ZERO);
 				indexBaseMonthData.setPercent(BigDecimal.ZERO);
 				indexBaseMonthData.setDataType(typeDateMapEntry.getKey());
-				typeDateMapEntry.getValue().add(indexBaseMonthData);
+				value.add(indexBaseMonthData);
 				currentMonthDate = currentMonthDate.plusDays(1);
 			}
-			typeDateMapEntry.getValue().sort(Comparator.comparing(IndexBaseMonthData::getMonth));
+			value.sort(Comparator.comparing(IndexBaseMonthData::getMonth));
 			if(typeDateMapEntry.getKey().getPercent()){
-				for (IndexBaseMonthData indexBaseMonthData : typeDateMapEntry.getValue()) {
+				for (IndexBaseMonthData indexBaseMonthData : value) {
 					if(indexBaseMonthData.getTotalNum().compareTo(BigDecimal.ZERO)==0){
 						indexBaseMonthData.setPercent(BigDecimal.ZERO);
 						continue;
@@ -279,7 +280,21 @@ public class IndexBaseMonthDataServiceImpl extends BaseServiceImpl<Long, IndexBa
 				}
 			}
 			IndexBaseDto indexBaseData = new IndexBaseDto(typeDateMapEntry.getKey(),typeDateMapEntry.getKey().getMsg());
-			indexBaseData.setIndexMonthData(typeDateMapEntry.getValue(), currentMonth);
+			indexBaseData.setIndexMonthData(value, currentMonth);
+			if(OTHER_AMOUNT.equals(typeDateMapEntry.getKey())){
+				List<IndexBaseMonthData> otherAmountDetails = new ArrayList<>();
+				if(value != null && value.size() > 0){
+					Map<String, List<IndexBaseMonthData>> collect = value.stream().filter(c->StringUtils.isNotEmpty(c.getOrderType())).collect(Collectors.groupingBy(e -> e.getOrderType()));
+					collect.keySet().forEach(e->{
+						IndexBaseMonthData data = new IndexBaseMonthData();
+						data.setOrderType(e);
+						BigDecimal reduce = collect.get(e).stream().map(IndexBaseMonthData::getPercent).reduce(BigDecimal.ZERO, BigDecimal::add);
+						data.setPercent(reduce);data.setActivateNum(reduce);data.setTotalNum(reduce);
+						otherAmountDetails.add(data);
+					});
+				}
+				indexBaseData.setIndexMonthDataDetail(otherAmountDetails);
+			}
 			if(FINANCE_PAY.equals(typeDateMapEntry.getKey()) || FINANCE_AMOUNT.equals(typeDateMapEntry.getKey()) ||
 				FINANCE_BALANCE_AMOUNT.equals(typeDateMapEntry.getKey()) ||
 					TOTAL_AMOUNT.equals(typeDateMapEntry.getKey()) ||
@@ -288,7 +303,7 @@ public class IndexBaseMonthDataServiceImpl extends BaseServiceImpl<Long, IndexBa
 					VIP_AMOUNT.equals(typeDateMapEntry.getKey()) ||
 					PRACTICE_AMOUNT.equals(typeDateMapEntry.getKey()) ||
 					OTHER_AMOUNT.equals(typeDateMapEntry.getKey())){
-				indexBaseData.setPercent(typeDateMapEntry.getValue().stream().map(IndexBaseMonthData::getPercent).reduce(BigDecimal.ZERO, BigDecimal::add));
+				indexBaseData.setPercent(value.stream().map(IndexBaseMonthData::getPercent).reduce(BigDecimal.ZERO, BigDecimal::add));
 			}
 			if(IndexDataType.VIP_GROUP_COURSE.equals(typeDateMapEntry.getKey()) || VIP_GROUP_ONLINE_COURSE.equals(typeDateMapEntry.getKey()) ||
 					IndexDataType.VIP_GROUP_OFFLINE_COURSE.equals(typeDateMapEntry.getKey())){

+ 5 - 4
mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupPaymentCalenderDetailServiceImpl.java

@@ -23,8 +23,8 @@ import com.ym.mec.common.constant.CommonConstants;
 import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.page.QueryInfo;
 import com.ym.mec.biz.dal.enums.YesOrNoEnum;
-
 import com.ym.mec.util.date.DateUtil;
+
 import org.apache.commons.lang3.StringUtils;
 import org.apache.poi.ss.formula.functions.T;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -232,7 +232,7 @@ public class MusicGroupPaymentCalenderDetailServiceImpl extends BaseServiceImpl<
 
 	@Override
 	@Transactional(rollbackFor = Exception.class)
-	public String openPayment(String ids) {
+	public String openPayment(String ids, Date startPaymentDate, Date deadlinePaymentDate) {
 		if(StringUtils.isEmpty(ids)){
 			throw new BizException("参数校验失败");
 		}
@@ -243,13 +243,14 @@ public class MusicGroupPaymentCalenderDetailServiceImpl extends BaseServiceImpl<
 		}
 		int length = ids.split(",").length;
 		Date date = new Date();
+		
 		Long calenderId = calenderDetails.get(0).getMusicGroupPaymentCalenderId();
 		MusicGroupPaymentCalender calender = musicGroupPaymentCalenderService.get(calenderId);
 		calenderDetails.forEach(e->{
 			e.setUpdateTime(date);
 			e.setOpen(1);
-			e.setStartPaymentDate(date);
-			e.setDeadlinePaymentDate(date);
+			e.setStartPaymentDate(startPaymentDate);
+			e.setDeadlinePaymentDate(deadlinePaymentDate);
 		});
 		musicGroupPaymentCalenderDetailDao.batchUpdate(calenderDetails);
 		Set<Integer> studentIds = calenderDetails.stream().map(e -> e.getUserId()).collect(Collectors.toSet());

+ 3 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupPaymentCalenderServiceImpl.java

@@ -1184,6 +1184,9 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
 		calenderAuditDetailDto.setAuditDto(auditDto);
 		//获取缴费周期
 		List<MusicGroupPaymentCalender> groupPaymentCalenders = musicGroupPaymentCalenderDao.findByBatchNo(batchNo);
+		if(groupPaymentCalenders == null || groupPaymentCalenders.size() == 0){
+			throw new BizException("缴费项目异常,请联系管理员");
+		}
 		calenderAuditDetailDto.setMusicGroupPaymentCalenders(groupPaymentCalenders);
 		MusicGroupPaymentCalender paymentCalender = groupPaymentCalenders.get(0);
 		if(paymentCalender.getMemberRankSettingId() != null){

+ 12 - 10
mec-biz/src/main/java/com/ym/mec/biz/service/impl/PracticeGroupServiceImpl.java

@@ -3844,17 +3844,19 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
         for (PracticeCourseDto userPracticeGroup : userPracticeGroups) {
             JSONArray coursesArry = new JSONArray();
             JSONObject courseJson = JSON.parseObject(userPracticeGroup.getDrillTimesJson());
-            for (String weekNumStr : courseJson.keySet()) {
-                JSONObject newCourseJson = new JSONObject();
-                newCourseJson.put("weekName", DateUtil.weekNumNormalWeekNameMap.get(Integer.parseInt(weekNumStr)));
-                LocalTime courseStartTime = LocalTime.parse(courseJson.getString(weekNumStr), DateUtil.timeFormatter);
-                LocalTime courseEndTime = courseStartTime.plusMinutes(practiceCourseMinutes);
-                if(PracticeGroupType.COME_ON_PACKAGE.equals(userPracticeGroup.getType())){
-                    courseEndTime = courseStartTime.plusMinutes(2*practiceCourseMinutes);
+            if(courseJson != null){
+                for (String weekNumStr : courseJson.keySet()) {
+                    JSONObject newCourseJson = new JSONObject();
+                    newCourseJson.put("weekName", DateUtil.weekNumNormalWeekNameMap.get(Integer.parseInt(weekNumStr)));
+                    LocalTime courseStartTime = LocalTime.parse(courseJson.getString(weekNumStr), DateUtil.timeFormatter);
+                    LocalTime courseEndTime = courseStartTime.plusMinutes(practiceCourseMinutes);
+                    if(PracticeGroupType.COME_ON_PACKAGE.equals(userPracticeGroup.getType())){
+                        courseEndTime = courseStartTime.plusMinutes(2*practiceCourseMinutes);
+                    }
+                    newCourseJson.put("startTime", courseStartTime.format(DateUtil.timeFormatter));
+                    newCourseJson.put("endTime", courseEndTime.format(DateUtil.timeFormatter));
+                    coursesArry.add(newCourseJson);
                 }
-                newCourseJson.put("startTime", courseStartTime.format(DateUtil.timeFormatter));
-                newCourseJson.put("endTime", courseEndTime.format(DateUtil.timeFormatter));
-                coursesArry.add(newCourseJson);
             }
             userPracticeGroup.setDrillTimesJson(coursesArry.toJSONString());
         }

+ 0 - 11
mec-biz/src/main/java/com/ym/mec/biz/service/impl/SoundCheckHandler.java

@@ -1,36 +1,25 @@
 package com.ym.mec.biz.service.impl;
 
 import be.tarsos.dsp.AudioDispatcher;
-import be.tarsos.dsp.AudioEvent;
 import be.tarsos.dsp.io.jvm.AudioDispatcherFactory;
-import be.tarsos.dsp.pitch.PitchDetectionHandler;
-import be.tarsos.dsp.pitch.PitchDetectionResult;
 import be.tarsos.dsp.pitch.PitchProcessor;
 import be.tarsos.dsp.util.PitchConverter;
-import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
-import com.ym.mec.biz.dal.dto.MusicPitchDetailDto;
 import com.ym.mec.biz.dal.dto.SoundCheckHelper;
-import com.ym.mec.biz.dal.dto.SoundCheckInfoDto;
 import com.ym.mec.biz.dal.dto.WebSocketInfo;
 import com.ym.mec.biz.dal.enums.WebsocketTypeEnum;
 import com.ym.mec.biz.handler.WebSocketHandler;
 import com.ym.mec.biz.service.SoundSocketService;
 import com.ym.mec.biz.service.WebSocketEventHandler;
 import com.ym.mec.common.exception.BizException;
-import org.omg.PortableInterceptor.SYSTEM_EXCEPTION;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Service;
 import org.springframework.web.socket.BinaryMessage;
-import org.springframework.web.socket.TextMessage;
 import org.springframework.web.socket.WebSocketSession;
 
 import javax.sound.sampled.UnsupportedAudioFileException;
-import java.io.File;
-import java.io.IOException;
 import java.util.Map;
-import java.util.Objects;
 import java.util.concurrent.ConcurrentHashMap;
 
 /**

+ 67 - 126
mec-biz/src/main/java/com/ym/mec/biz/service/impl/SoundCompareHandler.java

@@ -6,6 +6,7 @@ import be.tarsos.dsp.pitch.PitchProcessor;
 import be.tarsos.dsp.util.PitchConverter;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
+import com.alibaba.fastjson.serializer.SerializerFeature;
 import com.ym.mec.biz.dal.config.SoundCompareConfig;
 import com.ym.mec.biz.dal.dao.SysMusicScoreAccompanimentDao;
 import com.ym.mec.biz.dal.dto.*;
@@ -31,7 +32,6 @@ import org.springframework.web.socket.WebSocketSession;
 
 import javax.sound.sampled.UnsupportedAudioFileException;
 import java.io.File;
-import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.io.RandomAccessFile;
 import java.math.BigDecimal;
@@ -50,7 +50,7 @@ import static com.ym.mec.biz.service.SoundSocketService.VIDEO_UPDATE;
 @Service
 public class SoundCompareHandler implements WebSocketEventHandler {
 
-    private final Logger LOGGER = LoggerFactory.getLogger(SoundCompareHandler.class);
+    public static final Logger LOGGER = LoggerFactory.getLogger(SoundCompareHandler.class);
 
     private BigDecimal oneHundred = new BigDecimal(100);
 
@@ -99,6 +99,9 @@ public class SoundCompareHandler implements WebSocketEventHandler {
                 userSoundInfoMap.get(phone).setMusicXmlInfos(musicXmlInfos);
                 musicXmlInfos = musicXmlInfos.stream().filter(m->!m.getDontEvaluating()).collect(Collectors.toList());
                 userSoundInfoMap.get(phone).setMusicScoreId(bodyObject.getInteger("id"));
+                if(bodyObject.containsKey("beatLength")){
+                    userSoundInfoMap.get(phone).setFirstMeasureStartBytes((long) (bodyObject.getLong("beatLength")/1000f*(soundCompareConfig.audioFormat.getFrameSize()*soundCompareConfig.audioFormat.getFrameRate())));
+                }
                 if(bodyObject.containsKey("platform")){
                     userSoundInfoMap.get(phone).setDeviceType(DeviceTypeEnum.valueOf(bodyObject.getString("platform")));
                 }
@@ -148,8 +151,9 @@ public class SoundCompareHandler implements WebSocketEventHandler {
                     File file = new File(tmpDir+phone + "_"+ userSoundInfoMap.get(phone).getMusicScoreId() +"_"+ LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) +".wav");
                     userSoundInfoMap.get(phone).setFile(file);
                     userSoundInfoMap.get(phone).setAccessFile(new RandomAccessFile(file, "rw"));
+                    userSoundInfoMap.get(phone).getAccessFile().seek(44);
                     userSoundInfoMap.get(phone).setRecordFilePath(file.getAbsolutePath());
-                } catch (FileNotFoundException e) {
+                } catch (IOException e) {
                     throw new BizException("文件创建失败:", e);
                 }
                 break;
@@ -178,10 +182,10 @@ public class SoundCompareHandler implements WebSocketEventHandler {
                 createHeader(phone, false);
                 break;
             case SoundSocketService.PROXY_MESSAGE:
-                if(DeviceTypeEnum.IOS.equals(userSoundInfoMap.get(phone).getDeviceType())&&bodyObject.containsKey(SoundSocketService.OFFSET_TIME)){
-                    int offsetTime = bodyObject.getIntValue(SoundSocketService.OFFSET_TIME);
-                    calOffsetTime(phone, offsetTime);
-                }
+//                if(DeviceTypeEnum.IOS.equals(userSoundInfoMap.get(phone).getDeviceType())&&bodyObject.containsKey(SoundSocketService.OFFSET_TIME)){
+//                    int offsetTime = bodyObject.getIntValue(SoundSocketService.OFFSET_TIME);
+//                    calOffsetTime(phone, offsetTime);
+//                }
                 break;
             case VIDEO_UPDATE:
                 SysMusicCompareRecord update = null;
@@ -207,24 +211,27 @@ public class SoundCompareHandler implements WebSocketEventHandler {
         if(!userSoundInfoMap.containsKey(phone)){
             return;
         }
+        userSoundInfoMap.get(phone).setRecordBytes(userSoundInfoMap.get(phone).getRecordBytes()+message.getPayloadLength());
+        if(userSoundInfoMap.get(phone).getRecordBytes()<userSoundInfoMap.get(phone).getFirstMeasureStartBytes()){
+            return;
+        }
         try {
             if(Objects.nonNull(userSoundInfoMap.get(phone).getAccessFile())){
                 userSoundInfoMap.get(phone).getAccessFile().write(message.getPayload().array());
+            }else{
+                return;
             }
 
             AudioDispatcher dispatcher = AudioDispatcherFactory.fromByteArray(message.getPayload().array(), soundCompareConfig.audioFormat, soundCompareConfig.simpleSize, soundCompareConfig.overlap);
-
             dispatcher.addAudioProcessor(userSoundInfoMap.get(phone).silenceDetector);
             dispatcher.addAudioProcessor(new PitchProcessor(soundCompareConfig.algo, soundCompareConfig.simpleRate, soundCompareConfig.simpleSize, userSoundInfoMap.get(phone)));
             dispatcher.run();
-            if(Objects.isNull(userSoundInfoMap.get(phone).getAccessFile())){
-                return;
-            }
 
             double recordTime = userSoundInfoMap.get(phone).getAccessFile().length()/(soundCompareConfig.audioFormat.getFrameSize()*soundCompareConfig.audioFormat.getFrameRate())*1000;
             userSoundInfoMap.get(phone).setMeasureStartTime(recordTime);
+
             for (Map.Entry<Integer, MusicPitchDetailDto> userMeasureEndTimeMapEntry : userSoundInfoMap.get(phone).getMeasureEndTime().entrySet()) {
-                if(recordTime>(userMeasureEndTimeMapEntry.getValue().getEndTimeStamp())){
+                if(recordTime>(userMeasureEndTimeMapEntry.getValue().getEndTimeStamp()+100)){
                     if(userMeasureEndTimeMapEntry.getValue().getDontEvaluating()){
                         continue;
                     }else{
@@ -261,6 +268,7 @@ public class SoundCompareHandler implements WebSocketEventHandler {
             musicPitchDetailDtoEntry.getValue().setTimeStamp(musicPitchDetailDtoEntry.getValue().getTimeStamp() + offsetTime);
             musicPitchDetailDtoEntry.getValue().setEndTimeStamp(musicPitchDetailDtoEntry.getValue().getEndTimeStamp() + offsetTime);
         }
+        userSoundInfoMap.get(phone).getMusicXmlInfos().forEach(e->e.setTimeStamp(e.getTimeStamp()+offsetTime));
     }
 
     /**
@@ -347,111 +355,32 @@ public class SoundCompareHandler implements WebSocketEventHandler {
             for (int i = 0; i < userSoundInfoMap.get(phone).getMeasureXmlInfoMap().get(measureIndex).size(); i++) {
                 MusicPitchDetailDto musicXmlInfo = userSoundInfoMap.get(phone).getMeasureXmlInfoMap().get(measureIndex).get(i);
 
-                int ot5 = (int) (musicXmlInfo.getDuration()*0.1);
-                int startTimeStamp = musicXmlInfo.getTimeStamp() + userSoundInfoMap.get(phone).getOffsetTime() + ot5;
-                int endTimeStamp = musicXmlInfo.getTimeStamp()  + userSoundInfoMap.get(phone).getOffsetTime() + musicXmlInfo.getDuration() - ot5;
-
-                //时间范围内有效节奏数量
-                float cadenceValidNum = 0;
-                //时间范围内有效音频数量
-                float integrityValidNum = 0;
-                //时间范围内匹配次数
-                float compareNum = 0;
+                int startTimeStamp = musicXmlInfo.getTimeStamp();
+                int endTimeStamp = musicXmlInfo.getTimeStamp() + musicXmlInfo.getDuration();
 
-                List<MusicPitchDetailDto> measureSoundPitchInfos = new ArrayList<>();
+                int ot5 = (int) (musicXmlInfo.getDuration()*0.22<70?70:musicXmlInfo.getDuration()*0.22);
+                int rightTimeRange = ot5>200?200:ot5;
 
-                for (int j = 0; j < userSoundInfoMap.get(phone).getRecordMeasurePithInfo().size(); j++) {
-                    MusicPitchDetailDto recordInfo = userSoundInfoMap.get(phone).getRecordMeasurePithInfo().get(j);
-                    //如果在时间范围之外直接跳过
-                    if(recordInfo.getTimeStamp()<startTimeStamp||recordInfo.getTimeStamp()>endTimeStamp){
-                        continue;
-                    }
-                    measureSoundPitchInfos.add(recordInfo);
-                    compareNum++;
-                    //如果在最低有效频率以下则跳过
-                    if(recordInfo.getFrequency()<soundCompareConfig.validFrequency&&musicXmlInfo.getFrequency()!=-1){
-                        continue;
-                    }
-                    cadenceValidNum++;
-                    //如果频率差值在节奏误差范围内
-//                    if(Math.abs(recordInfo.getFrequency()-musicXmlInfo.getFrequency())<=soundCompareConfig.integrityFrequencyRange){
-//                        integrityValidNum++;
-//                    }
-                }
-
-                //非正常频率次数
-                int errPitchNum = 0;
-                //分贝变化次数
-                int decibelChangeNum = 0;
-
-                if(CollectionUtils.isEmpty(measureSoundPitchInfos)){
-                    userSoundInfoMap.get(phone).getMusicalNotePitchMap().put(musicXmlInfo.getMusicalNotesIndex(), (float) 0);
-                }else{
-                    Map<Integer, Long> collect = measureSoundPitchInfos.stream().map(pitch -> (int)pitch.getFrequency()).collect(Collectors.groupingBy(Integer::intValue, Collectors.counting()));
-                    //出现次数最多的频率
-                    Integer pitch = collect.entrySet().stream().max(Comparator.comparing(e -> e.getValue())).get().getKey();
-                    //当前频率
-                    double cf = -1;
-                    //频率持续数量
-                    int fnum = 0;
-                    //是否演奏中
-                    boolean ing = false;
-                    //当前分贝
-                    double cd = 0;
-                    //分贝变化方向,-1变小,1变大
-                    int dcd = -1;
-                    //分贝持续数量
-                    int dnum = 0;
-                    for (MusicPitchDetailDto musicalNotesPitch : measureSoundPitchInfos) {
-                        //计算频率断层次数
-                        if (Math.abs(musicalNotesPitch.getFrequency() - cf) > 20){
-                            fnum ++;
-                        }
-                        if (fnum>=5){
-                            cf = musicalNotesPitch.getFrequency();
-                            fnum = 0;
-                            if (cf != -1){
-                                errPitchNum ++;
-                                ing = true;
-                                cd = musicalNotesPitch.getDecibel();
-                            }
-                        }
-                        //计算声音大小断层册数
-                        if(ing && Math.abs(musicalNotesPitch.getDecibel() - cd) > 10){
-                            dnum ++;
-                        }
-                        if (dnum > 2){
-                            int tdcd = cd > musicalNotesPitch.getDecibel() ? -1 : 1;
-                            cd = musicalNotesPitch.getDecibel();
-                            dnum = 0;
-                            if (tdcd != dcd) {
-                                decibelChangeNum++;
-                            }
-                            dcd = tdcd;
-                        }
-                    }
-                    userSoundInfoMap.get(phone).getMusicalNotePitchMap().put(musicXmlInfo.getMusicalNotesIndex(), (float) pitch);
-                }
+                List<MusicPitchDetailDto> recordPitchs = userSoundInfoMap.get(phone).getRecordMeasurePitchInfos().stream().filter(m -> m.getTimeStamp()>=startTimeStamp-rightTimeRange && m.getTimeStamp() < endTimeStamp-rightTimeRange).collect(Collectors.toList());
 
                 boolean cadenceRight = false;
                 boolean intonationRight = false;
                 boolean integrityRight = false;
 
-                //有效节奏占比
-                float cadenceDuty = cadenceValidNum/compareNum;
-                //如果频率出现断层或这个音量出现断层,则当前音符节奏无效
-                if(errPitchNum>=2 || decibelChangeNum>1){
-                    cadenceDuty = 0;
+                float integrityDuty = 0;
+                if(recordPitchs.size()>0){
+                    integrityDuty = recordPitchs.get(0).getDuration()/(float)musicXmlInfo.getDuration();
                 }
+                integrityDuty = scoreMapping(integrityDuty, userSoundInfoMap.get(phone).getHeardLevel().getIntegrityRange(), 1);
                 //节奏
-                if(cadenceDuty>=userSoundInfoMap.get(phone).getHeardLevel().getCadenceRange()){
+                if(recordPitchs.size()==1){
                     cadenceNum++;
                     cadenceRight = true;
                 }
                 //音准、完成度
-                if (cadenceRight && !CollectionUtils.isEmpty(measureSoundPitchInfos)){
+                if (cadenceRight){
                     //音准
-                    Double avgPitch = measureSoundPitchInfos.stream().filter(pitch -> Math.abs((pitch.getFrequency()-musicXmlInfo.getFrequency()))<15).collect(Collectors.averagingDouble(pitch -> pitch.getFrequency()));
+                    float avgPitch = recordPitchs.get(0).getFrequency();
                     //音分
                     double recordCents = 0;
                     if (avgPitch > 0){
@@ -461,29 +390,40 @@ public class SoundCompareHandler implements WebSocketEventHandler {
                     if(musicXmlInfo.getFrequency()>0){
                         cents =  PitchConverter.hertzToAbsoluteCent(musicXmlInfo.getFrequency());
                     }
-                    double score = 100 - Math.round(Math.abs(cents - recordCents)) + userSoundInfoMap.get(phone).getHeardLevel().getIntonationCentsRange();
+                    double score = 100 - Math.round(Math.abs(cents - recordCents)) + 3;
                     if (score < 0){
                         score = 0;
                     }else if(score > 100){
                         score = 100;
                     }
+
+                    score = Math.pow(score/100f, userSoundInfoMap.get(phone).getHeardLevel().getIntonationCentsRange())*100;
+
+                    if(Objects.nonNull(userSoundInfoMap.get(phone).getSubjectId())&&userSoundInfoMap.get(phone).getSubjectId()==23){
+                        score = 100;
+                        integrityDuty = 1;
+                    }
+
                     intonationScore += score;
-                    musicXmlInfo.setAvgFrequency(avgPitch.floatValue());
+                    musicXmlInfo.setAvgFrequency(avgPitch);
                     intonationRight = score>70;
 
-                    if(score>0){
-                        integrityValidNum = measureSoundPitchInfos.stream().filter(pitch -> Math.abs((pitch.getFrequency()-musicXmlInfo.getFrequency()))<15).count();
-                    }else{
-                        integrityValidNum = 0;
-                    }
+                    integrityScore += integrityDuty;
+                    integrityRight = integrityDuty>0.7;
                 }
-                //完成度
-                if(integrityValidNum > compareNum){
-                    integrityValidNum = compareNum;
+
+                //如果当前音符不需要演奏
+                if (musicXmlInfo.getFrequency()<0&&recordPitchs.size()<=0){
+                    cadenceNum++;
+                    cadenceRight = true;
+
+                    intonationScore += 100;
+                    musicXmlInfo.setAvgFrequency(-1);
+                    intonationRight = true;
+
+                    integrityScore += 1;
+                    integrityRight = true;
                 }
-                float integrityDuty = integrityValidNum/compareNum;
-                integrityScore += integrityDuty;
-                integrityRight = integrityDuty>0.7;
 
                 if(!cadenceRight){
                     userSoundInfoMap.get(phone).getMusicalNotesPlayStats().add(new MusicalNotesPlayStatDto(musicXmlInfo.getMusicalNotesIndex(), MusicalErrorTypeEnum.CADENCE_WRONG));
@@ -528,6 +468,11 @@ public class SoundCompareHandler implements WebSocketEventHandler {
         createPushInfo(phone, "measureScore", measureIndex, intonation, cadence, integrity);
     }
 
+    private float scoreMapping(float score, float divisor, float maxValue){
+        score = score*divisor;
+        return score>maxValue?maxValue:score;
+    }
+
     /**
      * @describe 计算最终评分
      * @author Joburgess
@@ -543,15 +488,15 @@ public class SoundCompareHandler implements WebSocketEventHandler {
         BigDecimal integrity = BigDecimal.ZERO;
 
         if(currentCompareNum>0){
-            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 = userSoundInfoMap.get(phone).getUserScoreMap().get("integrity").divide(new BigDecimal(currentCompareNum), 0, BigDecimal.ROUND_DOWN);
+            intonation = userSoundInfoMap.get(phone).getUserScoreMap().get("intonation").divide(new BigDecimal(currentCompareNum), 0, BigDecimal.ROUND_UP);
+            cadence = userSoundInfoMap.get(phone).getUserScoreMap().get("cadence").divide(new BigDecimal(currentCompareNum), 0, BigDecimal.ROUND_UP);
+            integrity = userSoundInfoMap.get(phone).getUserScoreMap().get("integrity").divide(new BigDecimal(currentCompareNum), 0, BigDecimal.ROUND_UP);
         }
 
         //计算分数并推送
         createPushInfo(phone, "overall", -1, intonation, cadence, integrity);
 
-        LOGGER.info("评分数据:{}", JSON.toJSONString(userSoundInfoMap.get(phone)));
+        LOGGER.info("评分数据:{}", JSON.toJSONString(userSoundInfoMap.get(phone), SerializerFeature.DisableCircularReferenceDetect));
     }
 
     /**
@@ -570,12 +515,8 @@ public class SoundCompareHandler implements WebSocketEventHandler {
         WebSocketInfo webSocketInfo = new WebSocketInfo();
         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){
-            score = intonation.add(cadence).add(integrity).divide(new BigDecimal(3), CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN).setScale(0, BigDecimal.ROUND_UP);
-        }
+        BigDecimal score  = intonation.add(cadence).add(integrity).divide(new BigDecimal(3), CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN).setScale(0, BigDecimal.ROUND_UP);
+
         result.put("score", score);
         result.put("intonation", intonation);
         result.put("cadence", cadence);

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

@@ -719,7 +719,7 @@ public class StudentManageServiceImpl implements StudentManageService {
             studentExtracurricularExercisesSituationDao.deleteByStudent(student.getId(), monDayDate.toString());
         }
         webFeignService.updateNickName(userId,student.getUsername());
-        imFeignService.update(new ImUserModel(userId.toString(),student.getUsername(),sysUser1.getAvatar()));
+        imFeignService.update(new ImUserModel(userId.toString(),student.getUsername(),sysUser1 == null ? null:sysUser1.getAvatar()));
         return userId;
     }
 

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

@@ -311,7 +311,7 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
             if (status.equals("succeeded")) {
                 rpMap.put("tradeState", "1");
             }
-            if (status.equals("failed")) {
+            if (status.equals("failed") || (DateUtil.minutesBetween(DateUtil.addHours(payingOrder.getUpdateTime(), 2), date) > 0)) {
                 rpMap.put("tradeState", "0");
             }
 

+ 3 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysMessageServiceImpl.java

@@ -176,6 +176,9 @@ public class SysMessageServiceImpl extends BaseServiceImpl<Long, SysMessage> imp
 
 	@Override
 	public boolean batchSeoMessage(Set<Integer> userIds, MessageTypeEnum messageType,String memo, Object... args) {
+		if(userIds != null){
+			userIds.removeAll(Collections.singleton(null));
+		}
 		if (userIds == null || userIds.size() == 0) {
 			throw new BizException("接收地址不能为空");
 		}

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

@@ -184,6 +184,7 @@ public class SysMusicCompareRecordServiceImpl extends BaseServiceImpl<Long, SysM
 				head = userTrainStat.get(i);
 			}
 		}
+		head.setStudentNum(studentDao.countStudentsWithOrgan(null));
 		result.setHead(head);
 		detail.sort(Comparator.comparing(MusicCompareRankingDto::getRankNum).thenComparing(MusicCompareRankingDto::getUserId));
 		result.setDetail(detail);

+ 4 - 3
mec-biz/src/main/resources/config/mybatis/IndexBaseMonthDataMapper.xml

@@ -16,6 +16,7 @@
 		<result column="percent_" property="percent" />
 		<result column="data_type_" property="dataType" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
 		<result column="extend_info_" property="extendInfo"/>
+		<result column="order_type_" property="orderType"/>
 		<result column="create_time_" property="createTime" />
 		<result column="update_time_" property="updateTime" />
 	</resultMap>
@@ -1440,10 +1441,10 @@
 	</select>
 
 	<select id="getOtherAmountDataWithTimelyDetails" resultMap="IndexBaseMonthData">
-		SELECT organ_id_,SUM(c.total_num_) total_num_,SUM(c.total_num_) activate_num_,SUM(c.total_num_) percent_,month_ FROM (
+		SELECT organ_id_,SUM(c.total_num_) total_num_,SUM(c.total_num_) activate_num_,SUM(c.total_num_) percent_,month_,c.type_ order_type_ FROM (
 		SELECT spo.organ_id_,SUM(CASE WHEN spo.actual_amount_ IS NULL THEN 0 ELSE spo.actual_amount_ END +
 							   CASE WHEN spo.balance_payment_amount_ IS NULL THEN 0 ELSE spo.balance_payment_amount_ END) total_num_
-		   ,DATE_FORMAT(spo.pay_time_,'%Y-%m-%d') month_
+		   ,DATE_FORMAT(spo.pay_time_,'%Y-%m-%d') month_,spo.type_
 		FROM student_payment_order spo
 		WHERE spo.status_ = 'SUCCESS' AND DATE_FORMAT(spo.pay_time_,'%Y-%m-%d') BETWEEN #{startDate} AND #{endDate}
 		AND spo.type_ NOT IN ('APPLY','RENEW','PRACTICE_GROUP_BUY','PRACTICE_GROUP_RENEW','SMALL_CLASS_TO_BUY','DEGREE')
@@ -1455,7 +1456,7 @@
 		</if>
 		GROUP BY DATE_FORMAT(spo.pay_time_,'%Y-%m-%d')
 		UNION ALL
-		SELECT spo.organ_id_,SUM(CASE WHEN spod.price_ IS NULL THEN 0 ELSE spod.price_ END) total_num_,DATE_FORMAT(spo.pay_time_,'%Y-%m-%d') month_
+		SELECT spo.organ_id_,SUM(CASE WHEN spod.price_ IS NULL THEN 0 ELSE spod.price_ END) total_num_,DATE_FORMAT(spo.pay_time_,'%Y-%m-%d') month_,spo.type_
 		FROM student_payment_order spo
 			   LEFT JOIN student_payment_order_detail spod ON spo.id_ = spod.payment_order_id_
 		WHERE spo.status_ = 'SUCCESS' AND DATE_FORMAT(spo.pay_time_,'%Y-%m-%d') BETWEEN #{startDate} AND #{endDate}

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

@@ -32,6 +32,7 @@
         <result column="organ_name_" property="organName"/>
         <result column="phone_" property="phone"/>
         <result column="username_" property="username"/>
+        <result column="count_flag_" property="countFlag"/>
     </resultMap>
 
     <!-- 根据主键查询一条记录 -->

+ 11 - 4
mec-biz/src/main/resources/config/mybatis/SysMusicScoreAccompanimentMapper.xml

@@ -23,6 +23,7 @@
 		<result column="create_time_" property="createTime" />
 		<result column="update_time_" property="updateTime" />
 		<result column="is_show_fingering_" property="isShowFingering" />
+		<result column="is_open_metronome_" property="isOpenMetronome" />
 		<result column="memo_" property="memo" />
 		<result column="rank_ids_" property="rankIds" />
 		<result column="client_type_" property="clientType" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
@@ -48,16 +49,16 @@
 	
 	<!-- 向数据库增加一条记录 -->
 	<insert id="insert" parameterType="com.ym.mec.biz.dal.entity.SysMusicScoreAccompaniment" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
-		INSERT INTO sys_music_score_accompaniment (exam_song_id_,subject_id_,mp3_url_,speed_,xml_url_,create_time_,update_time_)
-		VALUES(#{examSongId},#{subjectId},#{mp3Url},#{speed},#{xmlUrl},NOW(),NOW())
+		INSERT INTO sys_music_score_accompaniment (exam_song_id_,subject_id_,mp3_url_,speed_,xml_url_,create_time_,update_time_,is_open_metronome_)
+		VALUES(#{examSongId},#{subjectId},#{mp3Url},#{speed},#{xmlUrl},NOW(),NOW(),#{isOpenMetronome})
 	</insert>
     <insert id="batchInsert">
 		INSERT INTO sys_music_score_accompaniment (exam_song_id_,subject_id_,mp3_url_,speed_,xml_url_,
-		                                           create_time_,update_time_,is_show_fingering_,memo_)
+		                                           create_time_,update_time_,is_show_fingering_,memo_,is_open_metronome_)
 		VALUES
 		<foreach collection="sysMusicScoreAccompaniments" item="item"  separator=",">
 			(#{sysMusicScoreId},#{item.subjectId},#{item.mp3Url},#{item.speed},
-			 #{item.xmlUrl},NOW(),NOW(),#{item.isShowFingering},#{item.memo})
+			 #{item.xmlUrl},NOW(),NOW(),#{item.isShowFingering},#{item.memo},#{item.isOpenMetronome})
 		</foreach>
 	</insert>
 
@@ -68,6 +69,9 @@
 		<if test="isShowFingering != null">
 			is_show_fingering_ = #{isShowFingering},
 		</if>
+		<if test="isOpenMetronome != null">
+			is_open_metronome_ = #{isOpenMetronome},
+		</if>
 		<if test="memo != null">
 			memo_ = #{memo},
 		</if>
@@ -93,6 +97,9 @@
 				<if test="item.isShowFingering != null">
 					is_show_fingering_ = #{item.isShowFingering},
 				</if>
+				<if test="item.isOpenMetronome != null">
+					is_open_metronome_ = #{item.isOpenMetronome},
+				</if>
 				<if test="item.memo != null">
 					memo_ = #{item.memo},
 				</if>

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

@@ -96,7 +96,7 @@
 		LEFT JOIN sys_music_score_categories smsc ON smsc.id_ = ses.music_score_categories_id_
 		<include refid="queryPageSql"/>
 		GROUP BY ses.id_
-		ORDER BY ses.order_,ses.name_
+		ORDER BY ses.music_score_categories_id_ desc,ses.order_ asc,ses.create_time_ desc
 		<include refid="global.limit"/>
 	</select>
 	

+ 5 - 3
mec-student/src/main/java/com/ym/mec/student/controller/ImGroupController.java

@@ -50,9 +50,11 @@ public class ImGroupController extends BaseController {
 
 	@ApiOperation("查询群详情")
 	@GetMapping(value = "/queryGroupDetail")
-	public Object queryGroupList(Long imGroupId) {
-
-		return succeed(imGroupService.get(imGroupId));
+	public Object queryGroupDetail(String imGroupId) {
+		if (imGroupId.contains("S") || imGroupId.contains("I")){
+			imGroupId = imGroupId.substring(1);
+		}
+		return succeed(imGroupService.get(Long.parseLong(imGroupId)));
 	}
 
 	@ApiOperation("查询群成员列表")

+ 5 - 2
mec-student/src/main/java/com/ym/mec/student/controller/PracticeGroupController.java

@@ -232,14 +232,17 @@ public class PracticeGroupController extends BaseController {
         }
         int studentExitChargePractices = practiceGroupDao.checkStudentExitChargePractice(sysUser.getId(),"2021-03-09 00:00:00");
         Student student = studentDao.get(sysUser.getId());
+        if(student == null){
+            throw new BizException("学员信息不存在");
+        }
         Map<String, Integer> result=new HashMap<>();
         result.put("organId", sysUser.getOrganId());
         result.put("isNewStudent", studentExitChargePractices<=0?0:1);
 
         List<PracticeGroup> userStatusPracticeGroups = practiceGroupDao.findUserStatusPracticeGroups(sysUser.getId(), null, PracticeGroupType.COME_ON_PACKAGE);
         long normalGroupNum = userStatusPracticeGroups.stream().filter(p -> GroupStatusEnum.NORMAL.equals(p.getGroupStatus())).count();
-
-        result.put("comeOnPackage", 1==student.getComeOnPackage()&&normalGroupNum<=0?1:0);
+        int comeOnPackage = student.getComeOnPackage()==null?0:student.getComeOnPackage();
+        result.put("comeOnPackage", 1==comeOnPackage&&normalGroupNum<=0?1:0);
         return succeed(result);
     }
 

+ 12 - 3
mec-student/src/main/java/com/ym/mec/student/controller/StudentManageController.java

@@ -1,12 +1,14 @@
 package com.ym.mec.student.controller;
 
-import com.ym.mec.biz.dal.enums.SuggestionType;
-import com.ym.mec.util.date.DateUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
 
-import java.util.*;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
 
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
@@ -26,6 +28,7 @@ import com.ym.mec.biz.dal.dto.CashAccountDetail;
 import com.ym.mec.biz.dal.entity.AppVersionInfo;
 import com.ym.mec.biz.dal.entity.MemberRankSetting;
 import com.ym.mec.biz.dal.entity.Student;
+import com.ym.mec.biz.dal.entity.Subject;
 import com.ym.mec.biz.dal.entity.SysConfig;
 import com.ym.mec.biz.dal.entity.SysSuggestion;
 import com.ym.mec.biz.dal.entity.SysUserBankCard;
@@ -49,6 +52,7 @@ import com.ym.mec.common.entity.HttpResponseResult;
 import com.ym.mec.common.entity.UploadReturnBean;
 import com.ym.mec.common.filters.TenantIdThreadLocal;
 import com.ym.mec.common.page.QueryInfo;
+import com.ym.mec.util.date.DateUtil;
 import com.ym.mec.util.upload.UploadUtil;
 
 @Api(tags = "学生管理")
@@ -147,6 +151,11 @@ public class StudentManageController extends BaseController {
 		student.setRealName(user.getRealName());
 		student.setIdCardNo(user.getIdCardNo());
 		student.setImToken(user.getImToken());
+		
+		if(StringUtils.isNotBlank(student.getSubjectIdList())){
+			List<Subject> subjectList = subjectService.findBySubjectByIdList(student.getSubjectIdList());
+			student.setSubjectNames(subjectList.stream().map(t -> t.getName()).collect(Collectors.joining(",")));
+		}
 
 		Map<String, Object> datas = new HashMap<String, Object>();
 		datas.put("student", student);

+ 5 - 3
mec-teacher/src/main/java/com/ym/mec/teacher/controller/ImGroupController.java

@@ -52,9 +52,11 @@ public class ImGroupController extends BaseController {
 
 	@ApiOperation("查询群详情")
 	@GetMapping(value = "/queryGroupDetail")
-	public Object queryGroupList(Long imGroupId) {
-
-		return succeed(imGroupService.get(imGroupId));
+	public Object queryGroupDetail(String imGroupId) {
+		if (imGroupId.contains("S") || imGroupId.contains("I")){
+			imGroupId = imGroupId.substring(1);
+		}
+		return succeed(imGroupService.get(Long.parseLong(imGroupId)));
 	}
 
 	@ApiOperation("查询群成员列表")

+ 5 - 3
mec-web/src/main/java/com/ym/mec/web/controller/ImGroupController.java

@@ -65,9 +65,11 @@ public class ImGroupController extends BaseController {
 
 	@ApiOperation("查询群详情")
 	@GetMapping(value = "/queryGroupDetail")
-	public Object queryGroupList(Long imGroupId) {
-
-		return succeed(imGroupService.get(imGroupId));
+	public Object queryGroupDetail(String imGroupId) {
+		if (imGroupId.contains("S") || imGroupId.contains("I")){
+			imGroupId = imGroupId.substring(1);
+		}
+		return succeed(imGroupService.get(Long.parseLong(imGroupId)));
 	}
 
 	@ApiOperation("修改群信息")

+ 17 - 10
mec-web/src/main/java/com/ym/mec/web/controller/MusicGroupPaymentCalenderDetailController.java

@@ -1,18 +1,13 @@
 package com.ym.mec.web.controller;
 
-import com.ym.mec.auth.api.client.SysUserFeignService;
-import com.ym.mec.auth.api.entity.SysUser;
-import com.ym.mec.biz.dal.dto.MusicArrearageStudentDto;
-import com.ym.mec.biz.dal.entity.Employee;
-import com.ym.mec.biz.dal.entity.MusicGroup;
-import com.ym.mec.biz.dal.page.ArrearageStudentsQueryInfo;
-import com.ym.mec.biz.service.EmployeeService;
-import com.ym.mec.common.page.PageInfo;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
+
 import java.math.BigDecimal;
 import java.util.Arrays;
+import java.util.Date;
 import java.util.List;
+
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
@@ -21,11 +16,20 @@ import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
+
+import com.ym.mec.auth.api.client.SysUserFeignService;
+import com.ym.mec.auth.api.entity.SysUser;
+import com.ym.mec.biz.dal.dto.MusicArrearageStudentDto;
 import com.ym.mec.biz.dal.dto.MusicGroupPaymentCalenderAddStudentDto;
+import com.ym.mec.biz.dal.entity.Employee;
+import com.ym.mec.biz.dal.entity.MusicGroup;
+import com.ym.mec.biz.dal.page.ArrearageStudentsQueryInfo;
 import com.ym.mec.biz.dal.page.MusicCalenderDetailQueryInfo;
+import com.ym.mec.biz.service.EmployeeService;
 import com.ym.mec.biz.service.MusicGroupPaymentCalenderDetailService;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.entity.HttpResponseResult;
+import com.ym.mec.common.page.PageInfo;
 
 @RequestMapping("musicGroupPaymentCalenderDetail")
 @Api(tags = "乐团缴费明细")
@@ -86,9 +90,12 @@ public class MusicGroupPaymentCalenderDetailController extends BaseController {
     @ApiOperation(value = "开启缴费")
     @PostMapping("/openPayment")
     @PreAuthorize("@pcs.hasPermissions('musicGroupPaymentCalenderDetail/openPayment')")
-    public HttpResponseResult openPayment(String ids) {
+    public HttpResponseResult openPayment(String ids, Date startPaymentDate, Date deadlinePaymentDate) {
         HttpResponseResult<Object> succeed = succeed();
-        succeed.setMsg(musicGroupPaymentCalenderDetailService.openPayment(ids));
+        Date date = new Date();
+        startPaymentDate = startPaymentDate == null ? date : startPaymentDate;
+		deadlinePaymentDate = deadlinePaymentDate == null ? date : deadlinePaymentDate;
+        succeed.setMsg(musicGroupPaymentCalenderDetailService.openPayment(ids, startPaymentDate, deadlinePaymentDate));
         return succeed;
     }
 

+ 2 - 2
mec-web/src/main/java/com/ym/mec/web/controller/MusicGroupQuitController.java

@@ -100,13 +100,13 @@ public class MusicGroupQuitController extends BaseController {
                 return failed("非法请求");
             }
         }
-		if (sysUser.getIsSuperAdmin() == false) {
+		/*if (sysUser.getIsSuperAdmin() == false) {
 			List<Integer> userRole = employeeService.queryUserRole(sysUser.getId());
 			// 如果当前用户只有教务老师角色,那么只能看到他所管理的课程组的信息
 			if (userRole.contains(SysUserRole.EDUCATIONAL_TEACHER) && !userRole.contains(SysUserRole.SECTION_MANAGER)) {
 				queryInfo.setEducationUserId(sysUser.getId());
 			}
-		}
+		}*/
         PageInfo<MusicGroupQuit> musicGroupQuitPageInfo = musicGroupQuitService.queryPage(queryInfo);
         List<MusicGroupQuit> rows = musicGroupQuitPageInfo.getRows();
         if (rows != null && rows.size() > 0) {

+ 2 - 2
mec-websocket/src/main/java/com/ym/mec/web/config/WebSocketConfig.java

@@ -33,8 +33,8 @@ public class WebSocketConfig implements WebSocketConfigurer {
     @Bean
     public ServletServerContainerFactoryBean createWebSocketContainer() {
         ServletServerContainerFactoryBean container = new ServletServerContainerFactoryBean();
-        container.setMaxTextMessageBufferSize(8192*4);
-        container.setMaxBinaryMessageBufferSize(8192*4);
+        container.setMaxTextMessageBufferSize(8192*9);
+        container.setMaxBinaryMessageBufferSize(8192*9);
         return container;
     }