Bläddra i källkod

1、陪练课调整

Joburgess 5 år sedan
förälder
incheckning
0ed783904f

+ 233 - 81
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleServiceImpl.java

@@ -503,6 +503,169 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
         return teacherCourseSchedulesWithDate;
     }
 
+//    @Override
+//    public void checkNewCourseSchedules(List<CourseSchedule> courseSchedules, boolean checkExistCourseSchedule) {
+//        if (CollectionUtils.isEmpty(courseSchedules)) {
+//            return;
+//        }
+//        List<String> classDates = courseSchedules.stream().map(courseSchedule -> DateUtil.dateToString(courseSchedule.getClassDate(), "yyyy-MM-dd"))
+//                .collect(Collectors.toList());
+//
+//        List<CourseSchedule> existCourseSchedules = courseScheduleDao.findByClassDate(classDates);
+//
+//        //只需要调整课程信息的课程编号列表
+//        List<Long> updateCourseScheduleIds = courseSchedules
+//                .stream()
+//                .filter(courseSchedule -> Objects.nonNull(courseSchedule.getId()))
+//                .map(CourseSchedule::getId)
+//                .collect(Collectors.toList());
+//
+//        //排除只需调整的课程
+//        existCourseSchedules = existCourseSchedules.stream()
+//                .filter(courseSchedule -> !updateCourseScheduleIds.contains(courseSchedule.getId()))
+//                .collect(Collectors.toList());
+//        //新课程对应的班级编号列表
+//        List<Integer> newCourseScheduleClassGroupIds = courseSchedules
+//                .stream()
+//                .map(CourseSchedule::getClassGroupId)
+//                .distinct()
+//                .collect(Collectors.toList());
+//
+//        List<Long> existCourseScheduleIds = existCourseSchedules.stream()
+//                .map(CourseSchedule::getId)
+//                .collect(Collectors.toList());
+//
+//        HashSet<Long> courseScheduleIdsSet = new HashSet<>(existCourseScheduleIds);
+//
+//        //合并新课程和已存在的课程
+//        List<CourseSchedule> allCourseSchedules;
+//        if (!CollectionUtils.isEmpty(existCourseSchedules)) {
+//            allCourseSchedules = ListUtils.sum(courseSchedules, existCourseSchedules);
+//        } else {
+//            allCourseSchedules = courseSchedules;
+//        }
+//        //所有课程的班级编号
+//        List<Integer> classGroupIds = allCourseSchedules
+//                .stream()
+//                .map(CourseSchedule::getClassGroupId)
+//                .distinct()
+//                .collect(Collectors.toList());
+//        //班级与学生的关联记录
+//        List<ClassGroupStudentMapper> classGroupStudentMappers = classGroupStudentMapperDao.findByClassGroups(classGroupIds);
+//        Map<Integer, List<ClassGroupStudentMapper>> classGroupStudentsMap = classGroupStudentMappers
+//                .stream()
+//                .collect(Collectors.groupingBy(ClassGroupStudentMapper::getClassGroupId));
+//
+//        //根据课程获取助教id关联集合
+//        List<IntegerAndIntegerListDto> courseScheduleTeachingTeacherIdList = new ArrayList<>();
+//        if (!CollectionUtils.isEmpty(existCourseScheduleIds)) {
+//            courseScheduleTeachingTeacherIdList = courseScheduleDao.findCourseScheduleIdAndUserIdsMap(existCourseScheduleIds, TeachTypeEnum.TEACHING.getCode());
+//        }
+//        Map<Integer, IntegerAndIntegerListDto> courseScheduleTeachingTeacherMap = courseScheduleTeachingTeacherIdList.stream()
+//                .collect(Collectors.toMap(IntegerAndIntegerListDto::getId, integerAndIntegerListDto -> integerAndIntegerListDto));
+//
+//        //班级助教关联ID集合
+//        List<IntegerAndIntegerListDto> classGroupAndUserIdsMap = courseScheduleDao.findClassGroupAndUserIdsMap(newCourseScheduleClassGroupIds, TeachTypeEnum.TEACHING.getCode());
+//        Map<Integer, IntegerAndIntegerListDto> classGroupTeachingTeacherMap = classGroupAndUserIdsMap.stream()
+//                .collect(Collectors.toMap(IntegerAndIntegerListDto::getId, integerAndIntegerListDto -> integerAndIntegerListDto));
+//
+//        //将课程计划按照开课时间排序
+//        allCourseSchedules.sort(Comparator.comparing(CourseSchedule::getStartClassTime));
+//        if (allCourseSchedules.size() > 1) {
+//            //记录连续冲突的次数
+//            int repeatTimes = 1;
+//            for (int i = 1; i < allCourseSchedules.size(); i++) {
+//                int temp_repeat = repeatTimes;
+//                for (int j = 1; j <= temp_repeat; j++) {
+//                    //当前课程
+//                    CourseSchedule preCourseSchedule = allCourseSchedules.get(i - j);
+//                    //后面一节课程
+//                    CourseSchedule backCourseSchedule = allCourseSchedules.get(i);
+//                    //判断前后两节课是否存在冲突
+//                    if (backCourseSchedule.getStartClassTime().before(preCourseSchedule.getEndClassTime())) {
+//                        if (j == repeatTimes) {
+//                            repeatTimes += 1;
+//                        }
+//                        if (!checkExistCourseSchedule
+//                                && courseScheduleIdsSet.contains(preCourseSchedule.getId())
+//                                && courseScheduleIdsSet.contains(backCourseSchedule.getId())) {
+//                            continue;
+//                        }
+//
+//                        //如果存在时间重叠,则需要判断前后两节课的教师和学生是否存在冲突
+//                        //主教冲突检测
+//                        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());
+//                            }
+//                        } 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());
+//                            }
+//                        } 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));
+//                            }
+//                        }
+//                        //学生冲突检测
+//                        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));
+//                        }
+//                    } else {
+//                        repeatTimes = j;
+//                        break;
+//                    }
+//                }
+//            }
+//        }
+//    }
+
     @Override
     public void checkNewCourseSchedules(List<CourseSchedule> courseSchedules, boolean checkExistCourseSchedule) {
         if (CollectionUtils.isEmpty(courseSchedules)) {
@@ -574,92 +737,82 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
         if (allCourseSchedules.size() > 1) {
             //记录连续冲突的次数
             int repeatTimes = 1;
-            for (int i = 1; i < allCourseSchedules.size(); i++) {
-                int temp_repeat = repeatTimes;
-                for (int j = 1; j <= temp_repeat; j++) {
-                    //当前课程
-                    CourseSchedule preCourseSchedule = allCourseSchedules.get(i - j);
-                    //后面一节课程
-                    CourseSchedule backCourseSchedule = allCourseSchedules.get(i);
+            for (CourseSchedule preCourseSchedule : courseSchedules) {
+                for (CourseSchedule backCourseSchedule : allCourseSchedules) {
                     //判断前后两节课是否存在冲突
-                    if (backCourseSchedule.getStartClassTime().before(preCourseSchedule.getEndClassTime())) {
-                        if (j == repeatTimes) {
-                            repeatTimes += 1;
-                        }
-                        if (!checkExistCourseSchedule
-                                && courseScheduleIdsSet.contains(preCourseSchedule.getId())
-                                && courseScheduleIdsSet.contains(backCourseSchedule.getId())) {
-                            continue;
-                        }
+                    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());
-                            }
-                        } 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());
-                            }
-                        } else if (existCourseScheduleIds.contains(backCourseSchedule.getId())) {
-                            IntegerAndIntegerListDto integerAndIntegerListDto = courseScheduleTeachingTeacherMap.get(backCourseSchedule.getId());
-                            if (Objects.nonNull(integerAndIntegerListDto)) {
-                                backCourseSchedule.setTeachingTeacherIdList(integerAndIntegerListDto.getIds());
-                            }
+                        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());
                         }
-                        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(preCourseSchedule.getId())) {
+                        IntegerAndIntegerListDto integerAndIntegerListDto = courseScheduleTeachingTeacherMap.get(preCourseSchedule.getId());
+                        if (Objects.nonNull(integerAndIntegerListDto)) {
+                            preCourseSchedule.setTeachingTeacherIdList(integerAndIntegerListDto.getIds());
                         }
-                        //学生冲突检测
-                        if (preCourseSchedule.getClassGroupId().equals(backCourseSchedule.getClassGroupId())) {
-                            //如果班级相同,则学生肯定存在冲突
-                            throw new BizException(courseCheckInfo(preCourseSchedule, backCourseSchedule, existCourseScheduleIds, 3));
+                    }
+                    if (Objects.isNull(backCourseSchedule.getId())) {
+                        IntegerAndIntegerListDto integerAndIntegerListDto = classGroupTeachingTeacherMap.get(backCourseSchedule.getClassGroupId());
+                        if (Objects.nonNull(integerAndIntegerListDto)) {
+                            backCourseSchedule.setTeachingTeacherIdList(integerAndIntegerListDto.getIds());
                         }
-                        //如果班级不同,则需要检测两个班级是否存在重复的学生
-                        List<ClassGroupStudentMapper> preClassGroupStudents = classGroupStudentsMap.get(preCourseSchedule.getClassGroupId());
-                        List<ClassGroupStudentMapper> backClassGroupStudents = classGroupStudentsMap.get(backCourseSchedule.getClassGroupId());
-                        //如果有一个存在没有学生的班级则不存在冲突
-                        if (CollectionUtils.isEmpty(preClassGroupStudents) || CollectionUtils.isEmpty(backClassGroupStudents)) {
-                            continue;
+                    } else if (existCourseScheduleIds.contains(backCourseSchedule.getId())) {
+                        IntegerAndIntegerListDto integerAndIntegerListDto = courseScheduleTeachingTeacherMap.get(backCourseSchedule.getId());
+                        if (Objects.nonNull(integerAndIntegerListDto)) {
+                            backCourseSchedule.setTeachingTeacherIdList(integerAndIntegerListDto.getIds());
                         }
-                        //当前课程所在班级的学生编号列表
-                        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)
+                    }
+                    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(repeatStudentIds)) {
-                            throw new BizException(courseCheckInfo(preCourseSchedule, backCourseSchedule, existCourseScheduleIds, 3));
+                        if (!CollectionUtils.isEmpty(repeatIds)) {
+                            throw new BizException(courseCheckInfo(preCourseSchedule, backCourseSchedule, existCourseScheduleIds, 2));
                         }
-                    } else {
-                        repeatTimes = j;
-                        break;
+                    }
+                    //学生冲突检测
+                    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));
                     }
                 }
             }
@@ -2377,9 +2530,9 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
         oldCourseSchedule.setEndClassTime(DateUtil.addMinutes(courseSchedule.getStartClassTime(),practiceCourseMinutes));
         List<CourseSchedule> courseSchedules=new ArrayList<>();
         courseSchedules.add(oldCourseSchedule);
-        courseSchedules.forEach(e->{
-            e.setId(null);
-        });
+//        courseSchedules.forEach(e->{
+//            e.setId(null);
+//        });
         checkNewCourseSchedules(courseSchedules,false);
         oldCourseSchedule.setId(courseSchedule.getId());
         courseScheduleDao.update(oldCourseSchedule);
@@ -2447,7 +2600,6 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
         courseSchedules.forEach(e->{
             teacherIdMap.put(e.getActualTeacherId(),e.getActualTeacherId().toString());
             e.setActualTeacherId(teacherId);
-            e.setId(null);
         });
         checkNewCourseSchedules(courseSchedules,false);
         courseScheduleDao.batchUpdate(copyCourseSchedules);