瀏覽代碼

Merge remote-tracking branch 'origin/master'

Joburgess 4 年之前
父節點
當前提交
2d3a74d960

+ 11 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/MusicGroupPaymentCalenderCourseSettings.java

@@ -10,6 +10,9 @@ public class MusicGroupPaymentCalenderCourseSettings {
 
 	/**  */
 	private Integer id;
+
+	/**  */
+	private Integer musicGroupOrganizationCourseSettingsId;
 	
 	/**  */
 	private Long musicGroupPaymentCalenderId;
@@ -41,6 +44,14 @@ public class MusicGroupPaymentCalenderCourseSettings {
 	/**  */
 	private java.util.Date updateTime;
 
+	public Integer getMusicGroupOrganizationCourseSettingsId() {
+		return musicGroupOrganizationCourseSettingsId;
+	}
+
+	public void setMusicGroupOrganizationCourseSettingsId(Integer musicGroupOrganizationCourseSettingsId) {
+		this.musicGroupOrganizationCourseSettingsId = musicGroupOrganizationCourseSettingsId;
+	}
+
 	public void setStudentOptional(boolean studentOptional) {
 		isStudentOptional = studentOptional;
 	}

+ 2 - 1
mec-biz/src/main/java/com/ym/mec/biz/service/CourseScheduleService.java

@@ -310,9 +310,10 @@ public interface CourseScheduleService extends BaseService<Long, CourseSchedule>
 	 * @author Joburgess
 	 * @date 2019/10/31
 	 * @param courseSchedules: 课程列表
+	 * @param postponeFlag: 如果冲突是否顺延
 	 * @return void
 	 */
-	void checkNewCourseSchedules(List<CourseSchedule> courseSchedules,boolean checkExistCourseSchedule);
+	Boolean checkNewCourseSchedules(List<CourseSchedule> courseSchedules,boolean checkExistCourseSchedule,Boolean postponeFlag);
 
 	void checkNewCourseSchedulesWithoutMusicGroup(List<CourseSchedule> courseSchedules,boolean checkExistCourseSchedule);
 

+ 123 - 124
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupServiceImpl.java

@@ -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){

+ 34 - 18
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleServiceImpl.java

@@ -767,7 +767,7 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 		}
 
 		//检查冲突
-		checkNewCourseSchedules(courseScheduleList, false);
+		checkNewCourseSchedules(courseScheduleList, false,false);
 
 		if (courseScheduleTeacherSalaries.size() > 0) {
 			courseScheduleTeacherSalaryDao.batchInsert(courseScheduleTeacherSalaries);
@@ -903,7 +903,7 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
         if (Objects.isNull(courseSchedules) && courseSchedules.size() <= 0) {
             throw new BizException("参数错误!");
         }
-        checkNewCourseSchedules(courseSchedules, false);
+        checkNewCourseSchedules(courseSchedules, false,false);
         createCourseScheduleName(courseSchedules);
         courseScheduleDao.batchAddCourseSchedules(courseSchedules);
     }
@@ -917,7 +917,7 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
         if (Objects.isNull(musicGroupID)) {
             throw new BizException("请指定乐团!");
         }
-        checkNewCourseSchedules(courseSchedules, false);
+        checkNewCourseSchedules(courseSchedules, false,false);
         courseScheduleDao.deleteCourseSchedulesByMusicGroupID(musicGroupID, GroupType.MUSIC);
         courseScheduleDao.batchAddCourseSchedules(courseSchedules);
     }
@@ -1447,7 +1447,7 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 			}
 		}
 
-		checkNewCourseSchedules(existCourses, false);
+		checkNewCourseSchedules(existCourses, false,false);
 		courseScheduleDao.batchUpdate(existCourses);
 
 		studentAttendanceDao.deleteByCourseSchedules(courseIds);
@@ -1761,10 +1761,10 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 	}
 
 	@Override
