|
@@ -13,9 +13,12 @@ import com.ym.mec.common.service.impl.BaseServiceImpl;
|
|
|
|
|
|
import com.ym.mec.common.utils.DateUtils;
|
|
|
import io.swagger.models.auth.In;
|
|
|
+import org.springframework.beans.BeanUtils;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
+import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
+import java.text.ParseException;
|
|
|
import java.text.SimpleDateFormat;
|
|
|
import java.util.*;
|
|
|
import java.util.stream.Collectors;
|
|
@@ -117,7 +120,6 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
|
|
|
for (Integer key:classGroupByID.keySet()){
|
|
|
Integer maxClassTime = null == maxClassTimes.get(key) ? 0 : maxClassTimes.get(key);
|
|
|
for(CourseSchedule courseSchedule:classGroupByID.get(key)){
|
|
|
- courseSchedule.setCurrentClassTimes(++maxClassTime);
|
|
|
courseSchedules.add(courseSchedule);
|
|
|
}
|
|
|
}
|
|
@@ -132,26 +134,118 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
|
|
|
return map;
|
|
|
}
|
|
|
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
@Override
|
|
|
- public int classStartDateAdjust(ClassDateAdjustDto classDateAdjustDto) {
|
|
|
+ public void classStartDateAdjust(ClassDateAdjustDto classDateAdjustDto) {
|
|
|
//单次调整课时
|
|
|
if(null==classDateAdjustDto.getAdjustStartTime()&&null==classDateAdjustDto.getAdjustEndTime()){
|
|
|
- if(courseScheduleDao.countTeacherCourseInOnDayRepeats(classDateAdjustDto)<=0){
|
|
|
+ ArrayList<Date> dates = new ArrayList<>();
|
|
|
+ dates.add(classDateAdjustDto.getClassDate());
|
|
|
+ List<CourseSchedule> coursesByDates = courseScheduleDao.findOverLapCoursesInDay(dates,classDateAdjustDto.getStartClassTime(),classDateAdjustDto.getEndClassTime());
|
|
|
+ //判断是否存在同时间上课的班级
|
|
|
+ if(null==coursesByDates||coursesByDates.size()<=0){
|
|
|
courseScheduleDao.update(classDateAdjustDto);
|
|
|
}else{
|
|
|
- //存在时间重叠,需要前端重新调整
|
|
|
- throw new BizException("所选教师在当天课程安排上存在重叠!");
|
|
|
+ coursesByDates.forEach(courseSchedule -> {
|
|
|
+ if(courseSchedule.getTeacherId().equals(classDateAdjustDto.getTeacherId())){
|
|
|
+ //存在时间重叠,需要前端重新调整
|
|
|
+ throw new BizException("所选教师在当天课程安排上存在重叠!");
|
|
|
+ }
|
|
|
+ });
|
|
|
+ List<Integer> repeatClassGroupIds = coursesByDates.stream().map(CourseSchedule::getClassGroupId).collect(Collectors.toList());
|
|
|
+ checkStudentIsRepeat(repeatClassGroupIds);
|
|
|
+ courseScheduleDao.update(classDateAdjustDto);
|
|
|
}
|
|
|
}else{
|
|
|
//根据时间段调整课时
|
|
|
List<Date> dates= DateUtils.getWeekDays(classDateAdjustDto.getAdjustStartTime(),classDateAdjustDto.getAdjustEndTime(),classDateAdjustDto.getWeekNum());
|
|
|
- List<CourseSchedule> teacherCoursesInDates = courseScheduleDao.findTeacherCoursesInDates(dates, classDateAdjustDto.getTeacherId());
|
|
|
- teacherCoursesInDates.forEach(courseSchedule -> {
|
|
|
-// if(courseSchedule.getStartClassTime()>classDateAdjustDto.getEndClassTime()
|
|
|
-// ||)
|
|
|
- });
|
|
|
+ List<CourseSchedule> coursesByDates = courseScheduleDao.findOverLapCoursesInDay(dates,classDateAdjustDto.getStartClassTime(),classDateAdjustDto.getEndClassTime());
|
|
|
+ //判断是否存在同时间上课的班级
|
|
|
+ if(null==coursesByDates||coursesByDates.size()<=0){
|
|
|
+ createNewCourseByAdjust(dates,classDateAdjustDto);
|
|
|
+ }else{
|
|
|
+ //判断教师是否在时间安排上存在冲突
|
|
|
+ SimpleDateFormat s1=new SimpleDateFormat("yyyy-MM-dd"),
|
|
|
+ s2=new SimpleDateFormat("HH:mm:ss"),
|
|
|
+ s3=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
|
|
+ List<CourseSchedule> teacherCoursesInDates = courseScheduleDao.findTeacherCoursesInDates(dates, classDateAdjustDto.getTeacherId());
|
|
|
+ teacherCoursesInDates.forEach(courseSchedule -> {
|
|
|
+ Date updateStartClassTime = null,updateEndClassTime=null;
|
|
|
+ try {
|
|
|
+ updateStartClassTime=s3.parse(s1.format(courseSchedule.getClassDate())+" "+s2.format(classDateAdjustDto.getStartClassTime()));
|
|
|
+ updateEndClassTime=s3.parse(s1.format(courseSchedule.getClassDate())+" "+s2.format(classDateAdjustDto.getEndClassTime()));
|
|
|
+ } catch (ParseException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ boolean isDuplication=(courseSchedule.getStartClassTime().after(updateStartClassTime)
|
|
|
+ &&courseSchedule.getStartClassTime().before(updateEndClassTime))
|
|
|
+ ||(updateStartClassTime.after(courseSchedule.getStartClassTime())
|
|
|
+ &&updateStartClassTime.before(courseSchedule.getEndClassTime()));
|
|
|
+ if(isDuplication){
|
|
|
+ throw new BizException("在所选时段内教师上课时间存在重复!");
|
|
|
+ }
|
|
|
+
|
|
|
+ });
|
|
|
+ //判断学生在时间安排上是否存在冲突
|
|
|
+ Map<Date, List<CourseSchedule>> collect = coursesByDates.stream().collect(Collectors.groupingBy(CourseSchedule::getClassDate));
|
|
|
+ for(Date keyDate:collect.keySet()){
|
|
|
+ List<Integer> repeatClassGroupIds = collect.get(keyDate).stream().map(CourseSchedule::getClassGroupId).collect(Collectors.toList());
|
|
|
+ checkStudentIsRepeat(repeatClassGroupIds);
|
|
|
+ }
|
|
|
+ createNewCourseByAdjust(dates,classDateAdjustDto);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ @Override
|
|
|
+ public void courseSwap(Long courseScheduleId1, Long courseScheduleId2) {
|
|
|
+ List<CourseSchedule> courseSchedules = courseScheduleDao.findCourseSchedulesByIds(new Long[]{courseScheduleId1, courseScheduleId2});
|
|
|
+ CourseSchedule temp=new CourseSchedule();
|
|
|
+ BeanUtils.copyProperties(courseSchedules.get(0),temp);
|
|
|
+ courseSchedules.get(0).setClassDate(courseSchedules.get(1).getClassDate());
|
|
|
+ courseSchedules.get(0).setStartClassTime(courseSchedules.get(1).getStartClassTime());
|
|
|
+ courseSchedules.get(0).setEndClassTime(courseSchedules.get(1).getEndClassTime());
|
|
|
+ courseSchedules.get(1).setClassDate(temp.getClassDate());
|
|
|
+ courseSchedules.get(1).setStartClassTime(temp.getStartClassTime());
|
|
|
+ courseSchedules.get(1).setEndClassTime(temp.getEndClassTime());
|
|
|
+ courseScheduleDao.update(courseSchedules.get(0));
|
|
|
+ courseScheduleDao.update(courseSchedules.get(1));
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @Author: Joburgess
|
|
|
+ * @Date: 2019/9/24
|
|
|
+ * 检测学生是否存在重复
|
|
|
+ */
|
|
|
+ private void checkStudentIsRepeat(List<Integer> studentIds){
|
|
|
+ Integer[] counts=courseScheduleDao.countStudentInClass(studentIds);
|
|
|
+ for (Integer i:counts){
|
|
|
+ if (i>ParamEnum.ONE.getCode()){
|
|
|
+ throw new BizException("所选课程安排日期有学生重复!");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @Author: Joburgess
|
|
|
+ * @Date: 2019/9/24
|
|
|
+ * 根据课时调整信息增加新课程
|
|
|
+ */
|
|
|
+ private void createNewCourseByAdjust(List<Date> dates,ClassDateAdjustDto classDateAdjustDto){
|
|
|
+ CourseSchedule schedule=courseScheduleDao.get(classDateAdjustDto.getId());
|
|
|
+ List<CourseSchedule> courseSchedules=new ArrayList<>();
|
|
|
+ courseScheduleDao.delete(classDateAdjustDto.getId());
|
|
|
+ for (Date date:dates){
|
|
|
+ CourseSchedule courseSchedule=new CourseSchedule();
|
|
|
+ BeanUtils.copyProperties(schedule,courseSchedule);
|
|
|
+ courseSchedule.setClassDate(date);
|
|
|
+ courseSchedule.setStartClassTime(classDateAdjustDto.getStartClassTime());
|
|
|
+ courseSchedule.setEndClassTime(classDateAdjustDto.getEndClassTime());
|
|
|
+ courseSchedule.setTeacherId(classDateAdjustDto.getTeacherId());
|
|
|
+ courseSchedules.add(courseSchedule);
|
|
|
}
|
|
|
- return 0;
|
|
|
+ courseScheduleDao.batchAddCourseSchedules(courseSchedules);
|
|
|
}
|
|
|
|
|
|
}
|