zouxuan 3 роки тому
батько
коміт
957aea7d5f

+ 12 - 15
mec-biz/src/main/java/com/ym/mec/biz/service/SysConfigService.java

@@ -35,14 +35,6 @@ public interface SysConfigService extends BaseService<Long, SysConfig> {
     String OFFLINE_ADVANCE_SIGN_IN_LATE_MINUTES = "offline_advance_sign_in_late_minutes";
     String OFFLINE_ADVANCE_SIGN_IN_LATE_MINUTES = "offline_advance_sign_in_late_minutes";
     //线下课课程结束前指定时间签退为异常
     //线下课课程结束前指定时间签退为异常
     String OFFLINE_ADVANCE_SIGN_OUT_MINUTES = "offline_advance_sign_out_minutes";
     String OFFLINE_ADVANCE_SIGN_OUT_MINUTES = "offline_advance_sign_out_minutes";
-
-    //线上课课程开始前指定时间打卡为正常签到
-    String ONLINE_ADVANCE_SIGN_IN_MINUTES = "online_advance_sign_in_minutes";
-    //线上课课程开始后指定时间内签到为迟到
-    String ONLINE_ADVANCE_SIGN_IN_LATE_MINUTES = "online_advance_sign_in_late_minutes";
-    //线上课课程结束前指定时间内签退为早退
-    String ONLINE_EARLY_SIGN_OUT_MINUTES = "online_early_sign_out_minutes";
-
     //线下课老师异常签到扣减课酬金额
     //线下课老师异常签到扣减课酬金额
     String OFFLINE_ERROR_SIGN_IN_CUT_SALARY = "offline_error_sign_in_cut_salary";
     String OFFLINE_ERROR_SIGN_IN_CUT_SALARY = "offline_error_sign_in_cut_salary";
     //线下课老师异常签到扣减课酬单位(1、元,2、百分比)
     //线下课老师异常签到扣减课酬单位(1、元,2、百分比)
@@ -74,17 +66,25 @@ public interface SysConfigService extends BaseService<Long, SysConfig> {
     //vip课程可更新学生签到状态时间限制,课程结束后{}分钟
     //vip课程可更新学生签到状态时间限制,课程结束后{}分钟
     String ENABLE_STUDENT_ATTENDANCE_TIME_RANGE_VIP = "enable_student_attendance_time_range_vip";
     String ENABLE_STUDENT_ATTENDANCE_TIME_RANGE_VIP = "enable_student_attendance_time_range_vip";
 
 
+    //线上连堂课间隔时间
+    String ONLINE_CONTINUE_COURSE_TIME = "online_continue_course_time";
+    //线上课课程开始前指定时间打卡为正常签到
+    String ONLINE_ADVANCE_SIGN_IN_MINUTES = "online_advance_sign_in_minutes";
+    //线上课课程开始后指定时间内签到为迟到
+    String ONLINE_ADVANCE_SIGN_IN_LATE_MINUTES = "online_advance_sign_in_late_minutes";
+    //线上课课程结束前指定时间内签退为早退
+    String ONLINE_EARLY_SIGN_OUT_MINUTES = "online_early_sign_out_minutes";
     //线上课老师迟到扣减课酬金额
     //线上课老师迟到扣减课酬金额
     String ONLINE_LATE_CUT_SALARY = "online_late_cut_salary";
     String ONLINE_LATE_CUT_SALARY = "online_late_cut_salary";
     //线上课老师迟到扣减课酬单位(1、元,2、百分比)
     //线上课老师迟到扣减课酬单位(1、元,2、百分比)
     String ONLINE_LATE_CUT_SALARY_UNIT = "online_late_cut_salary_unit";
     String ONLINE_LATE_CUT_SALARY_UNIT = "online_late_cut_salary_unit";
-    //线下课老师旷课扣减课酬金额
+    //线课老师旷课扣减课酬金额
     String ONLINE_LEVEL_SIGN_IN_CUT_SALARY = "online_level_sign_in_cut_salary";
     String ONLINE_LEVEL_SIGN_IN_CUT_SALARY = "online_level_sign_in_cut_salary";
-    //线下课老师旷课扣减课酬单位(1、元,2、百分比)
+    //线课老师旷课扣减课酬单位(1、元,2、百分比)
     String ONLINE_LEVEL_SIGN_IN_CUT_SALARY_UNIT = "online_level_sign_in_cut_salary_unit";
     String ONLINE_LEVEL_SIGN_IN_CUT_SALARY_UNIT = "online_level_sign_in_cut_salary_unit";
-    //线课老师旷课扣减课酬金额
+    //线课老师旷课扣减课酬金额
     String ONLINE_NO_SIGN_IN_CUT_SALARY = "online_no_sign_in_cut_salary";
     String ONLINE_NO_SIGN_IN_CUT_SALARY = "online_no_sign_in_cut_salary";
-    //线课老师旷课扣减课酬单位(1、元,2、百分比)
+    //线课老师旷课扣减课酬单位(1、元,2、百分比)
     String ONLINE_NO_SIGN_IN_CUT_SALARY_UNIT = "online_no_sign_in_cut_salary_unit";
     String ONLINE_NO_SIGN_IN_CUT_SALARY_UNIT = "online_no_sign_in_cut_salary_unit";
     //线上课老师异常签退扣减课酬金额
     //线上课老师异常签退扣减课酬金额
     String ONLINE_ERROR_SIGN_OUT_CUT_SALARY = "online_error_sign_out_cut_salary";
     String ONLINE_ERROR_SIGN_OUT_CUT_SALARY = "online_error_sign_out_cut_salary";
@@ -123,8 +123,6 @@ public interface SysConfigService extends BaseService<Long, SysConfig> {
     String LABOUR_TEACHER_SALARY = "labour_teacher_salary";
     String LABOUR_TEACHER_SALARY = "labour_teacher_salary";
     //劳务考勤申诉时间限制方式(1、固定时间、2、固定日期)
     //劳务考勤申诉时间限制方式(1、固定时间、2、固定日期)
     String LABOUR_TEACHER_SALARY_TYPE = "labour_teacher_salary_type";
     String LABOUR_TEACHER_SALARY_TYPE = "labour_teacher_salary_type";
-    //线上连堂课间隔时间
-    String ONLINE_CONTINUE_COURSE_TIME = "online_continue_course_time";
     //线下连堂课间隔时间
     //线下连堂课间隔时间
     String OFFLINE_CONTINUE_COURSE_MINUTES = "offline_continue_course_minutes";
     String OFFLINE_CONTINUE_COURSE_MINUTES = "offline_continue_course_minutes";
     //陪练课可选老师的分部
     //陪练课可选老师的分部
@@ -151,7 +149,6 @@ public interface SysConfigService extends BaseService<Long, SysConfig> {
     String REFUND_PERIOD = "refund_period";
     String REFUND_PERIOD = "refund_period";
 
 
     //服务异常提醒
     //服务异常提醒
-
     //学员当月请假指定次数及以上提醒异常请假
     //学员当月请假指定次数及以上提醒异常请假
     String STUDENT_ERROR_LEAVE_NUM = "student_error_leave_num";
     String STUDENT_ERROR_LEAVE_NUM = "student_error_leave_num";
     //上课时间在指定时间段内提醒时间安排异常
     //上课时间在指定时间段内提醒时间安排异常

+ 84 - 208
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleTeacherSalaryServiceImpl.java

@@ -1598,6 +1598,8 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
     public void calMusicCourseTeacherActualSalary(CourseSchedule courseSchedule, CourseScheduleTeacherSalary courseScheduleTeacherSalary,
     public void calMusicCourseTeacherActualSalary(CourseSchedule courseSchedule, CourseScheduleTeacherSalary courseScheduleTeacherSalary,
                                                   List<TeacherAttendance> teacherAttendances, School school, Teacher teacher, double attendanceRange, Boolean updated) {
                                                   List<TeacherAttendance> teacherAttendances, School school, Teacher teacher, double attendanceRange, Boolean updated) {
 
 
+
+        //教师课酬
         if(StringUtils.isNotBlank(courseScheduleTeacherSalary.getDeductionReason())&&"不结算课酬".equals(courseScheduleTeacherSalary.getDeductionReason())){
         if(StringUtils.isNotBlank(courseScheduleTeacherSalary.getDeductionReason())&&"不结算课酬".equals(courseScheduleTeacherSalary.getDeductionReason())){
             //不结算课酬
             //不结算课酬
             if(updated){
             if(updated){
@@ -1609,218 +1611,98 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
             return;
             return;
         }
         }
 
 
-        BigDecimal teacherSalary = courseScheduleTeacherSalary.getExpectSalary();
-
-        if(CourseSchedule.CourseScheduleType.MUSIC_NETWORK.equals(courseSchedule.getType())||CourseSchedule.CourseScheduleType.HIGH_ONLINE.equals(courseSchedule.getType())){
-            List<TeacherSalaryDeductReasonDto> deductReasons = new ArrayList<>();
-
-            teacherSalary = teacherSalary.add(courseScheduleTeacherSalary.getSubsidy());
-            if(BigDecimal.ZERO.compareTo(teacherSalary)>0){
-                teacherSalary = new BigDecimal(0);
-            }
-
-            BigDecimal expectTeacherSalary = teacherSalary;
-
-            //判断课程是否在试用期内
-            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(new TeacherSalaryDeductReasonDto(DeductReasonEnum.TRAIL, expectTeacherSalary.subtract(teacherSalary)));
-            }
-
-            //扣除费用
-            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(new TeacherSalaryDeductReasonDto(DeductReasonEnum.SIGN_IN_TIME_ERR, teacherSalary.abs()));
-            }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(new TeacherSalaryDeductReasonDto(DeductReasonEnum.SIGN_IN_TIME_ERR, teacherSalary.divide(new BigDecimal(2)).abs()));
-                }else if(signCourseTimeBetween<=-3){
-                    //课程开始后3分钟后进入教室
-                    deductCost = deductCost.add(teacherSalary.abs());
-                    deductReasons.add(new TeacherSalaryDeductReasonDto(DeductReasonEnum.SIGN_IN_TIME_ERR, teacherSalary.abs()));
-                }
-            }
-
-            if(CollectionUtils.isEmpty(teacherAttendances)||Objects.isNull(teacherAttendance.getSignOutStatus())){
-                //未签退扣除一半课酬
-                deductCost = deductCost.add(teacherSalary.divide(new BigDecimal(2)).abs());
-                deductReasons.add(new TeacherSalaryDeductReasonDto(DeductReasonEnum.SIGN_OUT_TIME_ERR, teacherSalary.divide(new BigDecimal(2)).abs()));
-            }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分钟之前退出教室扣除全部课酬");
-                    deductReasons.add(new TeacherSalaryDeductReasonDto(DeductReasonEnum.SIGN_OUT_TIME_ERR, teacherSalary.abs()));
-                }else if(signOutCourseTimeBetween<=3&&signOutCourseTimeBetween>0){
-                    //课程结束前3分钟后至课程结束前退出教室
-                    deductCost = deductCost.add(teacherSalary.divide(new BigDecimal(2)).abs());
-//                    deductReasons.add("课程结束前3分钟后至课程结束前退出教室扣除一半课酬");
-                    deductReasons.add(new TeacherSalaryDeductReasonDto(DeductReasonEnum.SIGN_OUT_TIME_ERR, teacherSalary.divide(new BigDecimal(2)).abs()));
-                }
-            }
-
-            BigDecimal finalSalary = teacherSalary.subtract(deductCost).setScale(BigDecimal.ZERO.intValue(), BigDecimal.ROUND_HALF_UP);
-
-            //更新教师结算信息
-            courseScheduleTeacherSalary.setActualSalary(finalSalary.compareTo(BigDecimal.ZERO)<0?BigDecimal.ZERO:finalSalary);
-            courseScheduleTeacherSalary.setDeductReasons(deductReasons);
-        }else{
-            List<TeacherSalaryDeductReasonDto> deductReasons = new ArrayList<>();
+        List<String> deductReasons = new ArrayList<>();
 
 
+        if(Objects.isNull(courseScheduleTeacherSalary.getSubsidy())){
+            courseScheduleTeacherSalary.setSubsidy(BigDecimal.ZERO);
+        }
+        BigDecimal teacherSalary = courseScheduleTeacherSalary.getExpectSalary();
+        if(BigDecimal.ZERO.compareTo(courseScheduleTeacherSalary.getSubsidy()) != 0){
             teacherSalary = teacherSalary.add(courseScheduleTeacherSalary.getSubsidy());
             teacherSalary = teacherSalary.add(courseScheduleTeacherSalary.getSubsidy());
-            if(BigDecimal.ZERO.compareTo(teacherSalary)>0){
-                teacherSalary = new BigDecimal(0);
-            }
-
-            BigDecimal expectTeacherSalary = teacherSalary;
+            deductReasons.add("课程补贴:" + courseScheduleTeacherSalary.getSubsidy());
+        }
+        Integer tenantId = TenantContextHolder.getTenantId();
 
 
-            //判断课程是否在试用期内
-            boolean trail = false;
+        //试用期课酬规则
+        String configValue2 = sysTenantConfigService.getTenantConfigValue(SysConfigService.PROBATION_TEACHER_SALARY,tenantId);
+        Integer probationTeacherSalary = 100;
+        if(StringUtils.isNotEmpty(configValue2)){
+            probationTeacherSalary = Integer.parseInt(configValue2);
+        }
+        //如果上课日期在试用期内按80%结算
+        if(isTrail(teacher,courseSchedule.getClassDate())){
+            teacherSalary = teacherSalary.multiply(new BigDecimal(probationTeacherSalary/100));
+            deductReasons.add("未转正");
+        }
 
 
-            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;
+        //扣除费用
+        BigDecimal deductCost = BigDecimal.ZERO;
+        //获取签到状态
+        TeachModeEnum teachMode = courseScheduleTeacherSalary.getCourseSchedule().getTeachMode();
+        TeacherAttendance teacherAttendance = null;
+        if(teacherAttendances != null && teacherAttendances.size() > 0){
+            teacherAttendance = teacherAttendances.get(0);
+        }
+        if(teacherAttendance == null){
+            teacherAttendance = new TeacherAttendance();
+        }
+        if(teacherAttendance.getSignInStatus() == null || teacherAttendance.getSignInStatus() == YesOrNoEnum.NO){
+            SalarySettlementSignEnum signInStatus = getSignInStatus(teacherAttendance.getSignInTime(), courseSchedule.getStartClassTime(), teachMode,tenantId);
+            BigDecimal signInDeductCost = getSignInDeduce(teacherSalary, signInStatus, teachMode,tenantId);
+            if(signInDeductCost.compareTo(BigDecimal.ZERO) > 0){
+                deductCost = deductCost.add(signInDeductCost);
+                deductReasons.add("签到状态异常扣除课酬" + signInDeductCost);
             }
             }
-
-            //如果上课日期在试用期内按80%结算
-            if(trail){
-                teacherSalary = teacherSalary.multiply(new BigDecimal("0.8"));
-//                deductReasons.add("未转正");
-                deductReasons.add(new TeacherSalaryDeductReasonDto(DeductReasonEnum.TRAIL, expectTeacherSalary.subtract(teacherSalary)));
+        }
+        if(teacherAttendance.getSignOutStatus() == null || teacherAttendance.getSignOutStatus() == YesOrNoEnum.NO){
+            SalarySettlementSignEnum signOutStatus = getSignInStatus(teacherAttendance.getSignInTime(), courseSchedule.getStartClassTime(), teachMode,tenantId);
+            BigDecimal signOutDeductCost = getSignInDeduce(teacherSalary, signOutStatus, teachMode,tenantId);
+            if(signOutDeductCost.compareTo(BigDecimal.ZERO) > 0){
+                deductCost = deductCost.add(signOutDeductCost);
+                deductReasons.add("签退状态异常扣除课酬" + signOutDeductCost);
             }
             }
+        }
 
 
-            //扣除费用
-            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(teachMode == TeachModeEnum.OFFLINE){
+            if(school != null){
+                Boolean signInRange = false;
+                if(teacherAttendance != null && StringUtils.isNotEmpty(teacherAttendance.getSignInLongitudeLatitude())){
+                    signInRange = getSignRange(school.getLongitudeLatitude(),teacherAttendance.getSignInLongitudeLatitude(),attendanceRange);
                 }
                 }
-            }
-
-            BigDecimal gpsDeductAmount = new BigDecimal("0");
-
-            if(Objects.isNull(teacherAttendance)||Objects.isNull(teacherAttendance.getSignInStatus())){
-                //无签到记录扣除全部课酬
-                deductCost = deductCost.add(teacherSalary.abs());
-//                deductReasons.add("未签到扣除全部课酬");
-                deductReasons.add(new TeacherSalaryDeductReasonDto(DeductReasonEnum.SIGN_IN_TIME_ERR, teacherSalary.abs()));
-            }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元");
-                    deductReasons.add(new TeacherSalaryDeductReasonDto(DeductReasonEnum.SIGN_IN_TIME_ERR, new BigDecimal(50)));
-                }else if(signCourseTimeBetween<=0&&signCourseTimeBetween>-30){
-                    //迟到30分钟内扣除一半课酬
-                    deductCost = deductCost.add(teacherSalary.divide(new BigDecimal(2)).abs());
-//                    deductReasons.add("迟到30分钟内扣除一半课酬");
-                    deductReasons.add(new TeacherSalaryDeductReasonDto(DeductReasonEnum.SIGN_IN_TIME_ERR, teacherSalary.divide(new BigDecimal(2)).abs()));
-                }else if(signCourseTimeBetween<=-30){
-                    //迟到30分钟及以上扣除全部课酬
-                    deductCost = deductCost.add(teacherSalary.abs());
-//                    deductReasons.add("迟到30分钟及以上扣除全部课酬");
-                    deductReasons.add(new TeacherSalaryDeductReasonDto(DeductReasonEnum.SIGN_IN_TIME_ERR, teacherSalary.abs()));
+                Boolean signOutRange = false;
+                if(teacherAttendance != null || StringUtils.isNotEmpty(teacherAttendance.getSignOutLongitudeLatitude())){
+                    signOutRange = getSignRange(school.getLongitudeLatitude(),teacherAttendance.getSignOutLongitudeLatitude(),attendanceRange);
                 }
                 }
-                if(!signInInRange){
-                    //签到经纬度异常扣除50
-                    deductCost = deductCost.add(new BigDecimal(50));
-//                    deductReasons.add("签到经纬度异常扣除50");
-                    gpsDeductAmount =  new BigDecimal(50);
+                if(!signInRange){
+                    String c = sysTenantConfigService.getTenantConfigValue(SysConfigService.OFFLINE_SIGN_IN_GPS_ERROR_CUT_SALARY, tenantId);
+                    String c1 = sysTenantConfigService.getTenantConfigValue(SysConfigService.OFFLINE_SIGN_IN_GPS_ERROR_CUT_SALARY_UNIT, tenantId);
+                    BigDecimal signInGpsCutAmount = getCutAmount(c, c1, teacherSalary);
+                    if(signInGpsCutAmount.compareTo(BigDecimal.ZERO) > 0){
+                        deductReasons.add("签到经纬度异常扣除" + signInGpsCutAmount);
+                    }
                 }
                 }
-            }else{
-                signInInRange = true;
-            }
-
-            if(Objects.isNull(teacherAttendance)||Objects.isNull(teacherAttendance.getSignOutStatus())){
-                //未签退扣除全部课酬
-                deductCost = deductCost.add(teacherSalary.abs());
-//                deductReasons.add("未签退扣除全部课酬");
-                deductReasons.add(new TeacherSalaryDeductReasonDto(DeductReasonEnum.SIGN_OUT_TIME_ERR, teacherSalary.abs()));
-            }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("早退扣除全部课酬");
-                    deductReasons.add(new TeacherSalaryDeductReasonDto(DeductReasonEnum.SIGN_OUT_TIME_ERR, teacherSalary.abs()));
-                }else if((signOutCourseTimeBetween<=3&&signOutCourseTimeBetween>0)||signOutCourseTimeBetween>=3600){
-                    //异常签退,扣除50元
-                    deductCost = deductCost.add(new BigDecimal(50));
-//                    deductReasons.add("异常签退,扣除50元");
-                    deductReasons.add(new TeacherSalaryDeductReasonDto(DeductReasonEnum.SIGN_OUT_TIME_ERR, new BigDecimal(50)));
-                }else{
-                    //签退经纬度异常,扣除50元
-                    deductCost = deductCost.add(new BigDecimal(50));
-//                    deductReasons.add("签退经纬度异常,扣除50元");
-                    gpsDeductAmount =  new BigDecimal(50);
+                if(!signOutRange){
+                    String c = sysTenantConfigService.getTenantConfigValue(SysConfigService.OFFLINE_SIGN_OUT_GPS_ERROR_CUT_SALARY, tenantId);
+                    String c1 = sysTenantConfigService.getTenantConfigValue(SysConfigService.OFFLINE_SIGN_OUT_GPS_ERROR_CUT_SALARY_UNIT, tenantId);
+                    BigDecimal signOutGpsCutAmount = getCutAmount(c, c1, teacherSalary);
+                    if(signOutGpsCutAmount.compareTo(BigDecimal.ZERO) > 0){
+                        deductReasons.add("签退经纬度异常扣除" + signOutGpsCutAmount);
+                    }
                 }
                 }
