| 
					
				 | 
			
			
				@@ -13,8 +13,10 @@ 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.SimpleDateFormat; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import java.util.*; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -132,26 +134,104 @@ 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){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				courseScheduleDao.update(classDateAdjustDto); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			}else{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				//判断教师是否在时间安排上存在冲突 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				List<CourseSchedule> teacherCoursesInDates = courseScheduleDao.findTeacherCoursesInDates(dates, classDateAdjustDto.getTeacherId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				teacherCoursesInDates.forEach(courseSchedule -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					boolean isDuplication=(courseSchedule.getStartClassTime().after(classDateAdjustDto.getStartClassTime()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							&&courseSchedule.getStartClassTime().before(classDateAdjustDto.getEndClassTime())) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							||(classDateAdjustDto.getStartClassTime().after(courseSchedule.getStartClassTime()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							&&classDateAdjustDto.getStartClassTime().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){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		List<CourseSchedule> courseSchedules=new ArrayList<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		courseScheduleDao.delete(classDateAdjustDto.getId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		for (Date date:dates){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			CourseSchedule courseSchedule=new CourseSchedule(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			BeanUtils.copyProperties(classDateAdjustDto,courseSchedule); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			courseSchedule.setClassDate(date); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			courseSchedules.add(courseSchedule); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		return 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		courseScheduleDao.batchAddCourseSchedules(courseSchedules); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 |