| 
					
				 | 
			
			
				@@ -79,6 +79,10 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     private MusicGroupDao musicGroupDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     private TeacherDefaultPracticeGroupSalaryDao teacherDefaultPracticeGroupSalaryDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private SchoolDao schoolDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private SysConfigService sysConfigService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     private static final Logger LOGGER = LoggerFactory 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             .getLogger(CourseScheduleTeacherSalaryServiceImpl.class); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -342,11 +346,11 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 //异常签到 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 int signCourseTimeBetweenSeconds = DateUtil.secondsBetween(teacherAttendance.getSignInTime(), courseScheduleTeacherSalary.getCourseSchedule().getStartClassTime()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 int signCourseTimeBetween = signCourseTimeBetweenSeconds/60; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                if(signCourseTimeBetween<1&&signCourseTimeBetween>-3){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if(signCourseTimeBetween<=1&&signCourseTimeBetween>-3){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     //课程开始前1分钟至开始后3分钟进入教室 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     deductCost = deductCost.add(new BigDecimal(50)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     deductReasons.add("课程开始前1分钟至开始后3分钟进入教室扣除50元"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                }else if(signCourseTimeBetween<-3){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                }else if(signCourseTimeBetween<=-3){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     //课程开始后3分钟后进入教室 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     deductCost = deductCost.add(courseScheduleTeacherSalary.getExpectSalary()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     deductReasons.add("课程开始后3分钟进入教室扣除全部课酬"); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -371,7 +375,7 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 int signOutCourseTimeBetweenSeconds = DateUtil.secondsBetween(teacherAttendance.getSignOutTime(), courseScheduleTeacherSalary.getCourseSchedule().getEndClassTime()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 int signOutCourseTimeBetween = signOutCourseTimeBetweenSeconds/60; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                if(signCourseTimeBetween<20&&signCourseTimeBetween>-3){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if(signCourseTimeBetween<=20&&signCourseTimeBetween>-3){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     //课程开始前20分钟至开始后3分钟退出教室 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     deductCost = deductCost.add(courseScheduleTeacherSalary.getExpectSalary()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     deductReasons.add("课程开始前20分钟至开始后3分钟退出教室扣除全部课酬"); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -421,6 +425,13 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         List<Map<Long, BigDecimal>> courseSubsidyByCourses = courseScheduleTeacherSalaryDao.findCourseSubsidyByCourses(courseScheduleIds); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         Map<Integer, BigDecimal> courseSubsidyMap = MapUtil.convertIntegerMap(courseSubsidyByCourses); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Set<Integer> schoolIds = yesterdayCourseSchedules.stream().map(CourseSchedule::getSchoolId).collect(Collectors.toSet()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<School> schools = schoolDao.getSchools(new ArrayList<>(schoolIds)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Map<Integer, School> idSchoolMap = new HashMap<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if(!CollectionUtils.isEmpty(schools)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            idSchoolMap = schools.stream().collect(Collectors.toMap(School::getId, s->s, (s1, s2)->s1)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         //课程编号与课程对应集合 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         Map<Long, CourseSchedule> courseScheduleIdMap = yesterdayCourseSchedules.stream() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 .collect(Collectors.toMap(CourseSchedule::getId, courseSchedule -> courseSchedule)); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -432,6 +443,12 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        SysConfig sysConfig = sysConfigService.findByParamName(SysConfigService.ATTENDANCE_RANGE_VIP); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        double attendanceRange = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if(Objects.nonNull(sysConfig)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            attendanceRange = Double.valueOf(sysConfig.getParanValue()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         //教师签到记录 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         List<TeacherAttendance> allTeacherAttendances = teacherAttendanceDao.findByCourseSchedules(courseScheduleIds); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         Map<String, List<TeacherAttendance>> teacherCourseAttendanceMap = allTeacherAttendances.stream().collect(Collectors.groupingBy(ta -> org.apache.commons.lang3.StringUtils.joinWith(":", ta.getCourseScheduleId(), ta.getTeacherId()))); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -588,10 +605,6 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     //迟到30分钟及以上扣除全部课酬 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     deductCost = deductCost.add(teacherSalary); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     deductReasons.add("迟到30分钟及以上扣除全部课酬"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                }else{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    //其他,例如签到经纬度不在范围内 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    deductCost = deductCost.add(new BigDecimal(50)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    deductReasons.add("经纬度不在范围内扣除50元"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -613,6 +626,31 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            School school = idSchoolMap.get(courseSchedule.getSchoolId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            boolean signInInRange = false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            boolean signOutInRange = false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if(Objects.nonNull(school)&&Objects.nonNull(school.getLongitudeLatitude()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    &&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(!signInInRange&&!signOutInRange){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                deductReasons.clear(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                //签到签退GPS定位在指定距离外 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                deductCost = deductCost.add(teacherSalary); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                deductReasons.add("签到签退GPS定位在指定距离外,扣除全部课酬"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             BigDecimal finalSalary = teacherSalary.subtract(deductCost).setScale(BigDecimal.ZERO.intValue(), BigDecimal.ROUND_HALF_UP); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             if(BigDecimal.ZERO.compareTo(deductCost)<0){ 
			 |