Ver código fonte

Merge remote-tracking branch 'origin/master'

zouxuan 4 anos atrás
pai
commit
918bf4799d

+ 12 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/CourseScheduleTeacherSalaryService.java

@@ -3,6 +3,7 @@ package com.ym.mec.biz.service;
 import com.ym.mec.biz.dal.dto.*;
 import com.ym.mec.biz.dal.dto.*;
 import com.ym.mec.biz.dal.entity.CourseSchedule;
 import com.ym.mec.biz.dal.entity.CourseSchedule;
 import com.ym.mec.biz.dal.entity.CourseScheduleTeacherSalary;
 import com.ym.mec.biz.dal.entity.CourseScheduleTeacherSalary;
+import com.ym.mec.biz.dal.entity.MusicGroup;
 import com.ym.mec.biz.dal.entity.VipGroup;
 import com.ym.mec.biz.dal.entity.VipGroup;
 import com.ym.mec.biz.dal.page.CourseSalaryQueryInfo4Web;
 import com.ym.mec.biz.dal.page.CourseSalaryQueryInfo4Web;
 import com.ym.mec.biz.dal.page.CourseScheduleTeacherSalaryQueryInfo;
 import com.ym.mec.biz.dal.page.CourseScheduleTeacherSalaryQueryInfo;
@@ -166,6 +167,17 @@ public interface CourseScheduleTeacherSalaryService extends BaseService<Long, Co
     List<CourseScheduleTeacherSalary> createTeacherCourseSalary(CourseSchedule courseSchedule, List<Integer> teacherIds);
     List<CourseScheduleTeacherSalary> createTeacherCourseSalary(CourseSchedule courseSchedule, List<Integer> teacherIds);
 
 
     /**
     /**
+     * @describe 计算乐团课教师课酬
+     * @author Joburgess
+     * @date 2020/12/16 0016
+     * @param musicGroup:
+     * @param courseSchedule:
+     * @param courseScheduleTeacherSalaries:
+     * @return void
+     */
+    void createMusicGroupCourseTeacherSalary(MusicGroup musicGroup, CourseSchedule courseSchedule, CourseScheduleTeacherSalary courseScheduleTeacherSalaries);
+
+    /**
      * @describe 获取指定课程上的教师信息
      * @describe 获取指定课程上的教师信息
      * @author Joburgess
      * @author Joburgess
      * @date 2020/11/17 0017
      * @date 2020/11/17 0017

+ 0 - 5
mec-biz/src/main/java/com/ym/mec/biz/service/SysConfigService.java

@@ -85,11 +85,6 @@ public interface SysConfigService extends BaseService<Long, SysConfig> {
     String REFUND_PERIOD = "refund_period";
     String REFUND_PERIOD = "refund_period";
 
 
     /**
     /**
-     * 教师入职时间为此时间之后的,按照3.0的课酬结算
-     */
-    String TEACHER_ENTRY_DATE = "teacher_entry_date";
-
-    /**
      * 可签退时间限制(自然天)
      * 可签退时间限制(自然天)
      */
      */
     String ENABLE_SIGN_OUT_TIME_RANGE = "enable_sign_out_time_range";
     String ENABLE_SIGN_OUT_TIME_RANGE = "enable_sign_out_time_range";

+ 0 - 9
mec-biz/src/main/java/com/ym/mec/biz/service/VipGroupService.java

