| 
					
				 | 
			
			
				@@ -636,7 +636,11 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return getCutAmount(cutSalary,cutSalaryUnit,salary); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    public Boolean getSignRange(String schoolLongitudeLatitude,String longitudeLatitude,double attendanceRange){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public Boolean getSignRange(String schoolLongitudeLatitude,String longitudeLatitude,String gpsRange){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if(StringUtils.isEmpty(gpsRange)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        double attendanceRange = Double.parseDouble(gpsRange); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         Boolean signRange = false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if(Objects.nonNull(schoolLongitudeLatitude) && StringUtils.isNotBlank(longitudeLatitude)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             double signInDistance = MapUtil.distance(longitudeLatitude,schoolLongitudeLatitude); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -689,11 +693,7 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 .collect(Collectors.toMap(CourseSchedule::getId, courseSchedule -> courseSchedule)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         //定位范围 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        String gpsRange = sysTenantConfigService.getTenantConfigValue(SysConfigService.ATTENDANCE_RANGE,tenantId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        double attendanceRange = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if(StringUtils.isNotEmpty(gpsRange)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            attendanceRange = Double.valueOf(gpsRange); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        String attendanceRange = sysTenantConfigService.getTenantConfigValue(SysConfigService.ATTENDANCE_RANGE,tenantId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           //试用期课酬规则 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         String configValue2 = sysTenantConfigService.getTenantConfigValue(SysConfigService.PROBATION_TEACHER_SALARY,tenantId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         Integer probationTeacherSalary = 100; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1596,7 +1596,7 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     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, String attendanceRange, Boolean updated) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         //教师课酬 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1611,16 +1611,20 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        List<String> deductReasons = new ArrayList<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<TeacherSalaryDeductReasonDto> deductReasons = new ArrayList<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        BigDecimal teacherSalary = courseScheduleTeacherSalary.getExpectSalary(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         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()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            deductReasons.add("课程补贴:" + courseScheduleTeacherSalary.getSubsidy()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            deductReasons.add(new TeacherSalaryDeductReasonDto(DeductReasonEnum.SUBSIDY, courseScheduleTeacherSalary.getSubsidy())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if(BigDecimal.ZERO.compareTo(teacherSalary) > 0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            teacherSalary = new BigDecimal(0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         Integer tenantId = TenantContextHolder.getTenantId(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         //试用期课酬规则 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1630,9 +1634,10 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             probationTeacherSalary = Integer.parseInt(configValue2); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         //如果上课日期在试用期内按80%结算 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        BigDecimal expectTeacherSalary = teacherSalary; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if(isTrail(teacher,courseSchedule.getClassDate())){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            teacherSalary = teacherSalary.multiply(new BigDecimal(probationTeacherSalary/100)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            deductReasons.add("未转正"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            teacherSalary = teacherSalary.multiply(new BigDecimal(probationTeacherSalary / 100)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            deductReasons.add(new TeacherSalaryDeductReasonDto(DeductReasonEnum.TRAIL, expectTeacherSalary.subtract(teacherSalary))); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         //扣除费用 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1651,7 +1656,7 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             BigDecimal signInDeductCost = getSignInDeduce(teacherSalary, signInStatus, teachMode,tenantId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             if(signInDeductCost.compareTo(BigDecimal.ZERO) > 0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 deductCost = deductCost.add(signInDeductCost); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                deductReasons.add("签到状态异常扣除课酬" + signInDeductCost); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                deductReasons.add(new TeacherSalaryDeductReasonDto(DeductReasonEnum.SIGN_IN_TIME_ERR, teacherSalary.subtract(signInDeductCost))); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if(teacherAttendance.getSignOutStatus() == null || teacherAttendance.getSignOutStatus() == YesOrNoEnum.NO){ 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1659,7 +1664,7 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             BigDecimal signOutDeductCost = getSignInDeduce(teacherSalary, signOutStatus, teachMode,tenantId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             if(signOutDeductCost.compareTo(BigDecimal.ZERO) > 0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 deductCost = deductCost.add(signOutDeductCost); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                deductReasons.add("签退状态异常扣除课酬" + signOutDeductCost); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                deductReasons.add(new TeacherSalaryDeductReasonDto(DeductReasonEnum.SIGN_OUT_TIME_ERR, teacherSalary.subtract(signOutDeductCost))); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1679,7 +1684,7 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     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); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        deductReasons.add(new TeacherSalaryDeductReasonDto(DeductReasonEnum.GPS_ERR_IN, teacherSalary.subtract(signInGpsCutAmount))); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 if(!signOutRange){ 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1687,27 +1692,19 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     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); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        deductReasons.add(new TeacherSalaryDeductReasonDto(DeductReasonEnum.GPS_ERR_OUT, teacherSalary.subtract(signOutGpsCutAmount))); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         BigDecimal finalSalary = teacherSalary.subtract(deductCost).setScale(BigDecimal.ZERO.intValue(), BigDecimal.ROUND_HALF_UP); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if(BigDecimal.ZERO.compareTo(deductCost)<0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            deductReasons.add("扣除总费用:" + deductCost); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if(!CollectionUtils.isEmpty(deductReasons)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            courseScheduleTeacherSalary.setDeductionReason(org.apache.commons.lang3.StringUtils.join(deductReasons, ";")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        //更新教师结算信息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        courseScheduleTeacherSalary.setDeductReasons(deductReasons); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         courseScheduleTeacherSalary.setActualSalary(finalSalary.compareTo(BigDecimal.ZERO)<0?BigDecimal.ZERO:finalSalary); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        courseScheduleTeacherSalary.setBelongToDaya(false); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     public void calVipCourseTeacherActualSalary(CourseSchedule courseSchedule, CourseScheduleTeacherSalary courseScheduleTeacherSalary, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                                List<TeacherAttendance> teacherAttendances, School school, Teacher teacher, double attendanceRange, Boolean updated) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                                List<TeacherAttendance> teacherAttendances, School school, Teacher teacher, String attendanceRange, Boolean updated) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         List<TeacherSalaryDeductReasonDto> deductReasons = new ArrayList<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if(StringUtils.isNotBlank(courseScheduleTeacherSalary.getDeductionReason())&&"不结算课酬".equals(courseScheduleTeacherSalary.getDeductionReason())){ 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1719,97 +1716,81 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-         
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        BigDecimal expectSalary = courseScheduleTeacherSalary.getExpectSalary(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        expectSalary = expectSalary.add(courseScheduleTeacherSalary.getSubsidy()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if(BigDecimal.ZERO.compareTo(expectSalary)>0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        BigDecimal expectSalary = courseScheduleTeacherSalary.getExpectSalary(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if(Objects.isNull(courseScheduleTeacherSalary.getSubsidy())){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            courseScheduleTeacherSalary.setSubsidy(BigDecimal.ZERO); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if(BigDecimal.ZERO.compareTo(courseScheduleTeacherSalary.getSubsidy()) != 0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            expectSalary = expectSalary.add(courseScheduleTeacherSalary.getSubsidy()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            deductReasons.add(new TeacherSalaryDeductReasonDto(DeductReasonEnum.SUBSIDY, courseScheduleTeacherSalary.getSubsidy())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if(BigDecimal.ZERO.compareTo(expectSalary) > 0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             expectSalary = new BigDecimal(0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        BigDecimal expectTeacherSalary = expectSalary; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        //判断课程是否在试用期内 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        boolean trail = false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Integer tenantId = TenantContextHolder.getTenantId(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        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; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //试用期课酬规则 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        String configValue2 = sysTenantConfigService.getTenantConfigValue(SysConfigService.PROBATION_TEACHER_SALARY,tenantId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Integer probationTeacherSalary = 100; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if(StringUtils.isNotEmpty(configValue2)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            probationTeacherSalary = Integer.parseInt(configValue2); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         //如果上课日期在试用期内按80%结算 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if(trail){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            expectSalary = expectSalary.multiply(new BigDecimal("0.8")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-//            deductReasons.add("未转正"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        BigDecimal expectTeacherSalary = expectSalary; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if(isTrail(teacher,courseSchedule.getClassDate())){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            expectSalary = expectSalary.multiply(new BigDecimal(probationTeacherSalary / 100)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             deductReasons.add(new TeacherSalaryDeductReasonDto(DeductReasonEnum.TRAIL, expectTeacherSalary.subtract(expectSalary))); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         //扣除费用 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        BigDecimal deductCost = new BigDecimal(0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        BigDecimal gpsDeductAmount = new BigDecimal("0"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if(CollectionUtils.isEmpty(teacherAttendances)||Objects.isNull(teacherAttendances.get(0).getSignInStatus())){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            //未签到扣除全部课酬 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            deductCost = deductCost.add(expectSalary.abs()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-//            deductReasons.add("未签到扣除全部课酬"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            deductReasons.add(new TeacherSalaryDeductReasonDto(DeductReasonEnum.SIGN_IN_TIME_ERR, expectSalary.abs())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        }else if(YesOrNoEnum.NO.equals(teacherAttendances.get(0).getSignInStatus())&&TeachModeEnum.ONLINE.equals(courseSchedule.getTeachMode())){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            //异常签到 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            int signCourseTimeBetweenSeconds = DateUtil.secondsBetween(teacherAttendances.get(0).getSignInTime(), courseSchedule.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分钟进入教室扣除一半课酬"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                deductReasons.add(new TeacherSalaryDeductReasonDto(DeductReasonEnum.SIGN_IN_TIME_ERR, expectSalary.divide(new BigDecimal(2)).abs())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            }else if(signCourseTimeBetween<=-3){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                //课程开始后3分钟后进入教室 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                deductCost = deductCost.add(expectSalary.abs()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-//                deductReasons.add("课程开始后3分钟进入教室扣除全部课酬"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                deductReasons.add(new TeacherSalaryDeductReasonDto(DeductReasonEnum.SIGN_IN_TIME_ERR, expectSalary.abs())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        }else if(YesOrNoEnum.NO.equals(teacherAttendances.get(0).getSignInStatus())&&TeachModeEnum.OFFLINE.equals(courseSchedule.getTeachMode())){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            deductCost = deductCost.add(expectSalary.abs()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-//            deductReasons.add("点名时经纬度不在范围内扣除全部课酬"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            gpsDeductAmount = expectSalary.abs(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if(CollectionUtils.isEmpty(teacherAttendances)||Objects.isNull(teacherAttendances.get(0).getSignOutStatus())){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            //未签退扣除全部课酬 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            deductCost = deductCost.add(expectSalary.abs()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-//            deductReasons.add("未签退扣除全部课酬"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            deductReasons.add(new TeacherSalaryDeductReasonDto(DeductReasonEnum.SIGN_OUT_TIME_ERR, expectSalary.abs())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        }else if(YesOrNoEnum.NO.equals(teacherAttendances.get(0).getSignOutStatus())&&TeachModeEnum.ONLINE.equals(courseSchedule.getTeachMode())){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            //异常签退 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            int signOutCourseTimeBetweenSeconds = DateUtil.secondsBetween(teacherAttendances.get(0).getSignOutTime(), courseSchedule.getEndClassTime()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            float signOutCourseTimeBetween = (float)signOutCourseTimeBetweenSeconds/(float)60; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            if(signOutCourseTimeBetween>3){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                //课程开始前20分钟至开始后3分钟退出教室 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                deductCost = deductCost.add(expectSalary.abs()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-//                deductReasons.add("课程结束前3分钟之前退出教室扣除全部课酬"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                deductReasons.add(new TeacherSalaryDeductReasonDto(DeductReasonEnum.SIGN_OUT_TIME_ERR, expectSalary.abs())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            }else if(signOutCourseTimeBetween<=3&&signOutCourseTimeBetween>0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                //课程结束前3分钟后至课程结束前退出教室 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                deductCost = deductCost.add(expectSalary.divide(new BigDecimal(2)).abs()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-//                deductReasons.add("课程结束前3分钟后至课程结束前退出教室扣除一半课酬"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                deductReasons.add(new TeacherSalaryDeductReasonDto(DeductReasonEnum.SIGN_OUT_TIME_ERR, expectSalary.divide(new BigDecimal(2)).abs())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        }else if(YesOrNoEnum.NO.equals(teacherAttendances.get(0).getSignInStatus())&&TeachModeEnum.OFFLINE.equals(courseSchedule.getTeachMode())){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            deductCost = deductCost.add(expectSalary.abs()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-//            deductReasons.add("点名时经纬度不在范围内扣除全部课酬"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            gpsDeductAmount = expectSalary.abs(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if(BigDecimal.ZERO.compareTo(gpsDeductAmount)<0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            deductReasons.add(new TeacherSalaryDeductReasonDto(DeductReasonEnum.GPS_ERR, gpsDeductAmount)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        BigDecimal deductCost = BigDecimal.ZERO; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        TeachModeEnum teachMode = courseSchedule.getTeachMode(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if(TeachModeEnum.OFFLINE == teachMode){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if(true){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                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, expectSalary); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if(signInGpsCutAmount.compareTo(BigDecimal.ZERO) > 0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    deductReasons.add(new TeacherSalaryDeductReasonDto(DeductReasonEnum.GPS_ERR_IN, expectSalary.subtract(signInGpsCutAmount))); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if(true){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                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, expectSalary); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if(signOutGpsCutAmount.compareTo(BigDecimal.ZERO) > 0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    deductReasons.add(new TeacherSalaryDeductReasonDto(DeductReasonEnum.GPS_ERR_OUT, expectSalary.subtract(signOutGpsCutAmount))); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            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(expectSalary, signInStatus, teachMode,tenantId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if(signInDeductCost.compareTo(BigDecimal.ZERO) > 0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    deductCost = deductCost.add(signInDeductCost); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    deductReasons.add(new TeacherSalaryDeductReasonDto(DeductReasonEnum.SIGN_IN_TIME_ERR, expectSalary.subtract(signInDeductCost))); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if(teacherAttendance.getSignOutStatus() == null || teacherAttendance.getSignOutStatus() == YesOrNoEnum.NO){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                SalarySettlementSignEnum signOutStatus = getSignInStatus(teacherAttendance.getSignInTime(), courseSchedule.getStartClassTime(), teachMode,tenantId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                BigDecimal signOutDeductCost = getSignInDeduce(expectSalary, signOutStatus, teachMode,tenantId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if(signOutDeductCost.compareTo(BigDecimal.ZERO) > 0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    deductCost = deductCost.add(signOutDeductCost); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    deductReasons.add(new TeacherSalaryDeductReasonDto(DeductReasonEnum.SIGN_OUT_TIME_ERR, expectSalary.subtract(signOutDeductCost))); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        courseScheduleTeacherSalary.setDeductReasons(deductReasons); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         BigDecimal finalSalary = expectSalary.subtract(deductCost).setScale(BigDecimal.ZERO.intValue(), BigDecimal.ROUND_HALF_UP); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         courseScheduleTeacherSalary.setActualSalary(finalSalary.compareTo(BigDecimal.ZERO)<0?BigDecimal.ZERO:finalSalary); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        courseScheduleTeacherSalary.setDeductReasons(deductReasons); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @Override 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1826,89 +1807,65 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Integer tenantId = TenantContextHolder.getTenantId(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         BigDecimal expectSalary = courseScheduleTeacherSalary.getExpectSalary(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        expectSalary = expectSalary.add(courseScheduleTeacherSalary.getSubsidy()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if(BigDecimal.ZERO.compareTo(expectSalary)>0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            expectSalary = new BigDecimal(0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if(Objects.isNull(courseScheduleTeacherSalary.getSubsidy())){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            courseScheduleTeacherSalary.setSubsidy(BigDecimal.ZERO); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        BigDecimal expectTeacherSalary = expectSalary; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        //判断课程是否在试用期内 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        boolean trail = false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if(Objects.nonNull(teacher)&&Objects.nonNull(teacher.getEntryDate())&&courseSchedule.getClassDate().compareTo(teacher.getEntryDate())>=0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            trail = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if(BigDecimal.ZERO.compareTo(courseScheduleTeacherSalary.getSubsidy()) != 0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            expectSalary = expectSalary.add(courseScheduleTeacherSalary.getSubsidy()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            deductReasons.add(new TeacherSalaryDeductReasonDto(DeductReasonEnum.SUBSIDY, courseScheduleTeacherSalary.getSubsidy())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if(Objects.nonNull(teacher)&&Objects.nonNull(teacher.getFormalStaffDate())&&courseSchedule.getClassDate().compareTo(teacher.getFormalStaffDate())>=0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            trail = false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if(BigDecimal.ZERO.compareTo(expectSalary) > 0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            expectSalary = new BigDecimal(0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         //如果上课日期在试用期内按80%结算 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if(trail){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            expectSalary = expectSalary.multiply(new BigDecimal("0.8")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-//            deductReasons.add("未转正"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //试用期课酬规则 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        String configValue2 = sysTenantConfigService.getTenantConfigValue(SysConfigService.PROBATION_TEACHER_SALARY,tenantId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Integer probationTeacherSalary = 100; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if(StringUtils.isNotEmpty(configValue2)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            probationTeacherSalary = Integer.parseInt(configValue2); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        BigDecimal expectTeacherSalary = expectSalary; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if(isTrail(teacher,courseSchedule.getClassDate())){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            expectSalary = expectSalary.multiply(new BigDecimal(probationTeacherSalary / 100)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             deductReasons.add(new TeacherSalaryDeductReasonDto(DeductReasonEnum.TRAIL, expectTeacherSalary.subtract(expectSalary))); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         //扣除费用 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        BigDecimal deductCost = new BigDecimal(0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        BigDecimal deductCost = BigDecimal.ZERO; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //获取签到状态 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        TeachModeEnum teachMode = courseScheduleTeacherSalary.getCourseSchedule().getTeachMode(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         TeacherAttendance teacherAttendance = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if(!CollectionUtils.isEmpty(teacherAttendances)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if(teacherAttendances != null && teacherAttendances.size() > 0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             teacherAttendance = teacherAttendances.get(0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if(CollectionUtils.isEmpty(teacherAttendances)||Objects.isNull(teacherAttendance.getSignInStatus())){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            //未签到扣除全部课酬 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            deductCost = deductCost.add(expectSalary.abs()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-//            deductReasons.add("未签到扣除全部课酬"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            deductReasons.add(new TeacherSalaryDeductReasonDto(DeductReasonEnum.SIGN_IN_TIME_ERR, expectSalary.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(expectSalary.divide(new BigDecimal(2)).abs()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-//                deductReasons.add("课程开始前1分钟至开始后3分钟进入教室扣除一半课酬"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                deductReasons.add(new TeacherSalaryDeductReasonDto(DeductReasonEnum.SIGN_IN_TIME_ERR, expectSalary.divide(new BigDecimal(2)).abs())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            }else if(signCourseTimeBetween<=-3){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                //课程开始后3分钟后进入教室 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                deductCost = deductCost.add(expectSalary.abs()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-//                deductReasons.add("课程开始后3分钟进入教室扣除全部课酬"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                deductReasons.add(new TeacherSalaryDeductReasonDto(DeductReasonEnum.SIGN_IN_TIME_ERR, expectSalary.abs())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if(CollectionUtils.isEmpty(teacherAttendances)||Objects.isNull(teacherAttendance.getSignOutStatus())){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            //未签退扣除全部课酬 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            deductCost = deductCost.add(expectSalary.abs()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-//            deductReasons.add("未签退扣除全部课酬"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            deductReasons.add(new TeacherSalaryDeductReasonDto(DeductReasonEnum.SIGN_OUT_TIME_ERR, expectSalary.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(expectSalary.abs()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-//                deductReasons.add("课程结束前3分钟之前退出教室扣除全部课酬"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                deductReasons.add(new TeacherSalaryDeductReasonDto(DeductReasonEnum.SIGN_OUT_TIME_ERR, expectSalary.abs())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            }else if(signOutCourseTimeBetween<=3&&signOutCourseTimeBetween>0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                //课程结束前3分钟后至课程结束前退出教室 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                deductCost = deductCost.add(expectSalary.divide(new BigDecimal(2)).abs()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-//                deductReasons.add("课程结束前3分钟后至课程结束前退出教室扣除一半课酬"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                deductReasons.add(new TeacherSalaryDeductReasonDto(DeductReasonEnum.SIGN_OUT_TIME_ERR, expectSalary.divide(new BigDecimal(2)).abs())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        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(expectSalary, signInStatus, teachMode,tenantId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if(signInDeductCost.compareTo(BigDecimal.ZERO) > 0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                deductCost = deductCost.add(signInDeductCost); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                deductReasons.add(new TeacherSalaryDeductReasonDto(DeductReasonEnum.SIGN_IN_TIME_ERR, signInDeductCost)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if(teacherAttendance.getSignInStatus() == null || teacherAttendance.getSignOutStatus() == YesOrNoEnum.NO){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            SalarySettlementSignEnum signOutStatus = getSignInStatus(teacherAttendance.getSignInTime(), courseSchedule.getStartClassTime(), teachMode,tenantId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            BigDecimal signOutDeductCost = getSignInDeduce(expectSalary, signOutStatus, teachMode,tenantId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if(signOutDeductCost.compareTo(BigDecimal.ZERO) > 0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                deductCost = deductCost.add(signOutDeductCost); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                deductReasons.add(new TeacherSalaryDeductReasonDto(DeductReasonEnum.SIGN_OUT_TIME_ERR, signOutDeductCost)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         BigDecimal finalSalary = expectSalary.subtract(deductCost).setScale(BigDecimal.ZERO.intValue(), BigDecimal.ROUND_HALF_UP); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        courseScheduleTeacherSalary.setActualSalary(finalSalary.compareTo(BigDecimal.ZERO)<0?BigDecimal.ZERO:finalSalary); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         courseScheduleTeacherSalary.setDeductReasons(deductReasons); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        courseScheduleTeacherSalary.setActualSalary(finalSalary.compareTo(BigDecimal.ZERO)<0?BigDecimal.ZERO:finalSalary); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @Override 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1960,11 +1917,7 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         //签到GPS范围 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        String gpsRange = sysTenantConfigService.getTenantConfigValue(SysConfigService.ATTENDANCE_RANGE,tenantId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        double attendanceRange = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if(StringUtils.isNotEmpty(gpsRange)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            attendanceRange = Integer.parseInt(gpsRange); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        String attendanceRange = sysTenantConfigService.getTenantConfigValue(SysConfigService.ATTENDANCE_RANGE,tenantId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         //教师签到记录 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         List<TeacherAttendance> allTeacherAttendances = teacherAttendanceDao.findByCourseSchedules(courseIds); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -2027,8 +1980,8 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             teacherSalaryOverview.setDayaIncome(monthActualIncome); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        teacherSalaryOverview.setAttendanceRange(attendanceRange); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        teacherSalaryOverview.setVipAttendanceRange(attendanceRange); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        teacherSalaryOverview.setAttendanceRange(StringUtils.isEmpty(attendanceRange)?0:Double.parseDouble(attendanceRange)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        teacherSalaryOverview.setVipAttendanceRange(StringUtils.isEmpty(attendanceRange)?0:Double.parseDouble(attendanceRange)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return teacherSalaryOverview; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -2045,6 +1998,7 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             pageInfo.setRows(Collections.EMPTY_LIST); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             return pageInfo; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Integer tenantId = TenantContextHolder.getTenantId(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         int count = courseScheduleDao.countTeacherCourse(params); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         pageInfo.setTotal(count); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -2070,18 +2024,7 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             //签到GPS范围 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            SysConfig sysConfig = sysConfigService.findByParamName(SysConfigService.ATTENDANCE_RANGE); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            double attendanceRange = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            if(Objects.nonNull(sysConfig)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                attendanceRange = Double.valueOf(sysConfig.getParanValue()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            //签到GPS范围VIP 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-//            SysConfig vipSysConfig = sysConfigService.findByParamName(SysConfigService.ATTENDANCE_RANGE_VIP); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-//            double vipAttendanceRange = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-//            if(Objects.nonNull(vipSysConfig)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-//                vipAttendanceRange = Double.valueOf(vipSysConfig.getParanValue()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-//            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            String attendanceRange = sysTenantConfigService.getTenantConfigValue(SysConfigService.ATTENDANCE_RANGE,tenantId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             //教师签到记录 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             List<TeacherAttendance> allTeacherAttendances = teacherAttendanceDao.findByCourseSchedules(courseIds); 
			 |