|
@@ -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){
|