zouxuan 4 år sedan
förälder
incheckning
46f79929ad

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

@@ -64,7 +64,7 @@ public interface ClassGroupTeacherMapperDao extends BaseDAO<Long, ClassGroupTeac
      */
     List<ClassGroupTeacherMapper> findByMusicGroup(String musicGroupId);
 
-    List<ClassGroupTeacherMapper> findAllByMusicGroup(String musicGroupId);
+    List<ClassGroupTeacherMapper> findAllByMusicGroup(@Param("musicGroupId") String musicGroupId, @Param("groupType") GroupType groupType, @Param("teacherRole") String teacherRole);
 
     List<ClassGroupTeacherMapper> findByClassGroup(Integer classGroupId);
 

+ 17 - 3
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentRegistrationDao.java

@@ -1,9 +1,7 @@
 package com.ym.mec.biz.dal.dao;
 
 import java.math.BigDecimal;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
+import java.util.*;
 
 import com.ym.mec.biz.dal.dto.*;
 import com.ym.mec.biz.dal.entity.Subject;
@@ -430,4 +428,20 @@ public interface StudentRegistrationDao extends BaseDAO<Long, StudentRegistratio
      * @return
      */
     int batchDelete(@Param("ids") List<Long> ids);
+
+    /**
+     * 获取学员声部名称
+     * @param musicGroupId
+     * @param studentId
+     * @return
+     */
+    String getStudentSubjectName(@Param("musicGroupId") String musicGroupId, @Param("studentId") Integer studentId);
+
+    /**
+     * 获取学员声部名称
+     * @param musicGroupId
+     * @param studentIds
+     * @return
+     */
+    List<Map<Integer,String>> getStudentSubjectNameByStuIds(@Param("musicGroupId") String musicGroupId, @Param("studentIds") Collection<Integer> studentIds);
 }

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

@@ -545,12 +545,4 @@ public interface ClassGroupService extends BaseService<Integer, ClassGroup> {
      */
     void spanGroupClassAdjustPass(Integer masterClassGroupId,List<Integer> studentIds,List<Long> courseIds,List<Map<String,
             String>> classGroupStudents,List<Long> allLockCourseIds,String batchNo,BigDecimal masterTotalPrice);
-
-    /**
-     * 班级新增学员后相关通讯录的修改
-     * @param classGroupId
-     * @param studentId
-     * @param groupType
-     */
-    void classGroupAddStudent(Integer classGroupId,Integer studentId,GroupType groupType);
 }

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

@@ -58,4 +58,5 @@ public interface ImGroupMemberService extends BaseService<Long, ImGroupMember> {
 	 * @return
 	 */
 	boolean updateRoleType(Long imGroupId, Integer userId, String roleType);
+
 }

+ 40 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/ImUserFriendService.java

@@ -4,6 +4,7 @@ import java.util.List;
 
 import com.ym.mec.biz.dal.dto.ImUserFriendDto;
 import com.ym.mec.biz.dal.entity.ImUserFriend;
+import com.ym.mec.biz.dal.enums.GroupType;
 import com.ym.mec.common.service.BaseService;
 
 public interface ImUserFriendService extends BaseService<Long, ImUserFriend> {
@@ -50,4 +51,43 @@ public interface ImUserFriendService extends BaseService<Long, ImUserFriend> {
 	 * @return
 	 */
 	ImUserFriendDto queryFriendDetail(Integer userId, Integer friendUserId);
+
+	/**
+	 * 用户通讯录新增
+	 * @param imUserFriends
+	 */
+    void batchInsert(List<ImUserFriend> imUserFriends);
+
+	/**
+	 * 班级新增学员后相关通讯录的修改
+	 * @param classGroupId
+	 * @param studentId
+	 * @author zouxuan
+	 */
+	void classGroupAddStudent(Integer classGroupId,Integer studentId);
+
+	/**
+	 * 班级更换老师后相关通讯录的修改
+	 * @param classGroupId
+	 * @param teacherId
+	 * @author zouxuan
+	 */
+	void classGroupChangeTeacher(Integer classGroupId,Integer teacherId);
+
+	/**
+	 * 课程组更换教务老师通讯录更改
+	 * @param groupId
+	 * @param educationId
+	 * @param groupType
+	 * @author zouxuan
+	 */
+	void groupChangeEducation(String groupId, Integer educationId, GroupType groupType);
+
+	/**
+	 * 单节课老师更改后通讯录更改
+	 * @param courseScheduleId
+	 * @param teacherId
+	 * @author zouxuan
+	 */
+	void courseScheduleChangeTeacher(Long courseScheduleId,Integer teacherId);
 }

+ 0 - 84
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupServiceImpl.java

@@ -3842,88 +3842,4 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
             }
         }
     }