@@ -68,15 +68,6 @@ public interface VipGroupService extends BaseService<Long, VipGroup> {
     void deleteVipGroup(Long vipGroupId);
     void deleteVipGroup(Long vipGroupId);
 
 
     /**
     /**
-     * @describe 更新vip课程信息
-     * @author Joburgess
-     * @date 2019/10/30
-     * @param vipGroupApplyInfo: vip课信息
-     * @return void
-     */
-    void updateVipGroup(VipGroupApplyDto vipGroupApplyInfo);
-
-    /**
      * @describe 新增vip课程计划
      * @describe 新增vip课程计划
      * @author Joburgess
      * @author Joburgess
      * @date 2019/11/11
      * @date 2019/11/11

+ 4 - 321
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupServiceImpl.java

@@ -1675,7 +1675,6 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
             throw new BizException("排课次数必须大于0");
             throw new BizException("排课次数必须大于0");
         }
         }
 
 
-        Date entryDate = DateUtil.stringToDate(sysConfigDao.findByParamName(SysConfigService.TEACHER_ENTRY_DATE).getParanValue(), "yyyy-MM-dd");
         Integer schoolId = musicGroup.getSchoolId();
         Integer schoolId = musicGroup.getSchoolId();
 
 
         List<Integer> studentIdList = classGroup4MixDtos.get(0).getStudents();
         List<Integer> studentIdList = classGroup4MixDtos.get(0).getStudents();
@@ -1867,84 +1866,6 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
                     courseScheduleList.add(courseSchedule);
                     courseScheduleList.add(courseSchedule);
 
 
                     for (ClassGroupTeacherMapper classGroupTeacherMapper : classGroupTeacherMapperList) {
                     for (ClassGroupTeacherMapper classGroupTeacherMapper : classGroupTeacherMapperList) {
-                        List<TeacherDefaultMusicGroupSalary> teacherSalaryList = teacherDefaultMusicGroupSalaryService.getTeacherSalaryByUserIdAndType(classGroupTeacherMapper.getUserId(), null, null);
-                        BigDecimal salary = new BigDecimal("0");
-
-                        Map<CourseSchedule.CourseScheduleType, TeacherDefaultMusicGroupSalary> collect = teacherSalaryList.stream().collect(Collectors.toMap(TeacherDefaultMusicGroupSalary::getCourseScheduleType, teacherDefaultMusicGroupSalary -> teacherDefaultMusicGroupSalary));
-
-                        TeacherDefaultMusicGroupSalary teacherDefaultMusicGroupSalary = collect.get(classGroup4MixDto.getCourseType());
-                        Teacher teacher = teacherMap.get(classGroupTeacherMapper.getUserId());
-                        if (teacherDefaultMusicGroupSalary == null) {
-                            throw new BizException("请设置" + teacher.getRealName() + "老师的" + classGroup4MixDto.getCourseType().getMsg() + "课酬");
-                        }
-                        if ((classGroup4MixDto.getCourseType().equals(CourseSchedule.CourseScheduleType.HIGH_ONLINE) ||
-                                classGroup4MixDto.getCourseType().equals(CourseSchedule.CourseScheduleType.MUSIC_NETWORK)) &&
-                                StringUtils.isBlank(teacherDefaultMusicGroupSalary.getSalaryRuleJson())) {
-                            throw new BizException("请设置" + teacher.getRealName() + "老师的" + classGroup4MixDto.getCourseType().getMsg() + "课酬");
-                        } else if (teacherDefaultMusicGroupSalary.getAssistantTeacher30MinSalary() == null
-                                || teacherDefaultMusicGroupSalary.getAssistantTeacher90MinSalary() == null
-                                || teacherDefaultMusicGroupSalary.getMainTeacher30MinSalary() == null
-                                || teacherDefaultMusicGroupSalary.getMainTeacher90MinSalary() == null) {
-                            throw new BizException("请设置" + teacher.getRealName() + "老师的" + classGroup4MixDto.getCourseType().getMsg() + "课酬");
-                        }
-
-                        //对应基准课酬
-                        BigDecimal baseSalary = new BigDecimal(0), classTimeDuty = new BigDecimal(0);
-
-                        SalarySettlementTypeEnum settlementType = musicGroup.getSettlementType();
-                        if (Objects.nonNull(teacher.getEntryDate())
-                                && (teacher.getEntryDate().after(entryDate) || teacher.getEntryDate().getTime() == entryDate.getTime())) {
-                            settlementType = SalarySettlementTypeEnum.GRADIENT_SALARY;
-                        }
-
-                        //基准课酬
-                        if (settlementType.equals(SalarySettlementTypeEnum.TEACHER_DEFAULT) && teacherDefaultMusicGroupSalary != null) {
-                            //课程时长与结算单位时长占比
-                            classTimeDuty = new BigDecimal(classCourseDuration).divide(new BigDecimal(30), CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN);
-                            baseSalary = classGroupTeacherMapper.getTeacherRole().equals(TeachTypeEnum.BISHOP) ? teacherDefaultMusicGroupSalary.getMainTeacher30MinSalary() : teacherDefaultMusicGroupSalary.getAssistantTeacher30MinSalary();
-                        }
-                        //阶梯课酬
-                        if (settlementType.equals(SalarySettlementTypeEnum.GRADIENT_SALARY) && teacherDefaultMusicGroupSalary != null) {
-                            //课程时长与结算单位时长占比
-                            classTimeDuty = new BigDecimal(classCourseDuration).divide(new BigDecimal(90), CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN);
-                            baseSalary = classGroupTeacherMapper.getTeacherRole().equals(TeachTypeEnum.BISHOP) ? teacherDefaultMusicGroupSalary.getMainTeacher90MinSalary() : teacherDefaultMusicGroupSalary.getAssistantTeacher90MinSalary();
-                        }
-
-                        //课堂课课酬改为按分钟数计算,并且时长占比向下取整
-                        if (courseSchedule.getType().equals(CourseSchedule.CourseScheduleType.CLASSROOM)){
-                            baseSalary = classGroupTeacherMapper.getTeacherRole().equals(TeachTypeEnum.BISHOP) ? teacherDefaultMusicGroupSalary.getMainTeacher30MinSalary() : teacherDefaultMusicGroupSalary.getAssistantTeacher30MinSalary();
-                            classTimeDuty = new BigDecimal(classCourseDuration).divide(new BigDecimal(40), BigDecimal.ZERO.intValue(), BigDecimal.ROUND_DOWN);
-                        }
-
-                        salary = baseSalary.multiply(classTimeDuty).setScale(2, BigDecimal.ROUND_HALF_UP);
-
-                        //基础技能提高课
-                        if (classGroup4MixDto.getCourseType().equals(CourseSchedule.CourseScheduleType.HIGH)) {
-                            salary = classGroupTeacherMapper.getTeacherRole().equals(TeachTypeEnum.BISHOP) ? teacherDefaultMusicGroupSalary.getMainTeacher30MinSalary() : teacherDefaultMusicGroupSalary.getAssistantTeacher30MinSalary();
-                            if (settlementType.equals(SalarySettlementTypeEnum.GRADIENT_SALARY)) {
-                                salary = classGroupTeacherMapper.getTeacherRole().equals(TeachTypeEnum.BISHOP) ? teacherDefaultMusicGroupSalary.getMainTeacher90MinSalary() : teacherDefaultMusicGroupSalary.getAssistantTeacher90MinSalary();
-                            }
-                        }
-                        //线上小班课
-                        if (classGroup4MixDto.getCourseType().equals(CourseSchedule.CourseScheduleType.HIGH_ONLINE)||classGroup4MixDto.getCourseType().equals(CourseScheduleType.HIGH)) {
-                            teacherDefaultMusicGroupSalary = collect.get(CourseSchedule.CourseScheduleType.HIGH_ONLINE);
-                            Integer studentNum = classGroupStudentMapperDao.countClassGroupNormalStudentNum(classGroupTeacherMapper.getClassGroupId());
-//                            if (studentNum < 3 || studentNum > 5) {
-//                                String numWaring = studentNum < 3 ? "人数不能小于3," : "人数不能大于5,";
-//                                throw new BizException(classGroup.getName() + numWaring + "请调整");
-//                            }
-                            if(studentNum>5){
-                                studentNum=5;
-                            }
-                            salary = JSON.parseObject(teacherDefaultMusicGroupSalary.getSalaryRuleJson()).getBigDecimal(studentNum.toString());
-                            if(Objects.isNull(salary)){
-                                throw new BizException("课酬设置异常");
-                            }
-                        }
-
-                        if (classGroup4MixDto.getCourseType().equals(CourseSchedule.CourseScheduleType.MUSIC_NETWORK)) {
-                            salary = JSON.parseObject(teacherDefaultMusicGroupSalary.getSalaryRuleJson()).getBigDecimal("1");
-                        }
 
 
                         CourseScheduleTeacherSalary courseScheduleTeacherSalary = new CourseScheduleTeacherSalary();
                         CourseScheduleTeacherSalary courseScheduleTeacherSalary = new CourseScheduleTeacherSalary();
                         courseScheduleTeacherSalary.setCourseScheduleId(courseSchedule.getId());
                         courseScheduleTeacherSalary.setCourseScheduleId(courseSchedule.getId());
@@ -1952,11 +1873,11 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
                         courseScheduleTeacherSalary.setMusicGroupId(courseSchedule.getMusicGroupId());
                         courseScheduleTeacherSalary.setMusicGroupId(courseSchedule.getMusicGroupId());
                         courseScheduleTeacherSalary.setTeacherRole(classGroupTeacherMapper.getTeacherRole());
                         courseScheduleTeacherSalary.setTeacherRole(classGroupTeacherMapper.getTeacherRole());
                         courseScheduleTeacherSalary.setUserId(classGroupTeacherMapper.getUserId());
                         courseScheduleTeacherSalary.setUserId(classGroupTeacherMapper.getUserId());
-                        courseScheduleTeacherSalary.setExpectSalary(salary);
                         courseScheduleTeacherSalary.setClassGroupId(classGroup.getId());
                         courseScheduleTeacherSalary.setClassGroupId(classGroup.getId());
                         courseScheduleTeacherSalary.setMusicGroupId(musicGroupId);
                         courseScheduleTeacherSalary.setMusicGroupId(musicGroupId);
                         courseScheduleTeacherSalary.setCreateTime(date);
                         courseScheduleTeacherSalary.setCreateTime(date);
                         courseScheduleTeacherSalary.setUpdateTime(date);
                         courseScheduleTeacherSalary.setUpdateTime(date);
+                        courseScheduleTeacherSalaryService.createMusicGroupCourseTeacherSalary(musicGroup, courseSchedule, courseScheduleTeacherSalary);
                         courseScheduleTeacherSalaryList.add(courseScheduleTeacherSalary);
                         courseScheduleTeacherSalaryList.add(courseScheduleTeacherSalary);
                     }
                     }
                 }
                 }
@@ -2221,103 +2142,23 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
 
 
             courseScheduleDao.batchAddCourseSchedules(courseScheduleList);
             courseScheduleDao.batchAddCourseSchedules(courseScheduleList);
 
 
-            Date entryDate = DateUtil.stringToDate(sysConfigDao.findByParamName(SysConfigService.TEACHER_ENTRY_DATE).getParanValue(), "yyyy-MM-dd");
             //计算每节课的课酬
             //计算每节课的课酬
             List<CourseScheduleTeacherSalary> courseScheduleTeacherSalaryList = new ArrayList<>();
             List<CourseScheduleTeacherSalary> courseScheduleTeacherSalaryList = new ArrayList<>();
 
 
             for (CourseSchedule courseSchedule : courseScheduleList) {
             for (CourseSchedule courseSchedule : courseScheduleList) {
                 //默认课程时长
                 //默认课程时长
                 for (ClassGroupTeacherMapper classGroupTeacherMapper : classGroupTeacherMapperList) {
                 for (ClassGroupTeacherMapper classGroupTeacherMapper : classGroupTeacherMapperList) {
-                    List<TeacherDefaultMusicGroupSalary> teacherSalaryList = teacherDefaultMusicGroupSalaryService.getTeacherSalaryByUserIdAndType(classGroupTeacherMapper.getUserId(), null, null);
-                    BigDecimal salary = new BigDecimal("0");
-
-                    Map<CourseSchedule.CourseScheduleType, TeacherDefaultMusicGroupSalary> collect = teacherSalaryList.stream().collect(Collectors.toMap(TeacherDefaultMusicGroupSalary::getCourseScheduleType, teacherDefaultMusicGroupSalary -> teacherDefaultMusicGroupSalary));
-
-                    TeacherDefaultMusicGroupSalary teacherDefaultMusicGroupSalary = collect.get(classGroup4MixDto.getCourseType());
-                    Teacher teacher = teacherMap.get(classGroupTeacherMapper.getUserId());
-                    if (teacherDefaultMusicGroupSalary == null) {
-                        throw new BizException("请设置" + teacher.getRealName() + "老师的" + classGroup4MixDto.getCourseType().getMsg() + "课酬");
-                    }
-                    if ((classGroup4MixDto.getCourseType().equals(CourseSchedule.CourseScheduleType.HIGH_ONLINE) ||
-                            classGroup4MixDto.getCourseType().equals(CourseSchedule.CourseScheduleType.MUSIC_NETWORK)) &&
-                            StringUtils.isBlank(teacherDefaultMusicGroupSalary.getSalaryRuleJson())) {
-                        throw new BizException("请设置" + teacher.getRealName() + "老师的" + classGroup4MixDto.getCourseType().getMsg() + "课酬");
-                    } else if (teacherDefaultMusicGroupSalary.getAssistantTeacher30MinSalary() == null
-                            || teacherDefaultMusicGroupSalary.getAssistantTeacher90MinSalary() == null
-                            || teacherDefaultMusicGroupSalary.getMainTeacher30MinSalary() == null
-                            || teacherDefaultMusicGroupSalary.getMainTeacher90MinSalary() == null) {
-                        throw new BizException("请设置" + teacher.getRealName() + "老师的" + classGroup4MixDto.getCourseType().getMsg() + "课酬");
-                    }
-
-                    //对应基准课酬
-                    BigDecimal baseSalary = new BigDecimal(0), classTimeDuty = new BigDecimal(0);
-
-                    SalarySettlementTypeEnum settlementType = musicGroup.getSettlementType();
-                    if (Objects.nonNull(teacher.getEntryDate())
-                            && (teacher.getEntryDate().after(entryDate) || teacher.getEntryDate().getTime() == entryDate.getTime())) {
-                        settlementType = SalarySettlementTypeEnum.GRADIENT_SALARY;
-                    }
-
-                    //基准课酬
-                    if (settlementType.equals(SalarySettlementTypeEnum.TEACHER_DEFAULT) && teacherDefaultMusicGroupSalary != null) {
-                        //课程时长与结算单位时长占比
-                        classTimeDuty = new BigDecimal(classCourseDuration).divide(new BigDecimal(30), CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN);
-                        baseSalary = classGroupTeacherMapper.getTeacherRole().equals(TeachTypeEnum.BISHOP) ? teacherDefaultMusicGroupSalary.getMainTeacher30MinSalary() : teacherDefaultMusicGroupSalary.getAssistantTeacher30MinSalary();
-                    }
-                    //阶梯课酬
-                    if (settlementType.equals(SalarySettlementTypeEnum.GRADIENT_SALARY) && teacherDefaultMusicGroupSalary != null) {
-                        //课程时长与结算单位时长占比
-                        classTimeDuty = new BigDecimal(classCourseDuration).divide(new BigDecimal(90), CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN);
-                        baseSalary = classGroupTeacherMapper.getTeacherRole().equals(TeachTypeEnum.BISHOP) ? teacherDefaultMusicGroupSalary.getMainTeacher90MinSalary() : teacherDefaultMusicGroupSalary.getAssistantTeacher90MinSalary();
-                    }
-
-                    //课堂课课酬改为按分钟数计算,并且时长占比向下取整
-                    if (courseSchedule.getType().equals(CourseSchedule.CourseScheduleType.CLASSROOM)){
-                        baseSalary = classGroupTeacherMapper.getTeacherRole().equals(TeachTypeEnum.BISHOP) ? teacherDefaultMusicGroupSalary.getMainTeacher30MinSalary() : teacherDefaultMusicGroupSalary.getAssistantTeacher30MinSalary();
-                        classTimeDuty = new BigDecimal(classCourseDuration).divide(new BigDecimal(40), BigDecimal.ZERO.intValue(), BigDecimal.ROUND_DOWN);
-                    }
-
-                    salary = baseSalary.multiply(classTimeDuty).setScale(2, BigDecimal.ROUND_HALF_UP);
-
-                    //基础技能提高课
-                    if (classGroup4MixDto.getCourseType().equals(CourseSchedule.CourseScheduleType.HIGH)) {
-                        salary = classGroupTeacherMapper.getTeacherRole().equals(TeachTypeEnum.BISHOP) ? teacherDefaultMusicGroupSalary.getMainTeacher30MinSalary() : teacherDefaultMusicGroupSalary.getAssistantTeacher30MinSalary();
-                        if (settlementType.equals(SalarySettlementTypeEnum.GRADIENT_SALARY)) {
-                            salary = classGroupTeacherMapper.getTeacherRole().equals(TeachTypeEnum.BISHOP) ? teacherDefaultMusicGroupSalary.getMainTeacher90MinSalary() : teacherDefaultMusicGroupSalary.getAssistantTeacher90MinSalary();
-                        }
-                    }
-                    //线上小班课
-                    if (classGroup4MixDto.getCourseType().equals(CourseSchedule.CourseScheduleType.HIGH_ONLINE)||classGroup4MixDto.getCourseType().equals(CourseScheduleType.HIGH)) {
-                        teacherDefaultMusicGroupSalary = collect.get(CourseSchedule.CourseScheduleType.HIGH_ONLINE);
-                        Integer classGroupId = classGroupTeacherMapper.getClassGroupId();
-                        if(classGroupId == null){
-                            classGroupId = classGroup.getId();
-                        }
-                        Integer studentNum = classGroupStudentMapperDao.countClassGroupNormalStudentNum(classGroupId);
-                        if(studentNum>5){
-                            studentNum=5;
-                        }
-                        salary = JSON.parseObject(teacherDefaultMusicGroupSalary.getSalaryRuleJson()).getBigDecimal(studentNum.toString());
-                        if(Objects.isNull(salary)){
-                            throw new BizException("课酬设置异常");
-                        }
-                    }
-
-                    if (classGroup4MixDto.getCourseType().equals(CourseSchedule.CourseScheduleType.MUSIC_NETWORK)) {
-                        salary = JSON.parseObject(teacherDefaultMusicGroupSalary.getSalaryRuleJson()).getBigDecimal("1");
-                    }
-
                     CourseScheduleTeacherSalary courseScheduleTeacherSalary = new CourseScheduleTeacherSalary();
                     CourseScheduleTeacherSalary courseScheduleTeacherSalary = new CourseScheduleTeacherSalary();
                     courseScheduleTeacherSalary.setCourseScheduleId(courseSchedule.getId());
                     courseScheduleTeacherSalary.setCourseScheduleId(courseSchedule.getId());
                     courseScheduleTeacherSalary.setGroupType(courseSchedule.getGroupType());
                     courseScheduleTeacherSalary.setGroupType(courseSchedule.getGroupType());
                     courseScheduleTeacherSalary.setMusicGroupId(courseSchedule.getMusicGroupId());
                     courseScheduleTeacherSalary.setMusicGroupId(courseSchedule.getMusicGroupId());
                     courseScheduleTeacherSalary.setTeacherRole(classGroupTeacherMapper.getTeacherRole());
                     courseScheduleTeacherSalary.setTeacherRole(classGroupTeacherMapper.getTeacherRole());
                     courseScheduleTeacherSalary.setUserId(classGroupTeacherMapper.getUserId());
                     courseScheduleTeacherSalary.setUserId(classGroupTeacherMapper.getUserId());
-                    courseScheduleTeacherSalary.setExpectSalary(salary);
                     courseScheduleTeacherSalary.setClassGroupId(classGroup.getId());
                     courseScheduleTeacherSalary.setClassGroupId(classGroup.getId());
                     courseScheduleTeacherSalary.setMusicGroupId(musicGroupId);
                     courseScheduleTeacherSalary.setMusicGroupId(musicGroupId);
                     courseScheduleTeacherSalary.setCreateTime(date);
                     courseScheduleTeacherSalary.setCreateTime(date);
                     courseScheduleTeacherSalary.setUpdateTime(date);
                     courseScheduleTeacherSalary.setUpdateTime(date);
+                    courseScheduleTeacherSalaryService.createMusicGroupCourseTeacherSalary(musicGroup, courseSchedule, courseScheduleTeacherSalary);
                     courseScheduleTeacherSalaryList.add(courseScheduleTeacherSalary);
                     courseScheduleTeacherSalaryList.add(courseScheduleTeacherSalary);
                 }
                 }
             }
             }
@@ -2392,8 +2233,6 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
         }
         }
         Integer courseTimes = classGroup4MixDtos.get(0).getCourseTimes();
         Integer courseTimes = classGroup4MixDtos.get(0).getCourseTimes();
 
 
-        Date entryDate = DateUtil.stringToDate(sysConfigDao.findByParamName(SysConfigService.TEACHER_ENTRY_DATE).getParanValue(), "yyyy-MM-dd");
-
         classGroupService.updateTotalClassTimes(classGroup.getId(), courseTimes);
         classGroupService.updateTotalClassTimes(classGroup.getId(), courseTimes);
 
 
         MusicGroup musicGroup = musicGroupDao.get(classGroup.getMusicGroupId());
         MusicGroup musicGroup = musicGroupDao.get(classGroup.getMusicGroupId());
@@ -2535,97 +2374,16 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
                     courseScheduleList.add(courseSchedule);
                     courseScheduleList.add(courseSchedule);
 
 
                     for (ClassGroupTeacherMapper classGroupTeacherMapper : newClassGroupTeacherMapperList) {
                     for (ClassGroupTeacherMapper classGroupTeacherMapper : newClassGroupTeacherMapperList) {
-                        List<TeacherDefaultMusicGroupSalary> teacherSalaryList = teacherDefaultMusicGroupSalaryService.getTeacherSalaryByUserIdAndType(classGroupTeacherMapper.getUserId(), null, null);
-                        BigDecimal salary = new BigDecimal("0");
-
-                        Map<CourseSchedule.CourseScheduleType, TeacherDefaultMusicGroupSalary> collect = teacherSalaryList.stream().collect(Collectors.toMap(TeacherDefaultMusicGroupSalary::getCourseScheduleType, teacherDefaultMusicGroupSalary -> teacherDefaultMusicGroupSalary));
-
-                        TeacherDefaultMusicGroupSalary teacherDefaultMusicGroupSalary = collect.get(classGroup4MixDto.getCourseType());
-
-                        Teacher teacher = teacherMap.get(classGroupTeacherMapper.getUserId());
-                        if (teacherDefaultMusicGroupSalary == null) {
-                            throw new BizException("请设置" + teacher.getRealName() + "老师的" + classGroup4MixDto.getCourseType().getMsg() + "课酬");
-                        }
-
-                        if ((classGroup4MixDto.getCourseType().equals(CourseSchedule.CourseScheduleType.HIGH_ONLINE) ||
-                                classGroup4MixDto.getCourseType().equals(CourseSchedule.CourseScheduleType.MUSIC_NETWORK)) &&
-                                StringUtils.isBlank(teacherDefaultMusicGroupSalary.getSalaryRuleJson())) {
-                            throw new BizException("请设置" + teacher.getRealName() + "老师的" + classGroup4MixDto.getCourseType().getMsg() + "课酬");
-                        } else if (teacherDefaultMusicGroupSalary.getAssistantTeacher30MinSalary() == null
-                                || teacherDefaultMusicGroupSalary.getAssistantTeacher90MinSalary() == null
-                                || teacherDefaultMusicGroupSalary.getMainTeacher30MinSalary() == null
-                                || teacherDefaultMusicGroupSalary.getMainTeacher90MinSalary() == null) {
-                            throw new BizException("请设置" + teacher.getRealName() + "老师的" + classGroup4MixDto.getCourseType().getMsg() + "课酬");
-                        }
-
-                        //对应基准课酬
-                        BigDecimal baseSalary = new BigDecimal(0), classTimeDuty = new BigDecimal(0);
-
-                        SalarySettlementTypeEnum settlementType = musicGroup.getSettlementType();
-                        if (Objects.nonNull(teacher.getEntryDate())
-                                && (teacher.getEntryDate().after(entryDate) || teacher.getEntryDate().getTime() == entryDate.getTime())) {
-                            settlementType = SalarySettlementTypeEnum.GRADIENT_SALARY;
-                        }
-
-                        //基准课酬
-                        if (settlementType.equals(SalarySettlementTypeEnum.TEACHER_DEFAULT) && teacherDefaultMusicGroupSalary != null) {
-                            //课程时长与结算单位时长占比
-                            classTimeDuty = new BigDecimal(classCourseDuration).divide(new BigDecimal(30), CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN);
-                            baseSalary = classGroupTeacherMapper.getTeacherRole().equals(TeachTypeEnum.BISHOP) ? teacherDefaultMusicGroupSalary.getMainTeacher30MinSalary() : teacherDefaultMusicGroupSalary.getAssistantTeacher30MinSalary();
-                        }
-                        //阶梯课酬
-                        if (settlementType.equals(SalarySettlementTypeEnum.GRADIENT_SALARY) && teacherDefaultMusicGroupSalary != null) {
-                            //课程时长与结算单位时长占比
-                            classTimeDuty = new BigDecimal(classCourseDuration).divide(new BigDecimal(90), CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN);
-                            baseSalary = classGroupTeacherMapper.getTeacherRole().equals(TeachTypeEnum.BISHOP) ? teacherDefaultMusicGroupSalary.getMainTeacher90MinSalary() : teacherDefaultMusicGroupSalary.getAssistantTeacher90MinSalary();
-                        }
-
-                        //课堂课课酬改为按分钟数计算,并且时长占比向下取整
-                        if (courseSchedule.getType().equals(CourseSchedule.CourseScheduleType.CLASSROOM)){
-                            baseSalary = classGroupTeacherMapper.getTeacherRole().equals(TeachTypeEnum.BISHOP) ? teacherDefaultMusicGroupSalary.getMainTeacher30MinSalary() : teacherDefaultMusicGroupSalary.getAssistantTeacher30MinSalary();
-                            classTimeDuty = new BigDecimal(classCourseDuration).divide(new BigDecimal(40), BigDecimal.ZERO.intValue(), BigDecimal.ROUND_DOWN);
-                        }
-
-                        salary = baseSalary.multiply(classTimeDuty).setScale(2, BigDecimal.ROUND_HALF_UP);
-
-                        //基础技能提高课
-                        if (classGroup4MixDto.getCourseType().equals(CourseSchedule.CourseScheduleType.HIGH)) {
-                            salary = classGroupTeacherMapper.getTeacherRole().equals(TeachTypeEnum.BISHOP) ? teacherDefaultMusicGroupSalary.getMainTeacher30MinSalary() : teacherDefaultMusicGroupSalary.getAssistantTeacher30MinSalary();
-                            if (settlementType.equals(SalarySettlementTypeEnum.GRADIENT_SALARY)) {
-                                salary = classGroupTeacherMapper.getTeacherRole().equals(TeachTypeEnum.BISHOP) ? teacherDefaultMusicGroupSalary.getMainTeacher90MinSalary() : teacherDefaultMusicGroupSalary.getAssistantTeacher90MinSalary();
-                            }
-                        }
-                        //线上小班课
-                        if (classGroup4MixDto.getCourseType().equals(CourseSchedule.CourseScheduleType.HIGH_ONLINE)||classGroup4MixDto.getCourseType().equals(CourseScheduleType.HIGH)) {
-                            teacherDefaultMusicGroupSalary = collect.get(CourseSchedule.CourseScheduleType.HIGH_ONLINE);
-                            Integer studentNum = classGroupStudentMapperDao.countClassGroupNormalStudentNum(classGroupTeacherMapper.getClassGroupId());
-//                            if (studentNum < 3 || studentNum > 5) {
-//                                String numWaring = studentNum < 3 ? "人数不能小于3," : "人数不能大于5,";
-//                                throw new BizException(classGroup.getName() + numWaring + "请调整");
-//                            }
-                            if(studentNum>5){
-                                studentNum=5;
-                            }
-                            salary = JSON.parseObject(teacherDefaultMusicGroupSalary.getSalaryRuleJson()).getBigDecimal(studentNum.toString());
-                            if(Objects.isNull(salary)){
-                                throw new BizException("课酬设置异常");
-                            }
-                        }
-
-                        if (classGroup4MixDto.getCourseType().equals(CourseSchedule.CourseScheduleType.MUSIC_NETWORK)) {
-                            salary = JSON.parseObject(teacherDefaultMusicGroupSalary.getSalaryRuleJson()).getBigDecimal("1");
-                        }
-
                         CourseScheduleTeacherSalary courseScheduleTeacherSalary = new CourseScheduleTeacherSalary();
                         CourseScheduleTeacherSalary courseScheduleTeacherSalary = new CourseScheduleTeacherSalary();
                         courseScheduleTeacherSalary.setCourseScheduleId(courseSchedule.getId());
                         courseScheduleTeacherSalary.setCourseScheduleId(courseSchedule.getId());
                         courseScheduleTeacherSalary.setGroupType(courseSchedule.getGroupType());
                         courseScheduleTeacherSalary.setGroupType(courseSchedule.getGroupType());
                         courseScheduleTeacherSalary.setMusicGroupId(courseSchedule.getMusicGroupId());
                         courseScheduleTeacherSalary.setMusicGroupId(courseSchedule.getMusicGroupId());
                         courseScheduleTeacherSalary.setTeacherRole(classGroupTeacherMapper.getTeacherRole());
                         courseScheduleTeacherSalary.setTeacherRole(classGroupTeacherMapper.getTeacherRole());
                         courseScheduleTeacherSalary.setUserId(classGroupTeacherMapper.getUserId());
                         courseScheduleTeacherSalary.setUserId(classGroupTeacherMapper.getUserId());
-                        courseScheduleTeacherSalary.setExpectSalary(salary);
                         courseScheduleTeacherSalary.setClassGroupId(classGroup.getId());
                         courseScheduleTeacherSalary.setClassGroupId(classGroup.getId());
                         courseScheduleTeacherSalary.setCreateTime(date);
                         courseScheduleTeacherSalary.setCreateTime(date);
                         courseScheduleTeacherSalary.setUpdateTime(date);
                         courseScheduleTeacherSalary.setUpdateTime(date);
+                        courseScheduleTeacherSalaryService.createMusicGroupCourseTeacherSalary(musicGroup, courseSchedule, courseScheduleTeacherSalary);
                         courseScheduleTeacherSalaryList.add(courseScheduleTeacherSalary);
                         courseScheduleTeacherSalaryList.add(courseScheduleTeacherSalary);
                     }
                     }
                 }
                 }
@@ -2670,8 +2428,6 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
         }
         }
         Integer schoolId = musicGroup.getSchoolId();
         Integer schoolId = musicGroup.getSchoolId();
 
 
-        Date entryDate = DateUtil.stringToDate(sysConfigDao.findByParamName(SysConfigService.TEACHER_ENTRY_DATE).getParanValue(), "yyyy-MM-dd");
-
         List<Integer> studentIdList = classGroup4MixDtos.get(0).getStudents();
         List<Integer> studentIdList = classGroup4MixDtos.get(0).getStudents();
 
 
         List<StudentRegistration> studentList = studentRegistrationService.findStudentListByUserIdList(musicGroupId, studentIdList);
         List<StudentRegistration> studentList = studentRegistrationService.findStudentListByUserIdList(musicGroupId, studentIdList);
@@ -2834,79 +2590,6 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
                     courseScheduleDao.insert(courseSchedule);
                     courseScheduleDao.insert(courseSchedule);
 
 
                     for (ClassGroupTeacherMapper classGroupTeacherMapper : classGroupTeacherMapperList) {
                     for (ClassGroupTeacherMapper classGroupTeacherMapper : classGroupTeacherMapperList) {
-                        List<TeacherDefaultMusicGroupSalary> teacherSalaryList = teacherDefaultMusicGroupSalaryService.getTeacherSalaryByUserIdAndType(classGroupTeacherMapper.getUserId(), null, null);
-                        BigDecimal salary = new BigDecimal("0");
-
-                        Map<CourseSchedule.CourseScheduleType, TeacherDefaultMusicGroupSalary> collect = teacherSalaryList.stream().collect(Collectors.toMap(TeacherDefaultMusicGroupSalary::getCourseScheduleType, teacherDefaultMusicGroupSalary -> teacherDefaultMusicGroupSalary));
-
-                        TeacherDefaultMusicGroupSalary teacherDefaultMusicGroupSalary = collect.get(classGroup4MixDto.getCourseType());
-
-                        Teacher teacher = teacherMap.get(classGroupTeacherMapper.getUserId());
-                        if (teacherDefaultMusicGroupSalary == null) {
-                            throw new BizException("请设置" + teacher.getRealName() + "老师的" + classGroup4MixDto.getCourseType().getMsg() + "课酬");
-                        }
-                        if ((classGroup4MixDto.getCourseType().equals(CourseSchedule.CourseScheduleType.HIGH_ONLINE) ||
-                                classGroup4MixDto.getCourseType().equals(CourseSchedule.CourseScheduleType.MUSIC_NETWORK)) &&
-                                StringUtils.isBlank(teacherDefaultMusicGroupSalary.getSalaryRuleJson())) {
-                            throw new BizException("请设置" + teacher.getRealName() + "老师的" + classGroup4MixDto.getCourseType().getMsg() + "课酬");
-                        } else if (teacherDefaultMusicGroupSalary.getAssistantTeacher30MinSalary() == null
-                                || teacherDefaultMusicGroupSalary.getAssistantTeacher90MinSalary() == null
-                                || teacherDefaultMusicGroupSalary.getMainTeacher30MinSalary() == null
-                                || teacherDefaultMusicGroupSalary.getMainTeacher90MinSalary() == null) {
-                            throw new BizException("请设置" + teacher.getRealName() + "老师的" + classGroup4MixDto.getCourseType().getMsg() + "课酬");
-                        }
-
-                        //对应基准课酬
-                        BigDecimal baseSalary = new BigDecimal(0), classTimeDuty = new BigDecimal(0);
-
-                        SalarySettlementTypeEnum settlementType = musicGroup.getSettlementType();
-                        if (Objects.nonNull(teacher.getEntryDate())
-                                && (teacher.getEntryDate().after(entryDate) || teacher.getEntryDate().getTime() == entryDate.getTime())) {
-                            settlementType = SalarySettlementTypeEnum.GRADIENT_SALARY;
-                        }
-
-                        //基准课酬
-                        if (settlementType.equals(SalarySettlementTypeEnum.TEACHER_DEFAULT) && teacherDefaultMusicGroupSalary != null) {
-                            //课程时长与结算单位时长占比
-                            classTimeDuty = new BigDecimal(classCourseDuration).divide(new BigDecimal(30), CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN);
-                            baseSalary = classGroupTeacherMapper.getTeacherRole().equals(TeachTypeEnum.BISHOP) ? teacherDefaultMusicGroupSalary.getMainTeacher30MinSalary() : teacherDefaultMusicGroupSalary.getAssistantTeacher30MinSalary();
-                        }
-                        //阶梯课酬
-                        if (settlementType.equals(SalarySettlementTypeEnum.GRADIENT_SALARY) && teacherDefaultMusicGroupSalary != null) {
-                            //课程时长与结算单位时长占比
-                            classTimeDuty = new BigDecimal(classCourseDuration).divide(new BigDecimal(90), CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN);
-                            baseSalary = classGroupTeacherMapper.getTeacherRole().equals(TeachTypeEnum.BISHOP) ? teacherDefaultMusicGroupSalary.getMainTeacher90MinSalary() : teacherDefaultMusicGroupSalary.getAssistantTeacher90MinSalary();
-                        }
-
-                        //课堂课课酬改为按分钟数计算,并且时长占比向下取整
-                        if (courseSchedule.getType().equals(CourseSchedule.CourseScheduleType.CLASSROOM)){
-                            baseSalary = classGroupTeacherMapper.getTeacherRole().equals(TeachTypeEnum.BISHOP) ? teacherDefaultMusicGroupSalary.getMainTeacher30MinSalary() : teacherDefaultMusicGroupSalary.getAssistantTeacher30MinSalary();
-                            classTimeDuty = new BigDecimal(classCourseDuration).divide(new BigDecimal(40), BigDecimal.ZERO.intValue(), BigDecimal.ROUND_DOWN);
-                        }
-
-                        salary = baseSalary.multiply(classTimeDuty).setScale(2, BigDecimal.ROUND_HALF_UP);
-
-                        //线上小班课
-                        if (classGroup4MixDto.getCourseType().equals(CourseSchedule.CourseScheduleType.HIGH_ONLINE)||classGroup4MixDto.getCourseType().equals(CourseScheduleType.HIGH)) {
-                            teacherDefaultMusicGroupSalary = collect.get(CourseSchedule.CourseScheduleType.HIGH_ONLINE);
-                            Integer studentNum = classGroupStudentMapperDao.countClassGroupNormalStudentNum(classGroupTeacherMapper.getClassGroupId());
-//                            if (studentNum < 3 || studentNum > 5) {
-//                                String numWaring = studentNum < 3 ? "人数不能小于3," : "人数不能大于5,";
-//                                throw new BizException(classGroup.getName() + numWaring + "请调整");
-//                            }
-                            if(studentNum>5){
-                                studentNum=5;
-                            }
-                            salary = JSON.parseObject(teacherDefaultMusicGroupSalary.getSalaryRuleJson()).getBigDecimal(studentNum.toString());
-                            if(Objects.isNull(salary)){
-                                throw new BizException("课酬设置异常");
-                            }
-                        }
-
-                        if (classGroup4MixDto.getCourseType().equals(CourseSchedule.CourseScheduleType.MUSIC_NETWORK)) {
-                            salary = JSON.parseObject(teacherDefaultMusicGroupSalary.getSalaryRuleJson()).getBigDecimal("1");
-                        }
-
                         CourseScheduleTeacherSalary courseScheduleTeacherSalary = new CourseScheduleTeacherSalary();
                         CourseScheduleTeacherSalary courseScheduleTeacherSalary = new CourseScheduleTeacherSalary();
                         courseScheduleTeacherSalary.setCourseScheduleId(courseSchedule.getId());
                         courseScheduleTeacherSalary.setCourseScheduleId(courseSchedule.getId());
                         courseScheduleTeacherSalary.setMusicGroupId(musicGroupId);
                         courseScheduleTeacherSalary.setMusicGroupId(musicGroupId);
@@ -2914,10 +2597,10 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
                         courseScheduleTeacherSalary.setMusicGroupId(courseSchedule.getMusicGroupId());
                         courseScheduleTeacherSalary.setMusicGroupId(courseSchedule.getMusicGroupId());
                         courseScheduleTeacherSalary.setTeacherRole(classGroupTeacherMapper.getTeacherRole());
                         courseScheduleTeacherSalary.setTeacherRole(classGroupTeacherMapper.getTeacherRole());
                         courseScheduleTeacherSalary.setUserId(classGroupTeacherMapper.getUserId());
                         courseScheduleTeacherSalary.setUserId(classGroupTeacherMapper.getUserId());
-                        courseScheduleTeacherSalary.setExpectSalary(salary);
                         courseScheduleTeacherSalary.setClassGroupId(classGroup.getId());
                         courseScheduleTeacherSalary.setClassGroupId(classGroup.getId());
                         courseScheduleTeacherSalary.setCreateTime(date);
                         courseScheduleTeacherSalary.setCreateTime(date);
                         courseScheduleTeacherSalary.setUpdateTime(date);
                         courseScheduleTeacherSalary.setUpdateTime(date);
+                        courseScheduleTeacherSalaryService.createMusicGroupCourseTeacherSalary(musicGroup, courseSchedule, courseScheduleTeacherSalary);
                         courseScheduleTeacherSalaryList.add(courseScheduleTeacherSalary);
                         courseScheduleTeacherSalaryList.add(courseScheduleTeacherSalary);
                     }
                     }
                 }
                 }

+ 22 - 298
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupTeacherMapperServiceImpl.java

@@ -157,7 +157,6 @@ public class ClassGroupTeacherMapperServiceImpl extends BaseServiceImpl<Long, Cl
 
 
     public boolean classGroupTeacherMapperUpdate(List<ClassGroupTeacherMapper> classGroupTeacherMapperList) {
     public boolean classGroupTeacherMapperUpdate(List<ClassGroupTeacherMapper> classGroupTeacherMapperList) {
         Date date = new Date();
         Date date = new Date();
-        Date entryDate = DateUtil.stringToDate(sysConfigDao.findByParamName(SysConfigService.TEACHER_ENTRY_DATE).getParanValue(), "yyyy-MM-dd");
         List<Integer> classGroupIds = classGroupTeacherMapperList.stream().map(classGroupTeacherMapper -> classGroupTeacherMapper.getClassGroupId()).collect(Collectors.toList());
         List<Integer> classGroupIds = classGroupTeacherMapperList.stream().map(classGroupTeacherMapper -> classGroupTeacherMapper.getClassGroupId()).collect(Collectors.toList());
 
 
         List<CourseSchedule> classGroupNoStartCourseSchedules = courseScheduleService.findClassGroupNoStartCourseSchedules(classGroupIds, GroupType.MUSIC);
         List<CourseSchedule> classGroupNoStartCourseSchedules = courseScheduleService.findClassGroupNoStartCourseSchedules(classGroupIds, GroupType.MUSIC);
@@ -166,111 +165,20 @@ public class ClassGroupTeacherMapperServiceImpl extends BaseServiceImpl<Long, Cl
             return true;
             return true;
         }
         }
 
 
-        //老师默认的课酬
-        List<Integer> teacherUserIds = classGroupTeacherMapperList.stream().map(teacher -> teacher.getUserId()).collect(Collectors.toList());
-        List<TeacherDefaultMusicGroupSalary> teacherSalaryList = teacherDefaultMusicGroupSalaryDao.findByTeacher(teacherUserIds);
-        Map<String, TeacherDefaultMusicGroupSalary> teacherDefaultSalary = new HashMap<>();
-        if (teacherSalaryList.size() > 0) {
-            teacherDefaultSalary = teacherSalaryList.stream().collect(Collectors.toMap(teacherDefaultMusicGroupSalary -> teacherDefaultMusicGroupSalary.getCourseScheduleType().getCode() + teacherDefaultMusicGroupSalary.getUserId(), teacherDefaultMusicGroupSalary -> teacherDefaultMusicGroupSalary));
-        }
         List<CourseScheduleTeacherSalary> courseScheduleTeacherSalaryList = new ArrayList<>();
         List<CourseScheduleTeacherSalary> courseScheduleTeacherSalaryList = new ArrayList<>();
         String musicGroupId = classGroupTeacherMapperList.get(0).getMusicGroupId();
         String musicGroupId = classGroupTeacherMapperList.get(0).getMusicGroupId();
         MusicGroup musicGroup = musicGroupService.get(musicGroupId);
         MusicGroup musicGroup = musicGroupService.get(musicGroupId);
 
 
-        //所有教师列表
-        List<Teacher> teachers = teacherDao.findByTeacherIds(teacherUserIds);
-        Map<Integer, Teacher> teacherMap = teachers.stream()
-                .collect(Collectors.toMap(Teacher::getId, teacher -> teacher));
-
         //删除未开始的课程老师课酬,和签到
         //删除未开始的课程老师课酬,和签到
         List<Long> courseScheduleIds = classGroupNoStartCourseSchedules.stream().map(CourseSchedule::getId).collect(Collectors.toList());
         List<Long> courseScheduleIds = classGroupNoStartCourseSchedules.stream().map(CourseSchedule::getId).collect(Collectors.toList());
         courseScheduleTeacherSalaryDao.batchDeleteByCourseScheduleIds(courseScheduleIds);
         courseScheduleTeacherSalaryDao.batchDeleteByCourseScheduleIds(courseScheduleIds);
         teacherAttendanceDao.batchDeleteByCourseSchedules(courseScheduleIds);
         teacherAttendanceDao.batchDeleteByCourseSchedules(courseScheduleIds);
 
 
         for (CourseSchedule classGroupNoStartCourseSchedule : classGroupNoStartCourseSchedules) {
         for (CourseSchedule classGroupNoStartCourseSchedule : classGroupNoStartCourseSchedules) {
-            //课时长度
-            int duration = DateUtil.minutesBetween(classGroupNoStartCourseSchedule.getStartClassTime(), classGroupNoStartCourseSchedule.getEndClassTime());
             for (ClassGroupTeacherMapper classGroupTeacherMapper : classGroupTeacherMapperList) {
             for (ClassGroupTeacherMapper classGroupTeacherMapper : classGroupTeacherMapperList) {
                 if (!classGroupTeacherMapper.getClassGroupId().equals(classGroupNoStartCourseSchedule.getClassGroupId())) {
                 if (!classGroupTeacherMapper.getClassGroupId().equals(classGroupNoStartCourseSchedule.getClassGroupId())) {
                     continue;
                     continue;
                 }
                 }
-                BigDecimal salary;
-                List<TeacherDefaultMusicGroupSalary> teacherDefaultMusicGroupSalaryList = classGroupTeacherMapper.getTeacherDefaultMusicGroupSalaryList();
-
-                Map<CourseSchedule.CourseScheduleType, TeacherDefaultMusicGroupSalary> collect = teacherDefaultMusicGroupSalaryList.stream().collect(Collectors.toMap(TeacherDefaultMusicGroupSalary::getCourseScheduleType, teacherDefaultMusicGroupSalary -> teacherDefaultMusicGroupSalary));
-
-                TeacherDefaultMusicGroupSalary teacherDefaultMusicGroupSalary = collect.get(classGroupNoStartCourseSchedule.getType());
-                if (teacherDefaultMusicGroupSalary == null) {
-                    teacherDefaultMusicGroupSalary = teacherDefaultSalary.get(classGroupNoStartCourseSchedule.getType().getCode() + classGroupTeacherMapper.getUserId());
-                }
-                if (teacherDefaultMusicGroupSalary == null) {
-                    Teacher teacher = teacherMap.get(classGroupTeacherMapper.getUserId());
-                    throw new BizException("请设置"+teacher.getRealName()+"老师"+classGroupNoStartCourseSchedule.getType().getMsg()+"默认课酬");
-                }
-
-                //对应基准课酬
-                BigDecimal baseSalary = new BigDecimal(0), classTimeDuty = new BigDecimal(0);
-
-                Teacher teacher = teacherMap.get(classGroupTeacherMapper.getUserId());
-                SalarySettlementTypeEnum settlementType = musicGroup.getSettlementType();
-                if (Objects.nonNull(teacher.getEntryDate())
-                        && (teacher.getEntryDate().after(entryDate) || teacher.getEntryDate().getTime() == entryDate.getTime())) {
-                    settlementType = SalarySettlementTypeEnum.GRADIENT_SALARY;
-                }
-
-
-                //2.0课酬
-                if (settlementType.equals(SalarySettlementTypeEnum.TEACHER_DEFAULT)) {
-                    //课程时长与结算单位时长占比
-                    classTimeDuty = new BigDecimal(duration).divide(new BigDecimal(30), CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN);
-                    baseSalary = classGroupTeacherMapper.getTeacherRole().equals(TeachTypeEnum.BISHOP) ? teacherDefaultMusicGroupSalary.getMainTeacher30MinSalary() : teacherDefaultMusicGroupSalary.getAssistantTeacher30MinSalary();
-                }
-                //3.0课酬
-                if (settlementType.equals(SalarySettlementTypeEnum.GRADIENT_SALARY)) {
-                    //课程时长与结算单位时长占比
-                    classTimeDuty = new BigDecimal(duration).divide(new BigDecimal(90), CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN);
-                    baseSalary = classGroupTeacherMapper.getTeacherRole().equals(TeachTypeEnum.BISHOP) ? teacherDefaultMusicGroupSalary.getMainTeacher90MinSalary() : teacherDefaultMusicGroupSalary.getAssistantTeacher90MinSalary();
-                }
-
-                //课堂课课酬改为按分钟数计算,并且时长占比向下取整
-                if (musicGroup.isClassroomLessons() || classGroupNoStartCourseSchedule.getType().equals(CourseSchedule.CourseScheduleType.CLASSROOM)){
-                    baseSalary = classGroupTeacherMapper.getTeacherRole().equals(TeachTypeEnum.BISHOP) ? teacherDefaultMusicGroupSalary.getMainTeacher30MinSalary() : teacherDefaultMusicGroupSalary.getAssistantTeacher30MinSalary();
-                    classTimeDuty = new BigDecimal(duration).divide(new BigDecimal(40), BigDecimal.ZERO.intValue(), BigDecimal.ROUND_DOWN);
-                }
-
-                salary = baseSalary.multiply(classTimeDuty).setScale(CommonConstants.DECIMAL_FINAL_PLACE, BigDecimal.ROUND_HALF_UP);
-
-                //课堂课课酬
-//                if (musicGroup.isClassroomLessons() || classGroupNoStartCourseSchedule.getType().equals(CourseSchedule.CourseScheduleType.CLASSROOM)) {
-//                    salary = classGroupTeacherMapper.getTeacherRole().equals(TeachTypeEnum.BISHOP) ? teacherDefaultMusicGroupSalary.getMainTeacher30MinSalary() : teacherDefaultMusicGroupSalary.getAssistantTeacher30MinSalary();
-//                }
-                //基础技能提高课
-                if (classGroupNoStartCourseSchedule.getType().equals(CourseSchedule.CourseScheduleType.HIGH)) {
-                    salary = classGroupTeacherMapper.getTeacherRole().equals(TeachTypeEnum.BISHOP) ? teacherDefaultMusicGroupSalary.getMainTeacher30MinSalary() : teacherDefaultMusicGroupSalary.getAssistantTeacher30MinSalary();
-                    if (settlementType.equals(SalarySettlementTypeEnum.GRADIENT_SALARY)) {
-                        salary = classGroupTeacherMapper.getTeacherRole().equals(TeachTypeEnum.BISHOP) ? teacherDefaultMusicGroupSalary.getMainTeacher90MinSalary() : teacherDefaultMusicGroupSalary.getAssistantTeacher90MinSalary();
-                    }
-                }
-				if (classGroupNoStartCourseSchedule.getType().equals(CourseSchedule.CourseScheduleType.HIGH_ONLINE)
-						|| classGroupNoStartCourseSchedule.getType().equals(CourseSchedule.CourseScheduleType.MUSIC_NETWORK)) {
-					if (StringUtils.isBlank(teacherDefaultMusicGroupSalary.getSalaryRuleJson())) {
-						throw new BizException("请设置老师默认课酬");
-					}
-				}
-                //线上小班课
-                if (classGroupNoStartCourseSchedule.getType().equals(CourseSchedule.CourseScheduleType.HIGH_ONLINE)) {
-                    Integer studentNum = classGroupStudentMapperDao.countClassGroupNormalStudentNum(classGroupTeacherMapper.getClassGroupId());
-                    if (studentNum < 3 || studentNum > 5) {
-                        ClassGroup classGroup = classGroupService.get(classGroupTeacherMapper.getClassGroupId());
-                        String numWaring = studentNum < 3 ? "人数不能小于3," : "人数不能大于5,";
-                        throw new BizException(classGroup.getName() + numWaring + "请调整");
-                    }
-                    salary = JSON.parseObject(teacherDefaultMusicGroupSalary.getSalaryRuleJson()).getBigDecimal(studentNum.toString());
-                }
-
-                if (classGroupNoStartCourseSchedule.getType().equals(CourseSchedule.CourseScheduleType.MUSIC_NETWORK)) {
-                    salary = JSON.parseObject(teacherDefaultMusicGroupSalary.getSalaryRuleJson()).getBigDecimal("1");
-                }
 
 
                 //课程与老师薪水表
                 //课程与老师薪水表
                 CourseScheduleTeacherSalary courseScheduleTeacherSalary = new CourseScheduleTeacherSalary();
                 CourseScheduleTeacherSalary courseScheduleTeacherSalary = new CourseScheduleTeacherSalary();
@@ -279,10 +187,10 @@ public class ClassGroupTeacherMapperServiceImpl extends BaseServiceImpl<Long, Cl
                 courseScheduleTeacherSalary.setMusicGroupId(classGroupNoStartCourseSchedule.getMusicGroupId());
                 courseScheduleTeacherSalary.setMusicGroupId(classGroupNoStartCourseSchedule.getMusicGroupId());
                 courseScheduleTeacherSalary.setTeacherRole(classGroupTeacherMapper.getTeacherRole());
                 courseScheduleTeacherSalary.setTeacherRole(classGroupTeacherMapper.getTeacherRole());
                 courseScheduleTeacherSalary.setUserId(classGroupTeacherMapper.getUserId());
                 courseScheduleTeacherSalary.setUserId(classGroupTeacherMapper.getUserId());
-                courseScheduleTeacherSalary.setExpectSalary(salary);
                 courseScheduleTeacherSalary.setCreateTime(date);
                 courseScheduleTeacherSalary.setCreateTime(date);
                 courseScheduleTeacherSalary.setUpdateTime(date);
                 courseScheduleTeacherSalary.setUpdateTime(date);
                 courseScheduleTeacherSalary.setClassGroupId(classGroupTeacherMapper.getClassGroupId());
                 courseScheduleTeacherSalary.setClassGroupId(classGroupTeacherMapper.getClassGroupId());
+                courseScheduleTeacherSalaryService.createMusicGroupCourseTeacherSalary(musicGroup, classGroupNoStartCourseSchedule, courseScheduleTeacherSalary);
                 courseScheduleTeacherSalaryList.add(courseScheduleTeacherSalary);
                 courseScheduleTeacherSalaryList.add(courseScheduleTeacherSalary);
             }
             }
         }
         }
@@ -294,92 +202,17 @@ public class ClassGroupTeacherMapperServiceImpl extends BaseServiceImpl<Long, Cl
     public void createMusicGroupTeacherMapper(List<CourseSchedule> courseSchedules, String musicGroupId) {
     public void createMusicGroupTeacherMapper(List<CourseSchedule> courseSchedules, String musicGroupId) {
         Date date = new Date();
         Date date = new Date();
         MusicGroup musicGroup = musicGroupService.get(musicGroupId);
         MusicGroup musicGroup = musicGroupService.get(musicGroupId);
-        Date entryDate = DateUtil.stringToDate(sysConfigDao.findByParamName(SysConfigService.TEACHER_ENTRY_DATE).getParanValue(), "yyyy-MM-dd");
-        List<Integer> teacherUserIds = courseSchedules.stream()
-                .map(CourseSchedule::getActualTeacherId)
-                .collect(Collectors.toList());
-        //所有教师列表
-        List<Teacher> teachers = teacherDao.findByTeacherIds(teacherUserIds);
-        Map<Integer, Teacher> teacherMap = teachers.stream()
-                .collect(Collectors.toMap(Teacher::getId, teacher -> teacher));
 
 
         //老师默认的课酬
         //老师默认的课酬
-//        Map<String, TeacherDefaultMusicGroupSalary> teacherDefaultSalary = new HashMap<>();
         for (CourseSchedule classGroupNoStartCourseSchedule : courseSchedules) {
         for (CourseSchedule classGroupNoStartCourseSchedule : courseSchedules) {
             List<CourseScheduleTeacherSalary> courseScheduleTeacherSalaryList = new ArrayList<>();
             List<CourseScheduleTeacherSalary> courseScheduleTeacherSalaryList = new ArrayList<>();
             List<TeacherAttendance> teacherAttendances = new ArrayList<>();
             List<TeacherAttendance> teacherAttendances = new ArrayList<>();
 
 
-            //课时长度
-            int duration = DateUtil.minutesBetween(classGroupNoStartCourseSchedule.getStartClassTime(), classGroupNoStartCourseSchedule.getEndClassTime());
             List<ClassGroupTeacherMapper> byClassGroup = classGroupTeacherMapperDao.findByClassGroup(classGroupNoStartCourseSchedule.getClassGroupId());
             List<ClassGroupTeacherMapper> byClassGroup = classGroupTeacherMapperDao.findByClassGroup(classGroupNoStartCourseSchedule.getClassGroupId());
             for (ClassGroupTeacherMapper classGroupTeacherMapper : byClassGroup) {
             for (ClassGroupTeacherMapper classGroupTeacherMapper : byClassGroup) {
                 if (!classGroupTeacherMapper.getClassGroupId().equals(classGroupNoStartCourseSchedule.getClassGroupId())) {
                 if (!classGroupTeacherMapper.getClassGroupId().equals(classGroupNoStartCourseSchedule.getClassGroupId())) {
                     continue;
                     continue;
                 }
                 }
-                BigDecimal salary = new BigDecimal("0");
-
-                TeacherDefaultMusicGroupSalary teacherDefaultMusicGroupSalary = teacherDefaultMusicGroupSalaryDao.findByTeacherAndCourseType(classGroupTeacherMapper.getUserId(),
-                        classGroupNoStartCourseSchedule.getType().getCode());
-
-                if (teacherDefaultMusicGroupSalary == null) {
-                    throw new BizException("请先设置老师课酬");
-                }
-
-                //对应基准课酬
-                BigDecimal baseSalary = new BigDecimal(0), classTimeDuty = new BigDecimal(0);
-
-                Teacher teacher = teacherMap.get(classGroupTeacherMapper.getUserId());
-                SalarySettlementTypeEnum settlementType = musicGroup.getSettlementType();
-                if (Objects.nonNull(teacher.getEntryDate())
-                        && (teacher.getEntryDate().after(entryDate) || teacher.getEntryDate().getTime() == entryDate.getTime())) {
-                    settlementType = SalarySettlementTypeEnum.GRADIENT_SALARY;
-                }
-
-
-                //2.0课酬
-                if (settlementType.equals(SalarySettlementTypeEnum.TEACHER_DEFAULT)) {
-                    //课程时长与结算单位时长占比
-                    classTimeDuty = new BigDecimal(duration).divide(new BigDecimal(30), CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN);
-                    baseSalary = classGroupTeacherMapper.getTeacherRole().equals(TeachTypeEnum.BISHOP) ? teacherDefaultMusicGroupSalary.getMainTeacher30MinSalary() : teacherDefaultMusicGroupSalary.getAssistantTeacher30MinSalary();
-                }
-                //3.0课酬
-                if (settlementType.equals(SalarySettlementTypeEnum.GRADIENT_SALARY)) {
-                    //课程时长与结算单位时长占比
-                    classTimeDuty = new BigDecimal(duration).divide(new BigDecimal(90), CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN);
-                    baseSalary = classGroupTeacherMapper.getTeacherRole().equals(TeachTypeEnum.BISHOP) ? teacherDefaultMusicGroupSalary.getMainTeacher90MinSalary() : teacherDefaultMusicGroupSalary.getAssistantTeacher90MinSalary();
-                }
-
-                //课堂课课酬改为按分钟数计算,并且时长占比向下取整
-                if (musicGroup.isClassroomLessons() || classGroupNoStartCourseSchedule.getType().equals(CourseSchedule.CourseScheduleType.CLASSROOM)){
-                    baseSalary = classGroupTeacherMapper.getTeacherRole().equals(TeachTypeEnum.BISHOP) ? teacherDefaultMusicGroupSalary.getMainTeacher30MinSalary() : teacherDefaultMusicGroupSalary.getAssistantTeacher30MinSalary();
-                    classTimeDuty = new BigDecimal(duration).divide(new BigDecimal(40), BigDecimal.ZERO.intValue(), BigDecimal.ROUND_DOWN);
-                }
-
-                //课堂课课酬
-//                if (musicGroup.isClassroomLessons()) {
-//                    salary = classGroupTeacherMapper.getTeacherRole().equals(TeachTypeEnum.BISHOP) ? teacherDefaultMusicGroupSalary.getMainTeacher30MinSalary() : teacherDefaultMusicGroupSalary.getAssistantTeacher30MinSalary();
-//                }
-                //基础技能提高课
-                if (classGroupNoStartCourseSchedule.getType().equals(CourseSchedule.CourseScheduleType.HIGH)) {
-                    salary = classGroupTeacherMapper.getTeacherRole().equals(TeachTypeEnum.BISHOP) ? teacherDefaultMusicGroupSalary.getMainTeacher30MinSalary() : teacherDefaultMusicGroupSalary.getAssistantTeacher30MinSalary();
-                    if (settlementType.equals(SalarySettlementTypeEnum.GRADIENT_SALARY)) {
-                        salary = classGroupTeacherMapper.getTeacherRole().equals(TeachTypeEnum.BISHOP) ? teacherDefaultMusicGroupSalary.getMainTeacher90MinSalary() : teacherDefaultMusicGroupSalary.getAssistantTeacher90MinSalary();
-                    }
-                }
-                //线上小班课
-                if (classGroupNoStartCourseSchedule.getType().equals(CourseSchedule.CourseScheduleType.HIGH_ONLINE)) {
-                    Integer studentNum = classGroupStudentMapperDao.countClassGroupNormalStudentNum(classGroupTeacherMapper.getClassGroupId());
-                    if (studentNum < 3 || studentNum > 5) {
-                        ClassGroup classGroup = classGroupService.get(classGroupTeacherMapper.getClassGroupId());
-                        String numWaring = studentNum < 3 ? "人数不能小于3," : "人数不能大于5,";
-                        throw new BizException(classGroup.getName() + numWaring + "请调整");
-                    }
-                    salary = JSON.parseObject(teacherDefaultMusicGroupSalary.getSalaryRuleJson()).getBigDecimal(studentNum.toString());
-                }
-
-                if (classGroupNoStartCourseSchedule.getType().equals(CourseSchedule.CourseScheduleType.MUSIC_NETWORK)) {
-                    salary = JSON.parseObject(teacherDefaultMusicGroupSalary.getSalaryRuleJson()).getBigDecimal("1");
-                }
 
 
                 //课程与老师薪水表
                 //课程与老师薪水表
                 CourseScheduleTeacherSalary courseScheduleTeacherSalary = new CourseScheduleTeacherSalary();
                 CourseScheduleTeacherSalary courseScheduleTeacherSalary = new CourseScheduleTeacherSalary();
@@ -388,10 +221,10 @@ public class ClassGroupTeacherMapperServiceImpl extends BaseServiceImpl<Long, Cl
                 courseScheduleTeacherSalary.setMusicGroupId(classGroupNoStartCourseSchedule.getMusicGroupId());
                 courseScheduleTeacherSalary.setMusicGroupId(classGroupNoStartCourseSchedule.getMusicGroupId());
                 courseScheduleTeacherSalary.setTeacherRole(classGroupTeacherMapper.getTeacherRole());
                 courseScheduleTeacherSalary.setTeacherRole(classGroupTeacherMapper.getTeacherRole());
                 courseScheduleTeacherSalary.setUserId(classGroupTeacherMapper.getUserId());
                 courseScheduleTeacherSalary.setUserId(classGroupTeacherMapper.getUserId());
-                courseScheduleTeacherSalary.setExpectSalary(salary);
                 courseScheduleTeacherSalary.setCreateTime(date);
                 courseScheduleTeacherSalary.setCreateTime(date);
                 courseScheduleTeacherSalary.setUpdateTime(date);
                 courseScheduleTeacherSalary.setUpdateTime(date);
                 courseScheduleTeacherSalary.setClassGroupId(classGroupTeacherMapper.getClassGroupId());
                 courseScheduleTeacherSalary.setClassGroupId(classGroupTeacherMapper.getClassGroupId());
+                courseScheduleTeacherSalaryService.createMusicGroupCourseTeacherSalary(musicGroup, classGroupNoStartCourseSchedule, courseScheduleTeacherSalary);
                 courseScheduleTeacherSalaryList.add(courseScheduleTeacherSalary);
                 courseScheduleTeacherSalaryList.add(courseScheduleTeacherSalary);
 
 
                 TeacherAttendance teacherAttendance = new TeacherAttendance();
                 TeacherAttendance teacherAttendance = new TeacherAttendance();
@@ -412,7 +245,6 @@ public class ClassGroupTeacherMapperServiceImpl extends BaseServiceImpl<Long, Cl
     @Transactional(rollbackFor = Exception.class)
     @Transactional(rollbackFor = Exception.class)
     public void createCourseScheduleTeacherSalary(List<CourseSchedule> courseSchedules, Map<Long, CourseSchedule> oldCourseSchedules) {
     public void createCourseScheduleTeacherSalary(List<CourseSchedule> courseSchedules, Map<Long, CourseSchedule> oldCourseSchedules) {
         List<CourseScheduleTeacherSalary> courseScheduleTeacherSalaryList = new ArrayList<>();
         List<CourseScheduleTeacherSalary> courseScheduleTeacherSalaryList = new ArrayList<>();
-        Date entryDate = DateUtil.stringToDate(sysConfigDao.findByParamName(SysConfigService.TEACHER_ENTRY_DATE).getParanValue(), "yyyy-MM-dd");
 
 
         //课程编号列表
         //课程编号列表
         List<Long> courseScheduleIds = courseSchedules.stream().map(CourseSchedule::getId).collect(Collectors.toList());
         List<Long> courseScheduleIds = courseSchedules.stream().map(CourseSchedule::getId).collect(Collectors.toList());
@@ -429,11 +261,6 @@ public class ClassGroupTeacherMapperServiceImpl extends BaseServiceImpl<Long, Cl
         //所有老师列表
         //所有老师列表
         allTeacherIds = allTeacherIds.stream().distinct().collect(Collectors.toList());
         allTeacherIds = allTeacherIds.stream().distinct().collect(Collectors.toList());
 
 
-        //所有教师列表
-        List<Teacher> teachers = teacherDao.findByTeacherIds(allTeacherIds);
-        Map<Integer, Teacher> teacherMap = teachers.stream()
-                .collect(Collectors.toMap(Teacher::getId, teacher -> teacher));
-
         //所有老师默认乐团课酬
         //所有老师默认乐团课酬
         List<TeacherDefaultMusicGroupSalary> teacherDefaultMusicGroupSalaries = teacherDefaultMusicGroupSalaryDao.findByTeacher(allTeacherIds);
         List<TeacherDefaultMusicGroupSalary> teacherDefaultMusicGroupSalaries = teacherDefaultMusicGroupSalaryDao.findByTeacher(allTeacherIds);
         Map<CourseSchedule.CourseScheduleType, List<TeacherDefaultMusicGroupSalary>> teacherDefaultMusicGroupSalariesGroupByCourseType = teacherDefaultMusicGroupSalaries.stream().collect(Collectors.groupingBy(TeacherDefaultMusicGroupSalary::getCourseScheduleType));
         Map<CourseSchedule.CourseScheduleType, List<TeacherDefaultMusicGroupSalary>> teacherDefaultMusicGroupSalariesGroupByCourseType = teacherDefaultMusicGroupSalaries.stream().collect(Collectors.groupingBy(TeacherDefaultMusicGroupSalary::getCourseScheduleType));
@@ -463,25 +290,17 @@ public class ClassGroupTeacherMapperServiceImpl extends BaseServiceImpl<Long, Cl
                 throw new BizException("存在未指定结算方式的课程类型");
                 throw new BizException("存在未指定结算方式的课程类型");
             }
             }
 
 
-            //根据教师编号将对应结算方式下的默认课酬设置分组
-            Map<Integer, TeacherDefaultMusicGroupSalary> teacherDefaultMusicGroupSalariesGroupByTeacherId = teacherDefaultMusicGroupSalariesWithCourseType.stream().collect(Collectors.toMap(TeacherDefaultMusicGroupSalary::getUserId, teacherDefaultMusicGroupSalary -> teacherDefaultMusicGroupSalary));
-
             if (!courseSchedule.isBishopTeacherSalaryNotCreate()) {
             if (!courseSchedule.isBishopTeacherSalaryNotCreate()) {
-                Teacher teacher = teacherMap.get(courseSchedule.getActualTeacherId());
-                if (Objects.nonNull(teacher.getEntryDate())
-                        && (teacher.getEntryDate().after(entryDate) || teacher.getEntryDate().getTime() == entryDate.getTime())) {
-                    settlementType = SalarySettlementTypeEnum.GRADIENT_SALARY.getCode();
-                }
-
-                //根据课程获取主教的默认课酬设置列表
-                TeacherDefaultMusicGroupSalary teacherDefaultMusicGroupSalaryWithTeacherId = teacherDefaultMusicGroupSalariesGroupByTeacherId.get(courseSchedule.getActualTeacherId());
-                courseScheduleTeacherSalaryList.add(countMusicGroupTeacherSalary(
-                        courseSchedule,
-                        TeachTypeEnum.BISHOP,
-                        settlementType,
-                        courseSubsidyMap.get(courseSchedule.getId()),
-                        courseSchedule.getActualTeacherId().intValue(),
-                        teacherDefaultMusicGroupSalaryWithTeacherId));
+                CourseScheduleTeacherSalary courseScheduleTeacherSalary = new CourseScheduleTeacherSalary();
+                courseScheduleTeacherSalary.setGroupType(courseSchedule.getGroupType());
+                courseScheduleTeacherSalary.setMusicGroupId(courseSchedule.getMusicGroupId());
+                courseScheduleTeacherSalary.setClassGroupId(courseSchedule.getClassGroupId());
+                courseScheduleTeacherSalary.setCourseScheduleId(courseSchedule.getId());
+                courseScheduleTeacherSalary.setTeacherRole(TeachTypeEnum.BISHOP);
+                courseScheduleTeacherSalary.setUserId(courseSchedule.getActualTeacherId());
+                courseScheduleTeacherSalary.setSubsidy(courseSubsidyMap.get(courseSchedule.getId()));
+                courseScheduleTeacherSalaryService.createMusicGroupCourseTeacherSalary(null, courseSchedule, courseScheduleTeacherSalary);
+                courseScheduleTeacherSalaryList.add(courseScheduleTeacherSalary);
             }
             }
 
 
             //计算助教课程薪酬
             //计算助教课程薪酬
@@ -494,19 +313,16 @@ public class ClassGroupTeacherMapperServiceImpl extends BaseServiceImpl<Long, Cl
                 if (Objects.isNull(teacherId)) {
                 if (Objects.isNull(teacherId)) {
                     return;
                     return;
                 }
                 }
-                Teacher teacher = teacherMap.get(teacherId);
-                if (Objects.nonNull(teacher.getEntryDate())
-                        && (teacher.getEntryDate().after(entryDate) || teacher.getEntryDate().getTime() == entryDate.getTime())) {
-                    settlementType = SalarySettlementTypeEnum.GRADIENT_SALARY.getCode();
-                }
-                TeacherDefaultMusicGroupSalary teacherDefaultMusicGroupSalaryWithTeacherId = teacherDefaultMusicGroupSalariesGroupByTeacherId.get(teacherId);
-                courseScheduleTeacherSalaryList.add(countMusicGroupTeacherSalary(
-                        courseSchedule,
-                        TeachTypeEnum.TEACHING,
-                        settlementType,
-                        courseSubsidyMap.get(courseSchedule.getId()),
-                        teacherId,
-                        teacherDefaultMusicGroupSalaryWithTeacherId));
+                CourseScheduleTeacherSalary courseScheduleTeacherSalary = new CourseScheduleTeacherSalary();
+                courseScheduleTeacherSalary.setGroupType(courseSchedule.getGroupType());
+                courseScheduleTeacherSalary.setMusicGroupId(courseSchedule.getMusicGroupId());
+                courseScheduleTeacherSalary.setClassGroupId(courseSchedule.getClassGroupId());
+                courseScheduleTeacherSalary.setCourseScheduleId(courseSchedule.getId());
+                courseScheduleTeacherSalary.setTeacherRole(TeachTypeEnum.TEACHING);
+                courseScheduleTeacherSalary.setUserId(teacherId);
+                courseScheduleTeacherSalary.setSubsidy(courseSubsidyMap.get(courseSchedule.getId()));
+                courseScheduleTeacherSalaryService.createMusicGroupCourseTeacherSalary(null, courseSchedule, courseScheduleTeacherSalary);
+                courseScheduleTeacherSalaryList.add(courseScheduleTeacherSalary);
             }
             }
         }
         }
         if (!CollectionUtils.isEmpty(courseScheduleTeacherSalaryList)) {
         if (!CollectionUtils.isEmpty(courseScheduleTeacherSalaryList)) {
@@ -539,98 +355,6 @@ public class ClassGroupTeacherMapperServiceImpl extends BaseServiceImpl<Long, Cl
         courseScheduleTeacherSalaryService.batchInsert(courseScheduleTeacherSalaryList);
         courseScheduleTeacherSalaryService.batchInsert(courseScheduleTeacherSalaryList);
     }
     }
 
 
-    /**
-     * @param courseSchedule:                              课程信息
-     * @param teachType:                                   教师类型
-     * @param settlementType:                              结算方式
-     * @param subsidy:                                     补贴
-     * @param teacherId:                                   教师编号
-     * @param teacherDefaultMusicGroupSalaryWithTeacherId: 教师课酬
-     * @return com.ym.mec.biz.dal.entity.CourseScheduleTeacherSalary
-     * @describe 计算教师课酬
-     * @author Joburgess
-     * @date 2019/10/24
-     */
-    private CourseScheduleTeacherSalary countMusicGroupTeacherSalary(CourseSchedule courseSchedule,
-                                                                     TeachTypeEnum teachType,
-                                                                     String settlementType,
-                                                                     BigDecimal subsidy,
-                                                                     Integer teacherId,
-                                                                     TeacherDefaultMusicGroupSalary teacherDefaultMusicGroupSalaryWithTeacherId) {
-        if (Objects.isNull(teacherDefaultMusicGroupSalaryWithTeacherId)) {
-            throw new BizException("存在未设置默认课酬的教师");
-        }
-        //教师课酬
-        BigDecimal teacherSalary = new BigDecimal(0);
-
-        //课时长度
-        int duration = DateUtil.minutesBetween(courseSchedule.getStartClassTime(), courseSchedule.getEndClassTime());
-
-        BigDecimal teacherDefaultSalary = BigDecimal.ZERO;
-        BigDecimal baseTime = BigDecimal.ZERO;
-
-        //如果结算方式是教师默认课酬
-        if (settlementType.equals(SalarySettlementTypeEnum.TEACHER_DEFAULT.getCode())) {
-             baseTime = new BigDecimal(30);
-            teacherDefaultSalary = teachType == TeachTypeEnum.BISHOP ? teacherDefaultMusicGroupSalaryWithTeacherId.getMainTeacher30MinSalary() : teacherDefaultMusicGroupSalaryWithTeacherId.getAssistantTeacher30MinSalary();
-        } else if (settlementType.equals(SalarySettlementTypeEnum.GRADIENT_SALARY.getCode())) {
-            teacherDefaultSalary = teachType == TeachTypeEnum.BISHOP ? teacherDefaultMusicGroupSalaryWithTeacherId.getMainTeacher90MinSalary() : teacherDefaultMusicGroupSalaryWithTeacherId.getAssistantTeacher90MinSalary();
-            baseTime = new BigDecimal(90);
-        }
-        if (courseSchedule.getType().equals(CourseSchedule.CourseScheduleType.HIGH)) {
-            baseTime = new BigDecimal(45);
-        }else if (courseSchedule.getType().equals(CourseSchedule.CourseScheduleType.CLASSROOM)) {
-            baseTime = new BigDecimal(40);
-            teacherDefaultSalary = teachType == TeachTypeEnum.BISHOP ? teacherDefaultMusicGroupSalaryWithTeacherId.getMainTeacher30MinSalary() : teacherDefaultMusicGroupSalaryWithTeacherId.getAssistantTeacher30MinSalary();
-        }
-        //课程时长与结算单位时长占比
-        BigDecimal classTimeDuty = new BigDecimal(duration).divide(baseTime, CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN);
-
-        //课堂课课酬改为按分钟数计算,并且时长占比向下取整
-        if (courseSchedule.getType().equals(CourseSchedule.CourseScheduleType.CLASSROOM)){
-            teacherDefaultSalary = teachType.equals(TeachTypeEnum.BISHOP) ? teacherDefaultMusicGroupSalaryWithTeacherId.getMainTeacher30MinSalary() : teacherDefaultMusicGroupSalaryWithTeacherId.getAssistantTeacher30MinSalary();
-            classTimeDuty = new BigDecimal(duration).divide(new BigDecimal(40), BigDecimal.ZERO.intValue(), BigDecimal.ROUND_DOWN);
-        }
-        teacherSalary = teacherDefaultSalary.multiply(classTimeDuty).setScale(2, BigDecimal.ROUND_HALF_UP);
-
-        //课堂课课酬
-//        if (courseSchedule.getType().equals(CourseSchedule.CourseScheduleType.CLASSROOM)) {
-//            teacherSalary = teachType.equals(TeachTypeEnum.BISHOP) ? teacherDefaultMusicGroupSalaryWithTeacherId.getMainTeacher30MinSalary() : teacherDefaultMusicGroupSalaryWithTeacherId.getAssistantTeacher30MinSalary();
-//        }
-        //基础技能提高课
-        if (courseSchedule.getType().equals(CourseSchedule.CourseScheduleType.HIGH)) {
-            teacherSalary = teachType.equals(TeachTypeEnum.BISHOP) ? teacherDefaultMusicGroupSalaryWithTeacherId.getMainTeacher30MinSalary() : teacherDefaultMusicGroupSalaryWithTeacherId.getAssistantTeacher30MinSalary();
-            if (settlementType.equals(SalarySettlementTypeEnum.GRADIENT_SALARY)) {
-                teacherSalary = teachType.equals(TeachTypeEnum.BISHOP) ? teacherDefaultMusicGroupSalaryWithTeacherId.getMainTeacher90MinSalary() : teacherDefaultMusicGroupSalaryWithTeacherId.getAssistantTeacher90MinSalary();
-            }
-        }
-        //线上小班课
-        if (courseSchedule.getType().equals(CourseSchedule.CourseScheduleType.HIGH_ONLINE)) {
-            Integer studentNum = classGroupStudentMapperDao.countClassGroupNormalStudentNum(courseSchedule.getClassGroupId());
-            if (studentNum < 3 || studentNum > 5) {
-                ClassGroup classGroup = classGroupService.get(courseSchedule.getClassGroupId());
-                String numWaring = studentNum < 3 ? "人数不能小于3," : "人数不能大于5,";
-                throw new BizException(classGroup.getName() + numWaring + "请调整");
-            }
-            teacherSalary = JSON.parseObject(teacherDefaultMusicGroupSalaryWithTeacherId.getSalaryRuleJson()).getBigDecimal(studentNum.toString());
-        }
-
-        if (courseSchedule.getType().equals(CourseSchedule.CourseScheduleType.MUSIC_NETWORK)) {
-            teacherSalary = JSON.parseObject(teacherDefaultMusicGroupSalaryWithTeacherId.getSalaryRuleJson()).getBigDecimal("1");
-        }
-
-        CourseScheduleTeacherSalary courseScheduleTeacherSalary = new CourseScheduleTeacherSalary(
-                courseSchedule.getId(),
-                teachType,
-                teacherId,
-                teacherSalary,
-                subsidy,
-                courseSchedule.getClassGroupId());
-        courseScheduleTeacherSalary.setGroupType(courseSchedule.getGroupType());
-        courseScheduleTeacherSalary.setMusicGroupId(courseSchedule.getMusicGroupId());
-        return courseScheduleTeacherSalary;
-    }
-
     public List<ClassGroupTeacherMapper> getClassGroupTeachers(Integer classGroupId) {
     public List<ClassGroupTeacherMapper> getClassGroupTeachers(Integer classGroupId) {
         return classGroupTeacherMapperDao.findClassGroupTeachers(classGroupId.toString());
         return classGroupTeacherMapperDao.findClassGroupTeachers(classGroupId.toString());
     }
     }

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

@@ -506,9 +506,6 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 			// 乐团结算方式
 			// 乐团结算方式
 			settlementType = musicGroup.getSettlementType().getCode();
 			settlementType = musicGroup.getSettlementType().getCode();
 
 
-			// 老师入职的分界线
-			entryDate = DateUtil.stringToDate(sysConfigDao.findByParamName(SysConfigService.TEACHER_ENTRY_DATE).getParanValue(), "yyyy-MM-dd");
-
 			// 所有老师默认乐团课酬
 			// 所有老师默认乐团课酬
 			List<TeacherDefaultMusicGroupSalary> teacherDefaultMusicGroupSalaries = teacherDefaultMusicGroupSalaryDao.findByTeacher(teacherIdList);
 			List<TeacherDefaultMusicGroupSalary> teacherDefaultMusicGroupSalaries = teacherDefaultMusicGroupSalaryDao.findByTeacher(teacherIdList);
 
 
@@ -3150,9 +3147,6 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 			map.put(ts.getUserId(), ts);
 			map.put(ts.getUserId(), ts);
 			courseScheduleTeacherSalaryMap.put(ts.getCourseScheduleId(), map);
 			courseScheduleTeacherSalaryMap.put(ts.getCourseScheduleId(), map);
 		}
 		}
