Forráskód Böngészése

Merge branch 'master' of http://git.dayaedu.com/yonge/mec

yonge 4 éve
szülő
commit
44ea55e6de

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

@@ -13,6 +13,7 @@ import org.apache.ibatis.annotations.Param;
 import java.util.Date;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 
 public interface ClassGroupStudentMapperDao extends BaseDAO<Long, ClassGroupStudentMapper> {
 
@@ -447,4 +448,12 @@ public interface ClassGroupStudentMapperDao extends BaseDAO<Long, ClassGroupStud
      * @return
      */
     Boolean hasStudent(@Param("masterClassGroupId") Integer masterClassGroupId, @Param("studentIds") List<Integer> studentIds);
+
+    /**
+     * 获取班级关联的学员列表
+     * @param classGroupId
+     * @return
+     */
+    Set<Integer> queryStudentIdsByClassGroupId(@Param("classGroupId") Integer classGroupId,@Param("musicGroupId") String musicGroupId,
+                                               @Param("groupType") GroupType groupType);
 }

+ 13 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/ClassGroupTeacherMapperDao.java

@@ -8,6 +8,7 @@ import com.ym.mec.common.dal.BaseDAO;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
+import java.util.Set;
 
 public interface ClassGroupTeacherMapperDao extends BaseDAO<Long, ClassGroupTeacherMapper> {
 
@@ -136,5 +137,16 @@ public interface ClassGroupTeacherMapperDao extends BaseDAO<Long, ClassGroupTeac
      * @param classGroupIds
      * @param newTeacherId
      */
-    void batchUpdateTeacherByClassId(@Param("classGroupIds") List<Integer> classGroupIds, @Param("oldTeacherId") Integer oldTeacherId, @Param("newTeacherId") Integer newTeacherId);
+    void batchUpdateTeacherByClassId(@Param("classGroupIds") List<Integer> classGroupIds,
+                                     @Param("oldTeacherId") Integer oldTeacherId,
+                                     @Param("newTeacherId") Integer newTeacherId);
+
+    /**
+     * 获取班级和课程上关联的老师列表
+     * @param classGroupId
+     * @return
+     */
+    Set<Integer> queryTeacherIdsByClassGroupId(@Param("classGroupId") Integer classGroupId,
+                                               @Param("musicGroupId") String musicGroupId,
+                                               @Param("groupType") GroupType groupType);
 }

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

@@ -59,6 +59,8 @@ public interface TeacherDao extends BaseDAO<Integer, Teacher> {
 
     List<Map<Integer, String>> queryNameByIdList(@Param("userIds") List<Integer> userIds);
 
+    List<Map<Integer, String>> queryUserNameByIdList(@Param("userIds") List<Integer> userIds);
+
     List<Map<Integer, String>> querySubjectNameByIdList(@Param("userIds") List<Integer> userIds);
 
     /**

+ 9 - 19
mec-biz/src/main/java/com/ym/mec/biz/service/ImUserFriendService.java

@@ -1,6 +1,7 @@
 package com.ym.mec.biz.service;
 
 import java.util.List;
+import java.util.Set;
 
 import com.ym.mec.biz.dal.dto.ImUserFriendDto;
 import com.ym.mec.biz.dal.entity.ImUserFriend;
@@ -59,35 +60,24 @@ public interface ImUserFriendService extends BaseService<Long, ImUserFriend> {
     void batchInsert(List<ImUserFriend> imUserFriends);
 
 	/**
-	 * 班级新增学员
-	 * @param classGroupId
-	 * @param studentId
+	 * 刷新班级通讯录
+	 * @param courseScheduleId
 	 * @author zouxuan
 	 */
-	void classGroupAddStudent(Integer classGroupId,List<Integer> studentId);
+	void refreshCourseImUserFriend(Long courseScheduleId);
 
 	/**
-	 * 班级更换老师
+	 * 刷新班级通讯录
 	 * @param classGroupId
-	 * @param teacherId
 	 * @author zouxuan
 	 */
-	void classGroupChangeTeacher(Integer classGroupId,Integer teacherId);
+	void refreshClassImUserFriend(Integer classGroupId);
 
 	/**
-	 * 课程组更换教务老师
-	 * @param groupId
-	 * @param educationId
+	 * 刷新课程组通讯录
+	 * @param musicGroupId
 	 * @param groupType
 	 * @author zouxuan
 	 */
-	void groupChangeEducation(String groupId, Integer educationId, GroupType groupType);
-
-	/**
-	 * 课程老师调整
-	 * @param courseScheduleId
-	 * @param teacherId
-	 * @author zouxuan
-	 */
-	void courseScheduleChangeTeacher(Long courseScheduleId,Integer teacherId);
+	void refreshGroupImUserFriend(String musicGroupId,GroupType groupType);
 }

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

@@ -2137,11 +2137,6 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
             }
             //3、将老师加入关联关系
             classGroupTeacherMapperDao.classGroupTeachersInsert(classGroupTeacherMapperList);
-            Set<Integer> collect = classGroupTeacherMapperList.stream().map(e -> e.getUserId()).collect(Collectors.toSet());
-            for (Integer integer : collect) {
-                //班级老师通讯录
-                imUserFriendService.classGroupChangeTeacher(classGroup.getId(),integer);
-            }
             //创建IM群组
             addImGroup(classGroup, userIds, teacherIds);
         }
@@ -2184,6 +2179,7 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
             Integer musicGroupStudentClassAdjustId = classGroup4MixDto.getMusicGroupStudentClassAdjustId();
             //学生结算表
             courseScheduleStudentPaymentService.createForMusicGroup(courseScheduleList, studentIdList, musicGroupStudentClassAdjustId);
+            imUserFriendService.refreshClassImUserFriend(classGroup.getId());
             return classGroup;
         }
         return null;
@@ -2222,7 +2218,6 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
             });
             newTeacherMapperList.forEach(e -> {
                 imGroupMemberService.join(classGroupId.longValue(), e.getUserId(), "指导老师", false);
-                imUserFriendService.classGroupChangeTeacher(classGroupId,e.getUserId());
             });
         }
         if (Objects.nonNull(classGroup4MixDtos.get(0).getCourseAddType()) && classGroup4MixDtos.get(0).getCourseAddType().equals("onlyUpdateTeacher")) {
@@ -2422,7 +2417,7 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
             //学生结算表
             courseScheduleStudentPaymentService.createForMusicGroup(musicGroupId, courseScheduleList, studentIds);
         }
-
+        imUserFriendService.refreshClassImUserFriend(classGroupId);
         return classGroup;
     }
 
@@ -2988,7 +2983,7 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
         
         imGroupService.create(classGroup.getId().longValue(), musicGroup.getTeamTeacherId(), classGroup.getName(), musicGroup.getName(), musicGroup.getName(), musicGroup.getName(), null, "MUSIC");
         imGroupMemberService.join(classGroup.getId().longValue(), userRoleMap);
-        imUserFriendService.classGroupAddStudent(classGroup.getId(),userIds);
+        imUserFriendService.refreshClassImUserFriend(classGroup.getId());
         return true;
     }
 

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

@@ -538,8 +538,8 @@ public class ClassGroupStudentMapperServiceImpl extends BaseServiceImpl<Long, Cl
             }
             //5、添加进IM群组
             imGroupMemberService.join(classGroup.getId().longValue(), userRoleMap);
-            imUserFriendService.classGroupAddStudent(classGroup.getId(),new ArrayList<>(addStudentIds));
         }
+        imUserFriendService.refreshClassImUserFriend(classGroup.getId());
     }
 
     @Override
@@ -605,13 +605,12 @@ public class ClassGroupStudentMapperServiceImpl extends BaseServiceImpl<Long, Cl
         //修改班级人数
         classGroupService.updateClassStudentNum(classGroupId.intValue(), classGroup.getStudentNum() + studentIds.size());
 