-	@Transactional(rollbackFor = Exception.class,isolation = Isolation.READ_COMMITTED)
-    public void checkNewCourseSchedules(List<CourseSchedule> courseSchedules, boolean checkExistCourseSchedule) {
+	@Transactional(rollbackFor = Exception.class)
+    public Boolean checkNewCourseSchedules(List<CourseSchedule> courseSchedules, boolean checkExistCourseSchedule,Boolean postponeFlag) {
         if (CollectionUtils.isEmpty(courseSchedules)) {
-            return;
+            return false;
         }
         List<String> classDates = courseSchedules.stream().map(courseSchedule -> DateUtil.dateToString(courseSchedule.getClassDate(), "yyyy-MM-dd"))
                 .collect(Collectors.toList());
@@ -1866,8 +1866,11 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
                         //主教冲突检测
                         if (Objects.nonNull(preCourseSchedule.getActualTeacherId())
                                 && preCourseSchedule.getActualTeacherId().equals(backCourseSchedule.getActualTeacherId())) {
-
-                            throw new BizException(courseCheckInfo(preCourseSchedule, backCourseSchedule, existCourseScheduleIds, 1));
+							if(postponeFlag){
+								return false;
+							}else {
+								throw new BizException(courseCheckInfo(preCourseSchedule, backCourseSchedule, existCourseScheduleIds, 1));
+							}
                         }
 
 //                        if(Objects.isNull(preCourseSchedule.getId())){
@@ -1912,13 +1915,21 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
                                     .stream().filter(backTeachingTeacherIdList::contains)
                                     .collect(Collectors.toList());
                             if (!CollectionUtils.isEmpty(repeatIds)) {
-                                throw new BizException(courseCheckInfo(preCourseSchedule, backCourseSchedule, existCourseScheduleIds, 2));
+								if(postponeFlag){
+									return false;
+								}else {
+									throw new BizException(courseCheckInfo(preCourseSchedule, backCourseSchedule, existCourseScheduleIds, 2));
+								}
                             }
                         }
                         //学生冲突检测
                         if (preCourseSchedule.getClassGroupId().equals(backCourseSchedule.getClassGroupId())) {
                             //如果班级相同,则学生肯定存在冲突
-                            throw new BizException(courseCheckInfo(preCourseSchedule, backCourseSchedule, existCourseScheduleIds, 3));
+							if(postponeFlag){
+								return false;
+							}else {
+								throw new BizException(courseCheckInfo(preCourseSchedule, backCourseSchedule, existCourseScheduleIds, 3));
+							}
                         }
                         //如果班级不同,则需要检测两个班级是否存在重复的学生
                         List<ClassGroupStudentMapper> preClassGroupStudents = classGroupStudentsMap.get(preCourseSchedule.getClassGroupId());
@@ -1953,12 +1964,17 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
                                 .filter(backClassGroupStudentIds::contains)
                                 .collect(Collectors.toList());
                         if (!CollectionUtils.isEmpty(repeatStudentIds)) {
-                            throw new BizException(courseCheckInfo(preCourseSchedule, backCourseSchedule, existCourseScheduleIds, 3));
+							if(postponeFlag){
+								return false;
+							}else {
+								throw new BizException(courseCheckInfo(preCourseSchedule, backCourseSchedule, existCourseScheduleIds, 3));
+							}
                         }
                     }
                 }
             }
         }
+        return true;
     }
 
     @Override
@@ -2693,7 +2709,7 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
             }
             calendar.add(Calendar.DATE, 1);
         }
-        checkNewCourseSchedules(courseSchedules, false);
+        checkNewCourseSchedules(courseSchedules, false,false);
         //如果是陪练课,调整时间不允许超过有效期
         if(groupType == PRACTICE){
             for (CourseSchedule e:courseSchedules) {
@@ -2815,7 +2831,7 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
             }
             classGroupCourseSchedulesWithDate.get(i).setClassDate(calendar.getTime());
         }
-        checkNewCourseSchedules(classGroupCourseSchedulesWithDate,false);
+        checkNewCourseSchedules(classGroupCourseSchedulesWithDate,false,false);
         courseScheduleDao.batchUpdate(classGroupCourseSchedulesWithDate);
         //保存操作日志
 		saveModifyLog(modifyLogs,courseIds);
@@ -3096,7 +3112,7 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
         }
 
         //课程冲突检测
-        checkNewCourseSchedules(newCourseSchedules, false);
+        checkNewCourseSchedules(newCourseSchedules, false,false);
 
 		Map<Long, List<TeacherAttendance>> teacherAttendanceMap = new HashMap<Long, List<TeacherAttendance>>();
 		// 查询老师的考勤
@@ -4547,7 +4563,7 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 
         List<CourseSchedule> courseSchedules=new ArrayList<>();
         courseSchedules.add(oldCourseSchedule);