-            }else{
-                signOutInRange = true;
-            }
-
-            if(!signInInRange&&!signOutInRange){
-                //签到签退GPS定位在指定距离外
-                deductCost = deductCost.add(teacherSalary.abs());
-//                deductReasons.add("签到签退GPS定位在指定距离外,扣除全部课酬");
-                gpsDeductAmount = teacherSalary.abs();
-            }
-
-            if(BigDecimal.ZERO.compareTo(gpsDeductAmount)<0){
-                deductReasons.add(new TeacherSalaryDeductReasonDto(DeductReasonEnum.GPS_ERR, gpsDeductAmount));
             }
             }
+        }
 
 
-            BigDecimal finalSalary = teacherSalary.subtract(deductCost).setScale(BigDecimal.ZERO.intValue(), BigDecimal.ROUND_HALF_UP);
+        BigDecimal finalSalary = teacherSalary.subtract(deductCost).setScale(BigDecimal.ZERO.intValue(), BigDecimal.ROUND_HALF_UP);
 
 
-            //更新教师结算信息
-            courseScheduleTeacherSalary.setActualSalary(finalSalary.compareTo(BigDecimal.ZERO)<0?BigDecimal.ZERO:finalSalary);
-            courseScheduleTeacherSalary.setDeductReasons(deductReasons);
+        if(BigDecimal.ZERO.compareTo(deductCost)<0){
+            deductReasons.add("扣除总费用:" + deductCost);
         }
         }