-
-    @Override
-    public void classGroupAddStudent(Integer classGroupId, Integer studentId,GroupType groupType) {
-        //获取相关课程,班级老师列表
-        Set<Integer> teacherIds = teacherDao.findMusicTeacherIds(studentId);
-        //获取学员所在乐团列表
-        List<String> musicGroupIds = studentRegistrationDao.queryStudentMusicGroup(studentId);
-        if (musicGroupIds != null && musicGroupIds.size() > 0) {
-            List<MusicGroup> musicGroups = musicGroupDao.queryListByIds(StringUtils.join(musicGroupIds, ","));
-            musicGroups.forEach(e -> {
-                teacherIds.add(e.getDirectorUserId());
-                teacherIds.add(e.getEducationalTeacherId());
-                teacherIds.add(e.getTeamTeacherId());
-            });
-        }
-        //获取相关vip课老师列表
-        teacherIds.addAll(teacherDao.findVipTeacherIds(studentId));
-        //获取陪练课老师列表
-        teacherIds.addAll(teacherDao.findPracticeTeacherIds(studentId));
-        //获取对外课程老师列表
-        teacherIds.addAll(teacherDao.findCloseCourseTeacherIds(studentId));
-        //获取陪练课课程教务老师
-        teacherIds.addAll(teacherDao.findPracticeEducationalTeacherId(studentId));
-        //获取VIP课程教务老师
-        teacherIds.addAll(teacherDao.findVipEducationalTeacherId(studentId));
-        //获取对外课程务老师
-        teacherIds.addAll(teacherDao.findCommEducationalTeacherId(studentId));
-        //获取关联的指导老师
-        Student student = studentDao.get(studentId);
-        if (student != null && student.getTeacherId() != null) {
-            teacherIds.add(student.getTeacherId());
-        }
-        if (teacherIds.size() > 0) {
-//            return teacherDao.queryTeacherBaseInfo(teacherIds, search);
-        }
-        ClassGroup classGroup = classGroupDao.get(classGroupId);
-        List<ImUserFriend> imUserFriends = new ArrayList<>();
-        List<ImUserFriend> teacherUserFriends = new ArrayList<>();
-        //获取班级关联的老师
-        List<ClassGroupTeacherMapper> classGroupTeacherMappers = classGroupTeacherMapperDao.findByClassGroup(classGroupId);
-        //学员好友编号列表
-        Set<Integer> studentFriendIds = new HashSet<>();
-        switch (groupType){
-        case MUSIC:
-            ////学员关联乐团管理人员通讯录
-            MusicGroup musicGroup = musicGroupDao.get(classGroup.getMusicGroupId());
-            teacherIds.add(musicGroup.getDirectorUserId());
-            teacherIds.add(musicGroup.getEducationalTeacherId());
-            teacherIds.add(musicGroup.getTeamTeacherId());
-            //学员关联的班级上的老师
-            teacherIds.addAll(classGroupTeacherMappers.stream().map(e->e.getUserId()).collect(Collectors.toSet()));
-            //获取通讯录名称
-            Map<Integer, String> nameIdMap=MapUtil.convertIntegerMap(teacherDao.queryNameByIdList(new ArrayList<>(teacherIds)));
-            //获取老师声部
-            Map<Integer, String> subjectNameMap = MapUtil.convertIntegerMap(teacherDao.querySubjectNameByIdList(new ArrayList<>(teacherIds)));
-
-            for (Integer teacherId : teacherIds) {
-                ImUserFriend imUserFriend = new ImUserFriend();
-                imUserFriend.setUserId(studentId);
-                imUserFriend.setFriendId(teacherId);
-                imUserFriend.setFriendNickname(nameIdMap.get(teacherId));
-                imUserFriend.setMemo(musicGroup.getName());
-                imUserFriend.setTags(subjectNameMap.get(teacherId));
-                imUserFriends.add(imUserFriend);
-
-                ImUserFriend imUserFriend1 = new ImUserFriend();
-                imUserFriend1.setUserId(studentId);
-                imUserFriend1.setFriendId(teacherId);
-                imUserFriend1.setFriendNickname(nameIdMap.get(teacherId));
-                imUserFriend1.setMemo(musicGroup.getName());
-                imUserFriend1.setTags(subjectNameMap.get(teacherId));
-                imUserFriends.add(imUserFriend1);
-
-//            imUserFriendService.batchInsert();
-            }
-            //乐团管理人员关联学员
-            break;
-        case VIP:
-            break;
-        case COMM:
-            break;
-        default:
-        }
-    }
 }

