|  | @@ -573,7 +573,7 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
 | 
	
		
			
				|  |  |              batchAddImGroup(classGroupImGroupList);
 | 
	
		
			
				|  |  |              classGroupTeacherMapperService.classGroupTeachersInsert(classGroupTeacherMapperList);
 | 
	
		
			
				|  |  |              // 检测新排课冲突
 | 
	
		
			
				|  |  | -            courseScheduleService.checkNewCourseSchedules(courseScheduleList, false);
 | 
	
		
			
				|  |  | +            courseScheduleService.checkNewCourseSchedules(courseScheduleList, false,false);
 | 
	
		
			
				|  |  |              courseScheduleDao.batchAddCourseSchedules(courseScheduleList);
 | 
	
		
			
				|  |  |          } finally {
 | 
	
		
			
				|  |  |              redisCache.releaseLocked(key, value);
 | 
	
	
		
			
				|  | @@ -1676,16 +1676,6 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
 | 
	
		
			
				|  |  |          if (classGroup4MixDtos.get(0).getCourseTimes().compareTo(0) <= 0) {
 | 
	
		
			
				|  |  |              throw new BizException("排课次数必须大于0");
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  | -        //准备自动排课数据
 | 
	
		
			
				|  |  | -        List<ClassGroup4MixDto> classGroup4MixDtosBackup = Arrays.asList(new ClassGroup4MixDto[classGroup4MixDtos.size()]);
 | 
	
		
			
				|  |  | -        Integer musicGroupStudentClassAdjustId = classGroup4MixDtos.get(0).getMusicGroupStudentClassAdjustId();
 | 
	
		
			
				|  |  | -        if(StringUtils.isNotEmpty(classGroup4MixDtos.get(0).getClassCourseMinute())){
 | 
	
		
			
				|  |  | -            try {
 | 
	
		
			
				|  |  | -                Collections.copy(classGroup4MixDtosBackup,classGroup4MixDtos);
 | 
	
		
			
				|  |  | -            } catch (Exception e) {
 | 
	
		
			
				|  |  | -                throw new BizException("拷贝课程信息异常");
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          Date entryDate = DateUtil.stringToDate(sysConfigDao.findByParamName(SysConfigService.TEACHER_ENTRY_DATE).getParanValue(), "yyyy-MM-dd");
 | 
	
		
			
				|  |  |          Integer schoolId = musicGroup.getSchoolId();
 | 
	
	
		
			
				|  | @@ -1798,31 +1788,24 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
 | 
	
		
			
				|  |  |          DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
 | 
	
		
			
				|  |  |          String classCourseMinute = null;
 | 
	
		
			
				|  |  |          for (ClassGroup4MixDto classGroup4MixDto : classGroup4MixDtos) {
 | 
	
		
			
				|  |  | -            List<CourseSchedule> courseSchedules = new ArrayList<>();
 | 
	
		
			
				|  |  | -            courseSchedules.clear();
 | 
	
		
			
				|  |  |              if(classGroup4MixDto.getCourseTimeDtoList() == null || classGroup4MixDto.getCourseTimeDtoList().size() == 0){
 | 
	
		
			
				|  |  |                  break;
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |              //5、插入班级排课信息
 | 
	
		
			
				|  |  |              LocalDateTime now = LocalDate.parse(classGroup4MixDto.getStartDate(), DateTimeFormatter.ofPattern("yyyy-MM-dd")).atStartOfDay();
 | 
	
		
			
				|  |  | -            //是否是合班后的自动排课
 | 
	
		
			
				|  |  | -            classCourseMinute = classGroup4MixDto.getClassCourseMinute();
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |              long courseDuration = Duration.between(LocalDateTime.parse(classGroup4MixDto.getStartDate() + " " + classGroup4MixDto.getCourseTimeDtoList().get(0).getStartClassTime() + ":00", formatter),
 | 
	
		
			
				|  |  |                      LocalDateTime.parse(classGroup4MixDto.getStartDate() + " " + classGroup4MixDto.getCourseTimeDtoList().get(0).getEndClassTime() + ":00", formatter))
 | 
	
		
			
				|  |  |                      .toMinutes();
 | 
	
		
			
				|  |  | -            if(StringUtils.isNotEmpty(classCourseMinute)){
 | 
	
		
			
				|  |  | -                Map<String, Integer> classCourseMinuteMap = JSON.parseObject(classCourseMinute, Map.class);
 | 
	
		
			
				|  |  | -                classGroup4MixDto.setCourseTimes(classCourseMinuteMap.get(classGroup4MixDto.getCourseType().getCode())/(int)courseDuration);
 | 
	
		
			
				|  |  | -            }else {
 | 
	
		
			
				|  |  | -                if(!courseTypeMinutesMap.containsKey(classGroup4MixDto.getCourseType().getCode())){
 | 
	
		
			
				|  |  | -                    throw new BizException("{}课程类型暂无剩余课程时长", classGroup4MixDto.getCourseType().getMsg());
 | 
	
		
			
				|  |  | -                }
 | 
	
		
			
				|  |  | -                Integer totalMinutes = courseTypeMinutesMap.get(classGroup4MixDto.getCourseType().getCode());
 | 
	
		
			
				|  |  | -                classGroup4MixDto.setCourseTimes(totalMinutes/(int)courseDuration);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -                if(classGroup4MixDto.getCourseTimes()<=0){
 | 
	
		
			
				|  |  | -                    throw new BizException("{}课程类型剩余课程时长不足", classGroup4MixDto.getCourseType().getMsg());
 | 
	
		
			
				|  |  | -                }
 | 
	
		
			
				|  |  | +            if(!courseTypeMinutesMap.containsKey(classGroup4MixDto.getCourseType().getCode())){
 | 
	
		
			
				|  |  | +                throw new BizException("{}课程类型暂无剩余课程时长", classGroup4MixDto.getCourseType().getMsg());
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +            Integer totalMinutes = courseTypeMinutesMap.get(classGroup4MixDto.getCourseType().getCode());
 | 
	
		
			
				|  |  | +            classGroup4MixDto.setCourseTimes(totalMinutes/(int)courseDuration);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            if(classGroup4MixDto.getCourseTimes()<=0){
 | 
	
		
			
				|  |  | +                throw new BizException("{}课程类型剩余课程时长不足", classGroup4MixDto.getCourseType().getMsg());
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |              int times = 0;
 | 
	
	
		
			
				|  | @@ -1884,8 +1867,6 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
 | 
	
		
			
				|  |  |                      courseSchedule.setActualTeacherId(teacherId);
 | 
	
		
			
				|  |  |                      courseScheduleDao.insert(courseSchedule);
 | 
	
		
			
				|  |  |                      courseScheduleList.add(courseSchedule);
 | 
	
		
			
				|  |  | -                    courseSchedules.add(courseSchedule);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |                      times++;
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -1988,26 +1969,11 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
 | 
	
		
			
				|  |  |                  }
 | 
	
		
			
				|  |  |                  now = now.plusDays(1);
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  | -            //自动排课,校验冲突
 | 
	
		
			
				|  |  | -            if(courseSchedules.size() > 0 && StringUtils.isNotEmpty(classCourseMinute)){
 | 
	
		
			
				|  |  | -                try {
 | 
	
		
			
				|  |  | -                    courseScheduleService.checkNewCourseSchedules(courseSchedules, false);
 | 
	
		
			
				|  |  | -                }catch (BizException e){
 | 
	
		
			
				|  |  | -                    //如果出现冲突
 | 
	
		
			
				|  |  | -                    TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
 | 
	
		
			
				|  |  | -                    //排课开始时间加一周
 | 
	
		
			
				|  |  | -                    ClassGroup4MixDto group4MixDto = classGroup4MixDtosBackup.get(0);
 | 
	
		
			
				|  |  | -                    Date stringToDate = DateUtil.stringToDate(group4MixDto.getStartDate(), DateUtil.ISO_EXPANDED_DATE_FORMAT);
 | 
	
		
			
				|  |  | -                    group4MixDto.setStartDate(DateUtil.format(DateUtil.addDays(stringToDate, 7),DateUtil.ISO_EXPANDED_DATE_FORMAT));
 | 
	
		
			
				|  |  | -//                    再次尝试排课
 | 
	
		
			
				|  |  | -                    classGroupAdjust(classGroup4MixDtosBackup);
 | 
	
		
			
				|  |  | -                }
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        if(courseScheduleList.size() > 0 && StringUtils.isEmpty(classCourseMinute)){
 | 
	
		
			
				|  |  | +        if(courseScheduleList.size() > 0){
 | 
	
		
			
				|  |  |              //检测新排课冲突
 | 
	
		
			
				|  |  | -            courseScheduleService.checkNewCourseSchedules(courseScheduleList, false);
 | 
	
		
			
				|  |  | +            courseScheduleService.checkNewCourseSchedules(courseScheduleList, false,false);
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          //老师结算表
 | 
	
	
		
			
				|  | @@ -2016,49 +1982,23 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |          //学生结算表
 | 
	
		
			
				|  |  |          if (courseScheduleList.size() > 0) {
 | 
	
		
			
				|  |  | -            if(StringUtils.isEmpty(classCourseMinute)){
 | 
	
		
			
				|  |  | -                courseScheduleStudentPaymentService.createForMusicGroup(musicGroupId, courseScheduleList, studentIdList);
 | 
	
		
			
				|  |  | -            }else {
 | 
	
		
			
				|  |  | -                courseScheduleStudentPaymentService.createForMusicGroup(courseScheduleList, studentIdList,musicGroupStudentClassAdjustId);
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | +            courseScheduleStudentPaymentService.createForMusicGroup(musicGroupId, courseScheduleList, studentIdList);
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |          return classGroup;
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    @Override
 | 
	
		
			
				|  |  |      @Transactional(rollbackFor = Exception.class)
 | 
	
		
			
				|  |  | -    public ClassGroup classGroupAdjust2(ClassGroup4MixDto classGroup4MixDto){
 | 
	
		
			
				|  |  | +    public List<CourseSchedule> getCourseSchedules(ClassGroup4MixDto classGroup4MixDto){
 | 
	
		
			
				|  |  |          Date date = new Date();
 | 
	
		
			
				|  |  |          String musicGroupId = classGroup4MixDto.getMusicGroupId();
 | 
	
		
			
				|  |  |          MusicGroup musicGroup = musicGroupDao.get(musicGroupId);
 | 
	
		
			
				|  |  | -        if (musicGroup == null) {
 | 
	
		
			
				|  |  | -            throw new BizException("乐团不存在");
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | -        if (classGroup4MixDto.getCourseTimes().compareTo(0) <= 0) {
 | 
	
		
			
				|  |  | -            throw new BizException("排课次数必须大于0");
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  |          Integer schoolId = musicGroup.getSchoolId();
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        List<Integer> studentIdList = classGroup4MixDto.getStudents();
 | 
	
		
			
				|  |  | -        List<StudentRegistration> studentList = studentRegistrationService.findStudentListByUserIdList(musicGroupId, studentIdList);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        List<Integer> subjectIdList = studentList.stream().map(student -> student.getActualSubjectId()).collect(Collectors.toList());
 | 
	
		
			
				|  |  |          TeachModeEnum teachMode = TeachModeEnum.OFFLINE;
 | 
	
		
			
				|  |  |          if (classGroup4MixDto.getType().equals(ClassGroupTypeEnum.HIGH_ONLINE)) {
 | 
	
		
			
				|  |  | -            subjectIdList.clear();
 | 
	
		
			
				|  |  | -            subjectIdList.add(classGroup4MixDto.getSubjectId());
 | 
	
		
			
				|  |  |              teachMode = TeachModeEnum.ONLINE;
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        List<Subject> subjectList = subjectService.findBySubjectByIdList(subjectIdList);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        String subjectIds = subjectList.stream().map(subject -> subject.getId().toString()).collect(Collectors.joining(","));
 | 
	
		
			
				|  |  | -        String subjectNames = subjectList.stream().map(subject -> subject.getName()).collect(Collectors.joining("/"));
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        if(classGroup4MixDto.getType().equals(ClassGroupTypeEnum.MUSIC_NETWORK)){
 | 
	
		
			
				|  |  | +        }else if(classGroup4MixDto.getType().equals(ClassGroupTypeEnum.MUSIC_NETWORK)){
 | 
	
		
			
				|  |  |              teachMode = TeachModeEnum.ONLINE;
 | 
	
		
			
				|  |  | -            List<String> studentNames = studentDao.getStudentNames(studentIdList);
 | 
	
		
			
				|  |  | -            classGroup4MixDto.setClassGroupName(subjectNames + "•" + StringUtils.join(studentNames, ","));
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          if (classGroup4MixDto.getType() == null) {
 | 
	
	
		
			
				|  | @@ -2067,11 +2007,6 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          List<ClassGroupTeacherMapper> classGroupTeacherMapperList = classGroup4MixDto.getClassGroupTeacherMapperList();
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        Set<Integer> noRepeatTeacherIds = classGroupTeacherMapperList.stream().map(ClassGroupTeacherMapper::getUserId).collect(Collectors.toSet());
 | 
	
		
			
				|  |  | -        if(noRepeatTeacherIds.size()!=classGroupTeacherMapperList.size()){
 | 
	
		
			
				|  |  | -            throw new BizException("主教与助教存在冲突");
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |          Integer teacherId = null;
 | 
	
		
			
				|  |  |          for (ClassGroupTeacherMapper groupTeacherMapper : classGroupTeacherMapperList) {
 | 
	
		
			
				|  |  |              if (groupTeacherMapper.getTeacherRole().equals(TeachTypeEnum.BISHOP)) {
 | 
	
	
		
			
				|  | @@ -2080,8 +2015,6 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          String classCourseMinute = classGroup4MixDto.getClassCourseMinute();
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        //5、插入班级排课信息
 | 
	
		
			
				|  |  |          LocalDateTime now = LocalDate.parse(classGroup4MixDto.getStartDate(), DateTimeFormatter.ofPattern("yyyy-MM-dd")).atStartOfDay();
 | 
	
		
			
				|  |  |          //获取默认的排课时长
 | 
	
		
			
				|  |  |          String courseDefaultMinutes = sysConfigDao.findConfigValue("music_course_default_minutes");
 | 
	
	
		
			
				|  | @@ -2091,6 +2024,14 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
 | 
	
		
			
				|  |  |          Map<String, Integer> classCourseMinuteMap = JSON.parseObject(classCourseMinute, Map.class);
 | 
	
		
			
				|  |  |          classGroup4MixDto.setCourseTimes(classCourseMinuteMap.get(classGroup4MixDto.getCourseType().getCode())/(int)classCourseDuration);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +        List<Integer> studentIdList = classGroup4MixDto.getStudents();
 | 
	
		
			
				|  |  | +        List<StudentRegistration> studentList = studentRegistrationService.findStudentListByUserIdList(musicGroupId, studentIdList);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        List<Integer> subjectIdList = studentList.stream().map(student -> student.getActualSubjectId()).collect(Collectors.toList());
 | 
	
		
			
				|  |  | +        List<Subject> subjectList = subjectService.findBySubjectByIdList(subjectIdList);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        String subjectNames = subjectList.stream().map(subject -> subject.getName()).collect(Collectors.joining("/"));
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |          Set<String> holidayDays = new HashSet<>();
 | 
	
		
			
				|  |  |          if (classGroup4MixDto.getHoliday()) {
 | 
	
		
			
				|  |  |              SysConfig holidaySetting = sysConfigService.findByParamName(SysConfigService.HOLIDAY_SETTING);
 | 
	
	
		
			
				|  | @@ -2098,7 +2039,7 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
 | 
	
		
			
				|  |  |                  holidayDays = new HashSet<>(JSON.parseArray(holidaySetting.getParanValue(), String.class));
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | +        ClassGroup classGroup = classGroup4MixDto.getClassGroup();
 | 
	
		
			
				|  |  |          List<CourseSchedule> courseScheduleList = new ArrayList<>();
 | 
	
		
			
				|  |  |          int times = 0;
 | 
	
		
			
				|  |  |          WhileNode:
 | 
	
	
		
			
				|  | @@ -2132,6 +2073,14 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
 | 
	
		
			
				|  |  |                  courseSchedule.setOrganId(musicGroup.getOrganId());
 | 
	
		
			
				|  |  |                  courseSchedule.setTeacherId(teacherId);
 | 
	
		
			
				|  |  |                  courseSchedule.setActualTeacherId(teacherId);
 | 
	
		
			
				|  |  | +                courseSchedule.setClassGroupId(classGroup.getId());
 | 
	
		
			
				|  |  | +                if (classGroup4MixDto.getCourseType().equals(CourseSchedule.CourseScheduleType.MIX)) {
 | 
	
		
			
				|  |  | +                    courseSchedule.setName(classGroup4MixDto.getCourseType().getMsg());
 | 
	
		
			
				|  |  | +                }else if(classGroup4MixDto.getCourseType().equals(CourseScheduleType.MUSIC_NETWORK)){
 | 
	
		
			
				|  |  | +                    courseSchedule.setName(classGroup.getName());
 | 
	
		
			
				|  |  | +                } else {
 | 
	
		
			
				|  |  | +                    courseSchedule.setName(subjectNames + "-" + classGroup4MixDto.getCourseType().getMsg());
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  |                  courseScheduleList.add(courseSchedule);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |                  times++;
 | 
	
	
		
			
				|  | @@ -2142,51 +2091,98 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |              now = now.plusDays(1);
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  | +        return courseScheduleList;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        ClassGroup classGroup = classGroup4MixDto.getClassGroup();
 | 
	
		
			
				|  |  | -                //计算每节课的课酬
 | 
	
		
			
				|  |  | -        List<CourseScheduleTeacherSalary> courseScheduleTeacherSalaryList = new ArrayList<>();
 | 
	
		
			
				|  |  | +    @Transactional(rollbackFor = Exception.class)
 | 
	
		
			
				|  |  | +    public ClassGroup createClassGroup(ClassGroup4MixDto classGroup4MixDto){
 | 
	
		
			
				|  |  | +        Date date = new Date();
 | 
	
		
			
				|  |  | +        String musicGroupId = classGroup4MixDto.getMusicGroupId();
 | 
	
		
			
				|  |  | +        List<Integer> studentIdList = classGroup4MixDto.getStudents();
 | 
	
		
			
				|  |  | +        List<StudentRegistration> studentList = studentRegistrationService.findStudentListByUserIdList(musicGroupId, studentIdList);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        if(classGroup == null){
 | 
	
		
			
				|  |  | +        List<Integer> subjectIdList = studentList.stream().map(student -> student.getActualSubjectId()).collect(Collectors.toList());
 | 
	
		
			
				|  |  | +        if (classGroup4MixDto.getType().equals(ClassGroupTypeEnum.HIGH_ONLINE)) {
 | 
	
		
			
				|  |  | +            subjectIdList.clear();
 | 
	
		
			
				|  |  | +            subjectIdList.add(classGroup4MixDto.getSubjectId());
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        List<Subject> subjectList = subjectService.findBySubjectByIdList(subjectIdList);
 | 
	
		
			
				|  |  | +        String subjectIds = subjectList.stream().map(subject -> subject.getId().toString()).collect(Collectors.joining(","));
 | 
	
		
			
				|  |  |              //1、新建班级
 | 
	
		
			
				|  |  | -            classGroup = new ClassGroup();
 | 
	
		
			
				|  |  | -            classGroup.setMusicGroupId(classGroup4MixDto.getMusicGroupId());
 | 
	
		
			
				|  |  | -            classGroup.setSubjectIdList(subjectIds);
 | 
	
		
			
				|  |  | -            classGroup.setName(classGroup4MixDto.getClassGroupName());
 | 
	
		
			
				|  |  | -            classGroup.setExpectStudentNum(studentList.size());
 | 
	
		
			
				|  |  | -            classGroup.setStudentNum(studentList.size());
 | 
	
		
			
				|  |  | -            classGroup.setType(classGroup4MixDto.getType());
 | 
	
		
			
				|  |  | -            classGroup.setDelFlag(0);
 | 
	
		
			
				|  |  | -            classGroup.setGroupType(MUSIC);
 | 
	
		
			
				|  |  | -            classGroup.setCurrentClassTimes(0);
 | 
	
		
			
				|  |  | -            classGroup.setTotalClassTimes(classGroup4MixDto.getCourseTimes());
 | 
	
		
			
				|  |  | -            classGroup.setCreateTime(date);
 | 
	
		
			
				|  |  | -            classGroup.setUpdateTime(date);
 | 
	
		
			
				|  |  | -            classGroupDao.insert(classGroup);
 | 
	
		
			
				|  |  | -            for (CourseSchedule courseSchedule : courseScheduleList) {
 | 
	
		
			
				|  |  | -                courseSchedule.setClassGroupId(classGroup.getId());
 | 
	
		
			
				|  |  | -                if (classGroup4MixDto.getCourseType().equals(CourseSchedule.CourseScheduleType.MIX)) {
 | 
	
		
			
				|  |  | -                    courseSchedule.setName(classGroup4MixDto.getCourseType().getMsg());
 | 
	
		
			
				|  |  | -                }else if(classGroup4MixDto.getCourseType().equals(CourseScheduleType.MUSIC_NETWORK)){
 | 
	
		
			
				|  |  | -                    courseSchedule.setName(classGroup.getName());
 | 
	
		
			
				|  |  | -                } else {
 | 
	
		
			
				|  |  | -                    courseSchedule.setName(subjectNames + "-" + classGroup4MixDto.getCourseType().getMsg());
 | 
	
		
			
				|  |  | -                }
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | +        ClassGroup classGroup = new ClassGroup();
 | 
	
		
			
				|  |  | +        classGroup.setMusicGroupId(classGroup4MixDto.getMusicGroupId());
 | 
	
		
			
				|  |  | +        classGroup.setSubjectIdList(subjectIds);
 | 
	
		
			
				|  |  | +        classGroup.setName(classGroup4MixDto.getClassGroupName());
 | 
	
		
			
				|  |  | +        classGroup.setExpectStudentNum(studentList.size());
 | 
	
		
			
				|  |  | +        classGroup.setStudentNum(studentList.size());
 | 
	
		
			
				|  |  | +        classGroup.setType(classGroup4MixDto.getType());
 | 
	
		
			
				|  |  | +        classGroup.setDelFlag(0);
 | 
	
		
			
				|  |  | +        classGroup.setGroupType(MUSIC);
 | 
	
		
			
				|  |  | +        classGroup.setCurrentClassTimes(0);
 | 
	
		
			
				|  |  | +        classGroup.setTotalClassTimes(classGroup4MixDto.getCourseTimes());
 | 
	
		
			
				|  |  | +        classGroup.setCreateTime(date);
 | 
	
		
			
				|  |  | +        classGroup.setUpdateTime(date);
 | 
	
		
			
				|  |  | +        classGroupDao.insert(classGroup);
 | 
	
		
			
				|  |  | +        return classGroup;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    @Transactional(rollbackFor = Exception.class)
 | 
	
		
			
				|  |  | +    public List<CourseSchedule> autoAdjust(ClassGroup4MixDto classGroup4MixDto,List<CourseSchedule> courseScheduleList){
 | 
	
		
			
				|  |  | +        Boolean checkFlag = courseScheduleService.checkNewCourseSchedules(courseScheduleList, false, true);
 | 
	
		
			
				|  |  | +        if(!checkFlag){
 | 
	
		
			
				|  |  | +            //排课开始时间加一周
 | 
	
		
			
				|  |  | +            Date stringToDate = DateUtil.stringToDate(classGroup4MixDto.getStartDate(), DateUtil.ISO_EXPANDED_DATE_FORMAT);
 | 
	
		
			
				|  |  | +            classGroup4MixDto.setStartDate(DateUtil.format(DateUtil.addDays(stringToDate, 7),DateUtil.ISO_EXPANDED_DATE_FORMAT));
 | 
	
		
			
				|  |  | +            //再次尝试排课
 | 
	
		
			
				|  |  | +            courseScheduleList = getCourseSchedules(classGroup4MixDto);
 | 
	
		
			
				|  |  | +            autoAdjust(classGroup4MixDto,courseScheduleList);
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        return courseScheduleList;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    @Override
 | 
	
		
			
				|  |  | +    @Transactional(rollbackFor = Exception.class)
 | 
	
		
			
				|  |  | +    public ClassGroup classGroupAdjust2(ClassGroup4MixDto classGroup4MixDto){
 | 
	
		
			
				|  |  | +        Date date = new Date();
 | 
	
		
			
				|  |  | +        String musicGroupId = classGroup4MixDto.getMusicGroupId();
 | 
	
		
			
				|  |  | +        MusicGroup musicGroup = musicGroupDao.get(musicGroupId);
 | 
	
		
			
				|  |  | +        if (musicGroup == null) {
 | 
	
		
			
				|  |  | +            throw new BizException("乐团不存在");
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        if (classGroup4MixDto.getCourseTimes().compareTo(0) <= 0) {
 | 
	
		
			
				|  |  | +            throw new BizException("排课次数必须大于0");
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        List<Integer> studentIdList = classGroup4MixDto.getStudents();
 | 
	
		
			
				|  |  | +        List<StudentRegistration> studentList = studentRegistrationService.findStudentListByUserIdList(musicGroupId, studentIdList);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        if (classGroup4MixDto.getType() == null) {
 | 
	
		
			
				|  |  | +            classGroup4MixDto.setType(ClassGroupTypeEnum.NORMAL);
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +        List<ClassGroupTeacherMapper> classGroupTeacherMapperList = classGroup4MixDto.getClassGroupTeacherMapperList();
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        Set<Integer> noRepeatTeacherIds = classGroupTeacherMapperList.stream().map(ClassGroupTeacherMapper::getUserId).collect(Collectors.toSet());
 | 
	
		
			
				|  |  | +        if(noRepeatTeacherIds.size()!=classGroupTeacherMapperList.size()){
 | 
	
		
			
				|  |  | +            throw new BizException("主教与助教存在冲突");
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        //获取默认的排课时长
 | 
	
		
			
				|  |  | +        String courseDefaultMinutes = sysConfigDao.findConfigValue("music_course_default_minutes");
 | 
	
		
			
				|  |  | +        JSONObject jsonObject = JSON.parseObject(courseDefaultMinutes);
 | 
	
		
			
				|  |  | +        long classCourseDuration = Integer.parseInt(jsonObject.get(classGroup4MixDto.getCourseType().getCode()).toString());
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        //建班
 | 
	
		
			
				|  |  | +        ClassGroup classGroup = createClassGroup(classGroup4MixDto);
 | 
	
		
			
				|  |  | +        //排课
 | 
	
		
			
				|  |  | +        classGroup4MixDto.setClassGroup(classGroup);
 | 
	
		
			
				|  |  | +        List<CourseSchedule> courseScheduleList = getCourseSchedules(classGroup4MixDto);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |          //自动排课,校验冲突
 | 
	
		
			
				|  |  |          if(courseScheduleList.size() > 0){
 | 
	
		
			
				|  |  | -            try {
 | 
	
		
			
				|  |  | -                courseScheduleService.checkNewCourseSchedules(courseScheduleList, false);
 | 
	
		
			
				|  |  | -            }catch (BizException e){
 | 
	
		
			
				|  |  | -                classGroup4MixDto.setClassGroup(classGroup);
 | 
	
		
			
				|  |  | -                //排课开始时间加一周
 | 
	
		
			
				|  |  | -                Date stringToDate = DateUtil.stringToDate(classGroup4MixDto.getStartDate(), DateUtil.ISO_EXPANDED_DATE_FORMAT);
 | 
	
		
			
				|  |  | -                classGroup4MixDto.setStartDate(DateUtil.format(DateUtil.addDays(stringToDate, 7),DateUtil.ISO_EXPANDED_DATE_FORMAT));
 | 
	
		
			
				|  |  | -//                    再次尝试排课
 | 
	
		
			
				|  |  | -                classGroupAdjust2(classGroup4MixDto);
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | +            //冲突校验
 | 
	
		
			
				|  |  | +            courseScheduleList = autoAdjust(classGroup4MixDto,courseScheduleList);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |              //2、将学生加入新班级(学生注册表,关联表
 | 
	
		
			
				|  |  |              List<ClassGroupStudentMapper> classGroupStudentMapperList = new ArrayList<>();
 | 
	
	
		
			
				|  | @@ -2233,6 +2229,9 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
 | 
	
		
			
				|  |  |              courseScheduleDao.batchAddCourseSchedules(courseScheduleList);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |              Date entryDate = DateUtil.stringToDate(sysConfigDao.findByParamName(SysConfigService.TEACHER_ENTRY_DATE).getParanValue(), "yyyy-MM-dd");
 | 
	
		
			
				|  |  | +            //计算每节课的课酬
 | 
	
		
			
				|  |  | +            List<CourseScheduleTeacherSalary> courseScheduleTeacherSalaryList = new ArrayList<>();
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |              for (CourseSchedule courseSchedule : courseScheduleList) {
 | 
	
		
			
				|  |  |                  //默认课程时长
 | 
	
		
			
				|  |  |                  for (ClassGroupTeacherMapper classGroupTeacherMapper : classGroupTeacherMapperList) {
 | 
	
	
		
			
				|  | @@ -2647,7 +2646,7 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
 | 
	
		
			
				|  |  |  //        if (classGroup.getType().equals(ClassGroupTypeEnum.SNAP)) {
 | 
	
		
			
				|  |  |  //            courseScheduleService.checkSnapCourseShchedules(courseScheduleList);
 | 
	
		
			
				|  |  |  //        } else {
 | 
	
		
			
				|  |  | -        courseScheduleService.checkNewCourseSchedules(courseScheduleList, false);
 | 
	
		
			
				|  |  | +        courseScheduleService.checkNewCourseSchedules(courseScheduleList, false,false);
 | 
	
		
			
				|  |  |  //        }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          //老师结算表
 | 
	
	
		
			
				|  | @@ -2940,7 +2939,7 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  //        courseScheduleService.checkSnapCourseShchedules(courseScheduleList);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        courseScheduleService.checkNewCourseSchedules(courseScheduleList, false);
 | 
	
		
			
				|  |  | +        courseScheduleService.checkNewCourseSchedules(courseScheduleList, false,false);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          //老师结算表
 | 
	
		
			
				|  |  |          if (courseScheduleTeacherSalaryList.size() > 0) {
 | 
	
	
		
			
				|  | @@ -3641,7 +3640,7 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      @Override
 | 
	
		
			
				|  |  | -    @Transactional(rollbackFor = Exception.class,propagation = Propagation.REQUIRED)
 | 
	
		
			
				|  |  | +    @Transactional(rollbackFor = Exception.class)
 | 
	
		
			
				|  |  |      public void mergeClassSplitClassAffirm(MergeClassSplitClassAffirmDto mergeClassSplitClassAffirmDto) throws Exception {
 | 
	
		
			
				|  |  |          List<Integer> classGroupIds = mergeClassSplitClassAffirmDto.getClassGroupIds();
 | 
	
		
			
				|  |  |          if(classGroupIds == null || classGroupIds.size() == 0){
 |