-        checkNewCourseSchedules(courseSchedules,false);
+        checkNewCourseSchedules(courseSchedules,false,false);
         if(oldCourseSchedule.getStatus() == CourseStatusEnum.NOT_START){
             teacherAttendanceDao.batchUpdateTeacher(courseSchedules.stream().map(e->e.getId()).collect(Collectors.toSet()),oldCourseSchedule.getActualTeacherId());
             //清空学生签到记录
@@ -4609,7 +4625,7 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
         List<CourseSchedule> courseSchedules = new ArrayList<>();
         courseSchedules.add(oldCourseSchedule);
         Set<Long> courseScheduleIds = courseSchedules.stream().map(e -> e.getId()).collect(Collectors.toSet());
-        checkNewCourseSchedules(courseSchedules,false);
+        checkNewCourseSchedules(courseSchedules,false,false);
 
         courseScheduleDao.update(oldCourseSchedule);
 
@@ -4718,7 +4734,7 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
             e.setUpdateTime(date);
             e.setActualTeacherId(teacherId);
         });
-        checkNewCourseSchedules(courseSchedules,false);
+        checkNewCourseSchedules(courseSchedules,false,false);
         courseScheduleDao.batchUpdate(courseSchedules);
         Set<Long> courseScheduleIds = courseSchedules.stream().map(e -> e.getId()).collect(Collectors.toSet());
 		if(practiceGroup.getType() != TRIAL){

+ 10 - 4
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleStudentPaymentServiceImpl.java

@@ -21,10 +21,12 @@ import com.ym.mec.common.redis.service.RedisCache;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
 import com.ym.mec.util.date.DateUtil;
 import com.ym.mec.util.collection.MapUtil;
+import org.apache.commons.beanutils.BeanUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Isolation;
+import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
 
@@ -314,6 +316,7 @@ public class CourseScheduleStudentPaymentServiceImpl extends BaseServiceImpl<Lon
 	}
 
 	@Override