+ 58 - 56
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleServiceImpl.java

@@ -227,6 +227,8 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
     @Autowired
 	private ImGroupMemberService imGroupMemberService;
     @Autowired
+	private ImUserFriendService imUserFriendService;
+    @Autowired
     private CourseHomeworkService courseHomeworkService;
     @Autowired
     private GroupDao groupDao;
@@ -834,7 +836,7 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
         List<CourseSchedule> courseSchedules = createCourseScheduleDto.getCourseSchedules();
 
         if(!CollectionUtils.isEmpty(courseSchedules)){
-			List<ClassGroupTeacherMapper> byMusicGroup = classGroupTeacherMapperDao.findAllByMusicGroup(createCourseScheduleDto.getMusicGroupID());
+			List<ClassGroupTeacherMapper> byMusicGroup = classGroupTeacherMapperDao.findAllByMusicGroup(createCourseScheduleDto.getMusicGroupID(),courseSchedules.get(0).getGroupType(),null);
 			Map<Integer, List<ClassGroupTeacherMapper>> teacherByClassGroup = byMusicGroup.stream().collect(Collectors.groupingBy(ClassGroupTeacherMapper::getClassGroupId));
 
 			Map<Integer, List<CourseSchedule>> classGroupCourseSchedules = courseSchedules.stream().collect(Collectors.groupingBy(CourseSchedule::getClassGroupId));
@@ -4649,17 +4651,14 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 		if(!CollectionUtils.isEmpty(courseIds1)){
 			modifyLogs = getModifyLogs(courseIds1, courseSchedules, user.getId(), date);
 		}
-
 		PracticeGroup practiceGroup = practiceGroupDao.get(Long.valueOf(practiceGroupId));
 
 		ClassGroup classGroup = classGroupDao.findByMusicGroupAndType(practiceGroupId, PRACTICE.getCode());
+		//教务老师变更
         if(Objects.nonNull(educationalTeacherId)&&!educationalTeacherId.equals(practiceGroup.getEducationalTeacherId())){
-//			if(Objects.nonNull(practiceGroup.getEducationalTeacherId())){
-//				imGroupMemberService.quit(classGroup.getId().longValue(), practiceGroup.getEducationalTeacherId());
-//			}
-
+        	//变更通讯录
+			imUserFriendService.groupChangeEducation(practiceGroupId,educationalTeacherId,PRACTICE);
 			practiceGroup.setEducationalTeacherId(educationalTeacherId);
-//			imGroupMemberService.join(classGroup.getId().longValue(), educationalTeacherId, "", false);
 		}
 		if(Objects.nonNull(subjectId)&&!subjectId.equals(practiceGroup.getSubjectId())){
 			Subject subject = subjectDao.get(subjectId);
@@ -4674,61 +4673,64 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 			classGroupDao.update(classGroup);
 			courseScheduleDao.updateCourseNameByGroup(practiceGroupId, PRACTICE,groupName);
 		}
-		practiceGroup.setUserId(teacherId);
-		practiceGroupDao.update(practiceGroup);
-        classGroupTeacherMapperService.updateTeacher(practiceGroupId,teacherId, PRACTICE.getCode());
-        classGroupTeacherSalaryDao.updateTeacher(practiceGroupId,teacherId, PRACTICE.getCode());
-//        practiceGroupDao.updateUserId(practiceGroupId,teacherId);
-        if(courseSchedules == null || courseSchedules.size() == 0){
-            return;
-        }
-
-        Map<Integer, String> teacherIdMap = new HashMap<>(10);
-        teacherIdMap.put(teacherId,teacherId.toString());
+		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());
+			if(courseSchedules == null || courseSchedules.size() == 0){
+				return;
+			}
+			Map<Integer, String> teacherIdMap = new HashMap<>(10);
+			teacherIdMap.put(teacherId,teacherId.toString());
 
