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