|  | @@ -1,12 +1,7 @@
 | 
	
		
			
				|  |  |  package com.ym.mec.biz.service.impl;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  import java.math.BigDecimal;
 | 
	
		
			
				|  |  | -import java.util.ArrayList;
 | 
	
		
			
				|  |  | -import java.util.Date;
 | 
	
		
			
				|  |  | -import java.util.List;
 | 
	
		
			
				|  |  | -import java.util.Map;
 | 
	
		
			
				|  |  | -import java.util.Objects;
 | 
	
		
			
				|  |  | -import java.util.Set;
 | 
	
		
			
				|  |  | +import java.util.*;
 | 
	
		
			
				|  |  |  import java.util.stream.Collectors;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  import org.apache.commons.lang3.StringUtils;
 | 
	
	
		
			
				|  | @@ -91,7 +86,7 @@ public class ClassGroupTeacherMapperServiceImpl extends BaseServiceImpl<Long, Cl
 | 
	
		
			
				|  |  |                  if (!classGroup.getId().equals(classGroupTeacherMapper.getClassGroupId())) continue;
 | 
	
		
			
				|  |  |                  imGroupMemberList.add(new ImGroupMember(classGroupTeacherMapper.getUserId().toString()));
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  | -            if(imGroupMemberList.size()>0) {
 | 
	
		
			
				|  |  | +            if (imGroupMemberList.size() > 0) {
 | 
	
		
			
				|  |  |                  ImGroupMember[] imGroupMembers = imGroupMemberList.toArray(new ImGroupMember[imGroupMemberList.size()]);
 | 
	
		
			
				|  |  |                  imFeignService.groupQuit(new ImGroupModel(classGroup.getId().toString(), imGroupMembers, classGroup.getName()));
 | 
	
		
			
				|  |  |              }
 | 
	
	
		
			
				|  | @@ -119,35 +114,30 @@ public class ClassGroupTeacherMapperServiceImpl extends BaseServiceImpl<Long, Cl
 | 
	
		
			
				|  |  |      public boolean classGroupTeacherMapperUpdate(List<ClassGroupTeacherMapper> classGroupTeacherMapperList) throws Exception {
 | 
	
		
			
				|  |  |          Date date = new Date();
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        List<Integer> teacherUserIds = classGroupTeacherMapperList.stream().map(teacher -> teacher.getUserId()).collect(Collectors.toList());
 | 
	
		
			
				|  |  | -        List<TeacherDefaultMusicGroupSalary> byTeacher = teacherDefaultMusicGroupSalaryDao.findByTeacher(teacherUserIds);
 | 
	
		
			
				|  |  | +        List<CourseSchedule> classGroupNoStartCourseSchedules = courseScheduleService.findClassGroupNoStartCourseSchedules(classGroupTeacherMapperList);
 | 
	
		
			
				|  |  | +        if (classGroupNoStartCourseSchedules == null || classGroupNoStartCourseSchedules.size() == 0) {
 | 
	
		
			
				|  |  | +            return true;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        List<ClassGroupTeacherSalary> classGroupTeacherSalaryList = new ArrayList<>();
 | 
	
		
			
				|  |  | +        //老师默认的课酬
 | 
	
		
			
				|  |  | +        List<Integer> teacherUserIds = classGroupTeacherMapperList.stream().map(teacher -> teacher.getUserId()).collect(Collectors.toList());
 | 
	
		
			
				|  |  | +        List<TeacherDefaultMusicGroupSalary> teacherSalaryList = teacherDefaultMusicGroupSalaryDao.findByTeacher(teacherUserIds);
 | 
	
		
			
				|  |  | +        Map<CourseSchedule.CourseScheduleType, TeacherDefaultMusicGroupSalary> teacherDefaultSalary = new HashMap<>();
 | 
	
		
			
				|  |  | +        if (teacherSalaryList.size() > 0) {
 | 
	
		
			
				|  |  | +            teacherDefaultSalary = teacherSalaryList.stream().collect(Collectors.toMap(TeacherDefaultMusicGroupSalary::getCourseScheduleType, teacherDefaultMusicGroupSalary -> teacherDefaultMusicGroupSalary));
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  |          List<CourseScheduleTeacherSalary> courseScheduleTeacherSalaryList = new ArrayList<>();
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |          String musicGroupId = classGroupTeacherMapperList.get(0).getMusicGroupId();
 | 
	
		
			
				|  |  |          MusicGroup musicGroup = musicGroupService.get(musicGroupId);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        List<CourseSchedule> classGroupNoStartCourseSchedules = courseScheduleService.findClassGroupNoStartCourseSchedules(classGroupTeacherMapperList);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        if(classGroupNoStartCourseSchedules == null || classGroupNoStartCourseSchedules.size()==0){
 | 
	
		
			
				|  |  | -            return true;
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | -        //删除未开始的课程老师课酬
 | 
	
		
			
				|  |  | +        //删除未开始的课程老师课酬,和签到
 | 
	
		
			
				|  |  |          List<Long> courseScheduleIds = classGroupNoStartCourseSchedules.stream().map(CourseSchedule::getId).collect(Collectors.toList());
 | 
	
		
			
				|  |  |          courseScheduleTeacherSalaryDao.batchDeleteByCourseScheduleIds(courseScheduleIds);
 | 
	
		
			
				|  |  |          teacherAttendanceDao.batchDeleteByCourseSchedules(courseScheduleIds);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          for (CourseSchedule classGroupNoStartCourseSchedule : classGroupNoStartCourseSchedules) {
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -            if (!classGroupNoStartCourseSchedule.getType().equals(CourseSchedule.CourseScheduleType.SINGLE) &&
 | 
	
		
			
				|  |  | -                    !classGroupNoStartCourseSchedule.getType().equals(CourseSchedule.CourseScheduleType.MIX) &&
 | 
	
		
			
				|  |  | -                    !classGroupNoStartCourseSchedule.getType().equals(CourseSchedule.CourseScheduleType.HIGH)
 | 
	
		
			
				|  |  | -            ) {
 | 
	
		
			
				|  |  | -                continue;
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  |              //课时长度
 | 
	
		
			
				|  |  | -            int duration = DateUtil.minutesBetween(classGroupNoStartCourseSchedule.getStartClassTime(),classGroupNoStartCourseSchedule.getEndClassTime());
 | 
	
		
			
				|  |  | +            int duration = DateUtil.minutesBetween(classGroupNoStartCourseSchedule.getStartClassTime(), classGroupNoStartCourseSchedule.getEndClassTime());
 | 
	
		
			
				|  |  |              for (ClassGroupTeacherMapper classGroupTeacherMapper : classGroupTeacherMapperList) {
 | 
	
		
			
				|  |  |                  if (!classGroupTeacherMapper.getClassGroupId().equals(classGroupNoStartCourseSchedule.getClassGroupId())) {
 | 
	
		
			
				|  |  |                      continue;
 | 
	
	
		
			
				|  | @@ -157,26 +147,35 @@ public class ClassGroupTeacherMapperServiceImpl extends BaseServiceImpl<Long, Cl
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |                  Map<CourseSchedule.CourseScheduleType, TeacherDefaultMusicGroupSalary> collect = teacherDefaultMusicGroupSalaryList.stream().collect(Collectors.toMap(TeacherDefaultMusicGroupSalary::getCourseScheduleType, teacherDefaultMusicGroupSalary -> teacherDefaultMusicGroupSalary));
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -				TeacherDefaultMusicGroupSalary teacherDefaultMusicGroupSalary = collect.get(classGroupNoStartCourseSchedule.getType());
 | 
	
		
			
				|  |  | -				if (teacherDefaultMusicGroupSalary == null) {
 | 
	
		
			
				|  |  | -					throw new BizException("请先设置老师课酬");
 | 
	
		
			
				|  |  | -				}
 | 
	
		
			
				|  |  | +                TeacherDefaultMusicGroupSalary teacherDefaultMusicGroupSalary = collect.get(classGroupNoStartCourseSchedule.getType());
 | 
	
		
			
				|  |  | +                if (teacherDefaultMusicGroupSalary == null) {
 | 
	
		
			
				|  |  | +                    teacherDefaultMusicGroupSalary = teacherDefaultSalary.get(classGroupNoStartCourseSchedule.getType());
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +                if (teacherDefaultMusicGroupSalary == null) {
 | 
	
		
			
				|  |  | +                    throw new BizException("请先设置老师课酬");
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |                  //对应基准课酬
 | 
	
		
			
				|  |  | -                BigDecimal baseSalary = new BigDecimal(0),classTimeDuty=new BigDecimal(0);
 | 
	
		
			
				|  |  | +                BigDecimal baseSalary = new BigDecimal(0), classTimeDuty = new BigDecimal(0);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -                //基准课酬
 | 
	
		
			
				|  |  | +                //2.0课酬
 | 
	
		
			
				|  |  |                  if (musicGroup.getSettlementType().equals(SalarySettlementTypeEnum.TEACHER_DEFAULT)) {
 | 
	
		
			
				|  |  |                      //课程时长与结算单位时长占比
 | 
	
		
			
				|  |  | -                    classTimeDuty = new BigDecimal(duration).divide(new BigDecimal(30),6,BigDecimal.ROUND_HALF_UP);
 | 
	
		
			
				|  |  | +                    classTimeDuty = new BigDecimal(duration).divide(new BigDecimal(30), 6, BigDecimal.ROUND_HALF_UP);
 | 
	
		
			
				|  |  |                      baseSalary = classGroupTeacherMapper.getTeacherRole().equals(TeachTypeEnum.BISHOP) ? teacherDefaultMusicGroupSalary.getMainTeacher30MinSalary() : teacherDefaultMusicGroupSalary.getAssistantTeacher30MinSalary();
 | 
	
		
			
				|  |  |                  }
 | 
	
		
			
				|  |  | -                //阶梯课酬
 | 
	
		
			
				|  |  | +                //3.0课酬
 | 
	
		
			
				|  |  |                  if (musicGroup.getSettlementType().equals(SalarySettlementTypeEnum.GRADIENT_SALARY)) {
 | 
	
		
			
				|  |  |                      //课程时长与结算单位时长占比
 | 
	
		
			
				|  |  | -                    classTimeDuty = new BigDecimal(duration).divide(new BigDecimal(90),6,BigDecimal.ROUND_HALF_UP);
 | 
	
		
			
				|  |  | +                    classTimeDuty = new BigDecimal(duration).divide(new BigDecimal(90), 6, BigDecimal.ROUND_HALF_UP);
 | 
	
		
			
				|  |  |                      baseSalary = classGroupTeacherMapper.getTeacherRole().equals(TeachTypeEnum.BISHOP) ? teacherDefaultMusicGroupSalary.getMainTeacher90MinSalary() : teacherDefaultMusicGroupSalary.getAssistantTeacher90MinSalary();
 | 
	
		
			
				|  |  |                  }
 | 
	
		
			
				|  |  | +                //课堂课课酬
 | 
	
		
			
				|  |  | +                if (musicGroup.isClassroomLessons()) {
 | 
	
		
			
				|  |  | +                    //课程时长与结算单位时长占比
 | 
	
		
			
				|  |  | +                    classTimeDuty = new BigDecimal(duration).divide(new BigDecimal(40), 6, BigDecimal.ROUND_HALF_UP);
 | 
	
		
			
				|  |  | +                    baseSalary = classGroupTeacherMapper.getTeacherRole().equals(TeachTypeEnum.BISHOP) ? teacherDefaultMusicGroupSalary.getMainTeacher30MinSalary() : teacherDefaultMusicGroupSalary.getAssistantTeacher30MinSalary();
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  |                  salary = baseSalary.multiply(classTimeDuty).setScale(2, BigDecimal.ROUND_HALF_UP);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |                  //课程与老师薪水表
 | 
	
	
		
			
				|  | @@ -245,7 +244,7 @@ public class ClassGroupTeacherMapperServiceImpl extends BaseServiceImpl<Long, Cl
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |              //根据教师编号将对应结算方式下的默认课酬设置分组
 | 
	
		
			
				|  |  | -            Map<Integer, TeacherDefaultMusicGroupSalary> teacherDefaultMusicGroupSalariesGroupByTeacherId = teacherDefaultMusicGroupSalariesWithCourseType.stream().collect(Collectors.toMap(TeacherDefaultMusicGroupSalary::getUserId,teacherDefaultMusicGroupSalary -> teacherDefaultMusicGroupSalary));
 | 
	
		
			
				|  |  | +            Map<Integer, TeacherDefaultMusicGroupSalary> teacherDefaultMusicGroupSalariesGroupByTeacherId = teacherDefaultMusicGroupSalariesWithCourseType.stream().collect(Collectors.toMap(TeacherDefaultMusicGroupSalary::getUserId, teacherDefaultMusicGroupSalary -> teacherDefaultMusicGroupSalary));
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |              if (!courseSchedule.isBishopTeacherSalaryNotCreate()) {
 | 
	
		
			
				|  |  |                  //根据课程获取主教的默认课酬设置列表
 | 
	
	
		
			
				|  | @@ -280,11 +279,11 @@ public class ClassGroupTeacherMapperServiceImpl extends BaseServiceImpl<Long, Cl
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      /**
 | 
	
		
			
				|  |  | -     * @param courseSchedule: 课程信息
 | 
	
		
			
				|  |  | -     * @param teachType: 教师类型
 | 
	
		
			
				|  |  | -     * @param settlementType: 结算方式
 | 
	
		
			
				|  |  | -     * @param subsidy: 补贴
 | 
	
		
			
				|  |  | -     * @param teacherId: 教师编号
 | 
	
		
			
				|  |  | +     * @param courseSchedule:                              课程信息
 | 
	
		
			
				|  |  | +     * @param teachType:                                   教师类型
 | 
	
		
			
				|  |  | +     * @param settlementType:                              结算方式
 | 
	
		
			
				|  |  | +     * @param subsidy:                                     补贴
 | 
	
		
			
				|  |  | +     * @param teacherId:                                   教师编号
 | 
	
		
			
				|  |  |       * @param teacherDefaultMusicGroupSalaryWithTeacherId: 教师课酬
 | 
	
		
			
				|  |  |       * @return com.ym.mec.biz.dal.entity.CourseScheduleTeacherSalary
 | 
	
		
			
				|  |  |       * @describe 计算教师课酬
 |