+	@Transactional(rollbackFor = Exception.class)
 	public void createForMusicGroup(List<CourseSchedule> courseSchedules, List<Integer> studentIds,Integer musicGroupStudentClassAdjustId) {
 		//获取提交的合班申请
 		MusicGroupStudentClassAdjust classAdjust = musicGroupStudentClassAdjustDao.get(musicGroupStudentClassAdjustId);
@@ -334,8 +337,13 @@ public class CourseScheduleStudentPaymentServiceImpl extends BaseServiceImpl<Lon
 				if(studentPaymentIds != null && studentPaymentIds.size() > 0){
 					List<CourseScheduleStudentPayment> studentPayments = courseScheduleStudentPaymentDao.queryByIdsAndStudentId(studentPaymentIds,studentId,courseSchedule.getType().getCode());
 					if(studentPayments != null && studentPayments.size() > 0){
-						CourseScheduleStudentPayment studentPayment = studentPayments.get(0);
-						studentPaymentIds.remove(studentPayment.getCourseScheduleId());
+						CourseScheduleStudentPayment studentPayment = new CourseScheduleStudentPayment();
+						try {
+							BeanUtils.copyProperties(studentPayment, studentPayments.get(0));
+						} catch (Exception e) {
+							throw new BizException("克隆对象出错", e);
+						}
+						studentPaymentIds.remove(studentPayment.getId());
 						studentPayment.setCourseScheduleId(courseSchedule.getId());
 						studentPayment.setClassGroupId(courseSchedule.getClassGroupId());
 						studentPayment.setOpenPlayMidi(null);
@@ -381,10 +389,8 @@ public class CourseScheduleStudentPaymentServiceImpl extends BaseServiceImpl<Lon
 				for (MusicGroupPaymentStudentCourseDetail musicGroupPaymentStudentCourseDetail : musicGroupPaymentStudentCourseDetails) {
 					if(typeCourseDuration > musicGroupPaymentStudentCourseDetail.getTotalCourseMinutes()){
 						musicGroupPaymentStudentCourseDetail.setUsedCourseMinutes(musicGroupPaymentStudentCourseDetail.getTotalCourseMinutes());
-						typeCourseDuration = typeCourseDuration-musicGroupPaymentStudentCourseDetail.getTotalCourseMinutes();
 					}else{
 						musicGroupPaymentStudentCourseDetail.setUsedCourseMinutes(typeCourseDuration);
-						typeCourseDuration = 0;
 					}
 				}
 				musicGroupPaymentStudentCourseDetailDao.batchUpdate(musicGroupPaymentStudentCourseDetails);

+ 2 - 2
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CoursesGroupServiceImpl.java

@@ -208,7 +208,7 @@ public class CoursesGroupServiceImpl extends BaseServiceImpl<Long, CoursesGroup>
         }
 
         try {
-            courseScheduleService.checkNewCourseSchedules(newCourses, false);
+            courseScheduleService.checkNewCourseSchedules(newCourses, false,false);
         } catch (Exception e) {
             LOGGER.error("检查课程冲突出现异常",e);
             TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
@@ -723,7 +723,7 @@ public class CoursesGroupServiceImpl extends BaseServiceImpl<Long, CoursesGroup>
         courseScheduleStudentPaymentDao.batchInsert(courseScheduleStudentPayments);
 
         try {
-            courseScheduleService.checkNewCourseSchedules(groupNotStartCourses, false);
+            courseScheduleService.checkNewCourseSchedules(groupNotStartCourses, false,false);
         } catch (Exception e) {
             TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
             String errMessage;

+ 1 - 1
mec-biz/src/main/java/com/ym/mec/biz/service/impl/DemoGroupServiceImpl.java

@@ -232,7 +232,7 @@ public class DemoGroupServiceImpl extends BaseServiceImpl<Long, DemoGroup>  impl
 		courseScheduleByDemoGroup.setMusicGroupId(classGroup.getMusicGroupId());
 		List<CourseSchedule> courseSchedules=new ArrayList<>();
 		courseSchedules.add(courseScheduleByDemoGroup);
-		courseScheduleService.checkNewCourseSchedules(courseSchedules,false);
+		courseScheduleService.checkNewCourseSchedules(courseSchedules,false,false);
 		courseScheduleDao.insert(courseScheduleByDemoGroup);
 
 		CourseScheduleStudentPayment courseScheduleStudentPayment = new CourseScheduleStudentPayment();

+ 2 - 2
mec-biz/src/main/java/com/ym/mec/biz/service/impl/EduPracticeGroupServiceImpl.java

@@ -423,7 +423,7 @@ public class EduPracticeGroupServiceImpl implements EduPracticeGroupService{
         teacherAttendanceDao.batchInsert(teacherAttendances);
 
         try {
-            courseScheduleService.checkNewCourseSchedules(practiceCourses,false);
+            courseScheduleService.checkNewCourseSchedules(practiceCourses,false,false);
         } catch (Exception e) {
             TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
             String errMessage=new String();
@@ -1105,7 +1105,7 @@ public class EduPracticeGroupServiceImpl implements EduPracticeGroupService{
         teacherAttendanceDao.batchInsert(teacherAttendances);
 
         try {
-            courseScheduleService.checkNewCourseSchedules(practiceCourses,false);
+            courseScheduleService.checkNewCourseSchedules(practiceCourses,false,false);
         } catch (Exception e) {
             TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
             String errMessage;

+ 1 - 1
mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupPaymentCalenderServiceImpl.java

@@ -916,7 +916,7 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
 			List<CourseTimeDto> courseTimeDtos = new ArrayList<>();
 			courseTimeDtos.add(courseTimeDto);
 			classGroup4MixDto.setCourseTimeDtoList(courseTimeDtos);
-			classGroupService.classGroupAdjust(classGroup4MixDtos);
+			classGroupService.classGroupAdjust2(classGroup4MixDto);
 		}
 		musicGroupStudentClassAdjust.setCourseFlag(true);
 		//排课完成后删除所选课程

+ 1 - 1
mec-biz/src/main/java/com/ym/mec/biz/service/impl/OnlineMusicGroupServiceImpl.java

@@ -244,7 +244,7 @@ public class OnlineMusicGroupServiceImpl implements OnlineMusicGroupService {
         teacherAttendanceDao.batchInsert(teacherAttendances);
 
         try {
-            courseScheduleService.checkNewCourseSchedules(courses,false);
+            courseScheduleService.checkNewCourseSchedules(courses,false,false);
         } catch (Exception e) {
             TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
             String errMessage=new String();

+ 1 - 1
mec-biz/src/main/java/com/ym/mec/biz/service/impl/PracticeGroupServiceImpl.java

@@ -3044,7 +3044,7 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
         teacherAttendanceDao.batchInsert(teacherAttendances);
 
         try {
-            courseScheduleService.checkNewCourseSchedules(practiceCourses, false);
+            courseScheduleService.checkNewCourseSchedules(practiceCourses, false,false);
 //            courseScheduleService.checkNewCourseSchedulesWithoutMusicGroup(practiceCourses,false);
         } catch (Exception e) {
             TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();

+ 6 - 6
mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupServiceImpl.java

@@ -410,7 +410,7 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 			courseSchedule.setName(vipGroupApplyBaseInfoDto.getName());
 			courseSchedule.setOrganId(vipGroupApplyBaseInfoDto.getOrganId());
 		});
-		courseScheduleService.checkNewCourseSchedules(vipGroup.getCourseSchedules(),false);
+		courseScheduleService.checkNewCourseSchedules(vipGroup.getCourseSchedules(),false,false);
 		vipGroupApplyBaseInfoDto.setCourseSchedulesJson(JSON.toJSONString(vipGroup.getCourseSchedules()));
 		vipGroupDao.update(vipGroupApplyBaseInfoDto);
 
@@ -573,7 +573,7 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 		}
 
 		//检测课程信息是否存在冲突
-		courseScheduleService.checkNewCourseSchedules(courseSchedules,false);
+		courseScheduleService.checkNewCourseSchedules(courseSchedules,false,false);
 		//只需要更新的课程走课程调整流程
 		courseScheduleService.classStartDateAdjust(updateCourseSchedules);
 
@@ -1203,7 +1203,7 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 		}
 
 		List<CourseSchedule> courseSchedules = JSON.parseArray(vipGroup.getCourseSchedulesJson(),CourseSchedule.class);
-		courseScheduleService.checkNewCourseSchedules(courseSchedules,false);
+		courseScheduleService.checkNewCourseSchedules(courseSchedules,false,false);
 	}
 
 	@Override
@@ -1280,7 +1280,7 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 			studentDao.updateStudentServiceTag(classGroupStudent.getUserId(), null, YesOrNoEnum.YES.getCode());
 		}
 
-		courseScheduleService.checkNewCourseSchedules(courseSchedules, false);
+		courseScheduleService.checkNewCourseSchedules(courseSchedules, false,false);
 
 		try {
 			ImGroupMember[] imGroupMembers = imGroupMemberList.toArray(new ImGroupMember[imGroupMemberList.size()]);
@@ -1364,7 +1364,7 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 		}
 
 		List<CourseSchedule> courseSchedules = JSON.parseArray(vipGroup.getCourseSchedulesJson(),CourseSchedule.class);
-		courseScheduleService.checkNewCourseSchedules(courseSchedules,false);
+		courseScheduleService.checkNewCourseSchedules(courseSchedules,false,false);
 
 		StudentPaymentOrder studentPaymentOrder=new StudentPaymentOrder();
 		studentPaymentOrder.setUserId(user.getId());
@@ -2922,7 +2922,7 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 			classGroupStudentMapperDao.classGroupStudentsInsert(classGroupStudentMappers);
 		}
 
-		courseScheduleService.checkNewCourseSchedules(surplusCourses, false);
+		courseScheduleService.checkNewCourseSchedules(surplusCourses, false,false);
 
 		VipGroupStatusEnum vipGroupStatus = vipGroup.getStatus();
 

+ 2 - 1
mec-biz/src/main/resources/config/mybatis/MusicGroupPaymentCalenderCourseSettingsMapper.xml

@@ -9,6 +9,7 @@
 		id="MusicGroupPaymentCalenderCourseSettings">
 		<result column="id_" property="id" />
 		<result column="music_group_payment_calender_id_" property="musicGroupPaymentCalenderId" />
+		<result column="music_group_organization_course_settings_id_" property="musicGroupOrganizationCourseSettingsId" />
 		<result column="course_type_" property="courseType" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler" />
 		<result column="course_total_minuties_" property="courseTotalMinuties" />
 		<result column="unit_price_" property="unitPrice" />
@@ -152,7 +153,7 @@
 		WHERE mgpccs.music_group_payment_calender_id_ = #{calenderId}
 	</select>
 	<select id="queryCalenderCourseSettingsByBatchNo" resultMap="MusicGroupPaymentCalenderCourseSettings">
-		SELECT MAX(mgpccs.music_group_payment_calender_id_) music_group_payment_calender_id_,
+		SELECT MAX(mgpccs.music_group_payment_calender_id_) music_group_payment_calender_id_,MAX(mgpc.music_group_organization_course_settings_id_) music_group_organization_course_settings_id_,
 		mgpccs.course_type_,SUM(mgpccs.course_total_minuties_) course_total_minuties_,SUM(mgpccs.unit_price_) unit_price_,SUM(mgpccs.course_original_price_)course_original_price_,
 				SUM(mgpccs.course_current_price_)course_current_price_,MAX(mgpccs.is_student_optional_)is_student_optional_,MAX(mgpccs.name_)name_ FROM music_group_payment_calender_course_settings mgpccs
 		LEFT JOIN music_group_payment_calender mgpc ON mgpc.id_ = mgpccs.music_group_payment_calender_id_