-        //班级加学员
-        imUserFriendService.classGroupAddStudent(classGroupId.intValue(),studentIds);
         //添加进IM群组
         Map<Integer,String> userRoleMap = new HashMap<Integer, String>();
         for (Integer studentId : studentIds) {
         	userRoleMap.put(studentId, null);
         }
         imGroupMemberService.join(classGroupId.longValue(), userRoleMap);
+        imUserFriendService.refreshClassImUserFriend(classGroupId.intValue());
     }
 }

+ 3 - 7
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleServiceImpl.java

@@ -3229,7 +3229,6 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 					ta.setMusicGroupId(newCourseSchedule.getMusicGroupId());
 					ta.setTeacherId(teacherId);
 					insertTeacherAttendanceList.add(ta);
-					imUserFriendService.courseScheduleChangeTeacher(courseScheduleId, teacherId);
 				}
 				
 			}
@@ -3408,6 +3407,7 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 
 		courseEventSource.courseStatusChange(new HashSet<>(courseScheduleIds));
 
+		imUserFriendService.refreshCourseImUserFriend(courseScheduleId);
 		// 推送
 		try {
 			Set<Integer> teacherIds = newCourseSchedules.stream().map(e -> e.getActualTeacherId()).collect(Collectors.toSet());
@@ -4615,7 +4615,7 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 		//清除考勤申述
 		teacherAttendanceDao.clearAttendanceComplaints(courseScheduleIds);
 		//添加通讯录
-		imUserFriendService.classGroupChangeTeacher(oldCourseSchedule.getClassGroupId(),teacherId);
+		imUserFriendService.refreshCourseImUserFriend(courseScheduleId);
 		//保存修改记录
 		saveModifyLog(modifyLogs,courseIds);
 
@@ -4657,8 +4657,6 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 		ClassGroup classGroup = classGroupDao.findByMusicGroupAndType(practiceGroupId, PRACTICE.getCode());
 		//教务老师变更
         if(Objects.nonNull(educationalTeacherId)&&!educationalTeacherId.equals(practiceGroup.getEducationalTeacherId())){
-        	//变更通讯录
-			imUserFriendService.groupChangeEducation(practiceGroupId,educationalTeacherId,PRACTICE);
 			practiceGroup.setEducationalTeacherId(educationalTeacherId);
 		}
 		if(Objects.nonNull(subjectId)&&!subjectId.equals(practiceGroup.getSubjectId())){
@@ -4675,8 +4673,6 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 			courseScheduleDao.updateCourseNameByGroup(practiceGroupId, PRACTICE,groupName);
 		}
 		if(!teacherId.equals(practiceGroup.getUserId())){
-			//变更通讯录
-			imUserFriendService.classGroupChangeTeacher(classGroup.getId(),teacherId);
 			practiceGroup.setUserId(teacherId);
 			classGroupTeacherMapperService.updateTeacher(practiceGroupId,teacherId, PRACTICE.getCode());
 			classGroupTeacherSalaryDao.updateTeacher(practiceGroupId,teacherId, PRACTICE.getCode());
@@ -4731,7 +4727,7 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 			}
 		}
 		practiceGroupDao.update(practiceGroup);
-
+		imUserFriendService.refreshGroupImUserFriend(practiceGroup.getId().toString(), PRACTICE);
     }
 
     @Override

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

@@ -581,10 +581,6 @@ public class EduPracticeGroupServiceImpl implements EduPracticeGroupService{
         practiceGroup.setGroupStatus(GroupStatusEnum.NORMAL);
         practiceGroupDao.update(practiceGroup);
 
-        imUserFriendService.groupChangeEducation(practiceGroup.getId().toString(), practiceGroup.getEducationalTeacherId(), GroupType.PRACTICE);
-        imUserFriendService.classGroupChangeTeacher(classGroup.getId(), practiceGroup.getUserId());
-        imUserFriendService.classGroupAddStudent(classGroup.getId(), Arrays.asList(practiceGroup.getStudentId()));
-
         try {
             contractService.transferPracticeCoursesContract(order.getUserId(),classGroup.getTotalClassTimes(),practiceGroup.getCoursesStartDate(),practiceGroup.getCoursesExpireDate(),order.getExpectAmount());
         } catch (Exception e) {
@@ -622,7 +618,7 @@ public class EduPracticeGroupServiceImpl implements EduPracticeGroupService{
         }
 
         studentDao.updateStudentServiceTag(practiceGroup.getStudentId(),null,YesOrNoEnum.YES.getCode());
-
+        imUserFriendService.refreshGroupImUserFriend(practiceGroup.getId().toString(),GroupType.PRACTICE);
     }
 
     @Override
@@ -1160,12 +1156,8 @@ public class EduPracticeGroupServiceImpl implements EduPracticeGroupService{
             e.printStackTrace();
         }
 
-        imUserFriendService.groupChangeEducation(practiceGroupBuyParams.getId().toString(), practiceGroupBuyParams.getEducationalTeacherId(), GroupType.PRACTICE);
-        imUserFriendService.classGroupChangeTeacher(classGroup.getId(), practiceGroupBuyParams.getUserId());
-        imUserFriendService.classGroupAddStudent(classGroup.getId(), Arrays.asList(practiceGroupBuyParams.getStudentId()));
-
         studentDao.updateStudentServiceTag(practiceGroupBuyParams.getStudentId(),null,YesOrNoEnum.YES.getCode());
-
+        imUserFriendService.refreshGroupImUserFriend(practiceGroupBuyParams.getId().toString(),GroupType.PRACTICE);
         return BaseController.succeed();
     }
 

+ 355 - 273
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ImUserFriendServiceImpl.java

@@ -134,320 +134,402 @@ public class ImUserFriendServiceImpl extends BaseServiceImpl<Long, ImUserFriend>
 
 	@Override
 	@Transactional(rollbackFor = Exception.class)
