|
@@ -1481,6 +1481,409 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
+ public void calMusicCourseTeacherActualSalary(CourseSchedule courseSchedule, CourseScheduleTeacherSalary courseScheduleTeacherSalary,
|
|
|
+ List<TeacherAttendance> teacherAttendances, School school, Teacher teacher, double attendanceRange) {
|
|
|
+
|
|
|
+ BigDecimal teacherSalary = courseScheduleTeacherSalary.getExpectSalary();
|
|
|
+
|
|
|
+ if(CourseSchedule.CourseScheduleType.MUSIC_NETWORK.equals(courseSchedule.getType())||CourseSchedule.CourseScheduleType.HIGH_ONLINE.equals(courseSchedule.getType())){
|
|
|
+ List<String> deductReasons = new ArrayList<>();
|
|
|
+
|
|
|
+ BigDecimal subsidy = school.getSubsidy();
|
|
|
+ if (Objects.isNull(subsidy)) {
|
|
|
+ subsidy = new BigDecimal(0);
|
|
|
+ }
|
|
|
+ if (Objects.isNull(subsidy)) {
|
|
|
+ subsidy = new BigDecimal(0);
|
|
|
+ }
|
|
|
+ teacherSalary = teacherSalary.add(subsidy);
|
|
|
+ if(BigDecimal.ZERO.compareTo(subsidy)!=0){
|
|
|
+ deductReasons.add("教学点补贴:" + subsidy);
|
|
|
+ }
|
|
|
+
|
|
|
+ //判断课程是否在试用期内
|
|
|
+ boolean trail = false;
|
|
|
+
|
|
|
+ if(Objects.nonNull(teacher)&&Objects.nonNull(teacher.getEntryDate())&&courseSchedule.getClassDate().compareTo(teacher.getEntryDate())>=0){
|
|
|
+ trail = true;
|
|
|
+ }
|
|
|
+ if(Objects.nonNull(teacher)&&Objects.nonNull(teacher.getFormalStaffDate())&&courseSchedule.getClassDate().compareTo(teacher.getFormalStaffDate())>=0){
|
|
|
+ trail = false;
|
|
|
+ }
|
|
|
+
|
|
|
+ //如果上课日期在试用期内按80%结算
|
|
|
+ if(trail){
|
|
|
+ teacherSalary = teacherSalary.multiply(new BigDecimal("0.8"));
|
|
|
+ deductReasons.add("未转正");
|
|
|
+ }
|
|
|
+
|
|
|
+ //扣除费用
|
|
|
+ BigDecimal deductCost = new BigDecimal(0);
|
|
|
+
|
|
|
+ TeacherAttendance teacherAttendance = teacherAttendances.get(0);
|
|
|
+ if(CollectionUtils.isEmpty(teacherAttendances)||Objects.isNull(teacherAttendance.getSignInStatus())){
|
|
|
+ //未签到扣除全部课酬
|
|
|
+ deductCost = deductCost.add(teacherSalary.abs());
|
|
|
+ deductReasons.add("未签到扣除全部课酬");
|
|
|
+ }else if(YesOrNoEnum.NO.equals(teacherAttendance.getSignInStatus())){
|
|
|
+ //异常签到
|
|
|
+ int signCourseTimeBetweenSeconds = DateUtil.secondsBetween(teacherAttendance.getSignInTime(), courseSchedule.getStartClassTime());
|
|
|
+ float signCourseTimeBetween = (float)signCourseTimeBetweenSeconds/(float)60;
|
|
|
+ if(signCourseTimeBetween<=1&&signCourseTimeBetween>-3){
|
|
|
+ //课程开始前1分钟至开始后3分钟进入教室
|
|
|
+ deductCost = deductCost.add(teacherSalary.divide(new BigDecimal(2)).abs());
|
|
|
+ deductReasons.add("课程开始前1分钟至开始后3分钟进入教室扣除一半课酬");
|
|
|
+ }else if(signCourseTimeBetween<=-3){
|
|
|
+ //课程开始后3分钟后进入教室
|
|
|
+ deductCost = deductCost.add(teacherSalary.abs());
|
|
|
+ deductReasons.add("课程开始后3分钟进入教室扣除全部课酬");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if(CollectionUtils.isEmpty(teacherAttendances)||Objects.isNull(teacherAttendance.getSignOutStatus())){
|
|
|
+ //未签退扣除一半课酬
|
|
|
+ deductCost = deductCost.add(teacherSalary.divide(new BigDecimal(2)).abs());
|
|
|
+ deductReasons.add("未签退扣除一半课酬");
|
|
|
+ }else if(YesOrNoEnum.NO.equals(teacherAttendance.getSignOutStatus())){
|
|
|
+ //异常签退
|
|
|
+ int signOutCourseTimeBetweenSeconds = DateUtil.secondsBetween(teacherAttendance.getSignOutTime(), courseSchedule.getEndClassTime());
|
|
|
+ float signOutCourseTimeBetween = (float)signOutCourseTimeBetweenSeconds/(float)60;
|
|
|
+
|
|
|
+ if(signOutCourseTimeBetween>3){
|
|
|
+ //课程开始前20分钟至开始后3分钟退出教室
|
|
|
+ deductCost = deductCost.add(teacherSalary.abs());
|
|
|
+ deductReasons.add("课程结束前3分钟之前退出教室扣除全部课酬");
|
|
|
+ }else if(signOutCourseTimeBetween<=3&&signOutCourseTimeBetween>0){
|
|
|
+ //课程结束前3分钟后至课程结束前退出教室
|
|
|
+ deductCost = deductCost.add(teacherSalary.divide(new BigDecimal(2)).abs());
|
|
|
+ deductReasons.add("课程结束前3分钟后至课程结束前退出教室扣除一半课酬");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ BigDecimal finalSalary = teacherSalary.subtract(deductCost).setScale(BigDecimal.ZERO.intValue(), BigDecimal.ROUND_HALF_UP);
|
|
|
+
|
|
|
+ if(BigDecimal.ZERO.compareTo(deductCost)<0){
|
|
|
+ deductReasons.add("扣除总费用:" + deductCost);
|
|
|
+ }
|
|
|
+
|
|
|
+ //更新教师结算信息
|
|
|
+ courseScheduleTeacherSalary.setSubsidy(subsidy);
|
|
|
+ courseScheduleTeacherSalary.setActualSalary(finalSalary.compareTo(BigDecimal.ZERO)<0?BigDecimal.ZERO:finalSalary);
|
|
|
+ }else{
|
|
|
+ List<String> deductReasons = new ArrayList<>();
|
|
|
+
|
|
|
+ BigDecimal subsidy = school.getSubsidy();
|
|
|
+ if (Objects.isNull(subsidy)) {
|
|
|
+ subsidy = new BigDecimal(0);
|
|
|
+ }
|
|
|
+ teacherSalary = teacherSalary.add(subsidy);
|
|
|
+ if(BigDecimal.ZERO.compareTo(subsidy)!=0){
|
|
|
+ deductReasons.add("教学点补贴:" + subsidy);
|
|
|
+ }
|
|
|
+
|
|
|
+ //判断课程是否在试用期内
|
|
|
+ boolean trail = false;
|
|
|
+
|
|
|
+ if(Objects.nonNull(teacher)&&Objects.nonNull(teacher.getEntryDate())&&courseSchedule.getClassDate().compareTo(teacher.getEntryDate())>=0){
|
|
|
+ trail = true;
|
|
|
+ }
|
|
|
+ if(Objects.nonNull(teacher)&&Objects.nonNull(teacher.getFormalStaffDate())&&courseSchedule.getClassDate().compareTo(teacher.getFormalStaffDate())>=0){
|
|
|
+ trail = false;
|
|
|
+ }
|
|
|
+
|
|
|
+ //如果上课日期在试用期内按80%结算
|
|
|
+ if(trail){
|
|
|
+ teacherSalary = teacherSalary.multiply(new BigDecimal("0.8"));
|
|
|
+ deductReasons.add("未转正");
|
|
|
+ }
|
|
|
+
|
|
|
+ //扣除费用
|
|
|
+ BigDecimal deductCost = BigDecimal.ZERO;
|
|
|
+
|
|
|
+ TeacherAttendance teacherAttendance = null;
|
|
|
+ if(!CollectionUtils.isEmpty(teacherAttendances)){
|
|
|
+ teacherAttendance = teacherAttendances.get(0);
|
|
|
+ }
|
|
|
+
|
|
|
+ boolean signInInRange = false;
|
|
|
+ boolean signOutInRange = false;
|
|
|
+ if(Objects.nonNull(school)&&Objects.nonNull(school.getLongitudeLatitude())
|
|
|
+ &&Objects.nonNull(teacherAttendance)
|
|
|
+ &&StringUtils.isNotBlank(teacherAttendance.getSignInLongitudeLatitude())
|
|
|
+ &&StringUtils.isNotBlank(teacherAttendance.getSignOutLongitudeLatitude())){
|
|
|
+ double signInDistance = MapUtil.distance(teacherAttendance.getSignInLongitudeLatitude(),
|
|
|
+ school.getLongitudeLatitude());
|
|
|
+ if (signInDistance <= attendanceRange) {
|
|
|
+ signInInRange = true;
|
|
|
+ }
|
|
|
+ double signOutDistance = MapUtil.distance(teacherAttendance.getSignOutLongitudeLatitude(),
|
|
|
+ school.getLongitudeLatitude());
|
|
|
+ if (signOutDistance <= attendanceRange) {
|
|
|
+ signOutInRange = true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if(Objects.isNull(teacherAttendance)||Objects.isNull(teacherAttendance.getSignInStatus())){
|
|
|
+ //无签到记录扣除全部课酬
|
|
|
+ deductCost = deductCost.add(teacherSalary.abs());
|
|
|
+ deductReasons.add("未签到扣除全部课酬");
|
|
|
+ }else if(YesOrNoEnum.NO.equals(teacherAttendance.getSignInStatus())){
|
|
|
+ int signCourseTimeBetweenSeconds = DateUtil.secondsBetween(teacherAttendance.getSignInTime(), courseSchedule.getStartClassTime());
|
|
|
+ float signCourseTimeBetween = (float)signCourseTimeBetweenSeconds/(float)60;
|
|
|
+ if(signCourseTimeBetween>0&&signCourseTimeBetween<=20){
|
|
|
+ //未提前20分钟打卡扣除50元
|
|
|
+ deductCost = deductCost.add(new BigDecimal(50));
|
|
|
+ deductReasons.add("未提前20分钟打卡扣除50元");
|
|
|
+ }else if(signCourseTimeBetween<=0&&signCourseTimeBetween>-30){
|
|
|
+ //迟到30分钟内扣除一半课酬
|
|
|
+ deductCost = deductCost.add(teacherSalary.divide(new BigDecimal(2)).abs());
|
|
|
+ deductReasons.add("迟到30分钟内扣除一半课酬");
|
|
|
+ }else if(signCourseTimeBetween<=-30){
|
|
|
+ //迟到30分钟及以上扣除全部课酬
|
|
|
+ deductCost = deductCost.add(teacherSalary.abs());
|
|
|
+ deductReasons.add("迟到30分钟及以上扣除全部课酬");
|
|
|
+ }
|
|
|
+ if(!signInInRange){
|
|
|
+ //签到经纬度异常扣除50
|
|
|
+ deductCost = deductCost.add(new BigDecimal(50));
|
|
|
+ deductReasons.add("签到经纬度异常扣除50");
|
|
|
+ }
|
|
|
+ }else{
|
|
|
+ signInInRange = true;
|
|
|
+ }
|
|
|
+
|
|
|
+ if(Objects.isNull(teacherAttendance)||Objects.isNull(teacherAttendance.getSignOutStatus())){
|
|
|
+ //未签退扣除全部课酬
|
|
|
+ deductCost = deductCost.add(teacherSalary.abs());
|
|
|
+ deductReasons.add("未签退扣除全部课酬");
|
|
|
+ }else if(YesOrNoEnum.NO.equals(teacherAttendance.getSignOutStatus())){
|
|
|
+ int signOutCourseTimeBetweenSeconds = DateUtil.secondsBetween(teacherAttendance.getSignOutTime(), courseSchedule.getEndClassTime());
|
|
|
+ float signOutCourseTimeBetween = (float)signOutCourseTimeBetweenSeconds/(float) 60;
|
|
|
+ if(signOutCourseTimeBetween>3){
|
|
|
+ //早退
|
|
|
+ deductCost = deductCost.add(teacherSalary.abs());
|
|
|
+ deductReasons.add("早退扣除全部课酬");
|
|
|
+ }else if((signOutCourseTimeBetween<=3&&signOutCourseTimeBetween>0)||signOutCourseTimeBetween<=3600){
|
|
|
+ //异常签退,扣除50元
|
|
|
+ deductCost = deductCost.add(new BigDecimal(50));
|
|
|
+ deductReasons.add("异常签退,扣除50元");
|
|
|
+ }else{
|
|
|
+ //签退经纬度异常,扣除50元
|
|
|
+ deductCost = deductCost.add(new BigDecimal(50));
|
|
|
+ deductReasons.add("签退经纬度异常,扣除50元");
|
|
|
+ }
|
|
|
+ }else{
|
|
|
+ signOutInRange = true;
|
|
|
+ }
|
|
|
+
|
|
|
+ if(!signInInRange&&!signOutInRange){
|
|
|
+ //签到签退GPS定位在指定距离外
|
|
|
+ deductCost = deductCost.add(teacherSalary.abs());
|
|
|
+ deductReasons.add("签到签退GPS定位在指定距离外,扣除全部课酬");
|
|
|
+ }
|
|
|
+
|
|
|
+ BigDecimal finalSalary = teacherSalary.subtract(deductCost).setScale(BigDecimal.ZERO.intValue(), BigDecimal.ROUND_HALF_UP);
|
|
|
+
|
|
|
+ if(BigDecimal.ZERO.compareTo(deductCost)<0){
|
|
|
+ deductReasons.add("扣除总费用:" + deductCost);
|
|
|
+ }
|
|
|
+
|
|
|
+ //更新教师结算信息
|
|
|
+ courseScheduleTeacherSalary.setSubsidy(subsidy);
|
|
|
+ courseScheduleTeacherSalary.setActualSalary(finalSalary.compareTo(BigDecimal.ZERO)<0?BigDecimal.ZERO:finalSalary);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void calVipCourseTeacherActualSalary(CourseSchedule courseSchedule, CourseScheduleTeacherSalary courseScheduleTeacherSalary,
|
|
|
+ List<TeacherAttendance> teacherAttendances, School school, Teacher teacher, double attendanceRange) {
|
|
|
+ List<String> deductReasons = new ArrayList<>();
|
|
|
+
|
|
|
+ BigDecimal expectSalary = courseScheduleTeacherSalary.getExpectSalary();
|
|
|
+
|
|
|
+ BigDecimal subsidy = school.getSubsidy();
|
|
|
+ if (Objects.isNull(subsidy)) {
|
|
|
+ subsidy = new BigDecimal(0);
|
|
|
+ }
|
|
|
+ courseScheduleTeacherSalary.setSubsidy(subsidy);
|
|
|
+ expectSalary = expectSalary.add(subsidy);
|
|
|
+ if(BigDecimal.ZERO.compareTo(subsidy)!=0){
|
|
|
+ deductReasons.add("教学点补贴:" + subsidy);
|
|
|
+ }
|
|
|
+
|
|
|
+ //判断课程是否在试用期内
|
|
|
+ boolean trail = false;
|
|
|
+
|
|
|
+ if(Objects.nonNull(teacher)&&Objects.nonNull(teacher.getEntryDate())&&courseScheduleTeacherSalary.getCourseSchedule().getClassDate().compareTo(teacher.getEntryDate())>=0){
|
|
|
+ trail = true;
|
|
|
+ }
|
|
|
+ if(Objects.nonNull(teacher)&&Objects.nonNull(teacher.getFormalStaffDate())&&courseScheduleTeacherSalary.getCourseSchedule().getClassDate().compareTo(teacher.getFormalStaffDate())>=0){
|
|
|
+ trail = false;
|
|
|
+ }
|
|
|
+
|
|
|
+ //如果上课日期在试用期内按80%结算
|
|
|
+ if(trail){
|
|
|
+ expectSalary = expectSalary.multiply(new BigDecimal("0.8"));
|
|
|
+ deductReasons.add("未转正");
|
|
|
+ }
|
|
|
+
|
|
|
+ //扣除费用
|
|
|
+ BigDecimal deductCost = new BigDecimal(0);
|
|
|
+
|
|
|
+ if(CollectionUtils.isEmpty(teacherAttendances)||Objects.isNull(teacherAttendances.get(0).getSignInStatus())){
|
|
|
+ //未签到扣除全部课酬
|
|
|
+ deductCost = deductCost.add(expectSalary.abs());
|
|
|
+ deductReasons.add("未签到扣除全部课酬");
|
|
|
+ }else if(YesOrNoEnum.NO.equals(teacherAttendances.get(0).getSignInStatus())&&TeachModeEnum.ONLINE.equals(courseScheduleTeacherSalary.getCourseSchedule().getTeachMode())){
|
|
|
+ //异常签到
|
|
|
+ int signCourseTimeBetweenSeconds = DateUtil.secondsBetween(teacherAttendances.get(0).getSignInTime(), courseScheduleTeacherSalary.getCourseSchedule().getStartClassTime());
|
|
|
+ float signCourseTimeBetween = (float)signCourseTimeBetweenSeconds/(float)60;
|
|
|
+ if(signCourseTimeBetween<=1&&signCourseTimeBetween>-3){
|
|
|
+ //课程开始前1分钟至开始后3分钟进入教室
|
|
|
+ deductCost = deductCost.add(expectSalary.divide(new BigDecimal(2)).abs());
|
|
|
+ deductReasons.add("课程开始前1分钟至开始后3分钟进入教室扣除一半课酬");
|
|
|
+ }else if(signCourseTimeBetween<=-3){
|
|
|
+ //课程开始后3分钟后进入教室
|
|
|
+ deductCost = deductCost.add(expectSalary.abs());
|
|
|
+ deductReasons.add("课程开始后3分钟进入教室扣除全部课酬");
|
|
|
+ }
|
|
|
+ }else if(YesOrNoEnum.NO.equals(teacherAttendances.get(0).getSignInStatus())&&TeachModeEnum.OFFLINE.equals(courseScheduleTeacherSalary.getCourseSchedule().getTeachMode())){
|
|
|
+ deductCost = deductCost.add(expectSalary.abs());
|
|
|
+ deductReasons.add("点名时经纬度不在范围内扣除全部课酬");
|
|
|
+ }
|
|
|
+
|
|
|
+ if(CollectionUtils.isEmpty(teacherAttendances)||Objects.isNull(teacherAttendances.get(0).getSignOutStatus())){
|
|
|
+ //未签退扣除全部课酬
|
|
|
+ deductCost = deductCost.add(expectSalary.abs());
|
|
|
+ deductReasons.add("未签退扣除全部课酬");
|
|
|
+ }else if(YesOrNoEnum.NO.equals(teacherAttendances.get(0).getSignOutStatus())&&TeachModeEnum.ONLINE.equals(courseScheduleTeacherSalary.getCourseSchedule().getTeachMode())){
|
|
|
+ //异常签退
|
|
|
+ int signOutCourseTimeBetweenSeconds = DateUtil.secondsBetween(teacherAttendances.get(0).getSignOutTime(), courseScheduleTeacherSalary.getCourseSchedule().getEndClassTime());
|
|
|
+ float signOutCourseTimeBetween = (float)signOutCourseTimeBetweenSeconds/(float)60;
|
|
|
+
|
|
|
+ if(signOutCourseTimeBetween>3){
|
|
|
+ //课程开始前20分钟至开始后3分钟退出教室
|
|
|
+ deductCost = deductCost.add(expectSalary.abs());
|
|
|
+ deductReasons.add("课程结束前3分钟之前退出教室扣除全部课酬");
|
|
|
+ }else if(signOutCourseTimeBetween<=3&&signOutCourseTimeBetween>0){
|
|
|
+ //课程结束前3分钟后至课程结束前退出教室
|
|
|
+ deductCost = deductCost.add(expectSalary.divide(new BigDecimal(2)).abs());
|
|
|
+ deductReasons.add("课程结束前3分钟后至课程结束前退出教室扣除一半课酬");
|
|
|
+ }
|
|
|
+ }else if(YesOrNoEnum.NO.equals(teacherAttendances.get(0).getSignInStatus())&&TeachModeEnum.OFFLINE.equals(courseScheduleTeacherSalary.getCourseSchedule().getTeachMode())){
|
|
|
+ deductCost = deductCost.add(expectSalary.abs());
|
|
|
+ deductReasons.add("点名时经纬度不在范围内扣除全部课酬");
|
|
|
+ }
|
|
|
+
|
|
|
+ if(BigDecimal.ZERO.compareTo(deductCost)<0){
|
|
|
+ deductReasons.add("扣除总费用:" + deductCost);
|
|
|
+ }
|
|
|
+
|
|
|
+ BigDecimal finalSalary = expectSalary.subtract(deductCost).setScale(BigDecimal.ZERO.intValue(), BigDecimal.ROUND_HALF_UP);
|
|
|
+ courseScheduleTeacherSalary.setActualSalary(finalSalary.compareTo(BigDecimal.ZERO)<0?BigDecimal.ZERO:finalSalary);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void calPracticeTeacherActualSalary(CourseSchedule courseSchedule, CourseScheduleTeacherSalary courseScheduleTeacherSalary,
|
|
|
+ List<TeacherAttendance> teacherAttendances, School school, Teacher teacher) {
|
|
|
+ List<String> deductReasons = new ArrayList<>();
|
|
|
+
|
|
|
+ BigDecimal expectSalary = courseScheduleTeacherSalary.getExpectSalary();
|
|
|
+
|
|
|
+ BigDecimal subsidy = school.getSubsidy();
|
|
|
+ if (Objects.isNull(subsidy)) {
|
|
|
+ subsidy = new BigDecimal(0);
|
|
|
+ }
|
|
|
+ courseScheduleTeacherSalary.setSubsidy(subsidy);
|
|
|
+ expectSalary = expectSalary.add(subsidy);
|
|
|
+
|
|
|
+ if(BigDecimal.ZERO.compareTo(subsidy)!=0){
|
|
|
+ deductReasons.add("教学点补贴:" + subsidy);
|
|
|
+ }
|
|
|
+
|
|
|
+ //判断课程是否在试用期内
|
|
|
+ boolean trail = false;
|
|
|
+
|
|
|
+ if(Objects.nonNull(teacher)&&Objects.nonNull(teacher.getEntryDate())&&courseScheduleTeacherSalary.getCourseSchedule().getClassDate().compareTo(teacher.getEntryDate())>=0){
|
|
|
+ trail = true;
|
|
|
+ }
|
|
|
+ if(Objects.nonNull(teacher)&&Objects.nonNull(teacher.getFormalStaffDate())&&courseScheduleTeacherSalary.getCourseSchedule().getClassDate().compareTo(teacher.getFormalStaffDate())>=0){
|
|
|
+ trail = false;
|
|
|
+ }
|
|
|
+
|
|
|
+ //如果上课日期在试用期内按80%结算
|
|
|
+ if(trail){
|
|
|
+ expectSalary = expectSalary.multiply(new BigDecimal("0.8"));
|
|
|
+ deductReasons.add("未转正");
|
|
|
+ }
|
|
|
+
|
|
|
+ //扣除费用
|
|
|
+ BigDecimal deductCost = new BigDecimal(0);
|
|
|
+
|
|
|
+ TeacherAttendance teacherAttendance = null;
|
|
|
+ if(!CollectionUtils.isEmpty(teacherAttendances)){
|
|
|
+ teacherAttendance = teacherAttendances.get(0);
|
|
|
+ }
|
|
|
+ if(CollectionUtils.isEmpty(teacherAttendances)||Objects.isNull(teacherAttendance.getSignInStatus())){
|
|
|
+ //未签到扣除全部课酬
|
|
|
+ deductCost = deductCost.add(expectSalary.abs());
|
|
|
+ deductReasons.add("未签到扣除全部课酬");
|
|
|
+ }else if(YesOrNoEnum.NO.equals(teacherAttendance.getSignInStatus())){
|
|
|
+ //异常签到
|
|
|
+ int signCourseTimeBetweenSeconds = DateUtil.secondsBetween(teacherAttendance.getSignInTime(), courseScheduleTeacherSalary.getCourseSchedule().getStartClassTime());
|
|
|
+ float signCourseTimeBetween = (float)signCourseTimeBetweenSeconds/(float)60;
|
|
|
+ if(signCourseTimeBetween<=1&&signCourseTimeBetween>-3){
|
|
|
+ //课程开始前1分钟至开始后3分钟进入教室
|
|
|
+ deductCost = deductCost.add(expectSalary.divide(new BigDecimal(2)).abs());
|
|
|
+ deductReasons.add("课程开始前1分钟至开始后3分钟进入教室扣除一半课酬");
|
|
|
+ }else if(signCourseTimeBetween<=-3){
|
|
|
+ //课程开始后3分钟后进入教室
|
|
|
+ deductCost = deductCost.add(expectSalary.abs());
|
|
|
+ deductReasons.add("课程开始后3分钟进入教室扣除全部课酬");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if(CollectionUtils.isEmpty(teacherAttendances)||Objects.isNull(teacherAttendance.getSignOutStatus())){
|
|
|
+ //未签退扣除全部课酬
|
|
|
+ deductCost = deductCost.add(expectSalary.abs());
|
|
|
+ deductReasons.add("未签退扣除全部课酬");
|
|
|
+ }else if(YesOrNoEnum.NO.equals(teacherAttendance.getSignOutStatus())){
|
|
|
+ //异常签退
|
|
|
+ int signOutCourseTimeBetweenSeconds = DateUtil.secondsBetween(teacherAttendance.getSignOutTime(), courseScheduleTeacherSalary.getCourseSchedule().getEndClassTime());
|
|
|
+ float signOutCourseTimeBetween = (float)signOutCourseTimeBetweenSeconds/(float)60;
|
|
|
+
|
|
|
+ if(signOutCourseTimeBetween>3){
|
|
|
+ //课程开始前20分钟至开始后3分钟退出教室
|
|
|
+ deductCost = deductCost.add(expectSalary.abs());
|
|
|
+ deductReasons.add("课程结束前3分钟之前退出教室扣除全部课酬");
|
|
|
+ }else if(signOutCourseTimeBetween<=3&&signOutCourseTimeBetween>0){
|
|
|
+ //课程结束前3分钟后至课程结束前退出教室
|
|
|
+ deductCost = deductCost.add(expectSalary.divide(new BigDecimal(2)).abs());
|
|
|
+ deductReasons.add("课程结束前3分钟后至课程结束前退出教室扣除一半课酬");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ BigDecimal finalSalary = expectSalary.subtract(deductCost).setScale(BigDecimal.ZERO.intValue(), BigDecimal.ROUND_HALF_UP);
|
|
|
+
|
|
|
+ if(BigDecimal.ZERO.compareTo(deductCost)<0){
|
|
|
+ deductReasons.add("扣除总费用:" + deductCost);
|
|
|
+ }
|
|
|
+
|
|
|
+ courseScheduleTeacherSalary.setActualSalary(finalSalary.compareTo(BigDecimal.ZERO)<0?BigDecimal.ZERO:finalSalary);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public TeacherIncomeDto getTeacherSalaryOverview(Integer teacherId) {
|
|
|
+ Date now = new Date();
|
|
|
+ String monthStr = DateUtil.dateToString(now, "yyyy-MM");
|
|
|
+ TeacherIncomeDto teacherSalaryOverview = courseScheduleTeacherSalaryDao.getTeacherSalaryOverview(teacherId, monthStr);
|
|
|
+
|
|
|
+// courseScheduleDao.findTeacherCoursesWithDateRangeWithoutMusicGroup()
|
|
|
+
|
|
|
+ return teacherSalaryOverview;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
public void queryTeacherIncomeList(QueryInfo queryInfo) {
|
|
|
|
|
|
}
|