|  | @@ -52,6 +52,8 @@ public class ClassGroupTeacherMapperServiceImpl extends BaseServiceImpl<Long, Cl
 | 
	
		
			
				|  |  |      private TeacherAttendanceDao teacherAttendanceDao;
 | 
	
		
			
				|  |  |      @Autowired
 | 
	
		
			
				|  |  |      private CourseScheduleDao courseScheduleDao;
 | 
	
		
			
				|  |  | +    @Autowired
 | 
	
		
			
				|  |  | +    private TeacherDao teacherDao;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      @Override
 | 
	
		
			
				|  |  |      public BaseDAO<Long, ClassGroupTeacherMapper> getDAO() {
 | 
	
	
		
			
				|  | @@ -155,6 +157,7 @@ public class ClassGroupTeacherMapperServiceImpl extends BaseServiceImpl<Long, Cl
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      public boolean classGroupTeacherMapperUpdate(List<ClassGroupTeacherMapper> classGroupTeacherMapperList) throws Exception {
 | 
	
		
			
				|  |  |          Date date = new Date();
 | 
	
		
			
				|  |  | +        Date entryDate = DateUtil.stringToDate(sysConfigDao.findByParamName(SysConfigService.TEACHER_ENTRY_DATE).getParanValue());
 | 
	
		
			
				|  |  |          List<Integer> classGroupIds = classGroupTeacherMapperList.stream().map(classGroupTeacherMapper -> classGroupTeacherMapper.getClassGroupId()).collect(Collectors.toList());
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          List<CourseSchedule> classGroupNoStartCourseSchedules = courseScheduleService.findClassGroupNoStartCourseSchedules(classGroupIds, GroupType.MUSIC);
 | 
	
	
		
			
				|  | @@ -174,6 +177,11 @@ public class ClassGroupTeacherMapperServiceImpl extends BaseServiceImpl<Long, Cl
 | 
	
		
			
				|  |  |          String musicGroupId = classGroupTeacherMapperList.get(0).getMusicGroupId();
 | 
	
		
			
				|  |  |          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());
 | 
	
		
			
				|  |  |          courseScheduleTeacherSalaryDao.batchDeleteByCourseScheduleIds(courseScheduleIds);
 | 
	
	
		
			
				|  | @@ -186,7 +194,7 @@ public class ClassGroupTeacherMapperServiceImpl extends BaseServiceImpl<Long, Cl
 | 
	
		
			
				|  |  |                  if (!classGroupTeacherMapper.getClassGroupId().equals(classGroupNoStartCourseSchedule.getClassGroupId())) {
 | 
	
		
			
				|  |  |                      continue;
 | 
	
		
			
				|  |  |                  }
 | 
	
		
			
				|  |  | -                BigDecimal salary = new BigDecimal("0");
 | 
	
		
			
				|  |  | +                BigDecimal salary;
 | 
	
		
			
				|  |  |                  List<TeacherDefaultMusicGroupSalary> teacherDefaultMusicGroupSalaryList = classGroupTeacherMapper.getTeacherDefaultMusicGroupSalaryList();
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |                  Map<CourseSchedule.CourseScheduleType, TeacherDefaultMusicGroupSalary> collect = teacherDefaultMusicGroupSalaryList.stream().collect(Collectors.toMap(TeacherDefaultMusicGroupSalary::getCourseScheduleType, teacherDefaultMusicGroupSalary -> teacherDefaultMusicGroupSalary));
 | 
	
	
		
			
				|  | @@ -202,15 +210,21 @@ public class ClassGroupTeacherMapperServiceImpl extends BaseServiceImpl<Long, Cl
 | 
	
		
			
				|  |  |                  //对应基准课酬
 | 
	
		
			
				|  |  |                  BigDecimal baseSalary = new BigDecimal(0), classTimeDuty = new BigDecimal(0);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +                Teacher teacher = teacherMap.get(classGroupTeacherMapper.getUserId());
 | 
	
		
			
				|  |  | +                SalarySettlementTypeEnum settlementType = musicGroup.getSettlementType();
 | 
	
		
			
				|  |  | +                if(teacher.getEntryDate().after(entryDate)){
 | 
	
		
			
				|  |  | +                    settlementType = SalarySettlementTypeEnum.GRADIENT_SALARY;
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |                  //2.0课酬
 | 
	
		
			
				|  |  | -                if (musicGroup.getSettlementType().equals(SalarySettlementTypeEnum.TEACHER_DEFAULT)) {
 | 
	
		
			
				|  |  | +                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 (musicGroup.getSettlementType().equals(SalarySettlementTypeEnum.GRADIENT_SALARY)) {
 | 
	
		
			
				|  |  | +                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();
 | 
	
	
		
			
				|  | @@ -226,7 +240,7 @@ public class ClassGroupTeacherMapperServiceImpl extends BaseServiceImpl<Long, Cl
 | 
	
		
			
				|  |  |                      //课程时长与结算单位时长占比
 | 
	
		
			
				|  |  |                      classTimeDuty = new BigDecimal(duration).divide(new BigDecimal(45), CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN);
 | 
	
		
			
				|  |  |                      baseSalary = classGroupTeacherMapper.getTeacherRole().equals(TeachTypeEnum.BISHOP) ? teacherDefaultMusicGroupSalary.getMainTeacher30MinSalary() : teacherDefaultMusicGroupSalary.getAssistantTeacher30MinSalary();
 | 
	
		
			
				|  |  | -                    if (musicGroup.getSettlementType().equals(SalarySettlementTypeEnum.GRADIENT_SALARY)) {
 | 
	
		
			
				|  |  | +                    if (settlementType.equals(SalarySettlementTypeEnum.GRADIENT_SALARY)) {
 | 
	
		
			
				|  |  |                          baseSalary = classGroupTeacherMapper.getTeacherRole().equals(TeachTypeEnum.BISHOP) ? teacherDefaultMusicGroupSalary.getMainTeacher90MinSalary() : teacherDefaultMusicGroupSalary.getAssistantTeacher90MinSalary();
 | 
	
		
			
				|  |  |                      }
 | 
	
		
			
				|  |  |                  }
 | 
	
	
		
			
				|  | @@ -255,6 +269,14 @@ public class ClassGroupTeacherMapperServiceImpl extends BaseServiceImpl<Long, Cl
 | 
	
		
			
				|  |  |      public void createMusicGroupTeacherMapper(List<CourseSchedule> courseSchedules, String musicGroupId) {
 | 
	
		
			
				|  |  |          Date date = new Date();
 | 
	
		
			
				|  |  |          MusicGroup musicGroup = musicGroupService.get(musicGroupId);
 | 
	
		
			
				|  |  | +        Date entryDate = DateUtil.stringToDate(sysConfigDao.findByParamName(SysConfigService.TEACHER_ENTRY_DATE).getParanValue());
 | 
	
		
			
				|  |  | +        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) {
 | 
	
	
		
			
				|  | @@ -279,15 +301,21 @@ public class ClassGroupTeacherMapperServiceImpl extends BaseServiceImpl<Long, Cl
 | 
	
		
			
				|  |  |                  //对应基准课酬
 | 
	
		
			
				|  |  |                  BigDecimal baseSalary = new BigDecimal(0), classTimeDuty = new BigDecimal(0);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +                Teacher teacher = teacherMap.get(classGroupTeacherMapper.getUserId());
 | 
	
		
			
				|  |  | +                SalarySettlementTypeEnum settlementType = musicGroup.getSettlementType();
 | 
	
		
			
				|  |  | +                if(teacher.getEntryDate().after(entryDate)){
 | 
	
		
			
				|  |  | +                    settlementType = SalarySettlementTypeEnum.GRADIENT_SALARY;
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |                  //2.0课酬
 | 
	
		
			
				|  |  | -                if (musicGroup.getSettlementType().equals(SalarySettlementTypeEnum.TEACHER_DEFAULT)) {
 | 
	
		
			
				|  |  | +                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 (musicGroup.getSettlementType().equals(SalarySettlementTypeEnum.GRADIENT_SALARY)) {
 | 
	
		
			
				|  |  | +                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();
 | 
	
	
		
			
				|  | @@ -338,6 +366,7 @@ public class ClassGroupTeacherMapperServiceImpl extends BaseServiceImpl<Long, Cl
 | 
	
		
			
				|  |  |      @Transactional(rollbackFor = Exception.class)
 | 
	
		
			
				|  |  |      public void createCourseScheduleTeacherSalary(List<CourseSchedule> courseSchedules, Map<Long, CourseSchedule> oldCourseSchedules) {
 | 
	
		
			
				|  |  |          List<CourseScheduleTeacherSalary> courseScheduleTeacherSalaryList = new ArrayList<>();
 | 
	
		
			
				|  |  | +        Date entryDate = DateUtil.stringToDate(sysConfigDao.findByParamName(SysConfigService.TEACHER_ENTRY_DATE).getParanValue());
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          //课程编号列表
 | 
	
		
			
				|  |  |          List<Long> courseScheduleIds = courseSchedules.stream().map(CourseSchedule::getId).collect(Collectors.toList());
 | 
	
	
		
			
				|  | @@ -350,6 +379,11 @@ public class ClassGroupTeacherMapperServiceImpl extends BaseServiceImpl<Long, Cl
 | 
	
		
			
				|  |  |          //所有老师列表
 | 
	
		
			
				|  |  |          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);
 | 
	
		
			
				|  |  |          Map<CourseSchedule.CourseScheduleType, List<TeacherDefaultMusicGroupSalary>> teacherDefaultMusicGroupSalariesGroupByCourseType = teacherDefaultMusicGroupSalaries.stream().collect(Collectors.groupingBy(TeacherDefaultMusicGroupSalary::getCourseScheduleType));
 | 
	
	
		
			
				|  | @@ -383,6 +417,11 @@ public class ClassGroupTeacherMapperServiceImpl extends BaseServiceImpl<Long, Cl
 | 
	
		
			
				|  |  |              Map<Integer, TeacherDefaultMusicGroupSalary> teacherDefaultMusicGroupSalariesGroupByTeacherId = teacherDefaultMusicGroupSalariesWithCourseType.stream().collect(Collectors.toMap(TeacherDefaultMusicGroupSalary::getUserId, teacherDefaultMusicGroupSalary -> teacherDefaultMusicGroupSalary));
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |              if (!courseSchedule.isBishopTeacherSalaryNotCreate()) {
 | 
	
		
			
				|  |  | +                Teacher teacher = teacherMap.get(courseSchedule.getActualTeacherId());
 | 
	
		
			
				|  |  | +                if(teacher.getEntryDate().after(entryDate)){
 | 
	
		
			
				|  |  | +                    settlementType = SalarySettlementTypeEnum.GRADIENT_SALARY.getCode();
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |                  //根据课程获取主教的默认课酬设置列表
 | 
	
		
			
				|  |  |                  TeacherDefaultMusicGroupSalary teacherDefaultMusicGroupSalaryWithTeacherId = teacherDefaultMusicGroupSalariesGroupByTeacherId.get(courseSchedule.getActualTeacherId());
 | 
	
		
			
				|  |  |                  courseScheduleTeacherSalaryList.add(countMusicGroupTeacherSalary(
 | 
	
	
		
			
				|  | @@ -400,7 +439,11 @@ public class ClassGroupTeacherMapperServiceImpl extends BaseServiceImpl<Long, Cl
 | 
	
		
			
				|  |  |              if (CollectionUtils.isEmpty(teachingTeacherIdList)) {
 | 
	
		
			
				|  |  |                  return;
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  | -            teachingTeacherIdList.forEach(teacherId -> {
 | 
	
		
			
				|  |  | +            for (Integer teacherId : teachingTeacherIdList) {
 | 
	
		
			
				|  |  | +                Teacher teacher = teacherMap.get(teacherId);
 | 
	
		
			
				|  |  | +                if(teacher.getEntryDate().after(entryDate)){
 | 
	
		
			
				|  |  | +                    settlementType = SalarySettlementTypeEnum.GRADIENT_SALARY.getCode();
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  |                  TeacherDefaultMusicGroupSalary teacherDefaultMusicGroupSalaryWithTeacherId = teacherDefaultMusicGroupSalariesGroupByTeacherId.get(teacherId);
 | 
	
		
			
				|  |  |                  courseScheduleTeacherSalaryList.add(countMusicGroupTeacherSalary(
 | 
	
		
			
				|  |  |                          courseSchedule,
 | 
	
	
		
			
				|  | @@ -409,7 +452,7 @@ public class ClassGroupTeacherMapperServiceImpl extends BaseServiceImpl<Long, Cl
 | 
	
		
			
				|  |  |                          courseSubsidyMap.get(courseSchedule.getId()),
 | 
	
		
			
				|  |  |                          teacherId,
 | 
	
		
			
				|  |  |                          teacherDefaultMusicGroupSalaryWithTeacherId));
 | 
	
		
			
				|  |  | -            });
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  |          });
 | 
	
		
			
				|  |  |          courseScheduleTeacherSalaryService.batchInsert(courseScheduleTeacherSalaryList);
 | 
	
		
			
				|  |  |      }
 | 
	
	
		
			
				|  | @@ -443,13 +486,27 @@ public class ClassGroupTeacherMapperServiceImpl extends BaseServiceImpl<Long, Cl
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          //如果结算方式是教师默认课酬
 | 
	
		
			
				|  |  |          if (settlementType.equals(SalarySettlementTypeEnum.TEACHER_DEFAULT.getCode())) {
 | 
	
		
			
				|  |  | +            BigDecimal baseTime = new BigDecimal(30);
 | 
	
		
			
				|  |  | +            if (courseSchedule.getType().equals(CourseSchedule.CourseScheduleType.HIGH)) {
 | 
	
		
			
				|  |  | +                baseTime = new BigDecimal(45);
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +            if (courseSchedule.getType().equals(CourseSchedule.CourseScheduleType.CLASSROOM)) {
 | 
	
		
			
				|  |  | +                baseTime = new BigDecimal(45);
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  |              //课程时长与结算单位时长占比
 | 
	
		
			
				|  |  | -            BigDecimal classTimeDuty = new BigDecimal(duration).divide(new BigDecimal(30), CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN);
 | 
	
		
			
				|  |  | +            BigDecimal classTimeDuty = new BigDecimal(duration).divide(baseTime, CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN);
 | 
	
		
			
				|  |  |              BigDecimal teacherDefaultSalary = teachType == TeachTypeEnum.BISHOP ? teacherDefaultMusicGroupSalaryWithTeacherId.getMainTeacher30MinSalary() : teacherDefaultMusicGroupSalaryWithTeacherId.getAssistantTeacher30MinSalary();
 | 
	
		
			
				|  |  |              teacherSalary = teacherDefaultSalary.multiply(classTimeDuty).setScale(2, BigDecimal.ROUND_HALF_UP);
 | 
	
		
			
				|  |  |          } else if (settlementType.equals(SalarySettlementTypeEnum.GRADIENT_SALARY.getCode())) {
 | 
	
		
			
				|  |  | +            BigDecimal baseTime = new BigDecimal(90);
 | 
	
		
			
				|  |  | +            if (courseSchedule.getType().equals(CourseSchedule.CourseScheduleType.HIGH)) {
 | 
	
		
			
				|  |  | +                baseTime = new BigDecimal(45);
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +            if (courseSchedule.getType().equals(CourseSchedule.CourseScheduleType.CLASSROOM)) {
 | 
	
		
			
				|  |  | +                baseTime = new BigDecimal(45);
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  |              //课程时长与结算单位时长占比
 | 
	
		
			
				|  |  | -            BigDecimal classTimeDuty = new BigDecimal(duration).divide(new BigDecimal(90), CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN);
 | 
	
		
			
				|  |  | +            BigDecimal classTimeDuty = new BigDecimal(duration).divide(baseTime, CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN);
 | 
	
		
			
				|  |  |              BigDecimal teacherDefaultSalary = teachType == TeachTypeEnum.BISHOP ? teacherDefaultMusicGroupSalaryWithTeacherId.getMainTeacher90MinSalary() : teacherDefaultMusicGroupSalaryWithTeacherId.getAssistantTeacher90MinSalary();
 | 
	
		
			
				|  |  |              teacherSalary = teacherDefaultSalary.multiply(classTimeDuty).setScale(2, BigDecimal.ROUND_HALF_UP);
 | 
	
		
			
				|  |  |          }
 |