Browse Source

1、陪练课调整
2、付费陪练课可预约时间调整

Joburgess 5 years ago
parent
commit
d15d385b4a

+ 80 - 70
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleServiceImpl.java

@@ -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));
-                    }
                 }
             }
         }

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

@@ -1477,6 +1477,7 @@
         cs.id_,
         cs.music_group_id_,
         cs.class_group_id_,
+        cs.class_date_,
         CONCAT(cs.class_date_,' ',cs.start_class_time_) start_class_time_,
         CONCAT(cs.class_date_,' ',cs.end_class_time_) end_class_time_,
         cs.type_,