|  | @@ -10,21 +10,8 @@ import java.math.BigDecimal;
 | 
	
		
			
				|  |  |  import java.text.SimpleDateFormat;
 | 
	
		
			
				|  |  |  import java.time.LocalDate;
 | 
	
		
			
				|  |  |  import java.time.LocalDateTime;
 | 
	
		
			
				|  |  | -import java.util.ArrayList;
 | 
	
		
			
				|  |  | -import java.util.Arrays;
 | 
	
		
			
				|  |  | -import java.util.Calendar;
 | 
	
		
			
				|  |  | -import java.util.Collection;
 | 
	
		
			
				|  |  | -import java.util.Collections;
 | 
	
		
			
				|  |  | -import java.util.Comparator;
 | 
	
		
			
				|  |  | -import java.util.Date;
 | 
	
		
			
				|  |  | -import java.util.HashMap;
 | 
	
		
			
				|  |  | -import java.util.HashSet;
 | 
	
		
			
				|  |  | -import java.util.Iterator;
 | 
	
		
			
				|  |  | -import java.util.List;
 | 
	
		
			
				|  |  | -import java.util.Map;
 | 
	
		
			
				|  |  | -import java.util.Objects;
 | 
	
		
			
				|  |  | -import java.util.Set;
 | 
	
		
			
				|  |  | -import java.util.TreeSet;
 | 
	
		
			
				|  |  | +import java.time.LocalTime;
 | 
	
		
			
				|  |  | +import java.util.*;
 | 
	
		
			
				|  |  |  import java.util.stream.Collectors;
 | 
	
		
			
				|  |  |  import java.util.stream.Stream;
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -2832,10 +2819,15 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 | 
	
		
			
				|  |  |  		//未更新课程列表
 | 
	
		
			
				|  |  |  		List<CourseSchedule> oldCourses = courseScheduleDao.findByCourseScheduleIds(courseAdjustInfo.getCourseScheduleIds());
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +		//需要变更课酬的教师类型
 | 
	
		
			
				|  |  | +		Set<TeachTypeEnum> changeSalaryTeachTypes = new HashSet<>();
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  		if(courseAdjustInfo.getChangeMainTeacher()){
 | 
	
		
			
				|  |  | +			changeSalaryTeachTypes.add(TeachTypeEnum.BISHOP);
 | 
	
		
			
				|  |  |  			courseScheduleTeacherSalaryDao.deleteWithCourseAndTeachRole(courseAdjustInfo.getCourseScheduleIds(), TeachTypeEnum.BISHOP);
 | 
	
		
			
				|  |  |  		}
 | 
	
		
			
				|  |  | -		if(courseAdjustInfo.getChangeMainTeacher()){
 | 
	
		
			
				|  |  | +		if(courseAdjustInfo.getChangeTeachingTeacher()){
 | 
	
		
			
				|  |  | +			changeSalaryTeachTypes.add(TeachTypeEnum.TEACHING);
 | 
	
		
			
				|  |  |  			courseScheduleTeacherSalaryDao.deleteWithCourseAndTeachRole(courseAdjustInfo.getCourseScheduleIds(), TeachTypeEnum.TEACHING);
 | 
	
		
			
				|  |  |  		}
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -2848,8 +2840,12 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 | 
	
		
			
				|  |  |  			}
 | 
	
		
			
				|  |  |  		}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -		if(Objects.nonNull(courseAdjustInfo.getPauseDate())&&Objects.nonNull(courseAdjustInfo.getPauseDate())){
 | 
	
		
			
				|  |  | -			Set<String> holidayDays = new HashSet<>();
 | 
	
		
			
				|  |  | +		//上课日期变更
 | 
	
		
			
				|  |  | +		//间隔天数
 | 
	
		
			
				|  |  | +		int betweenDays = 0;
 | 
	
		
			
				|  |  | +		//节假日
 | 
	
		
			
				|  |  | +		Set<String> holidayDays = new HashSet<>();
 | 
	
		
			
				|  |  | +		if(Objects.nonNull(courseAdjustInfo.getPauseDate())&&Objects.nonNull(courseAdjustInfo.getRecoveryDate())){
 | 
	
		
			
				|  |  |  			if (courseAdjustInfo.getHoliday()) {
 | 
	
		
			
				|  |  |  				SysConfig holidaySetting = sysConfigService.findByParamName(SysConfigService.HOLIDAY_SETTING);
 | 
	
		
			
				|  |  |  				if(Objects.nonNull(holidaySetting)&&StringUtils.isNotBlank(holidaySetting.getParanValue())){
 | 
	
	
		
			
				|  | @@ -2857,9 +2853,97 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 | 
	
		
			
				|  |  |  				}
 | 
	
		
			
				|  |  |  			}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +			LocalDate pauseDate = LocalDate.parse(courseAdjustInfo.getPauseDate(), DateUtil.dateFormatter);
 | 
	
		
			
				|  |  | +			LocalDate recoveryDate = LocalDate.parse(courseAdjustInfo.getRecoveryDate(), DateUtil.dateFormatter);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +			betweenDays = (int) (recoveryDate.toEpochDay()-pauseDate.toEpochDay());
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +		//上课时间变更
 | 
	
		
			
				|  |  | +		LocalTime startTime = null;
 | 
	
		
			
				|  |  | +		if(Objects.nonNull(courseAdjustInfo.getStartTime())){
 | 
	
		
			
				|  |  | +			startTime = LocalTime.parse(courseAdjustInfo.getStartTime());
 | 
	
		
			
				|  |  |  		}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +		Date now = new Date();
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		List<CourseScheduleTeacherSalary> courseScheduleTeacherSalaries = new ArrayList<>();
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		oldCourses.sort(Comparator.comparing(CourseSchedule::getStartClassTime));
 | 
	
		
			
				|  |  | +		for (int i = 0; i < oldCourses.size(); i++) {
 | 
	
		
			
				|  |  | +			//上课日期变更
 | 
	
		
			
				|  |  | +			if(betweenDays>0){
 | 
	
		
			
				|  |  | +				LocalDate classDate = LocalDateTime.ofInstant(oldCourses.get(i).getClassDate().toInstant(), DateUtil.zoneId).toLocalDate();
 | 
	
		
			
				|  |  | +				classDate = classDate.plusDays(betweenDays);
 | 
	
		
			
				|  |  | +				if (courseAdjustInfo.getHoliday() && holidayDays.contains(classDate.toString())) {
 | 
	
		
			
				|  |  | +					betweenDays=betweenDays+7;
 | 
	
		
			
				|  |  | +					i=i-1;
 | 
	
		
			
				|  |  | +					continue;
 | 
	
		
			
				|  |  | +				}
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +			//上课时间变更
 | 
	
		
			
				|  |  | +			if(Objects.nonNull(startTime)){
 | 
	
		
			
				|  |  | +				//课程时长
 | 
	
		
			
				|  |  | +				int minutes = DateUtil.minutesBetween(oldCourses.get(i).getStartClassTime(), oldCourses.get(i).getEndClassTime());
 | 
	
		
			
				|  |  | +				LocalTime endTime = startTime.plusMinutes(minutes);
 | 
	
		
			
				|  |  | +				String courseStartTimeStr = DateUtil.dateToString(oldCourses.get(i).getClassDate(), "yyyy-MM-dd") + " " + startTime.toString();
 | 
	
		
			
				|  |  | +				String courseEndTimeStr = DateUtil.dateToString(oldCourses.get(i).getClassDate(), "yyyy-MM-dd") + " " + endTime.toString();
 | 
	
		
			
				|  |  | +				oldCourses.get(i).setStartClassTime(DateUtil.stringToDate(courseStartTimeStr));
 | 
	
		
			
				|  |  | +				oldCourses.get(i).setEndClassTime(DateUtil.stringToDate(courseEndTimeStr));
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +			if(Objects.nonNull(courseAdjustInfo.getTeachMode())&&!courseAdjustInfo.getTeachMode().equals(oldCourses.get(i).getTeachMode())){
 | 
	
		
			
				|  |  | +				oldCourses.get(i).setTeachMode(courseAdjustInfo.getTeachMode());
 | 
	
		
			
				|  |  | +				if(VIP.equals(oldCourses.get(i).getGroupType())){
 | 
	
		
			
				|  |  | +					changeSalaryTeachTypes.add(TeachTypeEnum.BISHOP);
 | 
	
		
			
				|  |  | +					courseScheduleTeacherSalaryDao.deleteWithCourseAndTeachRole(Arrays.asList(oldCourses.get(i).getId()), TeachTypeEnum.BISHOP);
 | 
	
		
			
				|  |  | +				}
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +			//主教变更
 | 
	
		
			
				|  |  | +			if(Objects.nonNull(mainTeacherId)){
 | 
	
		
			
				|  |  | +				oldCourses.get(i).setActualTeacherId(mainTeacherId);
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +			for (ClassGroupTeacherMapper classGroupTeacherMapper : courseAdjustInfo.getClassGroupTeacherMapperList()) {
 | 
	
		
			
				|  |  | +				if(!changeSalaryTeachTypes.contains(classGroupTeacherMapper.getTeacherRole())){
 | 
	
		
			
				|  |  | +					continue;
 | 
	
		
			
				|  |  | +				}
 | 
	
		
			
				|  |  | +				CourseScheduleTeacherSalary courseScheduleTeacherSalary = new CourseScheduleTeacherSalary();
 | 
	
		
			
				|  |  | +				courseScheduleTeacherSalary.setCourseScheduleId(oldCourses.get(i).getId());
 | 
	
		
			
				|  |  | +				courseScheduleTeacherSalary.setGroupType(oldCourses.get(i).getGroupType());
 | 
	
		
			
				|  |  | +				courseScheduleTeacherSalary.setMusicGroupId(oldCourses.get(i).getMusicGroupId());
 | 
	
		
			
				|  |  | +				courseScheduleTeacherSalary.setTeacherRole(classGroupTeacherMapper.getTeacherRole());
 | 
	
		
			
				|  |  | +				courseScheduleTeacherSalary.setUserId(classGroupTeacherMapper.getUserId());
 | 
	
		
			
				|  |  | +				courseScheduleTeacherSalary.setClassGroupId(oldCourses.get(i).getClassGroupId());
 | 
	
		
			
				|  |  | +				courseScheduleTeacherSalary.setCreateTime(now);
 | 
	
		
			
				|  |  | +				courseScheduleTeacherSalary.setUpdateTime(now);
 | 
	
		
			
				|  |  | +				courseScheduleTeacherSalaryService.createMusicGroupCourseTeacherSalary(null, oldCourses.get(i), courseScheduleTeacherSalary);
 | 
	
		
			
				|  |  | +				courseScheduleTeacherSalaries.add(courseScheduleTeacherSalary);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +				if (courseAdjustInfo.getConfirmGenerate() && !courseAdjustInfo.getAllowZeroSalary() && BigDecimal.ZERO.compareTo(courseScheduleTeacherSalary.getExpectSalary()) == 0) {
 | 
	
		
			
				|  |  | +					TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
 | 
	
		
			
				|  |  | +					return BaseController.failed(HttpStatus.MULTI_STATUS, "当前课程课酬预计为0,是否继续");
 | 
	
		
			
				|  |  | +				}
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		//老师结算表
 | 
	
		
			
				|  |  | +		if (courseScheduleTeacherSalaries.size() > 0) {
 | 
	
		
			
				|  |  | +			courseScheduleTeacherSalaryService.batchInsert(courseScheduleTeacherSalaries);
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		checkNewCourseSchedules(oldCourses, false, false);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		if (!courseAdjustInfo.getConfirmGenerate()) {
 | 
	
		
			
				|  |  | +			TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
 | 
	
		
			
				|  |  | +			oldCourses.sort(Comparator.comparing(CourseSchedule::getStartClassTime));
 | 
	
		
			
				|  |  | +			return BaseController.failed(HttpStatus.PARTIAL_CONTENT, oldCourses, "");
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		courseScheduleDao.batchUpdate(oldCourses);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  		return BaseController.succeed();
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  
 |