|
@@ -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());
|