-        courseSchedules.forEach(e->{
-            teacherIdMap.put(e.getActualTeacherId(),e.getActualTeacherId().toString());
-            e.setUpdateTime(date);
-            e.setActualTeacherId(teacherId);
-        });
-        checkNewCourseSchedules(courseSchedules,false,false);
-        courseScheduleDao.batchUpdate(courseSchedules);
-        Set<Long> courseScheduleIds = courseSchedules.stream().map(e -> e.getId()).collect(Collectors.toSet());
-		if(practiceGroup.getType() != TRIAL){
-			if(CHARGE == practiceGroup.getType()){
-				List<TeacherDefaultPracticeGroupSalary> teacherDefaultPracticeGroupSalaries = teacherDefaultPracticeGroupSalaryDao.queryByUserId(teacherId);
-				if(teacherDefaultPracticeGroupSalaries == null || teacherDefaultPracticeGroupSalaries.size() == 0){
-					throw new BizException("请设置老师默认课酬");
-				}
-				courseScheduleTeacherSalaryDao.batchUpdateTeacher(courseScheduleIds,teacherId);
-			}else{
-				List<CourseSchedule> groupNotStartCourses = courseScheduleDao.findGroupNotStartCourses(practiceGroupId, PRACTICE);
-				if(!CollectionUtils.isEmpty(groupNotStartCourses)){
-					SysConfig practiceCourseSalaryConfig = sysConfigService.findByParamName(SysConfigService.PRACTICE_COURSE_SALARY);
-					BigDecimal teacherSalary = new BigDecimal(practiceCourseSalaryConfig.getParanValue());
-					List<Long> courseIds = groupNotStartCourses.stream().map(CourseSchedule::getId).collect(Collectors.toList());
-					List<CourseScheduleTeacherSalary> courseScheduleTeacherSalaries = courseScheduleTeacherSalaryDao.findByCourseSchedules(courseIds);
-					for (CourseScheduleTeacherSalary courseScheduleTeacherSalary : courseScheduleTeacherSalaries) {
-						courseScheduleTeacherSalary.setUserId(teacherId);
-						courseScheduleTeacherSalary.setExpectSalary(teacherSalary);
+			courseSchedules.forEach(e->{
+				teacherIdMap.put(e.getActualTeacherId(),e.getActualTeacherId().toString());
+				e.setUpdateTime(date);
+				e.setActualTeacherId(teacherId);
+			});
+			checkNewCourseSchedules(courseSchedules,false,false);
+			courseScheduleDao.batchUpdate(courseSchedules);
+			Set<Long> courseScheduleIds = courseSchedules.stream().map(e -> e.getId()).collect(Collectors.toSet());
+			if(practiceGroup.getType() != TRIAL){
+				if(CHARGE == practiceGroup.getType()){
+					List<TeacherDefaultPracticeGroupSalary> teacherDefaultPracticeGroupSalaries = teacherDefaultPracticeGroupSalaryDao.queryByUserId(teacherId);
+					if(teacherDefaultPracticeGroupSalaries == null || teacherDefaultPracticeGroupSalaries.size() == 0){
+						throw new BizException("请设置老师默认课酬");
+					}
+					courseScheduleTeacherSalaryDao.batchUpdateTeacher(courseScheduleIds,teacherId);
+				}else{
+					List<CourseSchedule> groupNotStartCourses = courseScheduleDao.findGroupNotStartCourses(practiceGroupId, PRACTICE);
+					if(!CollectionUtils.isEmpty(groupNotStartCourses)){
+						SysConfig practiceCourseSalaryConfig = sysConfigService.findByParamName(SysConfigService.PRACTICE_COURSE_SALARY);
+						BigDecimal teacherSalary = new BigDecimal(practiceCourseSalaryConfig.getParanValue());
+						List<Long> courseIds = groupNotStartCourses.stream().map(CourseSchedule::getId).collect(Collectors.toList());
+						List<CourseScheduleTeacherSalary> courseScheduleTeacherSalaries = courseScheduleTeacherSalaryDao.findByCourseSchedules(courseIds);
+						for (CourseScheduleTeacherSalary courseScheduleTeacherSalary : courseScheduleTeacherSalaries) {
+							courseScheduleTeacherSalary.setUserId(teacherId);
+							courseScheduleTeacherSalary.setExpectSalary(teacherSalary);
+						}
+						courseScheduleTeacherSalaryDao.batchUpdate(courseScheduleTeacherSalaries);
 					}
-					courseScheduleTeacherSalaryDao.batchUpdate(courseScheduleTeacherSalaries);
 				}
 			}
+			teacherAttendanceDao.batchUpdateTeacher(courseScheduleIds,teacherId);
+			//删除申述
+			courseScheduleComplaintsDao.delByCourseScheduleIds(courseScheduleIds);
+			//清除考勤申述
+			teacherAttendanceDao.clearAttendanceComplaints(courseScheduleIds);
+			//保存修改记录
+			if(!CollectionUtils.isEmpty(modifyLogs))
+				saveModifyLog(modifyLogs,courseIds1);
+
+			if (teacherIdMap != null && teacherIdMap.size() > 0) {
+				sysMessageService.batchSendMessage(MessageSender.JIGUANG, MessageTypeEnum.TEACHER_PUSH_COURSE_SCHEDULE_CHANGE_RESULT,
+						teacherIdMap, null, 0, "7","TEACHER");
+			}
 		}
-        teacherAttendanceDao.batchUpdateTeacher(courseScheduleIds,teacherId);
-		//删除申述
-		courseScheduleComplaintsDao.delByCourseScheduleIds(courseScheduleIds);
-		//清除考勤申述
-		teacherAttendanceDao.clearAttendanceComplaints(courseScheduleIds);
-		//保存修改记录
-		if(!CollectionUtils.isEmpty(modifyLogs))
-			saveModifyLog(modifyLogs,courseIds1);
+		practiceGroupDao.update(practiceGroup);
 
-        if (teacherIdMap != null && teacherIdMap.size() > 0) {
-            sysMessageService.batchSendMessage(MessageSender.JIGUANG, MessageTypeEnum.TEACHER_PUSH_COURSE_SCHEDULE_CHANGE_RESULT,
-                    teacherIdMap, null, 0, "7","TEACHER");
-        }
     }
 
     @Override

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

@@ -1,19 +1,26 @@
 package com.ym.mec.biz.service.impl;
 
-import java.util.Date;
-import java.util.List;
+import java.util.*;
+import java.util.stream.Collectors;
 
+import com.ym.mec.biz.dal.dao.*;
+import com.ym.mec.biz.dal.dto.ClassGroupStudentInfoDto;
+import com.ym.mec.biz.dal.entity.*;
+import com.ym.mec.biz.dal.enums.GroupType;
 import com.ym.mec.biz.service.TeacherService;
+import com.ym.mec.util.collection.MapUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
-import com.ym.mec.biz.dal.dao.ImUserFriendDao;
 import com.ym.mec.biz.dal.dto.ImUserFriendDto;
-import com.ym.mec.biz.dal.entity.ImUserFriend;
 import com.ym.mec.biz.service.ImUserFriendService;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.exception.BizException;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
+import org.springframework.transaction.annotation.Transactional;
+
+import static com.ym.mec.biz.dal.enums.GroupType.MUSIC;
+import static com.ym.mec.biz.dal.enums.GroupType.VIP;
 
 @Service
 public class ImUserFriendServiceImpl extends BaseServiceImpl<Long, ImUserFriend> implements ImUserFriendService {
@@ -22,6 +29,26 @@ public class ImUserFriendServiceImpl extends BaseServiceImpl<Long, ImUserFriend>
 	private ImUserFriendDao imUserFriendDao;
 	@Autowired
 	private TeacherService teacherService;
+	@Autowired
+	private ClassGroupTeacherMapperDao classGroupTeacherMapperDao;
+	@Autowired
+	private ClassGroupStudentMapperDao classGroupStudentMapperDao;
+	@Autowired
+	private MusicGroupDao musicGroupDao;
+	@Autowired
+	private VipGroupDao vipGroupDao;
+	@Autowired
+	private TeacherDao teacherDao;
+	@Autowired
+	private CourseScheduleTeacherSalaryDao courseScheduleTeacherSalaryDao;
+	@Autowired
+	private CourseScheduleStudentPaymentDao courseScheduleStudentPaymentDao;
+	@Autowired
+	private CourseScheduleDao courseScheduleDao;
+	@Autowired
+	private StudentRegistrationDao studentRegistrationDao;
+	@Autowired
+	private ClassGroupDao classGroupDao;
 
 	@Override
 	public BaseDAO<Long, ImUserFriend> getDAO() {
@@ -88,4 +115,322 @@ public class ImUserFriendServiceImpl extends BaseServiceImpl<Long, ImUserFriend>
 		return imUserFriendDao.queryFriendDetail(userId, friendUserId);
 	}
 
+	@Override
+	public void batchInsert(List<ImUserFriend> imUserFriends) {
+		for (ImUserFriend imUserFriend : imUserFriends) {
+			if(imUserFriend.getUserId() == imUserFriend.getFriendId()){
+				continue;
+			}
+			// 检查是否已经是好友
+			ImUserFriend userFriend = imUserFriendDao.query(imUserFriend.getUserId(), imUserFriend.getFriendId());
+			if (userFriend != null) {
+				continue;
+			}
+			imUserFriendDao.insert(imUserFriend);
+		}
+	}
+
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public void classGroupAddStudent(Integer classGroupId, Integer studentId) {
+		Set<Integer> teacherIds = new HashSet<>();
+		Set<Integer> educations = new HashSet<>();
+		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.add(courseScheduleTeacherSalaryDao.queryTeacherByBishop(classGroupId));
+		teacherIds.add(studentId);
+
+		MusicGroup musicGroup = new MusicGroup();
+		String subjectName = "";
+
+		GroupType groupType = classGroup.getGroupType();
+		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());
+			//获取当前学员声部
+			subjectName = studentRegistrationDao.getStudentSubjectName(musicGroup.getId(),studentId);
+		}else if(groupType == VIP){
+			VipGroup vipGroup = vipGroupDao.get(Long.parseLong(classGroup.getMusicGroupId()));
+			teacherIds.add(vipGroup.getEducationalTeacherId());
+			educations.add(vipGroup.getEducationalTeacherId());
+		}
+		educations.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)));
+		for (Integer teacherId : teacherIds) {
+			if(teacherId == studentId){
+				continue;
+			}
+			//学员、教务关联的老师
+			ImUserFriend imUserFriend = new ImUserFriend();
+			imUserFriend.setUserId(studentId);
+			imUserFriend.setFriendId(teacherId);
+			imUserFriend.setFriendNickname(nameIdMap.get(teacherId));
+			imUserFriend.setMemo(musicGroup.getName());
+			imUserFriend.setTags(teacherSubjectNameMap.get(teacherId));
+			imUserFriends.add(imUserFriend);
+			//老师关联的学生、教务
+			ImUserFriend imUserFriend1 = new ImUserFriend();
+			imUserFriend1.setUserId(teacherId);
+			imUserFriend1.setFriendId(studentId);
+			imUserFriend1.setFriendNickname(nameIdMap.get(studentId));
+			imUserFriend1.setMemo(musicGroup.getName());
+			imUserFriend1.setTags(subjectName);
+			imUserFriends.add(imUserFriend1);
+		}
+		for (Integer education : educations) {
+			if(education == studentId){
+				continue;
+			}
+			//学员关联教务
+			ImUserFriend imUserFriend = new ImUserFriend();
+			imUserFriend.setUserId(studentId);
+			imUserFriend.setFriendId(education);
+			imUserFriend.setFriendNickname(nameIdMap.get(education));
+			imUserFriend.setMemo(musicGroup.getName());
+			imUserFriend.setTags(teacherSubjectNameMap.get(education));
+			imUserFriends.add(imUserFriend);
+			//教务关联学员
+			ImUserFriend imUserFriend1 = new ImUserFriend();
+			imUserFriend1.setUserId(education);
+			imUserFriend1.setFriendId(studentId);
+			imUserFriend1.setFriendNickname(nameIdMap.get(studentId));
+			imUserFriend1.setMemo(musicGroup.getName());
+			imUserFriend1.setTags(subjectName);
+			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());
+		}
+		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());
+		}
+		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);
+		}
+	}
+
 }

