Joburgess 5 years ago
parent
commit
56f6888cd5

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

@@ -175,7 +175,7 @@ public class ClassGroupTeacherMapperServiceImpl extends BaseServiceImpl<Long, Cl
                     baseSalary = classGroupTeacherMapper.getTeacherRole().equals(TeachTypeEnum.BISHOP) ? teacherDefaultMusicGroupSalary.getMainTeacher90MinSalary() : teacherDefaultMusicGroupSalary.getAssistantTeacher90MinSalary();
                 }
 
-                salary = baseSalary.multiply(classTimeDuty).setScale(2, BigDecimal.ROUND_HALF_UP);
+                salary = baseSalary.multiply(classTimeDuty).setScale(CommonConstants.DECIMAL_FINAL_PLACE, BigDecimal.ROUND_HALF_UP);
 
                 //课程与老师薪水表
                 CourseScheduleTeacherSalary courseScheduleTeacherSalary = new CourseScheduleTeacherSalary();

+ 82 - 73
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleTeacherSalaryServiceImpl.java

@@ -64,9 +64,9 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
 
     @Override
     public void createCourseScheduleTeacherVipSalary(VipGroup vipGroup,
-                                                    List<CourseSchedule> vipCourseSchedules,
-                                                    BigDecimal onlineTeacherSalary,
-                                                    BigDecimal offlineTeacherSalary) {
+                                                     List<CourseSchedule> vipCourseSchedules,
+                                                     BigDecimal onlineTeacherSalary,
+                                                     BigDecimal offlineTeacherSalary) {
 
         School school = schoolService.get(vipGroup.getTeacherSchoolId());
         if (Objects.isNull(school)) {
@@ -85,8 +85,8 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
                     .sorted(Comparator.comparing(CourseSchedule::getStartClassTime)).collect(Collectors.toList());
             for (int i = 0; i < courseSchedules.size(); i++) {
                 //创建教师课程薪水记录
-                CourseScheduleTeacherSalary courseScheduleTeacherSalary = courseScheduleTeacherSalaryDao.queryByCourseScheduleIdAndUserId(courseSchedules.get(i).getId(),courseSchedules.get(i).getActualTeacherId());
-                if(Objects.isNull(courseScheduleTeacherSalary)){
+                CourseScheduleTeacherSalary courseScheduleTeacherSalary = courseScheduleTeacherSalaryDao.queryByCourseScheduleIdAndUserId(courseSchedules.get(i).getId(), courseSchedules.get(i).getActualTeacherId());
+                if (Objects.isNull(courseScheduleTeacherSalary)) {
                     courseScheduleTeacherSalary = new CourseScheduleTeacherSalary();
                 }
                 courseScheduleTeacherSalary.setCourseScheduleId(courseSchedules.get(i).getId());
@@ -109,14 +109,14 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
                         courseScheduleTeacherSalary.setExpectSalary(offlineTeacherSalary);
                     }
                 }
-                if(Objects.isNull(courseScheduleTeacherSalary.getId())){
+                if (Objects.isNull(courseScheduleTeacherSalary.getId())) {
                     courseScheduleTeacherSalaries.add(courseScheduleTeacherSalary);
-                }else{
+                } else {
                     courseScheduleTeacherSalaryDao.update(courseScheduleTeacherSalary);
                 }
             }
         }
-        if(courseScheduleTeacherSalaries.size()>0){
+        if (courseScheduleTeacherSalaries.size() > 0) {
             batchInsert(courseScheduleTeacherSalaries);
         }
     }
@@ -129,35 +129,35 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
                 .map(CourseScheduleTeacherSalary::getCourseScheduleId)
                 .collect(Collectors.toList());
         List<ClassGroup> byCourseSchedules = classGroupDao.findByCourseSchedules(courseScheduleIds);
-        
-		Map<Integer, ClassGroup> classGroupMap = new HashMap<Integer, ClassGroup>();
-		for (ClassGroup classGroup : byCourseSchedules) {
-			if (!classGroupMap.containsKey(classGroup.getId())) {
-				classGroupMap.put(classGroup.getId(), classGroup);
-			}
-		}
-        
+
+        Map<Integer, ClassGroup> classGroupMap = new HashMap<Integer, ClassGroup>();
+        for (ClassGroup classGroup : byCourseSchedules) {
+            if (!classGroupMap.containsKey(classGroup.getId())) {
+                classGroupMap.put(classGroup.getId(), classGroup);
+            }
+        }
+
         List<TeacherAttendance> teacherIdByCourseSchedule = teacherAttendanceDao.findTeacherIdByCourseSchedule(courseScheduleIds);
         Map<Long, List<TeacherAttendance>> courseScheduleTeacherAttendanceMap = teacherIdByCourseSchedule.stream()
                 .collect(Collectors.groupingBy(TeacherAttendance::getCourseScheduleId));
-        List<TeacherAttendance> teacherAttendances=new ArrayList<>();
+        List<TeacherAttendance> teacherAttendances = new ArrayList<>();
         courseScheduleTeacherSalaries.forEach(courseScheduleTeacherSalary -> {
-            List<TeacherAttendance> teacherAttendancesTemp=courseScheduleTeacherAttendanceMap.get(courseScheduleTeacherSalary.getCourseScheduleId());
+            List<TeacherAttendance> teacherAttendancesTemp = courseScheduleTeacherAttendanceMap.get(courseScheduleTeacherSalary.getCourseScheduleId());
             List<Integer> collect = new ArrayList<>();
-            if(!CollectionUtils.isEmpty(teacherAttendancesTemp)){
+            if (!CollectionUtils.isEmpty(teacherAttendancesTemp)) {
                 collect = teacherAttendancesTemp.stream().map(TeacherAttendance::getTeacherId).collect(Collectors.toList());
             }
-            TeacherAttendance teacherAttendance=new TeacherAttendance();
+            TeacherAttendance teacherAttendance = new TeacherAttendance();
             teacherAttendance.setGroupType(courseScheduleTeacherSalary.getGroupType());
             teacherAttendance.setClassGroupId(courseScheduleTeacherSalary.getClassGroupId());
             teacherAttendance.setMusicGroupId(courseScheduleTeacherSalary.getMusicGroupId());
-            if(CollectionUtils.isEmpty(collect)||!collect.contains(courseScheduleTeacherSalary.getUserId())){
+            if (CollectionUtils.isEmpty(collect) || !collect.contains(courseScheduleTeacherSalary.getUserId())) {
                 teacherAttendance.setTeacherId(courseScheduleTeacherSalary.getUserId());
                 teacherAttendance.setCourseScheduleId(courseScheduleTeacherSalary.getCourseScheduleId());
                 teacherAttendances.add(teacherAttendance);
             }
         });
-        if(!CollectionUtils.isEmpty(teacherAttendances)){
+        if (!CollectionUtils.isEmpty(teacherAttendances)) {
             teacherAttendanceDao.batchInsert(teacherAttendances);
         }
     }
@@ -200,12 +200,12 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
             //获取当前课程学生缴费记录
             List<CourseScheduleStudentPayment> studentPaymentsWithCourse = studentPaymentGroupByCourse.get(courseScheduleTeacherSalary.getCourseScheduleId());
 
-            if(CollectionUtils.isEmpty(studentPaymentsWithCourse)){
+            if (CollectionUtils.isEmpty(studentPaymentsWithCourse)) {
                 return;
             }
 
             //当前课程缴费学生数量
-            BigDecimal courseStudentNum=new BigDecimal(studentPaymentsWithCourse.size());
+            BigDecimal courseStudentNum = new BigDecimal(studentPaymentsWithCourse.size());
 
             //教师预计课酬
             BigDecimal expectSalary = courseScheduleTeacherSalary.getExpectSalary();
@@ -226,7 +226,7 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
                     return;
                 }
                 //计算教师责任总占比
-                double teacherLiabilityRatioSum = courseStudentComplaints.stream().mapToDouble(courseScheduleComplaint->Objects.isNull(courseScheduleComplaint.getTeacherLiabilityRatio())?0:courseScheduleComplaint.getTeacherLiabilityRatio()).sum();
+                double teacherLiabilityRatioSum = courseStudentComplaints.stream().mapToDouble(courseScheduleComplaint -> Objects.isNull(courseScheduleComplaint.getTeacherLiabilityRatio()) ? 0 : courseScheduleComplaint.getTeacherLiabilityRatio()).sum();
                 teacherLiabilityAllratio = new BigDecimal(teacherLiabilityRatioSum);
             } else {
                 //如果没有投诉,则教师和学生的责任占比为0
@@ -236,9 +236,9 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
             //教师应扣除费用
             BigDecimal deductPrice = avgSalary.multiply(teacherLiabilityAllratio);
             //教师实际课酬
-            BigDecimal schoolSubsidy=new BigDecimal(0);
-            if(Objects.nonNull(courseScheduleTeacherSalary.getSubsidy())){
-                schoolSubsidy=courseScheduleTeacherSalary.getSubsidy();
+            BigDecimal schoolSubsidy = new BigDecimal(0);
+            if (Objects.nonNull(courseScheduleTeacherSalary.getSubsidy())) {
+                schoolSubsidy = courseScheduleTeacherSalary.getSubsidy();
             }
             BigDecimal actualSalary = expectSalary.subtract(deductPrice).add(schoolSubsidy);
 
@@ -263,7 +263,7 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
 
             //根据学生进行投诉分组
             Map<Integer, List<CourseScheduleComplaints>> complainsGroupByStudent = null;
-            if(Objects.nonNull(courseStudentComplaints)){
+            if (Objects.nonNull(courseStudentComplaints)) {
                 complainsGroupByStudent = courseStudentComplaints.stream().collect(Collectors.groupingBy(CourseScheduleComplaints::getUserId));
             }
 
@@ -271,19 +271,19 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
             for (CourseScheduleStudentPayment studentPayment : studentPaymentsWithCourse) {
                 //当前课程学生应缴费用
                 BigDecimal studentExpectPrice = studentPayment.getExpectPrice();
-                if(Objects.isNull(studentExpectPrice)){
-                    studentExpectPrice=new BigDecimal(0);
+                if (Objects.isNull(studentExpectPrice)) {
+                    studentExpectPrice = new BigDecimal(0);
                 }
                 //当前课程学生责任占比
                 BigDecimal studentLiabilityRatio;
                 List<CourseScheduleComplaints> currentCourseScheduleComplaints = null;
-                if(!CollectionUtils.isEmpty(complainsGroupByStudent)){
+                if (!CollectionUtils.isEmpty(complainsGroupByStudent)) {
                     currentCourseScheduleComplaints = complainsGroupByStudent.get(studentPayment.getUserId());
                 }
                 if (!CollectionUtils.isEmpty(currentCourseScheduleComplaints)) {
                     Double temp = currentCourseScheduleComplaints.get(0).getStudentLiabilityRatio();
-                    if(Objects.isNull(temp)){
-                        temp=0.0;
+                    if (Objects.isNull(temp)) {
+                        temp = 0.0;
                     }
                     studentLiabilityRatio = new BigDecimal(temp);
                 } else {
@@ -329,7 +329,7 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
         List<CourseSchedule> yesterdayCourseSchedules = courseScheduleDao.findCourseScheduleWithDate(yesterday);
         //课程编号列表
         List<Long> courseScheduleIds = yesterdayCourseSchedules.stream().map(CourseSchedule::getId).collect(Collectors.toList());
-        if(CollectionUtils.isEmpty(courseScheduleIds)){
+        if (CollectionUtils.isEmpty(courseScheduleIds)) {
             return;
         }
         //获取课程对应教学点补贴
@@ -343,7 +343,7 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
         //课程教师课酬
         List<CourseScheduleTeacherSalary> courseScheduleTeacherSalaries = courseScheduleTeacherSalaryDao.findByCourseSchedulesWithNoSettlement(courseScheduleIds);
 
-        if(CollectionUtils.isEmpty(courseScheduleTeacherSalaries)){
+        if (CollectionUtils.isEmpty(courseScheduleTeacherSalaries)) {
             return;
         }
 
@@ -400,6 +400,7 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
         List<SysUserCashAccountDetail> userCashAccountDetails = new ArrayList<>();
         //计算课酬
         courseScheduleTeacherSalaries.forEach(courseScheduleTeacherSalary -> {
+            boolean durationIsChange = false;
             //当前课酬对应的课程信息
             CourseSchedule courseSchedule = courseScheduleIdMap.get(courseScheduleTeacherSalary.getCourseScheduleId());
             Map<Integer, Integer> schoolClassMinutesMap = teacherClassMinutesMap.get(courseScheduleTeacherSalary.getUserId());
@@ -411,54 +412,62 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
                     || courseSchedule.getType().equals(CourseSchedule.CourseScheduleType.MIX)) {
                 if (schoolClassMinutes >= settlementClassMinutes && duration < singleClassTime) {
                     duration = singleClassTime;
+                    durationIsChange = true;
                 }
             }
-            //根据课程类型获取对应的默认课酬设置列表
-            List<TeacherDefaultMusicGroupSalary> teacherDefaultMusicGroupSalariesWithCourseType = teacherDefaultMusicGroupSalariesGroupByCourseType.get(courseSchedule.getType());
-            if (CollectionUtils.isEmpty(teacherDefaultMusicGroupSalariesWithCourseType)) {
-                throw new BizException("存在未指定结算方式的课程类型");
-            }
-
-            //根据教师编号将对应结算方式下的默认课酬设置分组
-            Map<Integer, TeacherDefaultMusicGroupSalary> teacherDefaultMusicGroupSalariesGroupByTeacherId = teacherDefaultMusicGroupSalariesWithCourseType.stream().collect(Collectors.toMap(TeacherDefaultMusicGroupSalary::getUserId,teacherDefaultMusicGroupSalary -> teacherDefaultMusicGroupSalary));
-
-            TeacherDefaultMusicGroupSalary teacherDefaultMusicGroupSalaryWithTeacherId=teacherDefaultMusicGroupSalariesGroupByTeacherId.get(courseScheduleTeacherSalary.getUserId());
 
             //教师课酬
             BigDecimal teacherSalary = new BigDecimal(0);
 
-            String settlementType=musicGroupSettlementsMap.get(courseScheduleTeacherSalary.getCourseScheduleId());
-            //如果结算方式是教师默认课酬
-            if (settlementType.equals(SalarySettlementTypeEnum.TEACHER_DEFAULT.getCode())) {
-                //课程时长与结算单位时长占比
-                BigDecimal classTimeDuty = new BigDecimal(duration);
-                if (courseSchedule.getType().equals(CourseSchedule.CourseScheduleType.HIGH)) {
-                    classTimeDuty=classTimeDuty.divide(new BigDecimal(45),CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN);
-                }else  if (courseSchedule.getType().equals(CourseSchedule.CourseScheduleType.CLASSROOM)) {
-                    classTimeDuty=classTimeDuty.divide(new BigDecimal(40),CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN);
-                }else{
-                    classTimeDuty=classTimeDuty.divide(new BigDecimal(30), CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN);
+            if(durationIsChange){
+
+                //根据课程类型获取对应的默认课酬设置列表
+                List<TeacherDefaultMusicGroupSalary> teacherDefaultMusicGroupSalariesWithCourseType = teacherDefaultMusicGroupSalariesGroupByCourseType.get(courseSchedule.getType());
+                if (CollectionUtils.isEmpty(teacherDefaultMusicGroupSalariesWithCourseType)) {
+                    throw new BizException("存在未指定结算方式的课程类型");
                 }
-                BigDecimal teacherDefaultSalary = courseScheduleTeacherSalary.getTeacherRole().equals(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 classTimeDuty = new BigDecimal(duration);
-                if (courseSchedule.getType().equals(CourseSchedule.CourseScheduleType.HIGH)) {
-                    classTimeDuty=classTimeDuty.divide(new BigDecimal(45),CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN);
-                }else  if (courseSchedule.getType().equals(CourseSchedule.CourseScheduleType.CLASSROOM)) {
-                    classTimeDuty=classTimeDuty.divide(new BigDecimal(40),CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN);
-                }else{
-                    classTimeDuty=classTimeDuty.divide(new BigDecimal(90),CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN);
+
+                //根据教师编号将对应结算方式下的默认课酬设置分组
+                Map<Integer, TeacherDefaultMusicGroupSalary> teacherDefaultMusicGroupSalariesGroupByTeacherId = teacherDefaultMusicGroupSalariesWithCourseType.stream().collect(Collectors.toMap(TeacherDefaultMusicGroupSalary::getUserId, teacherDefaultMusicGroupSalary -> teacherDefaultMusicGroupSalary));
+
+                TeacherDefaultMusicGroupSalary teacherDefaultMusicGroupSalaryWithTeacherId = teacherDefaultMusicGroupSalariesGroupByTeacherId.get(courseScheduleTeacherSalary.getUserId());
+
+                String settlementType = musicGroupSettlementsMap.get(courseScheduleTeacherSalary.getCourseScheduleId());
+                //如果结算方式是教师默认课酬
+                if (settlementType.equals(SalarySettlementTypeEnum.TEACHER_DEFAULT.getCode())) {
+                    //课程时长与结算单位时长占比
+                    BigDecimal classTimeDuty = new BigDecimal(duration);
+                    if (courseSchedule.getType().equals(CourseSchedule.CourseScheduleType.HIGH)) {
+                        classTimeDuty = classTimeDuty.divide(new BigDecimal(45), CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN);
+                    } else if (courseSchedule.getType().equals(CourseSchedule.CourseScheduleType.CLASSROOM)) {
+                        classTimeDuty = classTimeDuty.divide(new BigDecimal(40), CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN);
+                    } else {
+                        classTimeDuty = classTimeDuty.divide(new BigDecimal(30), CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN);
+                    }
+                    BigDecimal teacherDefaultSalary = courseScheduleTeacherSalary.getTeacherRole().equals(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 classTimeDuty = new BigDecimal(duration);
+                    if (courseSchedule.getType().equals(CourseSchedule.CourseScheduleType.HIGH)) {
+                        classTimeDuty = classTimeDuty.divide(new BigDecimal(45), CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN);
+                    } else if (courseSchedule.getType().equals(CourseSchedule.CourseScheduleType.CLASSROOM)) {
+                        classTimeDuty = classTimeDuty.divide(new BigDecimal(40), CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN);
+                    } else {
+                        classTimeDuty = classTimeDuty.divide(new BigDecimal(90), CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN);
+                    }
+                    BigDecimal teacherDefaultSalary = courseScheduleTeacherSalary.getTeacherRole().equals(TeachTypeEnum.BISHOP) ? teacherDefaultMusicGroupSalaryWithTeacherId.getMainTeacher90MinSalary() : teacherDefaultMusicGroupSalaryWithTeacherId.getAssistantTeacher90MinSalary();
+                    teacherSalary = teacherDefaultSalary.multiply(classTimeDuty).setScale(2, BigDecimal.ROUND_HALF_UP);
                 }
-                BigDecimal teacherDefaultSalary = courseScheduleTeacherSalary.getTeacherRole().equals(TeachTypeEnum.BISHOP) ? teacherDefaultMusicGroupSalaryWithTeacherId.getMainTeacher90MinSalary() : teacherDefaultMusicGroupSalaryWithTeacherId.getAssistantTeacher90MinSalary();
-                teacherSalary = teacherDefaultSalary.multiply(classTimeDuty).setScale(2, BigDecimal.ROUND_HALF_UP);
+            }else{
+                teacherSalary=courseScheduleTeacherSalary.getExpectSalary();
             }
+
             BigDecimal subsidy = courseSubsidyMap.get(courseSchedule.getSchoolId());
-            if(Objects.isNull(subsidy)){
-                subsidy=new BigDecimal(0);
+            if (Objects.isNull(subsidy)) {
+                subsidy = new BigDecimal(0);
             }
-            teacherSalary=teacherSalary.add(subsidy);
+            teacherSalary = teacherSalary.add(subsidy);
             //更新教师结算信息
             courseScheduleTeacherSalary.setActualSalary(teacherSalary);
             courseScheduleTeacherSalary.setSettlementTime(now);