+        if(!CollectionUtils.isEmpty(deductReasons))
+            courseScheduleTeacherSalary.setDeductionReason(org.apache.commons.lang3.StringUtils.join(deductReasons, ";"));
+        //更新教师结算信息
+        courseScheduleTeacherSalary.setActualSalary(finalSalary.compareTo(BigDecimal.ZERO)<0?BigDecimal.ZERO:finalSalary);
+        courseScheduleTeacherSalary.setBelongToDaya(false);
     }
     }
 
 
     @Override
     @Override
@@ -1944,7 +1826,7 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
             }
             }
             return;
             return;
         }
         }
-        
+
         BigDecimal expectSalary = courseScheduleTeacherSalary.getExpectSalary();
         BigDecimal expectSalary = courseScheduleTeacherSalary.getExpectSalary();
 
 
         expectSalary = expectSalary.add(courseScheduleTeacherSalary.getSubsidy());
         expectSalary = expectSalary.add(courseScheduleTeacherSalary.getSubsidy());
@@ -2035,6 +1917,7 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
             TeacherIncomeReviewDto teacherSalaryOverview = new TeacherIncomeReviewDto();
             TeacherIncomeReviewDto teacherSalaryOverview = new TeacherIncomeReviewDto();
             return teacherSalaryOverview;
             return teacherSalaryOverview;
         }
         }
