Browse Source

fix:课酬

Joburgess 4 years ago
parent
commit
e44d2e3409

+ 62 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleTeacherSalaryServiceImpl.java

@@ -522,6 +522,68 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
                 if(Objects.isNull(teacherSalary)){
                 if(Objects.isNull(teacherSalary)){
                     teacherSalary = BigDecimal.ZERO;
                     teacherSalary = BigDecimal.ZERO;
                 }
                 }
+
+                //扣除费用
+                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())){
+                    //未签到扣除全部课酬
+                    deductCost = deductCost.add(courseScheduleTeacherSalary.getExpectSalary());
+                    deductReasons.add("未签到扣除全部课酬");
+                }else if(YesOrNoEnum.NO.equals(teacherAttendance.getSignInStatus())){
+                    //异常签到
+                    int signCourseTimeBetweenSeconds = DateUtil.secondsBetween(teacherAttendance.getSignInTime(), courseScheduleTeacherSalary.getCourseSchedule().getStartClassTime());
+                    int signCourseTimeBetween = signCourseTimeBetweenSeconds/60;
+                    if(signCourseTimeBetween<1&&signCourseTimeBetween>-3){
+                        //课程开始前1分钟至开始后3分钟进入教室
+                        deductCost = deductCost.add(new BigDecimal(50));
+                        deductReasons.add("课程开始前1分钟至开始后3分钟进入教室扣除50元");
+                    }else if(signCourseTimeBetween<-3){
+                        //课程开始后3分钟后进入教室
+                        deductCost = deductCost.add(courseScheduleTeacherSalary.getExpectSalary());
+                        deductReasons.add("课程开始后3分钟进入教室扣除全部课酬");
+                    }
+                }
+
+                if(CollectionUtils.isEmpty(courseTeacherAttendances)||Objects.isNull(teacherAttendance.getSignOutStatus())){
+                    //未签退扣除一半课酬
+                    deductCost = deductCost.add(courseScheduleTeacherSalary.getExpectSalary().divide(new BigDecimal(2)));
+                    deductReasons.add("未签退扣除一半课酬");
+                }else if(YesOrNoEnum.NO.equals(teacherAttendance.getSignOutStatus())){
+                    //异常签退
+                    int signCourseTimeBetweenSeconds = DateUtil.secondsBetween(teacherAttendance.getSignOutTime(), courseScheduleTeacherSalary.getCourseSchedule().getStartClassTime());
+                    float signCourseTimeBetween = (float)signCourseTimeBetweenSeconds/(float)60;
+
+                    int signOutCourseTimeBetweenSeconds = DateUtil.secondsBetween(teacherAttendance.getSignOutTime(), courseScheduleTeacherSalary.getCourseSchedule().getEndClassTime());
+                    float signOutCourseTimeBetween = (float)signOutCourseTimeBetweenSeconds/(float)60;
+
+                    if(signCourseTimeBetween<=20&&signOutCourseTimeBetween>3){
+                        //课程开始前20分钟至开始后3分钟退出教室
+                        deductCost = deductCost.add(courseScheduleTeacherSalary.getExpectSalary());
+                        deductReasons.add("课程开始前20分钟至开始后3分钟退出教室扣除全部课酬");
+                    }else if(signOutCourseTimeBetween<=3&&signOutCourseTimeBetween>0){
+                        //课程结束前3分钟后至课程结束前退出教室
+                        deductCost = deductCost.add(new BigDecimal(50));
+                        deductReasons.add("课程结束前3分钟后至课程结束前退出教室扣除50元");
+                    }
+                }
+
+                BigDecimal finalSalary = teacherSalary.subtract(deductCost).setScale(BigDecimal.ZERO.intValue(), BigDecimal.ROUND_HALF_UP);
+
+                if(BigDecimal.ZERO.compareTo(deductCost)<0){
+                    deductReasons.add("扣除总费用:" + deductCost);
+                    courseScheduleTeacherSalary.setDeductionReason(org.apache.commons.lang3.StringUtils.join(deductReasons, ";"));
+                }
+
+                //更新教师结算信息
+                courseScheduleTeacherSalary.setActualSalary(finalSalary.compareTo(BigDecimal.ZERO)<0?BigDecimal.ZERO:finalSalary);
+                courseScheduleTeacherSalary.setSettlementTime(now);
+                courseScheduleTeacherSalaryDao.update(courseScheduleTeacherSalary);
+
+                continue;
             }else if(CourseSchedule.CourseScheduleType.HIGH.equals(courseSchedule.getType())){
             }else if(CourseSchedule.CourseScheduleType.HIGH.equals(courseSchedule.getType())){
                 //根据课程类型获取对应的默认课酬设置列表
                 //根据课程类型获取对应的默认课酬设置列表
                 List<TeacherDefaultMusicGroupSalary> teacherDefaultMusicGroupSalariesWithCourseType = teacherDefaultMusicGroupSalariesGroupByCourseType.get(courseSchedule.getType());
                 List<TeacherDefaultMusicGroupSalary> teacherDefaultMusicGroupSalariesWithCourseType = teacherDefaultMusicGroupSalariesGroupByCourseType.get(courseSchedule.getType());