-
-		Date entryDate = DateUtil.stringToDate(sysConfigDao.findByParamName(SysConfigService.TEACHER_ENTRY_DATE).getParanValue(), "yyyy-MM-dd");
-
 		List<CourseScheduleStudentPayment> insertCourseScheduleStudentPaymentList = new ArrayList<CourseScheduleStudentPayment>();
 		List<CourseScheduleStudentPayment> insertCourseScheduleStudentPaymentList = new ArrayList<CourseScheduleStudentPayment>();
 
 
 		for (CourseSchedule newCourseSchedule : newCourseSchedules) {
 		for (CourseSchedule newCourseSchedule : newCourseSchedules) {
@@ -3302,95 +3296,7 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 					ts.setUserId(teacherId);
 					ts.setUserId(teacherId);
 					// 重新生成课酬
 					// 重新生成课酬
 					if (newCourseSchedule.getGroupType() == GroupType.MUSIC) {
 					if (newCourseSchedule.getGroupType() == GroupType.MUSIC) {
-						Map<CourseScheduleType, TeacherDefaultMusicGroupSalary> map = musicGroupSalaryMap.get(teacherId);
-
-						if (map == null) {
-							SysUser user = sysUserFeignService.queryUserById(teacherId);
-							throw new BizException("老师{}[{}]没有设置默认课酬,请先设置", user.getRealName(), teacherId);
-						}
-
-						TeacherDefaultMusicGroupSalary tdms = null;
-						if(newCourseSchedule.getType() == CourseScheduleType.HIGH){
-							tdms = map.get(CourseScheduleType.HIGH_ONLINE);
-						}else{
-							tdms = map.get(newCourseSchedule.getType());
-						}
-						if (tdms == null) {
-							SysUser user = sysUserFeignService.queryUserById(teacherId);
-							throw new BizException("老师{}[{}]没有设置默认课酬,请先设置", user.getRealName(), teacherId);
-						}
-
-						// 乐团结算方式
-						String settlementType = musicGroupSettlementsMap.get(courseScheduleId);
-						int unitMinutes = 30;
-
-						// 如果当前教师是在指定日期之后入职的,则按照3.0的方式结算
-						if (newCourseSchedule.getType() != CourseScheduleType.CLASSROOM) {
-							Teacher teacher = teacherMap.get(teacherId);
-							if (Objects.nonNull(teacher.getEntryDate())
-									&& (teacher.getEntryDate().after(entryDate) || teacher.getEntryDate().getTime() == entryDate.getTime())) {
-								settlementType = SalarySettlementTypeEnum.GRADIENT_SALARY.getCode();
-							}
-						}
-						if (StringUtils.equals(settlementType, "TEACHER_DEFAULT")) {
-							if (newCourseSchedule.getType() == CourseScheduleType.CLASSROOM) {
-								unitMinutes = 40;
-							} else if (newCourseSchedule.getType() == CourseScheduleType.HIGH) {
-								unitMinutes = 45;
-							}
-							if (ts.getTeacherRole() == TeachTypeEnum.BISHOP) {
-								ts.setExpectSalary(new BigDecimal(tdms.getMainTeacher30MinSalary().doubleValue() * newMinutes / unitMinutes));
-							} else {
-								ts.setExpectSalary(new BigDecimal(tdms.getAssistantTeacher30MinSalary().doubleValue() * newMinutes / unitMinutes));
-							}
-						} else if (StringUtils.equals(settlementType, "GRADIENT_SALARY")) {
-							unitMinutes = 90;
-							if (newCourseSchedule.getType() == CourseScheduleType.CLASSROOM) {
-								unitMinutes = 40;
-							} else if (newCourseSchedule.getType() == CourseScheduleType.HIGH) {
-								unitMinutes = 45;
-							}
-							if (ts.getTeacherRole() == TeachTypeEnum.BISHOP) {
-								ts.setExpectSalary(new BigDecimal(tdms.getMainTeacher90MinSalary().doubleValue() * newMinutes / unitMinutes));
-							} else {
-								ts.setExpectSalary(new BigDecimal(tdms.getAssistantTeacher90MinSalary().doubleValue() * newMinutes / unitMinutes));
-							}
-						}
-
-						//课堂课课酬
-						if (newCourseSchedule.getType() == CourseScheduleType.CLASSROOM) {
-							BigDecimal salary = ts.getTeacherRole().equals(TeachTypeEnum.BISHOP) ? tdms.getMainTeacher30MinSalary() : tdms.getAssistantTeacher30MinSalary();
-							ts.setExpectSalary(salary);
-						}
-						//基础技能提高课
-						/*if (newCourseSchedule.getType() == CourseScheduleType.HIGH) {
-							BigDecimal salary = ts.getTeacherRole().equals(TeachTypeEnum.BISHOP) ? tdms.getMainTeacher30MinSalary() : tdms.getAssistantTeacher30MinSalary();
-							if (StringUtils.equals(settlementType, "GRADIENT_SALARY")) {
-								salary = ts.getTeacherRole().equals(TeachTypeEnum.BISHOP) ? tdms.getMainTeacher90MinSalary() : tdms.getAssistantTeacher90MinSalary();
-							}
-							ts.setExpectSalary(salary);
-						}*/
-
-						if((newCourseSchedule.getType() == CourseScheduleType.HIGH_ONLINE ||
-								newCourseSchedule.getType().equals(CourseSchedule.CourseScheduleType.MUSIC_NETWORK)) &&
-										StringUtils.isBlank(tdms.getSalaryRuleJson())
-								){
-								throw new BizException("请设置老师默认课酬");
-						}
-
-						//线上小班课
-						if(newCourseSchedule.getType() == CourseScheduleType.HIGH_ONLINE || newCourseSchedule.getType() == CourseScheduleType.MUSIC_NETWORK || newCourseSchedule.getType() == CourseScheduleType.HIGH){
-							Integer studentNum = classGroupStudentMapperDao.countClassGroupNormalStudentNum(ts.getClassGroupId());
-							if (studentNum > 5) {
-								studentNum = 5;
-							}
-							BigDecimal salary = JSON.parseObject(tdms.getSalaryRuleJson()).getBigDecimal(studentNum.toString());
-							if(Objects.isNull(salary)){
-								throw new BizException("请设置老师默认课酬");
-							}
-							ts.setExpectSalary(salary);
-						}
-
+						courseScheduleTeacherSalaryService.createMusicGroupCourseTeacherSalary(null, newCourseSchedule, ts);
 					} else if (newCourseSchedule.getGroupType() == GroupType.VIP) {
 					} else if (newCourseSchedule.getGroupType() == GroupType.VIP) {
 						Map<String, BigDecimal> salaryMap = vipGroupService.countVipGroupPredictFee(vipGroup, teacherId, null, null);
 						Map<String, BigDecimal> salaryMap = vipGroupService.countVipGroupPredictFee(vipGroup, teacherId, null, null);
 
 

+ 146 - 122
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleTeacherSalaryServiceImpl.java

@@ -19,6 +19,7 @@ import com.ym.mec.thirdparty.message.MessageSenderPluginContext;
 import com.ym.mec.util.collection.MapUtil;
 import com.ym.mec.util.collection.MapUtil;
 import com.ym.mec.util.date.DateUtil;
 import com.ym.mec.util.date.DateUtil;
 
 
+import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -27,12 +28,8 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Isolation;
 import org.springframework.transaction.annotation.Isolation;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
 import org.springframework.util.CollectionUtils;
-import org.springframework.util.StringUtils;
 
 
 import java.math.BigDecimal;
 import java.math.BigDecimal;
-import java.math.RoundingMode;
-import java.time.Duration;
-import java.time.LocalDateTime;
 import java.util.*;
 import java.util.*;
 import java.util.stream.Collectors;
 import java.util.stream.Collectors;
 
 
@@ -82,15 +79,10 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
     private MusicGroupDao musicGroupDao;
     private MusicGroupDao musicGroupDao;
     @Autowired
     @Autowired
     private TeacherDefaultPracticeGroupSalaryDao teacherDefaultPracticeGroupSalaryDao;
     private TeacherDefaultPracticeGroupSalaryDao teacherDefaultPracticeGroupSalaryDao;
-    @Autowired
-    private VipGroupDao vipGroupDao;
 
 
     private static final Logger LOGGER = LoggerFactory
     private static final Logger LOGGER = LoggerFactory
             .getLogger(CourseScheduleTeacherSalaryServiceImpl.class);
             .getLogger(CourseScheduleTeacherSalaryServiceImpl.class);
 
 
-    //按节数计算课酬的课程类型
-    protected static final Set<CourseSchedule.CourseScheduleType> UNIT_PRICE_COURSE_TYPES=new HashSet<>(Arrays.asList(CourseSchedule.CourseScheduleType.HIGH_ONLINE, CourseSchedule.CourseScheduleType.MUSIC_NETWORK));
-
     @Override
     @Override
     public BaseDAO<Long, CourseScheduleTeacherSalary> getDAO() {
     public BaseDAO<Long, CourseScheduleTeacherSalary> getDAO() {
         return courseScheduleTeacherSalaryDao;
         return courseScheduleTeacherSalaryDao;
@@ -204,85 +196,54 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
     @Override
     @Override
     @Transactional(rollbackFor = Exception.class)
     @Transactional(rollbackFor = Exception.class)
     public void practiceTeacherSalarySettlement() {
     public void practiceTeacherSalarySettlement() {
-//        int days = Integer.parseInt(sysConfigDao.findByParamName(SysConfigService.VIP_APPEAL_DAYS_RANGE).getParanValue());
-//        int days = 0;
         //获取教师未结算课程记录
         //获取教师未结算课程记录
         Date now = new Date();
         Date now = new Date();
         Date date = DateUtil.addMonths(now, -1);
         Date date = DateUtil.addMonths(now, -1);
         String startDate = DateUtil.format(DateUtil.getFirstDayOfMonth(date),DateUtil.DEFAULT_PATTERN);
         String startDate = DateUtil.format(DateUtil.getFirstDayOfMonth(date),DateUtil.DEFAULT_PATTERN);
         String endDate = DateUtil.format(DateUtil.getLastDayOfMonth(date),DateUtil.DEFAULT_PATTERN);
         String endDate = DateUtil.format(DateUtil.getLastDayOfMonth(date),DateUtil.DEFAULT_PATTERN);
         List<CourseScheduleTeacherSalary> someDayAgoTeacherCourseSalaryNoSettlement = courseScheduleTeacherSalaryDao.findTeacherCourseSalaryNoSettlement(startDate,endDate);
         List<CourseScheduleTeacherSalary> someDayAgoTeacherCourseSalaryNoSettlement = courseScheduleTeacherSalaryDao.findTeacherCourseSalaryNoSettlement(startDate,endDate);
-        if (!CollectionUtils.isEmpty(someDayAgoTeacherCourseSalaryNoSettlement)) {
-            someDayAgoTeacherCourseSalaryNoSettlement.forEach(courseScheduleTeacherSalary -> {
-                courseScheduleTeacherSalary.setActualSalary(courseScheduleTeacherSalary.getTeacherActualSalary().setScale(BigDecimal.ZERO.intValue(), BigDecimal.ROUND_HALF_UP));
-                courseScheduleTeacherSalary.setSettlementTime(now);
-                courseScheduleTeacherSalaryDao.update(courseScheduleTeacherSalary);
-            });
+
+        Set<Long> courseScheduleIds = someDayAgoTeacherCourseSalaryNoSettlement.stream().map(CourseScheduleTeacherSalary::getCourseScheduleId).collect(Collectors.toSet());
+
+        //教师签到记录
+        List<TeacherAttendance> allTeacherAttendances = teacherAttendanceDao.findByCourseSchedules(new ArrayList<>(courseScheduleIds));
+        Map<String, List<TeacherAttendance>> teacherCourseAttendanceMap = allTeacherAttendances.stream().collect(Collectors.groupingBy(ta -> org.apache.commons.lang3.StringUtils.joinWith(":", ta.getCourseScheduleId(), ta.getTeacherId())));
+
+        if (CollectionUtils.isEmpty(someDayAgoTeacherCourseSalaryNoSettlement)) {
+            return;
         }
         }
-        //获取未转结的
-        List<TeacherCourseReward> teacherCourseRewards = teacherCourseRewardService.findBySettlementStatus(0);
-        if(teacherCourseRewards.size() > 0){
-            //逗号分隔的课程拆分
-            List<String> collect = teacherCourseRewards.stream().map(e -> e.getCourseScheduleIdList()).collect(Collectors.toList());
-            List<Long> courseScheduleIds = new ArrayList<>();
-            collect.forEach(e->{
-                if(!StringUtils.isEmpty(e)){
-                    String[] split = e.split(",");
-                    for (String s : split) {
-                        courseScheduleIds.add(Long.parseLong(s));
-                    }
-                }
-            });
-            if (courseScheduleIds.size() > 0){
-                //去掉有未结束课程的数据
-                List<Long> mapList = courseScheduleDao.findNotStartCourseByIds(courseScheduleIds);
-                List<TeacherAttendance> teacherAttendances = teacherAttendanceDao.findTeacherIdByCourseSchedule(courseScheduleIds);
-                Map<Long, TeacherAttendance> teacherAttendancesMap = teacherAttendances.stream().collect(Collectors.toMap(TeacherAttendance::getCourseScheduleId,t -> t));
-                String courseScheduleIdList = null;
-                StringBuffer memo;
-                BigDecimal multiply;
-                BigDecimal add;
-                outer1:for (TeacherCourseReward e : teacherCourseRewards) {
-                    memo = new StringBuffer();
-                    courseScheduleIdList = e.getCourseScheduleIdList();
-                    if(!StringUtils.isEmpty(courseScheduleIdList)){
-                        String[] split = courseScheduleIdList.split(",");
-                        for (String s : split) {
-                            //如果包含未结算的课程,不转结
-                            if(mapList.contains(Long.parseLong(s))){
-                                continue outer1;
-                            }
-                        }
-                        //转结,是否正常签到,签退
-                        BigDecimal expectRewardAmount = e.getExpectRewardAmount().divide(new BigDecimal(split.length));
-                        multiply = expectRewardAmount.multiply(new BigDecimal(0.5));
-                        add = expectRewardAmount.multiply(new BigDecimal(0));
-                        for (String s : split) {
-                            //如果包含未结算的课程,不转结
-                            TeacherAttendance teacherAttendance = teacherAttendancesMap.get(Long.parseLong(s));
-                            if(teacherAttendance == null){
-                                throw new BizException("教师签到记录不存在 : courseScheduleId:{}",s);
-                            }
-                            if(teacherAttendance.getSignInStatus() == null || teacherAttendance.getSignInStatus() == YesOrNoEnum.NO){
-                                expectRewardAmount = expectRewardAmount.subtract(multiply);
-                                memo.append("课程").append(s).append("异常签到;");
-                            }
-                            if(teacherAttendance.getSignOutStatus() == null || teacherAttendance.getSignOutStatus() == YesOrNoEnum.NO){
-                                expectRewardAmount = expectRewardAmount.subtract(multiply);
-                                memo.append("课程").append(s).append("异常签退;");
-                            }
-                            add = add.add(expectRewardAmount);
-                            expectRewardAmount = e.getExpectRewardAmount().divide(new BigDecimal(split.length));
-                        }
-                        e.setMemo(memo.toString());
-                        e.setActualRewardAmount(add);
-                        e.setSettlementStatus(YesOrNoEnum.YES);
-                        e.setSettlementDate(now);
-                    }
-                }
-                teacherCourseRewardService.batchUpdate(teacherCourseRewards);
+
+        someDayAgoTeacherCourseSalaryNoSettlement.forEach(courseScheduleTeacherSalary -> {
+
+            //扣除费用
+            BigDecimal deductCost = new BigDecimal(0);
+            List<String> deductReasons = new ArrayList<>();
+            List<TeacherAttendance> courseTeacherAttendances = teacherCourseAttendanceMap.get(org.apache.commons.lang3.StringUtils.joinWith(":", courseScheduleTeacherSalary.getCourseScheduleId(), courseScheduleTeacherSalary.getUserId()));
+
+            TeacherAttendance teacherAttendance = courseTeacherAttendances.get(0);
+            if(CollectionUtils.isEmpty(courseTeacherAttendances)||Objects.isNull(teacherAttendance.getSignInStatus())||YesOrNoEnum.NO.equals(teacherAttendance.getSignInStatus())){
+                //未签到或异常签到扣除一半课酬
+                deductCost = deductCost.add(courseScheduleTeacherSalary.getExpectSalary().divide(new BigDecimal(2)));
+                deductReasons.add("未签到或异常签到扣除一半课酬");
             }
             }
-        }
+
+            if(CollectionUtils.isEmpty(courseTeacherAttendances)||Objects.isNull(teacherAttendance.getSignOutStatus())||YesOrNoEnum.NO.equals(teacherAttendance.getSignOutStatus())){
+                //未签退或异常签退扣除一半课酬
+                deductCost = deductCost.add(courseScheduleTeacherSalary.getExpectSalary().divide(new BigDecimal(2)));
+                deductReasons.add("未签退或异常签退扣除一半课酬");
+            }
+
+            BigDecimal finalSalary = courseScheduleTeacherSalary.getExpectSalary().subtract(deductCost).setScale(BigDecimal.ZERO.intValue(), BigDecimal.ROUND_HALF_UP);
+
+            if(BigDecimal.ZERO.compareTo(deductCost)<0){
+                deductReasons.add("扣除总费用:" + deductCost);
+            }
+
+            courseScheduleTeacherSalary.setActualSalary(finalSalary);
+            courseScheduleTeacherSalary.setSettlementTime(now);
+            courseScheduleTeacherSalary.setDeductionReason(StringUtils.join(deductReasons, ";"));
+            courseScheduleTeacherSalaryDao.update(courseScheduleTeacherSalary);
+        });
     }
     }
 
 
     @Override
     @Override
@@ -330,31 +291,41 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
         //获取未结算课程编号列表
         //获取未结算课程编号列表
         List<Long> courseScheduleIds = someDayAgoTeacherCourseSalaryNoSettlement.stream().map(CourseScheduleTeacherSalary::getCourseScheduleId).collect(Collectors.toList());
         List<Long> courseScheduleIds = someDayAgoTeacherCourseSalaryNoSettlement.stream().map(CourseScheduleTeacherSalary::getCourseScheduleId).collect(Collectors.toList());
 
 
-        //获取未结算课程学生缴费信息
-        List<CourseScheduleStudentPayment> courseScheduleStudentPayments = courseScheduleStudentPaymentDao.findByCourseScheduleIds(courseScheduleIds);
-
-        //根据课程将学生缴费信息分组
-        Map<Long, List<CourseScheduleStudentPayment>> studentPaymentGroupByCourse = courseScheduleStudentPayments.stream().collect(Collectors.groupingBy(CourseScheduleStudentPayment::getCourseScheduleId));
-
-        //需更新教师课程结算记录
-        List<CourseScheduleTeacherSalary> updateTeacherSalarys = new ArrayList<>();
+        //教师签到记录
+        List<TeacherAttendance> allTeacherAttendances = teacherAttendanceDao.findByCourseSchedules(courseScheduleIds);
+        Map<String, List<TeacherAttendance>> teacherCourseAttendanceMap = allTeacherAttendances.stream().collect(Collectors.groupingBy(ta -> org.apache.commons.lang3.StringUtils.joinWith(":", ta.getCourseScheduleId(), ta.getTeacherId())));
 
 
         //处理课酬信息
         //处理课酬信息
         someDayAgoTeacherCourseSalaryNoSettlement.forEach(courseScheduleTeacherSalary -> {
         someDayAgoTeacherCourseSalaryNoSettlement.forEach(courseScheduleTeacherSalary -> {
 
 
-            //获取当前课程学生缴费记录
-            List<CourseScheduleStudentPayment> studentPaymentsWithCourse = studentPaymentGroupByCourse.get(courseScheduleTeacherSalary.getCourseScheduleId());
+            //扣除费用
+            BigDecimal deductCost = new BigDecimal(0);
+            List<String> deductReasons = new ArrayList<>();
+            List<TeacherAttendance> courseTeacherAttendances = teacherCourseAttendanceMap.get(org.apache.commons.lang3.StringUtils.joinWith(":", courseScheduleTeacherSalary.getCourseScheduleId(), courseScheduleTeacherSalary.getUserId()));
+
+            TeacherAttendance teacherAttendance = courseTeacherAttendances.get(0);
+            if(CollectionUtils.isEmpty(courseTeacherAttendances)||Objects.isNull(teacherAttendance.getSignInStatus())||YesOrNoEnum.NO.equals(teacherAttendance.getSignInStatus())){
+                //未签到或异常签到扣除一半课酬
+                deductCost = deductCost.add(courseScheduleTeacherSalary.getExpectSalary().divide(new BigDecimal(2)));
+                deductReasons.add("未签到或异常签到扣除一半课酬");
+            }
 
 
-            if (CollectionUtils.isEmpty(studentPaymentsWithCourse)) {
-                return;
+            if(CollectionUtils.isEmpty(courseTeacherAttendances)||Objects.isNull(teacherAttendance.getSignOutStatus())||YesOrNoEnum.NO.equals(teacherAttendance.getSignOutStatus())){
+                //未签退或异常签退扣除一半课酬
+                deductCost = deductCost.add(courseScheduleTeacherSalary.getExpectSalary().divide(new BigDecimal(2)));
+                deductReasons.add("未签退或异常签退扣除一半课酬");
             }
             }
-            BigDecimal expectSalary = courseScheduleTeacherSalary.getTeacherActualSalary().setScale(BigDecimal.ZERO.intValue(), BigDecimal.ROUND_HALF_UP);
 
 
-            courseScheduleTeacherSalary.setActualSalary(expectSalary);
+            if(BigDecimal.ZERO.compareTo(deductCost)<0){
+                deductReasons.add("扣除总费用:" + deductCost);
+            }
+
+            BigDecimal finalSalary = courseScheduleTeacherSalary.getExpectSalary().subtract(deductCost).setScale(BigDecimal.ZERO.intValue(), BigDecimal.ROUND_HALF_UP);
+
+            courseScheduleTeacherSalary.setActualSalary(finalSalary);
+            courseScheduleTeacherSalary.setDeductionReason(StringUtils.join(deductReasons, ";"));
             courseScheduleTeacherSalary.setSettlementTime(now);
             courseScheduleTeacherSalary.setSettlementTime(now);
             courseScheduleTeacherSalaryDao.update(courseScheduleTeacherSalary);
             courseScheduleTeacherSalaryDao.update(courseScheduleTeacherSalary);
-            updateTeacherSalarys.add(courseScheduleTeacherSalary);
-
         });
         });
     }
     }
 
 
@@ -412,6 +383,10 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
                     .collect(Collectors.groupingBy(StudentAttendance::getCourseScheduleId, Collectors.counting()));
                     .collect(Collectors.groupingBy(StudentAttendance::getCourseScheduleId, Collectors.counting()));
         }
         }
 
 
+        //课程对应乐团结算方式集合
+        List<Map<String, String>> musicGroupSettlementTypeByCourse = courseScheduleTeacherSalaryDao.findMusicGroupSettlementTypeByCourse(courseScheduleIds);
+        Map<String, String> musicGroupSettlementsMap = MapUtil.convertMybatisMap(musicGroupSettlementTypeByCourse);
+
         //所有老师编号
         //所有老师编号
         List<Integer> allTeacherIds = courseScheduleTeacherSalaries.stream()
         List<Integer> allTeacherIds = courseScheduleTeacherSalaries.stream()
                 .map(CourseScheduleTeacherSalary::getUserId)
                 .map(CourseScheduleTeacherSalary::getUserId)
@@ -456,7 +431,40 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
                     teacherSalary = BigDecimal.ZERO;
                     teacherSalary = BigDecimal.ZERO;
                 }
                 }
             }else if(CourseSchedule.CourseScheduleType.HIGH.equals(courseSchedule.getType())){
             }else if(CourseSchedule.CourseScheduleType.HIGH.equals(courseSchedule.getType())){
+                //根据课程类型获取对应的默认课酬设置列表
+                List<TeacherDefaultMusicGroupSalary> teacherDefaultMusicGroupSalariesWithCourseType = teacherDefaultMusicGroupSalariesGroupByCourseType.get(courseSchedule.getType());
+                if (CollectionUtils.isEmpty(teacherDefaultMusicGroupSalariesWithCourseType)) {
+                    LOGGER.error("存在未指定结算方式的课程类型[{}]", courseScheduleTeacherSalary.getId());
+                    continue;
+                }
+
+                //根据教师编号将对应结算方式下的默认课酬设置分组
+                Map<Integer, TeacherDefaultMusicGroupSalary> teacherDefaultMusicGroupSalariesGroupByTeacherId = teacherDefaultMusicGroupSalariesWithCourseType.stream().collect(Collectors.toMap(TeacherDefaultMusicGroupSalary::getUserId, teacherDefaultMusicGroupSalary -> teacherDefaultMusicGroupSalary));
+
+                TeacherDefaultMusicGroupSalary teacherDefaultMusicGroupSalaryWithTeacherId = teacherDefaultMusicGroupSalariesGroupByTeacherId.get(courseScheduleTeacherSalary.getUserId());
+
+                Long normalStudentNum = courseNormalStudentsMap.get(courseSchedule.getId());
+                if(Objects.isNull(normalStudentNum)){
+                    normalStudentNum = Long.valueOf(0);
+                }
+
+                //结算方式
+                String settlementType = musicGroupSettlementsMap.get(courseScheduleTeacherSalary.getCourseScheduleId());
+                if(StringUtils.isEmpty(settlementType)){
+                    LOGGER.error("未指定课酬结算方式[{}]", courseScheduleTeacherSalary.getId());
+                    continue;
+                }
+
+                teacherSalary = TeachTypeEnum.BISHOP.equals(courseScheduleTeacherSalary.getTeacherRole()) ? teacherDefaultMusicGroupSalaryWithTeacherId.getMainTeacher30MinSalary() : teacherDefaultMusicGroupSalaryWithTeacherId.getAssistantTeacher30MinSalary();
+                if (settlementType.equals(SalarySettlementTypeEnum.GRADIENT_SALARY)) {
+                    teacherSalary = TeachTypeEnum.BISHOP.equals(courseScheduleTeacherSalary.getTeacherRole()) ? teacherDefaultMusicGroupSalaryWithTeacherId.getMainTeacher90MinSalary() : teacherDefaultMusicGroupSalaryWithTeacherId.getAssistantTeacher90MinSalary();
+                }
 
 
+                if(Objects.isNull(teacherSalary)){
+                    LOGGER.error("教师课酬设置异常{}", courseSchedule.getId());
+                    continue;
+                }
+                teacherSalary = teacherSalary.multiply(new BigDecimal(normalStudentNum));
             }else{
             }else{
                 teacherSalary=courseScheduleTeacherSalary.getExpectSalary();
                 teacherSalary=courseScheduleTeacherSalary.getExpectSalary();
             }
             }
