|
@@ -1,5 +1,6 @@
|
|
|
package com.ym.mec.biz.service.impl;
|
|
|
|
|
|
+import com.alibaba.fastjson.JSON;
|
|
|
import com.alibaba.fastjson.JSONObject;
|
|
|
import com.ym.mec.auth.api.client.SysUserFeignService;
|
|
|
import com.ym.mec.auth.api.entity.SysUser;
|
|
@@ -145,7 +146,7 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
|
|
|
if(Objects.isNull(courseSchedules)&&courseSchedules.size()<=0){
|
|
|
throw new BizException("参数错误!");
|
|
|
}
|
|
|
- checkNewCourseSchedules(courseSchedules);
|
|
|
+ checkNewCourseSchedules(courseSchedules,false);
|
|
|
createCourseScheduleName(courseSchedules);
|
|
|
courseScheduleDao.batchAddCourseSchedules(courseSchedules);
|
|
|
}
|
|
@@ -158,7 +159,7 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
|
|
|
if(Objects.isNull(musicGroupID)){
|
|
|
throw new BizException("请指定乐团!");
|
|
|
}
|
|
|
- checkNewCourseSchedules(courseSchedules);
|
|
|
+ checkNewCourseSchedules(courseSchedules,false);
|
|
|
courseScheduleDao.deleteCourseSchedulesByMusicGroupID(musicGroupID);
|
|
|
courseScheduleDao.batchAddCourseSchedules(courseSchedules);
|
|
|
}
|
|
@@ -268,13 +269,15 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public void checkNewCourseSchedules(List<CourseSchedule> courseSchedules){
|
|
|
+ public void checkNewCourseSchedules(List<CourseSchedule> courseSchedules,boolean checkExistCourseSchedule){
|
|
|
+ System.out.println(JSON.toJSONString(courseSchedules));
|
|
|
//第一节课
|
|
|
CourseSchedule firstCourseSchedule = courseSchedules.stream().min(Comparator.comparing(CourseSchedule::getStartClassTime)).get();
|
|
|
//最后一节课
|
|
|
CourseSchedule latestCourseSchedule = courseSchedules.stream().max(Comparator.comparing(CourseSchedule::getStartClassTime)).get();
|
|
|
//获取第一节课和最后一节课所包含的时间段内已存在的课程
|
|
|
List<CourseSchedule> existCourseSchedules = courseScheduleDao.findByDateZone(firstCourseSchedule.getStartClassTime(), latestCourseSchedule.getEndClassTime());
|
|
|
+
|
|
|
//只需要调整课程信息的课程编号列表
|
|
|
List<Long> updateCourseScheduleIds = courseSchedules
|
|
|
.stream()
|
|
@@ -286,6 +289,17 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
|
|
|
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());
|
|
|
+
|
|
|
//合并新课程和已存在的课程
|
|
|
List<CourseSchedule> allCourseSchedules;
|
|
|
if(!CollectionUtils.isEmpty(existCourseSchedules)){
|
|
@@ -305,13 +319,18 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
|
|
|
.stream()
|
|
|
.collect(Collectors.groupingBy(ClassGroupStudentMapper::getClassGroupId));
|
|
|
|
|
|
-// allCourseSchedules
|
|
|
-// .stream()
|
|
|
-// .filter(courseSchedule -> Objects.nonNull(courseSchedule.getId()))
|
|
|
-// .map(CourseSchedule::getId)
|
|
|
-// .collect(Collectors.toList());
|
|
|
+ //根据课程获取助教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));
|
|
|
|
|
|
-// courseScheduleDao.findCourseScheduleIdAndUserIdsMap(new ArrayList<>());
|
|
|
+ //班级助教关联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));
|
|
@@ -324,21 +343,59 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
|
|
|
CourseSchedule preCourseSchedule = allCourseSchedules.get(i-j);
|
|
|
//后面一节课程
|
|
|
CourseSchedule backCourseSchedule = allCourseSchedules.get(i);
|
|
|
+ if(!checkExistCourseSchedule
|
|
|
+ &&existCourseScheduleIds.contains(preCourseSchedule.getId())
|
|
|
+ &&existCourseScheduleIds.contains(backCourseSchedule.getId())){
|
|
|
+ continue;
|
|
|
+ }
|
|
|
//判断前后两节课是否存在冲突
|
|
|
if(backCourseSchedule.getStartClassTime().before(preCourseSchedule.getEndClassTime())){
|
|
|
//提示信息
|
|
|
StringBuffer errInfo = new StringBuffer("在");
|
|
|
- errInfo.append(DateUtil.dateToString(preCourseSchedule.getStartClassTime(),DateUtil.EXPANDED_DATE_TIME_FORMAT));
|
|
|
+ errInfo.append(DateUtil.dateToString(preCourseSchedule.getStartClassTime(),"yyyy-MM-dd HH:mm"));
|
|
|
errInfo.append("至");
|
|
|
- errInfo.append(DateUtil.dateToString(backCourseSchedule.getEndClassTime(),DateUtil.EXPANDED_DATE_TIME_FORMAT));
|
|
|
- errInfo.append("时间段内");
|
|
|
+ errInfo.append(DateUtil.dateToString(backCourseSchedule.getEndClassTime(),"yyyy-MM-dd HH:mm"));
|
|
|
+ errInfo.append("的时间段内");
|
|
|
//如果存在时间重叠,则需要判断前后两节课的教师和学生是否存在冲突
|
|
|
- //教师冲突检测
|
|
|
+ //主教冲突检测
|
|
|
if(Objects.nonNull(preCourseSchedule.getActualTeacherId())
|
|
|
&&preCourseSchedule.getActualTeacherId().equals(backCourseSchedule.getActualTeacherId())){
|
|
|
- errInfo.append("安排的教师有课程冲突");
|
|
|
+ errInfo.append("安排的主教有课程冲突");
|
|
|
throw new BizException(errInfo.toString());
|
|
|
}
|
|
|
+ //助教冲突检测
|
|
|
+ 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)){
|
|
|
+ errInfo.append("安排的助教存在冲突");
|
|
|
+ throw new BizException(errInfo.toString());
|
|
|
+ }
|
|
|
+ }
|
|
|
//学生冲突检测
|
|
|
if(preCourseSchedule.getClassGroupId().equals(backCourseSchedule.getClassGroupId())){
|
|
|
//如果班级相同,则学生肯定存在冲突
|
|
@@ -367,6 +424,7 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
|
|
|
errInfo.append("安排的课程存在学生冲突");
|
|
|
throw new BizException(errInfo.toString());
|
|
|
}
|
|
|
+ System.out.println(j==repeatTimes);
|
|
|
if(j==repeatTimes){
|
|
|
repeatTimes+=1;
|
|
|
}
|
|
@@ -457,7 +515,7 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
|
|
|
|
|
|
@Override
|
|
|
public void courseAdjust(List<CourseSchedule> newCourseSchedules) {
|
|
|
- checkNewCourseSchedules(newCourseSchedules);
|
|
|
+ checkNewCourseSchedules(newCourseSchedules,false);
|
|
|
classStartDateAdjust(newCourseSchedules);
|
|
|
}
|
|
|
|