Selaa lähdekoodia

Merge branch 'saas' of http://git.dayaedu.com/yonge/mec into feature/1020-tencent-im

zouxuan 1 vuosi sitten
vanhempi
commit
901076ce20
75 muutettua tiedostoa jossa 1398 lisäystä ja 962 poistoa
  1. 4 4
      audio-analysis/src/main/java/com/yonge/netty/dto/ChunkAnalysis.java
  2. 1 1
      audio-analysis/src/main/java/com/yonge/netty/dto/HardLevelEnum.java
  3. 73 58
      audio-analysis/src/main/java/com/yonge/netty/dto/UserChannelContext.java
  4. 4 4
      audio-analysis/src/main/java/com/yonge/netty/server/service/AudioCompareHandler.java
  5. 1 1
      cms/src/main/java/com/ym/mec/cms/dal/dao/SysNewsInformationDao.java
  6. 18 7
      cms/src/main/java/com/ym/mec/cms/service/impl/SysNewsTypeServiceImpl.java
  7. 3 0
      cms/src/main/resources/config/mybatis/SysNewsInformationMapper.xml
  8. 3 1
      mec-application/src/main/java/com/ym/mec/student/controller/CloudStudyController.java
  9. 2 2
      mec-application/src/main/java/com/ym/mec/student/controller/PracticeGroupController.java
  10. 1 1
      mec-application/src/main/java/com/ym/mec/student/controller/SmsCodeController.java
  11. 12 30
      mec-application/src/main/java/com/ym/mec/student/controller/SysMessageController.java
  12. 2 1
      mec-application/src/main/java/com/ym/mec/student/controller/SysMusicCompareRecordController.java
  13. 0 4
      mec-application/src/main/java/com/ym/mec/teacher/controller/ImGroupMemberController.java
  14. 1 1
      mec-application/src/main/java/com/ym/mec/teacher/controller/SmsCodeController.java
  15. 3 3
      mec-application/src/main/java/com/ym/mec/teacher/controller/SysMessageController.java
  16. 15 0
      mec-application/src/main/java/com/ym/mec/vo/PageUtil.java
  17. 1 1
      mec-application/src/main/java/com/ym/mec/web/controller/ClassGroupController.java
  18. 0 4
      mec-application/src/main/java/com/ym/mec/web/controller/ImGroupMemberController.java
  19. 4 4
      mec-application/src/main/java/com/ym/mec/web/controller/ReplacementInstrumentActivityController.java
  20. 61 39
      mec-application/src/main/java/com/ym/mec/web/controller/SchoolMessageController.java
  21. 1 1
      mec-application/src/main/java/com/ym/mec/web/controller/SmsCodeController.java
  22. 72 33
      mec-application/src/main/java/com/ym/mec/web/controller/SysMessageController.java
  23. 0 4
      mec-application/src/main/java/com/ym/mec/web/controller/education/EduImGroupMemberController.java
  24. 12 33
      mec-application/src/main/java/com/ym/mec/web/controller/education/SysEduMessageController.java
  25. 104 0
      mec-auth/mec-auth-api/src/main/java/com/ym/mec/auth/api/entity/SysConfig.java
  26. 24 0
      mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/dal/dao/SysConfigDao.java
  27. 9 0
      mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/service/impl/CbsQrCodeScanServiceImpl.java
  28. 21 0
      mec-auth/mec-auth-server/src/main/resources/config/mybatis/SysConfigMapper.xml
  29. 38 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/ImGroupMemberDto.java
  30. 3 30
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/ImGroupMemberPlus.java
  31. 3 3
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/SysMessage.java
  32. 2 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/SysMusicCompareRecord.java
  33. 13 4
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/EFriendRoleType.java
  34. 24 12
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/MessageTypeEnum.java
  35. 8 5
      mec-biz/src/main/java/com/ym/mec/biz/dal/wrapper/ImGroupMemberWrapper.java
  36. 70 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/wrapper/SysMessageWrapper.java
  37. 2 1
      mec-biz/src/main/java/com/ym/mec/biz/event/listener/SendSeoMessageListener.java
  38. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/ClassGroupService.java
  39. 4 0
      mec-biz/src/main/java/com/ym/mec/biz/service/ImGroupMemberService.java
  40. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/SmsCodeService.java
  41. 23 46
      mec-biz/src/main/java/com/ym/mec/biz/service/SysMessageService.java
  42. 2 1
      mec-biz/src/main/java/com/ym/mec/biz/service/SysMusicCompareRecordService.java
  43. 76 29
      mec-biz/src/main/java/com/ym/mec/biz/service/im/impl/ImGroupCoreServiceImpl.java
  44. 46 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CbsUserServiceImpl.java
  45. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ChildrenDayReserveServiceImpl.java
  46. 10 7
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupServiceImpl.java
  47. 6 6
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/EduPracticeGroupServiceImpl.java
  48. 9 2
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/EmployeeServiceImpl.java
  49. 3 2
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/GoodsServiceImpl.java
  50. 61 26
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ImGroupMemberServiceImpl.java
  51. 66 56
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ImGroupServiceImpl.java
  52. 4 4
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupSchoolTermCourseDetailServiceImpl.java
  53. 2 2
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupServiceImpl.java
  54. 8 8
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/PracticeGroupServiceImpl.java
  55. 5 5
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ReplacementInstrumentActivityServiceImpl.java
  56. 2 2
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ReplacementInstrumentCooperationServiceImpl.java
  57. 5 4
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/SmsCodeServiceImpl.java
  58. 5 2
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/SoundCompareHandler.java
  59. 4 4
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/SporadicChargeInfoImpl.java
  60. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentInstrumentServiceImpl.java
  61. 2 2
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentRegistrationServiceImpl.java
  62. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentRepairServiceImpl.java
  63. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentServiceImpl.java
  64. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/SubjectChangeServiceImpl.java
  65. 348 387
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysMessageServiceImpl.java
  66. 3 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysMusicCompareRecordServiceImpl.java
  67. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysUserCashAccountServiceImpl.java
  68. 35 14
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysUserServiceImpl.java
  69. 2 2
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupServiceImpl.java
  70. 20 13
      mec-biz/src/main/resources/config/mybatis/ImGroupMemberMapper.xml
  71. 4 2
      mec-biz/src/main/resources/config/mybatis/ImGroupMemberPlusMapper.xml
  72. 5 4
      mec-biz/src/main/resources/config/mybatis/LessonExaminationMapper.xml
  73. 3 1
      mec-biz/src/main/resources/config/mybatis/StudentCourseHomeworkMapper.xml
  74. 12 4
      mec-biz/src/main/resources/config/mybatis/SysMusicCompareRecordMapper.xml
  75. 0 25
      mec-thirdparty/src/main/java/com/ym/mec/thirdparty/message/MessageSenderPluginContext.java

+ 4 - 4
audio-analysis/src/main/java/com/yonge/netty/dto/ChunkAnalysis.java