@@ -519,6 +527,10 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
 
 
             BigDecimal finalSalary = teacherSalary.subtract(deductCost).setScale(BigDecimal.ZERO.intValue(), BigDecimal.ROUND_HALF_UP);
             BigDecimal finalSalary = teacherSalary.subtract(deductCost).setScale(BigDecimal.ZERO.intValue(), BigDecimal.ROUND_HALF_UP);
 
 
+            if(BigDecimal.ZERO.compareTo(deductCost)<0){
+                deductReasons.add("扣除总费用:" + deductCost);
+            }
+
             //更新教师结算信息
             //更新教师结算信息
             courseScheduleTeacherSalary.setActualSalary(finalSalary.compareTo(BigDecimal.ZERO)<0?BigDecimal.ZERO:finalSalary);
             courseScheduleTeacherSalary.setActualSalary(finalSalary.compareTo(BigDecimal.ZERO)<0?BigDecimal.ZERO:finalSalary);
             courseScheduleTeacherSalary.setSettlementTime(now);
             courseScheduleTeacherSalary.setSettlementTime(now);
@@ -865,20 +877,28 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
         switch (courseSchedule.getGroupType()){
         switch (courseSchedule.getGroupType()){
             case MUSIC:
             case MUSIC:
                 //生成乐团课课酬
                 //生成乐团课课酬
-                createMusicGroupCourseTeacherSalary(courseSchedule, courseScheduleTeacherSalaries);
+                createMusicGroupCourseTeacherSalaries(null, courseSchedule, courseScheduleTeacherSalaries);
                 break;
                 break;
             case VIP:
             case VIP:
                 //生成vip课课酬
                 //生成vip课课酬
-                createVipGroupCourseTeacherSalary(courseSchedule, courseScheduleTeacherSalaries);
+                createVipGroupCourseTeacherSalaries(courseSchedule, courseScheduleTeacherSalaries);
                 break;
                 break;
             case PRACTICE:
             case PRACTICE:
                 //生成网管课课酬
                 //生成网管课课酬
-                createPracticeGroupCourseTeacherSalary(courseSchedule, courseScheduleTeacherSalaries);
+                createPracticeGroupCourseTeacherSalaries(courseSchedule, courseScheduleTeacherSalaries);
                 break;
                 break;
         }
         }
         return courseScheduleTeacherSalaries;
         return courseScheduleTeacherSalaries;
     }
     }
 
 