+        Integer tenantId = TenantContextHolder.getTenantId();
 
 
         if(StringUtils.isBlank(queryInfo.getStartDay())){
         if(StringUtils.isBlank(queryInfo.getStartDay())){
             LocalDate nowDate = LocalDate.now();
             LocalDate nowDate = LocalDate.now();
@@ -2077,19 +1960,12 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
         }
         }
 
 
         //签到GPS范围
         //签到GPS范围
-        SysConfig sysConfig = sysConfigService.findByParamName(SysConfigService.ATTENDANCE_RANGE);
+        String gpsRange = sysTenantConfigService.getTenantConfigValue(SysConfigService.ATTENDANCE_RANGE,tenantId);
         double attendanceRange = 0;
         double attendanceRange = 0;
-        if(Objects.nonNull(sysConfig)){
-            attendanceRange = Double.valueOf(sysConfig.getParanValue());
+        if(StringUtils.isNotEmpty(gpsRange)){
+            attendanceRange = Integer.parseInt(gpsRange);
         }
         }
 
 
-        //签到GPS范围VIP
-//        SysConfig vipSysConfig = sysConfigService.findByParamName(SysConfigService.ATTENDANCE_RANGE);
-//        double vipAttendanceRange = 0;
-//        if(Objects.nonNull(vipSysConfig)){
-//            vipAttendanceRange = Double.valueOf(vipSysConfig.getParanValue());
-//        }
-
         //教师签到记录
         //教师签到记录
         List<TeacherAttendance> allTeacherAttendances = teacherAttendanceDao.findByCourseSchedules(courseIds);
         List<TeacherAttendance> allTeacherAttendances = teacherAttendanceDao.findByCourseSchedules(courseIds);
         Map<Long, List<TeacherAttendance>> teacherCourseAttendanceMap = allTeacherAttendances.stream().filter(c->queryInfo.getTeacherId().equals(c.getTeacherId())).collect(Collectors.groupingBy(TeacherAttendance::getCourseScheduleId));
         Map<Long, List<TeacherAttendance>> teacherCourseAttendanceMap = allTeacherAttendances.stream().filter(c->queryInfo.getTeacherId().equals(c.getTeacherId())).collect(Collectors.groupingBy(TeacherAttendance::getCourseScheduleId));

+ 0 - 3
mec-teacher/src/main/java/com/ym/mec/teacher/controller/CourseScheduleTeacherSalaryController.java

@@ -88,9 +88,6 @@ public class CourseScheduleTeacherSalaryController extends BaseController {
         }
         }
         queryInfo.setTeacherId(sysUser.getId());
         queryInfo.setTeacherId(sysUser.getId());
         queryInfo.setCourseStatus(CourseStatusEnum.OVER);
         queryInfo.setCourseStatus(CourseStatusEnum.OVER);
-//        if(StringUtils.isBlank(queryInfo.getStartDay())){
-//            queryInfo.setStartDay("2021-03-01");
-//        }
         return succeed(courseScheduleTeacherSalaryService.getTeacherSalaryOverview(queryInfo));
         return succeed(courseScheduleTeacherSalaryService.getTeacherSalaryOverview(queryInfo));
     }
     }