@@ -12,13 +12,13 @@ public class ChunkAnalysis {
 
 	private int splDb;
 
-	private int power;
+	private float power;
 	
 	private int amplitude;
 	
 	private boolean isPeak;
 
-	public ChunkAnalysis(double startTime, double endTime, int frequency, int splDb, int power, int amplitude) {
+	public ChunkAnalysis(double startTime, double endTime, int frequency, int splDb, float power, int amplitude) {
 		this.startTime = startTime;
 		this.endTime = endTime;
 		this.frequency = frequency;
@@ -74,11 +74,11 @@ public class ChunkAnalysis {
 		this.splDb = splDb;
 	}
 
-	public int getPower() {
+	public float getPower() {
 		return power;
 	}
 
-	public void setPower(int power) {
+	public void setPower(float power) {
 		this.power = power;
 	}
 

+ 1 - 1
audio-analysis/src/main/java/com/yonge/netty/dto/HardLevelEnum.java

@@ -9,7 +9,7 @@ public enum HardLevelEnum implements BaseEnum<String, HardLevelEnum> {
 	 * 完成度范围, 未演奏的范围
 	 */
 	//BEGINNER("入门级", 3, 5, 5, 5, 10, 10, 13, 15, 60, 10), 
-	BEGINNER("入门级", 3, 5, 10, 10, 15, 15, 22, 22, 75, 25), 
+	BEGINNER("入门级", 3, 5, 10, 10, 15, 15, 22, 22, 75, 10), 
 	/**
 	 * 进阶级, 振幅阈值, 频率阈值 <br>
 	 * 节奏有效范围(1分音符), 节奏有效范围(2分音符), 节奏有效范围(4分音符), 节奏有效范围(8分音符), 节奏有效范围(16分音符), 节奏有效范围(32分音符)<br>

+ 73 - 58
audio-analysis/src/main/java/com/yonge/netty/dto/UserChannelContext.java

@@ -346,8 +346,10 @@ public class UserChannelContext {
 		}
 		
 		int splDb = (int) Signals.soundPressureLevel(samples);
-		int power = (int) Signals.power(samples);
-		int amplitude = 0;
+		float power = Signals.power(samples);
+		int amplitude = (int) Signals.norm(samples);
+		
+		int decibels = (int) Signals.decibels(samples);
 		if(StringUtils.equalsIgnoreCase(evaluationCriteria, EvaluationCriteriaEnum.AMPLITUDE.getCode())) {
 			amplitude = (int) Signals.norm(samples);
 		}else if(StringUtils.equalsIgnoreCase(evaluationCriteria, EvaluationCriteriaEnum.DECIBELS.getCode())){
@@ -377,7 +379,7 @@ public class UserChannelContext {
 		
 		if (noteAnalysis.getMusicalNotesIndex() >= 0 && noteAnalysis.getMusicalNotesIndex() <= getTotalMusicNoteIndex(null)) {
 			
-			LOGGER.debug("user:{}  delayProcessed:{}  dynamicOffset:{}  Frequency:{}  splDb:{}  amplitude:{}  time:{}", user, delayProcessed, dynamicOffset, playFrequency, splDb, amplitude, playTime);
+			LOGGER.debug("user:{}  delayProcessed:{}  dynamicOffset:{}  Frequency:{}  splDb:{}  power:{}  amplitude:{} decibels:{}  time:{}", user, delayProcessed, dynamicOffset, playFrequency, splDb, power, amplitude, decibels, playTime);
 			
 			ChunkAnalysis chunkAnalysis = new ChunkAnalysis(playTime - durationTime, playTime, playFrequency, splDb, power, amplitude);
 			
@@ -792,66 +794,56 @@ public class UserChannelContext {
 			totalTimes = chunkList.size();
 		}
 		
+		/**
 		if (maxTimes * 100 / totalTimes < hardLevel.getIntegrityRange()) {
-			tempo = false;
 			LOGGER.debug("节奏错误原因:信号分堆后的最大数量不足指定的完成比例");
-		}
-		
-		/**
-		for (int i = 0; i < chunkList.size(); i++) {
-			chunkAnalysis = chunkList.get(i);
-			if (chunkAnalysis != null) {
-				if (chunkAnalysis.getFrequency() > MIN_FREQUECY) {
-					
-					tempo = true;
-					if (firstPeakIndex == -1) {
-						firstPeakIndex = i;
-						noteFrequencyRange = new NoteFrequencyRange(standardFrequecy, chunkAnalysis.getFrequency());
-					} else if (noteFrequencyRange.getMinFrequency() > chunkAnalysis.getFrequency()
-							|| chunkAnalysis.getFrequency() > noteFrequencyRange.getMaxFrequency()) {// 判断是否是同一个音
-						//是否是低八度或高八度
-						if(!((noteFrequencyRange.getMinFrequency() < chunkAnalysis.getFrequency() * 2 && chunkAnalysis.getFrequency() * 2 < noteFrequencyRange.getMaxFrequency())
-								|| (noteFrequencyRange.getMinFrequency() < chunkAnalysis.getFrequency() / 2 && chunkAnalysis.getFrequency() / 2 < noteFrequencyRange.getMaxFrequency()))){
-							tempo = false;
-							LOGGER.debug("节奏错误原因:不是同一个音[{}]:{}-{}", chunkAnalysis.getFrequency(), noteFrequencyRange.getMinFrequency(), noteFrequencyRange.getMaxFrequency());
-							break;
-						}
-					}
-					if (isContinue == false) {
-						if ((i + 1) / chunkAnalysisList.size() < hardLevel.getIntegrityRange()) {
-							if (unplayedSize > 0) {
-								tempo = false;
-								LOGGER.debug("节奏错误原因:信号不连续");
-								break;
-							}
-						}
-					}
-				} else {
-					if (tempo == true) {
-						isContinue = false;
-						unplayedSize++;
-					}
-				}
-			}
+			return false;
 		}
 		*/
 		
-		if (tempo) {
-			// 判断进入时间点
-			if(firstPeakIndex * 100 /chunkList.size() > hardLevel.getTempoEffectiveRange(musicXmlNote.getDenominator(), musicXmlNote.getDuration())){
-				tempo = false;
-				LOGGER.debug("节奏错误原因:进入时间点太晚");
-			}else{
-				//判断是否与上一个音延续下来的
+		// 判断进入时间点
+		if(firstPeakIndex * 100 /chunkList.size() > hardLevel.getTempoEffectiveRange(musicXmlNote.getDenominator(), musicXmlNote.getDuration())){
+			LOGGER.debug("节奏错误原因:进入时间点太晚");
+			return false;
+		}else{
+			//判断是否与上一个音延续下来的
+			if(correctedStartTime == musicXmlNote.getTimeStamp() + dynamicOffset) {
 				if(firstChunkAnalysis.getFrequency() > MIN_FREQUECY && lastChunkAnalysis.getFrequency() > MIN_FREQUECY){
 					tempo = new NoteFrequencyRange(standardFrequecy, firstChunkAnalysis.getFrequency()).equals(new NoteFrequencyRange(standardFrequecy, lastChunkAnalysis.getFrequency())) == false;
 					if(tempo == false){
 						LOGGER.debug("节奏错误原因:上一个音[{}]延续下来导致的", lastChunkAnalysis.getFrequency());
+						return false;
 					}
 				}
 			}
 		}
 		
+		//判断过程中声音是否有起伏
+		float minValue = 0;
+		int depth = 0;
+		
+		for (int i = 1; i < chunkList.size(); i++) {
+			
+			if(i == 1) {
+				minValue = chunkList.get(i - 1).getSplDb();
+			}
+			if (Math.abs(minValue - chunkList.get(i).getSplDb()) >= 6) {
+				LOGGER.debug("范围内查询到音波信号,correctedStartTime:{}", chunkList.get(i).getStartTime());
+				break;
+			}
+			
+			minValue = Math.min(minValue , chunkList.get(i).getSplDb());
+			
+			/**
+			if (depth >= 2 && Math.max(chunkList.get(i - 1).getPower(), chunkList.get(i).getPower()) / Math.min(chunkList.get(i - 1).getPower(), chunkList.get(i).getPower()) >= 2) {
+				tempo = false;
+				depth++;
+				LOGGER.debug("节奏错误原因:声波不稳定[{}]", chunkList.get(i).getEndTime());
+				break;
+			}
+			*/
+		}
+		
 		return tempo;
 	}
 	
@@ -999,17 +991,38 @@ public class UserChannelContext {
 			}
 		}
 		
+		double startTime = 0;
+		float minValue = 0;
+		for (int i = 1; i < chunkAnalysisList.size(); i++) {
+			
+			if(i == 1) {
+				minValue = chunkAnalysisList.get(i - 1).getSplDb();
+			}
+			if (Math.abs(minValue - chunkAnalysisList.get(i).getSplDb()) >= 6) {
+				LOGGER.debug("范围内查询到音波信号,correctedStartTime:{}", chunkAnalysisList.get(i).getStartTime());
+				startTime = chunkAnalysisList.get(i).getStartTime();
+				break;
+			}
+			
+			minValue = Math.min(minValue , chunkAnalysisList.get(i).getSplDb());
+			
+			/**
+			if (Math.max(chunkAnalysisList.get(i - 1).getPower(), chunkAnalysisList.get(i).getPower()) / Math.min(chunkAnalysisList.get(i - 1).getPower(), chunkAnalysisList.get(i).getPower()) >= 2) {
+				LOGGER.debug("范围内查询到音波信号,correctedStartTime:{}", chunkAnalysisList.get(i).getStartTime());
+				startTime = chunkAnalysisList.get(i).getStartTime();
+				break;
+			}
+			*/
+		}
+		
 		//判断是否与上一个音是同一个音符
 		if(musicXmlNote.getMusicalNotesIndex() > 0){
 			MusicXmlNote preMusicXmlNote = getCurrentMusicNote(null, musicXmlNote.getMusicalNotesIndex() - 1);
 			if((int)preMusicXmlNote.getFrequency() == (int)musicXmlNote.getFrequency()){
 				Optional<ChunkAnalysis> optional = chunkAnalysisList.stream().filter(t -> t.getFrequency() <= MIN_FREQUECY).findFirst();
 				if(optional.isPresent()){
-					LOGGER.debug("与上一个音同音,有断开,correctedStartTime:{}", optional.get().getStartTime());
-					return optional.get().getEndTime();
-				}else{
-					LOGGER.debug("与上一个音同音,未断开,correctedStartTime:{}", musicXmlNote.getTimeStamp() + dynamicOffset);
-					return musicXmlNote.getTimeStamp() + dynamicOffset;
+					LOGGER.debug("与上一个音同音,有断开,correctedStartTime:{}", optional.get().getEndTime());
+					return Math.max(optional.get().getEndTime(), startTime);
 				}
 			}
 		}
@@ -1021,15 +1034,17 @@ public class UserChannelContext {
 		for (ChunkAnalysis ca : chunkAnalysisList) {
 			noteFrequencyRange = new NoteFrequencyRange(standardFrequecy, ca.getFrequency());
 			if (standardNote.equals(noteFrequencyRange)) {
-				LOGGER.debug("范围内查询到信号,correctedStartTime:{}", ca.getStartTime());
-				return ca.getStartTime();
+				LOGGER.debug("范围内查询到音高信号,correctedStartTime:{}", ca.getStartTime());
+				return Math.max(ca.getStartTime(), startTime);
 			}
 		}
 		
-		LOGGER.debug("范围内未查询到信号,correctedStartTime:{}", musicXmlNote.getTimeStamp() + dynamicOffset);
+		if(startTime  == 0) {
+			LOGGER.debug("范围内未查询到信号,correctedStartTime:{}", musicXmlNote.getTimeStamp() + dynamicOffset);
+		}
 
 		//return chunkAnalysisList.get(chunkAnalysisList.size() - 1).getEndTime();
-		return musicXmlNote.getTimeStamp() + dynamicOffset;
+		return Math.max(musicXmlNote.getTimeStamp() + dynamicOffset, startTime);
 	}
 
 	private void reduceNoise(List<ChunkAnalysis> chunkAnalysisList, EvaluationCriteriaEnum criteria) {

+ 4 - 4
audio-analysis/src/main/java/com/yonge/netty/server/service/AudioCompareHandler.java

@@ -73,7 +73,7 @@ public class AudioCompareHandler implements MessageHandler {
 	/**
 	 * @describe 采样大小
 	 */
-	private int bufferSize = 1024 * 1;
+	private int bufferSize = 1024 * 2;
 
 	private boolean signed = true;
 
@@ -141,7 +141,7 @@ public class AudioCompareHandler implements MessageHandler {
 				sysMusicCompareRecord.setDeviceType(DeviceTypeEnum.valueOf(musicXmlBasicInfo.getPlatform()));
 				sysMusicCompareRecord.setSpeed(musicXmlBasicInfo.getSpeed());
 				sysMusicCompareRecord.setPartIndex(musicXmlBasicInfo.getPartIndex());
-				
+				sysMusicCompareRecord.setSubjectId(musicXmlBasicInfo.getSubjectId());
 				//SysUser sysUser = sysUserFeignService.queryUserById(sysMusicCompareRecord.getUserId());
 				sysMusicCompareRecord.setTenantId(musicXmlBasicInfo.getTenantId());
 				
@@ -238,8 +238,8 @@ public class AudioCompareHandler implements MessageHandler {
 
 			Integer offsetTime = dataObj.getInteger("offsetTime");
 			Integer micDelay = dataObj.getInteger("micDelay");
-			channelContext.setMicDelayMS(micDelay + offsetTime);
-			channelContext.setOffsetMS(0);
+			channelContext.setMicDelayMS(0);
+			channelContext.setOffsetMS(micDelay + offsetTime);
 			channelContext.setHandlerSwitch(true);
 
 			break;

+ 1 - 1
cms/src/main/java/com/ym/mec/cms/dal/dao/SysNewsInformationDao.java

@@ -31,7 +31,7 @@ public interface SysNewsInformationDao extends BaseDAO<Long, SysNewsInformation>
 	
 	SysNewsInformationDto queryById(Long id);
 
-	List<SysNewsInformation> queryBySubType(@Param("subType") Integer subType, @Param("memo") String memo, @Param("organIds") String organIds);
+	List<SysNewsInformation> queryBySubType(@Param("subType") Integer subType, @Param("memo") String memo, @Param("organIds") String organIds, @Param("excludeFunctionIds") String excludeFunctionIds);
 
     Boolean countStudentAttendanceError(@Param("startTime") String startTime, @Param("userId") Integer userId);
 

+ 18 - 7
cms/src/main/java/com/ym/mec/cms/service/impl/SysNewsTypeServiceImpl.java

@@ -1,5 +1,6 @@
 package com.ym.mec.cms.service.impl;
 
+import com.ym.mec.cms.dal.dao.SysConfigDao;
 import com.ym.mec.cms.dal.dao.SysNewsInformationDao;
 import com.ym.mec.cms.dal.dao.SysNewsTypeDao;
 import com.ym.mec.cms.dal.entity.SysNewsInformation;
@@ -17,6 +18,7 @@ import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import javax.annotation.Resource;
 import java.time.LocalDate;
 import java.time.format.DateTimeFormatter;
 import java.util.*;
@@ -24,12 +26,14 @@ import java.util.stream.Collectors;
 
 @Service
 public class SysNewsTypeServiceImpl extends BaseServiceImpl<Integer, SysNewsType> implements SysNewsTypeService {
-    @Autowired
+    @Resource
     private SysNewsTypeDao sysNewsTypeDao;
-    @Autowired
+    @Resource
     private SysNewsInformationDao informationDao;
-    @Autowired
+    @Resource
     private WebFeignService webFeignService;
+    @Resource
+    private SysConfigDao sysConfigDao;
 
     @Override
     public BaseDAO<Integer, SysNewsType> getDAO() {
@@ -61,12 +65,19 @@ public class SysNewsTypeServiceImpl extends BaseServiceImpl<Integer, SysNewsType
 
     public List<SysNewsType> listWithTree(Integer id, String memo,Integer userId,String organIds) {
         SysNewsType newsType = sysNewsTypeDao.get(id);
+        //获取需要排除的用户编号
+        String excludeUserIds = sysConfigDao.findConfigValue("exclude_user_ids");
+        String excludeFunctionIds = null;
+        if(StringUtils.isNotEmpty(excludeUserIds) && excludeUserIds.contains(userId.toString())){
+            //获取需要排除的功能点编号
+            excludeFunctionIds = sysConfigDao.findConfigValue("exclude_function_ids");
+        }
         List<SysNewsType> all = sysNewsTypeDao.findAll(null);
         String startTime = DateUtil.format(DateUtil.getFirstDayOfMonth(DateUtil.addMonths(new Date(), -1)),DateUtil.ISO_EXPANDED_DATE_FORMAT);
-        all.forEach(e -> {
-            List<SysNewsInformation> list = informationDao.queryBySubType(e.getId(), memo,organIds);
+        for (SysNewsType e : all) {
+            List<SysNewsInformation> list = informationDao.queryBySubType(e.getId(), memo,organIds,excludeFunctionIds);
             if (CollectionUtils.isEmpty(list)) {
-            	list = informationDao.queryBySubType(e.getId(), null,organIds);
+            	list = informationDao.queryBySubType(e.getId(), null,organIds,excludeFunctionIds);
             }
             Iterator<SysNewsInformation> iterator = list.iterator();
 			SysNewsInformation sni = null;
@@ -86,7 +97,7 @@ public class SysNewsTypeServiceImpl extends BaseServiceImpl<Integer, SysNewsType
                 }
     		}
             e.setInformationList(list);
-        });
+        }
         List<SysNewsType> treeMenus = all.stream()
                 .filter((e) -> e.getParentId().equals(newsType.getParentId()))
                 .map((menu) -> menu.setChildren(getChildren(menu, all)))

+ 3 - 0
cms/src/main/resources/config/mybatis/SysNewsInformationMapper.xml

@@ -313,6 +313,9 @@
 		<if test="memo != null and memo !=''">
 			AND memo_ = #{memo}
 		</if>
+		<if test="excludeFunctionIds != null and excludeFunctionIds !=''">
+			AND NOT FIND_IN_SET(id_,#{excludeFunctionIds})
+		</if>
 		<if test="organIds != null and organIds !=''">
 			AND (INTE_ARRAY(#{organIds},organ_id_list_) OR organ_id_list_ IS NULL OR organ_id_list_ = '')
 		</if>

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

@@ -13,6 +13,8 @@ import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import java.util.Map;
+
 /**
  * @Author Joburgess
  * @Date 2021/8/11 0011
@@ -38,7 +40,7 @@ public class CloudStudyController extends BaseController {
 
     @ApiOperation("学员训练数据统计")
     @GetMapping("studentTrainData")
-    public HttpResponseResult studentTrainData(SysMusicCompareRecordQueryInfo queryInfo){
+    public HttpResponseResult<Map<String, Object>> studentTrainData(SysMusicCompareRecordQueryInfo queryInfo){
         queryInfo.setUserId(sysUserService.getUserId());
         return succeed(sysMusicCompareRecordService.studentTrainData(queryInfo));
     }

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

@@ -323,14 +323,14 @@ public class PracticeGroupController extends BaseController {
         if(pushType.equals("ALL")||pushType.equals("JIGUANG")){
             Map<Integer, String> userMap = new HashMap<>();
             userMap.put(userId, userId.toString());
-            sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.STUDENT_SMS_PUSH_PRACTICE_COMPLETED_STUDY_REPORT,
+            sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.STUDENT_PUSH_PRACTICE_COMPLETED_STUDY_REPORT,
                     userMap, null, 0, "5?" + pushUrl, "STUDENT", pushUrl);
         }
 
         if(pushType.equals("ALL")||pushType.equals("SMS")){
             Map<Integer, String> userPhoneMap = new HashMap<>();
             userPhoneMap.put(userId, student.getPhone());
-            sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.AWSMS, MessageTypeEnum.STUDENT_SMS_PUSH_PRACTICE_COMPLETED_STUDY_REPORT,
+            sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.AWSMS, MessageTypeEnum.STUDENT_SMS_PRACTICE_COMPLETED_STUDY_REPORT,
                     userPhoneMap, null, 0, null, "STUDENT", HttpUtil.getSortUrl(smsUrl));
         }
 

+ 1 - 1
mec-application/src/main/java/com/ym/mec/student/controller/SmsCodeController.java

@@ -54,7 +54,7 @@ public class SmsCodeController extends BaseController {
         RBucket<String> bucket = redissonClient.getBucket(redisKey);
         if(bucket.isExists()){
             if(StringUtils.equalsIgnoreCase(bucket.get(),code)){
-                smsCodeService.sendValidCode(mobile);
+                smsCodeService.sendValidCode(mobile,"STUDENT");
                 return succeed();
             }
         }

+ 12 - 30
mec-application/src/main/java/com/ym/mec/student/controller/SysMessageController.java

@@ -8,6 +8,7 @@ import com.ym.mec.biz.dal.entity.AppVersionInfo;
 import com.ym.mec.biz.dal.enums.MessageSendMode;
 import com.ym.mec.biz.dal.page.SysMessageQueryInfo;
 import com.ym.mec.biz.service.SysMessageService;
+import com.ym.mec.biz.service.SysUserService;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.exception.BizException;
 import com.ym.mec.thirdparty.message.MessageSenderPluginContext.MessageSender;
@@ -22,6 +23,7 @@ import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import javax.annotation.Resource;
 import java.util.Map;
 
 @RestController
@@ -29,23 +31,19 @@ import java.util.Map;
 @RequestMapping("${app-config.url.student:}/sysMessage")
 public class SysMessageController extends BaseController {
 
-	@Autowired
+	@Resource
 	private SysMessageService sysMessageService;
 
-	@Autowired
-	private SysUserFeignService sysUserFeignService;
+	@Resource
+	private SysUserService sysUserService;
 
-	@Autowired
+	@Resource
 	private AppVersionInfoDao appVersionInfoDao;
 
 	@ApiOperation("获取所有消息列表")
 	@GetMapping(value = "list")
 	public Object list(SysMessageQueryInfo queryInfo){
-		SysUser sysUser = sysUserFeignService.queryUserInfo();
-		if (sysUser == null) {
-			return failed(HttpStatus.FORBIDDEN, "请登录");
-		}
-		queryInfo.setUserId(sysUser.getId());
+		queryInfo.setUserId(sysUserService.getUserId());
 		queryInfo.setType(MessageSendMode.PUSH.getCode());
 		queryInfo.setJpushType("STUDENT");
 		return succeed(sysMessageService.queryPage(queryInfo));
@@ -77,32 +75,19 @@ public class SysMessageController extends BaseController {
 	@ApiOperation("一键已读")
 	@PostMapping("batchSetRead")
 	public Object batchSetRead() {
-		int status = 1;
-		SysUser sysUser = sysUserFeignService.queryUserInfo();
-		if (sysUser == null) {
-			return failed(HttpStatus.FORBIDDEN, "请登录");
-		}
-		return sysMessageService.updateStatus(sysUser.getId(), status,"STUDENT") > 0 ? succeed() : failed();
+		return sysMessageService.updateStatus(sysUserService.getUserId(), 1,"STUDENT")? succeed() : failed();
 	}
 
 	@ApiOperation("设置已读")
 	@PostMapping("setRead")
 	public Object setRead(Long id) {
-		int status = 1;
-		SysUser sysUser = sysUserFeignService.queryUserInfo();
-		if (sysUser == null) {
-			return failed(HttpStatus.FORBIDDEN, "请登录");
-		}
-		return sysMessageService.updateOneStatus(id, status) > 0 ? succeed() : failed();
+		return sysMessageService.updateOneStatus(id) ? succeed() : failed();
 	}
 
 	@ApiOperation(value = "查询用户未读消息条数")
 	@GetMapping("/queryCountOfUnread")
 	public Object queryCountOfUnread() {
-		SysUser sysUser = sysUserFeignService.queryUserInfo();
-		if (sysUser == null) {
-			return failed(HttpStatus.FORBIDDEN, "请登录");
-		}
+		SysUser sysUser = sysUserService.getUser();
 		Map<String, Integer> map = sysMessageService.queryCountOfUnread(MessageSendMode.PUSH, sysUser.getId(),"STUDENT", sysUser.getTenantId());
 
 		if (map == null || map.size() == 0) {
@@ -114,17 +99,14 @@ public class SysMessageController extends BaseController {
 	@ApiOperation(value = "发送消息")
 	@PostMapping("/sendMessage")
 	public Object sendMessage(MessageSender messageSender, String content, String receiver, int readStatus, String url, String group) {
-		SysUser sysUser = sysUserFeignService.queryUserInfo();
-		if (sysUser == null) {
-			return failed(HttpStatus.FORBIDDEN, "请登录");
-		}
+		SysUser sysUser = sysUserService.getUser();
 		Integer userId = sysUser.getId();
 
 		String mobileNo = sysUser.getPhone();
 		if (StringUtils.isBlank(mobileNo) || !CommonValidator.isMobileNo(mobileNo)) {
 			throw new BizException("请输入正确的手机号");
 		}
-		sysMessageService.sendMessage(messageSender, userId, "", content, receiver, null, readStatus, url, group, "STUDENT");
+//		sysMessageService.sendMessage(messageSender, userId, "", content, receiver, null, readStatus, url, group, "STUDENT");
 		return succeed();
 	}
 }

+ 2 - 1
mec-application/src/main/java/com/ym/mec/student/controller/SysMusicCompareRecordController.java

@@ -1,5 +1,6 @@
 package com.ym.mec.student.controller;
 
+import com.alibaba.fastjson.JSONObject;
 import com.ym.mec.biz.dal.entity.SysMusicCompareRecord;
 import com.ym.mec.biz.service.SysMusicCompareRecordService;
 import com.ym.mec.biz.service.SysUserService;
@@ -58,7 +59,7 @@ public class SysMusicCompareRecordController extends BaseController {
 
     @ApiOperation(value = "用户最后一次评测数据")
     @GetMapping("getLastEvaluationMusicalNotesPlayStats")
-    public HttpResponseResult getLastEvaluationMusicalNotesPlayStats(Long recordId){
+    public HttpResponseResult<JSONObject> getLastEvaluationMusicalNotesPlayStats(Long recordId){
         return succeed(sysMusicCompareRecordService.getLastEvaluationMusicalNotesPlayStats(sysUserService.getUserId(), recordId));
     }
 

+ 0 - 4
mec-application/src/main/java/com/ym/mec/teacher/controller/ImGroupMemberController.java

@@ -36,10 +36,6 @@ public class ImGroupMemberController extends BaseController {
 		if (CollectionUtils.isEmpty(member.getUserIds())) {
 			throw BizException.from("群成员不能为空");
 		}
-		// 群成员禁言时长无效
-		if (member.getGroupMute() && Optional.of(member.getMuteTime()).orElse(0) <= 0) {
-			throw BizException.from("群成员禁言时长无效");
-		}
 		// 更新群成员禁言
 		imGroupMemberService.groupMemberMute(member);
 		return succeed();

+ 1 - 1
mec-application/src/main/java/com/ym/mec/teacher/controller/SmsCodeController.java

@@ -53,7 +53,7 @@ public class SmsCodeController extends BaseController {
         RBucket<String> bucket = redissonClient.getBucket(redisKey);
         if(bucket.isExists()){
             if(StringUtils.equalsIgnoreCase(bucket.get(),code)){
-                smsCodeService.sendValidCode(mobile);
+                smsCodeService.sendValidCode(mobile,"TEACHER");
                 return succeed();
             }
         }

+ 3 - 3
mec-application/src/main/java/com/ym/mec/teacher/controller/SysMessageController.java

@@ -58,13 +58,13 @@ public class SysMessageController extends BaseController {
 	@ApiOperation("一键已读")
 	@PostMapping("batchSetRead")
 	public Object batchSetRead() {
-		return sysMessageService.updateStatus(sysUserService.getUserId(), 1,"TEACHER") > 0 ? succeed() : failed();
+		return sysMessageService.updateStatus(sysUserService.getUserId(), 1,"TEACHER")? succeed() : failed();
 	}
 
 	@ApiOperation("设置已读")
 	@PostMapping("setRead")
 	public Object setRead(Long id) {
-		return sysMessageService.updateOneStatus(id, 1) > 0 ? succeed() : failed();
+		return sysMessageService.updateOneStatus(id) ? succeed() : failed();
 	}
 
 	@ApiOperation(value = "查询用户未读消息条数")
@@ -87,7 +87,7 @@ public class SysMessageController extends BaseController {
 		if (StringUtils.isBlank(mobileNo) || !CommonValidator.isMobileNo(mobileNo)) {
 			throw new BizException("请输入正确的手机号");
 		}
-		sysMessageService.sendMessage(messageSender, sysUser.getId(), "", content, receiver, null, readStatus, url, group,"TEACHER");
+//		sysMessageService.sendMessage(messageSender, sysUser.getId(), "", content, receiver, null, readStatus, url, group,"TEACHER");
 		return succeed();
 	}
 }

+ 15 - 0
mec-application/src/main/java/com/ym/mec/vo/PageUtil.java

@@ -2,6 +2,7 @@ package com.ym.mec.vo;
 
 import com.ym.mec.common.page.PageInfo;
 
+import java.util.List;
 import java.util.Objects;
 
 /**
@@ -23,4 +24,18 @@ public class PageUtil {
         resultPage.setTotal(total);
         return resultPage;
     }
+
+    public static <T,E> PageInfo<T> pageInfo(com.microsvc.toolkit.common.response.paging.PageInfo<E> source, List<T> rows) {
+        if (Objects.isNull(source)) {
+            return new PageInfo<>(1, 20);
+        }
+        int total = Integer.parseInt(String.valueOf(source.getTotal()));
+        int limit = Integer.parseInt(String.valueOf(source.getLimit()));
+        PageInfo<T> resultPage = new PageInfo<>();
+        resultPage.setRows(rows);
+        resultPage.setPageNo(Long.valueOf(source.getCurrent()).intValue());
+        resultPage.setLimit(limit);
+        resultPage.setTotal(total);
+        return resultPage;
+    }
 }

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

@@ -74,7 +74,7 @@ public class ClassGroupController extends BaseController {
     @ApiOperation(value = "班级基本信息修改")
     @PostMapping("/update")
     @PreAuthorize("@pcs.hasPermissions('classGroup/update')")
-    public HttpResponseResult update(ClassGroup classGroup) throws Exception {
+    public HttpResponseResult<Integer> update(ClassGroup classGroup) throws Exception {
         classGroup.setUpdateTime(new Date());
         return succeed(classGroupService.updateClassGroup(classGroup));
     }

+ 0 - 4
mec-application/src/main/java/com/ym/mec/web/controller/ImGroupMemberController.java

@@ -40,10 +40,6 @@ public class ImGroupMemberController extends BaseController {
 		if (CollectionUtils.isEmpty(member.getUserIds())) {
 			throw BizException.from("群成员不能为空");
 		}
-		// 群成员禁言时长无效
-		if (member.getGroupMute() && Optional.of(member.getMuteTime()).orElse(0) <= 0) {
-			throw BizException.from("群成员禁言时长无效");
-		}
 		// 更新群成员禁言
 		imGroupMemberService.groupMemberMute(member);
 		return succeed();

+ 4 - 4
mec-application/src/main/java/com/ym/mec/web/controller/ReplacementInstrumentActivityController.java

@@ -97,11 +97,11 @@ public class ReplacementInstrumentActivityController extends BaseController {
             String baseApiUrl = sysConfigDao.findConfigValue("base_api_url");
             String pushUrl = baseApiUrl + "/#/questionGoodsSale?id=";
             userMap.put(userId, userId.toString());
-            sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.STUDENT_SMS_PUSH_REPLACEMENT_PAY,
+            sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.STUDENT_PUSH_REPLACEMENT_PAY,
                     userMap, null, 0, "5?" + pushUrl + replacementInstrumentActivity.getId(), "STUDENT", goods.getBrand(), "");
 
             userPhoneMap.put(userId, oldReplacementInstrumentActivity.getMobileNo());
-            sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.AWSMS, MessageTypeEnum.STUDENT_SMS_PUSH_REPLACEMENT_PAY,
+            sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.AWSMS, MessageTypeEnum.STUDENT_SMS_REPLACEMENT_PAY,
                     userPhoneMap, null, 0, null, null, goods.getBrand(), HttpUtil.getSortUrl(pushUrl + replacementInstrumentActivity.getId()));
         }
 
@@ -135,11 +135,11 @@ public class ReplacementInstrumentActivityController extends BaseController {
             String baseApiUrl = sysConfigDao.findConfigValue("base_api_url");
             String pushUrl = baseApiUrl + "/#/questionGoodsSale?id=";
             userMap.put(userId, userId.toString());
-            sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.STUDENT_SMS_PUSH_REPLACEMENT_PAY,
+            sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.STUDENT_PUSH_REPLACEMENT_PAY,
                     userMap, null, 0, "5?" + pushUrl + replacementInstrumentActivity.getId(), "STUDENT", goods.getBrand(), "");
 
             userPhoneMap.put(userId, replacementInstrumentActivity.getMobileNo());
-            sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.AWSMS, MessageTypeEnum.STUDENT_SMS_PUSH_REPLACEMENT_PAY,
+            sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.AWSMS, MessageTypeEnum.STUDENT_SMS_REPLACEMENT_PAY,
                     userPhoneMap, null, 0, null, null, goods.getBrand(), HttpUtil.getSortUrl(pushUrl + replacementInstrumentActivity.getId()));
         }
 

+ 61 - 39
mec-application/src/main/java/com/ym/mec/web/controller/SchoolMessageController.java

@@ -1,49 +1,85 @@
 package com.ym.mec.web.controller;
 
 import com.alibaba.fastjson.JSON;
-import com.ym.mec.auth.api.client.SysUserFeignService;
-import com.ym.mec.auth.api.entity.SysUser;
-import com.ym.mec.biz.dal.dao.AppVersionInfoDao;
+import com.dayaedu.cbs.common.enums.message.EMessageSendMode;
+import com.dayaedu.cbs.common.enums.message.ESendStatus;
+import com.dayaedu.cbs.openfeign.wrapper.message.CbsMessageWrapper;
+import com.microsvc.toolkit.common.response.paging.PageInfo;
 import com.ym.mec.biz.dal.dto.SysMessageDto;
+import com.ym.mec.biz.dal.entity.SysMessage;
 import com.ym.mec.biz.dal.enums.MessageSendMode;
+import com.ym.mec.biz.dal.enums.SendStatusEnum;
 import com.ym.mec.biz.dal.page.SysMessageQueryInfo;
 import com.ym.mec.biz.service.SysMessageService;
+import com.ym.mec.biz.service.SysUserService;
 import com.ym.mec.common.controller.BaseController;
-import com.ym.mec.common.page.PageInfo;
+import com.ym.mec.common.entity.HttpResponseResult;
+import com.ym.mec.vo.PageUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.http.HttpStatus;
+import org.apache.commons.collections.CollectionUtils;
 import org.springframework.web.bind.annotation.*;
 
+import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.List;
+
 @RestController
 @Api(tags = "消息服务")
 @RequestMapping("${app-config.url.web:}/schoolMessage")
 public class SchoolMessageController extends BaseController {
 
-    @Autowired
+    @Resource
     private SysMessageService sysMessageService;
-
-    @Autowired
-    private SysUserFeignService sysUserFeignService;
-
-    @Autowired
-    private AppVersionInfoDao appVersionInfoDao;
+    @Resource
+    private SysUserService sysUserService;
 
     @ApiOperation("获取所有消息列表")
     @PostMapping(value = "list")
-    public Object list(@RequestBody SysMessageQueryInfo queryInfo){
-        SysUser sysUser = sysUserFeignService.queryUserInfo();
-        if (sysUser == null) {
-            return failed(HttpStatus.FORBIDDEN, "请登录");
-        }
-
-        queryInfo.setUserId(sysUserFeignService.queryUserInfo().getId());
+    public HttpResponseResult<com.ym.mec.common.page.PageInfo<SysMessage>> list(@RequestBody SysMessageQueryInfo queryInfo){
+        queryInfo.setUserId(sysUserService.getUserId());
         queryInfo.setType(3);
         queryInfo.setJpushType("SCHOOL");
-        PageInfo<SysMessageDto> pageInfo = sysMessageService.queryListPage(queryInfo);
-        return succeed(pageInfo);
+        PageInfo<CbsMessageWrapper.SysMessage> pageInfo = sysMessageService.queryListPage(queryInfo).feignData();
+
+        List<SysMessage> sysMessages = new ArrayList<>();
+        if(CollectionUtils.isNotEmpty(pageInfo.getRows())){
+            pageInfo.getRows().forEach(sysMessage -> {
+                SysMessage message = new SysMessage();
+                message.setId(sysMessage.getId().toString());
+                message.setTitle(sysMessage.getTitle());
+                message.setContent(sysMessage.getContent());
+                if(sysMessage.getSendMode() != null){
+                    message.setType(sysMessage.getSendMode() == EMessageSendMode.SMS?MessageSendMode.SMS:
+                            sysMessage.getSendMode() == EMessageSendMode.EMAIL?MessageSendMode.EMAIL:
+                                    sysMessage.getSendMode() == EMessageSendMode.PUSH?MessageSendMode.PUSH:MessageSendMode.SEO);
+                }
+                if(sysMessage.getStatus() != null){
+                    message.setStatus(sysMessage.getStatus() == ESendStatus.FAILED? SendStatusEnum.FAILED:
+                            sysMessage.getStatus() == ESendStatus.SENDING?SendStatusEnum.SENDING:
+                                    sysMessage.getStatus() == ESendStatus.SUCCESSED?SendStatusEnum.SUCCESSED:SendStatusEnum.WAIT);
+                }
+                message.setReceiver(sysMessage.getReceiver());
+                message.setSendTime(sysMessage.getSendTime());
+                message.setErrorMsg(sysMessage.getErrorMsg());
+                message.setCreateOn(sysMessage.getCreateTime());
+                message.setModifyOn(sysMessage.getUpdateTime());
+                if(sysMessage.getUserId() != null){
+                    message.setUserId(sysMessage.getUserId().intValue());
+                }
+                if(sysMessage.getMessageConfigId() != null){
+                    message.setMessageConfigId(sysMessage.getMessageConfigId().intValue());
+                }
+                message.setMemo(sysMessage.getMemo());
+                if (sysMessage.getReadStatus() != null){
+                    message.setReadStatus(sysMessage.getReadStatus()?1:0);
+                }
+                message.setGroup(sysMessage.getGroup());
+                sysMessages.add(message);
+            });
+        }
+        return succeed(PageUtil.pageInfo(pageInfo,sysMessages));
     }
 
     @ApiOperation("获取消息分类类型")
@@ -59,31 +95,17 @@ public class SchoolMessageController extends BaseController {
     @ApiOperation("一键已读")
     @PostMapping("batchSetRead")
     public Object batchSetRead() {
-        int status = 1;
-        SysUser sysUser = sysUserFeignService.queryUserInfo();
-        if (sysUser == null) {
-            return failed(HttpStatus.FORBIDDEN, "请登录");
-        }
-        return sysMessageService.updateStatus(sysUser.getId(), status,"SCHOOL") > 0 ? succeed() : failed();
+        return sysMessageService.updateStatus(sysUserService.getUserId(), 1,"SCHOOL")? succeed() : failed();
     }
     @ApiOperation("设置已读")
     @PostMapping("setRead")
     public Object setRead(@ApiParam("id") Long id) {
-        int status = 1;
-        SysUser sysUser = sysUserFeignService.queryUserInfo();
-        if (sysUser == null) {
-            return failed(HttpStatus.FORBIDDEN, "请登录");
-        }
-        return sysMessageService.updateOneStatus(id, status) > 0 ? succeed() : failed();
+        return sysMessageService.updateOneStatus(id)? succeed() : failed();
     }
 
     @ApiOperation(value = "查询用户未读消息条数")
     @GetMapping("/queryCountOfUnread")
     public Object queryCountOfUnread() {
-        SysUser sysUser = sysUserFeignService.queryUserInfo();
-        if (sysUser == null) {
-            return failed(HttpStatus.FORBIDDEN, "请登录");
-        }
-        return succeed(sysMessageService.queryCountOfUnread(MessageSendMode.PUSH, sysUser.getId(),"SCHOOL", null));
+        return succeed(sysMessageService.queryCountOfUnread(MessageSendMode.PUSH, sysUserService.getUserId(),"SCHOOL", null));
     }
 }

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

@@ -53,7 +53,7 @@ public class SmsCodeController extends BaseController {
         RBucket<String> bucket = redissonClient.getBucket(redisKey);
         if(bucket.isExists()){
             if(StringUtils.equalsIgnoreCase(bucket.get(),code)){
-                smsCodeService.sendValidCode(mobile);
+                smsCodeService.sendValidCode(mobile,"SYSTEM");
                 return succeed();
             }
         }

+ 72 - 33
mec-application/src/main/java/com/ym/mec/web/controller/SysMessageController.java

@@ -1,26 +1,33 @@
 package com.ym.mec.web.controller;
 
 import com.alibaba.fastjson.JSON;
-import com.ym.mec.auth.api.client.SysUserFeignService;
+import com.dayaedu.cbs.common.enums.message.EMessageSendMode;
+import com.dayaedu.cbs.common.enums.message.ESendStatus;
+import com.dayaedu.cbs.openfeign.wrapper.message.CbsMessageWrapper;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.dao.AppVersionInfoDao;
-import com.ym.mec.biz.dal.dto.SysMessageDto;
 import com.ym.mec.biz.dal.dto.SysMessageVo;
 import com.ym.mec.biz.dal.entity.AppVersionInfo;
+import com.ym.mec.biz.dal.entity.SysMessage;
 import com.ym.mec.biz.dal.enums.MessageSendMode;
+import com.ym.mec.biz.dal.enums.SendStatusEnum;
 import com.ym.mec.biz.dal.page.SysMessageQueryInfo;
 import com.ym.mec.biz.service.SysMessageService;
+import com.ym.mec.biz.service.SysUserService;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.entity.HttpResponseResult;
 import com.ym.mec.common.page.PageInfo;
+import com.ym.mec.vo.PageUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.apache.commons.lang3.StringUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.http.HttpStatus;
 import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.util.CollectionUtils;
 import org.springframework.web.bind.annotation.*;
 
+import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.List;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
@@ -29,28 +36,60 @@ import java.util.regex.Pattern;
 @RequestMapping("${app-config.url.web:}/sysMessage")
 public class SysMessageController extends BaseController {
 
-	@Autowired
+	@Resource
 	private SysMessageService sysMessageService;
 
-	@Autowired
-	private SysUserFeignService sysUserFeignService;
+	@Resource
+	private SysUserService sysUserService;
 
-	@Autowired
+	@Resource
 	private AppVersionInfoDao appVersionInfoDao;
 
 	@ApiOperation("获取所有消息列表")
 	@GetMapping(value = "list")
 	public Object list(SysMessageQueryInfo queryInfo){
-		SysUser sysUser = sysUserFeignService.queryUserInfo();
-		if (sysUser == null) {
-			return failed(HttpStatus.FORBIDDEN, "请登录");
-		}
-		if(!sysUser.getIsSuperAdmin()){
-			queryInfo.setUserId(sysUser.getId());
-		}
+		SysUser sysUser = sysUserService.getUser();
+		queryInfo.setUserId(sysUser.getId());
 		queryInfo.setType(MessageSendMode.SEO.getCode());
-		PageInfo<SysMessageDto> pageInfo = sysMessageService.queryListPage(queryInfo);
-		return succeed(pageInfo);
+		com.microsvc.toolkit.common.response.paging.PageInfo<CbsMessageWrapper.SysMessage> pageInfo = sysMessageService.queryListPage(queryInfo).feignData();
+
+		List<SysMessage> sysMessages = new ArrayList<>();
+		if(org.apache.commons.collections.CollectionUtils.isNotEmpty(pageInfo.getRows())){
+			pageInfo.getRows().forEach(sysMessage -> {
+				SysMessage message = new SysMessage();
+				message.setId(sysMessage.getId().toString());
+				message.setTitle(sysMessage.getTitle());
+				message.setContent(sysMessage.getContent());
+				if(sysMessage.getSendMode() != null){
+					message.setType(sysMessage.getSendMode() == EMessageSendMode.SMS?MessageSendMode.SMS:
+							sysMessage.getSendMode() == EMessageSendMode.EMAIL?MessageSendMode.EMAIL:
+									sysMessage.getSendMode() == EMessageSendMode.PUSH?MessageSendMode.PUSH:MessageSendMode.SEO);
+				}
+				if(sysMessage.getStatus() != null){
+					message.setStatus(sysMessage.getStatus() == ESendStatus.FAILED? SendStatusEnum.FAILED:
+							sysMessage.getStatus() == ESendStatus.SENDING?SendStatusEnum.SENDING:
+									sysMessage.getStatus() == ESendStatus.SUCCESSED?SendStatusEnum.SUCCESSED:SendStatusEnum.WAIT);
+				}
+				message.setReceiver(sysMessage.getReceiver());
+				message.setSendTime(sysMessage.getSendTime());
+				message.setErrorMsg(sysMessage.getErrorMsg());
+				message.setCreateOn(sysMessage.getCreateTime());
+				message.setModifyOn(sysMessage.getUpdateTime());
+				if(sysMessage.getUserId() != null){
+					message.setUserId(sysMessage.getUserId().intValue());
+				}
+				if(sysMessage.getMessageConfigId() != null){
+					message.setMessageConfigId(sysMessage.getMessageConfigId().intValue());
+				}
+				message.setMemo(sysMessage.getMemo());
+				if (sysMessage.getReadStatus() != null){
+					message.setReadStatus(sysMessage.getReadStatus()?1:0);
+				}
+				message.setGroup(sysMessage.getGroup());
+				sysMessages.add(message);
+			});
+		}
+		return succeed(PageUtil.pageInfo(pageInfo,sysMessages));
 	}
 
 	@ApiOperation("获取消息分类类型")
@@ -81,21 +120,13 @@ public class SysMessageController extends BaseController {
 	@ApiOperation("设置已读")
 	@PostMapping("setRead")
 	public Object setRead(Long id) {
-		int status = 1;
-		SysUser sysUser = sysUserFeignService.queryUserInfo();
-		if (sysUser == null) {
-			return failed(HttpStatus.FORBIDDEN, "请登录");
-		}
-		return sysMessageService.updateOneStatus(id, status) > 0 ? succeed() : failed();
+		return sysMessageService.updateOneStatus(id)? succeed() : failed();
 	}
 
 	@ApiOperation(value = "查询用户未读消息条数")
 	@GetMapping("/queryCountOfUnread")
 	public Object queryCountOfUnread() {
-		SysUser sysUser = sysUserFeignService.queryUserInfo();
-		if (sysUser == null) {
-			return failed(HttpStatus.FORBIDDEN, "请登录");
-		}
+		SysUser sysUser = sysUserService.getUser();
 		return succeed(sysMessageService.queryCountOfUnread(MessageSendMode.SEO, sysUser.getId(),null, sysUser.getTenantId()));
 	}
 
@@ -104,19 +135,27 @@ public class SysMessageController extends BaseController {
 	@PreAuthorize("@pcs.hasPermissions('sysMessage/page')")
 	@PostMapping("/page")
 	public HttpResponseResult<PageInfo<SysMessageVo.SysMessageList>> page(@RequestBody SysMessageVo.SysMessageQuery query) {
-		// 数据类型转换
-		PageInfo<SysMessageVo.SysMessageList> records = sysMessageService.queryMessageCode(query);
-
+		com.microsvc.toolkit.common.response.paging.PageInfo<CbsMessageWrapper.SysMessage> pageInfo = sysMessageService.queryMessageCode(query).feignData();
+		if(CollectionUtils.isEmpty(pageInfo.getRows())){
+			return succeed(new PageInfo<>());
+		}
+		List<SysMessageVo.SysMessageList> sysMessageList = new ArrayList<>();
 		Pattern pattern = Pattern.compile("\\b验证码\\s*(\\d{6})\\b");
-		records.getRows().forEach(next -> {
+		pageInfo.getRows().forEach(next -> {
+			SysMessageVo.SysMessageList sysMessage = new SysMessageVo.SysMessageList();
 			String content = next.getContent();
+			sysMessage.setContent(content);
+			sysMessage.setTitle(next.getTitle());
+			sysMessage.setSendTime(next.getSendTime());
+			sysMessage.setReceiver(next.getReceiver());
 			if (StringUtils.isNotEmpty(content)) {
 				Matcher matcher = pattern.matcher(content);
 				if (matcher.find()) {
-					next.setVerityCode(matcher.group().replace("验证码",""));
+					sysMessage.setVerityCode(matcher.group().replace("验证码",""));
 				}
 			}
+			sysMessageList.add(sysMessage);
 		});
-		return succeed(records);
+		return succeed(PageUtil.pageInfo(pageInfo, sysMessageList));
 	}
 }

+ 0 - 4
mec-application/src/main/java/com/ym/mec/web/controller/education/EduImGroupMemberController.java

@@ -36,10 +36,6 @@ public class EduImGroupMemberController extends BaseController {
 		if (CollectionUtils.isEmpty(member.getUserIds())) {
 			throw BizException.from("群成员不能为空");
 		}
-		// 群成员禁言时长无效
-		if (member.getGroupMute() && Optional.of(member.getMuteTime()).orElse(0) <= 0) {
-			throw BizException.from("群成员禁言时长无效");
-		}
 		// 更新群成员禁言
 		imGroupMemberService.groupMemberMute(member);
 		return succeed();

+ 12 - 33
mec-application/src/main/java/com/ym/mec/web/controller/education/SysEduMessageController.java

@@ -1,13 +1,13 @@
 package com.ym.mec.web.controller.education;
 
 import com.alibaba.fastjson.JSON;
-import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.dao.AppVersionInfoDao;
 import com.ym.mec.biz.dal.entity.AppVersionInfo;
 import com.ym.mec.biz.dal.enums.MessageSendMode;
 import com.ym.mec.biz.dal.page.SysMessageQueryInfo;
 import com.ym.mec.biz.service.SysMessageService;
+import com.ym.mec.biz.service.SysUserService;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.exception.BizException;
 import com.ym.mec.thirdparty.message.MessageSenderPluginContext.MessageSender;
@@ -15,13 +15,12 @@ import com.ym.mec.util.validator.CommonValidator;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.apache.commons.lang3.StringUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.http.HttpStatus;
 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 javax.annotation.Resource;
 import java.util.Map;
 
 @RestController
@@ -29,23 +28,19 @@ import java.util.Map;
 @RequestMapping("${app-config.url.web:}/sysEduMessage")
 public class SysEduMessageController extends BaseController {
 
-	@Autowired
+	@Resource
 	private SysMessageService sysMessageService;
 
-	@Autowired
-	private SysUserFeignService sysUserFeignService;
+	@Resource
+	private SysUserService sysUserService;
 
-	@Autowired
+	@Resource
 	private AppVersionInfoDao appVersionInfoDao;
 
 	@ApiOperation("获取所有消息列表")
 	@GetMapping(value = "list")
 	public Object list(SysMessageQueryInfo queryInfo){
-		SysUser sysUser = sysUserFeignService.queryUserInfo();
-		if (sysUser == null) {
-			return failed(HttpStatus.FORBIDDEN, "请登录");
-		}
-		queryInfo.setUserId(sysUser.getId());
+		queryInfo.setUserId(sysUserService.getUserId());
 		queryInfo.setType(3);
 		queryInfo.setJpushType("SYSTEM");
 		return succeed(sysMessageService.queryPage(queryInfo));
@@ -77,32 +72,19 @@ public class SysEduMessageController extends BaseController {
 	@ApiOperation("一键已读")
 	@PostMapping("batchSetRead")
 	public Object batchSetRead() {
-		int status = 1;
-		SysUser sysUser = sysUserFeignService.queryUserInfo();
-		if (sysUser == null) {
-			return failed(HttpStatus.FORBIDDEN, "请登录");
-		}
-		return sysMessageService.updateStatus(sysUser.getId(), status,"SYSTEM") > 0 ? succeed() : failed();
+		return sysMessageService.updateStatus(sysUserService.getUserId(), 1,"SYSTEM") ? succeed() : failed();
 	}
 
 	@ApiOperation("设置已读")
 	@PostMapping("setRead")
 	public Object setRead(Long id) {
-		int status = 1;
-		SysUser sysUser = sysUserFeignService.queryUserInfo();
-		if (sysUser == null) {
-			return failed(HttpStatus.FORBIDDEN, "请登录");
-		}
-		return sysMessageService.updateOneStatus(id, status) > 0 ? succeed() : failed();
+		return sysMessageService.updateOneStatus(id)? succeed() : failed();
 	}
 
 	@ApiOperation(value = "查询用户未读消息条数")
 	@GetMapping("/queryCountOfUnread")
 	public Object queryCountOfUnread() {
-		SysUser sysUser = sysUserFeignService.queryUserInfo();
-		if (sysUser == null) {
-			return failed("请重新登录");
-		}
+		SysUser sysUser = sysUserService.getUser();
 		Map<String, Integer> map = sysMessageService.queryCountOfUnread(MessageSendMode.PUSH, sysUser.getId(),"SYSTEM", sysUser.getTenantId());
 
 		if (map == null || map.size() == 0) {
@@ -114,17 +96,14 @@ public class SysEduMessageController extends BaseController {
 	@ApiOperation(value = "发送消息")
 	@PostMapping("/sendMessage")
 	public Object sendMessage(MessageSender messageSender, String content, String receiver, int readStatus, String url, String group) {
-		SysUser sysUser = sysUserFeignService.queryUserInfo();
-		if (sysUser == null) {
-			return failed(HttpStatus.FORBIDDEN, "请登录");
-		}
+		SysUser sysUser = sysUserService.getUser();
 		Integer userId = sysUser.getId();
 
 		String mobileNo = sysUser.getPhone();
 		if (StringUtils.isBlank(mobileNo) || !CommonValidator.isMobileNo(mobileNo)) {
 			throw new BizException("请输入正确的手机号");
 		}
-		sysMessageService.sendMessage(messageSender, userId, "", content, receiver, null, readStatus, url, group,"SYSTEM");
+//		sysMessageService.sendMessage(messageSender, userId, "", content, receiver, null, readStatus, url, group,"SYSTEM");
 		return succeed();
 	}
 }

+ 104 - 0
mec-auth/mec-auth-api/src/main/java/com/ym/mec/auth/api/entity/SysConfig.java

@@ -0,0 +1,104 @@
+package com.ym.mec.auth.api.entity;
+
+import io.swagger.annotations.ApiModelProperty;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+
+/**
+ * 对应数据库表(sys_config):
+ */
+public class SysConfig {
+
+	/**  */
+	private Long id;
+	
+	/** 参数名称 */
+	@ApiModelProperty(value = "参数名称", required = true)
+	private String paramName;
+	
+	/** 参数值 */
+	@ApiModelProperty(value = "参数值", required = true)
+	private String paranValue;
+	
+	/** 描述 */
+	@ApiModelProperty(value = "描述", required = true)
+	private String description;
+	
+	/** 创建时间 */
+	private java.util.Date createOn;
+	
+	/** 修改时间 */
+	private java.util.Date modifyOn;
+	
+	@ApiModelProperty(value = "消息组", required = true)
+	private String group;
+	
+	public void setId(Long id){
+		this.id = id;
+	}
+	
+	public Long getId(){
+		return this.id;
+	}
+			
+	public void setParamName(String paramName){
+		this.paramName = paramName;
+	}
+	
+	public String getParamName(){
+		return this.paramName;
+	}
+			
+	public void setParanValue(String paranValue){
+		this.paranValue = paranValue;
+	}
+	
+	public String getParanValue(){
+		return this.paranValue;
+	}
+
+	public <T> T getParanValue(Class<T> cla){
+		try {
+			return cla.cast(cla.getMethod("valueOf", String.class).invoke(cla.getInterfaces(),this.paranValue));
+		} catch (Exception e) {
+			return (T)this.paranValue.getClass();
+		}
+	}
+			
+	public void setDescription(String description){
+		this.description = description;
+	}
+	
+	public String getDescription(){
+		return this.description;
+	}
+			
+	public void setCreateOn(java.util.Date createOn){
+		this.createOn = createOn;
+	}
+	
+	public java.util.Date getCreateOn(){
+		return this.createOn;
+	}
+			
+	public void setModifyOn(java.util.Date modifyOn){
+		this.modifyOn = modifyOn;
+	}
+	
+	public java.util.Date getModifyOn(){
+		return this.modifyOn;
+	}
+			
+	public String getGroup() {
+		return group;
+	}
+
+	public void setGroup(String group) {
+		this.group = group;
+	}
+
+	@Override
+	public String toString() {
+		return ToStringBuilder.reflectionToString(this);
+	}
+
+}

+ 24 - 0
mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/dal/dao/SysConfigDao.java

@@ -0,0 +1,24 @@
+package com.ym.mec.auth.dal.dao;
+
+import com.ym.mec.auth.api.entity.SysConfig;
+import com.ym.mec.common.dal.BaseDAO;
+
+public interface SysConfigDao extends BaseDAO<Long, SysConfig> {
+
+    /**
+     * @Author: Joburgess
+     * @Date: 2019/10/9
+     * @params [paramName]
+     * @return com.ym.mec.biz.dal.entity.SysConfig
+     * @describe 根据配置名称获取配置信息
+     */
+    SysConfig findByParamName(String paramName);
+
+    /**
+     * 获取value
+     * @param paramName
+     * @return
+     */
+    String findConfigValue(String paramName);
+	
+}

+ 9 - 0
mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/service/impl/CbsQrCodeScanServiceImpl.java

@@ -5,9 +5,11 @@ import com.dayaedu.cbs.openfeign.wrapper.qrcode.CbsQrCodeScanWrapper;
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.auth.core.service.CustomTokenServices;
+import com.ym.mec.auth.dal.dao.SysConfigDao;
 import com.ym.mec.auth.service.SysUserService;
 import com.ym.mec.common.entity.HttpResponseResult;
 import com.ym.mec.common.exception.BizException;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.http.HttpStatus;
 import org.springframework.security.oauth2.provider.OAuth2Authentication;
 import org.springframework.stereotype.Service;
@@ -25,6 +27,8 @@ public class CbsQrCodeScanServiceImpl{
     private SysUserService sysUserService;
     @Resource
     private SysUserFeignService sysUserFeignService;
+    @Resource
+    private SysConfigDao sysConfigDao;
 
     public CbsQrCodeScanWrapper.UserInfo userInfo(CbsQrCodeScanWrapper.QrCodeScanUserInfoReq req) {
         CbsQrCodeScanWrapper.UserInfo userInfo = new CbsQrCodeScanWrapper.UserInfo();
@@ -41,6 +45,11 @@ public class CbsQrCodeScanServiceImpl{
         if (sysUser == null) {
             throw new BizException(HttpStatus.UNAUTHORIZED.value(), "用户不存在");
         }
+        //获取需要排除的用户编号
+        String excludeUserIds = sysConfigDao.findConfigValue("exclude_user_ids");
+        if(StringUtils.isNotEmpty(excludeUserIds) && excludeUserIds.contains(sysUser.getId().toString())){
+            throw new BizException("扫码登陆失败: 用户已锁定");
+        }
         //调用登陆接口
         HttpResponseResult<Map<String,Object>> result = sysUserFeignService.smsLogin(phone, "qr_teacher", UUID.randomUUID().toString(), "qr_teacher");
         if (result != null){

+ 21 - 0
mec-auth/mec-auth-server/src/main/resources/config/mybatis/SysConfigMapper.xml

@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<!-- 这个文件是自动生成的。 不要修改此文件。所有改动将在下次重新自动生成时丢失。 -->
+<mapper namespace="com.ym.mec.auth.dal.dao.SysConfigDao">
+
+	<resultMap type="com.ym.mec.auth.api.entity.SysConfig" id="SysConfig">
+		<result column="id_" property="id" />
+		<result column="param_name_" property="paramName" />
+		<result column="paran_value_" property="paranValue" />
+		<result column="description_" property="description" />
+		<result column="create_on_" property="createOn" />
+		<result column="modify_on_" property="modifyOn" />
+		<result column="group_" property="group" />
+	</resultMap>
+	<select id="findByParamName" resultMap="SysConfig">
+		SELECT * FROM sys_config WHERE param_name_ = #{paramName}
+	</select>
+    <select id="findConfigValue" resultType="java.lang.String">
+		SELECT paran_value_ FROM sys_config WHERE param_name_ = #{paramName}
+	</select>
+</mapper>

+ 38 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/ImGroupMemberDto.java

@@ -2,10 +2,23 @@ package com.ym.mec.biz.dal.dto;
 
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.entity.ImGroupMember;
+import io.swagger.annotations.ApiModelProperty;
 
 public class ImGroupMemberDto extends ImGroupMember {
-
 	private SysUser user = new SysUser();
+    private String type;
+    private String imUserId;
+    @ApiModelProperty(value = "群编号;")
+    private String groupId;
+    @ApiModelProperty("群成员头象")
+    private String avatar;
+    public String getType() {
+        return type;
+    }
+
+    public void setType(String type) {
+        this.type = type;
+    }
 
     public SysUser getUser() {
 		return user;
@@ -14,4 +27,28 @@ public class ImGroupMemberDto extends ImGroupMember {
 	public void setUser(SysUser user) {
 		this.user = user;
 	}
+
+    public String getImUserId() {
+        return String.valueOf(getUserId());
+    }
+
+    public void setImUserId(String imUserId) {
+        this.imUserId = imUserId;
+    }
+
+    public String getGroupId() {
+        return getImGroupId();
+    }
+
+    public String getAvatar() {
+        return avatar;
+    }
+
+    public void setAvatar(String avatar) {
+        this.avatar = avatar;
+    }
+
+    public void setGroupId(String groupId) {
+        this.groupId = groupId;
+    }
 }

+ 3 - 30
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/ImGroupMemberPlus.java

@@ -17,50 +17,32 @@ import java.util.Date;
 @TableName("im_group_member")
 public class ImGroupMemberPlus implements Serializable {
 
-    /**
-     *
-     */
     @TableId(value = "id_", type = IdType.AUTO)
     private Long id;
 
-    /**
-     *
-     */
     @TableField(value = "im_group_id_")
     private String imGroupId;
 
-    /**
-     *
-     */
     @TableField(value = "user_id_")
     private Integer userId;
 
     @TableField(value = "nickname_")
     private String nickname;
 
-    /**
-     * 群昵称
-     */
     @TableField(exist = false)
     private String groupNickname;
 
-    /**
-     * 是否是管理员
-     */
     @ApiModelProperty("是否是管理员")
     @TableField(value = "is_admin_")
     private Boolean isAdmin;
 
-    /**
-     * 群角色
-     */
     @TableField(value = "role_type_")
     private String roleType;
 
+    @ApiModelProperty(value = "第三方群角色")
+    @TableField(value = "group_role_type_")
+    private String groupRoleType;
 
-    /**
-     * 群角色
-     */
     @TableField(value = "type_")
     private String type;
 
@@ -73,21 +55,12 @@ public class ImGroupMemberPlus implements Serializable {
     @TableField(exist = false)
     private String subjectId;
 
-    /**
-     * 头像
-     */
     @TableField(exist = false)
     private String avatar;
 
-    /**
-     *
-     */
     @TableField(value = "create_time_")
     private Date createTime;
 
-    /**
-     *
-     */
     @TableField(value = "update_time_")
     private Date updateTime;
 

+ 3 - 3
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/SysMessage.java

@@ -14,7 +14,7 @@ import com.ym.mec.common.entity.BaseEntity;
 public class SysMessage extends BaseEntity {
 
 	/** 主键 */
-	private Long id;
+	private String id;
 
     private Integer messageConfigId;
 	
@@ -98,11 +98,11 @@ public class SysMessage extends BaseEntity {
 		this.memo = memo;
 	}
 
-	public void setId(Long id){
+	public void setId(String id){
 		this.id = id;
 	}
 	
-	public Long getId(){
+	public String getId(){
 		return this.id;
 	}
 			

+ 2 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/SysMusicCompareRecord.java

@@ -85,6 +85,8 @@ public class SysMusicCompareRecord extends BaseEntity {
 	//文件是否过期
 	private boolean expire;
 
+	private Integer subjectId;
+
 	public SysMusicCompareRecord(FeatureType feature) {
 		this.feature = feature;
 	}

+ 13 - 4
mec-biz/src/main/java/com/ym/mec/biz/dal/enums/EFriendRoleType.java

@@ -14,7 +14,9 @@ public enum EFriendRoleType implements BaseEnum<Integer, EFriendRoleType> {
     MAINTENANCE_TECHNICIAN(6,"维护技师"),
     ORCHESTRA_TEACHER(7,"指导老师"),
     STUDENT(8,"学生"),
-    UNDEFINE(9,""),
+    BAND_DIRECTOR(9,"乐队指导"),
+    BRIDGING_TEACHER(10,"衔接老师"),
+    UNDEFINE(11,""),
 
 
     ;
@@ -40,12 +42,15 @@ public enum EFriendRoleType implements BaseEnum<Integer, EFriendRoleType> {
                 return SCHOOL_TEACHER;
             case "STUDENT":
                 return STUDENT;
+            case "BRIDGING_TEACHER":
+                return BRIDGING_TEACHER;
+            case "BAND_DIRECTOR":
+                return BAND_DIRECTOR;
             case "乐团主管":
             case "ORCHESTRA_MANAGER":
                 return ORCHESTRA_MANAGER;
             case "指导老师":
                 return ORCHESTRA_TEACHER;
-
             case "校长":
                 return SCHOOLMASTER;
             case "乐团领队":
@@ -56,9 +61,13 @@ public enum EFriendRoleType implements BaseEnum<Integer, EFriendRoleType> {
                 return SCHOOL_TEACHER;
             case "维护技师":
                 return SCHOOL_TEACHER;
+            case "衔接老师":
+                return BRIDGING_TEACHER;
+            case "乐队指导":
+                return BAND_DIRECTOR;
             default:
-//                return STUDENT;
-                return UNDEFINE;
+                return STUDENT;
+//                return UNDEFINE;
         }
     }
 

+ 24 - 12
mec-biz/src/main/java/com/ym/mec/biz/dal/enums/MessageTypeEnum.java

@@ -4,12 +4,16 @@ import com.ym.mec.common.enums.BaseEnum;
 
 public enum MessageTypeEnum implements BaseEnum<String, MessageTypeEnum> {
     SMS_APPLY_MESSAGE("SMS_APPLY_MESSAGE", "报名通知"),
-    SYSTEM_REMIND_EDUCATION_COURSE_TIME("SYSTEM_REMIND_EDUCATION_COURSE_TIME", "排课提醒"),
-    STUDENT_MEMBER_RENEW_MESSAGE("STUDENT_MEMBER_RENEW_MESSAGE", "会员续费提醒"),
+    SMS_SYSTEM_REMIND_EDUCATION_COURSE_TIME("SMS_SYSTEM_REMIND_EDUCATION_COURSE_TIME", "排课提醒"),
+
+    PUSH_SYSTEM_REMIND_EDUCATION_COURSE_TIME("PUSH_SYSTEM_REMIND_EDUCATION_COURSE_TIME", "排课提醒"),
+    SMS_STUDENT_MEMBER_RENEW_MESSAGE("SMS_STUDENT_MEMBER_RENEW_MESSAGE", "会员续费提醒"),
+    PUSH_STUDENT_MEMBER_RENEW_MESSAGE("STUDENT_MEMBER_RENEW_MESSAGE", "会员续费提醒"),
     PUSH_EXPERIENCE_MEMBERSHIP_MESSAGE("PUSH_EXPERIENCE_MEMBERSHIP_MESSAGE", "会员试用提醒"),
+    SMS_EXPERIENCE_MEMBERSHIP_MESSAGE("SMS_EXPERIENCE_MEMBERSHIP_MESSAGE", "会员试用提醒"),
     SMS_AUTO_STUDENT_MEMBER_RENEW_MESSAGE("SMS_AUTO_STUDENT_MEMBER_RENEW_MESSAGE", "会员续费提醒"),
     PUSH_AUTO_STUDENT_MEMBER_RENEW_MESSAGE("PUSH_AUTO_STUDENT_MEMBER_RENEW_MESSAGE", "会员续费提醒"),
-    STUDENT_MEMBER_RENEW_QUIT_MESSAGE("STUDENT_MEMBER_RENEW_QUIT_MESSAGE", "会员续费提醒"),
+//    STUDENT_MEMBER_RENEW_QUIT_MESSAGE("STUDENT_MEMBER_RENEW_QUIT_MESSAGE", "会员续费提醒"),
     SMS_VERIFY_CODE_LOGIN("SMS_VERIFY_CODE_LOGIN", "验证码登录"),
     KAPTCHA_SESSION_KEY("KAPTCHA_SESSION_KEY", "登录图形验证码"),
     SMS_PAYMENT_MESSAGE("SMS_PAYMENT_MESSAGE", "缴费通知"),
@@ -30,7 +34,8 @@ public enum MessageTypeEnum implements BaseEnum<String, MessageTypeEnum> {
     PUSH_STUDENT_BUY_ACTIVITY("PUSH_STUDENT_BUY_ACTIVITY", "活动购买成功"),
     PUSH_SYSTEM_ACTIVITY_COURSE("PUSH_SYSTEM_ACTIVITY_COURSE", "待排课通知"),
     PUSH_TEACHER_ACTIVITY_COURSE("PUSH_TEACHER_ACTIVITY_COURSE", "待排课通知"),
-    STUDENT_SMS_PUSH_PAYMENT_SUCCESS("STUDENT_SMS_PUSH_PAYMENT_SUCCESS", "缴费成功结果通知"),
+    STUDENT_SMS_PAYMENT_SUCCESS("STUDENT_SMS_PAYMENT_SUCCESS", "缴费成功结果通知"),
+    STUDENT_PUSH_PAYMENT_SUCCESS("STUDENT_PUSH_PAYMENT_SUCCESS", "缴费成功结果通知"),
     STUDENT_SMS_BALANCE_CONSUME("STUDENT_SMS_BALANCE_CONSUME", "余额消费"),
     STUDENT_PUSH_VIP_BUY("STUDENT_PUSH_VIP_BUY", "VIP课购买"),
     STUDENT_PUSH_LIVE_BUY("STUDENT_PUSH_LIVE_BUY", "直播课购买"),
@@ -47,7 +52,7 @@ public enum MessageTypeEnum implements BaseEnum<String, MessageTypeEnum> {
     STUDENT_PUSH_JOB_MESSAGE_EXTRA_V2("STUDENT_PUSH_JOB_MESSAGE_EXTRA_V2", "训练提醒"),
     //    STUDENT_PUSH_CLASS_MESSAGE("STUDENT_PUSH_CLASS_MESSAGE", "班级消息"),
     TEACHER_PUSH_MUSIC_GROUP_COURSE_ADD_PLAN("TEACHER_PUSH_MUSIC_GROUP_COURSE_ADD_PLAN", "乐团课新增安排"),
-    TEACHER_SMS_PUSH_VIP_COURSE_APPLY_RESULT("TEACHER_SMS_PUSH_VIP_COURSE_APPLY_RESULT", "VIP课申请结果"),
+    TEACHER_SMS_VIP_COURSE_APPLY_RESULT("TEACHER_SMS_VIP_COURSE_APPLY_RESULT", "VIP课申请结果"),
     TEACHER_SMS_VIP_COURSE_ADD("TEACHER_SMS_VIP_COURSE_ADD", "VIP课新增"),
     TEACHER_PUSH_VIP_COURSE_STOP("TEACHER_PUSH_VIP_COURSE_STOP", "VIP课停止"),
     TEACHER_PUSH_LIVE_COURSE_STOP("TEACHER_PUSH_LIVE_COURSE_STOP", "直播课停止"),
@@ -75,12 +80,16 @@ public enum MessageTypeEnum implements BaseEnum<String, MessageTypeEnum> {
     TEACHER_PUSH_VIP_STOP("TEACHER_PUSH_VIP_STOP", "VIP课取消"),
     STUDENT_SMS_OPEN_PAYMENT("STUDENT_SMS_OPEN_PAYMENT", "开启缴费"),
     //    SMS_MUSIC_GROUP_ADD_STUDENT_FREE("SMS_MUSIC_GROUP_ADD_STUDENT_FREE", "入团通知"),
-    STUDENT_SMS_PUSH_SPORADIC_PAYMENT_SUCCESS("STUDENT_SMS_PUSH_SPORADIC_PAYMENT_SUCCESS", "零星支付成功结果"),
-    STUDENT_SMS_PUSH_SPORADIC_PAYMENT_FAILED("STUDENT_SMS_PUSH_SPORADIC_PAYMENT_FAILED", "零星支付失败结果"),
+    STUDENT_PUSH_SPORADIC_PAYMENT_SUCCESS("STUDENT_PUSH_SPORADIC_PAYMENT_SUCCESS", "零星支付成功结果"),
+    STUDENT_SMS_SPORADIC_PAYMENT_SUCCESS("STUDENT_SMS_SPORADIC_PAYMENT_SUCCESS", "零星支付成功结果"),
+    STUDENT_SMS_SPORADIC_PAYMENT_FAILED("STUDENT_SMS_SPORADIC_PAYMENT_FAILED", "零星支付失败结果"),
+    STUDENT_PUSH_SPORADIC_PAYMENT_FAILED("STUDENT_PUSH_SPORADIC_PAYMENT_FAILED", "零星支付失败结果"),
     TEACHER_PUSH_COURSE_COLLIDE("TEACHER_PUSH_COURSE_COLLIDE", "课程冲突"),
     //    PUSH_STUDY_REPORT("PUSH_STUDY_REPORT", "陪练报告"),
-    STUDENT_SMS_PUSH_PAY_PRACTICE_BUY_SUCCESS("STUDENT_SMS_PUSH_PAY_PRACTICE_BUY_SUCCESS", "网管课购买成功"),
-    STUDENT_SMS_PUSH_PRACTICE_COMPLETED_STUDY_REPORT("STUDENT_SMS_PUSH_PRACTICE_COMPLETED_STUDY_REPORT", "网管课完成学习报告"),
+    STUDENT_SMS_PAY_PRACTICE_BUY_SUCCESS("STUDENT_SMS_PAY_PRACTICE_BUY_SUCCESS", "网管课购买成功"),
+    STUDENT_PUSH_PAY_PRACTICE_BUY_SUCCESS("STUDENT_PUSH_PAY_PRACTICE_BUY_SUCCESS", "网管课购买成功"),
+    STUDENT_PUSH_PRACTICE_COMPLETED_STUDY_REPORT("STUDENT_PUSH_PRACTICE_COMPLETED_STUDY_REPORT", "网管课完成学习报告"),
+    STUDENT_SMS_PRACTICE_COMPLETED_STUDY_REPORT("STUDENT_SMS_PRACTICE_COMPLETED_STUDY_REPORT", "网管课完成学习报告"),
     STUDENT_SMS_PUSH_FREE_PRACTICE_APPLY_PUSH("STUDENT_SMS_PUSH_FREE_PRACTICE_APPLY_PUSH", "免费陪练课预约推送"),
     TEACHER_PUSH_NEED_POST_STUDY_REPORT("TEACHER_PUSH_NEED_POST_STUDY_REPORT", "新增待填写月报"),
     STUDENT_PUSH_HOMEWORK_REMIND("STUDENT_PUSH_HOMEWORK_REMIND", "训练提醒-网管课"),
@@ -122,7 +131,8 @@ public enum MessageTypeEnum implements BaseEnum<String, MessageTypeEnum> {
     TEACHER_PUSH_COURSE_SALARY_COMPLAINTS_RESULT("TEACHER_PUSH_COURSE_SALARY_COMPLAINTS_RESULT", "课酬申述结果"),
     TEACHER_PUSH_SALARY_CONFIRM("TEACHER_PUSH_SALARY_CONFIRM", "课酬确认"),
     STUDENT_PUSH_TRIAL_PRACTICE_CREATE("STUDENT_PUSH_TRIAL_PRACTICE_CREATE", "试听课安排"),
-    TEACHER_SMS_PUSH_PRACTICE_CREATE("TEACHER_SMS_PUSH_PRACTICE_CREATE", "新增网管课程"),
+    TEACHER_SMS_PRACTICE_CREATE("TEACHER_SMS_PRACTICE_CREATE", "新增网管课程"),
+    TEACHER_PUSH_PRACTICE_CREATE("TEACHER_PUSH_PRACTICE_CREATE", "新增网管课程"),
     STUDENT_PUSH_REPAIR_UNSEND_COMPLETED("STUDENT_PUSH_REPAIR_UNSEND_COMPLETED", "乐器维修完成自取"),
     STUDENT_PUSH_REPAIR_SEND_COMPLETED("STUDENT_PUSH_REPAIR_SEND_COMPLETED", "乐器维修完成邮寄"),
     STUDENT_PUSH_REPAIR_ONLINE_PAYMENT_SUCCESS("STUDENT_PUSH_REPAIR_ONLINE_PAYMENT_SUCCESS", "乐器线上维修支付成功"),
@@ -145,13 +155,15 @@ public enum MessageTypeEnum implements BaseEnum<String, MessageTypeEnum> {
     TEACHER_PUSH_SERVE("TEACHER_PUSH_SERVE", "服务指标未完成提醒"),
     STUDENT_PUSH_MAINTENANCE_NOTICE("STUDENT_PUSH_MAINTENANCE_NOTICE", "乐保到期提醒"),
     TEACHER_IM_STUDENT_LEAVE("TEACHER_IM_STUDENT_LEAVE", "学员请假"),
-    STUDENT_SMS_PUSH_REPLACEMENT_PAY("STUDENT_SMS_PUSH_REPLACEMENT_PAY", "乐器置换支付提醒"),
+    STUDENT_SMS_REPLACEMENT_PAY("STUDENT_SMS_REPLACEMENT_PAY", "乐器置换支付提醒"),
+    STUDENT_PUSH_REPLACEMENT_PAY("STUDENT_PUSH_REPLACEMENT_PAY", "乐器置换支付提醒"),
     TEACHER_PUSH_INCOME_REMIND("TEACHER_PUSH_INCOME_REMIND", "今日收入"),
     STUDENT_PUSH_PAYMENT_RESULT("STUDENT_PUSH_PAYMENT_RESULT", "缴费结果"),
     STUDENT_PUSH_MUSIC_GROUP_CLOSE("STUDENT_PUSH_MUSIC_GROUP_CLOSE", "乐团关闭(确认后)"),
     STUDENT_PUSH_BASICS_SKILL_APPLY_MESSAGE("STUDENT_PUSH_BASICS_SKILL_APPLY_MESSAGE", "基础技能训练报名通知"),
     STUDENT_PUSH_WAIT_RENEW_MESSAGE("STUDENT_PUSH_WAIT_RENEW_MESSAGE", "待续费通知"),
-    STUDENT_SMS_PUSH_MUSIC_GROUP_RENEW_SUCCESS("STUDENT_SMS_PUSH_MUSIC_GROUP_RENEW_SUCCESS", "乐团续费成功结果"),
+    STUDENT_SMS_MUSIC_GROUP_RENEW_SUCCESS("STUDENT_SMS_MUSIC_GROUP_RENEW_SUCCESS", "乐团续费成功结果"),
+    STUDENT_PUSH_MUSIC_GROUP_RENEW_SUCCESS("STUDENT_PUSH_MUSIC_GROUP_RENEW_SUCCESS", "乐团续费成功结果"),
     STUDENT_PUSH_BALANCE_CONSUME("STUDENT_PUSH_BALANCE_CONSUME", "余额消费"),
     STUDENT_PUSH_ATTEND_COURSE_MESSAGE("STUDENT_PUSH_ATTEND_COURSE_MESSAGE", "上课提醒"),
     STUDENT_PUSH_TEACHING_SCHOOL_CHANGE("STUDENT_PUSH_TEACHING_SCHOOL_CHANGE", "教学点变动"),

+ 8 - 5
mec-biz/src/main/java/com/ym/mec/biz/dal/wrapper/ImGroupMemberWrapper.java

@@ -92,11 +92,14 @@ public class ImGroupMemberWrapper {
         private String nickname;
 
         @ApiModelProperty("是否是管理员")
-        private Boolean isAdmin;
+        private Boolean isAdmin = false;
 
         @ApiModelProperty("群角色TEACHER老师、STUDENT学生")
         private String roleType;
 
+        @ApiModelProperty(value = "群角色")
+        private String type;
+
         @ApiModelProperty("修改时间")
         private Date updateTime;
 
@@ -158,8 +161,8 @@ public class ImGroupMemberWrapper {
         @ApiModelProperty(value = "群ID",required = true)
         private String groupId;
 
-        @ApiModelProperty("禁言时长(分钟), 0取消禁方;不能小于0")
-        private Integer muteTime;
+//        @ApiModelProperty("禁言时长(分钟), 0取消禁方;不能小于0")
+//        private Integer muteTime;
 
         @ApiModelProperty("群禁言状态")
         private Boolean groupMute;
@@ -167,13 +170,13 @@ public class ImGroupMemberWrapper {
         @ApiModelProperty("群成员ID")
         private List<String> userIds;
 
-        public Integer getMuteTime() {
+        /*public Integer getMuteTime() {
             // 禁言时长不能小于0,最小为1分钟
             if (Objects.nonNull(muteTime) && muteTime < 0) {
                 return 1;
             }
             return Optional.ofNullable(muteTime).orElse(0);
-        }
+        }*/
 
         public String jsonString() {
             return JSON.toJSONString(this);

+ 70 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/wrapper/SysMessageWrapper.java

@@ -0,0 +1,70 @@
+package com.ym.mec.biz.dal.wrapper;
+
+import com.ym.mec.biz.dal.enums.MessageSendMode;
+import com.ym.mec.biz.dal.enums.SendStatusEnum;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+public class SysMessageWrapper {
+
+    @Data
+    public static class Message {
+
+        /** 主键 */
+        private String id;
+
+        private Integer messageConfigId;
+
+        /** 标题 */
+        @ApiModelProperty(value = "标题",required = false)
+        private String title;
+
+        /** 消息内容 */
+        @ApiModelProperty(value = "消息内容",required = false)
+        private String content;
+
+        /** 消息类型;1,表示短信;2,表示邮件; 3,app推送消息 */
+        @ApiModelProperty(value = "消息类型",required = false)
+        private MessageSendMode type;
+
+        /** 状态,-1,发送失败;0,待发送;1,发送中;2,发送完成 */
+        @ApiModelProperty(value = "状态",required = false)
+        private SendStatusEnum status;
+
+        /** 接收人(多个人用逗号分隔) */
+        @ApiModelProperty(value = "接收人(多个人用逗号分隔)",required = false)
+        private String receiver;
+
+        /** 发送时间 */
+        @ApiModelProperty(value = "发送时间",required = false)
+        private java.util.Date sendTime;
+
+        /** 错误信息 */
+        @ApiModelProperty(value = "错误信息",required = false)
+        private String errorMsg;
+
+        /** 创建时间 */
+        private java.util.Date createOn;
+
+        /** 修改时间 */
+        private java.util.Date modifyOn;
+
+        /** 用户编号 */
+        @ApiModelProperty(value = "用户编号",required = false)
+        private Integer userId;
+
+        /** 备注 */
+        @ApiModelProperty(value = "备注",required = false)
+        private String memo;
+
+        /** 是否已读 */
+        @ApiModelProperty(value = "是否已读",required = false)
+        private Integer readStatus;
+
+        @ApiModelProperty(value = "消息组",required = false)
+        private String group;
+
+        @ApiModelProperty(value = "极光推送客户端标识",required = false)
+        private String jpushType;
+    }
+}

+ 2 - 1
mec-biz/src/main/java/com/ym/mec/biz/event/listener/SendSeoMessageListener.java

@@ -6,6 +6,7 @@ import com.ym.mec.biz.event.SendSeoMessageChangeEvent;
 import com.ym.mec.biz.service.SysEmployeePositionService;
 import com.ym.mec.biz.service.SysMessageService;
 import com.ym.mec.common.tenant.TenantContextHolder;
+import org.apache.commons.collections.CollectionUtils;
 import org.springframework.context.ApplicationListener;
 import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Component;
@@ -35,7 +36,7 @@ public class SendSeoMessageListener implements ApplicationListener<SendSeoMessag
         if(event.getTargetId() != null){
             targetUserIdList.add(event.getTargetId());
         }
-        if(targetUserIdList.size() > 0){
+        if(CollectionUtils.isNotEmpty(targetUserIdList)){
             sysMessageService.batchSeoMessage(targetUserIdList,
                     event.getMsgTemplate(),
                     event.getMemo(),

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

@@ -596,7 +596,7 @@ public interface ClassGroupService extends BaseService<Integer, ClassGroup> {
     void batchUpdateLockByClassGroupIds(List<Integer> classGroupIds,int lockFlag);
 
     //修改班级基本信息
-    int updateClassGroup(ClassGroup classGroup);
+    int updateClassGroup(ClassGroup classGroup) throws Exception;
 
     /**
      * 查询班级列表

+ 4 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/ImGroupMemberService.java

@@ -27,6 +27,10 @@ public interface ImGroupMemberService extends BaseService<Long, ImGroupMember> {
 	 */
 	boolean join(String imGroupId, Integer userId, String roleType, boolean isAdmin);
 
+	void initImGroupMember(ImGroupMember imGroupMember, ImGroup.GroupTypeEnum groupType);
+
+	void initImGroupMembers(List<ImGroupMember> imGroupMembers, ImGroup.GroupTypeEnum groupType);
+
 	/**
 	 * 加入群组
 	 * @param imGroupId 群编号

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

@@ -16,5 +16,5 @@ public interface SmsCodeService {
 	 * 发送登录验证码
 	 * @return
 	 */
-	boolean sendValidCode(String mobile) throws Exception;
+	boolean sendValidCode(String mobile,String jpushType) throws Exception;
 }

+ 23 - 46
mec-biz/src/main/java/com/ym/mec/biz/service/SysMessageService.java

@@ -1,32 +1,29 @@
 package com.ym.mec.biz.service;
 
-import java.net.MalformedURLException;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import com.ym.mec.biz.dal.dto.SysMessageDto;
+import com.dayaedu.cbs.common.enums.EClientType;
+import com.dayaedu.cbs.openfeign.wrapper.message.CbsMessageWrapper;
+import com.microsvc.toolkit.common.response.template.R;
 import com.ym.mec.biz.dal.dto.SysMessageVo;
 import com.ym.mec.biz.dal.entity.ImSendGroupMessage;
 import com.ym.mec.biz.dal.entity.SysMessage;
 import com.ym.mec.biz.dal.enums.MessageSendMode;
 import com.ym.mec.biz.dal.enums.MessageTypeEnum;
+import com.ym.mec.biz.dal.page.SysMessageQueryInfo;
+import com.ym.mec.biz.dal.wrapper.SysMessageWrapper;
 import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.page.QueryInfo;
 import com.ym.mec.common.service.BaseService;
 import com.ym.mec.thirdparty.message.MessageSenderPluginContext.MessageSender;
 
+import java.net.MalformedURLException;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
 public interface SysMessageService extends BaseService<Long, SysMessage> {
-	
-	PageInfo<SysMessageDto> queryListPage(QueryInfo queryInfo);
 
-	/**
-	 * 修改消息对象
-	 * @param message
-	 * @return
-	 */
-	public int updateMessage(SysMessage message);
+	R<com.microsvc.toolkit.common.response.paging.PageInfo<CbsMessageWrapper.SysMessage>> queryListPage(SysMessageQueryInfo queryInfo);
 
 	/**
 	 * 推送站内消息
@@ -101,7 +98,7 @@ public interface SysMessageService extends BaseService<Long, SysMessage> {
 	 * @param args 参数
 	 * @return
 	 */
-	public void batchSendMessage(Integer senderTenantId, MessageSender messageSender, MessageTypeEnum messageType, Map<Integer, String> receivers, Date triggerTime,
+	public void batchSendMessage(Integer senderTenantId, MessageSender messageSender, MessageTypeEnum messageType, Map<Integer,String> receivers, Date triggerTime,
 			Integer readStatus, String url,String jpushType, Object... args);
 
 	/**
@@ -115,7 +112,7 @@ public interface SysMessageService extends BaseService<Long, SysMessage> {
 	 * @param args 参数
 	 * @return
 	 */
-	public void batchSendMessage(MessageSender messageSender, MessageTypeEnum messageType, Map<Integer, String> receivers, Date triggerTime,
+	public void batchSendMessage(MessageSender messageSender, MessageTypeEnum messageType, Map<Integer,String> receivers, Date triggerTime,
 			Integer readStatus, String url,String jpushType, Object... args);
 
 
@@ -129,25 +126,9 @@ public interface SysMessageService extends BaseService<Long, SysMessage> {
 	 * @param args 参数
 	 * @return
 	 */
-	public void batchPushMessage(MessageTypeEnum messageType, Map<Integer, String> receivers, Date triggerTime,
+	public void batchPushMessage(MessageTypeEnum messageType, Map<Integer,String> receivers, Date triggerTime,
 			Integer readStatus, String url,String jpushType,String sound,String channelId, Object... args);
 
-	/**
-	 * 发送消息
-	 * @param messageSender 消息发送者
-	 * @param userId 用户编号
-	 * @param mode 消息模式
-	 * @param title 消息标题
-	 * @param content 消息内容
-	 * @param receiver 消息接受者
-	 * @param triggerTime 触发时间
-	 * @param readStatus 阅读状态(0-未读  1-已读)
-	 * @param url 超链接地址
-	 * @param group 组
-	 * @return
-	 */
-	public void sendMessage(MessageSender messageSender, Integer userId, String title, String content, String receiver, Date triggerTime, Integer readStatus,
-			String url, String group,String jpushType);
 
 	/**
 	 * 发送验证码
@@ -158,7 +139,7 @@ public interface SysMessageService extends BaseService<Long, SysMessage> {
 	 * @param receiver 消息接受者
 	 * @return
 	 */
-	public boolean sendSecurityCode(MessageSender messageSender, Integer userId, MessageTypeEnum messageType, String receiver);
+	public boolean sendSecurityCode(MessageSender messageSender, Integer userId, MessageTypeEnum messageType, String receiver,String jpushType);
 
 	/**
 	 * 获取已经发送的验证码
@@ -169,13 +150,6 @@ public interface SysMessageService extends BaseService<Long, SysMessage> {
 	public String getSendedVerificationCode(MessageTypeEnum type, String mobileNOOrEmailAddr);
 
 	/**
-	 * 删除已有的key
-	 * @param type
-	 * @param mobileNOOrEmailAddr
-	 */
-	public void delSendedVerificationCode(MessageTypeEnum type, String mobileNOOrEmailAddr);
-
-	/**
 	 * 查询消息未读条数
 	 * @param type
 	 * @param userId
@@ -189,14 +163,14 @@ public interface SysMessageService extends BaseService<Long, SysMessage> {
 	 * @param status 状态/1 已读,0未读
 	 * @return
 	 */
-	public int updateStatus(Integer userId, int status,String jpushType);
+	public Boolean updateStatus(Integer userId, int status,String jpushType);
 
 	/**
 	 * 修改单条消息状态
 	 */
-	public int updateOneStatus(Long id, int status);
+	public Boolean updateOneStatus(Long id);
 	
-	public List<SysMessage> queryUserInRecentMinList(String mobile, int recentMin, MessageSendMode type);
+	public List<CbsMessageWrapper.SysMessage> queryUserInRecentMinList(String mobile, int recentMin, MessageSendMode type);
 
 	/**
 	 * 发送私聊消息
@@ -220,5 +194,8 @@ public interface SysMessageService extends BaseService<Long, SysMessage> {
 	void pushWaitSendMessageTask();
 
 	//获取短信验证码
-	PageInfo<SysMessageVo.SysMessageList> queryMessageCode(SysMessageVo.SysMessageQuery query);
+	R<com.microsvc.toolkit.common.response.paging.PageInfo<CbsMessageWrapper.SysMessage>> queryMessageCode(SysMessageVo.SysMessageQuery query);
+
+
+    PageInfo<SysMessageWrapper.Message> queryPage(SysMessageQueryInfo queryInfo);
 }

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

@@ -1,5 +1,6 @@
 package com.ym.mec.biz.service;
 
+import com.alibaba.fastjson.JSONObject;
 import com.ym.mec.biz.dal.dao.SysMusicCompareRecordDao;
 import com.ym.mec.biz.dal.dto.*;
 import com.ym.mec.biz.dal.entity.SysMusicCompareRecord;
@@ -41,7 +42,7 @@ public interface SysMusicCompareRecordService extends BaseService<Long, SysMusic
      * @param userId:
      * @return java.util.List<com.ym.mec.biz.dal.dto.MusicalNotesPlayStatDto>
      */
-    Object getLastEvaluationMusicalNotesPlayStats(Integer userId, Long recordId);
+    JSONObject getLastEvaluationMusicalNotesPlayStats(Integer userId, Long recordId);
 
     /**
      * @describe 云教练排行榜

+ 76 - 29
mec-biz/src/main/java/com/ym/mec/biz/service/im/impl/ImGroupCoreServiceImpl.java

@@ -7,6 +7,7 @@ import com.google.common.collect.Lists;
 import com.microsvc.toolkit.common.tools.ThreadPool;
 import com.microsvc.toolkit.middleware.im.ImPluginContext;
 import com.microsvc.toolkit.middleware.im.message.GroupMemberWrapper;
+import com.microsvc.toolkit.middleware.im.message.TencentWrapper;
 import com.ym.mec.biz.dal.entity.ImGroupMemberPlus;
 import com.ym.mec.biz.dal.entity.ImGroupPlus;
 import com.ym.mec.biz.dal.enums.EFriendRoleType;
@@ -14,6 +15,7 @@ import com.ym.mec.biz.dal.enums.im.EImGroupRoleType;
 import com.ym.mec.biz.dal.wrapper.ImGroupMemberWrapper;
 import com.ym.mec.biz.dal.wrapper.ImGroupWrapper;
 import com.ym.mec.biz.service.ImGroupMemberPlusService;
+import com.ym.mec.biz.service.ImGroupMemberService;
 import com.ym.mec.biz.service.ImGroupPlusService;
 import com.ym.mec.biz.service.im.ImGroupCoreService;
 import com.ym.mec.common.exception.BizException;
@@ -44,6 +46,8 @@ public class ImGroupCoreServiceImpl implements ImGroupCoreService {
     private ImGroupPlusService imGroupService;
     @Autowired
     private ImGroupMemberPlusService imGroupMemberPlusService;
+    @Autowired
+    private ImGroupMemberService imGroupMemberService;
 
     /**
      * IM 用户注册
@@ -176,8 +180,24 @@ public class ImGroupCoreServiceImpl implements ImGroupCoreService {
 
         if (userInfo != null) {
             // 添加群成员到当前群组
-            imPluginContext.getPluginService().groupJoin(imGroup.getGroupId(), imGroup.getName(),
-                    getImGroupMembers(groupMembers));
+            List<GroupMemberWrapper.ImGroupMember> imGroupMembers = getImGroupMembers(groupMembers);
+            imPluginContext.getPluginService().groupJoin(imGroup.getGroupId(), imGroup.getName(),imGroupMembers);
+            //设置管理员
+            groupMembers.stream().filter(o -> StringUtils.isNotEmpty(o.getGroupRoleType()) && !StringUtils.equals(o.getGroupRoleType(),"Member")).forEach(o -> {
+                try {
+                    imPluginContext.getPluginService().groupAdminCreate(o.getGroupId(), o.getImUserId());
+                } catch (Exception e) {
+                    log.error("groupAdminCreate error", e);
+                }
+            });
+            //转让群主
+            imGroupMembers.stream().filter(GroupMemberWrapper.ImGroupMember::getIsAdmin).forEach(o -> {
+                try {
+                    changeGroupOwner(imGroup.getGroupId(), o.getImUserId(), null);
+                } catch (Exception e) {
+                    log.error("changeGroupOwner error", e);
+                }
+            });
         }
         return group.getId();
     }
@@ -195,7 +215,7 @@ public class ImGroupCoreServiceImpl implements ImGroupCoreService {
             imGroupMember.setRoleType(o.getRoleType());
             imGroupMember.setType(EFriendRoleType.getByName(o.getRoleType()).name());
             imGroupMember.setTenantId(o.getTenantId());
-
+            imGroupMember.setGroupRoleType(o.getGroupRoleType());
             return imGroupMember;
         }).collect(Collectors.toList());
 
@@ -438,20 +458,26 @@ public class ImGroupCoreServiceImpl implements ImGroupCoreService {
 
             // 过滤出需要添加到群组的成员
             groupMembers = groupMembers.stream().filter(ImGroupMemberWrapper.ImGroupMember::getGroupJoin).collect(Collectors.toList());
-
             // 添加群成员到当前群组
-            imPluginContext.getPluginService().groupJoin(imGroup.getId(), imGroup.getName(), getImGroupMembers(groupMembers));
-            // 设置管理员
-            for (ImGroupMemberWrapper.ImGroupMember groupMember : groupMembers) {
-                if (groupMember.getGroupRoleType() != null) {
-                    if(groupMember.getGroupRoleType().equals(EImGroupRoleType.Admin.getCode())){
-                        imPluginContext.getPluginService().groupAdminCreate(imGroup.getId(),groupMember.getImUserId());
-                    }
-                    if(groupMember.getGroupRoleType().equals(EImGroupRoleType.Owner.getCode())){
-                        imPluginContext.getPluginService().changeGroupOwner(imGroup.getId(),groupMember.getImUserId(),null);
-                    }
+            List<GroupMemberWrapper.ImGroupMember> imGroupMembers = getImGroupMembers(groupMembers);
+            imPluginContext.getPluginService().groupJoin(imGroup.getId(), imGroup.getName(), imGroupMembers);
+            //设置管理员
+            groupMembers.stream().filter(o -> StringUtils.isNotEmpty(o.getGroupRoleType()) && !StringUtils.equals(o.getGroupRoleType(),"Member")).forEach(o -> {
+                try {
+                    imPluginContext.getPluginService().groupAdminCreate(imGroupId, o.getImUserId());
+                } catch (Exception e) {
+                    log.error("groupAdminCreate error", e);
                 }
-            }
+            });
+            //转让群主
+            imGroupMembers.stream().filter(GroupMemberWrapper.ImGroupMember::getIsAdmin).forEach(o -> {
+                try {
+                    changeGroupOwner(imGroup.getId(), o.getImUserId(), null);
+                } catch (Exception e) {
+                    log.error("changeGroupOwner error", e);
+                }
+            });
+
             // 自动激活用户
             asyncRegisterUser(groupMembers);
         }
@@ -473,26 +499,30 @@ public class ImGroupCoreServiceImpl implements ImGroupCoreService {
         if (Objects.isNull(imGroup)) {
             throw new BizException("群组不存在");
         }
-
         // 添加群组成员信息
         if (CollectionUtils.isEmpty(groupMembers)) {
             // 群成员为空,直接忽略
             return;
         }
-
         // 添加群成员到当前群组
-        imPluginContext.getPluginService().groupJoin(imGroup.getId(), imGroup.getName(), getImGroupMembers(groupMembers));
-        // 设置管理员
-        for (ImGroupMemberWrapper.ImGroupMember groupMember : groupMembers) {
-            if (groupMember.getGroupRoleType() != null) {
-                if(groupMember.getGroupRoleType().equals(EImGroupRoleType.Admin.getCode())){
-                    imPluginContext.getPluginService().groupAdminCreate(imGroup.getId(),groupMember.getImUserId());
-                }
-                if(groupMember.getGroupRoleType().equals(EImGroupRoleType.Owner.getCode())){
-                    imPluginContext.getPluginService().changeGroupOwner(imGroup.getId(),groupMember.getImUserId(),null);
-                }
+        List<GroupMemberWrapper.ImGroupMember> imGroupMembers = getImGroupMembers(groupMembers);
+        imPluginContext.getPluginService().groupJoin(imGroup.getId(), imGroup.getName(),imGroupMembers);
+        //设置管理员
+        groupMembers.stream().filter(o -> StringUtils.isNotEmpty(o.getGroupRoleType()) && !StringUtils.equals(o.getGroupRoleType(),"Member")).forEach(o -> {
+            try {
+                imPluginContext.getPluginService().groupAdminCreate(imGroupId, o.getImUserId());
+            } catch (Exception e) {
+                log.error("groupAdminCreate error", e);
             }
-        }
+        });
+        //转让群主
+        imGroupMembers.stream().filter(GroupMemberWrapper.ImGroupMember::getIsAdmin).forEach(o -> {
+            try {
+                changeGroupOwner(imGroup.getId(), o.getImUserId(), null);
+            } catch (Exception e) {
+                log.error("changeGroupOwner error", e);
+            }
+        });
         // 自动激活用户
         asyncRegisterUser(groupMembers);
 
@@ -524,9 +554,26 @@ public class ImGroupCoreServiceImpl implements ImGroupCoreService {
      */
     @Override
     public void changeGroupOwner(String groupId, String newOwner, String oldOwner) throws Exception {
-
+        if(StringUtils.isEmpty(oldOwner)){
+            //获取群主信息
+            TencentWrapper.GroupInfoResult groupInfo = imPluginContext.getPluginService().getGroupInfo(groupId);
+            List<TencentWrapper.GroupInfo> groupInfoList = groupInfo.getGroupInfo();
+            if(CollectionUtils.isNotEmpty(groupInfoList)){
+                oldOwner = groupInfoList.get(0).getOwnerAccount();
+            }
+        }
         // 转主群主
         imPluginContext.getPluginService().changeGroupOwner(groupId, newOwner, oldOwner);
+        //设置管理员
+        if(StringUtils.isNotEmpty(oldOwner)){
+            ImGroupMemberPlus one = imGroupMemberPlusService.lambdaQuery().eq(ImGroupMemberPlus::getImGroupId, groupId)
+                    .eq(ImGroupMemberPlus::getUserId, Long.parseLong(oldOwner)).last("LIMIT 1").one();
+            if(Objects.nonNull(one)){
+                if(StringUtils.isNotEmpty(one.getGroupRoleType()) && !StringUtils.equals(one.getGroupRoleType(),"Member")){
+                    imPluginContext.getPluginService().groupAdminCreate(groupId, oldOwner);
+                }
+            }
+        }
     }
 
     /**

+ 46 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CbsUserServiceImpl.java

@@ -0,0 +1,46 @@
+package com.ym.mec.biz.service.impl;
+
+import com.dayaedu.cbs.common.enums.EClientType;
+import com.dayaedu.cbs.openfeign.service.CbsUserService;
+import com.dayaedu.cbs.openfeign.wrapper.user.CbsUserWrapper;
+import com.ym.mec.biz.dal.dao.TeacherDao;
+import com.ym.mec.biz.dal.dto.SimpleUserDto;
+import org.apache.commons.collections.CollectionUtils;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Optional;
+
+@Service
+public class CbsUserServiceImpl implements CbsUserService {
+
+    @Resource
+    private TeacherDao teacherDao;
+
+    @Override
+    public List<CbsUserWrapper.User> list(CbsUserWrapper.UserQuery query) {
+        if (query == null || CollectionUtils.isEmpty(query.getUserIds())) {
+            return new ArrayList<>();
+        }
+        List<Integer> userIds = new ArrayList<>();
+        for (Long userId : query.getUserIds()) {
+            userIds.add(userId.intValue());
+        }
+        List<SimpleUserDto> userDtoList = teacherDao.getUsersSimpleInfo(userIds);
+        List<CbsUserWrapper.User> result = new ArrayList<>();
+        if (CollectionUtils.isNotEmpty(userDtoList)){
+            for (SimpleUserDto simpleUserDto : userDtoList) {
+                CbsUserWrapper.User user = new CbsUserWrapper.User();
+                user.setId(simpleUserDto.getUserId().longValue());
+                user.setUsername(query.getClientType() == null || query.getClientType() == EClientType.STUDENT ?
+                        simpleUserDto.getNickName() : Optional.ofNullable(simpleUserDto.getUserName()).orElse(simpleUserDto.getNickName()));
+                user.setPhone(simpleUserDto.getPhone());
+                result.add(user);
+            }
+        }
+        return result;
+    }
+
+}

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

@@ -431,7 +431,7 @@ public class ChildrenDayReserveServiceImpl extends BaseServiceImpl<Integer, Chil
                 sysUserCashAccountService.updateBalance(studentPaymentOrder.getUserId(), studentPaymentOrder.getBalancePaymentAmount(), PlatformCashAccountDetailTypeEnum.REFUNDS, "6.1考级支付失败");
             }
 
-            sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.STUDENT_SMS_PUSH_SPORADIC_PAYMENT_FAILED, map, null, 0, null, "STUDENT",
+            sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.STUDENT_PUSH_SPORADIC_PAYMENT_FAILED, map, null, 0, null, "STUDENT",
                     studentPaymentOrder.getActualAmount(), "6.1考级活动");
             return false;
         }

+ 10 - 7
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupServiceImpl.java

@@ -2,6 +2,7 @@ package com.ym.mec.biz.service.impl;
 
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
+import com.microsvc.toolkit.middleware.im.ImPluginContext;
 import com.microsvc.toolkit.middleware.im.message.GroupMemberWrapper;
 import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
@@ -168,7 +169,8 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
     private CooperationOrganService cooperationOrganService;
     @Autowired
     private ClassGroupTeacherMapperDao classGroupTeacherMapperDao;
-
+    @Autowired
+    private ImPluginContext imPluginContext;
     @Autowired
     private ImLiveBroadcastRoomMemberService imLiveBroadcastRoomMemberService;
 
@@ -260,7 +262,7 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
             teacherIdList.add(tm.getUserId());
         }
 
-        if (teacherMapperList.size() > 0) {
+        if (CollectionUtils.isNotEmpty(teacherMapperList)) {
             classGroupTeacherMapperService.getDao().classGroupTeachersInsert(teacherMapperList);
         }
 
@@ -285,12 +287,12 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
 
             userIdList.add(Integer.parseInt(userId));
         }
-        if (classGroupStudentList.size() > 0) {
+        if (CollectionUtils.isNotEmpty(classGroupStudentList)) {
             classGroupStudentMapperDao.classGroupStudentsInsert(classGroupStudentList);
         }
 
         // 加入IM群组
-        if (userIdList.size() > 0) {
+        if (CollectionUtils.isNotEmpty(userIdList)) {
             addImGroup(classGroup, userIdList, teacherIdList);
         } else {
             MusicGroup musicGroup = musicGroupDao.get(classGroup.getMusicGroupId());
@@ -304,7 +306,7 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
             if (musicGroup.getTransactionTeacherId() != null) {
                 userRoleMap.put(musicGroup.getTransactionTeacherId(), "衔接老师");
             }
-            if (teacherIdList != null && teacherIdList.size() > 0) {
+            if (CollectionUtils.isNotEmpty(teacherIdList)) {
                 for (Integer teacherId : teacherIdList) {
                     userRoleMap.put(teacherId, "指导老师");
                 }
@@ -3590,7 +3592,7 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public int updateClassGroup(ClassGroup classGroup) {
+    public int updateClassGroup(ClassGroup classGroup) throws Exception {
         ClassGroup group = classGroupDao.get(classGroup.getId());
         if (Objects.isNull(group)) {
             throw new BizException("班级信息不存在");
@@ -3604,6 +3606,7 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
         if (!Objects.isNull(imGroup)) {
             imGroup.setName(groupName);
             imGroupService.update(imGroup);
+            imPluginContext.getPluginService().modifyGroupInfo(imGroup.getId(),imGroup.getName(),imGroup.getImg());
         }
         return 1;
     }
@@ -3948,7 +3951,7 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
             userRoleMap.put(userId, "");
         }
 
-        if (teacherIdList != null && teacherIdList.size() > 0) {
+        if (CollectionUtils.isNotEmpty(teacherIdList)) {
             for (Integer teacherId : teacherIdList) {
                 userRoleMap.put(teacherId, "指导老师");
             }

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

@@ -968,13 +968,13 @@ public class EduPracticeGroupServiceImpl implements EduPracticeGroupService{
         try{
             Map<Integer, String> userMap = new HashMap<>();
             userMap.put(practiceGroup.getStudentId(), practiceGroup.getStudentId().toString());
-            sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.STUDENT_SMS_PUSH_PAY_PRACTICE_BUY_SUCCESS,
+            sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.STUDENT_PUSH_PAY_PRACTICE_BUY_SUCCESS,
                     userMap, null, 0, null, "STUDENT", groupStartTime, groupEndTime, teacherName, drillTimesOnWeek, firstCourseStartTime);
 //            SysUser student = sysUserFeignService.queryUserById(practiceGroup.getStudentId());
             SysUser student = teacherDao.getUser(practiceGroup.getStudentId());
             Map<Integer, String> userPhoneMap = new HashMap<>();
             userPhoneMap.put(practiceGroup.getStudentId(), student.getPhone());
-            sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.AWSMS, MessageTypeEnum.STUDENT_SMS_PUSH_PAY_PRACTICE_BUY_SUCCESS,
+            sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.AWSMS, MessageTypeEnum.STUDENT_SMS_PAY_PRACTICE_BUY_SUCCESS,
                     userPhoneMap, null, 0, null, "STUDENT", groupStartTime, groupEndTime, teacherName, drillTimesOnWeek, firstCourseStartTime);
 
             String practiceType = "网管课";
@@ -993,12 +993,12 @@ public class EduPracticeGroupServiceImpl implements EduPracticeGroupService{
 
             Map<Integer, String> teacherMap = new HashMap<>();
             teacherMap.put(practiceGroup.getUserId(), practiceGroup.getUserId().toString());
-            sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.TEACHER_SMS_PUSH_PRACTICE_CREATE,
+            sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.TEACHER_PUSH_PRACTICE_CREATE,
                     teacherMap, null, 0, null, "TEACHER", teacher.getRealName(),
                     practiceType, practiceGroup.getName());
             Map<Integer, String> teacherPhoneMap = new HashMap<>();
             teacherPhoneMap.put(practiceGroup.getUserId(), teacher.getPhone());
-            sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.YIMEI, MessageTypeEnum.TEACHER_SMS_PUSH_PRACTICE_CREATE,
+            sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.YIMEI, MessageTypeEnum.TEACHER_SMS_PRACTICE_CREATE,
                     teacherPhoneMap, null, 0, null, "TEACHER", teacher.getRealName(),
                     practiceType, practiceGroup.getName());
         }catch (Exception e){
@@ -1549,12 +1549,12 @@ public class EduPracticeGroupServiceImpl implements EduPracticeGroupService{
 
             Map<Integer, String> teacherMap = new HashMap<>();
             teacherMap.put(practiceGroupBuyParams.getUserId(), practiceGroupBuyParams.getUserId().toString());
-            sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.TEACHER_SMS_PUSH_PRACTICE_CREATE,
+            sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.TEACHER_PUSH_PRACTICE_CREATE,
                     teacherMap, null, 0, null, "TEACHER", teacher.getRealName(),
                     practiceType, practiceGroupBuyParams.getName());
             Map<Integer, String> teacherPhoneMap = new HashMap<>();
             teacherPhoneMap.put(practiceGroupBuyParams.getUserId(), teacher.getPhone());
-            sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.YIMEI, MessageTypeEnum.TEACHER_SMS_PUSH_PRACTICE_CREATE,
+            sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.YIMEI, MessageTypeEnum.TEACHER_SMS_PRACTICE_CREATE,
                     teacherPhoneMap, null, 0, null, "TEACHER", teacher.getRealName(),
                     practiceType, practiceGroupBuyParams.getName());
         }catch (Exception e){

+ 9 - 2
mec-biz/src/main/java/com/ym/mec/biz/service/impl/EmployeeServiceImpl.java

@@ -22,6 +22,7 @@ import com.microsvc.toolkit.middleware.im.ImPluginContext;
 import com.microsvc.toolkit.middleware.im.impl.RongCloudImPlugin;
 import com.microsvc.toolkit.middleware.im.message.GroupMemberWrapper;
 import com.ym.mec.biz.dal.dto.SimpleUserDto;
+import com.ym.mec.biz.dal.enums.EFriendRoleType;
 import com.ym.mec.biz.dal.enums.im.ClientEnum;
 import com.ym.mec.biz.dal.enums.im.EImGroupRoleType;
 import com.ym.mec.biz.dal.wrapper.ImGroupMemberWrapper;
@@ -529,6 +530,9 @@ public class EmployeeServiceImpl extends BaseServiceImpl<Integer, Employee> impl
                 imGroupMember.setImGroupId(imGroupModel.getId());
                 imGroupMember.setIsAdmin(false);
                 imGroupMember.setRoleType(imGroupModel.getUserRole());
+                if(StringUtils.isNotEmpty(imGroupModel.getUserRole())){
+                    imGroupMember.setType(EFriendRoleType.getByName(imGroupModel.getUserRole()).name());
+                }
                 imGroupMember.setUpdateTime(date);
                 imGroupMember.setUserId(Integer.parseInt(userId));
                 imGroupMember.setNickname(realNameMap.get(imGroupMember.getUserId()));
@@ -568,10 +572,13 @@ public class EmployeeServiceImpl extends BaseServiceImpl<Integer, Employee> impl
                             for (ImGroupMemberWrapper.ImGroupMember member : entry.getValue()) {
 //                                member.setAvatar(avatarMap.getOrDefault(member.getUserId().intValue(), ""));
                                 SysUser user = teacherDao.getUser(member.getUserId().intValue());
-
                                 // 用户头像
                                 member.setAvatar(sysUserService.getImAvatar(user));
-                                member.setNickname(sysUserService.getImName(user));
+                                if(StringUtils.isNotEmpty(member.getRoleType())){
+                                    member.setNickname(StringUtils.isEmpty(user.getRealName())?user.getUsername():user.getRealName());
+                                }else {
+                                    member.setNickname(StringUtils.isEmpty(user.getUsername())?user.getRealName():user.getUsername());
+                                }
                             }
                             // 腾讯云用户加群
                             imGroupCoreService.groupMemberJoin(entry.getKey(), entry.getValue());

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

@@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.dayaedu.cbs.common.enums.EClientType;
 import com.microsvc.toolkit.middleware.oss.OssPluginContext;
 import com.microsvc.toolkit.middleware.oss.impl.TencentOssPlugin;
 import com.ym.mec.biz.dal.dao.GoodsDao;
@@ -964,7 +965,7 @@ public class GoodsServiceImpl extends BaseServiceImpl<Integer, Goods>  implement
 		if(StringUtils.isNotEmpty(innerRepertoryWarnNum)){
 			String goodsNames = goodsDao.getInnerRepertoryWarnName(innerRepertoryWarnNum);
 			if(StringUtils.isNotEmpty(goodsNames)){
-				sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.AWSMS, MessageTypeEnum.SYSTEM_SMS_GOODS_REPERTORY_WARN, receivers, null, 0, null,null,
+				sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.AWSMS, MessageTypeEnum.SYSTEM_SMS_GOODS_REPERTORY_WARN, receivers, null, 0, null, EClientType.BACKEND.getCode(),
 						goodsNames,"内部");
 			}
 		}
@@ -974,7 +975,7 @@ public class GoodsServiceImpl extends BaseServiceImpl<Integer, Goods>  implement
 		if(StringUtils.isNotEmpty(outerRepertoryWarnNum)){
 			String goodsNames = goodsDao.getOuterRepertoryWarnName(outerRepertoryWarnNum);
 			if(StringUtils.isNotEmpty(goodsNames)){
-				sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.YIMEI, MessageTypeEnum.SYSTEM_SMS_GOODS_REPERTORY_WARN, receivers, null, 0, null,null,
+				sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.YIMEI, MessageTypeEnum.SYSTEM_SMS_GOODS_REPERTORY_WARN, receivers, null, 0, null,EClientType.BACKEND.getCode(),
 						goodsNames,"税务");
 			}
 		}

+ 61 - 26
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ImGroupMemberServiceImpl.java

@@ -10,6 +10,7 @@ import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.dao.*;
 import com.ym.mec.biz.dal.dto.ImGroupMemberDto;
 import com.ym.mec.biz.dal.entity.*;
+import com.ym.mec.biz.dal.enums.EFriendRoleType;
 import com.ym.mec.biz.dal.enums.GroupType;
 import com.ym.mec.biz.dal.page.GroupMemberQueryInfo;
 import com.ym.mec.biz.dal.wrapper.ImGroupMemberWrapper;
@@ -141,24 +142,28 @@ public class ImGroupMemberServiceImpl extends BaseServiceImpl<Long, ImGroupMembe
 			return true;
 		}
 		//检查用户是否已存在
-		List<ImGroupMember> imGroupMemberList = imGroupMemberDao.queryByImGroupIdAndUserId(imGroupId.toString(), userId.toString());
-		if(imGroupMemberList != null && imGroupMemberList.size() > 0){
+		List<ImGroupMember> imGroupMemberList = imGroupMemberDao.queryByImGroupIdAndUserId(imGroupId, userId.toString());
+		if(CollectionUtils.isNotEmpty(imGroupMemberList)){
 			return true;
 		}
-
 		ImGroupMember imGroupMember = new ImGroupMember();
 		Date date = new Date();
 		imGroupMember.setGroupType(imGroup.getGroupType());
 		imGroupMember.setCreateTime(date);
 		imGroupMember.setImGroupId(imGroupId);
 		imGroupMember.setIsAdmin(isAdmin);
+		SysUser user = teacherDao.getUser(userId);
 		imGroupMember.setRoleType(roleType);
+		if(StringUtils.isNotEmpty(roleType)){
+			imGroupMember.setType(EFriendRoleType.getByName(roleType).name());
+			imGroupMember.setNickname(StringUtils.isEmpty(user.getRealName())?user.getUsername():user.getRealName());
+		}else {
+			imGroupMember.setNickname(StringUtils.isEmpty(user.getUsername())?user.getRealName():user.getUsername());
+		}
 		imGroupMember.setUpdateTime(date);
 		imGroupMember.setUserId(userId);
 		//初始化群主数据
 		this.initImGroupMember(imGroupMember,imGroup.getGroupType());
-		SysUser user = teacherDao.getUser(userId);
-        imGroupMember.setNickname(sysUserService.getImName(user));
 
 		imGroupMemberDao.insert(imGroupMember);
 
@@ -178,8 +183,9 @@ public class ImGroupMemberServiceImpl extends BaseServiceImpl<Long, ImGroupMembe
 
 				groupMembers.add(ImGroupMemberWrapper.ImGroupMember.builder()
 						.groupId(groupId)
-						.isAdmin(StringUtils.isNotEmpty(roleType))
-						.roleType(roleType)
+						.isAdmin(imGroupMember.getIsAdmin())
+						.roleType(imGroupMember.getRoleType())
+						.type(imGroupMember.getType())
 						.nickname(imGroupMember.getNickname())
 						.userId(userId.longValue())
 						.imUserId(userId.toString())
@@ -197,6 +203,7 @@ public class ImGroupMemberServiceImpl extends BaseServiceImpl<Long, ImGroupMembe
 		return true;
 	}
 
+	@Override
 	public void initImGroupMember(ImGroupMember imGroupMember, ImGroup.GroupTypeEnum groupType){
 		try {
 			List<GroupMemberWrapper.Member> members = imPluginContext.getPluginService().groupUserGagList(imGroupMember.getImGroupId());
@@ -253,6 +260,7 @@ public class ImGroupMemberServiceImpl extends BaseServiceImpl<Long, ImGroupMembe
 		}
 	}
 
+	@Override
 	public void initImGroupMembers(List<ImGroupMember> imGroupMembers, ImGroup.GroupTypeEnum groupType){
 		if (CollectionUtils.isEmpty(imGroupMembers)) {
 			return;
@@ -333,8 +341,8 @@ public class ImGroupMemberServiceImpl extends BaseServiceImpl<Long, ImGroupMembe
 			return true;
 		}
 		//检查用户是否已存在
-		List<ImGroupMember> imGroupMemberList = imGroupMemberDao.queryByImGroupIdAndUserId(imGroupId.toString(), user.getId().toString());
-		if(imGroupMemberList != null && imGroupMemberList.size() > 0){
+		List<ImGroupMember> imGroupMemberList = imGroupMemberDao.queryByImGroupIdAndUserId(imGroupId, user.getId().toString());
+		if(CollectionUtils.isNotEmpty(imGroupMemberList)){
 			return true;
 		}
 
@@ -345,17 +353,22 @@ public class ImGroupMemberServiceImpl extends BaseServiceImpl<Long, ImGroupMembe
 		imGroupMember.setImGroupId(imGroupId);
 		imGroupMember.setIsAdmin(isAdmin);
 		imGroupMember.setRoleType(roleType);
+		if(StringUtils.isNotEmpty(roleType)){
+			imGroupMember.setType(EFriendRoleType.getByName(roleType).name());
+			imGroupMember.setNickname(StringUtils.isEmpty(user.getRealName())?user.getUsername():user.getRealName());
+		}else {
+			imGroupMember.setNickname(StringUtils.isEmpty(user.getUsername())?user.getRealName():user.getUsername());
+		}
 		imGroupMember.setUpdateTime(date);
 		imGroupMember.setUserId(user.getId());
 		this.initImGroupMember(imGroupMember,imGroup.getGroupType());
-        imGroupMember.setNickname(sysUserService.getImName(user));
 		imGroupMemberDao.insert(imGroupMember);
 
 		imGroup.setMemberNum(1);
 		imGroup.setUpdateTime(date);
 		imGroupDao.update(imGroup);
 
-		String groupId = imGroup.getId().toString();
+		String groupId = imGroup.getId();
 
 		if (RongCloudImPlugin.PLUGIN_NAME.equals(imPluginContext.defaultService())) {
 			// 融云IM用户加群
@@ -371,9 +384,10 @@ public class ImGroupMemberServiceImpl extends BaseServiceImpl<Long, ImGroupMembe
 						.userId(imGroupMember.getUserId().longValue())
 						.imUserId(imGroupMember.getUserId().toString())
 						.nickname(imGroupMember.getNickname())
-						.isAdmin(StringUtils.isNotEmpty(imGroupMember.getGroupRoleType()))
+						.isAdmin(imGroupMember.getIsAdmin())
 						.groupRoleType(imGroupMember.getGroupRoleType())
 						.roleType(imGroupMember.getRoleType())
+						.type(imGroupMember.getType())
 						.avatar(sysUserService.getImAvatar(user))
 					.build());
 				// 腾讯云IM用户加群
@@ -421,6 +435,7 @@ public class ImGroupMemberServiceImpl extends BaseServiceImpl<Long, ImGroupMembe
 			if(StringUtils.isEmpty(entry.getValue())){
 				usernameIds.add(entry.getKey());
 			}else {
+				imGroupMember.setType(EFriendRoleType.getByName(entry.getValue()).name());
 				realNameIds.add(entry.getKey());
 			}
 			imGroupMember.setUpdateTime(date);
@@ -434,22 +449,24 @@ public class ImGroupMemberServiceImpl extends BaseServiceImpl<Long, ImGroupMembe
 					.groupId(groupId)
 					.userId(imGroupMember.getUserId().longValue())
 					.imUserId(imGroupMember.getUserId().toString())
-					.isAdmin(StringUtils.isNotEmpty(imGroupMember.getRoleType()))
+					.isAdmin(imGroupMember.getIsAdmin())
+					.nickname(imGroupMember.getNickname())
 					.groupRoleType(imGroupMember.getGroupRoleType())
 					.roleType(imGroupMember.getRoleType())
+					.type(imGroupMember.getType())
 					.updateTime(imGroupMember.getUpdateTime())
 					.createTime(imGroupMember.getCreateTime())
 				.build());
 		}
 
 
-		if (imGroupMemberList.size() > 0) {
+		if (CollectionUtils.isNotEmpty(imGroupMemberList)) {
 			Map<Integer, String> usernameMap = new HashMap<>();
 			Map<Integer, String> realNameMap = new HashMap<>();
-			if(usernameIds.size() > 0){
+			if(CollectionUtils.isNotEmpty(usernameIds)){
 				usernameMap = MapUtil.convertIntegerMap(teacherDao.queryUserNameByIdList(usernameIds));
 			}
-			if(realNameIds.size() > 0){
+			if(CollectionUtils.isNotEmpty(realNameIds)){
 				realNameMap = MapUtil.convertIntegerMap(teacherDao.queryNameByIdList(realNameIds));
 			}
 			for (ImGroupMember imGroupMember : imGroupMemberList) {
@@ -477,7 +494,11 @@ public class ImGroupMemberServiceImpl extends BaseServiceImpl<Long, ImGroupMembe
 						if (user != null) {
 							// 用户头像
 							item.setAvatar(sysUserService.getImAvatar(user));
-							item.setNickname(sysUserService.getImName(user));
+							if(StringUtils.isNotEmpty(item.getRoleType())){
+								item.setNickname(StringUtils.isEmpty(user.getRealName())?user.getUsername():user.getRealName());
+							}else {
+								item.setNickname(StringUtils.isEmpty(user.getUsername())?user.getRealName():user.getUsername());
+							}
 						}
 					}
 					// 腾讯云IM用户加群
@@ -558,20 +579,31 @@ public class ImGroupMemberServiceImpl extends BaseServiceImpl<Long, ImGroupMembe
 	public boolean updateRoleType(String imGroupId, Integer userId, String roleType) {
 		List<Integer> userIdList = new ArrayList<Integer>();
 		userIdList.add(userId);
-		List<ImGroupMember> imGroupMemberList = imGroupMemberDao.queryByImGroupIdAndUserId(imGroupId.toString(), userIdList.stream().map(Objects::toString)
+		List<ImGroupMember> imGroupMemberList = imGroupMemberDao.queryByImGroupIdAndUserId(imGroupId, userIdList.stream().map(Objects::toString)
 				.collect(Collectors.joining(",")));
 
-		if (imGroupMemberList == null || imGroupMemberList.size() == 0) {
+		if (CollectionUtils.isEmpty(imGroupMemberList)) {
 			throw new BizException("更新失败:找不到用户信息");
 		}
-
 		Date date = new Date();
-		for (ImGroupMember imGroupMember : imGroupMemberList) {
-			imGroupMember.setRoleType(roleType);
-			imGroupMember.setUpdateTime(date);
+		ImGroupMember imGroupMember = imGroupMemberList.get(0);
+		imGroupMember.setGroupRoleType(null);
+		imGroupMember.setRoleType(roleType);
+		imGroupMember.setType(EFriendRoleType.getByName(roleType).name());
+		imGroupMember.setUpdateTime(date);
+		ImGroup group = imGroupDao.get(imGroupId);
+		if(!imGroupMember.getIsAdmin()){
+			this.initImGroupMembers(imGroupMemberList,group.getGroupType());
+			if(imGroupMember.getIsAdmin()){
+				try {
+					imPluginContext.getPluginService().changeGroupOwner(imGroupId,imGroupMember.getUserId().toString(),null);
+				} catch (Exception e) {
+					log.error(e.getMessage());
+					throw new BizException("更新失败:设置群主异常");
+				}
+			}
 		}
-		imGroupMemberDao.batchUpdate(imGroupMemberList);
-
+		imGroupMemberDao.update(imGroupMember);
 		return true;
 	}
 
@@ -594,6 +626,9 @@ public class ImGroupMemberServiceImpl extends BaseServiceImpl<Long, ImGroupMembe
 
     @Override
     public PageInfo<ImGroupMemberDto> queryGroupMemberPage(GroupMemberQueryInfo queryInfo) {
+		if(StringUtils.isEmpty(queryInfo.getImGroupId())){
+			throw new BizException("参数校验失败");
+		}
 		PageInfo<ImGroupMemberDto> pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
 		Map<String, Object> params = new HashMap<String, Object>();
 		MapUtil.populateMap(params, queryInfo);
@@ -629,7 +664,7 @@ public class ImGroupMemberServiceImpl extends BaseServiceImpl<Long, ImGroupMembe
 			ImPluginService pluginService = imPluginContext.getPluginService();
 			if (member.getGroupMute()) {
 				// 群成员禁言
-				pluginService.groupUserGagCreate(member.getUserIds(), member.getGroupId(), member.getMuteTime().longValue());
+				pluginService.groupUserGagCreate(member.getUserIds(), member.getGroupId(), -1L);
 			} else {
 				// 群成员解除禁言
 				pluginService.groupUserGagRemove(member.getUserIds(), member.getGroupId());

+ 66 - 56
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ImGroupServiceImpl.java

@@ -189,21 +189,27 @@ public class ImGroupServiceImpl extends BaseServiceImpl<String, ImGroup> impleme
 
     private String createImGroup(ImGroup imGroup, Integer userId, String roleType) throws Exception {
         ImGroupWrapper.ImGroup group = ImGroupWrapper.ImGroup.from(JSON.toJSONString(imGroup));
-
         //记录群成员
         com.ym.mec.biz.dal.wrapper.ImGroupMemberWrapper.ImGroupMember groupMember = null;
         if (userId != null) {
             SysUser sysUser = teacherDao.getUser(userId);
-            groupMember = ImGroupMemberWrapper.ImGroupMember
-                    .builder()
-                    .userId(userId.longValue())
-                    .clientType("")
-                    .avatar(sysUserService.getImAvatar(sysUser))
-                    .nickname(sysUserService.getImName(sysUser))
-                    .roleType(roleType)
-                    .tenantId(Optional.ofNullable(imGroup.getTenantId()).orElse(TenantContextHolder.getTenantId()))
-                    .isAdmin(true)
-                    .build();
+            groupMember = new ImGroupMemberWrapper.ImGroupMember();
+            groupMember.setUserId(userId.longValue());
+            groupMember.setClientType("");
+            groupMember.setAvatar(sysUserService.getImAvatar(sysUser));
+            groupMember.setRoleType(roleType);
+            groupMember.setTenantId(Optional.ofNullable(imGroup.getTenantId()).orElse(TenantContextHolder.getTenantId()));
+            groupMember.setGroupRoleType(StringUtils.isEmpty(roleType)?EImGroupRoleType.Member.getCode():EImGroupRoleType.Admin.getCode());
+            if(StringUtils.isNotEmpty(roleType)){
+                groupMember.setType(EFriendRoleType.getByName(roleType).name());
+                groupMember.setNickname(StringUtils.isEmpty(sysUser.getRealName())?sysUser.getUsername():sysUser.getRealName());
+            }else {
+                groupMember.setNickname(StringUtils.isEmpty(sysUser.getUsername())?sysUser.getRealName():sysUser.getUsername());
+            }
+            if(StringUtils.equals(roleType,"乐团领队")){
+                groupMember.setIsAdmin(true);
+                groupMember.setGroupRoleType(EImGroupRoleType.Owner.getCode());
+            }
         }
         return imGroupCoreService.groupCreate(groupMember, group);
     }
@@ -232,8 +238,6 @@ public class ImGroupServiceImpl extends BaseServiceImpl<String, ImGroup> impleme
         imGroup.setType(type);
         imGroup.setGroupType(imGroupDto.getGroupType());
         imGroup.setUpdateTime(date);
-
-
         try {
             String imGroupId = createImGroup(imGroup, null, null);
             imGroup.setId(imGroupId);
@@ -241,12 +245,9 @@ public class ImGroupServiceImpl extends BaseServiceImpl<String, ImGroup> impleme
             log.error("群组创建失败",e);
             throw new BizException("群组创建失败");
         }
-
+        //当前用户不知道具体角色,由于是通过后台添加,所以默认给了乐团主管
         List<ImGroupMember> groupMemberList = imGroupMemberDao.queryMembers(groupId, userIdList, TenantContextHolder.getTenantId());
-        if(currentUserId != null){
-            groupMemberList.get(0).setRoleType("乐团主管");
-        }
-
+        imGroupMemberService.initImGroupMembers(groupMemberList,imGroup.getGroupType());
         addImGroupMember(groupId, groupMemberList);
         return groupId;
     }
@@ -261,11 +262,12 @@ public class ImGroupServiceImpl extends BaseServiceImpl<String, ImGroup> impleme
                     .userId(groupMember.getUserId().longValue())
                     .avatar(sysUserService.getImAvatar(user))
                     .nickname(sysUserService.getImName(user))
-                    .isAdmin(StringUtils.isNotEmpty(groupMember.getRoleType()))
+                    .isAdmin(groupMember.getIsAdmin())
                     .groupRoleType(groupMember.getGroupRoleType())
                     .tenantId(Optional.ofNullable(imGroup.getTenantId()).orElse(TenantContextHolder.getTenantId()))
                     .imUserId(getImUserId(groupMember.getUserId().toString(), ""))
                     .roleType(groupMember.getRoleType())
+                    .type(groupMember.getType())
                     .build());
         }
         try {
@@ -573,25 +575,32 @@ public class ImGroupServiceImpl extends BaseServiceImpl<String, ImGroup> impleme
             initSchoolGroup(imGroup.getSchoolId());
         } else {
             SysUser user = teacherDao.getUser(userId);
-            ImGroupMemberWrapper.ImGroupMember groupMember = ImGroupMemberWrapper.ImGroupMember.builder()
-                    .userId(userId.longValue())
-                    .nickname(sysUserService.getImName(user))
-                    .avatar(sysUserService.getImAvatar(user))
-                    .build();
-            imGroupCoreService.groupMemberJoin(imGroup.getId(), Lists.newArrayList(groupMember));
-            // 更新群主流程
-            if (schoolStaffType.equals(ESchoolStaffType.ORCHESTRA_LEADER)) {
-                groupChangeOwner(userId, imGroup.getId());
-            }
-
             ImGroupMember imGroupMember = new ImGroupMember();
             imGroupMember.setImGroupId(imGroup.getId());
             imGroupMember.setUserId(userId);
-            imGroupMember.setIsAdmin(schoolStaffType.equals(ESchoolStaffType.ORCHESTRA_LEADER));
             imGroupMember.setRoleType(schoolStaffType.getDescribe());
             imGroupMember.setNickname(name);
-            imGroupMember.setType(EFriendRoleType.getByName(schoolStaffType.getDescribe()).name());
+            if (StringUtils.isNotEmpty(schoolStaffType.getDescribe())) {
+                imGroupMember.setType(EFriendRoleType.getByName(schoolStaffType.getDescribe()).name());
+            }
             imGroupMember.setTenantId(imGroup.getTenantId());
+            imGroupMemberService.initImGroupMember(imGroupMember,imGroup.getGroupType());
+
+            ImGroupMemberWrapper.ImGroupMember groupMember = new ImGroupMemberWrapper.ImGroupMember();
+            groupMember.setUserId(userId.longValue());
+            groupMember.setImUserId(userId.toString());
+            groupMember.setNickname(name);
+            groupMember.setAvatar(sysUserService.getImAvatar(user));
+            groupMember.setGroupId(imGroupMember.getImGroupId());
+            groupMember.setType(imGroupMember.getType());
+            groupMember.setRoleType(imGroupMember.getRoleType());
+            groupMember.setGroupRoleType(imGroupMember.getGroupRoleType());
+            groupMember.setIsAdmin(imGroupMember.getIsAdmin());
+            imGroupCoreService.groupMemberJoin(imGroup.getId(), Lists.newArrayList(groupMember));
+            // 更新群主流程
+            /*if (schoolStaffType.equals(ESchoolStaffType.ORCHESTRA_LEADER)) {
+                groupChangeOwner(userId, imGroup.getId());
+            }*/
             imGroupMemberDao.insert(imGroupMember);
 
         }
@@ -670,13 +679,16 @@ public class ImGroupServiceImpl extends BaseServiceImpl<String, ImGroup> impleme
             imGroupMember.setUserId(groupMember.getUserId().intValue());
             imGroupMember.setIsAdmin(false);
             imGroupMember.setRoleType(groupMember.getRoleType());
-            imGroupMember.setType(EFriendRoleType.getByName(groupMember.getRoleType()).name());
+            imGroupMember.setNickname(groupMember.getNickname());
+            if (StringUtils.isNotEmpty(groupMember.getRoleType())) {
+                imGroupMember.setType(EFriendRoleType.getByName(groupMember.getRoleType()).name());
+            }
             imGroupMember.setTenantId(imGroup.getTenantId());
             imGroupMemberList.add(imGroupMember);
             groupMember.setImUserIdFormat(false);
         }
 
-
+        imGroupMemberService.initImGroupMembers(imGroupMemberList,imGroup.getGroupType());
         addImGroupMember(imGroup.getId(), imGroupMemberList);
         updateImGroupUserNumber(imGroup.getId());
     }
@@ -754,13 +766,9 @@ public class ImGroupServiceImpl extends BaseServiceImpl<String, ImGroup> impleme
         if (CollectionUtils.isEmpty(imGroupIds)) {
             return;
         }
-
         List<ImGroup> groupList = imGroupDao.getByIds(imGroupIds);
-
         // id 分组
         Map<String, ImGroup> map = groupList.stream().collect(Collectors.toMap(ImGroup::getId, Function.identity()));
-
-
         for (String musicGroupId : imGroupIds) {
             ImGroup imGroup = map.get(musicGroupId);
             if (imGroup == null) {
@@ -769,23 +777,33 @@ public class ImGroupServiceImpl extends BaseServiceImpl<String, ImGroup> impleme
             try {
 
                 SysUser user = teacherDao.getUser(userId.intValue());
-                ImGroupMemberWrapper.ImGroupMember groupMember = ImGroupMemberWrapper.ImGroupMember.builder()
-                    .userId(userId)
-                    .nickname(sysUserService.getImName(user))
-                    .avatar(sysUserService.getImAvatar(user))
-                    .build();
-                imGroupCoreService.groupMemberJoin(imGroup.getId(), Lists.newArrayList(groupMember));
-
                 ImGroupMember imGroupMember = new ImGroupMember();
                 imGroupMember.setImGroupId(imGroup.getId());
                 imGroupMember.setUserId(userId.intValue());
                 imGroupMember.setIsAdmin(false);
                 imGroupMember.setRoleType(roleType);
-                imGroupMember.setNickname(sysUserService.getImName(user));
+                if(StringUtils.isNotEmpty(roleType)){
+                    imGroupMember.setType(EFriendRoleType.getByName(roleType).name());
+                    imGroupMember.setNickname(StringUtils.isEmpty(user.getRealName())?user.getUsername():user.getRealName());
+                }else {
+                    imGroupMember.setNickname(StringUtils.isEmpty(user.getUsername())?user.getRealName():user.getUsername());
+                }
                 imGroupMember.setType(EFriendRoleType.getByName(roleType).name());
                 imGroupMember.setTenantId(imGroup.getTenantId());
-                imGroupMemberDao.insert(imGroupMember);
+                imGroupMemberService.initImGroupMember(imGroupMember,imGroup.getGroupType());
+
+                ImGroupMemberWrapper.ImGroupMember groupMember = new ImGroupMemberWrapper.ImGroupMember();
+                groupMember.setUserId(userId);
+                groupMember.setNickname(imGroupMember.getNickname());
+                groupMember.setAvatar(sysUserService.getImAvatar(user));
+                groupMember.setRoleType(roleType);
+                groupMember.setType(imGroupMember.getType());
+                groupMember.setGroupId(imGroupMember.getImGroupId());
+                groupMember.setGroupRoleType(imGroupMember.getGroupRoleType());
+                groupMember.setIsAdmin(imGroupMember.getIsAdmin());
+                imGroupCoreService.groupMemberJoin(imGroup.getId(), Lists.newArrayList(groupMember));
 
+                imGroupMemberDao.insert(imGroupMember);
                 updateImGroupUserNumber(imGroup.getId());
             } catch (Exception e) {
                 log.error("加入群聊失败",e);
@@ -857,7 +875,6 @@ public class ImGroupServiceImpl extends BaseServiceImpl<String, ImGroup> impleme
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void schoolJoinGroup(Integer cooperationOrganId, String imGroupId) {
-
         CooperationOrgan cooperationOrgan = cooperationOrganService.get(cooperationOrganId);
         if (cooperationOrgan == null) {
             return;
@@ -866,21 +883,13 @@ public class ImGroupServiceImpl extends BaseServiceImpl<String, ImGroup> impleme
         if (CollectionUtils.isEmpty(schoolStaffs)) {
             return;
         }
-
-
         // 查询群是否存在
         ImGroup imGroup = imGroupDao.get(imGroupId);
         if (imGroup == null) {
             return;
         }
-
-
         SchoolStaff schoolStaff = schoolStaffs.get(0);
-
-
-
         addImGroup(Lists.newArrayList(imGroup.getId()),schoolStaff.getUserId(),ESchoolStaffType.ORCHESTRA_LEADER.getDescribe());
-
     }
 
 
@@ -1932,6 +1941,7 @@ public class ImGroupServiceImpl extends BaseServiceImpl<String, ImGroup> impleme
         ImGroupWrapper.ConfigJson from = ImGroupWrapper.ConfigJson.from(imGroup.getConfigJson());
         from.setMute(groupMute.getMuteAll());
         imGroup.setConfigJson(JSON.toJSONString(from));
+        imGroup.setMemberNum(0);
         imGroupService.update(imGroup);
 
         // 调用IM接口

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

@@ -183,7 +183,7 @@ public class MusicGroupSchoolTermCourseDetailServiceImpl extends BaseServiceImpl
 					Map<Integer,String> userMap = new HashMap<>(1);
 					userMap.put(musicGroup.getEducationalTeacherId(),educationPhoneMap.get(musicGroup.getEducationalTeacherId()));
 					sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.AWSMS,
-							MessageTypeEnum.SYSTEM_REMIND_EDUCATION_COURSE_TIME,
+							MessageTypeEnum.SMS_SYSTEM_REMIND_EDUCATION_COURSE_TIME,
 							userMap,
 							null,
 							0,
@@ -193,7 +193,7 @@ public class MusicGroupSchoolTermCourseDetailServiceImpl extends BaseServiceImpl
 					Map<Integer,String> userMap1 = new HashMap<>(1);
 					userMap1.put(musicGroup.getEducationalTeacherId(),musicGroup.getEducationalTeacherId().toString());
 					sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG,
-							MessageTypeEnum.SYSTEM_REMIND_EDUCATION_COURSE_TIME,
+							MessageTypeEnum.PUSH_SYSTEM_REMIND_EDUCATION_COURSE_TIME,
 							userMap1,
 							null,
 							0,
@@ -221,7 +221,7 @@ public class MusicGroupSchoolTermCourseDetailServiceImpl extends BaseServiceImpl
 					userMap1.put(studentId,studentId.toString());
 				}
 				sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.AWSMS,
-						MessageTypeEnum.STUDENT_MEMBER_RENEW_MESSAGE,
+						MessageTypeEnum.SMS_STUDENT_MEMBER_RENEW_MESSAGE,
 						userMap,
 						null,
 						0,
@@ -229,7 +229,7 @@ public class MusicGroupSchoolTermCourseDetailServiceImpl extends BaseServiceImpl
 						null,memberName,pushMemberRenewAgain);
 
 				sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG,
-						MessageTypeEnum.STUDENT_MEMBER_RENEW_MESSAGE,
+						MessageTypeEnum.PUSH_STUDENT_MEMBER_RENEW_MESSAGE,
 						userMap1,
 						null,
 						0,

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

@@ -3314,9 +3314,9 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
                 push.put(userId, userId.toString());
                 yimei.put(userId, studentRegistration.getParentsPhone());
                 // 发送续费结果通知
-                sysMessageService.batchSendMessage(MessageSender.JIGUANG, MessageTypeEnum.STUDENT_SMS_PUSH_MUSIC_GROUP_RENEW_SUCCESS, push, null, 0, "1", "STUDENT",
+                sysMessageService.batchSendMessage(MessageSender.JIGUANG, MessageTypeEnum.STUDENT_PUSH_MUSIC_GROUP_RENEW_SUCCESS, push, null, 0, "1", "STUDENT",
                         studentRegistration.getName(), studentPaymentOrder.getActualAmount());
-                sysMessageService.batchSendMessage(MessageSender.AWSMS, MessageTypeEnum.STUDENT_SMS_PUSH_MUSIC_GROUP_RENEW_SUCCESS, yimei, null, 0, "1", "",
+                sysMessageService.batchSendMessage(MessageSender.AWSMS, MessageTypeEnum.STUDENT_SMS_MUSIC_GROUP_RENEW_SUCCESS, yimei, null, 0, "1", "",
                         studentRegistration.getName(), studentPaymentOrder.getActualAmount());
             }
             return true;

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

@@ -1611,12 +1611,12 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
 
         Map<Integer, String> teacherMap = new HashMap<>();
         teacherMap.put(practiceGroup.getUserId(), practiceGroup.getUserId().toString());
-        sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.TEACHER_SMS_PUSH_PRACTICE_CREATE,
+        sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.TEACHER_PUSH_PRACTICE_CREATE,
                 teacherMap, null, 0, null, "TEACHER",
                 teacher.getRealName(), practiceType, practiceGroup.getName());
         Map<Integer, String> teacherPhoneMap = new HashMap<>();
         teacherPhoneMap.put(practiceGroup.getUserId(), teacher.getPhone());
-        sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.YIMEI, MessageTypeEnum.TEACHER_SMS_PUSH_PRACTICE_CREATE,
+        sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.YIMEI, MessageTypeEnum.TEACHER_SMS_PRACTICE_CREATE,
                 teacherPhoneMap, null, 0, null, "TEACHER",
                 teacher.getRealName(), practiceType, practiceGroup.getName());
 
@@ -3250,12 +3250,12 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
             if (drillTimesOnWeek != null) {
                 Map<Integer, String> userMap = new HashMap<>();
                 userMap.put(practiceGroup.getStudentId(), practiceGroup.getStudentId().toString());
-                sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.STUDENT_SMS_PUSH_PAY_PRACTICE_BUY_SUCCESS,
+                sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.STUDENT_PUSH_PAY_PRACTICE_BUY_SUCCESS,
                         userMap, null, 0, null, "STUDENT", groupStartTime, groupEndTime, teacherName, drillTimesOnWeek, firstCourseStartTime);
                 SysUser student = teacherDao.getUser(practiceGroup.getStudentId());
                 Map<Integer, String> userPhoneMap = new HashMap<>();
                 userPhoneMap.put(practiceGroup.getStudentId(), student.getPhone());
-                sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.AWSMS, MessageTypeEnum.STUDENT_SMS_PUSH_PAY_PRACTICE_BUY_SUCCESS,
+                sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.AWSMS, MessageTypeEnum.STUDENT_SMS_PAY_PRACTICE_BUY_SUCCESS,
                         userPhoneMap, null, 0, null, "STUDENT", groupStartTime, groupEndTime, teacherName, drillTimesOnWeek, firstCourseStartTime);
             }
 
@@ -3275,12 +3275,12 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
 
             Map<Integer, String> teacherMap = new HashMap<>();
             teacherMap.put(practiceGroup.getUserId(), practiceGroup.getUserId().toString());
-            sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.TEACHER_SMS_PUSH_PRACTICE_CREATE,
+            sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.TEACHER_PUSH_PRACTICE_CREATE,
                     teacherMap, null, 0, null, "TEACHER",
                     teacher.getRealName(), practiceType, practiceGroup.getName());
             Map<Integer, String> teacherPhoneMap = new HashMap<>();
             teacherPhoneMap.put(practiceGroup.getUserId(), teacher.getPhone());
-            sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.YIMEI, MessageTypeEnum.TEACHER_SMS_PUSH_PRACTICE_CREATE,
+            sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.YIMEI, MessageTypeEnum.TEACHER_SMS_PRACTICE_CREATE,
                     teacherPhoneMap, null, 0, null, "TEACHER",
                     teacher.getRealName(), practiceType, practiceGroup.getName());
         } catch (Exception e) {
@@ -3740,14 +3740,14 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
             if (pushType.equals("ALL") || pushType.equals("JIGUANG")) {
                 Map<Integer, String> userMap = new HashMap<>();
                 userMap.put(userFreePracticeGroup.getStudentId(), userFreePracticeGroup.getStudentId().toString());
-                sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.STUDENT_SMS_PUSH_PRACTICE_COMPLETED_STUDY_REPORT,
+                sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.STUDENT_PUSH_PRACTICE_COMPLETED_STUDY_REPORT,
                         userMap, null, 0, pushUrl.insert(0, "5?").toString(), "STUDENT", pushUrl.toString());
             }
 
             if (pushType.equals("ALL") || pushType.equals("SMS")) {
                 Map<Integer, String> userPhoneMap = new HashMap<>();
                 userPhoneMap.put(userFreePracticeGroup.getStudentId(), student.getPhone());
-                sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.AWSMS, MessageTypeEnum.STUDENT_SMS_PUSH_PRACTICE_COMPLETED_STUDY_REPORT,
+                sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.AWSMS, MessageTypeEnum.STUDENT_SMS_PRACTICE_COMPLETED_STUDY_REPORT,
                         userPhoneMap, null, 0, null, "STUDENT", HttpUtil.getSortUrl(smsUrl.toString()));
             }
             report.setIsPushed(1);

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

@@ -174,11 +174,11 @@ public class ReplacementInstrumentActivityServiceImpl extends BaseServiceImpl<In
             String baseApiUrl = sysConfigDao.findConfigValue("base_api_url");
             String pushUrl = baseApiUrl + "/#/questionGoodsSale?id=";
             userMap.put(userId, userId.toString());
-            sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.STUDENT_SMS_PUSH_REPLACEMENT_PAY,
+            sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.STUDENT_PUSH_REPLACEMENT_PAY,
                     userMap, null, 0, "5?" + pushUrl + replacementInstrumentActivity.getId(), "STUDENT", goods.getBrand(), "");
 
             userPhoneMap.put(replacementInstrumentActivity.getUserId(), replacementInstrumentActivity.getMobileNo());
-            sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.AWSMS, MessageTypeEnum.STUDENT_SMS_PUSH_REPLACEMENT_PAY,
+            sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.AWSMS, MessageTypeEnum.STUDENT_SMS_REPLACEMENT_PAY,
                     userPhoneMap, null, 0, null, null, goods.getBrand(), HttpUtil.getSortUrl(pushUrl + replacementInstrumentActivity.getId()));
         }
         return replacementInstrumentActivity;
@@ -258,11 +258,11 @@ public class ReplacementInstrumentActivityServiceImpl extends BaseServiceImpl<In
             String baseApiUrl = sysConfigDao.findConfigValue("base_api_url");
             String pushUrl = baseApiUrl + "/#/questionGoodsSale?id=";
             userMap.put(userId, userId.toString());
-            sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.STUDENT_SMS_PUSH_REPLACEMENT_PAY,
+            sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.STUDENT_PUSH_REPLACEMENT_PAY,
                     userMap, null, 0, "5?" + pushUrl + replacementInstrumentActivity.getId(), "STUDENT", goods.getBrand(), "");
 
             userPhoneMap.put(replacementInstrumentActivity.getUserId(), replacementInstrumentActivity.getMobileNo());
-            sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.AWSMS, MessageTypeEnum.STUDENT_SMS_PUSH_REPLACEMENT_PAY,
+            sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.AWSMS, MessageTypeEnum.STUDENT_SMS_REPLACEMENT_PAY,
                     userPhoneMap, null, 0, null, null, goods.getBrand(), HttpUtil.getSortUrl(pushUrl + replacementInstrumentActivity.getId()));
         }
         return replacementInstrumentActivity;
@@ -506,7 +506,7 @@ public class ReplacementInstrumentActivityServiceImpl extends BaseServiceImpl<In
             }
             sysCouponCodeService.quit(studentPaymentOrder.getCouponCodeId());
 
-            sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.STUDENT_SMS_PUSH_SPORADIC_PAYMENT_FAILED, map, null, 0, null, "STUDENT",
+            sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.STUDENT_PUSH_SPORADIC_PAYMENT_FAILED, map, null, 0, null, "STUDENT",
                     studentPaymentOrder.getActualAmount(), "乐器置换");
             return false;
         }

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

@@ -70,11 +70,11 @@ public class ReplacementInstrumentCooperationServiceImpl extends BaseServiceImpl
             Map<Integer, String> userMap = new HashMap<>();
             Map<Integer, String> userPhoneMap = new HashMap<>();
             userMap.put(pushUser.getUserId(), pushUser.getUserId().toString());
-            sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.STUDENT_SMS_PUSH_REPLACEMENT_PAY,
+            sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.STUDENT_PUSH_REPLACEMENT_PAY,
                     userMap, null, 0, "5?" + pushUrl + pushUser.getId(), "STUDENT", pushUser.getBrand(), "");
 
             userPhoneMap.put(pushUser.getUserId(), pushUser.getMobileNo());
-            sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.AWSMS, MessageTypeEnum.STUDENT_SMS_PUSH_REPLACEMENT_PAY,
+            sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.AWSMS, MessageTypeEnum.STUDENT_SMS_REPLACEMENT_PAY,
                     userPhoneMap, null, 0, null, null, pushUser.getBrand(), HttpUtil.getSortUrl(pushUrl + pushUser.getId()));
         }
 

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

@@ -2,6 +2,7 @@ package com.ym.mec.biz.service.impl;
 
 import java.util.List;
 
+import com.dayaedu.cbs.openfeign.wrapper.message.CbsMessageWrapper;
 import com.ym.mec.auth.api.enums.YesOrNoEnum;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -39,9 +40,9 @@ public class SmsCodeServiceImpl implements SmsCodeService {
 	}
 
 	@Override
-	public boolean sendValidCode(String mobile) {
+	public boolean sendValidCode(String mobile,String jpushType) {
 		SysUser sysUser = sysUserFeignService.queryUserByMobile(mobile);
-		Integer userId = null;
+		Integer userId = -1;
 		if (sysUser != null) {
 			if(sysUser.getLockFlag() == 9 || sysUser.getLockFlag() == 1 || sysUser.getDelFlag() == YesOrNoEnum.YES) {
 				throw new BizException("账号已冻结,请联系管理员");
@@ -54,11 +55,11 @@ public class SmsCodeServiceImpl implements SmsCodeService {
 			times = Integer.parseInt(sysConfig.getParanValue());
 		}
 		// 十分钟内只能发3条
-		List<SysMessage> list = sysMessageService.queryUserInRecentMinList(mobile, 10, MessageSendMode.SMS);
+		List<CbsMessageWrapper.SysMessage> list = sysMessageService.queryUserInRecentMinList(mobile, 10, MessageSendMode.SMS);
 		if (list != null && list.size() >= times) {
 			throw new BizException("对不起,您发送太频繁请稍后重试!");
 		}
-		sysMessageService.sendSecurityCode(MessageSenderPluginContext.MessageSender.AWSMS, userId, MessageTypeEnum.SMS_VERIFY_CODE_LOGIN, mobile);
+		sysMessageService.sendSecurityCode(MessageSenderPluginContext.MessageSender.AWSMS, userId, MessageTypeEnum.SMS_VERIFY_CODE_LOGIN, mobile,jpushType);
 		return true;
 	}
 

+ 5 - 2
mec-biz/src/main/java/com/ym/mec/biz/service/impl/SoundCompareHandler.java

@@ -120,10 +120,13 @@ public class SoundCompareHandler implements WebSocketEventHandler {
                 if(bodyObject.containsKey("speed")){
                     userSoundInfoMap.get(phone).setSpeed(bodyObject.getIntValue("speed"));
                 }
-                List<Integer> subjectIds = sysMusicScoreAccompanimentDao.findSubjectByMusicScoreId(userSoundInfoMap.get(phone).getMusicScoreId(), null);
+                if(bodyObject.containsKey("subjectId")){
+                    userSoundInfoMap.get(phone).setSubjectId(bodyObject.getIntValue("subjectId"));
+                }
+                /*List<Integer> subjectIds = sysMusicScoreAccompanimentDao.findSubjectByMusicScoreId(userSoundInfoMap.get(phone).getMusicScoreId(), null);
                 if(!CollectionUtils.isEmpty(subjectIds)){
                     userSoundInfoMap.get(phone).setSubjectId(subjectIds.get(0));
-                }
+                }*/
                 userSoundInfoMap.get(phone).setMeasureXmlInfoMap(musicXmlInfos.stream().collect(Collectors.groupingBy(MusicPitchDetailDto::getMeasureIndex)));
                 musicXmlInfos.forEach(e->userSoundInfoMap.get(phone).getMusicalNotePitchMap().put(e.getMusicalNotesIndex(), e.getFrequency()));
                 for (Map.Entry<Integer, List<MusicPitchDetailDto>> userMeasureXmlInfoEntry : userSoundInfoMap.get(phone).getMeasureXmlInfoMap().entrySet()) {

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

@@ -157,9 +157,9 @@ public class SporadicChargeInfoImpl extends BaseServiceImpl<Integer, SporadicCha
                 sysUserCashAccountDetailService.insert(paymentDetail);
             }
 
-            sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.STUDENT_SMS_PUSH_SPORADIC_PAYMENT_SUCCESS, map, null, 0, "1", "STUDENT",
+            sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.STUDENT_PUSH_SPORADIC_PAYMENT_SUCCESS, map, null, 0, "1", "STUDENT",
                     studentPaymentOrder.getActualAmount(), info.getTitle());
-            sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.AWSMS, MessageTypeEnum.STUDENT_SMS_PUSH_SPORADIC_PAYMENT_SUCCESS, yimei, null, 0, "1", "",
+            sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.AWSMS, MessageTypeEnum.STUDENT_SMS_SPORADIC_PAYMENT_SUCCESS, yimei, null, 0, "1", "",
                     studentPaymentOrder.getActualAmount(), info.getTitle());
             return true;
         }
@@ -173,9 +173,9 @@ public class SporadicChargeInfoImpl extends BaseServiceImpl<Integer, SporadicCha
                 sysUserCashAccountService.updateBalance(studentPaymentOrder.getUserId(), studentPaymentOrder.getBalancePaymentAmount(), PlatformCashAccountDetailTypeEnum.REFUNDS, info.getTitle() + "支付失败");
             }
             sysCouponCodeService.quit(studentPaymentOrder.getCouponCodeId());
-            sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.STUDENT_SMS_PUSH_SPORADIC_PAYMENT_FAILED, map, null, 0, "", "STUDENT",
+            sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.STUDENT_PUSH_SPORADIC_PAYMENT_FAILED, map, null, 0, "", "STUDENT",
                     studentPaymentOrder.getActualAmount(), info.getTitle());
-            sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.AWSMS, MessageTypeEnum.STUDENT_SMS_PUSH_SPORADIC_PAYMENT_FAILED, yimei, null, 0, "", "",
+            sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.AWSMS, MessageTypeEnum.STUDENT_SMS_SPORADIC_PAYMENT_FAILED, yimei, null, 0, "", "",
                     studentPaymentOrder.getActualAmount(), info.getTitle());
             return false;
         }

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

@@ -295,7 +295,7 @@ public class StudentInstrumentServiceImpl extends BaseServiceImpl<Long, StudentI
                 sysUserCashAccountService.updateBalance(studentPaymentOrder.getUserId(), studentPaymentOrder.getBalancePaymentAmount(), PlatformCashAccountDetailTypeEnum.REFUNDS, "乐保购买支付失败");
             }
             sysCouponCodeService.quit(studentPaymentOrder.getCouponCodeId());
-            sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.STUDENT_SMS_PUSH_SPORADIC_PAYMENT_FAILED, map, null, 0, null, "STUDENT",
+            sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.STUDENT_PUSH_SPORADIC_PAYMENT_FAILED, map, null, 0, null, "STUDENT",
                     studentPaymentOrder.getActualAmount(), "乐保购买");
             return false;
         }

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

@@ -1349,13 +1349,13 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
                 Map<Integer, String> map = new HashMap<>(1);
                 map.put(studentPaymentOrder.getUserId(), studentRegistration.getParentsPhone());
                 sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.AWSMS,
-                        MessageTypeEnum.STUDENT_SMS_PUSH_PAYMENT_SUCCESS, map, null, 0, null, "",
+                        MessageTypeEnum.STUDENT_SMS_PAYMENT_SUCCESS, map, null, 0, null, "",
                         studentRegistration.getName(), studentPaymentOrder.getActualAmount());
                 //push
                 Map<Integer, String> map1 = new HashMap<>(1);
                 map1.put(studentPaymentOrder.getUserId(), studentPaymentOrder.getUserId().toString());
                 sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG,
-                        MessageTypeEnum.STUDENT_SMS_PUSH_PAYMENT_SUCCESS, map1, null, 0, null, "STUDENT",
+                        MessageTypeEnum.STUDENT_PUSH_PAYMENT_SUCCESS, map1, null, 0, null, "STUDENT",
                         studentRegistration.getName(), studentPaymentOrder.getActualAmount());
             }
             try {

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

@@ -1263,7 +1263,7 @@ public class StudentRepairServiceImpl extends BaseServiceImpl<Integer, StudentRe
                 sysUserCashAccountService.updateBalance(studentPaymentOrder.getUserId(), studentPaymentOrder.getBalancePaymentAmount(), PlatformCashAccountDetailTypeEnum.REFUNDS, "乐器维修支付失败");
             }
             sysCouponCodeService.quit(studentPaymentOrder.getCouponCodeId());
-            sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.STUDENT_SMS_PUSH_SPORADIC_PAYMENT_FAILED, map, null, 0, null, "STUDENT",
+            sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.STUDENT_PUSH_SPORADIC_PAYMENT_FAILED, map, null, 0, null, "STUDENT",
                     studentPaymentOrder.getActualAmount(), "乐器维修");
             return false;
         }

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

@@ -534,7 +534,7 @@ public class StudentServiceImpl extends BaseServiceImpl<Integer, Student> implem
                 userMap1.put(studentId,studentId.toString());
             }
             sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.AWSMS,
-                    MessageTypeEnum.PUSH_EXPERIENCE_MEMBERSHIP_MESSAGE,
+                    MessageTypeEnum.SMS_EXPERIENCE_MEMBERSHIP_MESSAGE,
                     userMap,
                     null,
                     0,

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

@@ -990,7 +990,7 @@ public class SubjectChangeServiceImpl extends BaseServiceImpl<Integer, SubjectCh
                 sysUserCashAccountService.updateBalance(studentPaymentOrder.getUserId(), studentPaymentOrder.getBalancePaymentAmount(), PlatformCashAccountDetailTypeEnum.REFUNDS, "声部更改支付失败");
             }
             sysCouponCodeService.quit(studentPaymentOrder.getCouponCodeId());
-            sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.STUDENT_SMS_PUSH_SPORADIC_PAYMENT_FAILED, map, null, 0, null, "STUDENT",
+            sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.STUDENT_PUSH_SPORADIC_PAYMENT_FAILED, map, null, 0, null, "STUDENT",
                     studentPaymentOrder.getActualAmount(), "声部更换");
             return false;
         }

+ 348 - 387
mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysMessageServiceImpl.java

@@ -1,22 +1,32 @@
 package com.ym.mec.biz.service.impl;
 
 import com.alibaba.fastjson.JSON;
-import com.ym.mec.auth.api.client.SysUserFeignService;
-import com.ym.mec.auth.api.entity.SysUser;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.dayaedu.cbs.common.enums.EAppKey;
+import com.dayaedu.cbs.common.enums.EClientType;
+import com.dayaedu.cbs.common.enums.message.EMessageSendMode;
+import com.dayaedu.cbs.common.enums.message.ESendStatus;
+import com.dayaedu.cbs.openfeign.client.MessageFeignClientService;
+import com.dayaedu.cbs.openfeign.wrapper.message.CbsMessageWrapper;
+import com.microsvc.toolkit.common.response.template.R;
 import com.ym.mec.biz.dal.dao.SysConfigDao;
 import com.ym.mec.biz.dal.dao.SysMessageDao;
 import com.ym.mec.biz.dal.dao.TeacherDao;
 import com.ym.mec.biz.dal.dao.WaitSendMessageDao;
-import com.ym.mec.biz.dal.dto.Mapper;
 import com.ym.mec.biz.dal.dto.SimpleUserDto;
-import com.ym.mec.biz.dal.dto.SysMessageDto;
 import com.ym.mec.biz.dal.dto.SysMessageVo;
-import com.ym.mec.biz.dal.entity.*;
+import com.ym.mec.biz.dal.entity.ImSendGroupMessage;
+import com.ym.mec.biz.dal.entity.SysMessage;
+import com.ym.mec.biz.dal.entity.SysMessageConfig;
+import com.ym.mec.biz.dal.entity.WaitSendMessage;
 import com.ym.mec.biz.dal.enums.MessageSendMode;
 import com.ym.mec.biz.dal.enums.MessageTypeEnum;
 import com.ym.mec.biz.dal.enums.SendStatusEnum;
+import com.ym.mec.biz.dal.page.SysMessageQueryInfo;
+import com.ym.mec.biz.dal.wrapper.SysMessageWrapper;
 import com.ym.mec.biz.service.SysMessageConfigService;
 import com.ym.mec.biz.service.SysMessageService;
+import com.ym.mec.biz.service.SysUserService;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.entity.ImMessageDto;
 import com.ym.mec.common.entity.ImPrivateMessage;
@@ -24,38 +34,33 @@ import com.ym.mec.common.entity.ImSendMessageUserInfo;
 import com.ym.mec.common.entity.ImTxtMessage;
 import com.ym.mec.common.exception.BizException;
 import com.ym.mec.common.page.PageInfo;
-import com.ym.mec.common.page.QueryInfo;
-import com.ym.mec.common.page.WrapperUtil;
 import com.ym.mec.common.redis.service.RedisCache;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
 import com.ym.mec.common.tenant.TenantContextHolder;
 import com.ym.mec.im.ImFeignService;
-import com.ym.mec.thirdparty.message.MessageSenderPluginContext;
 import com.ym.mec.thirdparty.message.MessageSenderPluginContext.MessageSender;
-import com.ym.mec.util.collection.MapUtil;
 import com.ym.mec.util.date.DateUtil;
 import com.ym.mec.util.string.MessageFormatter;
 import net.coobird.thumbnailator.Thumbnails;
 import org.apache.commons.codec.binary.Base64;
+import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
 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.stereotype.Service;
 
+import javax.annotation.Resource;
 import javax.imageio.ImageIO;
 import java.awt.image.BufferedImage;
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 import java.net.URL;
 import java.util.*;
-import java.util.Map.Entry;
 import java.util.concurrent.CompletableFuture;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
+import java.util.function.Function;
+import java.util.stream.Collectors;
 
-import static com.ym.mec.biz.dal.enums.MessageTypeEnum.OA_NOTICE_PUSH;
 import static com.ym.mec.biz.dal.enums.MessageTypeEnum.STUDENT_PUSH_VIP_BUY;
 
 @Service
@@ -63,32 +68,30 @@ public class SysMessageServiceImpl extends BaseServiceImpl<Long, SysMessage> imp
 
 	private final static Logger LOGGER = LoggerFactory.getLogger(SysMessageServiceImpl.class);
 
-	@Autowired
+	@Resource
 	private SysMessageDao sysMessageDao;
-	@Autowired
+	@Resource
 	private SysMessageConfigService sysMessageConfigService;
-	@Autowired
-	private MessageSenderPluginContext messageSenderPluginContext;
-	@Autowired
-	private SysUserFeignService sysUserFeignService;
-	@Autowired
+	@Resource
+	private SysUserService sysUserService;
+	@Resource
 	private TeacherDao teacherDao;
-	@Autowired
+	@Resource
 	private WaitSendMessageDao waitSendMessageDao;
-	@Autowired
+	@Resource
 	private SysConfigDao sysConfigDao;
-	@Autowired
+	@Resource
 	private ImFeignService imFeignService;
-	@Autowired
+	@Resource
 	private RedisCache<String, Object> redisCache;
-	@Autowired
-	private SysEmailServiceImpl sysEmailService;
+	@Resource
+	private MessageFeignClientService messageFeignClientService;
 	// 验证码有效期
 	public static final int CODE_EXPIRE = 60 * 10;
 	// 发送验证码的间隔时间
 	public static final int CODE_INTERVAL_TIME = 60;
 
-	private final int DEFAULT_CODE = 888888;
+	private final int DEFAULT_CODE = 666666;
 
 	@Value("${message.debugMode}")
 	private boolean debugMode;
@@ -98,108 +101,147 @@ public class SysMessageServiceImpl extends BaseServiceImpl<Long, SysMessage> imp
 		return sysMessageDao;
 	}
 
-	@Override
-	public PageInfo<SysMessageDto> queryListPage(QueryInfo queryInfo) {
-		PageInfo<SysMessageDto> pageInfo = new PageInfo<SysMessageDto>(queryInfo.getPage(), queryInfo.getRows());
-		Map<String, Object> params = new HashMap<String, Object>();
-		MapUtil.populateMap(params, queryInfo);
-
-		List<SysMessageDto> dataList = null;
-		int count = this.findCount(params);
-		if (count > 0) {
-			pageInfo.setTotal(count);
-			params.put("offset", pageInfo.getOffset());
-			dataList = sysMessageDao.queryListPage(params);
-		}
-		if (count == 0) {
-			dataList = new ArrayList<SysMessageDto>();
-		}
-		pageInfo.setRows(dataList);
-		return pageInfo;
-	}
-
-	/**
-	 * 添加消息
-	 * @param subject 消息主题
-	 * @param content 消息内容
-	 * @param receivers 接收人,多个人用逗号分开
-	 * @param triggerTime 触发时间
-	 * @param mode 消息的发送模式
-	 * @param status 消息的当前状态
-	 * @param errorMsg 错误消息
-	 * @param readStatus 阅读状态
-	 * @param memo 备注
-	 * @param group 消息组
-	 * @return
-	 */
-	private int addMessage(Integer receiverTenantId, Map<Integer, String> receivers, String subject, String content, Date triggerTime, MessageSendMode mode, SendStatusEnum status,
-			String errorMsg, Integer readStatus, String memo, String group,String jpushType) {
-		return addMessage(receiverTenantId,receivers,subject,content,triggerTime,mode,status,errorMsg,readStatus,memo,group,jpushType,null);
-	}
 
 
     /**
-     * 添加消息
-     * @param subject 消息主题
-     * @param content 消息内容
-     * @param receivers 接收人,多个人用逗号分开
-     * @param triggerTime 触发时间
-     * @param mode 消息的发送模式
-     * @param status 消息的当前状态
-     * @param errorMsg 错误消息
-     * @param readStatus 阅读状态
-     * @param memo 备注
-     * @param group 消息组
-     * @return
+     * 分页查询
+     * @param page IPage<SysMessageWrapper.SysMessageList>
+     * @param query SysMessageWrapper.SysMessageQuery
+     * @return IPage<SysMessageWrapper.SysMessage>
      */
-    private int addMessage(Integer receiverTenantId, Map<Integer, String> receivers, String subject, String content, Date triggerTime, MessageSendMode mode, SendStatusEnum status,
-                           String errorMsg, Integer readStatus, String memo, String group,String jpushType,Integer messageConfigId) {
-        SysMessage message = null;
-        Date date = new Date();
-
-        List<SysMessage> messages = new ArrayList<>();
-
-        Integer userId = null;
-        String receiver;
-        for (Entry<Integer, String> entry : receivers.entrySet()) {
-            userId = entry.getKey();
-            receiver = entry.getValue();
-
-            message = new SysMessage();
-            if (userId == null) {
-                SysUser user = sysUserFeignService.queryUserByMobile(receiver);
-                if (user != null) {
-                    userId = user.getId();
-                }
+    @Override
+    public PageInfo<SysMessageWrapper.Message> queryPage(SysMessageQueryInfo query){
+
+        CbsMessageWrapper.SysMessageQuery cbsQuery = getSysMessageQuery(query);
+
+        PageInfo<SysMessageWrapper.Message> pageInfo = new PageInfo<>(query.getPage(), query.getRows());
+
+        cbsQuery.setPage(query.getPage());
+        cbsQuery.setRows(query.getRows());
+        com.microsvc.toolkit.common.response.paging.PageInfo<CbsMessageWrapper.SysMessage> sysMessagePageInfo = messageFeignClientService
+            .sysMessagePage(cbsQuery).feignData();
+        List<CbsMessageWrapper.SysMessage> rows = sysMessagePageInfo.getRows();
+        if (CollectionUtils.isEmpty(rows)) {
+            return pageInfo;
+        }
+        List<SysMessage> sysMessages = rows.stream().map(this::convert).collect(Collectors.toList());
+        pageInfo.setRows(JSON.parseArray(JSON.toJSONString(sysMessages), SysMessageWrapper.Message.class));
+        pageInfo.setTotal(sysMessagePageInfo.getTotal());
+        return pageInfo;
+    }
+
+    private SysMessage convert(CbsMessageWrapper.SysMessage sysMessage) {
+        SysMessage message = new SysMessage();
+        message.setId(sysMessage.getId().toString());
+        if (sysMessage.getUserId() != null) {
+            message.setUserId(sysMessage.getUserId().intValue());
+        }
+        if (sysMessage.getMessageConfigId() != null) {
+            message.setMessageConfigId(sysMessage.getMessageConfigId().intValue());
+        }
+        message.setTitle(sysMessage.getTitle());
+        message.setContent(sysMessage.getContent());
+        message.setType(MessageSendMode.valueOf(sysMessage.getSendMode() !=null?sysMessage.getSendMode().name():"PUSH"));
+        message.setStatus(SendStatusEnum.valueOf(Optional.ofNullable(sysMessage.getStatus()).map(o->o.name()).orElse(SendStatusEnum.FAILED.name())));
+        message.setReceiver(sysMessage.getReceiver());
+        message.setSendTime(sysMessage.getSendTime());
+        message.setErrorMsg(sysMessage.getErrorMsg());
+        message.setMemo(sysMessage.getMemo());
+        message.setReadStatus(sysMessage.getReadStatus()?1:0);
+        message.setGroup(sysMessage.getGroup());
+        message.setCreateOn(sysMessage.getCreateTime());
+        message.setModifyOn(sysMessage.getUpdateTime());
+        message.setJpushType(sysMessage.getSendMode().name());
+        return message;
+    }
+
+    private CbsMessageWrapper.SysMessageQuery getSysMessageQuery(SysMessageQueryInfo query) {
+        CbsMessageWrapper.SysMessageQuery cbsQuery = new CbsMessageWrapper.SysMessageQuery();
+        if (query.getUserId() != null) {
+            cbsQuery.setUserId(query.getUserId().longValue());
+        }
+        cbsQuery.setAppKey(EAppKey.GYM);
+        if (query.getJpushType() !=null) {
+            cbsQuery.setClientType(getClientType(query.getJpushType()));
+        }
+        if (query.getStatus() !=null) {
+            switch (query.getStatus()) {
+                case 0:
+                    cbsQuery.setStatus(ESendStatus.WAIT);
+                    break;
+                case 1:
+                    cbsQuery.setStatus(ESendStatus.SENDING);
+                    break;
+                case 2:
+                    cbsQuery.setStatus(ESendStatus.SUCCESSED);
+                    break;
             }
-            message.setTenantId(receiverTenantId);
-            message.setUserId(userId);
-            message.setContent(content);
-            message.setCreateOn(date);
-            message.setModifyOn(date);
-            message.setReceiver(receiver);
-            if (triggerTime == null) {
-                triggerTime = date;
+        }
+        cbsQuery.setTitle(query.getTitle());
+        if (query.getType() != null) {
+            switch (query.getType()) {
+                case 1:
+                    cbsQuery.setSendMode(EMessageSendMode.SMS);
+                    break;
+                case 2:
+                    cbsQuery.setSendMode(EMessageSendMode.EMAIL);
+                    break;
+                case 3:
+                    cbsQuery.setSendMode(EMessageSendMode.PUSH);
+                    break;
             }
-            message.setMessageConfigId(messageConfigId);
-            message.setSendTime(triggerTime);
-            message.setTitle(subject);
-            message.setStatus(status);
-            message.setType(mode);
-            message.setErrorMsg(errorMsg);
-            message.setReadStatus(readStatus);
-            message.setMemo(memo);
-            message.setGroup(group);
-            message.setJpushType(jpushType);
-            messages.add(message);
         }
-
-        return sysMessageDao.batchInsert(messages);
+        if (StringUtils.isNotBlank(query.getGroup())) {
+            cbsQuery.setGroup(query.getGroup());
+        }
+        if (query.getReadStatus() != null) {
+            cbsQuery.setReadStatus(query.getReadStatus() == 1);
+        }
+        return cbsQuery;
     }
 
 	@Override
-	public int updateMessage(SysMessage message) {
-		return sysMessageDao.update(message);
+	public R<com.microsvc.toolkit.common.response.paging.PageInfo<CbsMessageWrapper.SysMessage>> queryListPage(SysMessageQueryInfo queryInfo) {
+		CbsMessageWrapper.SysMessageQuery query = new CbsMessageWrapper.SysMessageQuery();
+		query.setPage(queryInfo.getPage());
+		query.setRows(queryInfo.getRows());
+		query.setUserId(queryInfo.getUserId().longValue());
+//		query.setStatus(ESendStatus.SUCCESSED);
+		query.setAppKey(EAppKey.GYM);
+		query.setGroup(queryInfo.getGroup());
+		query.setSendMode(getMessageSendMode(queryInfo.getType()));
+		query.setTitle(queryInfo.getTitle());
+		query.setClientType(getClientType(queryInfo.getJpushType()));
+		query.setReadStatus(queryInfo.getReadStatus() == null?null:queryInfo.getReadStatus()==1);
+		return messageFeignClientService.sysMessagePage(query);
+	}
+
+	private EMessageSendMode getMessageSendMode(Integer type){
+		if(type == null){
+			return null;
+		}else if(type == 1){
+			return EMessageSendMode.SMS;
+		}else if(type == 2){
+			return EMessageSendMode.EMAIL;
+		}else if(type == 3){
+			return EMessageSendMode.PUSH;
+		}else {
+			return EMessageSendMode.SEO;
+		}
+	}
+
+	public EClientType getClientType(String jpushType){
+		if(StringUtils.isEmpty(jpushType)){
+			return null;
+		}else if(StringUtils.equals(jpushType, "STUDENT")){
+			return EClientType.STUDENT;
+		}else if(StringUtils.equals(jpushType, "TEACHER")){
+			return EClientType.TEACHER;
+		}else if(StringUtils.equals(jpushType, "SCHOOL")){
+			return EClientType.SCHOOL;
+		}else {
+			return EClientType.BACKEND;
+		}
 	}
 
 	@Override
@@ -207,39 +249,38 @@ public class SysMessageServiceImpl extends BaseServiceImpl<Long, SysMessage> imp
 		if(userIds != null){
 			userIds.removeAll(Collections.singleton(null));
 		}
-		if (userIds == null || userIds.size() == 0) {
+		if (CollectionUtils.isEmpty(userIds)) {
 			LOGGER.error("接收地址不能为空");
 			return false;
 		}
-		SysMessageConfig messageConfig = sysMessageConfigService.queryByType(messageType);
-		if (messageConfig == null) {
-			throw new BizException("消息类型错误");
-		}else if(messageConfig.getSendFlag() == null || messageConfig.getSendFlag() == 0){
-			return true;
-		}
-		Date date = new Date();
-		SendStatusEnum status = SendStatusEnum.SUCCESSED;
-		String content = MessageFormatter.arrayFormat(messageConfig.getContent(), args);
-		SysMessage message = null;
-
-		List<SysMessage> messages = new ArrayList<>();
-		for (Integer userId : userIds) {
-			message = new SysMessage();
-			message.setUserId(userId);
-			message.setContent(content);
-			message.setCreateOn(date);
-			message.setModifyOn(date);
-			message.setReceiver(userId.toString());
-			message.setSendTime(date);
-			message.setStatus(status);
-			message.setType(MessageSendMode.SEO);
-			message.setTitle(messageConfig.getDescription());
-			message.setReadStatus(0);
-			message.setMemo(memo);
-			message.setGroup(messageConfig.getGroup());
-			messages.add(message);
+		List<SimpleUserDto> userDtoList = teacherDao.getUsersSimpleInfo(new ArrayList<>(userIds));
+		List<CbsMessageWrapper.MessageParam> messageParams = new ArrayList<>();
+		for (SimpleUserDto user : userDtoList) {
+			CbsMessageWrapper.MessageParam messageParam = new CbsMessageWrapper.MessageParam();
+			messageParam.setUserId(user.getUserId().longValue());
+			messageParam.setAppKey(EAppKey.GYM);
+			messageParam.setClientType(EClientType.BACKEND);
+			messageParam.setClientId(messageParam.getClientType());
+			messageParam.setType(messageType.getCode());
+			Map<Long, String> params = new HashMap<>(1);
+			params.put(user.getUserId().longValue(), user.getPhone());
+			messageParam.setReceivers(params);
+			messageParam.setRealSend(!debugMode);
+			messageParam.setUrl(memo);
+			if(args != null && args.length > 0){
+				String[] argsStr = new String[args.length];
+				for (int i = 0; i < args.length; i++) {
+					if (args[i]!=null){
+						argsStr[i] = args[i].toString();
+					}else {
+						argsStr[i] = "";
+					}
+				}
+				messageParam.setContentArgs(argsStr);
+			}
+			messageParams.add(messageParam);
 		}
-		sysMessageDao.batchInsert(messages);
+		messageFeignClientService.sysMessageBatchSendMessage(messageParams);
 		return true;
 	}
 
@@ -425,13 +466,10 @@ public class SysMessageServiceImpl extends BaseServiceImpl<Long, SysMessage> imp
 
 	@Override
 	public void sendPrivateMessage(String studentId, String content, String extra) {
-		SysUser sysUser = sysUserFeignService.queryUserInfo();
-		if(sysUser == null){
-			throw new BizException("用户信息获取失败");
-		}
+		Integer userId = sysUserService.getUserId();
 		//ExecutorService executor = Executors.newCachedThreadPool();
 		CompletableFuture.runAsync(()->{
-			imFeignService.privateSend(getImGroupMessage("RC:TxtMsg", sysUser.getId().toString(),
+			imFeignService.privateSend(getImGroupMessage("RC:TxtMsg", userId.toString(),
 				studentId.split(","), content, extra));
 		});
 		//executor.shutdown();
@@ -466,256 +504,169 @@ public class SysMessageServiceImpl extends BaseServiceImpl<Long, SysMessage> imp
 	}
 
     @Override
-    public PageInfo<SysMessageVo.SysMessageList> queryMessageCode(SysMessageVo.SysMessageQuery queryInfo) {
-		PageInfo<SysMessageVo.SysMessageList> pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
-		Map<String, Object> params = new HashMap<String, Object>();
-		MapUtil.populateMap(params, queryInfo);
-
-		List<SysMessageVo.SysMessageList> dataList = null;
-		int count = sysMessageDao.countMessageCode(params);
-		if (count > 0) {
-			pageInfo.setTotal(count);
-			params.put("offset", pageInfo.getOffset());
-			dataList = sysMessageDao.queryMessageCode(params);
-		}
-		if (count == 0) {
-			dataList = new ArrayList<>();
-		}
-		pageInfo.setRows(dataList);
-		return pageInfo;
+    public R<com.microsvc.toolkit.common.response.paging.PageInfo<CbsMessageWrapper.SysMessage>> queryMessageCode(SysMessageVo.SysMessageQuery queryInfo) {
+		CbsMessageWrapper.SysMessageQuery query = new CbsMessageWrapper.SysMessageQuery();
+		query.setPage(queryInfo.getPage());
+		query.setRows(queryInfo.getRows());
+//		query.setStatus(ESendStatus.SUCCESSED);
+		query.setAppKey(EAppKey.GYM);
+		query.setTitle(queryInfo.getTitle());
+		query.setSendMode(EMessageSendMode.SMS);
+		query.setSendTimeStart(queryInfo.getSendTime() == null?null:DateUtil.stringToDate(queryInfo.getSendTime()+" 00:00:00"));
+		return messageFeignClientService.sysMessagePage(query);
 	}
 
     @Override
-	public void batchSendMessage(Integer senderTenantId, MessageSender messageSender, MessageTypeEnum type, Map<Integer, String> receivers, Date triggerTime, Integer readStatus,
-			String url,String jpushType, Object... args) {
+	public void batchSendMessage(Integer senderTenantId, MessageSender messageSender, MessageTypeEnum type, Map<Integer,String> receivers, Date triggerTime, Integer readStatus,
+								 String url, String jpushType, Object... args) {
 		LOGGER.info("batchSendMessage tenantId {} msgSender {}, type {}, receivers {} ", senderTenantId, messageSender, type, receivers);
-		if (receivers == null || receivers.size() == 0) {
+		if (receivers == null || receivers.isEmpty()) {
 			LOGGER.error("接收地址不能为空");
 			return;
 		}
-		Integer userId = receivers.keySet().iterator().next();
-		Integer receiverTenantId = 0;
-		SimpleUserDto simpleUserDto = teacherDao.getSimpleUser(userId);
-		if(simpleUserDto != null){
-			receiverTenantId = simpleUserDto.getTenantId();
-		}
-
-		// email data from database load, 使用接收者 tenantId, 假设发送者和接收者为同一机构
-		if (Objects.equals(messageSender.getSendMode(), "EMAIL")) {
-			LOGGER.info("batch 发送邮件 {} ", receiverTenantId);
-			loadEmailInfo(senderTenantId);
-			// debugMode = false;
-		}
-		if(StringUtils.isNotEmpty(jpushType) && jpushType.equals("STUDENT")){
+		if("STUDENT".equals(jpushType) && type != STUDENT_PUSH_VIP_BUY){
 			//如果不是缴费信息
-			if(type != STUDENT_PUSH_VIP_BUY){
-				int hour = DateUtil.getHour(new Date());
-				//如果当前时间在22点之后
-				String messageTime = sysConfigDao.findConfigValue("wait_send_message_time");
-				if(StringUtils.isEmpty(messageTime)){
-					messageTime = "22";
-				}
-				if(messageTime.contains(":")){
-					messageTime = messageTime.substring(0,messageTime.indexOf(":"));
-				}
-				if(hour > Integer.parseInt(messageTime)-1){
-					//保存推送信息
-					WaitSendMessage waitSendMessage = new WaitSendMessage();
-					if(args != null){
-						waitSendMessage.setAgrs(JSON.toJSONString(args));
-					}
-					waitSendMessage.setJpushType(jpushType);
-					waitSendMessage.setMessageSender(messageSender.name());
-					waitSendMessage.setMessageType(type.name());
-					waitSendMessage.setReceivers(JSON.toJSONString(receivers));
-					waitSendMessage.setUrl(url);
-					waitSendMessageDao.insert(waitSendMessage);
-					return;
+			int hour = DateUtil.getHour(new Date());
+			//如果当前时间在22点之后
+			String messageTime = sysConfigDao.findConfigValue("wait_send_message_time");
+			if(StringUtils.isEmpty(messageTime)){
+				messageTime = "22";
+			}
+			if(messageTime.contains(":")){
+				messageTime = messageTime.substring(0,messageTime.indexOf(":"));
+			}
+			if(hour > Integer.parseInt(messageTime)-1){
+				//保存推送信息
+				WaitSendMessage waitSendMessage = new WaitSendMessage();
+				if(args != null){
+					waitSendMessage.setAgrs(JSON.toJSONString(args));
 				}
+				waitSendMessage.setJpushType(jpushType);
+				waitSendMessage.setMessageSender(messageSender.name());
+				waitSendMessage.setMessageType(type.name());
+				waitSendMessage.setReceivers(JSON.toJSONString(receivers));
+				waitSendMessage.setUrl(url);
+				waitSendMessageDao.insert(waitSendMessage);
+				return;
 			}
 		}
-		String[] tos = receivers.values().toArray(new String[receivers.size()]);
-		LOGGER.error("batch 接收人 {} ", tos  );
-		SysMessageConfig messageConfig = sysMessageConfigService.queryByType(type);
-		if (messageConfig == null) {
-			throw new BizException("消息类型错误");
-		}else if(messageConfig.getSendFlag() == null || messageConfig.getSendFlag() == 0){
-			LOGGER.error("batch 发送标志为空" );
-			return;
-		}
-		Date date = new Date();
-		SendStatusEnum status = SendStatusEnum.WAIT;
-		String errorMsg = null;
-		// 立即发送
-		if (triggerTime == null || date.after(triggerTime)) {
-			status = SendStatusEnum.SENDING;
-			try {
-				if (debugMode == true || messageSenderPluginContext.batchSend(messageSender, messageConfig.getDescription(),
-								MessageFormatter.arrayFormat(messageConfig.getContent(), args), tos, url,jpushType,"default",null)) {
-					status = SendStatusEnum.SUCCESSED;
-				} else {
-					status = SendStatusEnum.FAILED;
+		if(StringUtils.isEmpty(jpushType)){
+			jpushType = "STUDENT";
+		}
+		// 处理注册验证码,没有用户ID的情况导致没有发送短息
+		List<CbsMessageWrapper.MessageParam> messageParams = new ArrayList<>();
+		List<SimpleUserDto> userDtoList = teacherDao.getUsersSimpleInfo(new ArrayList<>(receivers.keySet()));
+		Map<Integer, SimpleUserDto> userMap = userDtoList.stream().collect(Collectors.toMap(SimpleUserDto::getUserId, Function.identity()));
+		for (Map.Entry<Integer, String> receive : receivers.entrySet()) {
+			Long userId = Long.valueOf(Optional.ofNullable(receive.getKey()).orElse(-1));
+			SimpleUserDto user = userMap.getOrDefault(userId.intValue(), new SimpleUserDto());
+			CbsMessageWrapper.MessageParam messageParam = new CbsMessageWrapper.MessageParam();
+			messageParam.setUserId(userId);
+			messageParam.setAppKey(EAppKey.GYM);
+			messageParam.setClientType(getClientType(jpushType));
+			messageParam.setClientId(getClientType(jpushType));
+			messageParam.setType(type.getCode());
+			messageParam.setUrl(url);
+			Map<Long, String> params = new HashMap<>();
+			if(messageSender == MessageSender.EMAIL){
+				//如果是极光推送,没有用户ID的情况下,使用手机号
+				params.put(userId, Optional.ofNullable(receive.getValue()).orElse(user.getPhone()));
+			}else {
+				params.put(userId, Optional.ofNullable(user.getPhone()).orElse(receive.getValue()));
+			}
+			messageParam.setReceivers(params);
+			messageParam.setRealSend(!debugMode);
+			if(args != null && args.length > 0){
+				String[] argsStr = new String[args.length];
+				for (int i = 0; i < args.length; i++) {
+					if (args[i]!=null){
+						argsStr[i] = args[i].toString();
+					}else {
+						argsStr[i] = "";
+					}
 				}
-			} catch (Exception e) {
-				status = SendStatusEnum.FAILED;
-				errorMsg = e.getMessage();
-				LOGGER.warn("消息发送失败", e);
+				messageParam.setContentArgs(argsStr);
 			}
+			messageParams.add(messageParam);
 		}
-		MessageSendMode mode = MessageSendMode.SMS;
-		if (messageSender.getSendMode().equals("PUSH")) {
-			mode = MessageSendMode.PUSH;
-		} else if (messageSender.getSendMode().equals("EMAIL")) {
-			mode = MessageSendMode.EMAIL;
-		}
-		// oa 待审批只推送 不记录表
-		if (type == OA_NOTICE_PUSH) {
-			return;
-		}
-		addMessage(receiverTenantId, receivers, messageConfig.getDescription(), MessageFormatter.arrayFormat(messageConfig.getContent(), args), triggerTime, mode, status, errorMsg, readStatus,
-				url, messageConfig.getGroup(),jpushType,messageConfig.getId());
+		messageFeignClientService.sysMessageBatchSendMessage(messageParams);
 	}
 
     @Override
-	public void batchSendMessage(MessageSender messageSender, MessageTypeEnum type, Map<Integer, String> receivers, Date triggerTime, Integer readStatus,
+	public void batchSendMessage(MessageSender messageSender, MessageTypeEnum type, Map<Integer,String> receivers, Date triggerTime, Integer readStatus,
 			String url,String jpushType, Object... args) {
 		batchSendMessage(TenantContextHolder.getTenantId(), messageSender, type, receivers, triggerTime, readStatus, url, jpushType, args);
 	}
 
 
 	@Override
-	public void batchPushMessage(MessageTypeEnum type, Map<Integer, String> receivers, Date triggerTime, Integer readStatus,
+	public void batchPushMessage(MessageTypeEnum type, Map<Integer,String> receivers, Date triggerTime, Integer readStatus,
 			String url,String jpushType,String sound,String channelId, Object... args) {
-		if (receivers == null || receivers.size() == 0) {
-			throw new BizException("接收地址不能为空");
-		}
-		SimpleUserDto simpleUserDto = teacherDao.getSimpleUser(receivers.keySet().iterator().next());
-		Integer receiverTenantId = simpleUserDto.getTenantId();
-		
-		if(StringUtils.isNotEmpty(jpushType) && jpushType == "STUDENT"){
-			//如果不是缴费信息
-			if(type != STUDENT_PUSH_VIP_BUY){
-				int hour = DateUtil.getHour(new Date());
-				//如果当前时间在22点之后
-				String messageTime = sysConfigDao.findConfigValue("wait_send_message_time");
-				if(StringUtils.isEmpty(messageTime)){
-					messageTime = "22";
-				}
-				if(messageTime.contains(":")){
-					messageTime = messageTime.substring(0,messageTime.indexOf(":"));
-				}
-				if(hour > Integer.parseInt(messageTime)-1){
-					//保存推送信息
-					WaitSendMessage waitSendMessage = new WaitSendMessage();
-					if(args != null){
-						waitSendMessage.setAgrs(JSON.toJSONString(args));
-					}
-					waitSendMessage.setJpushType(jpushType);
-					waitSendMessage.setMessageSender(MessageSender.JIGUANG.name());
-					waitSendMessage.setMessageType(type.name());
-					waitSendMessage.setReceivers(JSON.toJSONString(receivers));
-					waitSendMessage.setUrl(url);
-					waitSendMessageDao.insert(waitSendMessage);
-					return;
-				}
-			}
-		}
-		String[] tos = receivers.values().toArray(new String[receivers.size()]);
-		SysMessageConfig messageConfig = sysMessageConfigService.queryByType(type);
-		if (messageConfig == null) {
-			throw new BizException("消息类型错误");
-		}else if(messageConfig.getSendFlag() == null || messageConfig.getSendFlag() == 0){
+		if (receivers == null || receivers.isEmpty()) {
+			LOGGER.error("接收地址不能为空");
 			return;
 		}
-		Date date = new Date();
-		SendStatusEnum status = SendStatusEnum.WAIT;
-		String errorMsg = null;
-		// 立即发送
-		if (triggerTime == null || date.after(triggerTime)) {
-			status = SendStatusEnum.SENDING;
-			try {
-				if (debugMode == true || messageSenderPluginContext.batchSend(MessageSender.JIGUANG, messageConfig.getDescription(),
-								MessageFormatter.arrayFormat(messageConfig.getContent(), args), tos, url,jpushType,sound,channelId)) {
-					status = SendStatusEnum.SUCCESSED;
-				} else {
-					status = SendStatusEnum.FAILED;
+		if("STUDENT".equals(jpushType) && type != STUDENT_PUSH_VIP_BUY){
+			int hour = DateUtil.getHour(new Date());
+			//如果当前时间在22点之后
+			String messageTime = sysConfigDao.findConfigValue("wait_send_message_time");
+			if(StringUtils.isEmpty(messageTime)){
+				messageTime = "22";
+			}
+			if(messageTime.contains(":")){
+				messageTime = messageTime.substring(0,messageTime.indexOf(":"));
+			}
+			if(hour > Integer.parseInt(messageTime)-1){
+				//保存推送信息
+				WaitSendMessage waitSendMessage = new WaitSendMessage();
+				if(args != null){
+					waitSendMessage.setAgrs(JSON.toJSONString(args));
 				}
-			} catch (Exception e) {
-				status = SendStatusEnum.FAILED;
-				errorMsg = e.getMessage();
-				LOGGER.warn("消息发送失败", e);
+				waitSendMessage.setJpushType(jpushType);
+				waitSendMessage.setMessageSender(MessageSender.JIGUANG.name());
+				waitSendMessage.setMessageType(type.name());
+				waitSendMessage.setReceivers(JSON.toJSONString(receivers));
+				waitSendMessage.setUrl(url);
+				waitSendMessageDao.insert(waitSendMessage);
+				return;
 			}
 		}
-		addMessage(receiverTenantId, receivers, messageConfig.getDescription(), MessageFormatter.arrayFormat(messageConfig.getContent(), args), triggerTime, MessageSendMode.PUSH, status, errorMsg, readStatus,
-				url, messageConfig.getGroup(),jpushType);
-	}
-
-	@Override
-	public void sendMessage(MessageSender messageSender, Integer userId, String title, String content, String receiver, Date triggerTime, Integer readStatus, String url, String group,String jpushType) {
-		LOGGER.info("batchSendMessage {}, userId {}, receivers {} ", messageSender, userId, receiver);
-		if (StringUtils.isBlank(receiver)) {
-			throw new BizException("接收地址不能为空");
-		}
-		SimpleUserDto simpleUserDto = teacherDao.getSimpleUser(userId);
-		Integer receiverTenantId = simpleUserDto.getTenantId();
-		
-		// email data from database load
-		if (Objects.equals(messageSender.getSendMode(), "EMAIL")) {
-			loadEmailInfo(simpleUserDto.getTenantId());
-			debugMode = false;
-			LOGGER.info("batch 发送邮件 {} ", userId);
-		}
-		Date date = new Date();
-		SendStatusEnum status = SendStatusEnum.WAIT;
-		String errorMsg = null;
-		// 立即发送
-		if (triggerTime == null || date.after(triggerTime)) {
-			status = SendStatusEnum.SENDING;
-			try {
-				if (debugMode == true || messageSenderPluginContext.send(messageSender, receiver, title, content, url,jpushType,"default",null)) {
-					status = SendStatusEnum.SUCCESSED;
-				} else {
-					status = SendStatusEnum.FAILED;
+		if(StringUtils.isEmpty(jpushType)){
+			jpushType = "STUDENT";
+		}
+		List<SimpleUserDto> userDtoList = teacherDao.getUsersSimpleInfo(new ArrayList<>(receivers.keySet()));
+		List<CbsMessageWrapper.MessageParam> messageParams = new ArrayList<>();
+		for (SimpleUserDto user : userDtoList) {
+			CbsMessageWrapper.MessageParam messageParam = new CbsMessageWrapper.MessageParam();
+			messageParam.setUserId(user.getUserId().longValue());
+			messageParam.setAppKey(EAppKey.GYM);
+			messageParam.setClientType(EClientType.valueOf(jpushType));
+			messageParam.setClientId(messageParam.getClientType());
+			messageParam.setType(type.getCode());
+			messageParam.setUrl(url);
+			Map<Long, String> params = new HashMap<>();
+			params.put(user.getUserId().longValue(), user.getPhone());
+			messageParam.setReceivers(params);
+			messageParam.setRealSend(!debugMode);
+			if(args != null && args.length > 0){
+				String[] argsStr = new String[args.length];
+				for (int i = 0; i < args.length; i++) {
+					if (args[i]!=null){
+						argsStr[i] = args[i].toString();
+					}else {
+						argsStr[i] = "";
+					}
 				}
-			} catch (Exception e) {
-				status = SendStatusEnum.FAILED;
-				errorMsg = e.getMessage();
-				LOGGER.warn("消息发送失败", e);
+				messageParam.setContentArgs(argsStr);
 			}
+			messageParams.add(messageParam);
 		}
-		MessageSendMode mode = MessageSendMode.SMS;
-		if (messageSender.getSendMode().equals("PUSH")) {
-			mode = MessageSendMode.PUSH;
-		} else if (messageSender.getSendMode().equals("EMAIL")) {
-			mode = MessageSendMode.EMAIL;
-			LOGGER.info("发送邮件 {} ");
-		}
-		Map<Integer, String> receivers = new HashMap<Integer, String>();
-		receivers.put(userId, receiver);
-		addMessage(receiverTenantId, receivers, title, content, triggerTime, mode, status, errorMsg, readStatus, url, null,jpushType);
+		messageFeignClientService.sysMessageBatchSendMessage(messageParams);
 	}
 
-	private void loadEmailInfo(Integer tenantId) {
-		try {
-			SysEmail email1 = sysEmailService.getOne(new WrapperUtil<SysEmail>().hasEq("tenant_id_", tenantId).queryWrapper());
-			if (email1 == null) {
-				LOGGER.error("未找到邮件配置 tenantId" + tenantId);
-				throw new RuntimeException("未找到邮件配置 tenantId" + tenantId);
-			}
-
-			messageSenderPluginContext.sysEmail.setHostName(email1.getHostName());
-			messageSenderPluginContext.sysEmail.setSmtpPort(email1.getSmtpPort());
-			messageSenderPluginContext.sysEmail.setUserName(email1.getUserName());
-			messageSenderPluginContext.sysEmail.setPassword(email1.getPassword());
-			messageSenderPluginContext.sysEmail.setFromName(email1.getFromName());
-			messageSenderPluginContext.sysEmail.setFrom(email1.getFrom());
-		} catch (Exception e) {
-		    LOGGER.error("设置邮件配置错误: {} " + e);
-		}
-	}
 
 	@Override
-	public boolean sendSecurityCode(MessageSender messageSender, Integer userId, MessageTypeEnum messageType, String receiver) {
+	public boolean sendSecurityCode(MessageSender messageSender, Integer userId, MessageTypeEnum messageType, String receiver,String jpushType) {
 		String key1 = getVerificationCode1CacheKey(messageType, receiver);
 		if (redisCache.get(key1) != null) {
 			throw new BizException("请勿频繁操作,获取验证码间隔时间为60秒");
@@ -723,12 +674,12 @@ public class SysMessageServiceImpl extends BaseServiceImpl<Long, SysMessage> imp
 
 		String key = getVerificationCodeCacheKey(messageType, receiver);
 		int code = DEFAULT_CODE;
-		if (debugMode == false) {
+		if (!debugMode) {
 			code = getRandomCode(messageType, receiver);
 		}
 		Map<Integer, String> receivers = new HashMap<>(1);
 		receivers.put(userId, receiver);
-		batchSendMessage(messageSender, messageType, receivers, null, 1, "","", code);
+		batchSendMessage(messageSender, messageType, receivers, null, 1, "",jpushType, Integer.toString(code));
 		redisCache.put(key, code + "", CODE_EXPIRE);
 		redisCache.put(key1, code + "", CODE_INTERVAL_TIME);
 		return true;
@@ -736,7 +687,7 @@ public class SysMessageServiceImpl extends BaseServiceImpl<Long, SysMessage> imp
 
 	@Override
 	public String getSendedVerificationCode(MessageTypeEnum type, String mobileNOOrEmailAddr) {
-		if (debugMode == true) {
+		if (debugMode) {
 			return DEFAULT_CODE + "";
 		}
 		String key = getVerificationCodeCacheKey(type, mobileNOOrEmailAddr);
@@ -744,22 +695,23 @@ public class SysMessageServiceImpl extends BaseServiceImpl<Long, SysMessage> imp
 		return object == null ? null : object.toString();
 	}
 
-	@Override
-	public void delSendedVerificationCode(MessageTypeEnum type, String mobileNOOrEmailAddr) {
-		String key = getVerificationCodeCacheKey(type, mobileNOOrEmailAddr);
-		if (StringUtils.isNotBlank(key)) {
-			redisCache.delete(key);
-		}
-	}
 
 	@Override
 	public Map<String, Integer> queryCountOfUnread(MessageSendMode type, Integer userId, String jpushType, Integer tenantId) {
-		List<Mapper> mappers = sysMessageDao.queryCountOfUnread(type, userId, jpushType, tenantId);
+		CbsMessageWrapper.SysMessageQuery query = new CbsMessageWrapper.SysMessageQuery();
+		query.setUserId(userId.longValue());
+		query.setClientType(getClientType(jpushType));
+//		query.setStatus(ESendStatus.SUCCESSED);
+		query.setAppKey(EAppKey.GYM);
+		query.setSendMode(getMessageSendMode(type.getCode()));
+		query.setReadStatus(false);
+		List<CbsMessageWrapper.MessageUnreadStat> messageUnreadStats = messageFeignClientService.messageUnreadStat(query).feignData();
+//		List<Mapper> mappers = sysMessageDao.queryCountOfUnread(type, userId, jpushType, tenantId);
 
 		Map<String, Integer> map = new HashMap<String, Integer>();
 
-		for (Mapper mapper : mappers) {
-			map.put(mapper.getKey().toString(), Integer.parseInt(mapper.getValue().toString()));
+		for (CbsMessageWrapper.MessageUnreadStat mapper : messageUnreadStats) {
+			map.put(mapper.getGroup(), mapper.getNumber());
 		}
 
 		return map;
@@ -792,17 +744,26 @@ public class SysMessageServiceImpl extends BaseServiceImpl<Long, SysMessage> imp
 	 * @return 修改的条数
 	 */
 	@Override
-	public int updateStatus(Integer userId, int status,String jpushType) {
-		return sysMessageDao.updateStatus(userId, status,jpushType);
+	public Boolean updateStatus(Integer userId, int status,String jpushType) {
+		CbsMessageWrapper.MessageRead messageRead = new CbsMessageWrapper.MessageRead();
+		messageRead.setUserId(userId.longValue());
+		messageRead.setAppKey(EAppKey.GYM);
+		messageRead.setClientType(getClientType(jpushType));
+		return messageFeignClientService.batchSetRead(messageRead).feignData();
 	}
 
 	@Override
-	public int updateOneStatus(Long id, int status) {
-		return sysMessageDao.updateOneStatus(id, status);
+	public Boolean updateOneStatus(Long id) {
+		return messageFeignClientService.setRead(id).feignData();
 	}
 
 	@Override
-	public List<SysMessage> queryUserInRecentMinList(String mobile, int recentMin, MessageSendMode type) {
-		return sysMessageDao.queryUserInRecentMinList(mobile, recentMin, type);
+	public List<CbsMessageWrapper.SysMessage> queryUserInRecentMinList(String mobile, int recentMin, MessageSendMode type) {
+		CbsMessageWrapper.UserRecentMessageQuery query = new CbsMessageWrapper.UserRecentMessageQuery();
+		query.setPhone(mobile);
+		query.setRecentMin(recentMin);
+		query.setSendMode(EMessageSendMode.SMS);
+		query.setAppKey(EAppKey.GYM);
+		return messageFeignClientService.userRecentMessageRecords(query).feignData();
 	}
 }

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

@@ -108,6 +108,7 @@ public class SysMusicCompareRecordServiceImpl extends BaseServiceImpl<Long, SysM
 			return;
 		}
 		SysMusicCompareRecord sysMusicCompareRecord = new SysMusicCompareRecord();
+		sysMusicCompareRecord.setSubjectId(soundCompareInfo.getSubjectId());
 		sysMusicCompareRecord.setUserId(user.getId());
 		sysMusicCompareRecord.setSysMusicScoreId(soundCompareInfo.getMusicScoreId());
 		sysMusicCompareRecord.setHeardLevel(soundCompareInfo.getHeardLevel());
@@ -165,7 +166,7 @@ public class SysMusicCompareRecordServiceImpl extends BaseServiceImpl<Long, SysM
 	}
 
 	@Override
-	public Object getLastEvaluationMusicalNotesPlayStats(Integer userId, Long recordId) {
+	public JSONObject getLastEvaluationMusicalNotesPlayStats(Integer userId, Long recordId) {
 		SysMusicCompareRecord userLastEvaluationData;
 		if(Objects.nonNull(recordId)){
 			userLastEvaluationData = sysMusicCompareRecordDao.get(recordId);
@@ -181,6 +182,7 @@ public class SysMusicCompareRecordServiceImpl extends BaseServiceImpl<Long, SysM
 
 		JSONObject jsonObject = JSON.parseObject(userLastEvaluationData.getScoreData());
 		jsonObject.put("recordId", userLastEvaluationData.getId());
+		jsonObject.put("subjectId", userLastEvaluationData.getSubjectId());
 		jsonObject.put("score", userLastEvaluationData.getScore());
 		jsonObject.put("cadence", userLastEvaluationData.getCadence());
 		jsonObject.put("intonation", userLastEvaluationData.getIntonation());

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

@@ -132,7 +132,7 @@ public class SysUserCashAccountServiceImpl extends BaseServiceImpl<Integer, SysU
                     phoneMap, null, 0, null, "", decimal, balance);
             Map<Integer, String> idMap = new HashMap<>(1);
             idMap.put(userId, userId.toString());
-            sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.STUDENT_SMS_BALANCE_CONSUME,
+            sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.STUDENT_PUSH_BALANCE_CONSUME,
                     idMap, null, 0, null, "", decimal, balance);
         }
         return true;

+ 35 - 14
mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysUserServiceImpl.java

@@ -1,7 +1,12 @@
 package com.ym.mec.biz.service.impl;
 
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.dayaedu.cbs.common.enums.EAppKey;
+import com.dayaedu.cbs.common.enums.EClientType;
+import com.dayaedu.cbs.openfeign.client.MessageFeignClientService;
+import com.dayaedu.cbs.openfeign.wrapper.message.CbsMessageWrapper;
 import com.google.common.collect.Lists;
+import com.microsvc.toolkit.common.response.template.R;
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.dao.TeacherDao;
@@ -17,9 +22,9 @@ import com.ym.mec.thirdparty.message.MessageSenderPluginContext;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.jetbrains.annotations.Nullable;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import javax.annotation.Resource;
 import java.io.Serializable;
 import java.util.*;
 
@@ -27,17 +32,16 @@ import java.util.*;
 @Service
 public class SysUserServiceImpl implements SysUserService {
 
-    @Autowired
+    @Resource
     private SysUserFeignService sysUserFeignService;
-    @Autowired
+    @Resource
     private TeacherDao teacherDao;
-    @Autowired
+    @Resource
     private SysConfigService sysConfigService;
-    @Autowired
+    @Resource
     private ImGroupCoreService imGroupCoreService;
-
-    @Autowired
-    private MessageSenderPluginContext messageSenderPluginContext;
+    @Resource
+    private MessageFeignClientService messageFeignClientService;
 
     @Override
     public Integer getUserId(){
@@ -149,13 +153,30 @@ public class SysUserServiceImpl implements SysUserService {
 
     @Override
     public void imDeviceId(UserInfoWrapper.UpdateUser info) {
+        CbsMessageWrapper.UpdateDevice updateDevice = new CbsMessageWrapper.UpdateDevice();
+        updateDevice.setUserId(info.getUserId().longValue());
+        updateDevice.setDeviceIds(Lists.newArrayList(info.getImDeviceId()));
+        updateDevice.setClientType(getClientType(info.getClient().getCode()));
+        updateDevice.setAppKey(EAppKey.GYM);
+        R<Boolean> booleanR = messageFeignClientService.updateDevice(updateDevice);
+        if (booleanR != null && booleanR.feignData()) {
+            teacherDao.updateImDeviceId(info.getImDeviceId(), info.getClient().getCode(), info.getUserId());
+        }
+        log.error("更新用户设备信息失败,userId:{}", info.getUserId());
+    }
 
-
-        teacherDao.updateImDeviceId(info.getImDeviceId(), info.getClient().getCode(), info.getUserId());
-
-
-        messageSenderPluginContext.getMessageSenderPlugin(MessageSenderPluginContext.MessageSender.JIGUANG)
-            .deviceRemoveAlias(info.getUserId().toString(),Lists.newArrayList(info.getImDeviceId()),info.getClient().getCode());
+    public EClientType getClientType(String jpushType){
+        if(StringUtils.isEmpty(jpushType)){
+            return null;
+        }else if(StringUtils.equals(jpushType, "STUDENT")){
+            return EClientType.STUDENT;
+        }else if(StringUtils.equals(jpushType, "TEACHER")){
+            return EClientType.TEACHER;
+        }else if(StringUtils.equals(jpushType, "SCHOOL")){
+            return EClientType.SCHOOL;
+        }else {
+            return EClientType.BACKEND;
+        }
     }
 
     @Nullable

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

@@ -1835,11 +1835,11 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
         if (teacher != null) {
             Map<Integer, String> map = new HashMap<>(1);
             map.put(vipGroup.getUserId(), vipGroup.getUserId().toString());
-            sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.TEACHER_SMS_PUSH_VIP_COURSE_APPLY_RESULT,
+            sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.TEACHER_PUSH_VIP_COURSE_APPLY_RESULT,
                     map, null, 0, "7", "TEACHER", vipGroup.getName(), vipGroup.getAuditStatus().getMsg());
             Map<Integer, String> map1 = new HashMap<>(1);
             map1.put(vipGroup.getUserId(), teacher.getPhone());
-            sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.AWSMS, MessageTypeEnum.TEACHER_SMS_PUSH_VIP_COURSE_APPLY_RESULT,
+            sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.AWSMS, MessageTypeEnum.TEACHER_SMS_VIP_COURSE_APPLY_RESULT,
                     map1, null, 0, "7", "", vipGroup.getName(), vipGroup.getAuditStatus().getMsg());
         }
     }

+ 20 - 13
mec-biz/src/main/resources/config/mybatis/ImGroupMemberMapper.xml

@@ -14,6 +14,7 @@
 		<result column="is_admin_" property="isAdmin" />
 		<result column="role_type_" property="roleType"/>
 		<result column="type_" property="type"/>
+		<result column="group_role_type_" property="groupRoleType"/>
 		<result column="create_time_" property="createTime" />
 		<result column="update_time_" property="updateTime" />
         <result column="tenant_id_" property="tenantId"/>
@@ -32,15 +33,15 @@
 	
 	<!-- 向数据库增加一条记录 -->
 	<insert id="insert" parameterType="com.ym.mec.biz.dal.entity.ImGroupMember" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
-		INSERT INTO im_group_member (im_group_id_,user_id_,nickname_,is_admin_,role_type_,create_time_,update_time_,tenant_id_,type_,group_role_type_)
-		VALUES(#{imGroupId},#{userId},#{nickname},#{isAdmin},#{roleType},NOW(),NOW(),#{tenantId},#{type},#{groupRoleType})
+		INSERT INTO im_group_member (im_group_id_,user_id_,nickname_,is_admin_,role_type_,create_time_,update_time_,tenant_id_,type_,group_role_type_,mute_flag_)
+		VALUES(#{imGroupId},#{userId},#{nickname},#{isAdmin},#{roleType},NOW(),NOW(),#{tenantId},#{type},#{groupRoleType},#{muteFlag})
         ON DUPLICATE KEY UPDATE nickname_ = VALUES(nickname_), is_admin_ = VALUES(is_admin_), role_type_ = VALUES(role_type_), type_ = VALUES(type_)
 	</insert>
 	
 	<insert id="batchInsert" parameterType="com.ym.mec.biz.dal.entity.ImGroupMember" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
-		INSERT INTO im_group_member (im_group_id_,user_id_,nickname_,is_admin_,role_type_,create_time_,update_time_,tenant_id_,type_,group_role_type_) VALUES
+		INSERT INTO im_group_member (im_group_id_,user_id_,nickname_,is_admin_,role_type_,create_time_,update_time_,tenant_id_,type_,group_role_type_,mute_flag_) VALUES
 		 <foreach collection="list" item="item" separator=",">
-		(#{item.imGroupId},#{item.userId},#{item.nickname},#{item.isAdmin},#{item.roleType},NOW(),NOW(),#{item.tenantId},#{item.type},#{item.groupRoleType})
+		(#{item.imGroupId},#{item.userId},#{item.nickname},#{item.isAdmin},#{item.roleType},NOW(),NOW(),#{item.tenantId},#{item.type},#{item.groupRoleType},#{item.muteFlag})
 		</foreach>
         ON DUPLICATE KEY UPDATE nickname_ = VALUES(nickname_), is_admin_ = VALUES(is_admin_), role_type_ = VALUES(role_type_), type_ = VALUES(type_)
 	</insert>
@@ -51,13 +52,16 @@
 		<if test="groupRoleType != null and groupRoleType != ''">
 			group_role_type_ = #{groupRoleType},
 		</if>
+		<if test="muteFlag != null">
+			mute_flag_ = #{muteFlag},
+		</if>
 		<if test="roleType != null">
 		role_type_ = #{roleType},
 		</if>
 		<if test="userId != null">
 		user_id_ = #{userId},
 		</if>
-		<if test="nickname != null">
+		<if test="nickname != null and nickname != ''">
 		nickname_ = #{nickname},
 		</if>
 		<if test="isAdmin != null">
@@ -77,23 +81,26 @@
 		<foreach collection="list" item="item" index="index" open="" close="" separator=";">
 			UPDATE im_group_member 
 			<set>
-				<if test="item.groupRoleType != null">
+				<if test="item.groupRoleType != null and item.groupRoleType != ''">
 					group_role_type_ = #{item.groupRoleType},
 				</if>
+				<if test="item.muteFlag != null">
+					mute_flag_ = #{item.muteFlag},
+				</if>
 				<if test="item.roleType != null">
-				role_type_ = #{item.roleType},
+					role_type_ = #{item.roleType},
 				</if>
 				<if test="item.userId != null">
-				user_id_ = #{item.userId},
+					user_id_ = #{item.userId},
 				</if>
-				<if test="item.nickname != null">
-				nickname_ = #{item.nickname},
+				<if test="item.nickname != null and item.nickname != ''">
+					nickname_ = #{item.nickname},
 				</if>
 				<if test="item.isAdmin != null">
-				is_admin_ = #{item.isAdmin},
+					is_admin_ = #{item.isAdmin},
 				</if>
 				<if test="item.imGroupId != null">
-				im_group_id_ = #{item.imGroupId},
+					im_group_id_ = #{item.imGroupId},
 				</if>
                 <if test="item.type != null">
                     type_ = #{item.type},
@@ -147,7 +154,7 @@
 	</select>
     <select id="queryMembers" resultMap="ImGroupMember">
 		SELECT #{groupId} im_group_id_,CASE WHEN su.username_ IS NULL OR su.username_ = '' THEN su.real_name_ ELSE su.username_ END nickname_,
-		       #{tenantId} tenant_id_,su.id_ user_id_,su.avatar_
+		       #{tenantId} tenant_id_,su.id_ user_id_,su.avatar_,'乐团主管' role_type_,'ORCHESTRA_MANAGER' type_,'Admin' group_role_type_
 		FROM sys_user su
 		WHERE su.id_ IN
 		<foreach collection="userIdList" item="item" open="(" separator="," close=")">

+ 4 - 2
mec-biz/src/main/resources/config/mybatis/ImGroupMemberPlusMapper.xml

@@ -10,9 +10,11 @@
 
 
     <insert id="insertBatch" parameterType="com.ym.mec.biz.dal.entity.ImGroupMemberPlus" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
-        INSERT INTO im_group_member (im_group_id_,user_id_,nickname_,is_admin_,role_type_,create_time_,update_time_,tenant_id_,type_) VALUES
+        INSERT INTO im_group_member (im_group_id_,user_id_,nickname_,is_admin_,role_type_,
+        create_time_,update_time_,tenant_id_,type_,group_role_type_) VALUES
         <foreach collection="list" item="item" separator=",">
-            (#{item.imGroupId},#{item.userId},#{item.nickname},#{item.isAdmin},#{item.roleType},NOW(),NOW(),#{item.tenantId},#{item.type})
+            (#{item.imGroupId},#{item.userId},#{item.nickname},#{item.isAdmin},#{item.roleType},
+            NOW(),NOW(),#{item.tenantId},#{item.type},#{item.groupRoleType})
         </foreach>
         ON DUPLICATE KEY UPDATE nickname_ = VALUES(nickname_), is_admin_ = VALUES(is_admin_), role_type_ = VALUES(role_type_), type_ = VALUES(type_)
     </insert>

+ 5 - 4
mec-biz/src/main/resources/config/mybatis/LessonExaminationMapper.xml

@@ -32,10 +32,11 @@
     </update>
     <update id="updateStandardNum">
         update lesson_examination le
-            left join (
-                select lesson_examination_id_,COUNT(distinct user_id_) num from student_lesson_examination_detail
-                where lesson_examination_id_ = #{lessonExaminationId}
-                group by user_id_ HAVING SUM(actual_avg_score_) >= 60) sle ON sle.lesson_examination_id_ = le.id_
+            left join (select lesson_examination_id_,COUNT(user_id_) num from (
+            select lesson_examination_id_,user_id_ from student_lesson_examination_detail
+            where lesson_examination_id_ = #{lessonExaminationId}
+            group by user_id_ HAVING SUM(actual_avg_score_) >= 60) le
+            group by lesson_examination_id_) sle ON sle.lesson_examination_id_ = le.id_
         set le.standard_num_ = sle.num
         where le.id_ = #{lessonExaminationId} AND num > 0
     </update>

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

@@ -297,7 +297,9 @@
         student_course_homework sch
         LEFT JOIN sys_user su ON sch.user_id_=su.id_
         <where>
-                sch.course_schedule_id_=#{courseScheduleId}
+            <if test="courseScheduleId != null">
+                AND sch.course_schedule_id_=#{courseScheduleId}
+            </if>
             <if test="homeworkId!=null">
                 AND sch.course_homework_id_=#{homeworkId}
             </if>

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

@@ -31,6 +31,7 @@
 		<result column="create_time_" property="createTime" />
 		<result column="part_index_" property="partIndex" />
         <result column="tenant_id_" property="tenantId"/>
+        <result column="subject_id_" property="subjectId"/>
 	</resultMap>
 
 	<!-- 根据主键查询一条记录 -->
@@ -47,15 +48,16 @@
 	<insert id="insert" parameterType="com.ym.mec.biz.dal.entity.SysMusicCompareRecord" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
 		INSERT INTO sys_music_compare_record (id_,user_id_,sys_music_score_id_,heard_level_,behavior_id_,score_data_,score_,intonation_,cadence_,integrity_,
 		                                      record_file_path_,video_file_path_,device_type_,client_id_,play_time_,speed_,monday_,
-												source_time_,feature_,create_time_,create_date_,update_time_,part_index_,tenant_id_)
+												source_time_,feature_,create_time_,create_date_,update_time_,part_index_,tenant_id_,subject_id_)
 		VALUES(#{id},#{userId},#{sysMusicScoreId},#{heardLevel,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{behaviorId},#{scoreData},
 		       #{score},#{intonation},#{cadence},#{integrity},
 		       #{recordFilePath},#{videoFilePath},#{deviceType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{clientId},#{playTime},#{speed},#{monday},
-		       #{sourceTime},#{feature,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}, #{createTime}, #{createDate}, NOW(),#{partIndex},#{tenantId})
+		       #{sourceTime},#{feature,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}, #{createTime}, #{createDate}, NOW(),#{partIndex},#{tenantId},#{subjectId})
 	</insert>
 	<insert id="init">
 		insert into sys_music_compare_day_data (user_id_, day_, train_num_, train_time_, tenant_id_)
-		select smcr.user_id_,DATE_FORMAT(smcr.create_time_,'%Y-%m-%d'),COUNT(smcr.id_),SUM(smcr.play_time_),smcr.tenant_id_ from sys_music_compare_record smcr
+		select smcr.user_id_,DATE_FORMAT(smcr.create_time_,'%Y-%m-%d'),COUNT(smcr.id_),SUM(smcr.play_time_),smcr.tenant_id_
+		from sys_music_compare_record smcr
 		where smcr.create_date_ = #{date}
 		group by smcr.create_date_,smcr.user_id_;
 	</insert>
@@ -63,6 +65,9 @@
 	<!-- 根据主键查询一条记录 -->
 	<update id="update" parameterType="com.ym.mec.biz.dal.entity.SysMusicCompareRecord">
 		UPDATE sys_music_compare_record <set>
+		<if test="subjectId != null">
+			subject_id_ = #{subjectId},
+		</if>
 		<if test="userId != null">
 			user_id_ = #{userId},
 		</if>
@@ -138,6 +143,9 @@
 			<if test="userId!=null">
 				AND smcr.user_id_=#{userId}
 			</if>
+			<if test="subjectId != null">
+				AND smcr.subject_id_=#{subjectId}
+			</if>
 			<if test="featureType != null">
 				AND smcr.feature_ = #{featureType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
 			</if>
@@ -157,7 +165,7 @@
 			LOCATE('musicalNotesPlayStats', smcr.score_data_) notes_data_index_,
 		       smcr.score_, smcr.intonation_, smcr.cadence_,
 		       smcr.integrity_, smcr.record_file_path_, smcr.video_file_path_, smcr.client_id_, smcr.device_type_, smcr.play_time_,
-		       smcr.monday_, smcr.create_time_,
+		       smcr.monday_, smcr.create_time_,smcr.subject_id_,
 			sms.name_ sys_music_score_name_
 		FROM sys_music_compare_record smcr
 		LEFT JOIN sys_music_score sms on smcr.sys_music_score_id_ = sms.id_

+ 0 - 25
mec-thirdparty/src/main/java/com/ym/mec/thirdparty/message/MessageSenderPluginContext.java

@@ -82,31 +82,6 @@ public class MessageSenderPluginContext implements ApplicationContextAware {
 		return future.join();
 	}
 
-	/**
-	 * 批量发送消息至目的地
-	 * @param messageSender 消息发送方
-	 * @param subject 消息主题
-	 * @param content 消息内容
-	 * @param receivers 收件人列表
-	 * @param url 链接地址
-	 * @return 是否发送成功
-	 * @throws IOException
-	 */
-	public boolean batchSend(MessageSender messageSender, String subject, String content, String[] receivers, String url, String jpushType,String sound,String channelId) throws Exception {
-		ExecutorService executor = Executors.newFixedThreadPool(5);
-		CompletableFuture<Boolean> future = CompletableFuture.supplyAsync(()->{
-			messageSenderPlugin = getMessageSenderPlugin(messageSender);
-			try {
-				return messageSenderPlugin.batchSend(subject, content, receivers, url, jpushType,sound,channelId);
-			} catch (Exception e) {
-				e.printStackTrace();
-			}
-			return false;
-		},executor);
-		executor.shutdown();
-		return future.join();
-	}
-
 	@Override
 	public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
 		this.applicationContext = applicationContext;