+    @Override
+    public void createMusicGroupCourseTeacherSalary(MusicGroup musicGroup, CourseSchedule courseSchedule, CourseScheduleTeacherSalary courseScheduleTeacherSalary) {
+        List<CourseScheduleTeacherSalary> teacherSalaries = new ArrayList<>();
+        teacherSalaries.add(courseScheduleTeacherSalary);
+        createMusicGroupCourseTeacherSalaries(musicGroup,courseSchedule,teacherSalaries);
+        courseScheduleTeacherSalary.setExpectSalary(teacherSalaries.get(0).getExpectSalary());
+    }
+
     /**
     /**
      * @describe 创建课程指定教师的课酬记录-乐团课
      * @describe 创建课程指定教师的课酬记录-乐团课
      * @author Joburgess
      * @author Joburgess
@@ -887,22 +907,22 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
      * @param courseScheduleTeacherSalaries: 教师课酬记录基本信息
      * @param courseScheduleTeacherSalaries: 教师课酬记录基本信息
      * @return java.util.List<com.ym.mec.biz.dal.entity.CourseScheduleTeacherSalary>
      * @return java.util.List<com.ym.mec.biz.dal.entity.CourseScheduleTeacherSalary>
      */
      */
-    private void createMusicGroupCourseTeacherSalary(CourseSchedule courseSchedule, List<CourseScheduleTeacherSalary> courseScheduleTeacherSalaries) {
-        MusicGroup musicGroup = musicGroupDao.get(courseSchedule.getMusicGroupId());
+    private void createMusicGroupCourseTeacherSalaries(MusicGroup musicGroup, CourseSchedule courseSchedule, List<CourseScheduleTeacherSalary> courseScheduleTeacherSalaries) {
+        if(Objects.isNull(musicGroup)){
+            musicGroup = musicGroupDao.get(courseSchedule.getMusicGroupId());
+        }
 
 
         List<Integer> teacherIds = courseScheduleTeacherSalaries.stream().map(CourseScheduleTeacherSalary::getUserId).collect(Collectors.toList());
         List<Integer> teacherIds = courseScheduleTeacherSalaries.stream().map(CourseScheduleTeacherSalary::getUserId).collect(Collectors.toList());
 
 
-        List<Teacher> teachers = teacherDao.findByTeacherIds(teacherIds);
-        Map<Integer, Teacher> teacherMap = teachers.stream().collect(Collectors.toMap(Teacher::getId, teacher -> teacher));
-
         List<TeacherDefaultMusicGroupSalary> allTeacherDefaultMusicGroupSalary = teacherDefaultMusicGroupSalaryDao.findByTeacher(teacherIds);
         List<TeacherDefaultMusicGroupSalary> allTeacherDefaultMusicGroupSalary = teacherDefaultMusicGroupSalaryDao.findByTeacher(teacherIds);
         Map<Integer, List<TeacherDefaultMusicGroupSalary>> teacherSalaryMap = allTeacherDefaultMusicGroupSalary.stream().collect(Collectors.groupingBy(TeacherDefaultMusicGroupSalary::getUserId));
         Map<Integer, List<TeacherDefaultMusicGroupSalary>> teacherSalaryMap = allTeacherDefaultMusicGroupSalary.stream().collect(Collectors.groupingBy(TeacherDefaultMusicGroupSalary::getUserId));
 
 
-        Date entryDate = DateUtil.stringToDate(sysConfigDao.findByParamName(SysConfigService.TEACHER_ENTRY_DATE).getParanValue(), "yyyy-MM-dd");
-
         long classCourseDuration = DateUtil.minutesBetween(courseSchedule.getStartClassTime(), courseSchedule.getEndClassTime());
         long classCourseDuration = DateUtil.minutesBetween(courseSchedule.getStartClassTime(), courseSchedule.getEndClassTime());
 
 
         for (CourseScheduleTeacherSalary courseScheduleTeacherSalary : courseScheduleTeacherSalaries) {
         for (CourseScheduleTeacherSalary courseScheduleTeacherSalary : courseScheduleTeacherSalaries) {
+            if(Objects.isNull(courseScheduleTeacherSalary.getTeacherRole())){
+                throw new BizException("请指定教师类型");
+            }
             List<TeacherDefaultMusicGroupSalary> teacherSalaryList = teacherSalaryMap.get(courseScheduleTeacherSalary.getUserId());
             List<TeacherDefaultMusicGroupSalary> teacherSalaryList = teacherSalaryMap.get(courseScheduleTeacherSalary.getUserId());
 
 
             BigDecimal salary;
             BigDecimal salary;
@@ -911,8 +931,8 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
 
 
             TeacherDefaultMusicGroupSalary teacherDefaultMusicGroupSalary = collect.get(courseSchedule.getType());
             TeacherDefaultMusicGroupSalary teacherDefaultMusicGroupSalary = collect.get(courseSchedule.getType());
 
 
-            Teacher teacher = teacherMap.get(courseScheduleTeacherSalary.getUserId());
             if (teacherDefaultMusicGroupSalary == null) {
             if (teacherDefaultMusicGroupSalary == null) {
+                Teacher teacher = teacherDao.get(courseScheduleTeacherSalary.getUserId());
                 throw new BizException("请设置" + teacher.getRealName() + "老师的" + courseSchedule.getType().getMsg() + "课酬");
                 throw new BizException("请设置" + teacher.getRealName() + "老师的" + courseSchedule.getType().getMsg() + "课酬");
             }
             }
 
 
@@ -920,27 +940,23 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
             BigDecimal baseSalary = new BigDecimal(0), classTimeDuty = new BigDecimal(0);
             BigDecimal baseSalary = new BigDecimal(0), classTimeDuty = new BigDecimal(0);
 
 
             SalarySettlementTypeEnum settlementType = musicGroup.getSettlementType();
             SalarySettlementTypeEnum settlementType = musicGroup.getSettlementType();
-            if (Objects.nonNull(teacher.getEntryDate())
-                    && (teacher.getEntryDate().after(entryDate) || teacher.getEntryDate().getTime() == entryDate.getTime())) {
-                settlementType = SalarySettlementTypeEnum.GRADIENT_SALARY;
-            }
 
 
             //基准课酬
             //基准课酬
             if (settlementType.equals(SalarySettlementTypeEnum.TEACHER_DEFAULT) && teacherDefaultMusicGroupSalary != null) {
             if (settlementType.equals(SalarySettlementTypeEnum.TEACHER_DEFAULT) && teacherDefaultMusicGroupSalary != null) {
                 //课程时长与结算单位时长占比
                 //课程时长与结算单位时长占比
                 classTimeDuty = new BigDecimal(classCourseDuration).divide(new BigDecimal(30), CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN);
                 classTimeDuty = new BigDecimal(classCourseDuration).divide(new BigDecimal(30), CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN);
-                baseSalary = courseScheduleTeacherSalary.getTeacherRole().equals(TeachTypeEnum.BISHOP) ? teacherDefaultMusicGroupSalary.getMainTeacher30MinSalary() : teacherDefaultMusicGroupSalary.getAssistantTeacher30MinSalary();
+                baseSalary = TeachTypeEnum.BISHOP.equals(courseScheduleTeacherSalary.getTeacherRole()) ? teacherDefaultMusicGroupSalary.getMainTeacher30MinSalary() : teacherDefaultMusicGroupSalary.getAssistantTeacher30MinSalary();
             }
             }
             //阶梯课酬
             //阶梯课酬
             if (settlementType.equals(SalarySettlementTypeEnum.GRADIENT_SALARY) && teacherDefaultMusicGroupSalary != null) {
             if (settlementType.equals(SalarySettlementTypeEnum.GRADIENT_SALARY) && teacherDefaultMusicGroupSalary != null) {
                 //课程时长与结算单位时长占比
                 //课程时长与结算单位时长占比
                 classTimeDuty = new BigDecimal(classCourseDuration).divide(new BigDecimal(90), CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN);
                 classTimeDuty = new BigDecimal(classCourseDuration).divide(new BigDecimal(90), CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN);
-                baseSalary = courseScheduleTeacherSalary.getTeacherRole().equals(TeachTypeEnum.BISHOP) ? teacherDefaultMusicGroupSalary.getMainTeacher90MinSalary() : teacherDefaultMusicGroupSalary.getAssistantTeacher90MinSalary();
+                baseSalary = TeachTypeEnum.BISHOP.equals(courseScheduleTeacherSalary.getTeacherRole()) ? teacherDefaultMusicGroupSalary.getMainTeacher90MinSalary() : teacherDefaultMusicGroupSalary.getAssistantTeacher90MinSalary();
             }
             }
 
 
             //课堂课课酬改为按分钟数计算,并且时长占比向下取整
             //课堂课课酬改为按分钟数计算,并且时长占比向下取整
             if (courseSchedule.getType().equals(CourseSchedule.CourseScheduleType.CLASSROOM)){
             if (courseSchedule.getType().equals(CourseSchedule.CourseScheduleType.CLASSROOM)){
-                baseSalary = courseScheduleTeacherSalary.getTeacherRole().equals(TeachTypeEnum.BISHOP) ? teacherDefaultMusicGroupSalary.getMainTeacher30MinSalary() : teacherDefaultMusicGroupSalary.getAssistantTeacher30MinSalary();
+                baseSalary = TeachTypeEnum.BISHOP.equals(courseScheduleTeacherSalary.getTeacherRole()) ? teacherDefaultMusicGroupSalary.getMainTeacher30MinSalary() : teacherDefaultMusicGroupSalary.getAssistantTeacher30MinSalary();
                 classTimeDuty = new BigDecimal(classCourseDuration).divide(new BigDecimal(40), BigDecimal.ZERO.intValue(), BigDecimal.ROUND_DOWN);
                 classTimeDuty = new BigDecimal(classCourseDuration).divide(new BigDecimal(40), BigDecimal.ZERO.intValue(), BigDecimal.ROUND_DOWN);
             }
             }
 
 
@@ -948,17 +964,21 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
 
 
             //基础技能提高课
             //基础技能提高课
             if (courseSchedule.getType().equals(CourseSchedule.CourseScheduleType.HIGH)) {
             if (courseSchedule.getType().equals(CourseSchedule.CourseScheduleType.HIGH)) {
-                salary = courseScheduleTeacherSalary.getTeacherRole().equals(TeachTypeEnum.BISHOP) ? teacherDefaultMusicGroupSalary.getMainTeacher30MinSalary() : teacherDefaultMusicGroupSalary.getAssistantTeacher30MinSalary();
+                salary = TeachTypeEnum.BISHOP.equals(courseScheduleTeacherSalary.getTeacherRole()) ? teacherDefaultMusicGroupSalary.getMainTeacher30MinSalary() : teacherDefaultMusicGroupSalary.getAssistantTeacher30MinSalary();
                 if (settlementType.equals(SalarySettlementTypeEnum.GRADIENT_SALARY)) {
                 if (settlementType.equals(SalarySettlementTypeEnum.GRADIENT_SALARY)) {
-                    salary = courseScheduleTeacherSalary.getTeacherRole().equals(TeachTypeEnum.BISHOP) ? teacherDefaultMusicGroupSalary.getMainTeacher90MinSalary() : teacherDefaultMusicGroupSalary.getAssistantTeacher90MinSalary();
+                    salary = TeachTypeEnum.BISHOP.equals(courseScheduleTeacherSalary.getTeacherRole()) ? teacherDefaultMusicGroupSalary.getMainTeacher90MinSalary() : teacherDefaultMusicGroupSalary.getAssistantTeacher90MinSalary();
+                }
+                if(Objects.isNull(salary)){
+                    throw new BizException("课酬设置异常");
                 }
                 }
+                Integer studentNum = classGroupStudentMapperDao.countClassGroupNormalStudentNum(courseSchedule.getClassGroupId());
+                salary = salary.multiply(new BigDecimal(studentNum));
             }
             }
             //线上小班课
             //线上小班课
             if (courseSchedule.getType().equals(CourseSchedule.CourseScheduleType.HIGH_ONLINE)) {
             if (courseSchedule.getType().equals(CourseSchedule.CourseScheduleType.HIGH_ONLINE)) {
                 Integer studentNum = classGroupStudentMapperDao.countClassGroupNormalStudentNum(courseSchedule.getClassGroupId());
                 Integer studentNum = classGroupStudentMapperDao.countClassGroupNormalStudentNum(courseSchedule.getClassGroupId());
-                if (studentNum < 3 || studentNum > 5) {
-                    String numWaring = studentNum < 3 ? "小班课人数不能小于3," : "小班课人数不能大于5,";
-                    throw new BizException( numWaring + "请调整");
+                if(studentNum>5){
+                    studentNum=5;
                 }
                 }
                 salary = JSON.parseObject(teacherDefaultMusicGroupSalary.getSalaryRuleJson()).getBigDecimal(studentNum.toString());
                 salary = JSON.parseObject(teacherDefaultMusicGroupSalary.getSalaryRuleJson()).getBigDecimal(studentNum.toString());
             }
             }
@@ -967,6 +987,10 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
                 salary = JSON.parseObject(teacherDefaultMusicGroupSalary.getSalaryRuleJson()).getBigDecimal("1");
                 salary = JSON.parseObject(teacherDefaultMusicGroupSalary.getSalaryRuleJson()).getBigDecimal("1");
             }
             }
 
 
+            if(Objects.isNull(salary)){
+                throw new BizException("课酬设置异常");
+            }
+
             courseScheduleTeacherSalary.setExpectSalary(salary);
             courseScheduleTeacherSalary.setExpectSalary(salary);
         }
         }
     }
     }
