Преглед на файлове

Merge branch 'master' of http://git.dayaedu.com/yonge/mec

yonge преди 4 години
родител
ревизия
2db81f79bb
променени са 22 файла, в които са добавени 405 реда и са изтрити 349 реда
  1. 7 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/IndexBaseMonthDataDao.java
  2. 8 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/SellOrderDao.java
  3. 2 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/IndexErrorType.java
  4. 13 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/TeacherServeQueryInfo.java
  5. 7 0
      mec-biz/src/main/java/com/ym/mec/biz/service/ClassGroupService.java
  6. 6 0
      mec-biz/src/main/java/com/ym/mec/biz/service/OrganizationService.java
  7. 230 239
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupServiceImpl.java
  8. 24 60
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupStudentMapperServiceImpl.java
  9. 9 7
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ExportServiceImpl.java
  10. 4 2
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ImGroupMemberServiceImpl.java
  11. 10 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/IndexBaseMonthDataServiceImpl.java
  12. 3 14
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupPaymentCalenderServiceImpl.java
  13. 10 10
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupServiceImpl.java
  14. 14 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/OrganizationServiceImpl.java
  15. 11 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/TeacherDefaultMusicGroupSalaryServiceImpl.java
  16. 10 6
      mec-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml
  17. 7 6
      mec-biz/src/main/resources/config/mybatis/CourseScheduleTeacherSalaryMapper.xml
  18. 11 0
      mec-biz/src/main/resources/config/mybatis/IndexBaseMonthDataMapper.xml
  19. 5 0
      mec-biz/src/main/resources/config/mybatis/SellOrderMapper.xml
  20. 3 0
      mec-biz/src/main/resources/config/mybatis/StudentExtracurricularExercisesSituationMapper.xml
  21. 4 4
      mec-biz/src/main/resources/config/mybatis/courseScheduleStudentMusicScoreMapper.xml
  22. 7 0
      mec-web/src/main/java/com/ym/mec/web/controller/OrganizationController.java

+ 7 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/IndexBaseMonthDataDao.java

@@ -161,6 +161,13 @@ public interface IndexBaseMonthDataDao extends BaseDAO<Long, IndexBaseMonthData>
 
 
     /**
+     * 课程时间安排异常
+     * @param organIds
+     * @return
+     */
+    int getCourseTimeError(@Param("organIds") Set<Integer> organIds);
+
+    /**
      * 获取考勤异常编号
      * @param organIds
      * @return

+ 8 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/SellOrderDao.java

@@ -196,8 +196,16 @@ public interface SellOrderDao extends BaseDAO<Integer, SellOrder> {
 
     /**
      * 获取订单的各类型费用
+     *
      * @param orderId
      * @return
      */
     StudentPaymentOrderExportDto getFeeByType(@Param("orderId") Long orderId);
+
+    /**
+     * 获取打包辅件中乐保
+     * @param orderId
+     * @return
+     */
+    BigDecimal getChildRepair(@Param("orderId") Long orderId);
 }

+ 2 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/enums/IndexErrorType.java