-	public void classGroupAddStudent(Integer classGroupId, List<Integer> studentIds) {
-		Set<Integer> teacherIds = new HashSet<>();
-		Set<Integer> educations = new HashSet<>();
+	public void refreshCourseImUserFriend(Long courseId) {
+		CourseSchedule courseSchedule = courseScheduleDao.get(courseId);
+		//获取班级关联的老师列表
+		Set<Integer> teacherIds = classGroupTeacherMapperDao.queryTeacherIdsByClassGroupId(courseSchedule.getClassGroupId(),null,null);
+		//获取班级关联的学员列表
+		Set<Integer> studentIds = classGroupStudentMapperDao.queryStudentIdsByClassGroupId(courseSchedule.getClassGroupId(),null,null);
+		ClassGroup classGroup = classGroupDao.get(courseSchedule.getClassGroupId());
+		GroupType groupType = classGroup.getGroupType();
+		saveImUserFriends(studentIds,teacherIds,groupType,classGroup.getMusicGroupId());
+	}
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public void refreshClassImUserFriend(Integer classGroupId) {
+		//获取班级关联的老师列表
+		Set<Integer> teacherIds = classGroupTeacherMapperDao.queryTeacherIdsByClassGroupId(classGroupId,null,null);
+		//获取班级关联的学员列表
+		Set<Integer> studentIds = classGroupStudentMapperDao.queryStudentIdsByClassGroupId(classGroupId,null,null);
 		ClassGroup classGroup = classGroupDao.get(classGroupId);
-		List<ImUserFriend> imUserFriends = new ArrayList<>();
-		//获取班级关联的老师
-		List<ClassGroupTeacherMapper> classGroupTeacherMappers = classGroupTeacherMapperDao.findByClassGroup(classGroupId);
-		teacherIds.addAll(classGroupTeacherMappers.stream().map(e->e.getUserId()).collect(Collectors.toSet()));
-		//学员关联的课程上的老师
-		teacherIds.addAll(courseScheduleTeacherSalaryDao.queryTeacherByTeaching(classGroupId,null));
-		teacherIds.addAll(studentIds);
+		GroupType groupType = classGroup.getGroupType();
+		saveImUserFriends(studentIds,teacherIds,groupType,classGroup.getMusicGroupId());
+	}
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public void refreshGroupImUserFriend(String musicGroupId,GroupType groupType) {
+		//获取班级关联的老师列表
+		Set<Integer> teacherIds = classGroupTeacherMapperDao.queryTeacherIdsByClassGroupId(null,musicGroupId,groupType);
+		//获取班级关联的学员列表
+		Set<Integer> studentIds = classGroupStudentMapperDao.queryStudentIdsByClassGroupId(null,musicGroupId,groupType);
+		saveImUserFriends(studentIds,teacherIds,groupType,musicGroupId);
+	}
 
+	private void saveImUserFriends(Set<Integer> studentIds,Set<Integer> teacherIds,GroupType groupType,String musicGroupId){
+		List<ImUserFriend> imUserFriends = new ArrayList<>();
+		Set<Integer> educationIds = new HashSet<>();
 		MusicGroup musicGroup = new MusicGroup();
+		//获取当前学员声部
 		Map<Integer,String> studentSubjectName = new HashMap<>();
-
-		GroupType groupType = classGroup.getGroupType();
+		Map<Integer, String> teacherSubjectNameMap = new HashMap<>();
+		if(teacherIds.size() > 0){
+			teacherSubjectNameMap = MapUtil.convertIntegerMap(teacherDao.querySubjectNameByIdList(new ArrayList<>(teacherIds)));
+		}
 		if(groupType == MUSIC){
 			//学员关联乐团管理人员通讯录
-			musicGroup = musicGroupDao.get(classGroup.getMusicGroupId());
-			teacherIds.add(musicGroup.getDirectorUserId());
-			teacherIds.add(musicGroup.getEducationalTeacherId());
-			teacherIds.add(musicGroup.getTeamTeacherId());
-			educations.add(musicGroup.getDirectorUserId());
-			educations.add(musicGroup.getEducationalTeacherId());
-			educations.add(musicGroup.getTeamTeacherId());
-			//获取当前学员声部
-			studentSubjectName = MapUtil.convertMybatisMap(studentRegistrationDao.getStudentSubjectNameByStuIds(musicGroup.getId(),studentIds));
+			musicGroup = musicGroupDao.get(musicGroupId);
+			educationIds.add(musicGroup.getDirectorUserId());
+			educationIds.add(musicGroup.getEducationalTeacherId());
+			educationIds.add(musicGroup.getTeamTeacherId());
+			if(studentIds.size() > 0){
+				studentSubjectName = MapUtil.convertMybatisMap(studentRegistrationDao.getStudentSubjectNameByStuIds(musicGroup.getId(),studentIds));
+			}
 		}else if(groupType == VIP){
-			VipGroup vipGroup = vipGroupDao.get(Long.parseLong(classGroup.getMusicGroupId()));
-			teacherIds.add(vipGroup.getEducationalTeacherId());
-			educations.add(vipGroup.getEducationalTeacherId());
+			VipGroup vipGroup = vipGroupDao.get(Long.parseLong(musicGroupId));
+			educationIds.add(vipGroup.getEducationalTeacherId());
 		}else if(groupType == PRACTICE){
-			PracticeGroup practiceGroup = practiceGroupDao.get(Long.parseLong(classGroup.getMusicGroupId()));
-			teacherIds.add(practiceGroup.getEducationalTeacherId());
-			educations.add(practiceGroup.getEducationalTeacherId());
+			PracticeGroup practiceGroup = practiceGroupDao.get(Long.parseLong(musicGroupId));
+			educationIds.add(practiceGroup.getEducationalTeacherId());
 		}
-		educations.removeAll(Collections.singleton(null));
+		studentIds.removeAll(Collections.singleton(null));
 		teacherIds.removeAll(Collections.singleton(null));
-		//获取通讯录昵称
-		Map<Integer, String> nameIdMap = MapUtil.convertIntegerMap(teacherDao.queryNameByIdList(new ArrayList<>(teacherIds)));
-		//获取老师声部
-		Map<Integer, String> teacherSubjectNameMap = MapUtil.convertIntegerMap(teacherDao.querySubjectNameByIdList(new ArrayList<>(teacherIds)));
+		educationIds.removeAll(Collections.singleton(null));
+		Map<Integer, String> usernameMap = new HashMap<>();
+		if(studentIds.size() > 0){
+			usernameMap = MapUtil.convertMybatisMap(teacherDao.queryUserNameByIdList(new ArrayList<>(studentIds)));
+		}
+		Map<Integer, String> teacherRealNameMap = new HashMap<>();
+		if(teacherIds.size() > 0){
+			usernameMap = MapUtil.convertMybatisMap(teacherDao.queryUserNameByIdList(new ArrayList<>(teacherIds)));
+		}
+		Map<Integer, String> educationRealNameMap = new HashMap<>();
+		if(educationIds.size() > 0){
+			usernameMap = MapUtil.convertMybatisMap(teacherDao.queryUserNameByIdList(new ArrayList<>(educationIds)));
+		}
+		//老师关联教务、学员
 		for (Integer teacherId : teacherIds) {
+			//老师关联学员
 			for (Integer studentId : studentIds) {
 				if(teacherId == studentId){
 					continue;
 				}
 				//学员、教务关联的老师
 				ImUserFriend imUserFriend = new ImUserFriend();
-				imUserFriend.setUserId(studentId);
-				imUserFriend.setFriendId(teacherId);
-				imUserFriend.setFriendNickname(nameIdMap.get(teacherId));
+				imUserFriend.setUserId(teacherId);
+				imUserFriend.setFriendId(studentId);
+				imUserFriend.setFriendNickname(usernameMap.get(studentId));
 				imUserFriend.setMemo(musicGroup.getName());
-				imUserFriend.setTags(teacherSubjectNameMap.get(teacherId));
+				imUserFriend.setTags(studentSubjectName.get(studentId));
+				imUserFriends.add(imUserFriend);
+			}
+			//老师关联教务
+			for (Integer educationId : educationIds) {
+				if(teacherId == educationId){
+					continue;
+				}
+				ImUserFriend imUserFriend = new ImUserFriend();
+				imUserFriend.setUserId(teacherId);
+				imUserFriend.setFriendId(educationId);
+				imUserFriend.setFriendNickname(educationRealNameMap.get(educationId));
 				imUserFriends.add(imUserFriend);
-				//老师关联的学生、教务
-				ImUserFriend imUserFriend1 = new ImUserFriend();
-				imUserFriend1.setUserId(teacherId);
-				imUserFriend1.setFriendId(studentId);
-				imUserFriend1.setFriendNickname(nameIdMap.get(studentId));
-				imUserFriend1.setMemo(musicGroup.getName());
-				imUserFriend1.setTags(studentSubjectName.get(studentId));
-				imUserFriends.add(imUserFriend1);
 			}
 		}
-		for (Integer education : educations) {
+		//教务关联的老师、学员
+		for (Integer educationId : educationIds) {
+			//教务关联学员
 			for (Integer studentId : studentIds) {
-				if(education == studentId){
+				if(educationId == studentId){
 					continue;
 				}
-				//学员关联教务
 				ImUserFriend imUserFriend = new ImUserFriend();
-				imUserFriend.setUserId(studentId);
-				imUserFriend.setFriendId(education);
-				imUserFriend.setFriendNickname(nameIdMap.get(education));
+				imUserFriend.setUserId(educationId);
+				imUserFriend.setFriendId(studentId);
+				imUserFriend.setFriendNickname(usernameMap.get(studentId));
 				imUserFriend.setMemo(musicGroup.getName());
-				imUserFriend.setTags(teacherSubjectNameMap.get(education));
+				imUserFriend.setTags(studentSubjectName.get(studentId));
 				imUserFriends.add(imUserFriend);
-				//教务关联学员
-				ImUserFriend imUserFriend1 = new ImUserFriend();
-				imUserFriend1.setUserId(education);
-				imUserFriend1.setFriendId(studentId);
-				imUserFriend1.setFriendNickname(nameIdMap.get(studentId));
-				imUserFriend1.setMemo(musicGroup.getName());
-				imUserFriend1.setTags(studentSubjectName.get(studentId));
-				imUserFriends.add(imUserFriend1);
-			}
-		}
-		if(imUserFriends.size() > 0){
-			batchInsert(imUserFriends);
-		}
-	}
-
-	@Override
-	@Transactional(rollbackFor = Exception.class)
-	public void classGroupChangeTeacher(Integer classGroupId, Integer teacherId) {
-		Set<Integer> studentIds = new HashSet<>();
-		Set<Integer> educations = new HashSet<>();
-
-		ClassGroup classGroup = classGroupDao.get(classGroupId);
-		List<ImUserFriend> imUserFriends = new ArrayList<>();
-		//获取班级关联的学员
-		List<ClassGroupStudentMapper> studentMappers = classGroupStudentMapperDao.findAllByClassGroup(classGroupId.longValue());
-		studentIds.addAll(studentMappers.stream().map(e->e.getUserId()).collect(Collectors.toSet()));
-
-		MusicGroup musicGroup = new MusicGroup();
-		Map<Integer,String> studentSubjectName = new HashMap<>();
-		studentIds.add(teacherId);
-		//获取老师声部
-		Map<Integer, String> teacherSubjectNameMap = MapUtil.convertIntegerMap(teacherDao.querySubjectNameByIdList(new ArrayList<>(studentIds)));
-
-		GroupType groupType = classGroup.getGroupType();
-		if(groupType == MUSIC){
-			//获取当前学员声部
-			studentSubjectName = MapUtil.convertMybatisMap(studentRegistrationDao.getStudentSubjectNameByStuIds(musicGroup.getId(),studentIds));
-			//关联乐团管理人员通讯录
-			musicGroup = musicGroupDao.get(classGroup.getMusicGroupId());
-			studentIds.add(musicGroup.getDirectorUserId());
-			studentIds.add(musicGroup.getEducationalTeacherId());
-			studentIds.add(musicGroup.getTeamTeacherId());
-			educations.add(musicGroup.getDirectorUserId());
-			educations.add(musicGroup.getEducationalTeacherId());
-			educations.add(musicGroup.getTeamTeacherId());
-		}else if(groupType == VIP){
-			VipGroup vipGroup = vipGroupDao.get(Long.parseLong(classGroup.getMusicGroupId()));
-			studentIds.add(vipGroup.getEducationalTeacherId());
-			educations.add(vipGroup.getEducationalTeacherId());
-		}else if(groupType == PRACTICE){
-			PracticeGroup practiceGroup = practiceGroupDao.get(Long.parseLong(classGroup.getMusicGroupId()));
-			studentIds.add(practiceGroup.getEducationalTeacherId());
-			educations.add(practiceGroup.getEducationalTeacherId());
-		}
-		educations.removeAll(Collections.singleton(null));
-		studentIds.removeAll(Collections.singleton(null));
-		//获取通讯录昵称
-		Map<Integer, String> nameIdMap = MapUtil.convertIntegerMap(teacherDao.queryNameByIdList(new ArrayList<>(studentIds)));
-		for (Integer studentId : studentIds) {
-			if(teacherId == studentId){
-				continue;
 			}
-			//老师关联的学员、教务
-			ImUserFriend imUserFriend = new ImUserFriend();
-			imUserFriend.setUserId(teacherId);
-			imUserFriend.setFriendId(studentId);
-			imUserFriend.setFriendNickname(nameIdMap.get(studentId));
-			imUserFriend.setMemo(musicGroup.getName());
-			imUserFriend.setTags(teacherSubjectNameMap.get(studentId));
-			imUserFriends.add(imUserFriend);
-			//学员、教务关联的老师
-			ImUserFriend imUserFriend1 = new ImUserFriend();
-			imUserFriend1.setUserId(studentId);
-			imUserFriend1.setFriendId(teacherId);
-			imUserFriend1.setFriendNickname(nameIdMap.get(teacherId));
-			imUserFriend1.setMemo(musicGroup.getName());
-			imUserFriend1.setTags(studentSubjectName.get(teacherId));
-			imUserFriends.add(imUserFriend1);
-
-			for (Integer education : educations) {
-				if(studentId == education){
+			//教务关联老师
+			for (Integer teacher : teacherIds) {
+				if(educationId == teacher){
 					continue;
 				}
-				//教务关联的学员
-				ImUserFriend imUserFriend2 = new ImUserFriend();
-				imUserFriend2.setUserId(education);
-				imUserFriend2.setFriendId(studentId);
-				imUserFriend2.setFriendNickname(nameIdMap.get(studentId));
-				imUserFriend2.setMemo(musicGroup.getName());
-				imUserFriend2.setTags(studentSubjectName.get(studentId));
-				imUserFriends.add(imUserFriend2);
-				//学员关联的教务
-				ImUserFriend imUserFriend3 = new ImUserFriend();
-				imUserFriend3.setUserId(studentId);
-				imUserFriend3.setFriendId(education);
-				imUserFriend3.setFriendNickname(nameIdMap.get(education));
-				imUserFriend3.setMemo(musicGroup.getName());
-				imUserFriend3.setTags(teacherSubjectNameMap.get(education));
-				imUserFriends.add(imUserFriend3);
+				ImUserFriend imUserFriend = new ImUserFriend();
+				imUserFriend.setUserId(educationId);
+				imUserFriend.setFriendId(teacher);
+				imUserFriend.setFriendNickname(teacherRealNameMap.get(teacher));
+				imUserFriend.setMemo(musicGroup.getName());
+				imUserFriend.setTags(teacherSubjectNameMap.get(teacher));
+				imUserFriends.add(imUserFriend);
 			}
 		}
-		if(imUserFriends.size() > 0){
-			batchInsert(imUserFriends);
-		}
-	}
-
-	@Override
-	@Transactional(rollbackFor = Exception.class)
-	public void groupChangeEducation(String groupId, Integer educationId, GroupType groupType) {
-		Set<Integer> studentIds = new HashSet<>();
-		List<ImUserFriend> imUserFriends = new ArrayList<>();
-		//获取班级关联的学员
-		List<ClassGroupStudentInfoDto> studentMappers = classGroupStudentMapperDao.findByGroupOrClassGroup(groupId, groupType, null);
-		studentIds.addAll(studentMappers.stream().map(e->e.getUserId()).collect(Collectors.toSet()));
-		//获取班级关联的老师
-		List<ClassGroupTeacherMapper> classGroupTeacherMappers = classGroupTeacherMapperDao.findAllByMusicGroup(groupId,groupType,null);
-		studentIds.addAll(classGroupTeacherMappers.stream().map(e->e.getUserId()).collect(Collectors.toSet()));
-		//获取课程关联的老师
-		List<CourseScheduleTeacherSalary> teacherSalaries = courseScheduleTeacherSalaryDao.findByGroup(groupId, groupType.getCode());
-		studentIds.addAll(teacherSalaries.stream().map(e->e.getUserId()).collect(Collectors.toSet()));
-		studentIds.add(educationId);
-
-		//获取通讯录昵称
-		Map<Integer, String> nameIdMap = MapUtil.convertIntegerMap(teacherDao.queryNameByIdList(new ArrayList<>(studentIds)));
-		//获取老师声部
-		Map<Integer, String> teacherSubjectNameMap = MapUtil.convertIntegerMap(teacherDao.querySubjectNameByIdList(new ArrayList<>(studentIds)));
+		//学员关联的老师、教务
 		for (Integer studentId : studentIds) {
-			if(educationId == studentId){
-				continue;
-			}
-			//教务关联的老师、学员
-			ImUserFriend imUserFriend = new ImUserFriend();
-			imUserFriend.setUserId(educationId);
-			imUserFriend.setFriendId(studentId);
-			imUserFriend.setFriendNickname(nameIdMap.get(studentId));
-			imUserFriend.setTags(teacherSubjectNameMap.get(studentId));
-			imUserFriends.add(imUserFriend);
-			//学员老师关联教务
-			ImUserFriend imUserFriend1 = new ImUserFriend();
-			imUserFriend1.setUserId(studentId);
-			imUserFriend1.setFriendId(educationId);
-			imUserFriend1.setFriendNickname(nameIdMap.get(educationId));
-			imUserFriends.add(imUserFriend1);
-		}
-		if(imUserFriends.size() > 0){
-			batchInsert(imUserFriends);
-		}
-	}
-
-	@Override
-	@Transactional(rollbackFor = Exception.class)
-	public void courseScheduleChangeTeacher(Long courseScheduleId, Integer teacherId) {
-		Set<Integer> studentIds = new HashSet<>();
-		Set<Integer> educations = new HashSet<>();
-		List<ImUserFriend> imUserFriends = new ArrayList<>();
-		CourseSchedule courseSchedule = courseScheduleDao.get(courseScheduleId);
-		//获取课程上关联的学员
-		List<CourseScheduleStudentPayment> studentPayments = courseScheduleStudentPaymentDao.findByCourseSchedule(courseScheduleId);
-		studentIds.addAll(studentPayments.stream().map(e->e.getUserId()).collect(Collectors.toSet()));
-		studentIds.add(teacherId);
-		//学员声部列表
-		Map<Integer,String> studentSubjectName = new HashMap<>();
-		MusicGroup musicGroup = new MusicGroup();
-		GroupType groupType = courseSchedule.getGroupType();
-		if(groupType == MUSIC){
-			musicGroupDao.get(courseSchedule.getMusicGroupId());
-			//获取学员声部列表
-			studentSubjectName = MapUtil.convertMybatisMap(studentRegistrationDao.getStudentSubjectNameByStuIds(musicGroup.getId(),studentIds));
-			//关联乐团管理人员通讯录
-			musicGroup = musicGroupDao.get(courseSchedule.getMusicGroupId());
-			studentIds.add(musicGroup.getDirectorUserId());
-			studentIds.add(musicGroup.getEducationalTeacherId());
-			studentIds.add(musicGroup.getTeamTeacherId());
-			educations.add(musicGroup.getDirectorUserId());
-			educations.add(musicGroup.getEducationalTeacherId());
-			educations.add(musicGroup.getTeamTeacherId());
-		}else if(groupType == VIP){
-			VipGroup vipGroup = vipGroupDao.get(Long.parseLong(courseSchedule.getMusicGroupId()));
-			educations.add(vipGroup.getEducationalTeacherId());
-			studentIds.add(vipGroup.getEducationalTeacherId());
-		}else if(groupType == PRACTICE){
-			PracticeGroup practiceGroup = practiceGroupDao.get(Long.parseLong(courseSchedule.getMusicGroupId()));
-			studentIds.add(practiceGroup.getEducationalTeacherId());
-			educations.add(practiceGroup.getEducationalTeacherId());
-		}
-		educations.removeAll(Collections.singleton(null));
-		studentIds.removeAll(Collections.singleton(null));
-		//获取通讯录昵称
-		Map<Integer, String> nameIdMap = MapUtil.convertIntegerMap(teacherDao.queryNameByIdList(new ArrayList<>(studentIds)));
-		//获取老师声部
-		Map<Integer, String> teacherSubjectNameMap = MapUtil.convertIntegerMap(teacherDao.querySubjectNameByIdList(new ArrayList<>(studentIds)));
-		for (Integer studentId : studentIds) {
-			if(teacherId == studentId){
-				continue;
+			//学员关联的老师
+			for (Integer teacher : teacherIds) {
+				if(teacher == studentId){
+					continue;
+				}
+				ImUserFriend imUserFriend = new ImUserFriend();
+				imUserFriend.setUserId(studentId);
+				imUserFriend.setFriendId(teacher);
+				imUserFriend.setFriendNickname(teacherRealNameMap.get(teacher));
+				imUserFriend.setMemo(musicGroup.getName());
+				imUserFriend.setTags(teacherSubjectNameMap.get(teacher));
+				imUserFriends.add(imUserFriend);
 			}
-			//老师关联的学员和教务
-			ImUserFriend imUserFriend = new ImUserFriend();
-			imUserFriend.setUserId(teacherId);
-			imUserFriend.setFriendId(studentId);
-			imUserFriend.setFriendNickname(nameIdMap.get(studentId));
-			imUserFriend.setMemo(musicGroup.getName());
-			imUserFriend.setTags(studentSubjectName.get(studentId));
-			imUserFriends.add(imUserFriend);
-			//学员关联的老师、教务关联老师
-			ImUserFriend imUserFriend1 = new ImUserFriend();
-			imUserFriend1.setUserId(studentId);
-			imUserFriend1.setFriendId(teacherId);
-			imUserFriend1.setFriendNickname(nameIdMap.get(teacherId));
-			imUserFriend1.setMemo(musicGroup.getName());
-			imUserFriend1.setTags(teacherSubjectNameMap.get(teacherId));
-			imUserFriends.add(imUserFriend1);
-			for (Integer education : educations) {
-				if(studentId == education){
+			//学员关联的教务
+			for (Integer education : educationIds) {
+				if(education == studentId){
 					continue;
 				}
-				//学员关联教务
-				ImUserFriend imUserFriend2 = new ImUserFriend();
-				imUserFriend2.setUserId(studentId);
-				imUserFriend2.setFriendId(education);
-				imUserFriend2.setFriendNickname(nameIdMap.get(education));
-				imUserFriend2.setMemo(musicGroup.getName());
-				imUserFriend2.setTags(teacherSubjectNameMap.get(education));
-				imUserFriends.add(imUserFriend2);
-				//教务关联学员
-				ImUserFriend imUserFriend3 = new ImUserFriend();
-				imUserFriend3.setUserId(education);
-				imUserFriend3.setFriendId(studentId);
-				imUserFriend3.setFriendNickname(nameIdMap.get(studentId));
-				imUserFriend3.setMemo(musicGroup.getName());
-				imUserFriend3.setTags(studentSubjectName.get(studentId));
-				imUserFriends.add(imUserFriend3);
+				ImUserFriend imUserFriend = new ImUserFriend();
+				imUserFriend.setUserId(studentId);
+				imUserFriend.setFriendId(education);
+				imUserFriend.setFriendNickname(educationRealNameMap.get(education));
+				imUserFriends.add(imUserFriend);
 			}
 		}
 		if(imUserFriends.size() > 0){
 			batchInsert(imUserFriends);
 		}
 	}
+//
+//	@Override
+//	@Transactional(rollbackFor = Exception.class)
+//	public void classGroupAddStudent(Integer classGroupId, Set<Integer> studentIds) {
+//		ClassGroup classGroup = classGroupDao.get(classGroupId);
+//		//获取关联的老师
+//		Set<Integer> teacherIds = classGroupTeacherMapperDao.queryTeacherIdsByClassGroupId(classGroupId);
+//
+//		GroupType groupType = classGroup.getGroupType();
+//		saveImUserFriends(studentIds,teacherIds,groupType,classGroup.getMusicGroupId());
+//
+//	}
+//
+//	@Override
+//	@Transactional(rollbackFor = Exception.class)
+//	public void classGroupChangeTeacher(Integer classGroupId, Integer teacherId) {
+//		Set<Integer> studentIds = new HashSet<>();
+//		Set<Integer> educations = new HashSet<>();
+//
+//		ClassGroup classGroup = classGroupDao.get(classGroupId);
+//		List<ImUserFriend> imUserFriends = new ArrayList<>();
+//		//获取班级关联的学员
+//		List<ClassGroupStudentMapper> studentMappers = classGroupStudentMapperDao.findAllByClassGroup(classGroupId.longValue());
+//		studentIds.addAll(studentMappers.stream().map(e->e.getUserId()).collect(Collectors.toSet()));
+//
+//		MusicGroup musicGroup = new MusicGroup();
+//		Map<Integer,String> studentSubjectName = new HashMap<>();
+//		studentIds.add(teacherId);
+//		//获取老师声部
+//		Map<Integer, String> teacherSubjectNameMap = MapUtil.convertIntegerMap(teacherDao.querySubjectNameByIdList(new ArrayList<>(studentIds)));
+//
+//		GroupType groupType = classGroup.getGroupType();
+//		if(groupType == MUSIC){
+//			//获取当前学员声部
+//			studentSubjectName = MapUtil.convertMybatisMap(studentRegistrationDao.getStudentSubjectNameByStuIds(musicGroup.getId(),studentIds));
+//			//关联乐团管理人员通讯录
+//			musicGroup = musicGroupDao.get(classGroup.getMusicGroupId());
+//			studentIds.add(musicGroup.getDirectorUserId());
+//			studentIds.add(musicGroup.getEducationalTeacherId());
+//			studentIds.add(musicGroup.getTeamTeacherId());
+//			educations.add(musicGroup.getDirectorUserId());
+//			educations.add(musicGroup.getEducationalTeacherId());
+//			educations.add(musicGroup.getTeamTeacherId());
+//		}else if(groupType == VIP){
+//			VipGroup vipGroup = vipGroupDao.get(Long.parseLong(classGroup.getMusicGroupId()));
+//			studentIds.add(vipGroup.getEducationalTeacherId());
+//			educations.add(vipGroup.getEducationalTeacherId());
+//		}else if(groupType == PRACTICE){
+//			PracticeGroup practiceGroup = practiceGroupDao.get(Long.parseLong(classGroup.getMusicGroupId()));
+//			studentIds.add(practiceGroup.getEducationalTeacherId());
+//			educations.add(practiceGroup.getEducationalTeacherId());
+//		}
+//		educations.removeAll(Collections.singleton(null));
+//		studentIds.removeAll(Collections.singleton(null));
+//		//获取通讯录昵称
+//		Map<Integer, String> nameIdMap = MapUtil.convertIntegerMap(teacherDao.queryNameByIdList(new ArrayList<>(studentIds)));
+//		for (Integer studentId : studentIds) {
+//			if(teacherId == studentId){
+//				continue;
+//			}
+//			//老师关联的学员、教务
+//			ImUserFriend imUserFriend = new ImUserFriend();
+//			imUserFriend.setUserId(teacherId);
+//			imUserFriend.setFriendId(studentId);
+//			imUserFriend.setFriendNickname(nameIdMap.get(studentId));
+//			imUserFriend.setMemo(musicGroup.getName());
+//			imUserFriend.setTags(teacherSubjectNameMap.get(studentId));
+//			imUserFriends.add(imUserFriend);
+//			//学员、教务关联的老师
+//			ImUserFriend imUserFriend1 = new ImUserFriend();
+//			imUserFriend1.setUserId(studentId);
+//			imUserFriend1.setFriendId(teacherId);
+//			imUserFriend1.setFriendNickname(nameIdMap.get(teacherId));
+//			imUserFriend1.setMemo(musicGroup.getName());
+//			imUserFriend1.setTags(studentSubjectName.get(teacherId));
+//			imUserFriends.add(imUserFriend1);
+//
+//			for (Integer education : educations) {
+//				if(studentId == education){
+//					continue;
+//				}
+//				//教务关联的学员
+//				ImUserFriend imUserFriend2 = new ImUserFriend();
+//				imUserFriend2.setUserId(education);
+//				imUserFriend2.setFriendId(studentId);
+//				imUserFriend2.setFriendNickname(nameIdMap.get(studentId));
+//				imUserFriend2.setMemo(musicGroup.getName());
+//				imUserFriend2.setTags(studentSubjectName.get(studentId));
+//				imUserFriends.add(imUserFriend2);
+//				//学员关联的教务
+//				ImUserFriend imUserFriend3 = new ImUserFriend();
+//				imUserFriend3.setUserId(studentId);
+//				imUserFriend3.setFriendId(education);
+//				imUserFriend3.setFriendNickname(nameIdMap.get(education));
+//				imUserFriend3.setMemo(musicGroup.getName());
+//				imUserFriend3.setTags(teacherSubjectNameMap.get(education));
+//				imUserFriends.add(imUserFriend3);
+//			}
+//		}
+//		if(imUserFriends.size() > 0){
+//			batchInsert(imUserFriends);
+//		}
+//	}
+//
+//	@Override
+//	@Transactional(rollbackFor = Exception.class)
+//	public void groupChangeEducation(String groupId, Integer educationId, GroupType groupType) {
+//		Set<Integer> studentIds = new HashSet<>();
+//		List<ImUserFriend> imUserFriends = new ArrayList<>();
+//		//获取班级关联的学员
+//		List<ClassGroupStudentInfoDto> studentMappers = classGroupStudentMapperDao.findByGroupOrClassGroup(groupId, groupType, null);
+//		studentIds.addAll(studentMappers.stream().map(e->e.getUserId()).collect(Collectors.toSet()));
+//		//获取班级关联的老师
+//		List<ClassGroupTeacherMapper> classGroupTeacherMappers = classGroupTeacherMapperDao.findAllByMusicGroup(groupId,groupType,null);
+//		studentIds.addAll(classGroupTeacherMappers.stream().map(e->e.getUserId()).collect(Collectors.toSet()));
+//		//获取课程关联的老师
+//		List<CourseScheduleTeacherSalary> teacherSalaries = courseScheduleTeacherSalaryDao.findByGroup(groupId, groupType.getCode());
+//		studentIds.addAll(teacherSalaries.stream().map(e->e.getUserId()).collect(Collectors.toSet()));
+//		studentIds.add(educationId);
+//
+//		//获取通讯录昵称
+//		Map<Integer, String> nameIdMap = MapUtil.convertIntegerMap(teacherDao.queryNameByIdList(new ArrayList<>(studentIds)));
+//		//获取老师声部
+//		Map<Integer, String> teacherSubjectNameMap = MapUtil.convertIntegerMap(teacherDao.querySubjectNameByIdList(new ArrayList<>(studentIds)));
+//		for (Integer studentId : studentIds) {
+//			if(educationId == studentId){
+//				continue;
+//			}
+//			//教务关联的老师、学员
+//			ImUserFriend imUserFriend = new ImUserFriend();
+//			imUserFriend.setUserId(educationId);
+//			imUserFriend.setFriendId(studentId);
+//			imUserFriend.setFriendNickname(nameIdMap.get(studentId));
+//			imUserFriend.setTags(teacherSubjectNameMap.get(studentId));
+//			imUserFriends.add(imUserFriend);
+//			//学员老师关联教务
+//			ImUserFriend imUserFriend1 = new ImUserFriend();
+//			imUserFriend1.setUserId(studentId);
+//			imUserFriend1.setFriendId(educationId);
+//			imUserFriend1.setFriendNickname(nameIdMap.get(educationId));
+//			imUserFriends.add(imUserFriend1);
+//		}
+//		if(imUserFriends.size() > 0){
+//			batchInsert(imUserFriends);
+//		}
+//	}
+//
+//	@Override
+//	@Transactional(rollbackFor = Exception.class)
+//	public void courseScheduleChangeTeacher(Long courseScheduleId, Integer teacherId) {
+//		Set<Integer> studentIds = new HashSet<>();
+//		Set<Integer> educations = new HashSet<>();
+//		List<ImUserFriend> imUserFriends = new ArrayList<>();
+//		CourseSchedule courseSchedule = courseScheduleDao.get(courseScheduleId);
+//		//获取课程上关联的学员
+//		List<CourseScheduleStudentPayment> studentPayments = courseScheduleStudentPaymentDao.findByCourseSchedule(courseScheduleId);
+//		studentIds.addAll(studentPayments.stream().map(e->e.getUserId()).collect(Collectors.toSet()));
+//		studentIds.add(teacherId);
+//		//学员声部列表
+//		Map<Integer,String> studentSubjectName = new HashMap<>();
+//		MusicGroup musicGroup = new MusicGroup();
+//		GroupType groupType = courseSchedule.getGroupType();
+//		if(groupType == MUSIC){
+//			musicGroupDao.get(courseSchedule.getMusicGroupId());
+//			//获取学员声部列表
+//			studentSubjectName = MapUtil.convertMybatisMap(studentRegistrationDao.getStudentSubjectNameByStuIds(musicGroup.getId(),studentIds));
+//			//关联乐团管理人员通讯录
+//			musicGroup = musicGroupDao.get(courseSchedule.getMusicGroupId());
+//			studentIds.add(musicGroup.getDirectorUserId());
+//			studentIds.add(musicGroup.getEducationalTeacherId());
+//			studentIds.add(musicGroup.getTeamTeacherId());
+//			educations.add(musicGroup.getDirectorUserId());
+//			educations.add(musicGroup.getEducationalTeacherId());
+//			educations.add(musicGroup.getTeamTeacherId());
+//		}else if(groupType == VIP){
+//			VipGroup vipGroup = vipGroupDao.get(Long.parseLong(courseSchedule.getMusicGroupId()));
+//			educations.add(vipGroup.getEducationalTeacherId());
+//			studentIds.add(vipGroup.getEducationalTeacherId());
+//		}else if(groupType == PRACTICE){
+//			PracticeGroup practiceGroup = practiceGroupDao.get(Long.parseLong(courseSchedule.getMusicGroupId()));
+//			studentIds.add(practiceGroup.getEducationalTeacherId());
+//			educations.add(practiceGroup.getEducationalTeacherId());
+//		}
+//		educations.removeAll(Collections.singleton(null));
+//		studentIds.removeAll(Collections.singleton(null));
+//		//获取通讯录昵称
+//		Map<Integer, String> nameIdMap = MapUtil.convertIntegerMap(teacherDao.queryNameByIdList(new ArrayList<>(studentIds)));
+//		//获取老师声部
+//		Map<Integer, String> teacherSubjectNameMap = MapUtil.convertIntegerMap(teacherDao.querySubjectNameByIdList(new ArrayList<>(studentIds)));
+//		for (Integer studentId : studentIds) {
+//			if(teacherId == studentId){
+//				continue;
+//			}
+//			//老师关联的学员和教务
+//			ImUserFriend imUserFriend = new ImUserFriend();
+//			imUserFriend.setUserId(teacherId);
+//			imUserFriend.setFriendId(studentId);
+//			imUserFriend.setFriendNickname(nameIdMap.get(studentId));
+//			imUserFriend.setMemo(musicGroup.getName());
+//			imUserFriend.setTags(studentSubjectName.get(studentId));
+//			imUserFriends.add(imUserFriend);
+//			//学员关联的老师、教务关联老师
+//			ImUserFriend imUserFriend1 = new ImUserFriend();
+//			imUserFriend1.setUserId(studentId);
+//			imUserFriend1.setFriendId(teacherId);
+//			imUserFriend1.setFriendNickname(nameIdMap.get(teacherId));
+//			imUserFriend1.setMemo(musicGroup.getName());
+//			imUserFriend1.setTags(teacherSubjectNameMap.get(teacherId));
+//			imUserFriends.add(imUserFriend1);
+//			for (Integer education : educations) {
+//				if(studentId == education){
+//					continue;
+//				}
+//				//学员关联教务
+//				ImUserFriend imUserFriend2 = new ImUserFriend();
+//				imUserFriend2.setUserId(studentId);
+//				imUserFriend2.setFriendId(education);
+//				imUserFriend2.setFriendNickname(nameIdMap.get(education));
+//				imUserFriend2.setMemo(musicGroup.getName());
+//				imUserFriend2.setTags(teacherSubjectNameMap.get(education));
+//				imUserFriends.add(imUserFriend2);
+//				//教务关联学员
+//				ImUserFriend imUserFriend3 = new ImUserFriend();
+//				imUserFriend3.setUserId(education);
+//				imUserFriend3.setFriendId(studentId);
+//				imUserFriend3.setFriendNickname(nameIdMap.get(studentId));
+//				imUserFriend3.setMemo(musicGroup.getName());
+//				imUserFriend3.setTags(studentSubjectName.get(studentId));
+//				imUserFriends.add(imUserFriend3);
+//			}
+//		}
+//		if(imUserFriends.size() > 0){
+//			batchInsert(imUserFriends);
+//		}
+//	}
 
 }

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

@@ -2077,10 +2077,6 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
         }
         courseScheduleStudentPaymentDao.batchInsert(courseScheduleStudentPayments);
 
-        imUserFriendService.groupChangeEducation(practiceGroup.getId().toString(), practiceGroup.getEducationalTeacherId(), GroupType.PRACTICE);
-        imUserFriendService.classGroupChangeTeacher(classGroup.getId(), practiceGroup.getUserId());
-        imUserFriendService.classGroupAddStudent(classGroup.getId(), Arrays.asList(practiceGroup.getStudentId()));
-
         //推送
         List<CourseSchedule> courseSchedules1 = courseScheduleDao.findTeacherCoursesWithIncludeDateRange(practiceGroup.getUserId(), allCourseDates.get(0), DateUtil.addMinutes(allCourseDates.get(0), practiceCourseMinutes));
         List<CourseSchedule> courseSchedules2 = courseScheduleDao.findTeacherCoursesWithIncludeDateRange(practiceGroup.getUserId(), allCourseDates.get(1), DateUtil.addMinutes(allCourseDates.get(1), practiceCourseMinutes));
@@ -2131,6 +2127,7 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
 
         studentDao.updateStudentServiceTag(practiceGroup.getStudentId(), null, YesOrNoEnum.YES.getCode());
 
+        imUserFriendService.refreshGroupImUserFriend(practiceGroup.getId().toString(), GroupType.PRACTICE);
         result.put("teacherName", teacher.getRealName());
         result.put("enableApply", applyTimes < 1 ? 1 : 0);
         result.put("status", "SUCCESS");
@@ -3272,10 +3269,6 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
         practiceGroup.setGroupStatus(GroupStatusEnum.NORMAL);
         practiceGroupDao.update(practiceGroup);
 
-        imUserFriendService.groupChangeEducation(practiceGroup.getId().toString(), practiceGroup.getEducationalTeacherId(), GroupType.PRACTICE);
-        imUserFriendService.classGroupChangeTeacher(classGroup.getId(), practiceGroup.getUserId());
-        imUserFriendService.classGroupAddStudent(classGroup.getId(), Arrays.asList(practiceGroup.getStudentId()));
-
         try {
             contractService.transferPracticeCoursesContract(order.getUserId(), classGroup.getTotalClassTimes(), practiceGroup.getCoursesStartDate(), practiceGroup.getCoursesExpireDate(), order.getExpectAmount());
         } catch (Exception e) {
@@ -3313,7 +3306,7 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
         }
 
         studentDao.updateStudentServiceTag(practiceGroup.getStudentId(), null, YesOrNoEnum.YES.getCode());
-
+        imUserFriendService.refreshGroupImUserFriend(practiceGroup.getId().toString(),GroupType.PRACTICE);
     }
 
     @Override

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

@@ -539,10 +539,10 @@ public class StudentPaymentRouteOrderServiceImpl extends BaseServiceImpl<Long, S
             }
         }
         if (studentPaymentRouteOrders.size() > 0) {
-            Map<String, List<StudentPaymentRouteOrder>> stringListMap = studentPaymentRouteOrders.stream().collect(Collectors.groupingBy(StudentPaymentRouteOrder::getTransNo));
-            if (stringListMap.size() != studentPaymentRouteOrders.size()) {
-                throw new BizException("导入失败:请勿录入重复的交易流水号");
-            }
+//            Map<String, List<StudentPaymentRouteOrder>> stringListMap = studentPaymentRouteOrders.stream().collect(Collectors.groupingBy(StudentPaymentRouteOrder::getTransNo));
+//            if (stringListMap.size() != studentPaymentRouteOrders.size()) {
+//                throw new BizException("导入失败:请勿录入重复的交易流水号");
+//            }
             studentPaymentRouteOrderDao.batchAdd(studentPaymentRouteOrders);
         } else {
             throw new BizException(sb.length() > 0 ? sb.toString() : "导入失败:没有可以录入的数据");

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

@@ -1564,7 +1564,7 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
         List<StudentRegistration> registrations = studentRegistrationDao.findStudentListByUserIdList(musicGroupId, userIds);
         for (StudentRegistration registration : registrations) {
             if(registration.getPaymentStatus().equals(PaymentStatusEnum.OPEN)||registration.getPaymentStatus().equals(PaymentStatusEnum.YES)){
-                throw new BizException("开启缴费/已缴费的学员不能删除");
+                throw new BizException(registration.getName()+"("+registration.getPaymentStatus().getDesc()+"),不能删除");
             }
         }
         if (registrations.size() <= 0) {

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

@@ -1429,12 +1429,7 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 		try {
 			imGroupService.create(classGroup.getId().longValue(), null, classGroup.getName(), classGroup.getName(), vipGroupApplyBaseInfoDto.getName(), null, null, GroupType.VIP.getCode());
 			imGroupMemberService.join(classGroup.getId().longValue(), userRoleMap);
-			List<Integer> studentIds = classGroupStudents.stream().map(ClassGroupStudentMapper::getUserId).collect(Collectors.toList());
-
-			imUserFriendService.groupChangeEducation(vipGroupApplyBaseInfoDto.getId().toString(), vipGroupApplyBaseInfoDto.getEducationalTeacherId(), GroupType.PRACTICE);
-			imUserFriendService.classGroupChangeTeacher(classGroup.getId(), vipGroupApplyBaseInfoDto.getUserId());
-			imUserFriendService.classGroupAddStudent(classGroup.getId(), studentIds);
-
+			imUserFriendService.refreshGroupImUserFriend(classGroup.getMusicGroupId(),classGroup.getGroupType());
 			//发送推送短信
 			Map<Integer,String> map = new HashMap<>(1);
 			map.put(vipGroupApplyBaseInfoDto.getUserId(),sysUser.getPhone());
@@ -2036,7 +2031,6 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 
 		if(Objects.nonNull(studentRecoverInfo.getTeacherId())){
 			vipGroup.setUserId(studentRecoverInfo.getTeacherId());
-			imUserFriendService.classGroupChangeTeacher(classGroup.getId(), studentRecoverInfo.getTeacherId());
 		}
 
 		Map<String, Object> courseInfo = JSON.parseObject(studentPauseInfo.getCoursesJson(), Map.class);
@@ -2143,7 +2137,7 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
         classGroup.setTotalClassTimes(courseScheduleDao.countClassGroupCourses(classGroup.getId()));
         classGroupDao.update(classGroup);
 		courseScheduleTeacherSalaryService.updateVipGroupCourseTeacherSalary(vipGroup.getId().intValue(),oldTeacherId);
-		imUserFriendService.classGroupAddStudent(classGroup.getId(), Arrays.asList(studentRecoverInfo.getUserId()));
+		imUserFriendService.refreshGroupImUserFriend(classGroup.getMusicGroupId(),classGroup.getGroupType());
 	}
 
     @Override
@@ -2666,7 +2660,6 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 			isChange=true;
 			
 			imGroupMemberService.join(classGroup.getId().longValue(), oldVipGroupInfo.getEducationalTeacherId(), "乐团主管", false);
-			imUserFriendService.groupChangeEducation(oldVipGroupInfo.getId().toString(), oldVipGroupInfo.getEducationalTeacherId(), GroupType.VIP);
 		}
 		if(Objects.nonNull(vipGroupApplyBaseInfo.getOrganId())&&!vipGroupApplyBaseInfo.getOrganId().equals(oldVipGroupInfo.getOrganId())){
 			isChange=true;
@@ -2677,6 +2670,7 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 			oldVipGroupInfo.setUpdateTime(now);
 			vipGroupDao.update(oldVipGroupInfo);
 		}
+		imUserFriendService.refreshGroupImUserFriend(oldVipGroupInfo.getId().toString(),GroupType.VIP);
 	}
 
 	@Override
@@ -2923,7 +2917,7 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 			try {
 				imGroupService.create(classGroup.getId().longValue(), null, classGroup.getName(), classGroup.getName(), vipGroup.getName(), null, null, GroupType.VIP.getCode());
 				imGroupMemberService.join(classGroup.getId().longValue(), userRoleMap);
-				imUserFriendService.classGroupAddStudent(classGroup.getId(), studentIds);
+				imUserFriendService.refreshClassImUserFriend(classGroup.getId());
 			} catch (Exception e) {
 				e.printStackTrace();
 			}
@@ -3107,9 +3101,7 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 			imGroupService.create(classGroup.getId().longValue(), null, classGroup.getName(), classGroup.getName(), vipGroup.getName(), null, null, GroupType.VIP.getCode());
 			imGroupMemberService.join(classGroup.getId().longValue(), userRoleMap);
 
-			imUserFriendService.groupChangeEducation(vipGroup.getId().toString(), vipGroup.getEducationalTeacherId(), GroupType.PRACTICE);
-			imUserFriendService.classGroupChangeTeacher(classGroup.getId(), vipGroup.getUserId());
-			imUserFriendService.classGroupAddStudent(classGroup.getId(), studentIds);
+			imUserFriendService.refreshGroupImUserFriend(vipGroup.getId().toString(),GroupType.PRACTICE);
 		} catch (Exception e) {
 			e.printStackTrace();
 		}

+ 21 - 0
mec-biz/src/main/resources/config/mybatis/ClassGroupStudentMapperMapper.xml

@@ -588,4 +588,25 @@
             #{item}
         </foreach>
     </select>
+    <select id="queryStudentIdsByClassGroupId" resultType="java.lang.Integer">
+        SELECT DISTINCT user_id_ FROM class_group_student_mapper
+        <include refid="queryStudentIdsByClassGroupIdSql"/>
+        UNION ALL
+        SELECT DISTINCT user_id_ FROM course_schedule_student_payment csts
+        <include refid="queryStudentIdsByClassGroupIdSql"/>
+    </select>
+
+    <sql id="queryStudentIdsByClassGroupIdSql">
+        <where>
+            <if test="classGroupId != null">
+                AND class_group_id_ = #{classGroupId}
+            </if>
+            <if test="groupType != null">
+                AND group_type_ = #{groupType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
+            </if>
+            <if test="musicGroupId != null">
+                AND music_group_id_ = #{musicGroupId}
+            </if>
+        </where>
+    </sql>
 </mapper>

+ 20 - 0
mec-biz/src/main/resources/config/mybatis/ClassGroupTeacherMapperMapper.xml

@@ -228,4 +228,24 @@
         class_group_teacher_mapper ct
         WHERE u.id_ = ct.user_id_ AND ct.class_group_id_ = #{classGroupId} AND ct.teacher_role_ = #{teacherRole} LIMIT 1
     </select>
+    <select id="queryTeacherIdsByClassGroupId" resultType="java.lang.Integer">
+        SELECT DISTINCT user_id_ FROM class_group_teacher_mapper
+        <include refid="queryTeacherIdsByClassGroupIdSql"/>
+        UNION ALL
+        SELECT DISTINCT user_id_ FROM course_schedule_teacher_salary
+        <include refid="queryTeacherIdsByClassGroupIdSql"/>
+    </select>
+    <sql id="queryTeacherIdsByClassGroupIdSql">
+        <where>
+            <if test="classGroupId != null">
+                AND class_group_id_ = #{classGroupId}
+            </if>
+            <if test="groupType != null">
+                AND group_type_ = #{groupType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
+            </if>
+            <if test="musicGroupId != null">
+                AND music_group_id_ = #{musicGroupId}
+            </if>
+        </where>
+    </sql>
 </mapper>

+ 7 - 0
mec-biz/src/main/resources/config/mybatis/TeacherMapper.xml

@@ -373,6 +373,13 @@
         </foreach>
     </select>
 
+    <select id="queryUserNameByIdList" resultType="java.util.Map">
+        select id_ `key`,IF(username_ IS NUll,real_name_,real_name_) `value` FROM sys_user s WHERE id_ IN
+        <foreach collection="userIds" item="userId" separator="," open="(" close=")">
+            #{userId}
+        </foreach>
+    </select>
+
     <select id="querySubjectNameByIdList" resultType="java.util.Map">
         select t.id_ `key`,GROUP_CONCAT(s.name_) `value`
         FROM teacher t