@@ -979,10 +1003,10 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
      * @param courseScheduleTeacherSalaries: 教师课酬记录基本信息
      * @param courseScheduleTeacherSalaries: 教师课酬记录基本信息
      * @return java.util.List<com.ym.mec.biz.dal.entity.CourseScheduleTeacherSalary>
      * @return java.util.List<com.ym.mec.biz.dal.entity.CourseScheduleTeacherSalary>
      */
      */
-    private void createVipGroupCourseTeacherSalary(CourseSchedule courseSchedule, List<CourseScheduleTeacherSalary> courseScheduleTeacherSalaries){
+    private void createVipGroupCourseTeacherSalaries(CourseSchedule courseSchedule, List<CourseScheduleTeacherSalary> courseScheduleTeacherSalaries){
         VipGroup vipGroup = vipGroupService.get(Long.valueOf(courseSchedule.getMusicGroupId()));
         VipGroup vipGroup = vipGroupService.get(Long.valueOf(courseSchedule.getMusicGroupId()));
         for (CourseScheduleTeacherSalary courseScheduleTeacherSalary : courseScheduleTeacherSalaries) {
         for (CourseScheduleTeacherSalary courseScheduleTeacherSalary : courseScheduleTeacherSalaries) {
-            Map<String, BigDecimal> salaryMap = vipGroupService.countVipGroupPredictFee(vipGroup, courseSchedule.getActualTeacherId(), null, null);
+            Map<String, BigDecimal> salaryMap = vipGroupService.countVipGroupCoursePredictFee(vipGroup, courseSchedule.getActualTeacherId(), courseSchedule.getId());
             courseScheduleTeacherSalary.setExpectSalary(courseSchedule.getTeachMode() == TeachModeEnum.OFFLINE?salaryMap.get("offlineTeacherSalary"):salaryMap.get("onlineTeacherSalary"));
             courseScheduleTeacherSalary.setExpectSalary(courseSchedule.getTeachMode() == TeachModeEnum.OFFLINE?salaryMap.get("offlineTeacherSalary"):salaryMap.get("onlineTeacherSalary"));
         }
         }
     }
     }