+ 13 - 3
mec-biz/src/main/resources/config/mybatis/ClassGroupTeacherMapperMapper.xml

@@ -140,15 +140,25 @@
         class_group_teacher_mapper ct
         WHERE ct.music_group_id_ = #{musicGroupId}
         AND ct.user_id_=u.id_
-        AND ct.teacher_role_="BISHOP"
+        AND ct.teacher_role_ = 'BISHOP'
     </select>
 
     <select id="findAllByMusicGroup" resultMap="ClassGroupTeacherMapper">
         SELECT u.real_name_, ct.*
         FROM sys_user u,
         class_group_teacher_mapper ct
-        WHERE ct.music_group_id_ = #{musicGroupId}
-        AND ct.user_id_=u.id_
+        <where>
+            ct.user_id_ = u.id_
+            <if test="groupType!=null">
+                AND ct.group_type_=#{groupType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
+            </if>
+            <if test="teacherRole != null">
+                AND ct.teacher_role_ = #{teacherRole}
+            </if>
+            <if test="musicGroupId != null">
+                AND ct.music_group_id_=#{musicGroupId}
+            </if>
+        </where>
     </select>
 
     <!-- 删除对应班级老师关联关系 -->

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

@@ -1011,11 +1011,11 @@
 	</select>
     <select id="queryTeacherByTeaching" resultType="java.lang.Integer">
 		SELECT DISTINCT cgtm.user_id_ FROM class_group_teacher_mapper cgtm
