Explorar o código

Merge remote-tracking branch 'origin/master'

Joburgess %!s(int64=4) %!d(string=hai) anos
pai
achega
77d97516dc

+ 88 - 17
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupServiceImpl.java

@@ -3,6 +3,8 @@ package com.ym.mec.biz.service.impl;
 import static com.ym.mec.biz.dal.entity.MusicGroupPaymentCalender.PaymentCalenderStatusEnum.AUDITING;
 import static com.ym.mec.biz.dal.entity.MusicGroupPaymentCalender.PaymentCalenderStatusEnum.NO;
 import static com.ym.mec.biz.dal.entity.MusicGroupPaymentCalender.PaymentType.SPAN_GROUP_CLASS_ADJUST;
+import static com.ym.mec.biz.dal.enums.ClassGroupTypeEnum.HIGH;
+import static com.ym.mec.biz.dal.enums.ClassGroupTypeEnum.HIGH_ONLINE;
 import static com.ym.mec.biz.dal.enums.GroupType.COMM;
 import static com.ym.mec.biz.dal.enums.GroupType.MUSIC;
 import static com.ym.mec.biz.dal.enums.GroupType.PRACTICE;
@@ -220,10 +222,10 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
         }
 
         //基础技能班和线上基础技能班,可分班原则为声部人数/6向上取整
-        if (classGroup.getType().equals(ClassGroupTypeEnum.HIGH_ONLINE) || classGroup.getType().equals(ClassGroupTypeEnum.HIGH)) {
+        if (classGroup.getType().equals(HIGH_ONLINE) || classGroup.getType().equals(HIGH)) {
             HighClassGroupNumDto highClassGroupNumDto = getSubjectMaxHighClassGroupNum(classGroup.getMusicGroupId(), classGroup.getType());
             if (highClassGroupNumDto.getNowHighClassGroupNum() >= highClassGroupNumDto.getMaxHighClassGroupNum()) {
-                String errMsg = classGroup.getType().equals(ClassGroupTypeEnum.HIGH_ONLINE) ? "线上基础技能班" : "基础技能班";
+                String errMsg = classGroup.getType().equals(HIGH_ONLINE) ? "线上基础技能班" : "基础技能班";
                 throw new BizException("此乐团," + errMsg + "数量不能大于" + highClassGroupNumDto.getMaxHighClassGroupNum());
             }
         }
@@ -471,7 +473,7 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
                 throw new BizException("班数不能大于" + highClassGroupNum);
             }
 