@@ -995,7 +1019,7 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
      * @param courseScheduleTeacherSalaries: 教师课酬记录基本信息
      * @param courseScheduleTeacherSalaries: 教师课酬记录基本信息
      * @return java.util.List<com.ym.mec.biz.dal.entity.CourseScheduleTeacherSalary>
      * @return java.util.List<com.ym.mec.biz.dal.entity.CourseScheduleTeacherSalary>
      */
      */
-    private void createPracticeGroupCourseTeacherSalary(CourseSchedule courseSchedule, List<CourseScheduleTeacherSalary> courseScheduleTeacherSalaries){
+    private void createPracticeGroupCourseTeacherSalaries(CourseSchedule courseSchedule, List<CourseScheduleTeacherSalary> courseScheduleTeacherSalaries){
         List<Integer> teacherIds = courseScheduleTeacherSalaries.stream().map(CourseScheduleTeacherSalary::getUserId).collect(Collectors.toList());
         List<Integer> teacherIds = courseScheduleTeacherSalaries.stream().map(CourseScheduleTeacherSalary::getUserId).collect(Collectors.toList());
 
 
         List<TeacherDefaultPracticeGroupSalary> allTeacherDefaultPracticeGroupSalaryList = teacherDefaultPracticeGroupSalaryDao.queryByUserIdList(teacherIds);
         List<TeacherDefaultPracticeGroupSalary> allTeacherDefaultPracticeGroupSalaryList = teacherDefaultPracticeGroupSalaryDao.queryByUserIdList(teacherIds);

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

@@ -532,61 +532,6 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
         }
         }
     }
     }
 
 