-		WHERE cgtm.class_group_id_ = #{classGroupId} AND cgtm.teacher_role_ = 'TEACHING' AND cgtm.group_type_ = 'MUSIC';
+		WHERE cgtm.class_group_id_ = #{classGroupId} AND cgtm.teacher_role_ = 'TEACHING';
 	</select>
     <select id="queryTeacherByBishop" resultType="java.lang.Integer">
 		SELECT DISTINCT cgtm.user_id_ FROM class_group_teacher_mapper cgtm
-		WHERE cgtm.class_group_id_ = #{classGroupId} AND cgtm.teacher_role_ = 'BISHOP' AND cgtm.group_type_ = 'MUSIC';
+		WHERE cgtm.class_group_id_ = #{classGroupId} AND cgtm.teacher_role_ = 'BISHOP';
 	</select>
 	<select id="queryTeacherIdMap" resultType="java.util.Map">
 		SELECT course_schedule_id_ 'key',GROUP_CONCAT(DISTINCT user_id_) 'value' FROM course_schedule_teacher_salary

+ 3 - 8
mec-biz/src/main/resources/config/mybatis/ImUserFriendMapper.xml

@@ -37,7 +37,7 @@
 	<!-- 向数据库增加一条记录 -->
 	<insert id="insert" parameterType="com.ym.mec.biz.dal.entity.ImUserFriend" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
 		INSERT INTO im_user_friend (id_,user_id_,friend_id_,friend_nickname_,memo_,tags_,create_time_,update_time_)
