|  | @@ -116,11 +116,16 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 | 
	
		
			
				|  |  |          if (Objects.isNull(currentCourseDetail)) {
 | 
	
		
			
				|  |  |              throw new BizException("课程不存在");
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  | -        YesOrNoEnum yesOrNoEnum = enableOnlyNormalAttendance(currentCourseDetail.getStartClassTime(),
 | 
	
		
			
				|  |  | -                user.getId().longValue(),
 | 
	
		
			
				|  |  | -                true,
 | 
	
		
			
				|  |  | -                currentCourseDetail.getSchoolId().intValue());
 | 
	
		
			
				|  |  | -        currentCourseDetail.setOnlyNormal(yesOrNoEnum);
 | 
	
		
			
				|  |  | +        if(Objects.nonNull(currentCourseDetail.getSchoolId())){
 | 
	
		
			
				|  |  | +            YesOrNoEnum yesOrNoEnum = enableOnlyNormalAttendance(currentCourseDetail.getStartClassTime(),
 | 
	
		
			
				|  |  | +                    user.getId().longValue(),
 | 
	
		
			
				|  |  | +                    true,
 | 
	
		
			
				|  |  | +                    currentCourseDetail.getSchoolId().intValue());
 | 
	
		
			
				|  |  | +            currentCourseDetail.setOnlyNormal(yesOrNoEnum);
 | 
	
		
			
				|  |  | +        }else{
 | 
	
		
			
				|  |  | +            currentCourseDetail.setOnlyNormal(YesOrNoEnum.NO);
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |          currentCourseDetail.setCurrentClassTimes(courseScheduleDao.countClassGroupOverCourseNum(currentCourseDetail.getClassId()));
 | 
	
		
			
				|  |  |          SysConfig sysConfig = sysConfigService.findByParamName(SysConfigService.ENABLE_STUDENT_ATTENDANCE_TIME_RANGE);
 | 
	
		
			
				|  |  |          currentCourseDetail.setEnableStudentAttendanceTimeRange(sysConfig.getParanValue(Integer.class));
 | 
	
	
		
			
				|  | @@ -143,7 +148,9 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 | 
	
		
			
				|  |  |          Integer classGroupId = null;
 | 
	
		
			
				|  |  |          if (!CollectionUtils.isEmpty(courseScheduleIds)) {
 | 
	
		
			
				|  |  |              CourseSchedule courseSchedule = courseScheduleDao.get(courseScheduleIds.get(0));
 | 
	
		
			
				|  |  | -            classGroupId = courseSchedule.getClassGroupId();
 | 
	
		
			
				|  |  | +            if(Objects.nonNull(courseSchedule)){
 | 
	
		
			
				|  |  | +                classGroupId = courseSchedule.getClassGroupId();
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |          List<Long> enableDeleteIds = courseScheduleDao.filterNotStartCourseIdsWithIds(courseScheduleIds);
 | 
	
		
			
				|  |  |          if (!CollectionUtils.isEmpty(enableDeleteIds)) {
 | 
	
	
		
			
				|  | @@ -212,13 +219,16 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 | 
	
		
			
				|  |  |      @Transactional(rollbackFor = Exception.class)
 | 
	
		
			
				|  |  |      public void createCourseSchedules(CreateCourseScheduleDto createCourseScheduleDto) {
 | 
	
		
			
				|  |  |          List<CourseSchedule> courseSchedules = createCourseScheduleDto.getCourseSchedules();
 | 
	
		
			
				|  |  | -        //添加课程计划
 | 
	
		
			
				|  |  | -        batchAddCourseSchedule(courseSchedules);
 | 
	
		
			
				|  |  | -        //更新课次
 | 
	
		
			
				|  |  | -        List<Integer> classGroupIds = courseSchedules.stream().map(CourseSchedule::getClassGroupId).collect(Collectors.toList());
 | 
	
		
			
				|  |  | -        classGroupService.batchUpdateClassCourseTimes(classGroupIds);
 | 
	
		
			
				|  |  | -        //创建学生单节课的缴费记录,乐团课的缴费为0
 | 
	
		
			
				|  |  | -        courseScheduleStudentPaymentService.createCourseScheduleStudentPaymentByCourseSchedules(courseSchedules);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        if(!CollectionUtils.isEmpty(courseSchedules)){
 | 
	
		
			
				|  |  | +            //添加课程计划
 | 
	
		
			
				|  |  | +            batchAddCourseSchedule(courseSchedules);
 | 
	
		
			
				|  |  | +            //更新课次
 | 
	
		
			
				|  |  | +            List<Integer> classGroupIds = courseSchedules.stream().map(CourseSchedule::getClassGroupId).collect(Collectors.toList());
 | 
	
		
			
				|  |  | +            classGroupService.batchUpdateClassCourseTimes(classGroupIds);
 | 
	
		
			
				|  |  | +            //创建学生单节课的缴费记录,乐团课的缴费为0
 | 
	
		
			
				|  |  | +            courseScheduleStudentPaymentService.createCourseScheduleStudentPaymentByCourseSchedules(courseSchedules);
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          MusicGroup musicGroup = musicGroupService.get(createCourseScheduleDto.getMusicGroupID());
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -993,9 +1003,14 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 | 
	
		
			
				|  |  |          Map<String, Integer> holidayDays = new HashMap<>();
 | 
	
		
			
				|  |  |          Map<Integer, Map<String, Integer>> holiday = new HashMap<>();
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        if (vipGroupCourseAdjustInfo.isHoliday()) {
 | 
	
		
			
				|  |  | -            holiday = jiaRiFeignService.query(calendar.get(Calendar.YEAR));
 | 
	
		
			
				|  |  | -            holidayDays = holiday.get(calendar.get(Calendar.YEAR));
 | 
	
		
			
				|  |  | +        try {
 | 
	
		
			
				|  |  | +            if (vipGroupCourseAdjustInfo.isHoliday()) {
 | 
	
		
			
				|  |  | +                holiday = jiaRiFeignService.query(calendar.get(Calendar.YEAR));
 | 
	
		
			
				|  |  | +                holidayDays = holiday.get(calendar.get(Calendar.YEAR));
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +        } catch (DecodeException e) {
 | 
	
		
			
				|  |  | +            LOGGER.error("节假日解析错误");
 | 
	
		
			
				|  |  | +            vipGroupCourseAdjustInfo.setHoliday(false);
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          while (true) {
 | 
	
	
		
			
				|  | @@ -1079,6 +1094,59 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      @Override
 | 
	
		
			
				|  |  |      @Transactional(rollbackFor = Exception.class)
 | 
	
		
			
				|  |  | +    public void coursePostpone(CoursePostponeDto coursePostPoneInfo) {
 | 
	
		
			
				|  |  | +        if(StringUtils.isBlank(coursePostPoneInfo.getClassGroupIds())){
 | 
	
		
			
				|  |  | +            throw new BizException("请指定班级");
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        if(Objects.isNull(coursePostPoneInfo.getPauseDate())){
 | 
	
		
			
				|  |  | +            throw new BizException("请指定课程暂停时间");
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        if(Objects.isNull(coursePostPoneInfo.getRecoveryDate())){
 | 
	
		
			
				|  |  | +            throw new BizException("请指定课程恢复时间");
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        //间隔天数
 | 
	
		
			
				|  |  | +        int betweenDays = DateUtil.daysBetween(coursePostPoneInfo.getPauseDate(), coursePostPoneInfo.getRecoveryDate());
 | 
	
		
			
				|  |  | +        List<CourseSchedule> classGroupCourseSchedulesWithDate = courseScheduleDao.findClassGroupCourseSchedulesWithDate(coursePostPoneInfo.getClassGroupIds(), coursePostPoneInfo.getPauseDate());
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        if(CollectionUtils.isEmpty(classGroupCourseSchedulesWithDate)){
 | 
	
		
			
				|  |  | +            throw new BizException("选择的班级上在指定日期之后不存在需要调整的课程");
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        Calendar calendar = Calendar.getInstance();
 | 
	
		
			
				|  |  | +        calendar.setTime(coursePostPoneInfo.getRecoveryDate());
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        Map<String, Integer> holidayDays = new HashMap<>();
 | 
	
		
			
				|  |  | +        Map<Integer, Map<String, Integer>> holiday = new HashMap<>();
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        classGroupCourseSchedulesWithDate.sort(Comparator.comparing(CourseSchedule::getStartClassTime));
 | 
	
		
			
				|  |  | +        for (int i=0;i<classGroupCourseSchedulesWithDate.size();i++) {
 | 
	
		
			
				|  |  | +            CourseSchedule courseSchedule=classGroupCourseSchedulesWithDate.get(i);
 | 
	
		
			
				|  |  | +            calendar.setTime(courseSchedule.getClassDate());
 | 
	
		
			
				|  |  | +            calendar.add(Calendar.DATE, betweenDays);
 | 
	
		
			
				|  |  | +            try {
 | 
	
		
			
				|  |  | +                if (coursePostPoneInfo.isSkipHoliday() && !holiday.containsKey(calendar.get(Calendar.YEAR))) {
 | 
	
		
			
				|  |  | +                    holiday = jiaRiFeignService.query(calendar.get(Calendar.YEAR));
 | 
	
		
			
				|  |  | +                    holidayDays = holiday.get(calendar.get(Calendar.YEAR));
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +            } catch (Exception e) {
 | 
	
		
			
				|  |  | +                LOGGER.error("节假日解析错误");
 | 
	
		
			
				|  |  | +                coursePostPoneInfo.setSkipHoliday(false);
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            if (coursePostPoneInfo.isSkipHoliday() && holidayDays.containsKey(DateUtil.format(calendar.getTime(), "MMdd"))) {
 | 
	
		
			
				|  |  | +                betweenDays=betweenDays+7;
 | 
	
		
			
				|  |  | +                calendar.add(Calendar.DATE, betweenDays);
 | 
	
		
			
				|  |  | +                i=i-1;
 | 
	
		
			
				|  |  | +                continue;
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +            classGroupCourseSchedulesWithDate.get(i).setClassDate(calendar.getTime());
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        checkNewCourseSchedules(classGroupCourseSchedulesWithDate,false);
 | 
	
		
			
				|  |  | +        courseScheduleDao.batchUpdate(classGroupCourseSchedulesWithDate);
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    @Override
 | 
	
		
			
				|  |  | +    @Transactional(rollbackFor = Exception.class)
 | 
	
		
			
				|  |  |      public void batchAppendVipGroupCourses(VipGroupCourseAdjustInfoDto vipGroupCourseAdjustInfo) {
 | 
	
		
			
				|  |  |          if (Objects.isNull(vipGroupCourseAdjustInfo.getVipGroupId())) {
 | 
	
		
			
				|  |  |              throw new BizException("请指定小课");
 | 
	
	
		
			
				|  | @@ -1122,7 +1190,7 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          Map<String, Integer> holidayDays = new HashMap<>();
 | 
	
		
			
				|  |  |          Map<Integer, Map<String, Integer>> holiday = new HashMap<>();
 | 
	
		
			
				|  |  | -        ;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |          try {
 | 
	
		
			
				|  |  |              if (vipGroupCourseAdjustInfo.isHoliday()) {
 | 
	
		
			
				|  |  |                  holiday = jiaRiFeignService.query(calendar.get(Calendar.YEAR));
 | 
	
	
		
			
				|  | @@ -1130,7 +1198,6 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |          } catch (DecodeException e) {
 | 
	
		
			
				|  |  |              LOGGER.error("节假日解析错误");
 | 
	
		
			
				|  |  | -        } finally {
 | 
	
		
			
				|  |  |              vipGroupCourseAdjustInfo.setHoliday(false);
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -1215,19 +1282,13 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 | 
	
		
			
				|  |  |              if (Objects.nonNull(isSettlement) && isSettlement > 0) {
 | 
	
		
			
				|  |  |                  throw new BizException("调整的课程中存在已结算的课程");
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  | -            CourseSchedule oldCourseSchedule = null;
 | 
	
		
			
				|  |  | +            List<CourseSchedule> oldCourseSchedules = oldCourseScheduleMap.get(newCourseSchedule.getId());
 | 
	
		
			
				|  |  | +            oldCourseSchedules.sort(Comparator.comparing(CourseSchedule::getStartClassTime).reversed());
 | 
	
		
			
				|  |  | +            CourseSchedule oldCourseSchedule = oldCourseSchedules.get(0);
 | 
	
		
			
				|  |  |              if (Objects.isNull(newCourseSchedule.getActualTeacherId())) {
 | 
	
		
			
				|  |  | -                List<CourseSchedule> oldCourseSchedules = oldCourseScheduleMap.get(newCourseSchedule.getId());
 | 
	
		
			
				|  |  | -                oldCourseSchedules.sort(Comparator.comparing(CourseSchedule::getStartClassTime).reversed());
 | 
	
		
			
				|  |  | -                oldCourseSchedule = oldCourseSchedules.get(0);
 | 
	
		
			
				|  |  |                  newCourseSchedule.setActualTeacherId(oldCourseSchedule.getActualTeacherId());
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |              if (Objects.isNull(newCourseSchedule.getSchoolId())) {
 | 
	
		
			
				|  |  | -                if (Objects.isNull(oldCourseSchedule)) {
 | 
	
		
			
				|  |  | -                    List<CourseSchedule> oldCourseSchedules = oldCourseScheduleMap.get(newCourseSchedule.getId());
 | 
	
		
			
				|  |  | -                    oldCourseSchedules.sort(Comparator.comparing(CourseSchedule::getStartClassTime).reversed());
 | 
	
		
			
				|  |  | -                    oldCourseSchedule = oldCourseSchedules.get(0);
 | 
	
		
			
				|  |  | -                }
 | 
	
		
			
				|  |  |                  newCourseSchedule.setSchoolId(oldCourseSchedule.getSchoolId());
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |              if (oldCourseSchedule.getType().equals(CourseSchedule.CourseScheduleType.VIP)) {
 | 
	
	
		
			
				|  | @@ -2029,10 +2090,15 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          Map<String, Integer> holidayDays = new HashMap<>();
 | 
	
		
			
				|  |  |          Map<Integer, Map<String, Integer>> holiday = new HashMap<>();
 | 
	
		
			
				|  |  | -        ;
 | 
	
		
			
				|  |  | -        if (courseGenerateInfo.isSkipHoliday()) {
 | 
	
		
			
				|  |  | -            holiday = jiaRiFeignService.query(calendar.get(Calendar.YEAR));
 | 
	
		
			
				|  |  | -            holidayDays = holiday.get(calendar.get(Calendar.YEAR));
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        try {
 | 
	
		
			
				|  |  | +            if (courseGenerateInfo.isSkipHoliday()) {
 | 
	
		
			
				|  |  | +                holiday = jiaRiFeignService.query(calendar.get(Calendar.YEAR));
 | 
	
		
			
				|  |  | +                holidayDays = holiday.get(calendar.get(Calendar.YEAR));
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +        } catch (DecodeException e) {
 | 
	
		
			
				|  |  | +            LOGGER.error("节假日解析错误");
 | 
	
		
			
				|  |  | +            courseGenerateInfo.setSkipHoliday(false);
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          List<CourseSchedule> courseSchedules = new ArrayList<>();
 |