-            List<ClassGroup> classGroups = classGroupDao.findClassGroupByMusicGroupIdAndType(musicGroup.getId(), ClassGroupTypeEnum.HIGH);
+            List<ClassGroup> classGroups = classGroupDao.findClassGroupByMusicGroupIdAndType(musicGroup.getId(), HIGH);
             if (classGroups.size() > 0) {
                 List<Integer> classGroupIds = classGroups.stream().map(classGroup -> classGroup.getId()).collect(Collectors.toList());
 
@@ -515,7 +517,7 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
                 highClassGroup.setGroupType(MUSIC);
                 highClassGroup.setCreateTime(date);
                 highClassGroup.setUpdateTime(date);
-                highClassGroup.setType(ClassGroupTypeEnum.HIGH);
+                highClassGroup.setType(HIGH);
                 highClassGroup.setTotalClassTimes(highClassGroup.getCourseTimes());
                 highClassGroup.setCurrentClassTimes(0);
                 insert(highClassGroup);
@@ -736,7 +738,7 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
 
             Long studentNum = classGroupStudentNumMap.get(classGroupAndTeacher.getId());
             studentNum = Objects.isNull(studentNum) ? 0 : studentNum;
-            if (classGroupAndTeacher.getType().equals(ClassGroupTypeEnum.HIGH_ONLINE) && (studentNum < 3 || studentNum > 5)) {
+            if (classGroupAndTeacher.getType().equals(HIGH_ONLINE) && (studentNum < 3 || studentNum > 5)) {
                 String numWaring = studentNum < 3 ? "人数不能小于3," : "人数不能大于5,";
                 waringStr += classGroupAndTeacher.getName() + numWaring;
             }
@@ -1076,7 +1078,7 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
         if (courseScheduleIds.size() > 0) {
             hasTeacherSalaryCount = courseScheduleTeacherSalaryDao.getHasTeacherSalaryCount(courseScheduleIds);
         }
-        if ((classGroup.getType().equals(ClassGroupTypeEnum.HIGH_ONLINE) || classGroup.getType().equals(ClassGroupTypeEnum.HIGH)) && hasTeacherSalaryCount > 0) {
+        if ((classGroup.getType().equals(HIGH_ONLINE) || classGroup.getType().equals(HIGH)) && hasTeacherSalaryCount > 0) {
             Integer studentNum = classGroup.getStudentNum() + 1;
             List<CourseScheduleTeacherSalary> courseScheduleTeacherSalaryList = new ArrayList<>();
             courseScheduleTeacherSalaryDao.batchDeleteByCourseScheduleIds(courseScheduleIds);
@@ -1085,14 +1087,14 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
                     List<TeacherDefaultMusicGroupSalary> teacherSalaryList = teacherDefaultMusicGroupSalaryService.getTeacherSalaryByUserIdAndType(classGroupTeacher.getUserId(), null, null);
                     Map<CourseSchedule.CourseScheduleType, TeacherDefaultMusicGroupSalary> collect = teacherSalaryList.stream().collect(Collectors.toMap(TeacherDefaultMusicGroupSalary::getCourseScheduleType, teacherDefaultMusicGroupSalary -> teacherDefaultMusicGroupSalary));
                     TeacherDefaultMusicGroupSalary teacherDefaultMusicGroupSalary = collect.get(CourseSchedule.CourseScheduleType.HIGH_ONLINE);
-                    if (classGroup.getType().equals(ClassGroupTypeEnum.HIGH_ONLINE) && studentNum > 5) {
+                    if (classGroup.getType().equals(HIGH_ONLINE) && studentNum > 5) {
                         studentNum = 5;
                     }
 
                     BigDecimal salary = null;
-                    if(classGroup.getType().equals(ClassGroupTypeEnum.HIGH_ONLINE)){
+                    if(classGroup.getType().equals(HIGH_ONLINE)){
                         salary = JSON.parseObject(teacherDefaultMusicGroupSalary.getSalaryRuleJson()).getBigDecimal(studentNum + "");
-                    }else if(classGroup.getType().equals(ClassGroupTypeEnum.HIGH)){
+                    }else if(classGroup.getType().equals(HIGH)){
                         MusicGroup musicGroup = musicGroupDao.get(classGroup.getMusicGroupId());
                         TeacherDefaultMusicGroupSalary teacherDefaultMusicGroupSalaryHigh = collect.get(CourseSchedule.CourseScheduleType.HIGH);
                         if(Objects.isNull(teacherDefaultMusicGroupSalaryHigh)){
@@ -1233,7 +1235,7 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
 
             //4、调整未上课课酬
             List<ClassGroupTeacherMapper> classGroupTeachers = classGroupTeacherMapperService.getClassGroupTeachers(classGroup.getId());
-            if ((classGroup.getType().equals(ClassGroupTypeEnum.HIGH_ONLINE) || classGroup.getType().equals(ClassGroupTypeEnum.HIGH)) && courseScheduleList.size() > 0) {
+            if ((classGroup.getType().equals(HIGH_ONLINE) || classGroup.getType().equals(HIGH)) && courseScheduleList.size() > 0) {
                 Date nowDate = new Date();
                 List<CourseScheduleTeacherSalary> courseScheduleTeacherSalaryList = new ArrayList<>();
                 List<Long> courseScheduleIds = courseScheduleList.stream().map(CourseSchedule::getId).collect(Collectors.toList());
@@ -1248,14 +1250,14 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
                         TeacherDefaultMusicGroupSalary teacherDefaultMusicGroupSalary = collect.get(CourseSchedule.CourseScheduleType.HIGH_ONLINE);
 
                         int studentNum = classGroup.getStudentNum() + 1;
-                        if (classGroup.getType().equals(ClassGroupTypeEnum.HIGH_ONLINE) && studentNum > 5) {
+                        if (classGroup.getType().equals(HIGH_ONLINE) && studentNum > 5) {
                             studentNum = 5;
                         }
 
                         BigDecimal salary = null;
-                        if(classGroup.getType().equals(ClassGroupTypeEnum.HIGH_ONLINE)){
+                        if(classGroup.getType().equals(HIGH_ONLINE)){
                             salary = JSON.parseObject(teacherDefaultMusicGroupSalary.getSalaryRuleJson()).getBigDecimal(studentNum + "");
-                        }else if(classGroup.getType().equals(ClassGroupTypeEnum.HIGH)){
+                        }else if(classGroup.getType().equals(HIGH)){
                             MusicGroup musicGroup = musicGroupDao.get(classGroup.getMusicGroupId());
                             TeacherDefaultMusicGroupSalary teacherDefaultMusicGroupSalaryHigh = collect.get(CourseSchedule.CourseScheduleType.HIGH);
                             if(Objects.isNull(teacherDefaultMusicGroupSalaryHigh)){
@@ -1751,7 +1753,7 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
 
         List<Integer> subjectIdList = studentList.stream().map(student -> student.getActualSubjectId()).collect(Collectors.toList());
         TeachModeEnum teachMode = TeachModeEnum.OFFLINE;
-        if (classGroup4MixDtos.get(0).getType().equals(ClassGroupTypeEnum.HIGH_ONLINE)) {
+        if (classGroup4MixDtos.get(0).getType().equals(HIGH_ONLINE)) {
             subjectIdList.clear();
             subjectIdList.add(classGroup4MixDtos.get(0).getSubjectId());
             teachMode = TeachModeEnum.ONLINE;
@@ -1974,7 +1976,7 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
         Integer schoolId = musicGroup.getSchoolId();
 
         TeachModeEnum teachMode = TeachModeEnum.OFFLINE;
-        if (classGroup4MixDto.getType().equals(ClassGroupTypeEnum.HIGH_ONLINE)) {
+        if (classGroup4MixDto.getType().equals(HIGH_ONLINE)) {
             teachMode = TeachModeEnum.ONLINE;
         } else if (classGroup4MixDto.getType().equals(ClassGroupTypeEnum.MUSIC_NETWORK)) {
             teachMode = TeachModeEnum.ONLINE;
@@ -2083,7 +2085,7 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
         List<StudentRegistration> studentList = studentRegistrationService.findStudentListByUserIdList(musicGroupId, studentIdList);
 
         List<Integer> subjectIdList = studentList.stream().map(student -> student.getActualSubjectId()).collect(Collectors.toList());
-        if (classGroup4MixDto.getType().equals(ClassGroupTypeEnum.HIGH_ONLINE)) {
+        if (classGroup4MixDto.getType().equals(HIGH_ONLINE)) {
             subjectIdList.clear();
             subjectIdList.add(classGroup4MixDto.getSubjectId());
         }
@@ -2240,7 +2242,7 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
         }
 
         TeachModeEnum teachMode = TeachModeEnum.OFFLINE;
-        if (classGroup.getType().equals(ClassGroupTypeEnum.HIGH_ONLINE) || classGroup.getType().equals(ClassGroupTypeEnum.MUSIC_NETWORK)) {
+        if (classGroup.getType().equals(HIGH_ONLINE) || classGroup.getType().equals(ClassGroupTypeEnum.MUSIC_NETWORK)) {
             teachMode = TeachModeEnum.ONLINE;
         }
 
@@ -3881,5 +3883,74 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
                 courseScheduleTeacherSalaryDao.batchDeleteByCourseScheduleIds(delCourseIds);
             }
         }
+        //如果是基础技能班,重新计算老师课酬
+        if(classGroupIds.size() > 0){
+            //获取班级学员人数
+            List<Map<Integer, Integer>> classGroupStudentNumMaps = classGroupStudentMapperDao.countClassGroupsStudentNum(classGroupIds, ClassGroupStudentStatusEnum.NORMAL);
+            Map<Integer, Long> classGroupStudentNumMap = MapUtil.convertIntegerMap(classGroupStudentNumMaps);
+            List<ClassGroup> byClassGroupIds = classGroupDao.findByClassGroupIds(classGroupIds, null);
+            for (ClassGroup classGroup : byClassGroupIds) {
+                Long aLong = classGroupStudentNumMap.get(classGroup.getId());
+                classGroup.setStudentNum(aLong==null?0:aLong.intValue());
+                if(classGroup.getType() == HIGH_ONLINE || classGroup.getType() == HIGH){
+                    if(aLong != null && aLong > 0){
+                        List<CourseSchedule> courseScheduleList = courseScheduleService.findNoStartCoursesByClassGroupId(classGroup.getId());
+                        if(courseScheduleList.size() > 0){
+                            //调整未上课课酬
+                            List<ClassGroupTeacherMapper> classGroupTeachers = classGroupTeacherMapperService.getClassGroupTeachers(classGroup.getId());
+                            Date nowDate = new Date();
+                            List<CourseScheduleTeacherSalary> courseScheduleTeacherSalaryList = new ArrayList<>();
+                            List<Long> courseScheduleIds = courseScheduleList.stream().map(CourseSchedule::getId).collect(Collectors.toList());
+                            courseScheduleTeacherSalaryDao.batchDeleteByCourseScheduleIds(courseScheduleIds);
+                            for (CourseSchedule courseSchedule : courseScheduleList) {
+                                for (ClassGroupTeacherMapper classGroupTeacher : classGroupTeachers) {
+                                    List<TeacherDefaultMusicGroupSalary> teacherSalaryList = teacherDefaultMusicGroupSalaryService.getTeacherSalaryByUserIdAndType(classGroupTeacher.getUserId(), null, null);
+                                    if (teacherSalaryList == null || teacherSalaryList.size() == 0) {
+                                        throw new BizException("请设置老师线上网管课课酬");
+                                    }
+                                    Map<CourseSchedule.CourseScheduleType, TeacherDefaultMusicGroupSalary> collect = teacherSalaryList.stream().collect(Collectors.toMap(TeacherDefaultMusicGroupSalary::getCourseScheduleType, teacherDefaultMusicGroupSalary -> teacherDefaultMusicGroupSalary));
+                                    TeacherDefaultMusicGroupSalary teacherDefaultMusicGroupSalary = collect.get(CourseSchedule.CourseScheduleType.HIGH_ONLINE);
+
+                                    if (classGroup.getType().equals(HIGH_ONLINE) && aLong > 5l) {
+                                        aLong = 5l;
+                                    }
+                                    BigDecimal salary = null;
+                                    if(classGroup.getType().equals(HIGH_ONLINE)){
+                                        salary = JSON.parseObject(teacherDefaultMusicGroupSalary.getSalaryRuleJson()).getBigDecimal(aLong + "");
+                                    }else if(classGroup.getType().equals(HIGH)){
+                                        MusicGroup musicGroup = musicGroupDao.get(classGroup.getMusicGroupId());
+                                        TeacherDefaultMusicGroupSalary teacherDefaultMusicGroupSalaryHigh = collect.get(CourseSchedule.CourseScheduleType.HIGH);
+                                        if(Objects.isNull(teacherDefaultMusicGroupSalaryHigh)){
+                                            throw new BizException("请设置老师课酬");
+                                        }
+                                        salary = TeachTypeEnum.BISHOP.equals(classGroupTeacher.getTeacherRole()) ? teacherDefaultMusicGroupSalaryHigh.getMainTeacher30MinSalary() : teacherDefaultMusicGroupSalaryHigh.getAssistantTeacher30MinSalary();
+                                        if (musicGroup.getSettlementType().equals(SalarySettlementTypeEnum.GRADIENT_SALARY)) {
+                                            salary = TeachTypeEnum.BISHOP.equals(classGroupTeacher.getTeacherRole()) ? teacherDefaultMusicGroupSalaryHigh.getMainTeacher90MinSalary() : teacherDefaultMusicGroupSalaryHigh.getAssistantTeacher90MinSalary();
+                                        }
+                                        salary = salary.multiply(new BigDecimal(aLong));
+                                    }
+                                    if(Objects.isNull(salary)){
+                                        throw new BizException("请设置老师课酬");
+                                    }
+                                    CourseScheduleTeacherSalary courseScheduleTeacherSalary = new CourseScheduleTeacherSalary();
+                                    courseScheduleTeacherSalary.setCourseScheduleId(courseSchedule.getId());
+                                    courseScheduleTeacherSalary.setGroupType(courseSchedule.getGroupType());
+                                    courseScheduleTeacherSalary.setMusicGroupId(courseSchedule.getMusicGroupId());
+                                    courseScheduleTeacherSalary.setTeacherRole(classGroupTeacher.getTeacherRole());
+                                    courseScheduleTeacherSalary.setUserId(classGroupTeacher.getUserId());
+                                    courseScheduleTeacherSalary.setExpectSalary(salary);
+                                    courseScheduleTeacherSalary.setClassGroupId(classGroup.getId());
+                                    courseScheduleTeacherSalary.setCreateTime(nowDate);
+                                    courseScheduleTeacherSalary.setUpdateTime(nowDate);
+                                    courseScheduleTeacherSalaryList.add(courseScheduleTeacherSalary);
+                                }
+                            }
+                            courseScheduleTeacherSalaryService.batchInsert(courseScheduleTeacherSalaryList);
+                        }
+                    }
+                }
+            }
+            classGroupDao.batchUpdate(byClassGroupIds);
+        }
     }
 }