|  | @@ -754,86 +754,96 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 | 
	
		
			
				|  |  |          Map<Integer, IntegerAndIntegerListDto> classGroupTeachingTeacherMap = classGroupAndUserIdsMap.stream()
 | 
	
		
			
				|  |  |                  .collect(Collectors.toMap(IntegerAndIntegerListDto::getId, integerAndIntegerListDto -> integerAndIntegerListDto));
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        //将课程计划按照开课时间排序
 | 
	
		
			
				|  |  | -        allCourseSchedules.sort(Comparator.comparing(CourseSchedule::getStartClassTime));
 | 
	
		
			
				|  |  | +        Map<Date, List<CourseSchedule>> existClassDateCoursesMap = allCourseSchedules.stream().collect(Collectors.groupingBy(CourseSchedule::getClassDate));
 | 
	
		
			
				|  |  | +        Map<Date, List<CourseSchedule>> newClassDateCoursesMap = courseSchedules.stream().collect(Collectors.groupingBy(CourseSchedule::getClassDate));
 | 
	
		
			
				|  |  |          if (allCourseSchedules.size() > 1) {
 | 
	
		
			
				|  |  | -            for (CourseSchedule preCourseSchedule : courseSchedules) {
 | 
	
		
			
				|  |  | -                for (CourseSchedule backCourseSchedule : allCourseSchedules) {
 | 
	
		
			
				|  |  | -                    //判断前后两节课是否存在冲突
 | 
	
		
			
				|  |  | -                    if (!preCourseSchedule.getStartClassTime().before(backCourseSchedule.getEndClassTime())
 | 
	
		
			
				|  |  | -                        ||!preCourseSchedule.getEndClassTime().after(backCourseSchedule.getStartClassTime())) {
 | 
	
		
			
				|  |  | -                        continue;
 | 
	
		
			
				|  |  | -                    }
 | 
	
		
			
				|  |  | -                    if (!checkExistCourseSchedule
 | 
	
		
			
				|  |  | -                            && !courseScheduleIdsSet.contains(backCourseSchedule.getId())) {
 | 
	
		
			
				|  |  | -                        continue;
 | 
	
		
			
				|  |  | -                    }
 | 
	
		
			
				|  |  | +            for (Map.Entry<Date, List<CourseSchedule>> classDateCourseEntry : newClassDateCoursesMap.entrySet()) {
 | 
	
		
			
				|  |  | +                List<CourseSchedule> existClassDateCourses = existClassDateCoursesMap.get(classDateCourseEntry.getKey());
 | 
	
		
			
				|  |  | +                if(CollectionUtils.isEmpty(existClassDateCourses)){
 | 
	
		
			
				|  |  | +                    continue;
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +                List<CourseSchedule> newClassDateCourses=classDateCourseEntry.getValue();
 | 
	
		
			
				|  |  | +                existClassDateCourses.sort(Comparator.comparing(CourseSchedule::getStartClassTime));
 | 
	
		
			
				|  |  | +                newClassDateCourses.sort(Comparator.comparing(CourseSchedule::getStartClassTime));
 | 
	
		
			
				|  |  | +                for (CourseSchedule preCourseSchedule : newClassDateCourses) {
 | 
	
		
			
				|  |  | +                    for (CourseSchedule backCourseSchedule : existClassDateCourses) {
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                        //判断前后两节课是否存在冲突
 | 
	
		
			
				|  |  | +                        if (!preCourseSchedule.getStartClassTime().before(backCourseSchedule.getEndClassTime())
 | 
	
		
			
				|  |  | +                                ||!preCourseSchedule.getEndClassTime().after(backCourseSchedule.getStartClassTime())) {
 | 
	
		
			
				|  |  | +                            continue;
 | 
	
		
			
				|  |  | +                        }
 | 
	
		
			
				|  |  | +                        if (!checkExistCourseSchedule
 | 
	
		
			
				|  |  | +                                && !courseScheduleIdsSet.contains(backCourseSchedule.getId())) {
 | 
	
		
			
				|  |  | +                            continue;
 | 
	
		
			
				|  |  | +                        }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -                    //如果存在时间重叠,则需要判断前后两节课的教师和学生是否存在冲突
 | 
	
		
			
				|  |  | -                    //主教冲突检测
 | 
	
		
			
				|  |  | -                    if (Objects.nonNull(preCourseSchedule.getActualTeacherId())
 | 
	
		
			
				|  |  | -                            && preCourseSchedule.getActualTeacherId().equals(backCourseSchedule.getActualTeacherId())) {
 | 
	
		
			
				|  |  | +                        //如果存在时间重叠,则需要判断前后两节课的教师和学生是否存在冲突
 | 
	
		
			
				|  |  | +                        //主教冲突检测
 | 
	
		
			
				|  |  | +                        if (Objects.nonNull(preCourseSchedule.getActualTeacherId())
 | 
	
		
			
				|  |  | +                                && preCourseSchedule.getActualTeacherId().equals(backCourseSchedule.getActualTeacherId())) {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -                        throw new BizException(courseCheckInfo(preCourseSchedule, backCourseSchedule, existCourseScheduleIds, 1));
 | 
	
		
			
				|  |  | -                    }
 | 
	
		
			
				|  |  | -                    //助教冲突检测
 | 
	
		
			
				|  |  | -                    if (Objects.isNull(preCourseSchedule.getId())) {
 | 
	
		
			
				|  |  | -                        IntegerAndIntegerListDto integerAndIntegerListDto = classGroupTeachingTeacherMap.get(preCourseSchedule.getClassGroupId());
 | 
	
		
			
				|  |  | -                        if (Objects.nonNull(integerAndIntegerListDto)) {
 | 
	
		
			
				|  |  | -                            preCourseSchedule.setTeachingTeacherIdList(integerAndIntegerListDto.getIds());
 | 
	
		
			
				|  |  | +                            throw new BizException(courseCheckInfo(preCourseSchedule, backCourseSchedule, existCourseScheduleIds, 1));
 | 
	
		
			
				|  |  |                          }
 | 
	
		
			
				|  |  | -                    } else if (existCourseScheduleIds.contains(preCourseSchedule.getId())) {
 | 
	
		
			
				|  |  | -                        IntegerAndIntegerListDto integerAndIntegerListDto = courseScheduleTeachingTeacherMap.get(preCourseSchedule.getId());
 | 
	
		
			
				|  |  | -                        if (Objects.nonNull(integerAndIntegerListDto)) {
 | 
	
		
			
				|  |  | -                            preCourseSchedule.setTeachingTeacherIdList(integerAndIntegerListDto.getIds());
 | 
	
		
			
				|  |  | +                        //助教冲突检测
 | 
	
		
			
				|  |  | +                        if (Objects.isNull(preCourseSchedule.getId())) {
 | 
	
		
			
				|  |  | +                            IntegerAndIntegerListDto integerAndIntegerListDto = classGroupTeachingTeacherMap.get(preCourseSchedule.getClassGroupId());
 | 
	
		
			
				|  |  | +                            if (Objects.nonNull(integerAndIntegerListDto)) {
 | 
	
		
			
				|  |  | +                                preCourseSchedule.setTeachingTeacherIdList(integerAndIntegerListDto.getIds());
 | 
	
		
			
				|  |  | +                            }
 | 
	
		
			
				|  |  | +                        } else if (existCourseScheduleIds.contains(preCourseSchedule.getId())) {
 | 
	
		
			
				|  |  | +                            IntegerAndIntegerListDto integerAndIntegerListDto = courseScheduleTeachingTeacherMap.get(preCourseSchedule.getId());
 | 
	
		
			
				|  |  | +                            if (Objects.nonNull(integerAndIntegerListDto)) {
 | 
	
		
			
				|  |  | +                                preCourseSchedule.setTeachingTeacherIdList(integerAndIntegerListDto.getIds());
 | 
	
		
			
				|  |  | +                            }
 | 
	
		
			
				|  |  |                          }
 | 
	
		
			
				|  |  | -                    }
 | 
	
		
			
				|  |  | -                    if (Objects.isNull(backCourseSchedule.getId())) {
 | 
	
		
			
				|  |  | -                        IntegerAndIntegerListDto integerAndIntegerListDto = classGroupTeachingTeacherMap.get(backCourseSchedule.getClassGroupId());
 | 
	
		
			
				|  |  | -                        if (Objects.nonNull(integerAndIntegerListDto)) {
 | 
	
		
			
				|  |  | -                            backCourseSchedule.setTeachingTeacherIdList(integerAndIntegerListDto.getIds());
 | 
	
		
			
				|  |  | +                        if (Objects.isNull(backCourseSchedule.getId())) {
 | 
	
		
			
				|  |  | +                            IntegerAndIntegerListDto integerAndIntegerListDto = classGroupTeachingTeacherMap.get(backCourseSchedule.getClassGroupId());
 | 
	
		
			
				|  |  | +                            if (Objects.nonNull(integerAndIntegerListDto)) {
 | 
	
		
			
				|  |  | +                                backCourseSchedule.setTeachingTeacherIdList(integerAndIntegerListDto.getIds());
 | 
	
		
			
				|  |  | +                            }
 | 
	
		
			
				|  |  | +                        } else if (existCourseScheduleIds.contains(backCourseSchedule.getId())) {
 | 
	
		
			
				|  |  | +                            IntegerAndIntegerListDto integerAndIntegerListDto = courseScheduleTeachingTeacherMap.get(backCourseSchedule.getId());
 | 
	
		
			
				|  |  | +                            if (Objects.nonNull(integerAndIntegerListDto)) {
 | 
	
		
			
				|  |  | +                                backCourseSchedule.setTeachingTeacherIdList(integerAndIntegerListDto.getIds());
 | 
	
		
			
				|  |  | +                            }
 | 
	
		
			
				|  |  | +                        }
 | 
	
		
			
				|  |  | +                        if (!CollectionUtils.isEmpty(preCourseSchedule.getTeachingTeacherIdList())
 | 
	
		
			
				|  |  | +                                && !CollectionUtils.isEmpty(backCourseSchedule.getTeachingTeacherIdList())) {
 | 
	
		
			
				|  |  | +                            List<Integer> repeatIds = preCourseSchedule.getTeachingTeacherIdList()
 | 
	
		
			
				|  |  | +                                    .stream().filter(backCourseSchedule.getTeachingTeacherIdList()::contains)
 | 
	
		
			
				|  |  | +                                    .collect(Collectors.toList());
 | 
	
		
			
				|  |  | +                            if (!CollectionUtils.isEmpty(repeatIds)) {
 | 
	
		
			
				|  |  | +                                throw new BizException(courseCheckInfo(preCourseSchedule, backCourseSchedule, existCourseScheduleIds, 2));
 | 
	
		
			
				|  |  | +                            }
 | 
	
		
			
				|  |  |                          }
 | 
	
		
			
				|  |  | -                    } else if (existCourseScheduleIds.contains(backCourseSchedule.getId())) {
 | 
	
		
			
				|  |  | -                        IntegerAndIntegerListDto integerAndIntegerListDto = courseScheduleTeachingTeacherMap.get(backCourseSchedule.getId());
 | 
	
		
			
				|  |  | -                        if (Objects.nonNull(integerAndIntegerListDto)) {
 | 
	
		
			
				|  |  | -                            backCourseSchedule.setTeachingTeacherIdList(integerAndIntegerListDto.getIds());
 | 
	
		
			
				|  |  | +                        //学生冲突检测
 | 
	
		
			
				|  |  | +                        if (preCourseSchedule.getClassGroupId().equals(backCourseSchedule.getClassGroupId())) {
 | 
	
		
			
				|  |  | +                            //如果班级相同,则学生肯定存在冲突
 | 
	
		
			
				|  |  | +                            throw new BizException(courseCheckInfo(preCourseSchedule, backCourseSchedule, existCourseScheduleIds, 3));
 | 
	
		
			
				|  |  |                          }
 | 
	
		
			
				|  |  | -                    }
 | 
	
		
			
				|  |  | -                    if (!CollectionUtils.isEmpty(preCourseSchedule.getTeachingTeacherIdList())
 | 
	
		
			
				|  |  | -                            && !CollectionUtils.isEmpty(backCourseSchedule.getTeachingTeacherIdList())) {
 | 
	
		
			
				|  |  | -                        List<Integer> repeatIds = preCourseSchedule.getTeachingTeacherIdList()
 | 
	
		
			
				|  |  | -                                .stream().filter(backCourseSchedule.getTeachingTeacherIdList()::contains)
 | 
	
		
			
				|  |  | +                        //如果班级不同,则需要检测两个班级是否存在重复的学生
 | 
	
		
			
				|  |  | +                        List<ClassGroupStudentMapper> preClassGroupStudents = classGroupStudentsMap.get(preCourseSchedule.getClassGroupId());
 | 
	
		
			
				|  |  | +                        List<ClassGroupStudentMapper> backClassGroupStudents = classGroupStudentsMap.get(backCourseSchedule.getClassGroupId());
 | 
	
		
			
				|  |  | +                        //如果有一个存在没有学生的班级则不存在冲突
 | 
	
		
			
				|  |  | +                        if (CollectionUtils.isEmpty(preClassGroupStudents) || CollectionUtils.isEmpty(backClassGroupStudents)) {
 | 
	
		
			
				|  |  | +                            continue;
 | 
	
		
			
				|  |  | +                        }
 | 
	
		
			
				|  |  | +                        //当前课程所在班级的学生编号列表
 | 
	
		
			
				|  |  | +                        List<Integer> preClassGroupStudentIds = preClassGroupStudents.stream()
 | 
	
		
			
				|  |  | +                                .map(ClassGroupStudentMapper::getUserId)
 | 
	
		
			
				|  |  | +                                .collect(Collectors.toList());
 | 
	
		
			
				|  |  | +                        //后面一节课程所在班级的学生编号列表
 | 
	
		
			
				|  |  | +                        List<Integer> backClassGroupStudentIds = backClassGroupStudents.stream()
 | 
	
		
			
				|  |  | +                                .map(ClassGroupStudentMapper::getUserId)
 | 
	
		
			
				|  |  |                                  .collect(Collectors.toList());
 | 
	
		
			
				|  |  | -                        if (!CollectionUtils.isEmpty(repeatIds)) {
 | 
	
		
			
				|  |  | -                            throw new BizException(courseCheckInfo(preCourseSchedule, backCourseSchedule, existCourseScheduleIds, 2));
 | 
	
		
			
				|  |  | +                        List<Integer> repeatStudentIds = preClassGroupStudentIds.stream()
 | 
	
		
			
				|  |  | +                                .filter(backClassGroupStudentIds::contains)
 | 
	
		
			
				|  |  | +                                .collect(Collectors.toList());
 | 
	
		
			
				|  |  | +                        if (!CollectionUtils.isEmpty(repeatStudentIds)) {
 | 
	
		
			
				|  |  | +                            throw new BizException(courseCheckInfo(preCourseSchedule, backCourseSchedule, existCourseScheduleIds, 3));
 | 
	
		
			
				|  |  |                          }
 | 
	
		
			
				|  |  |                      }
 | 
	
		
			
				|  |  | -                    //学生冲突检测
 | 
	
		
			
				|  |  | -                    if (preCourseSchedule.getClassGroupId().equals(backCourseSchedule.getClassGroupId())) {
 | 
	
		
			
				|  |  | -                        //如果班级相同,则学生肯定存在冲突
 | 
	
		
			
				|  |  | -                        throw new BizException(courseCheckInfo(preCourseSchedule, backCourseSchedule, existCourseScheduleIds, 3));
 | 
	
		
			
				|  |  | -                    }
 | 
	
		
			
				|  |  | -                    //如果班级不同,则需要检测两个班级是否存在重复的学生
 | 
	
		
			
				|  |  | -                    List<ClassGroupStudentMapper> preClassGroupStudents = classGroupStudentsMap.get(preCourseSchedule.getClassGroupId());
 | 
	
		
			
				|  |  | -                    List<ClassGroupStudentMapper> backClassGroupStudents = classGroupStudentsMap.get(backCourseSchedule.getClassGroupId());
 | 
	
		
			
				|  |  | -                    //如果有一个存在没有学生的班级则不存在冲突
 | 
	
		
			
				|  |  | -                    if (CollectionUtils.isEmpty(preClassGroupStudents) || CollectionUtils.isEmpty(backClassGroupStudents)) {
 | 
	
		
			
				|  |  | -                        continue;
 | 
	
		
			
				|  |  | -                    }
 | 
	
		
			
				|  |  | -                    //当前课程所在班级的学生编号列表
 | 
	
		
			
				|  |  | -                    List<Integer> preClassGroupStudentIds = preClassGroupStudents.stream()
 | 
	
		
			
				|  |  | -                            .map(ClassGroupStudentMapper::getUserId)
 | 
	
		
			
				|  |  | -                            .collect(Collectors.toList());
 | 
	
		
			
				|  |  | -                    //后面一节课程所在班级的学生编号列表
 | 
	
		
			
				|  |  | -                    List<Integer> backClassGroupStudentIds = backClassGroupStudents.stream()
 | 
	
		
			
				|  |  | -                            .map(ClassGroupStudentMapper::getUserId)
 | 
	
		
			
				|  |  | -                            .collect(Collectors.toList());
 | 
	
		
			
				|  |  | -                    List<Integer> repeatStudentIds = preClassGroupStudentIds.stream()
 | 
	
		
			
				|  |  | -                            .filter(backClassGroupStudentIds::contains)
 | 
	
		
			
				|  |  | -                            .collect(Collectors.toList());
 | 
	
		
			
				|  |  | -                    if (!CollectionUtils.isEmpty(repeatStudentIds)) {
 | 
	
		
			
				|  |  | -                        throw new BizException(courseCheckInfo(preCourseSchedule, backCourseSchedule, existCourseScheduleIds, 3));
 | 
	
		
			
				|  |  | -                    }
 | 
	
		
			
				|  |  |                  }
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |          }
 |