-		VALUES(#{id},#{userId},#{friendId},#{friendNickname},#{memo},#{tags},#{createTime},#{updateTime})
+		VALUES(#{id},#{userId},#{friendId},#{friendNickname},#{memo},#{tags},NOW(),NOW())
 	</insert>
 
 	<insert id="batchInsert">
@@ -69,13 +69,8 @@
 		<if test="tags != null">
 		tags_ = #{tags},
 		</if>
-		<if test="updateTime != null">
-		update_time_ = #{updateTime},
-		</if>
-		<if test="createTime != null">
-		create_time_ = #{createTime},
-		</if>
-		</set> WHERE id_ = #{id} 
+		update_time_ = NOW()
+		</set> WHERE id_ = #{id}
 	</update>
 	
 	<!-- 根据主键删除一条记录 -->

+ 15 - 0
mec-biz/src/main/resources/config/mybatis/StudentRegistrationMapper.xml

@@ -740,6 +740,21 @@
         LEFT JOIN sys_user su ON su.id_ = sr.user_id_
         WHERE sr.music_group_id_ = #{musicGroupId} AND FIND_IN_SET(sr.user_id_,#{studentIds}) AND sr.music_group_status_ != 'QUIT'
     </select>
+    <select id="getStudentSubjectName" resultType="java.lang.String">
+        SELECT s.name_
+        FROM student_registration sr
+        LEFT JOIN subject s ON sr.actual_subject_id_ = s.id_
+        where sr.music_group_id_ = #{musicGroupId} and sr.user_id_ = #{studentId}
+    </select>
+    <select id="getStudentSubjectNameByStuIds" resultType="java.lang.String">
+        SELECT sr.user_id_ 'key',s.name_ 'value'
+        FROM student_registration sr
+        LEFT JOIN subject s ON sr.actual_subject_id_ = s.id_
+        where sr.music_group_id_ = #{musicGroupId} and sr.user_id_ IN
+        <foreach collection="studentIds" separator="," item="item" open="(" close=")">
+            #{item}
+        </foreach>
+    </select>
     <!-- 批量删除信息 -->
     <delete id="batchDelete">
         DELETE FROM student_registration WHERE id_ IN

+ 0 - 8
mec-teacher/src/main/java/com/ym/mec/teacher/controller/TeacherController.java

@@ -1,29 +1,21 @@
 package com.ym.mec.teacher.controller;
 
-import com.ym.mec.biz.dal.entity.Employee;
 import com.ym.mec.biz.service.*;
 import com.ym.mec.common.entity.HttpResponseResult;
 import com.ym.mec.common.page.QueryInfo;
-
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
-
 import java.util.Date;
-import java.util.List;
-
-import jdk.internal.dynalink.linker.LinkerServices;
 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.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 com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.dao.SubjectDao;