@@ -21,6 +21,8 @@ public enum IndexErrorType implements BaseEnum<String, IndexErrorType> {
     COURSE_LEAVE_STUDENT_NUM("COURSE_LEAVE_STUDENT_NUM", "学员请假"),
 
     TEACHER_INFO("TEACHER_INFO", "日常行政"),
+
+    COURSE_TIME_ERROR("COURSE_TIME_ERROR", "课程时间安排异常"),
     TEACHER_LEAVE("TEACHER_LEAVE", "老师请假"),
     TEACHER_EXPECT_SALARY_BE_LOW("TEACHER_EXPECT_SALARY_BE_LOW", "预计课酬较低"),
     INSPECTION_ITEM("INSPECTION_ITEM", "乐团巡查任务未计划"),

+ 13 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/page/TeacherServeQueryInfo.java

@@ -1,6 +1,8 @@
 package com.ym.mec.biz.dal.page;
 
+import com.ym.mec.biz.dal.enums.JobNatureEnum;
 import com.ym.mec.common.page.QueryInfo;
+import io.swagger.annotations.ApiModelProperty;
 
 import java.util.Date;
 import java.util.List;
@@ -27,6 +29,17 @@ public class TeacherServeQueryInfo extends QueryInfo {
 
     private String sunday;
 
+    @ApiModelProperty(value = "工作性质(兼职 PART_JOB、全职FULL_JOB)", required = false)
+    private JobNatureEnum jobNature;
+
+    public JobNatureEnum getJobNature() {
+        return jobNature;
+    }
+
+    public void setJobNature(JobNatureEnum jobNature) {
+        this.jobNature = jobNature;
+    }
+
     public String getOrganId() {
         return organId;
     }

+ 7 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/ClassGroupService.java

@@ -531,6 +531,13 @@ public interface ClassGroupService extends BaseService<Integer, ClassGroup> {
     Map<String,Long> querySubCourseTime(Integer classGroupId);
 
     /**
+     * 重新计算课酬
+     * @param classGroupIds
+     * @return
+     */
+    void batchUpdateTeacherSalary(List<Integer> classGroupIds);
+
+    /**
      * 跨团班级合并提交
      * @param mergeClassSplitClassAffirmDto
      * @return

+ 6 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/OrganizationService.java

@@ -25,6 +25,12 @@ public interface OrganizationService extends BaseService<Integer, Organization>
     List<Organization> queryEmployeeOrgan() throws Exception;
 
     /**
+     * 获取员工坐在分部列表
+     * @return
+     */
+    List<Organization> queryEmployeeOrganByUser() throws Exception;
+
+    /**
      * 获取分部名称
      * @return
      */

+ 230 - 239
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupServiceImpl.java

@@ -274,14 +274,14 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
         // 加入IM群组
         if (userIdList.size() > 0) {
             addImGroup(classGroup, userIdList, teacherIdList);
-        }else {
+        } else {
             MusicGroup musicGroup = musicGroupDao.get(classGroup.getMusicGroupId());
-            Map<Integer,String> userRoleMap = new HashMap<>();
+            Map<Integer, String> userRoleMap = new HashMap<>();
             userRoleMap.put(musicGroup.getEducationalTeacherId(), "乐团主管");
             userRoleMap.put(musicGroup.getTeamTeacherId(), "运营主管");
             userRoleMap.put(musicGroup.getDirectorUserId(), "乐队指导");
-            if(teacherIdList != null && teacherIdList.size() > 0){
-                for(Integer teacherId : teacherIdList){
+            if (teacherIdList != null && teacherIdList.size() > 0) {
+                for (Integer teacherId : teacherIdList) {
                     userRoleMap.put(teacherId, "指导老师");
                 }
             }
@@ -806,11 +806,11 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
         List<CourseListDto> musicCourse = classGroupDao.queryStudentMusicGroupCourses(StringUtils.join(musicGroupIds, ","), userId);
 
         List<CourseSchedule> musicGroupCourses = new ArrayList<>();
-        if(!CollectionUtils.isEmpty(musicGroupIds)){
+        if (!CollectionUtils.isEmpty(musicGroupIds)) {
             musicGroupCourses = courseScheduleDao.findCourseByGroupIds(musicGroupIds, MUSIC);
         }
         Map<String, Map<TeachModeEnum, Long>> musicGroupTeachModeNumMap = new HashMap<>();
-        if(!CollectionUtils.isEmpty(musicGroupCourses)){
+        if (!CollectionUtils.isEmpty(musicGroupCourses)) {
             musicGroupTeachModeNumMap = musicGroupCourses.stream().collect(Collectors.groupingBy(CourseSchedule::getMusicGroupId, Collectors.groupingBy(CourseSchedule::getTeachMode, Collectors.counting())));
         }
 
@@ -824,8 +824,8 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
         Set<String> practiceGroupId = practiceCourse.stream().map(e -> e.getPracticeId()).collect(Collectors.toSet());
 
         Map<Long, PracticeGroupType> practiceGroupTypeMap = new HashMap<>();
-        if(!CollectionUtils.isEmpty(practiceGroupId)){
-            List<PracticeCourseDto> practiceGroups = practiceGroupDao.getPracticeGroupByIds(practiceGroupId.stream().map(id->Long.valueOf(id)).collect(Collectors.toList()));
+        if (!CollectionUtils.isEmpty(practiceGroupId)) {
+            List<PracticeCourseDto> practiceGroups = practiceGroupDao.getPracticeGroupByIds(practiceGroupId.stream().map(id -> Long.valueOf(id)).collect(Collectors.toList()));
             practiceGroupTypeMap = practiceGroups.stream().collect(Collectors.toMap(PracticeCourseDto::getId, PracticeCourseDto::getType));
         }
 
@@ -906,13 +906,13 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
                         e.setStudyReportUrl(baseUrl + "/#/reportDetailNew?id=" + courseScheduleEvaluate.getId() + "&classGroupId=" + e.getClassGroupId());
                     }
                 }
-                if(Objects.nonNull(e.getPracticeId())&&practiceGroupTypeMap.containsKey(Long.valueOf(e.getPracticeId()))){
-                    if(PracticeGroupType.CARE_PACKAGE.equals(practiceGroupTypeMap.get(Long.valueOf(e.getPracticeId()))))
+                if (Objects.nonNull(e.getPracticeId()) && practiceGroupTypeMap.containsKey(Long.valueOf(e.getPracticeId()))) {
+                    if (PracticeGroupType.CARE_PACKAGE.equals(practiceGroupTypeMap.get(Long.valueOf(e.getPracticeId()))))
                         e.setPracticeType(2);
-                    else if(PracticeGroupType.COME_ON_PACKAGE.equals(practiceGroupTypeMap.get(Long.valueOf(e.getPracticeId()))))
+                    else if (PracticeGroupType.COME_ON_PACKAGE.equals(practiceGroupTypeMap.get(Long.valueOf(e.getPracticeId()))))
                         e.setPracticeType(3);
                 }
-            }else if (ClassGroupTypeEnum.VIP == e.getType()) {
+            } else if (ClassGroupTypeEnum.VIP == e.getType()) {
                 e.setStudentNames(vipStuNames.get(e.getVipId()));
                 //1:线上;2:线下;3:线上+线下
                 if (e.getOnlineClassesNum() > 0 && e.getOffLineClassesNum() <= 0) {
@@ -924,15 +924,15 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
                 } else {
                     e.setClassMode(0);
                 }
-            }else{
+            } else {
                 Long onlineCourseNum = 0L;
                 Long offlineCourseNum = 0L;
-                if(musicGroupTeachModeNumMap.containsKey(e.getMusicId())){
+                if (musicGroupTeachModeNumMap.containsKey(e.getMusicId())) {
                     Map<TeachModeEnum, Long> teachModeCourseNumMap = musicGroupTeachModeNumMap.get(e.getMusicId());
-                    if(teachModeCourseNumMap.containsKey(TeachModeEnum.ONLINE)){
+                    if (teachModeCourseNumMap.containsKey(TeachModeEnum.ONLINE)) {
                         onlineCourseNum = teachModeCourseNumMap.get(TeachModeEnum.ONLINE);
                     }
-                    if(teachModeCourseNumMap.containsKey(TeachModeEnum.OFFLINE)){
+                    if (teachModeCourseNumMap.containsKey(TeachModeEnum.OFFLINE)) {
                         offlineCourseNum = teachModeCourseNumMap.get(TeachModeEnum.OFFLINE);
                     }
                 }
@@ -1119,24 +1119,24 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
                     }
 
                     BigDecimal salary = null;
-                    if(classGroup.getType().equals(HIGH_ONLINE)){
+                    if (classGroup.getType().equals(HIGH_ONLINE)) {
                         salary = JSON.parseObject(teacherDefaultMusicGroupSalary.getSalaryRuleJson()).getBigDecimal(studentNum + "");
-                    }else if(classGroup.getType().equals(HIGH)){
+                    } else if (classGroup.getType().equals(HIGH)) {
                         MusicGroup musicGroup = musicGroupDao.get(classGroup.getMusicGroupId());
                         TeacherDefaultMusicGroupSalary teacherDefaultMusicGroupSalaryHigh = collect.get(CourseSchedule.CourseScheduleType.HIGH);
-                        if(Objects.isNull(teacherDefaultMusicGroupSalaryHigh)){
+                        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();
                         }
-                        if(Objects.isNull(salary)){
+                        if (Objects.isNull(salary)) {
                             throw new BizException("请设置老师课酬");
                         }
                         salary = salary.multiply(new BigDecimal(studentNum));
                     }
-                    if(Objects.isNull(salary)){
+                    if (Objects.isNull(salary)) {
                         throw new BizException("请设置老师课酬");
                     }
 
@@ -1204,13 +1204,17 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
         List<Integer> classGroupIds = classGroupList.stream().map(ClassGroup::getId).collect(Collectors.toList());
         List<CourseScheduleStudentPayment> ccs = courseScheduleStudentPaymentDao.getWithClassGroupIds(classGroupIds, studentId);
         Set<Long> existCourseIds = new HashSet<>();
-        if(!CollectionUtils.isEmpty(ccs)){
-            existCourseIds = ccs.stream().map(CourseScheduleStudentPayment::getCourseScheduleId).collect(Collectors.toSet());;
+        if (!CollectionUtils.isEmpty(ccs)) {
+            existCourseIds = ccs.stream().map(CourseScheduleStudentPayment::getCourseScheduleId).collect(Collectors.toSet());
+            ;
         }
 
         Map<CourseScheduleType, BigDecimal> totalPriceMap = new HashMap<CourseSchedule.CourseScheduleType, BigDecimal>();
         Map<CourseScheduleType, BigDecimal> totalOrignPriceMap = new HashMap<CourseSchedule.CourseScheduleType, BigDecimal>();
 
+        List<CourseSchedule> allNotStartCourses = new ArrayList<>();
+        Map<Integer, List<ClassGroupTeacherMapper>> ctm = new HashMap<>();
+
         BigDecimal unitPrice = new BigDecimal(0);
         BigDecimal originUnitPrice = new BigDecimal(0);
         CourseScheduleType courseType = null;
@@ -1231,7 +1235,7 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
             // 3、学生加入级未开始课程
             List<CourseSchedule> courseScheduleList = courseScheduleService.findNoStartCoursesByClassGroupId(classGroup.getId());
             for (CourseSchedule courseSchedule : courseScheduleList) {
-                if(existCourseIds.contains(courseSchedule.getId())){
+                if (existCourseIds.contains(courseSchedule.getId())) {
                     throw new BizException("该学员已在此班级{}课程中", courseSchedule.getId());
                 }
 
@@ -1275,63 +1279,13 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
                 courseScheduleStudentPayments.add(courseScheduleStudentPayment);
             }
 
-            //4、调整未上课课酬
-            List<ClassGroupTeacherMapper> classGroupTeachers = classGroupTeacherMapperService.getClassGroupTeachers(classGroup.getId());
-            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());
-                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);
-
-                        int studentNum = classGroup.getStudentNum() + 1;
-                        if (classGroup.getType().equals(HIGH_ONLINE) && studentNum > 5) {
-                            studentNum = 5;
-                        }
-
-                        BigDecimal salary = null;
-                        if(classGroup.getType().equals(HIGH_ONLINE)){
-                            salary = JSON.parseObject(teacherDefaultMusicGroupSalary.getSalaryRuleJson()).getBigDecimal(studentNum + "");
-                        }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();
-                            }
-                            if(Objects.isNull(salary)){
-                                throw new BizException("请设置老师课酬");
-                            }
-                            salary = salary.multiply(new BigDecimal(studentNum));
-                        }
-                        if(Objects.isNull(salary)){
-                            throw new BizException("请设置老师课酬");
-                        }
+            if(!CollectionUtils.isEmpty(courseScheduleList)){
+                allNotStartCourses.addAll(courseScheduleList);
+            }
 
-                        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);
+            List<ClassGroupTeacherMapper> classGroupTeachers = classGroupTeacherMapperService.getClassGroupTeachers(classGroup.getId());
+            if(!CollectionUtils.isEmpty(classGroupTeachers)){
+                ctm.put(classGroup.getId(), classGroupTeachers);
             }
 
             // 5、加入班级群组
@@ -1357,7 +1311,35 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
                 }
             }
             courseScheduleStudentPaymentService.batchInsert(courseScheduleStudentPayments);
-            studentDao.updateStudentServiceTag(studentId,null,YesOrNoEnum.YES.getCode());
+            studentDao.updateStudentServiceTag(studentId, null, YesOrNoEnum.YES.getCode());
+        }
+
+        //4、调整未上课课酬
+        if (allNotStartCourses.size() > 0) {
+            Date nowDate = new Date();
+            List<CourseScheduleTeacherSalary> courseScheduleTeacherSalaryList = new ArrayList<>();
+            List<Long> courseScheduleIds = allNotStartCourses.stream().map(CourseSchedule::getId).collect(Collectors.toList());
+            courseScheduleTeacherSalaryDao.batchDeleteByCourseScheduleIds(courseScheduleIds);
+            for (CourseSchedule courseSchedule : allNotStartCourses) {
+                if(!ctm.containsKey(courseSchedule.getClassGroupId())){
+                    continue;
+                }
+                List<ClassGroupTeacherMapper> classGroupTeachers = ctm.get(courseSchedule.getClassGroupId());
+                for (ClassGroupTeacherMapper classGroupTeacher : classGroupTeachers) {
+                    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.setClassGroupId(courseSchedule.getClassGroupId());
+                    courseScheduleTeacherSalary.setCreateTime(nowDate);
+                    courseScheduleTeacherSalary.setUpdateTime(nowDate);
+                    courseScheduleTeacherSalaryService.createMusicGroupCourseTeacherSalary(null, courseSchedule, courseScheduleTeacherSalary);
+                    courseScheduleTeacherSalaryList.add(courseScheduleTeacherSalary);
+                }
+            }
+            courseScheduleTeacherSalaryService.batchInsert(courseScheduleTeacherSalaryList);
         }
 
         return true;
@@ -1455,7 +1437,7 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
     }
 
     @Override
-    public List<TeacherClassGroupDto> findTeacherClassGroups(String type,String status, String groupName) {
+    public List<TeacherClassGroupDto> findTeacherClassGroups(String type, String status, String groupName) {
         SysUser user = sysUserFeignService.queryUserInfo();
         if (Objects.isNull(user)) {
             throw new BizException("请登录");
@@ -1468,13 +1450,13 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
         List<TeacherClassGroupDto> teacherMusicClassGroup;
         switch (type) {
             case "VIP":
-                teacherMusicClassGroup = classGroupDao.findTeacherVipClassGroup(user.getId().longValue(),status,groupName);
+                teacherMusicClassGroup = classGroupDao.findTeacherVipClassGroup(user.getId().longValue(), status, groupName);
                 break;
             case "MUSIC_GROUP":
-                teacherMusicClassGroup = classGroupDao.findTeacherMusicClassGroup(user.getId().longValue(),groupName);
+                teacherMusicClassGroup = classGroupDao.findTeacherMusicClassGroup(user.getId().longValue(), groupName);
                 break;
             case "PRACTICE":
-                teacherMusicClassGroup = classGroupDao.findTeacherPracticeClassGroup(user.getId().longValue(),status, groupName);
+                teacherMusicClassGroup = classGroupDao.findTeacherPracticeClassGroup(user.getId().longValue(), status, groupName);
                 break;
             default:
                 throw new BizException("课程类型错误");
@@ -1727,7 +1709,7 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
                     .filter(studentAttendanceViewDto -> studentAttendanceViewDto.getGroupType().equals("MUSIC"))
                     .collect(Collectors.toList());
 
-            if (!CollectionUtils.isEmpty(tempIds)&&schedule.getGroupType() == MUSIC) {
+            if (!CollectionUtils.isEmpty(tempIds) && schedule.getGroupType() == MUSIC) {
                 List<Map<Integer, String>> studentSubjectNameMaps = subjectDao.findStudentSubjectNameMaps(tempIds);
                 Map<Integer, String> studentSubjectNameMap = MapUtil.convertIntegerMap(studentSubjectNameMaps);
                 List<Map<Integer, Long>> studentSubjectIdMaps = subjectDao.findStudentSubjectIdMaps(tempIds);
@@ -1736,12 +1718,12 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
                     studentAttendanceViewDto.setSubjectName(studentSubjectNameMap.get(studentAttendanceViewDto.getStudentId().intValue()));
                     studentAttendanceViewDto.setSubjectId(studentSubjectIdMap.get(studentAttendanceViewDto.getStudentId().intValue()));
                 });
-            }else if(schedule.getGroupType() != MUSIC){
+            } else if (schedule.getGroupType() != MUSIC) {
                 ClassGroup classGroup = classGroupDao.get(schedule.getClassGroupId());
                 Subject subject = subjectDao.get(Integer.valueOf(classGroup.getSubjectIdList()));
                 truantStudent.forEach(studentAttendanceViewDto -> {
                     studentAttendanceViewDto.setSubjectName(subject.getName());
-                    studentAttendanceViewDto.setSubjectId(Objects.nonNull(subject.getId())?subject.getId().longValue():0);
+                    studentAttendanceViewDto.setSubjectId(Objects.nonNull(subject.getId()) ? subject.getId().longValue() : 0);
                 });
             }
         }
@@ -1786,7 +1768,7 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
         if (musicGroup == null) {
             throw new BizException("乐团不存在");
         }
-        if(classGroup4MixDtos.get(0).getOnlyCreateClassGroup() == null){
+        if (classGroup4MixDtos.get(0).getOnlyCreateClassGroup() == null) {
             classGroup4MixDtos.get(0).setOnlyCreateClassGroup(false);
         }
         if (!classGroup4MixDtos.get(0).getOnlyCreateClassGroup() && classGroup4MixDtos.get(0).getCourseTimes().compareTo(0) <= 0) {
@@ -2297,7 +2279,7 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
         }
 
         Boolean confirmGenerate = false;
-        if(Objects.nonNull(classGroup4MixDtos.get(0).getConfirmGenerate())){
+        if (Objects.nonNull(classGroup4MixDtos.get(0).getConfirmGenerate())) {
             confirmGenerate = classGroup4MixDtos.get(0).getConfirmGenerate();
         }
 
@@ -2309,7 +2291,7 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
         List<ClassGroupTeacherMapper> byClassGroup = classGroupTeacherMapperDao.findByClassGroup(classGroupId);
         List<ClassGroupTeacherMapper> newTeacherMapperList = classGroup4MixDtos.get(0).getClassGroupTeacherMapperList();
         MusicGroup musicGroup = musicGroupDao.get(classGroup.getMusicGroupId());
-        if(musicGroup.getStatus() == PROGRESS){
+        if (musicGroup.getStatus() == PROGRESS) {
             if (byClassGroup != null && byClassGroup.size() > 0) {
                 ClassGroupTeacherMapper groupTeacherMapper = byClassGroup.stream().filter(classGroupTeacherMapper -> classGroupTeacherMapper.getTeacherRole() == TeachTypeEnum.BISHOP).findFirst().get();
                 if (groupTeacherMapper != null) {
@@ -2416,7 +2398,7 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
 
             int totalCourseTimes = 0;
             int generateCourseTimes = 0;
-            if(!CollectionUtils.isEmpty(classGroup4MixDto.getCourseTimeDtoList())){
+            if (!CollectionUtils.isEmpty(classGroup4MixDto.getCourseTimeDtoList())) {
                 totalCourseTimes = classGroup4MixDto.getCourseTimeDtoList().stream().mapToInt(CourseTimeDto::getExpectCourseNum).reduce(0, Integer::sum);
             }
 
@@ -2433,7 +2415,7 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
                     if (courseTimeDto.getDayOfWeek() < 1 || courseTimeDto.getDayOfWeek() > 7) {
                         throw new BizException("排课循环周期错误,请核查");
                     }
-                    if(Objects.isNull(courseTimeDto.getStartDate())||Objects.isNull(courseTimeDto.getEndDate())){
+                    if (Objects.isNull(courseTimeDto.getStartDate()) || Objects.isNull(courseTimeDto.getEndDate())) {
                         throw new BizException("排课循环周期错误,请核查");
                     }
 
@@ -2446,13 +2428,13 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
 
                     Date classDate = DateConvertor.toDate(now);
 
-                    if(courseTimeDto.getStartDate().compareTo(classDate)>0
-                            ||courseTimeDto.getEndDate().compareTo(classDate)<0
-                            ||courseTimeDto.getExpectCourseNum()<=courseTimeDto.getCourseNum()){
-                        if(courseTimeDto.getEndDate().compareTo(classDate)<0&&courseTimeDto.getExpectCourseNum()>courseTimeDto.getCourseNum()){
+                    if (courseTimeDto.getStartDate().compareTo(classDate) > 0
+                            || courseTimeDto.getEndDate().compareTo(classDate) < 0
+                            || courseTimeDto.getExpectCourseNum() <= courseTimeDto.getCourseNum()) {
+                        if (courseTimeDto.getEndDate().compareTo(classDate) < 0 && courseTimeDto.getExpectCourseNum() > courseTimeDto.getCourseNum()) {
                             throw new BizException("在指定的排课时间段内({}-{})无法完成预计课时数的排课", DateUtil.dateToString(courseTimeDto.getStartDate(), "yyyy.MM.dd"), DateUtil.dateToString(courseTimeDto.getEndDate(), "yyyy.MM.dd"));
                         }
-                        if(totalCourseTimes<=generateCourseTimes){
+                        if (totalCourseTimes <= generateCourseTimes) {
                             break WhileNode;
                         }
                         continue;
@@ -2469,10 +2451,10 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
 //                        break WhileNode;
 //                    }
 
-                    courseTimeDto.setCourseNum(courseTimeDto.getCourseNum()+1);
-                    generateCourseTimes+=1;
+                    courseTimeDto.setCourseNum(courseTimeDto.getCourseNum() + 1);
+                    generateCourseTimes += 1;
 
-                    if(totalCourseTimes<generateCourseTimes){
+                    if (totalCourseTimes < generateCourseTimes) {
                         break WhileNode;
                     }
 
@@ -2485,7 +2467,7 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
                     courseSchedule.setStatus(CourseStatusEnum.NOT_START);
                     courseSchedule.setClassDate(classDate);
                     courseSchedule.setStartClassTime(DateUtil.stringToDate(startClassTime));
-                    if(date.compareTo(courseSchedule.getStartClassTime())>0){
+                    if (date.compareTo(courseSchedule.getStartClassTime()) > 0) {
                         throw new BizException("课程开始时间不得早于当前时间");
                     }
                     courseSchedule.setEndClassTime(DateUtil.stringToDate(endClassTime));
@@ -2519,9 +2501,9 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
                         courseScheduleTeacherSalary.setUpdateTime(date);
                         courseScheduleTeacherSalaryService.createMusicGroupCourseTeacherSalary(musicGroup, courseSchedule, courseScheduleTeacherSalary);
                         courseScheduleTeacherSalaryList.add(courseScheduleTeacherSalary);
-                        if(confirmGenerate&&!classGroup4MixDto.getAllowZeroSalary()&&BigDecimal.ZERO.compareTo(courseScheduleTeacherSalary.getExpectSalary())==0){
+                        if (confirmGenerate && !classGroup4MixDto.getAllowZeroSalary() && BigDecimal.ZERO.compareTo(courseScheduleTeacherSalary.getExpectSalary()) == 0) {
                             TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
-                            return BaseController.failed(HttpStatus.MULTI_STATUS,"当前课程课酬预计为0,是否继续");
+                            return BaseController.failed(HttpStatus.MULTI_STATUS, "当前课程课酬预计为0,是否继续");
                         }
                     }
                 }
@@ -2536,7 +2518,7 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
 
         courseScheduleService.checkNewCourseSchedules(courseScheduleList, false, false);
 
-        if(!confirmGenerate){
+        if (!confirmGenerate) {
             TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
             courseScheduleList.sort(Comparator.comparing(CourseSchedule::getStartClassTime));
             return BaseController.failed(HttpStatus.PARTIAL_CONTENT, courseScheduleList, "");
@@ -2553,7 +2535,7 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
             //学生结算表
             courseScheduleStudentPaymentService.createForMusicGroup(musicGroupId, courseScheduleList, studentIds);
         }
-        if(musicGroup.getStatus() == PROGRESS){
+        if (musicGroup.getStatus() == PROGRESS) {
             imUserFriendService.refreshClassImUserFriend(classGroupId);
         }
         return BaseController.succeed(classGroup);
@@ -2568,7 +2550,7 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
         if (musicGroup == null) {
             throw new BizException("乐团不存在");
         }
-        if(classGroup4MixDtos.get(0).getOnlyCreateClassGroup() == null){
+        if (classGroup4MixDtos.get(0).getOnlyCreateClassGroup() == null) {
             classGroup4MixDtos.get(0).setOnlyCreateClassGroup(false);
         }
         if (!classGroup4MixDtos.get(0).getOnlyCreateClassGroup() && classGroup4MixDtos.get(0).getCourseTimes().compareTo(0) <= 0) {
@@ -3063,23 +3045,23 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
 
     @Override
     public PageInfo<ClassGroupTeachersDto> queryClassGroupPage(ClassGroupQueryInfo queryInfo) {
-        if(queryInfo.getGroupType() == null){
+        if (queryInfo.getGroupType() == null) {
             queryInfo.setGroupType(MUSIC);
         }
         PageInfo<ClassGroupTeachersDto> pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
         Map<String, Object> params = new HashMap<String, Object>();
         MapUtil.populateMap(params, queryInfo);
-        params.put("groupType",queryInfo.getGroupType().getCode());
+        params.put("groupType", queryInfo.getGroupType().getCode());
 
         List<ClassGroupTeachersDto> dataList = null;
         int count = classGroupDao.countClassGroup(params);
 
-        if(Objects.nonNull(queryInfo.getLessThenThreeHighOnline())){
+        if (Objects.nonNull(queryInfo.getLessThenThreeHighOnline())) {
             List<Long> lessThenThreeClassGroupIds = classGroupStudentMapperDao.getLessThenThreeClassGroupIds(queryInfo.getOrganIdList());
             params.put("classGroupIds", lessThenThreeClassGroupIds);
-            if(CollectionUtils.isEmpty(lessThenThreeClassGroupIds)){
-                count=0;
-            }else{
+            if (CollectionUtils.isEmpty(lessThenThreeClassGroupIds)) {
+                count = 0;
+            } else {
                 count = classGroupDao.countClassGroup(params);
             }
         }
@@ -3128,22 +3110,22 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
     public Boolean addImGroup(ClassGroup classGroup, List<Integer> userIds, List<Integer> teacherIdList) {
         MusicGroup musicGroup = musicGroupDao.get(classGroup.getMusicGroupId());
 
-        Map<Integer,String> userRoleMap = new HashMap<Integer, String>();
+        Map<Integer, String> userRoleMap = new HashMap<Integer, String>();
         userRoleMap.put(musicGroup.getEducationalTeacherId(), "乐团主管");
         userRoleMap.put(musicGroup.getTeamTeacherId(), "运营主管");
         userRoleMap.put(musicGroup.getDirectorUserId(), "乐队指导");
         for (Integer userId : userIds) {
             if (userId == null) continue;
-            
+
             userRoleMap.put(userId, "");
         }
-        
-        if(teacherIdList != null && teacherIdList.size() > 0){
-        	for(Integer teacherId : teacherIdList){
-        		userRoleMap.put(teacherId, "指导老师");
-        	}
+
+        if (teacherIdList != null && teacherIdList.size() > 0) {
+            for (Integer teacherId : teacherIdList) {
+                userRoleMap.put(teacherId, "指导老师");
+            }
         }
-        
+
         imGroupService.create(classGroup.getId().longValue(), null, classGroup.getName(), musicGroup.getName(), musicGroup.getName(), musicGroup.getName(), null, "MUSIC");
         imGroupMemberService.join(classGroup.getId().longValue(), userRoleMap);
         imUserFriendService.refreshClassImUserFriend(classGroup.getId());
@@ -3534,14 +3516,14 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
         MusicGroup musicGroup = musicGroupDao.findByClassGroupId(classGroupIds.get(0));
         //获取欠费学员列表
         List<Integer> noPaymentUserIds = musicGroupPaymentCalenderDetailDao.queryNoPaymentUserIds(musicGroup.getId(), new ArrayList<>(studentIds));
-        if(noPaymentUserIds.size() > 0){
+        if (noPaymentUserIds.size() > 0) {
             throw new BizException("操作失败:有欠费的学员不允许创建缴费");
         }
         //获取缴费状态在审核中或者已拒绝的缴费项目的学员
-        String studentId = musicGroupPaymentCalenderDao.queryCalenderStudentIds(musicGroup.getId(),null);
-        if(StringUtils.isNotEmpty(studentId)){
+        String studentId = musicGroupPaymentCalenderDao.queryCalenderStudentIds(musicGroup.getId(), null);
+        if (StringUtils.isNotEmpty(studentId)) {
             for (Integer integer : studentIds) {
-                if(studentId.contains(integer.toString())){
+                if (studentId.contains(integer.toString())) {
                     throw new BizException("操作失败:所选学员有待审核或已拒绝的缴费项目");
                 }
             }
@@ -3637,7 +3619,7 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
                     for (Integer integer : integers) {
                         List<Integer> collect = Arrays.asList(classGroupStudent.get(integer).split(",")).stream().map(e -> Integer.parseInt(e)).collect(Collectors.toList());
                         //学员退出群聊
-                        imGroupMemberService.quit(integer.longValue(),collect);
+                        imGroupMemberService.quit(integer.longValue(), collect);
                         classGroupStudentMapperDao.deleteByClassGroupIdAndStudents(integer, classGroupStudent.get(integer));
                     }
                 }
@@ -3651,7 +3633,8 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
                 //删除教师课酬
                 courseScheduleTeacherSalaryDao.batchDeleteByCourseScheduleIds(delCourseIds);
             }
-            imUserFriendService.refreshGroupImUserFriend(musicGroup.getId(),MUSIC);
+            batchUpdateTeacherSalary(classGroupIds);
+            imUserFriendService.refreshGroupImUserFriend(musicGroup.getId(), MUSIC);
             httpResponseResult.setMsg("学员班级调整完成");
         } else {
             //冻结班级
@@ -3752,6 +3735,8 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
         }
         maxClassGroupNum += otherSubjectRegNum / 6;
         maxClassGroupNum += (otherSubjectRegNum % 6) > 0 ? 1 : 0;
+        maxClassGroupNum += musicGroupStudents.size() / 30;
+        maxClassGroupNum += (musicGroupStudents.size() % 30) > 0 ? 1 : 0;
 
         HighClassGroupNumDto highClassGroupNumDto = new HighClassGroupNumDto();
         int nowClassGroupNum = classGroupDao.getMusicGroupHighClassNumBySubject(musicGroupId, type);
@@ -3763,32 +3748,32 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
 
     @Override
     @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
-    public List<MusicGroupPaymentCalenderStudentDetail> queryStudentPaymentCalenders(Integer masterClassGroupId,String classGroupStudentMap,List<Integer> studentIds) {
+    public List<MusicGroupPaymentCalenderStudentDetail> queryStudentPaymentCalenders(Integer masterClassGroupId, String classGroupStudentMap, List<Integer> studentIds) {
         //获取主班剩余课程时长
         Map<String, BigDecimal> masterMap = MapUtil.convertIntegerMap(courseScheduleDao.querySubCourseTimeMap(masterClassGroupId));
-        if(masterMap.size() <= 0){
+        if (masterMap.size() <= 0) {
             throw new BizException("所选主班没有剩余课程,请重新选择");
         }
         //获取学员列表
         Map<Integer, String> userNames = MapUtil.convertMybatisMap(teacherDao.queryUsernameByIds(studentIds));
-        Map<Integer, String> phoneMaps = MapUtil.convertMybatisMap(teacherDao.queryPhoneByIds(StringUtils.join(studentIds,",")));
+        Map<Integer, String> phoneMaps = MapUtil.convertMybatisMap(teacherDao.queryPhoneByIds(StringUtils.join(studentIds, ",")));
 
         Map<Integer, Integer> studentCLassMap = new HashMap<>();
         List<Map<Integer, BigDecimal>> surplusCourseFeeMapList = new ArrayList<>();
-        List<Map<String,String>> classGroupStudents = (List<Map<String,String>>)JSON.parse(classGroupStudentMap);
+        List<Map<String, String>> classGroupStudents = (List<Map<String, String>>) JSON.parse(classGroupStudentMap);
         //学员剩余课程价值
-        Map<Integer,BigDecimal> classGroupTotalPrice = new HashMap<>();
+        Map<Integer, BigDecimal> classGroupTotalPrice = new HashMap<>();
         //主班剩余课程价值
         Map<String, BigDecimal> masterTotalPriceMap = getMasterTotalPriceMap(masterClassGroupId);
         BigDecimal masterTotalPrice = getMasterTotalPrice(masterClassGroupId);
         for (Map<String, String> classGroupStudent : classGroupStudents) {
             for (String integer : classGroupStudent.keySet()) {
                 //获取学员剩余课程费用
-                surplusCourseFeeMapList.addAll(studentRegistrationDao.querySurplusCourseFeeByClassGroupId(Integer.parseInt(integer),classGroupStudent.get(integer)));
+                surplusCourseFeeMapList.addAll(studentRegistrationDao.querySurplusCourseFeeByClassGroupId(Integer.parseInt(integer), classGroupStudent.get(integer)));
                 String[] s = classGroupStudent.get(integer).split(",");
                 for (String s1 : s) {
-                    classGroupTotalPrice.put(Integer.parseInt(s1),courseScheduleStudentPaymentDao.querySubCoursePriceMap(Integer.parseInt(s1),Integer.parseInt(integer),null));
-                    studentCLassMap.put(Integer.parseInt(s1),Integer.parseInt(integer));
+                    classGroupTotalPrice.put(Integer.parseInt(s1), courseScheduleStudentPaymentDao.querySubCoursePriceMap(Integer.parseInt(s1), Integer.parseInt(integer), null));
+                    studentCLassMap.put(Integer.parseInt(s1), Integer.parseInt(integer));
                 }
             }
         }
@@ -3799,33 +3784,33 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
         for (Integer studentId : studentCLassMap.keySet()) {
             //学员剩余课程价值
             BigDecimal totalPrice = classGroupTotalPrice.get(studentId);
-            if(totalPrice == null){
+            if (totalPrice == null) {
                 totalPrice = BigDecimal.ZERO;
             }
             //学员剩余课程余额
             BigDecimal bigDecimal = surplusCourseFeeMap.get(studentId);
-            if(bigDecimal == null){
+            if (bigDecimal == null) {
                 bigDecimal = BigDecimal.ZERO;
             }
             //学员可带走的价值
             BigDecimal subCourseAmount;
-            if(masterTotalPrice.doubleValue() >= totalPrice.doubleValue()){
+            if (masterTotalPrice.doubleValue() >= totalPrice.doubleValue()) {
                 subCourseAmount = totalPrice;
-            }else {
+            } else {
                 subCourseAmount = masterTotalPrice;
             }
-            if(subCourseAmount.doubleValue() >= bigDecimal.doubleValue()){
+            if (subCourseAmount.doubleValue() >= bigDecimal.doubleValue()) {
                 subCourseAmount = bigDecimal;
             }
             for (int i = 0; i < courseTypes.size(); i++) {
                 BigDecimal masterPrice = masterTotalPriceMap.get(courseTypes.get(i));
                 MusicGroupPaymentCalenderStudentDetail calenderDto = new MusicGroupPaymentCalenderStudentDetail();
                 calenderDto.setClassGroupId(studentCLassMap.get(studentId));
-                if(subCourseAmount.doubleValue() >= masterPrice.doubleValue()){
+                if (subCourseAmount.doubleValue() >= masterPrice.doubleValue()) {
                     calenderDto.setSubCourseAmount(masterPrice);
                     calenderDto.setCutAmount(masterPrice);
                     subCourseAmount = subCourseAmount.subtract(masterPrice);
-                }else {
+                } else {
                     calenderDto.setSubCourseAmount(subCourseAmount);
                     calenderDto.setCutAmount(subCourseAmount);
                     subCourseAmount = BigDecimal.ZERO;
@@ -3848,7 +3833,7 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
     public BigDecimal getMasterTotalPrice(Integer masterClassGroupId) {
         //获取主班剩余时长
         Map<String, BigDecimal> masterMap = MapUtil.convertIntegerMap(courseScheduleDao.querySubCourseTimeMap(masterClassGroupId));
-        if(masterMap.size() == 0){
+        if (masterMap.size() == 0) {
             throw new BizException("操作失败:所选主班没有剩余时长");
         }
         //获取分布默认的课程类型单价
@@ -3863,7 +3848,7 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
                 throw new BizException("分部默认课程类型单价不存在,请设置");
             }
             BigDecimal courseTime = masterMap.get(s);
-            if(courseTime == null){
+            if (courseTime == null) {
                 courseTime = BigDecimal.ZERO;
             }
             //获取主班剩余课程价值,按分部默认单价计算
@@ -3874,13 +3859,13 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
         return masterTotalPrice;
     }
 
-    public Map<String,BigDecimal> getMasterTotalPriceMap(Integer masterClassGroupId) {
+    public Map<String, BigDecimal> getMasterTotalPriceMap(Integer masterClassGroupId) {
         //获取主班剩余时长
         Map<String, BigDecimal> masterMap = MapUtil.convertIntegerMap(courseScheduleDao.querySubCourseTimeMap(masterClassGroupId));
-        if(masterMap.size() == 0){
+        if (masterMap.size() == 0) {
             throw new BizException("操作失败:所选主班没有剩余时长");
         }
-        Map<String,BigDecimal> resultMap = new HashMap<>();
+        Map<String, BigDecimal> resultMap = new HashMap<>();
         //获取分布默认的课程类型单价
         MusicGroup musicGroup = musicGroupDao.findByClassGroupId(masterClassGroupId);
         Map<String, BigDecimal> unitPriceMap = MapUtil.convertIntegerMap(organizationCourseUnitPriceSettingsDao.queryMapByOrganIdAndChargeTypeId(musicGroup.getChargeTypeId(), musicGroup.getOrganId()));
@@ -3892,12 +3877,12 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
                 throw new BizException("分部默认课程类型单价不存在,请设置");
             }
             BigDecimal courseTime = masterMap.get(s);
-            if(courseTime == null){
+            if (courseTime == null) {
                 courseTime = BigDecimal.ZERO;
             }
             //获取主班剩余课程价值,按分部默认单价计算
             BigDecimal totalPrice = unitPrice.multiply(courseTime).setScale(0, BigDecimal.ROUND_HALF_UP);
-            resultMap.put(s,totalPrice);
+            resultMap.put(s, totalPrice);
         }
         return resultMap;
     }
@@ -3908,6 +3893,82 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
     }
 
     @Override
+    public void batchUpdateTeacherSalary(List<Integer> classGroupIds) {
+        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 (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<>();
+                        for (CourseSchedule courseSchedule : courseScheduleList) {
+                            if (courseSchedule.getType() == CourseScheduleType.HIGH_ONLINE || courseSchedule.getType() == CourseScheduleType.HIGH) {
+                                courseScheduleTeacherSalaryDao.batchDeleteByCourseAndTeacher(courseSchedule.getId(), null);
+                                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 (courseSchedule.getType() == CourseScheduleType.HIGH_ONLINE && aLong > 5l) {
+                                        aLong = 5l;
+                                    }
+                                    BigDecimal salary = null;
+                                    if (courseSchedule.getType() == CourseScheduleType.HIGH_ONLINE) {
+                                        salary = JSON.parseObject(teacherDefaultMusicGroupSalary.getSalaryRuleJson()).getBigDecimal(aLong + "");
+                                    } else if (courseSchedule.getType() == CourseScheduleType.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();
+                                        }
+                                        if (Objects.isNull(salary)) {
+                                            throw new BizException("请设置老师课酬");
+                                        }
+                                        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);
+                                }
+                            }
+                        }
+                        if (courseScheduleTeacherSalaryList.size() > 0) {
+                            courseScheduleTeacherSalaryService.batchInsert(courseScheduleTeacherSalaryList);
+                        }
+                    }
+                }
+            }
+            classGroupDao.batchUpdate(byClassGroupIds);
+        }
+    }
+
+    @Override
     @Transactional(rollbackFor = Exception.class)
     public HttpResponseResult spanGroupMergeClassSplitClassAffirm(MergeClassSplitClassAffirmDto mergeClassSplitClassAffirmDto) {
         SysUser sysUser = sysUserFeignService.queryUserInfo();
@@ -3918,8 +3979,8 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
         //学员列表
         List<Integer> studentIds = mergeClassSplitClassAffirmDto.getStudentIds();
         //主班是否包含所选学员列表
-        Boolean hasStudent = classGroupStudentMapperDao.hasStudent(masterClassGroupId,studentIds);
-        if(hasStudent){
+        Boolean hasStudent = classGroupStudentMapperDao.hasStudent(masterClassGroupId, studentIds);
+        if (hasStudent) {
             throw new BizException("操作失败: 主班包含部分已选学员");
         }
         //学员列表
@@ -3933,10 +3994,10 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
         //创建缴费项目
         MusicGroup musicGroup = musicGroupDao.findByClassGroupId(masterClassGroupId);
         //获取缴费状态在审核中或者已拒绝的缴费项目的学员
-        String studentId = musicGroupPaymentCalenderDao.queryCalenderStudentIds(musicGroup.getId(),null);
-        if(StringUtils.isNotEmpty(studentId)){
+        String studentId = musicGroupPaymentCalenderDao.queryCalenderStudentIds(musicGroup.getId(), null);
+        if (StringUtils.isNotEmpty(studentId)) {
             for (Integer integer : studentIds) {
-                if(studentId.contains(integer.toString())){
+                if (studentId.contains(integer.toString())) {
                     throw new BizException("操作失败:所选学员有待审核或已拒绝的缴费项目");
                 }
             }
@@ -3947,9 +4008,9 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
 
         paymentCalenderDto.setMusicGroupId(musicGroup.getId());
         boolean containsAll = musicGroupPaymentCalenderStudentDetails.containsAll(calenderStudentDetails);
-        if(!containsAll){
+        if (!containsAll) {
             paymentCalenderDto.setStatus(AUDITING);
-        }else {
+        } else {
             paymentCalenderDto.setStatus(NO);
         }
 
@@ -3957,14 +4018,14 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
         Map<Integer, List<MusicGroupPaymentCalenderStudentDetail>> collect = calenderStudentDetails.stream().collect(Collectors.groupingBy(e -> e.getUserId()));
         for (Map<Integer, String> classGroupStudent : classGroupStudents) {
             Integer classGroupId = classGroupStudent.keySet().iterator().next();
-            studentRegistrationService.insertStudent(classGroupStudent.get(classGroupId),musicGroupDao.findByClassGroupId(classGroupId).getId(),musicGroup.getId(),collect);
+            studentRegistrationService.insertStudent(classGroupStudent.get(classGroupId), musicGroupDao.findByClassGroupId(classGroupId).getId(), musicGroup.getId(), collect);
         }
         paymentCalenderDto.setPayUserType(MusicGroupPaymentCalender.PayUserType.STUDENT);
         paymentCalenderDto.setPaymentType(SPAN_GROUP_CLASS_ADJUST);
         //生成缴费项目
         paymentCalenderDto.setMasterTotalPrice(masterTotalPrice);
         paymentCalenderDto.setIsGiveMusicNetwork(false);
-        paymentCalenderDto.setStudentIds(StringUtils.join(studentIds,","));
+        paymentCalenderDto.setStudentIds(StringUtils.join(studentIds, ","));
         musicGroupPaymentCalenderService.create(paymentCalenderDto);
         //记录申请信息
         MusicGroupStudentClassAdjust musicGroupStudentClassAdjust = new MusicGroupStudentClassAdjust();
@@ -4005,10 +4066,10 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
         httpResponseResult.setStatus(true);
         //没有需要审核的缴费项目
         if (paymentCalenderDto.getStatus() != AUDITING) {
-            List<Map> classGroupStudents1 = JSON.parseArray(musicGroupStudentClassAdjust.getClassGroupStudents(),Map.class);
-            spanGroupClassAdjustPass(masterClassGroupId,studentIds,courseIds,classGroupStudents1,allLockCourseIds,paymentCalenderDto.getBatchNo(),masterTotalPrice);
+            List<Map> classGroupStudents1 = JSON.parseArray(musicGroupStudentClassAdjust.getClassGroupStudents(), Map.class);
+            spanGroupClassAdjustPass(masterClassGroupId, studentIds, courseIds, classGroupStudents1, allLockCourseIds, paymentCalenderDto.getBatchNo(), masterTotalPrice);
             httpResponseResult.setMsg("操作成功:学员班级调整完成");
-        }else {
+        } else {
 //                冻结班级
             classGroupDao.batchUpdateLockByClassGroupIds(classGroupIds, 1);
 //                冻结所选班级的课程
@@ -4025,7 +4086,7 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
                                          List<Long> courseIds,
                                          List<Map> classGroupStudents,
                                          List<Long> allLockCourseIds,
-                                         String batchNo,BigDecimal masterTotalPrice){
+                                         String batchNo, BigDecimal masterTotalPrice) {
         //删除班级关联的学员
         List<Integer> classGroupIds = new ArrayList<>();
         if (classGroupStudents != null && classGroupStudents.size() > 0) {
@@ -4034,7 +4095,7 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
                 for (Integer integer : integers) {
                     List<Integer> collect = Arrays.asList(classGroupStudent.get(integer).split(",")).stream().map(e -> Integer.parseInt(e)).collect(Collectors.toList());
                     //学员退出群聊
-                    imGroupMemberService.quit(integer.longValue(),collect);
+                    imGroupMemberService.quit(integer.longValue(), collect);
                     classGroupIds.add(integer);
                     classGroupStudentMapperDao.deleteByClassGroupIdAndStudents(integer, classGroupStudent.get(integer));
                 }
@@ -4042,17 +4103,17 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
         }
 
         //将学员加进班级未开始的课程,以及班级关联、加群
-        classGroupStudentMapperService.updateClassGroupStudents1(masterClassGroupId.longValue(),studentIds,allLockCourseIds,batchNo,masterTotalPrice);
+        classGroupStudentMapperService.updateClassGroupStudents1(masterClassGroupId.longValue(), studentIds, allLockCourseIds, batchNo, masterTotalPrice);
         //删除学员课程
-        if(courseIds.size() > 0){
+        if (courseIds.size() > 0) {
             courseScheduleDao.deleteMusicGroupCourseSchedulesWithStudents(courseIds, studentIds);
         }
         //解冻课程
-        courseScheduleDao.batchUpdateLockByCourseIds(allLockCourseIds,0);
+        courseScheduleDao.batchUpdateLockByCourseIds(allLockCourseIds, 0);
         //解冻班级
         classGroupIds.add(masterClassGroupId);
-        classGroupDao.batchUpdateLockByClassGroupIds(classGroupIds,0);
-        if(courseIds.size() > 0){
+        classGroupDao.batchUpdateLockByClassGroupIds(classGroupIds, 0);
+        if (courseIds.size() > 0) {
             //获取没有学员的课程
             List<Long> delCourseIds = courseScheduleDao.findNoStudentCourseIds(courseIds);
             if (delCourseIds != null && delCourseIds.size() > 0) {
@@ -4065,76 +4126,6 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
             }
         }
         //如果是基础技能班,重新计算老师课酬
-        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();
-                                        }
-                                        if(Objects.isNull(salary)){
-                                            throw new BizException("请设置老师课酬");
-                                        }
-                                        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);
-        }
+        batchUpdateTeacherSalary(classGroupIds);
     }
 }

+ 24 - 60
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupStudentMapperServiceImpl.java

@@ -566,88 +566,52 @@ public class ClassGroupStudentMapperServiceImpl extends BaseServiceImpl<Long, Cl
 
         List<Long> courseIds = classGroupNotStartCourse.stream().map(CourseSchedule::getId).collect(Collectors.toList());
 
+        if (!CollectionUtils.isEmpty(removeStudentIds)) {
+            courseScheduleDao.deleteMusicGroupCourseSchedulesWithStudents(courseIds, new ArrayList<>(removeStudentIds));
+            if(musicGroup.getStatus() == MusicGroupStatusEnum.PROGRESS){
+                //5、学生退出班级群组
+                imGroupMemberService.quit(classGroup.getId().longValue(), new ArrayList<Integer>(addStudentIds));
+            }
+        }
+
+        if (!CollectionUtils.isEmpty(addStudentIds)) {
+            courseScheduleStudentPaymentService.createForMusicGroup(classGroup.getMusicGroupId(), classGroupNotStartCourse, new ArrayList<>(addStudentIds));
+            studentDao.updateStudentServiceTag(null, new ArrayList<>(addStudentIds), YesOrNoEnum.YES.getCode());
+            if(musicGroup.getStatus() == MusicGroupStatusEnum.PROGRESS){
+                Map<Integer,String> userRoleMap = new HashMap<>();
+                for (Integer addStudentId : addStudentIds) {
+                    userRoleMap.put(addStudentId, "");
+                }
+                //5、添加进IM群组
+                imGroupMemberService.join(classGroup.getId().longValue(), userRoleMap);
+            }
+        }
+
         //4、调整未上课课酬
-        List<ClassGroupTeacherMapper> classGroupTeachers = classGroupTeacherMapperService.getClassGroupTeachers(classGroupId.intValue());
-        if ((classGroup.getType().equals(ClassGroupTypeEnum.HIGH_ONLINE) || classGroup.getType().equals(ClassGroupTypeEnum.HIGH)) && classGroupNotStartCourse.size() > 0) {
+        if(!CollectionUtils.isEmpty(classGroupNotStartCourse)){
+            List<ClassGroupTeacherMapper> classGroupTeachers = classGroupTeacherMapperService.getClassGroupTeachers(classGroupId.intValue());
             Date nowDate = new Date();
             List<CourseScheduleTeacherSalary> courseScheduleTeacherSalaryList = new ArrayList<>();
             List<Long> courseScheduleIds = classGroupNotStartCourse.stream().map(CourseSchedule::getId).collect(Collectors.toList());
             courseScheduleTeacherSalaryDao.batchDeleteByCourseScheduleIds(courseScheduleIds);
             for (CourseSchedule courseSchedule : classGroupNotStartCourse) {
                 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);
-
-                    int studentNum = studentIds.size();
-                    if (classGroup.getType().equals(ClassGroupTypeEnum.HIGH_ONLINE) && studentNum > 5) {
-                        studentNum = 5;
-                    }
-
-                    BigDecimal salary = null;
-                    if(classGroup.getType().equals(ClassGroupTypeEnum.HIGH_ONLINE)){
-                        if(studentNum>0){
-                            salary = JSON.parseObject(teacherDefaultMusicGroupSalary.getSalaryRuleJson()).getBigDecimal(studentNum + "");
-                        }else{
-                            salary = new BigDecimal("0");
-                        }
-                    }else if(classGroup.getType().equals(ClassGroupTypeEnum.HIGH)){
-                        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();
-                        }
-                        if(Objects.isNull(salary)){
-                            throw new BizException("请设置老师课酬");
-                        }
-                        salary = salary.multiply(new BigDecimal(studentNum));
-                    }
-                    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);
+                    courseScheduleTeacherSalaryService.createMusicGroupCourseTeacherSalary(musicGroup, courseSchedule, courseScheduleTeacherSalary);
                     courseScheduleTeacherSalaryList.add(courseScheduleTeacherSalary);
                 }
             }
             courseScheduleTeacherSalaryService.batchInsert(courseScheduleTeacherSalaryList);
         }
 
-        if (!CollectionUtils.isEmpty(removeStudentIds)) {
-            courseScheduleDao.deleteMusicGroupCourseSchedulesWithStudents(courseIds, new ArrayList<>(removeStudentIds));
-            if(musicGroup.getStatus() == MusicGroupStatusEnum.PROGRESS){
-                //5、学生退出班级群组
-                imGroupMemberService.quit(classGroup.getId().longValue(), new ArrayList<Integer>(addStudentIds));
-            }
-        }
-
-        if (!CollectionUtils.isEmpty(addStudentIds)) {
-            courseScheduleStudentPaymentService.createForMusicGroup(classGroup.getMusicGroupId(), classGroupNotStartCourse, new ArrayList<>(addStudentIds));
-            studentDao.updateStudentServiceTag(null, new ArrayList<>(addStudentIds), YesOrNoEnum.YES.getCode());
-            if(musicGroup.getStatus() == MusicGroupStatusEnum.PROGRESS){
-                Map<Integer,String> userRoleMap = new HashMap<>();
-                for (Integer addStudentId : addStudentIds) {
-                    userRoleMap.put(addStudentId, "");
-                }
-                //5、添加进IM群组
-                imGroupMemberService.join(classGroup.getId().longValue(), userRoleMap);
-            }
-        }
         if(musicGroup.getStatus() == MusicGroupStatusEnum.PROGRESS){
             imUserFriendService.refreshClassImUserFriend(classGroup.getId());
         }

+ 9 - 7
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ExportServiceImpl.java

@@ -192,9 +192,10 @@ public class ExportServiceImpl implements ExportService {
                 }
             } else {
                 StudentPaymentOrderExportDto feeByType = sellOrderDao.getFeeByType(row.getId());
+                BigDecimal childRepairFee = sellOrderDao.getChildRepair(row.getId());
                 row.setMusicalFee(feeByType.getMusicalFee());
-                row.setTeachingFee(feeByType.getTeachingFee());
-                row.setMaintenanceProductFee(feeByType.getRepairFee());
+                row.setTeachingFee(feeByType.getTeachingFee().subtract(childRepairFee));
+                row.setMaintenanceProductFee(feeByType.getRepairFee().add(childRepairFee));
                 row.setOtherFee(feeByType.getOtherFee());
                 if (row.getGroupType().equals(GroupType.MUSIC)) {
                     StudentRegistration studentRegistration = studentRegistrationDao.findStudentByMusicGroupIdAndUserId(row.getMusicGroupId(), row.getUserId());
@@ -203,11 +204,11 @@ public class ExportServiceImpl implements ExportService {
                         row.setSchoolName(studentRegistration.getSchoolName());
                         row.setCooperationOrganName(studentRegistration.getRemark());
                     }
-                    row.setMusicGroupCourseFee(feeByType.getActualAmount().subtract(feeByType.getMusicalFee()).subtract(feeByType.getTeachingFee()).subtract(row.getMaintenanceFee()).subtract(row.getMaintenanceProductFee()).subtract(feeByType.getOtherFee()).subtract(row.getLeaseFee()));
+                    row.setMusicGroupCourseFee(feeByType.getActualAmount().subtract(feeByType.getMusicalFee()).subtract(row.getTeachingFee()).subtract(row.getMaintenanceFee()).subtract(row.getMaintenanceProductFee()).subtract(feeByType.getOtherFee()).subtract(row.getLeaseFee()));
                 } else if (row.getType().equals(OrderTypeEnum.REPAIR)) {
                     row.setRepairFee(feeByType.getActualAmount().subtract(feeByType.getMusicalFee()).subtract(feeByType.getTeachingFee()).subtract(feeByType.getOtherFee()));
                 } else if (row.getType().equals(OrderTypeEnum.OUTORDER)) {
-                    row.setMusicGroupCourseFee(feeByType.getActualAmount().subtract(feeByType.getMusicalFee()).subtract(feeByType.getTeachingFee()).subtract(row.getMaintenanceProductFee()).subtract(feeByType.getOtherFee()));
+                    row.setMusicGroupCourseFee(feeByType.getActualAmount().subtract(feeByType.getMusicalFee()).subtract(row.getTeachingFee()).subtract(row.getMaintenanceProductFee()).subtract(feeByType.getOtherFee()));
                     row.setTransferFee(BigDecimal.ZERO);
                 }
             }
@@ -406,9 +407,10 @@ public class ExportServiceImpl implements ExportService {
                 }
             } else {
                 StudentPaymentOrderExportDto feeByType = sellOrderDao.getFeeByType(row.getId());
+                BigDecimal childRepairFee = sellOrderDao.getChildRepair(row.getId());
                 row.setMusicalFee(feeByType.getMusicalFee());
-                row.setTeachingFee(feeByType.getTeachingFee());
-                row.setMaintenanceProductFee(feeByType.getRepairFee());
+                row.setTeachingFee(feeByType.getTeachingFee().subtract(childRepairFee));
+                row.setMaintenanceProductFee(feeByType.getRepairFee().add(childRepairFee));
                 row.setOtherFee(feeByType.getOtherFee());
                 if (row.getGroupType().equals(GroupType.MUSIC)) {
                     StudentRegistration studentRegistration = studentRegistrationDao.findStudentByMusicGroupIdAndUserId(row.getMusicGroupId(), row.getUserId());
@@ -417,7 +419,7 @@ public class ExportServiceImpl implements ExportService {
                         row.setSchoolName(studentRegistration.getSchoolName());
                         row.setCooperationOrganName(studentRegistration.getRemark());
                     }
-                    row.setMusicGroupCourseFee(feeByType.getActualAmount().subtract(feeByType.getMusicalFee()).subtract(feeByType.getTeachingFee()).subtract(row.getMaintenanceFee()).subtract(row.getMaintenanceProductFee()).subtract(feeByType.getOtherFee()).subtract(row.getLeaseFee()));
+                    row.setMusicGroupCourseFee(feeByType.getActualAmount().subtract(feeByType.getMusicalFee()).subtract(row.getTeachingFee()).subtract(row.getMaintenanceFee()).subtract(row.getMaintenanceProductFee()).subtract(feeByType.getOtherFee()).subtract(row.getLeaseFee()));
                 } else if (row.getType().equals(OrderTypeEnum.REPAIR)) {
                     row.setRepairFee(feeByType.getActualAmount().subtract(feeByType.getMusicalFee()).subtract(feeByType.getTeachingFee()).subtract(feeByType.getOtherFee()));
                 } else if (row.getType().equals(OrderTypeEnum.OUTORDER)) {

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

@@ -68,7 +68,7 @@ public class ImGroupMemberServiceImpl extends BaseServiceImpl<Long, ImGroupMembe
 		return imGroupMemberDao;
 	}
 
-	public void joinGroup(Long imGroupId, Integer userId, String roleType, boolean isAdmin,Map<Integer,String> userRoleMap){
+	public ImGroup joinGroup(Long imGroupId, Integer userId, String roleType, boolean isAdmin,Map<Integer,String> userRoleMap){
 		ClassGroup classGroup = classGroupDao.get(imGroupId.intValue());
 		String tags = classGroup.getName();
 		//相关用户加入群组
@@ -103,11 +103,12 @@ public class ImGroupMemberServiceImpl extends BaseServiceImpl<Long, ImGroupMembe
 			userRoleMap.put(vipGroup.getEducationalTeacherId(), "乐团主管");
 			tags = vipGroup.getName();
 		}
-		imGroupService.create(imGroupId, null, classGroup.getName(), tags, tags, tags, null, classGroup.getGroupType().getCode());
+		ImGroup imGroup = imGroupService.create(imGroupId, null, classGroup.getName(), tags, tags, tags, null, classGroup.getGroupType().getCode());
 		if(userId != null){
 			join(imGroupId,userId,roleType,isAdmin);
 		}
 		join(imGroupId,userRoleMap);
+		return imGroup;
 	}
 
 	@Override
@@ -161,6 +162,7 @@ public class ImGroupMemberServiceImpl extends BaseServiceImpl<Long, ImGroupMembe
 		ImGroup imGroup = imGroupDao.getLocked(imGroupId);
 		if (imGroup == null) {
 			joinGroup(imGroupId,null,null,false,userRoleMap);
+			return true;
 		}
 		//检查用户是否已存在
 		List<Integer> existUserIdList = imGroupMemberDao.queryByImGroupIdAndUserId(imGroupId.toString(), userRoleMap.keySet().stream().filter(Objects::nonNull).map(Objects::toString)

+ 10 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/IndexBaseMonthDataServiceImpl.java

@@ -351,6 +351,10 @@ public class IndexBaseMonthDataServiceImpl extends BaseServiceImpl<Long, IndexBa
 			if (!userRole.contains(SysUserRole.SECTION_MANAGER) && !sysUser.getIsSuperAdmin()) {
 				userId = sysUser.getId();
 			}
+
+			int courseTimeError = indexBaseMonthDataDao.getCourseTimeError(organIds);
+			threeChild.add(new IndexErrInfoDto(IndexErrorType.COURSE_TIME_ERROR, IndexErrorType.COURSE_TIME_ERROR.getMsg(), courseTimeError, null));
+
 			int inspectionItem = indexBaseMonthDataDao.queryInspectionItem(organIdsStr,startTime,userId);
 			threeChild.add(new IndexErrInfoDto(IndexErrorType.INSPECTION_ITEM, IndexErrorType.INSPECTION_ITEM.getMsg(),inspectionItem, null));
 
@@ -512,6 +516,12 @@ public class IndexBaseMonthDataServiceImpl extends BaseServiceImpl<Long, IndexBa
 
 		boolean flag4 = false;
 		if(!flag4){
+			int courseTimeError = indexBaseMonthDataDao.getCourseTimeError(organIds);
+			if(courseTimeError > 0){
+				flag4 = true;
+			}
+		}
+		if(!flag4){
 			int attendanceError = indexBaseMonthDataDao.getAttendanceError(organIds,startTime);
 			if(attendanceError > 0){
 				flag4 = true;

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

@@ -11,23 +11,13 @@ import static com.ym.mec.biz.dal.entity.MusicGroupPaymentCalender.PaymentType.SP
 import static com.ym.mec.biz.dal.enums.PaymentStatusEnum.YES;
 
 import java.math.BigDecimal;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 import java.util.Map.Entry;
-import java.util.Set;
 import java.util.stream.Collectors;
 
 import com.ym.mec.biz.dal.dao.*;
 import com.ym.mec.biz.dal.entity.*;
-import com.ym.mec.biz.dal.enums.GroupType;
-import com.ym.mec.biz.dal.enums.StudentMusicGroupStatusEnum;
+import com.ym.mec.biz.dal.enums.*;
 import com.ym.mec.biz.event.source.GroupEventSource;
 import com.ym.mec.biz.service.*;
 import org.apache.commons.beanutils.BeanUtils;
@@ -52,8 +42,6 @@ import com.ym.mec.biz.dal.entity.MusicGroupPaymentCalender.PayUserType;
 import com.ym.mec.biz.dal.entity.MusicGroupPaymentCalender.PaymentCalenderStatusEnum;
 import com.ym.mec.biz.dal.entity.MusicGroupPaymentCalender.PaymentType;
 import com.ym.mec.biz.dal.entity.MusicGroupStudentFee.PaymentStatus;
-import com.ym.mec.biz.dal.enums.MessageTypeEnum;
-import com.ym.mec.biz.dal.enums.MusicGroupStatusEnum;
 import com.ym.mec.biz.dal.page.MusicGroupPaymentCalenderQueryInfo;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.exception.BizException;
@@ -1110,6 +1098,7 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
 			//删除教师课酬
 			courseScheduleTeacherSalaryDao.batchDeleteByCourseScheduleIds(delCourseIds);
 		}
+		classGroupService.batchUpdateTeacherSalary(classGroupIds);
 		imUserFriendService.refreshGroupImUserFriend(musicGroupPaymentCalenders.get(0).getMusicGroupId(),GroupType.MUSIC);
 	}
 

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

@@ -2337,13 +2337,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
             paymentDetail.setChannel(studentPaymentOrder.getPaymentChannel());
             sysUserCashAccountDetailService.insert(paymentDetail);
             MusicGroup musicGroup = musicGroupDao.get(musicGroupId);
-            if (musicGroup.getOwnershipType() != null && musicGroup.getOwnershipType() == CooperationOrgan.OwnershipType.OWN) {
-                // 发送续费结果通知
-                sysMessageService.batchSendMessage(MessageSender.JIGUANG, MessageTypeEnum.STUDENT_SMS_MUSIC_GROUP_RENEW_SUCCESS, push, null, 0, "1", "STUDENT",
-                        studentRegistration.getName(), studentPaymentOrder.getActualAmount());
-                sysMessageService.batchSendMessage(MessageSender.AWSMS, MessageTypeEnum.STUDENT_SMS_MUSIC_GROUP_RENEW_SUCCESS, yimei, null, 0, "1", "",
-                        studentRegistration.getName(), studentPaymentOrder.getActualAmount());
-            }
+
             studentRegistrationService.updateUserSurplusCourseFee(userId, musicGroupId, studentPaymentOrder.getExpectAmount(), "乐团续费", userId);
 
             try {
@@ -2351,7 +2345,13 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
             } catch (Exception e) {
                 logger.error("产品协议生成失败", e);
             }
-
+            if (musicGroup.getOwnershipType() != null && musicGroup.getOwnershipType() == CooperationOrgan.OwnershipType.OWN) {
+                // 发送续费结果通知
+                sysMessageService.batchSendMessage(MessageSender.JIGUANG, MessageTypeEnum.STUDENT_SMS_MUSIC_GROUP_RENEW_SUCCESS, push, null, 0, "1", "STUDENT",
+                        studentRegistration.getName(), studentPaymentOrder.getActualAmount());
+                sysMessageService.batchSendMessage(MessageSender.AWSMS, MessageTypeEnum.STUDENT_SMS_MUSIC_GROUP_RENEW_SUCCESS, yimei, null, 0, "1", "",
+                        studentRegistration.getName(), studentPaymentOrder.getActualAmount());
+            }
             return true;
         } else {
             if (studentPaymentOrder.getBalancePaymentAmount() != null && studentPaymentOrder.getBalancePaymentAmount().doubleValue() > 0) {
@@ -2359,7 +2359,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
                         "乐团续费失败");
             }
         }
-        MusicGroup musicGroup = musicGroupDao.get(musicGroupId);
+        /*MusicGroup musicGroup = musicGroupDao.get(musicGroupId);
         if (musicGroup.getOwnershipType() != null && musicGroup.getOwnershipType() == CooperationOrgan.OwnershipType.OWN) {
             if (studentPaymentOrder.getStatus() == CLOSE || studentPaymentOrder.getStatus() == DealStatusEnum.FAILED) {
                 String baseUrl = sysConfigDao.findConfigValue(SysConfigService.BASE_API_URL);
@@ -2369,7 +2369,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
                         HttpUtil.getSortUrl(memo));
                 return false;
             }
-        }
+        }*/
         return false;
     }
 

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

@@ -42,7 +42,7 @@ public class OrganizationServiceImpl extends BaseServiceImpl<Integer, Organizati
 	}
 
 	@Override
-	public List<Organization> queryEmployeeOrgan() throws Exception {
+	public List<Organization> queryEmployeeOrgan(){
 		SysUser sysUser = sysUserFeignService.queryUserInfo();
 		if(sysUser == null){
 			throw new BizException("获取用户信息失败");
@@ -52,6 +52,19 @@ public class OrganizationServiceImpl extends BaseServiceImpl<Integer, Organizati
 	}
 
 	@Override
+	public List<Organization> queryEmployeeOrganByUser(){
+		SysUser sysUser = sysUserFeignService.queryUserInfo();
+		if(sysUser == null){
+			throw new BizException("获取用户信息失败");
+		}
+		Integer userId = sysUser.getId();
+		if(sysUser.getIsSuperAdmin()){
+			userId = null;
+		}
+		return organizationDao.queryEmployeeOrgan(userId);
+	}
+
+	@Override
 	public String getOrganName(String organId) {
 		return organizationDao.getOrganName(organId);
 	}

+ 11 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/TeacherDefaultMusicGroupSalaryServiceImpl.java

@@ -10,6 +10,7 @@ import java.util.Set;
 import java.util.stream.Collectors;
 
 import com.ym.mec.biz.dal.dao.*;
+import com.ym.mec.biz.dal.entity.CourseSchedule;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -165,6 +166,11 @@ public class TeacherDefaultMusicGroupSalaryServiceImpl extends BaseServiceImpl<L
 										int studentNum = courseScheduleStudentPaymentDao.countCourseOnlyStudentNum(ts.getCourseScheduleId());
 										ts.setExpectSalary(ts.getExpectSalary().multiply(new BigDecimal(studentNum)));
 									}
+									//课堂课课酬改为按分钟数计算,并且时长占比向下取整
+									if (CourseSchedule.CourseScheduleType.CLASSROOM.equals(tdms.getCourseScheduleType())){
+										ts.setExpectSalary(TeachTypeEnum.BISHOP.equals(ts.getTeacherRole()) ? tdms.getMainTeacher30MinSalary() : tdms.getAssistantTeacher30MinSalary());
+										ts.setExpectSalary(duration.divide(new BigDecimal(40), BigDecimal.ZERO.intValue(), BigDecimal.ROUND_DOWN).multiply(ts.getExpectSalary()).setScale(2, BigDecimal.ROUND_HALF_UP));
+									}
 									list.add(ts);
 								} else if (musicGroup.getSettlementType() == SalarySettlementTypeEnum.TEACHER_DEFAULT) {// 默认课酬
 									mins = 30;
@@ -187,6 +193,11 @@ public class TeacherDefaultMusicGroupSalaryServiceImpl extends BaseServiceImpl<L
 										int studentNum = courseScheduleStudentPaymentDao.countCourseOnlyStudentNum(ts.getCourseScheduleId());
 										ts.setExpectSalary(ts.getExpectSalary().multiply(new BigDecimal(studentNum)));
 									}
+									//课堂课课酬改为按分钟数计算,并且时长占比向下取整
+									if (CourseSchedule.CourseScheduleType.CLASSROOM.equals(tdms.getCourseScheduleType())){
+										ts.setExpectSalary(TeachTypeEnum.BISHOP.equals(ts.getTeacherRole()) ? tdms.getMainTeacher30MinSalary() : tdms.getAssistantTeacher30MinSalary());
+										ts.setExpectSalary(duration.divide(new BigDecimal(40), BigDecimal.ZERO.intValue(), BigDecimal.ROUND_DOWN).multiply(ts.getExpectSalary()).setScale(2, BigDecimal.ROUND_HALF_UP));
+									}
 									list.add(ts);
 								}
 								if(ts.getExpectSalary() == null){

+ 10 - 6
mec-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml

@@ -2428,10 +2428,10 @@
             left join teacher_attendance ta on ta.course_schedule_id_ = cs.id_
             <if test="searchType == 'ERR_ATTENDANCE'">
                 LEFT JOIN course_schedule_student_payment cssp ON cssp.course_schedule_id_ = cs.id_
-                LEFT JOIN student_attendance sa ON sa.course_schedule_id_ = cs.id_ AND cssp.user_id_ = sa.user_id_
             </if>
-            <if test="searchType != 'ERR_ATTENDANCE'">
-                LEFT JOIN student_attendance sa ON sa.course_schedule_id_ = cs.id_
+            LEFT JOIN student_attendance sa ON sa.course_schedule_id_ = cs.id_
+            <if test="searchType == 'ERR_ATTENDANCE'">
+                AND cssp.user_id_ = sa.user_id_
             </if>
             <include refid="endFindCourseSchedulesCondition"/>
         GROUP BY
@@ -2452,10 +2452,10 @@
         course_schedule cs
         <if test="searchType == 'ERR_ATTENDANCE'">
             LEFT JOIN course_schedule_student_payment cssp ON cssp.course_schedule_id_ = cs.id_
-            LEFT JOIN student_attendance sa ON sa.course_schedule_id_ = cs.id_ AND cssp.user_id_ = sa.user_id_
         </if>
-        <if test="searchType != 'ERR_ATTENDANCE'">
-            LEFT JOIN student_attendance sa ON sa.course_schedule_id_ = cs.id_
+        LEFT JOIN student_attendance sa ON sa.course_schedule_id_ = cs.id_
+        <if test="searchType == 'ERR_ATTENDANCE'">
+            AND cssp.user_id_ = sa.user_id_
         </if>
         LEFT JOIN teacher_attendance ta on ta.course_schedule_id_ = cs.id_
         LEFT JOIN course_schedule_teacher_salary csts ON csts.course_schedule_id_ = cs.id_
@@ -2590,6 +2590,10 @@
             AND cs.status_ = 'OVER' AND ta.sign_in_time_ IS NULL AND ta.sign_out_time_ IS NULL AND ta.dispose_content_ IS NULL
             AND (cs.new_course_id_ IS NULL OR cs.new_course_id_ = cs.id_)
         </if>
+        <if test="searchType == 'COURSE_TIME_ERROR'">
+            AND cs.status_ = 'NOT_START' AND cs.start_class_time_ &lt; '06:00:00'
+            AND (cs.new_course_id_ IS NULL OR cs.new_course_id_ = cs.id_)
+        </if>
     </sql>
     <select id="queryPracticeCourseScheduleIds" resultType="java.lang.Integer">
         SELECT cs.id_ FROM course_schedule cs

+ 7 - 6
mec-biz/src/main/resources/config/mybatis/CourseScheduleTeacherSalaryMapper.xml

@@ -470,12 +470,13 @@
 
 	<update id="batchDeleteByCourseAndTeacher">
 		DELETE FROM course_schedule_teacher_salary
-		WHERE
-		course_schedule_id_ = #{courseScheduleId}
-		AND user_id_ IN
-		<foreach collection="userIds" item="userId" open="(" close=")" separator=",">
-			#{userId}
-		</foreach>
+		WHERE course_schedule_id_ = #{courseScheduleId}
+		<if test="userIds != null">
+		  AND user_id_ IN
+		  <foreach collection="userIds" item="userId" open="(" close=")" separator=",">
+			  #{userId}
+		  </foreach>
+		</if>
 	</update>
     <update id="batchUpdateTeacher">
 		UPDATE course_schedule_teacher_salary csts SET csts.user_id_ = #{teacherId},csts.update_time_ = NOW(),

+ 11 - 0
mec-biz/src/main/resources/config/mybatis/IndexBaseMonthDataMapper.xml

@@ -739,6 +739,17 @@
 				</foreach>
 			</if>
 	</select>
+    <select id="getCourseTimeError" resultType="int">
+		SELECT COUNT(cs.id_) FROM course_schedule cs
+		WHERE cs.status_ = 'NOT_START' AND cs.del_flag_ = 0 AND cs.start_class_time_ &lt; '06:00:00'
+		AND (cs.new_course_id_ IS NULL OR cs.new_course_id_=cs.id_)
+		<if test="organIds != null and organIds.size()>0">
+			AND cs.organ_id_ IN
+			<foreach collection="organIds" item="organId" open="(" close=")" separator=",">
+				#{organId}
+			</foreach>
+		</if>
+	</select>
     <select id="getAttendanceError" resultType="int">
 		SELECT COUNT(DISTINCT c.id_) FROM (SELECT cs.id_ FROM course_schedule cs
 		LEFT JOIN teacher_attendance ta ON ta.course_schedule_id_ = cs.id_

+ 5 - 0
mec-biz/src/main/resources/config/mybatis/SellOrderMapper.xml

@@ -602,4 +602,9 @@
                  LEFT JOIN goods g ON IF(so.parent_goods_id_ IS NOT NULL,g.id_ = so.parent_goods_id_,g.id_ = so.goods_id_)
         WHERE spo.id_ = #{orderId}
     </select>
+
+    <select id="getChildRepair" resultType="decimal">
+        SELECT IFNULL(SUM(actual_amount_),0) FROM sell_order WHERE order_id_ = #{orderId} AND goods_id_ = 76 AND parent_goods_id_ > 0
+    </select>
+
 </mapper>

+ 3 - 0
mec-biz/src/main/resources/config/mybatis/StudentExtracurricularExercisesSituationMapper.xml

@@ -520,6 +520,9 @@
 			<if test="operatorId!=null">
 				AND EXISTS (SELECT id_ FROM teacher_remind WHERE operator_id_=#{operatorId} AND teacher_id_=sees.teacher_id_ AND monday_ = sees.monday_ AND type_='SERVICE')
 			</if>
+			<if test="jobNature!=null">
+				AND tea.job_nature_=#{jobNature}
+			</if>
 		</where>
 	</sql>
 

+ 4 - 4
mec-biz/src/main/resources/config/mybatis/courseScheduleStudentMusicScoreMapper.xml

@@ -72,20 +72,20 @@
         UPDATE course_schedule_student_music_score
         SET down_status_ = #{downStatus},play_status_ = #{playStatus},speed_ = #{speed},update_time_ = NOW()
         WHERE course_schedule_id_ = #{courseScheduleId}
-        <if test="userId">
+        <if test="userId != null">
             AND user_id_ = #{userId}
         </if>
-        <if test="musicScoreAccompanimentId">
+        <if test="musicScoreAccompanimentId != null">
             AND music_score_accompaniment_id_ = #{musicScoreAccompanimentId}
         </if>
     </update>
     <update id="closePlayStatus">
         UPDATE course_schedule_student_music_score SET play_status_ = 0,accompaniment_play_status_ = 0,update_time_ = NOW()
         WHERE course_schedule_id_ = #{scheduleId}
-        <if test="musicScoreAccompanimentId">
+        <if test="musicScoreAccompanimentId != null">
             AND music_score_accompaniment_id_ = #{musicScoreAccompanimentId}
         </if>
-        <if test="musicScoreAccompanimentId">
+        <if test="userId != null">
             AND user_id_ = #{userId}
         </if>
     </update>

+ 7 - 0
mec-web/src/main/java/com/ym/mec/web/controller/OrganizationController.java

@@ -45,6 +45,13 @@ public class OrganizationController extends BaseController {
         return succeed(organizationService.queryEmployeeOrgan());
     }
 
+    @ApiOperation(value = "获取员工所在分部列表(管理员查看所有的分部)")
+    @GetMapping("/queryEmployeeOrganByUser")
+    @PreAuthorize("@pcs.hasPermissions('organization/queryEmployeeOrganByUser')")
+    public Object queryEmployeeOrganByUser() throws Exception {
+        return succeed(organizationService.queryEmployeeOrganByUser());
+    }
+
     @ApiOperation(value = "新增分部")
     @PostMapping("/add")
     @PreAuthorize("@pcs.hasPermissions('organization/add')")