-    @Override
-	@Transactional(rollbackFor = Exception.class)
-	public void updateVipGroup(VipGroupApplyDto vipGroupApplyInfo) {
-		VipGroupApplyBaseInfoDto vipGroupUpdateInfo = vipGroupApplyInfo.getVipGroupApplyBaseInfo();
-		//更新vip课
-		updateVipGroupBaseInfo(vipGroupUpdateInfo);
-
-		//课程调整
-		List<CourseSchedule> courseSchedules = vipGroupApplyInfo.getCourseSchedules();
-		if(CollectionUtils.isEmpty(courseSchedules)){
-			return;
-		}
-
-		//只需要调整课程信息的课程列表
-		List<CourseSchedule> updateCourseSchedules = courseSchedules
-				.stream()
-				.filter(courseSchedule -> Objects.nonNull(courseSchedule.getId()))
-				.collect(Collectors.toList());
-		List<Long> updateCourseScheduleIds = updateCourseSchedules.stream().map(CourseSchedule::getId).collect(Collectors.toList());
-
-		//新增的课程列表
-		List<CourseSchedule> newCourseSchedules = courseSchedules
-				.stream()
-				.filter(courseSchedule -> Objects.nonNull(courseSchedule.getId()))
-				.collect(Collectors.toList());
-
-		//指定VIP课原有的课程列表
-		List<CourseSchedule> vipGroupCourseSchedules = courseScheduleDao.findGroupCourseSchedules(vipGroupUpdateInfo.getId(),GroupType.VIP.getCode());
-
-		if(!CollectionUtils.isEmpty(updateCourseSchedules)){
-			//需要删除的课程编号列表
-			List<Long> deleteCourseScheduleIds = vipGroupCourseSchedules.stream()
-					.filter(courseSchedule -> !updateCourseScheduleIds.contains(courseSchedule.getId()))
-					.map(CourseSchedule::getId)
-					.collect(Collectors.toList());
-			//删除对应的课程及相关信息
-			courseScheduleService.batchDeleteCourseSchedules(deleteCourseScheduleIds);
-
-		}
-
-		//检测课程信息是否存在冲突
-		courseScheduleService.checkNewCourseSchedules(courseSchedules,false,false);
-		//只需要更新的课程走课程调整流程
-		courseScheduleService.classStartDateAdjust(updateCourseSchedules);
-
-		//新增的课程需要重新创建相关信息
-		courseScheduleService.batchAddCourseSchedule(newCourseSchedules);
-		//创建老师单节课课酬信息
-		courseScheduleTeacherSalaryService.createCourseScheduleTeacherVipSalary(vipGroupUpdateInfo,
-				newCourseSchedules,
-				vipGroupUpdateInfo.getOnlineTeacherSalary(),
-				vipGroupUpdateInfo.getOfflineTeacherSalary());
-
-	}
-
 	@Override
 	@Override
 	public void vipApplyAudit(Long vipGroupId, AuditStatusEnum auditStatus, String reason) {
 	public void vipApplyAudit(Long vipGroupId, AuditStatusEnum auditStatus, String reason) {
 		if(Objects.isNull(vipGroupId)||Objects.isNull(auditStatus)){
 		if(Objects.isNull(vipGroupId)||Objects.isNull(auditStatus)){

+ 3 - 9
mec-biz/src/main/resources/config/mybatis/CourseScheduleTeacherSalaryMapper.xml

@@ -267,14 +267,11 @@
     <select id="findSomeDayAgoTeacherCourseSalaryNoSettlement" resultMap="CourseScheduleTeacherSalary">
     <select id="findSomeDayAgoTeacherCourseSalaryNoSettlement" resultMap="CourseScheduleTeacherSalary">
 		SELECT
 		SELECT
 		cs.class_date_,
 		cs.class_date_,
-		csts.*,csts.expect_salary_ * (CASE WHEN (ta.sign_in_status_ IS NULL OR ta.sign_in_status_ = 0) AND (ta.sign_out_status_ IS NULL OR ta.sign_out_status_ = 0) THEN 0
-		WHEN ta.sign_in_status_ IS NULL OR ta.sign_in_status_ = 0 THEN 0.5
-		WHEN ta.sign_out_status_ IS NULL OR ta.sign_out_status_ = 0 THEN 0.5 ELSE 1 END) teacher_actual_salary_
+		csts.*
 		FROM
 		FROM
 		course_schedule_teacher_salary csts
 		course_schedule_teacher_salary csts
 		LEFT JOIN course_schedule cs ON cs.id_ = csts.course_schedule_id_
 		LEFT JOIN course_schedule cs ON cs.id_ = csts.course_schedule_id_
 		LEFT JOIN vip_group vg ON vg.id_ = cs.music_group_id_
 		LEFT JOIN vip_group vg ON vg.id_ = cs.music_group_id_
-		LEFT JOIN teacher_attendance ta ON ta.course_schedule_id_ = cs.id_
 		WHERE 1=1
 		WHERE 1=1
 		<if test="startDate != null">
 		<if test="startDate != null">
 			AND cs.class_date_ BETWEEN #{startDate} AND #{endDate}
 			AND cs.class_date_ BETWEEN #{startDate} AND #{endDate}
@@ -298,14 +295,11 @@
     <select id="findTeacherCourseSalaryNoSettlement" resultMap="CourseScheduleTeacherSalary">
     <select id="findTeacherCourseSalaryNoSettlement" resultMap="CourseScheduleTeacherSalary">
 		SELECT
 		SELECT
 		cs.class_date_,
 		cs.class_date_,
-		csts.*,csts.expect_salary_ * (CASE WHEN (ta.sign_in_status_ IS NULL OR ta.sign_in_status_ = 0) AND (ta.sign_out_status_ IS NULL OR ta.sign_out_status_ = 0) THEN 0
-		WHEN ta.sign_in_status_ IS NULL OR ta.sign_in_status_ = 0 THEN 0.5
-		WHEN ta.sign_out_status_ IS NULL OR ta.sign_out_status_ = 0 THEN 0.5 ELSE 1 END) teacher_actual_salary_
+		csts.*
 		FROM
 		FROM
 		course_schedule_teacher_salary csts
 		course_schedule_teacher_salary csts
 		LEFT JOIN course_schedule cs ON cs.id_ = csts.course_schedule_id_
 		LEFT JOIN course_schedule cs ON cs.id_ = csts.course_schedule_id_
-		LEFT JOIN teacher_attendance ta ON ta.course_schedule_id_ = cs.id_
-		WHERE ta.id_ IS NOT NULL
+		WHERE 1=1
 		<if test="startDate != null">
 		<if test="startDate != null">
 			AND cs.class_date_ BETWEEN #{startDate} AND #{endDate}
 			AND cs.class_date_ BETWEEN #{startDate} AND #{endDate}
 		</if>
 		</if>