|
@@ -482,8 +482,80 @@ public class StudentAttendanceServiceImpl extends BaseServiceImpl<Long, StudentA
|
|
|
courseScheduleDao.update(courseSchedule);
|
|
|
}
|
|
|
}else if(signStatusEnum == SignStatusEnum.SIGN_OUT){
|
|
|
- studentAttendance.setStatus(statusEnum);
|
|
|
- studentAttendance.setSignOutTime(date);
|
|
|
+ String classDate = DateUtil.format(courseSchedule.getClassDate(), DateUtil.DEFAULT_PATTERN);
|
|
|
+ String startClassTime = DateUtil.format(courseSchedule.getStartClassTime(), DateUtil.EXPANDED_TIME_FORMAT);
|
|
|
+ String endClassTime = DateUtil.format(courseSchedule.getEndClassTime(), DateUtil.EXPANDED_TIME_FORMAT);
|
|
|
+ //上课时间
|
|
|
+ Date classStartDateTime = DateUtil.stringToDate(classDate + " " + startClassTime, DateUtil.EXPANDED_DATE_TIME_FORMAT);
|
|
|
+ Date classEndDateTime = DateUtil.stringToDate(classDate + " " + endClassTime, DateUtil.EXPANDED_DATE_TIME_FORMAT);
|
|
|
+ if(DateUtil.minutesBetween(classEndDateTime,date) >= 0){
|
|
|
+ String continueCourseTime = sysConfigDao.findConfigValue(SysConfigService.ONLINE_CONTINUE_COURSE_TIME);
|
|
|
+ if(StringUtils.isEmpty(continueCourseTime)){
|
|
|
+ continueCourseTime = "10";
|
|
|
+ }
|
|
|
+ List<CourseSchedule> courseSchedules = new ArrayList<>();
|
|
|
+ CourseSchedule cs = courseSchedule;
|
|
|
+ while (true){
|
|
|
+ //获取当前课程的所有连堂课列表
|
|
|
+ String courseClassDate = DateUtil.format(cs.getClassDate(), DateUtil.DEFAULT_PATTERN);
|
|
|
+ String courseEndDateTime = DateUtil.format(cs.getEndClassTime(), DateUtil.EXPANDED_TIME_FORMAT);
|
|
|
+ cs = courseScheduleDao.queryContinueCourse(cs,continueCourseTime,courseClassDate + " " + courseEndDateTime);
|
|
|
+ //存在连堂课
|
|
|
+ if(cs != null){
|
|
|
+ courseSchedules.add(cs);
|
|
|
+ }else {
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if(courseSchedules.size() > 0){
|
|
|
+ //获取总上课时长
|
|
|
+ int totalMinutes = DateUtil.minutesBetween(classStartDateTime, date);
|
|
|
+ //减去第一节课时长
|
|
|
+ int firstMinutes = courseScheduleDao.getSingleClassMinutes(courseScheduleId.longValue());
|
|
|
+ totalMinutes -= firstMinutes;
|
|
|
+ if(totalMinutes > 0){
|
|
|
+ String courseClassDate;
|
|
|
+ String courseStartDateTime;
|
|
|
+ String courseEndDateTime;
|
|
|
+ for (CourseSchedule e:courseSchedules) {
|
|
|
+ //获取当前课程的单节课时长
|
|
|
+ int signClassMinutes = courseScheduleDao.getSingleClassMinutes(e.getId());
|
|
|
+ totalMinutes -= signClassMinutes;
|
|
|
+ if(totalMinutes >= 0){
|
|
|
+ //补充签到签退时间
|
|
|
+ courseClassDate = DateUtil.format(e.getClassDate(), DateUtil.DEFAULT_PATTERN);
|
|
|
+ courseStartDateTime = DateUtil.format(e.getStartClassTime(), DateUtil.EXPANDED_TIME_FORMAT);
|
|
|
+ courseEndDateTime = DateUtil.format(e.getEndClassTime(), DateUtil.EXPANDED_TIME_FORMAT);
|
|
|
+ Date startDateTime = DateUtil.stringToDate(courseClassDate + " " + courseStartDateTime, DateUtil.EXPANDED_DATE_TIME_FORMAT);
|
|
|
+ Date endDateTime = DateUtil.stringToDate(courseClassDate + " " + courseEndDateTime, DateUtil.EXPANDED_DATE_TIME_FORMAT);
|
|
|
+ StudentAttendance byStatusAndCourseScheduleId = studentAttendanceDao.findByStatusAndCourseScheduleId(userId, e.getId().intValue());
|
|
|
+ if(byStatusAndCourseScheduleId != null){
|
|
|
+ byStatusAndCourseScheduleId.setSignOutTime(date);
|
|
|
+ byStatusAndCourseScheduleId.setStatus(statusEnum);
|
|
|
+ byStatusAndCourseScheduleId.setUpdateTime(date);
|
|
|
+ studentAttendanceDao.update(byStatusAndCourseScheduleId);
|
|
|
+ }else {
|
|
|
+ byStatusAndCourseScheduleId.setSignOutTime(endDateTime);
|
|
|
+ byStatusAndCourseScheduleId.setStatus(statusEnum);
|
|
|
+ byStatusAndCourseScheduleId.setSignInTime(startDateTime);
|
|
|
+ byStatusAndCourseScheduleId.setUpdateTime(date);
|
|
|
+ byStatusAndCourseScheduleId.setUserId(userId);
|
|
|
+ byStatusAndCourseScheduleId.setTeacherId(courseSchedule.getActualTeacherId());
|
|
|
+ byStatusAndCourseScheduleId.setClassGroupId(classGroup.getId());
|
|
|
+ byStatusAndCourseScheduleId.setCourseScheduleId(courseScheduleId.longValue());
|
|
|
+ byStatusAndCourseScheduleId.setCurrentClassTimes(classGroup.getCurrentClassTimes() + 1);
|
|
|
+ studentAttendanceDao.insert(byStatusAndCourseScheduleId);
|
|
|
+ }
|
|
|
+ }else {
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }else {
|
|
|
+ studentAttendance.setStatus(statusEnum);
|
|
|
+ studentAttendance.setSignOutTime(date);
|
|
|
+ }
|
|
|
}
|
|
|
studentAttendanceDao.update(studentAttendance);
|
|
|
}
|
|
@@ -507,4 +579,78 @@ public class StudentAttendanceServiceImpl extends BaseServiceImpl<Long, StudentA
|
|
|
pageInfo.setRows(dataList);
|
|
|
return pageInfo;
|
|
|
}
|
|
|
+
|
|
|
+ @Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public void repairStudentAttendance(Integer month) {
|
|
|
+ //获取所有有老师考勤的课程记录,正常签退,当月线上课,有学员签到记录
|
|
|
+ List<CourseSchedule> courseScheduleList = courseScheduleDao.queryScheduleByAttendance(month);
|
|
|
+ //是否是连堂课
|
|
|
+ String continueCourseTime = sysConfigDao.findConfigValue(SysConfigService.ONLINE_CONTINUE_COURSE_TIME);
|
|
|
+ if(StringUtils.isEmpty(continueCourseTime)){
|
|
|
+ continueCourseTime = "10";
|
|
|
+ }
|
|
|
+ Date date = new Date();
|
|
|
+ for (CourseSchedule courseSchedule : courseScheduleList) {
|
|
|
+ List<CourseSchedule> courseSchedules = new ArrayList<>();
|
|
|
+ CourseSchedule cs = courseSchedule;
|
|
|
+ while (true){
|
|
|
+ //获取当前课程的所有连堂课列表
|
|
|
+ String courseClassDate = DateUtil.format(cs.getClassDate(), DateUtil.DEFAULT_PATTERN);
|
|
|
+ String courseEndDateTime = DateUtil.format(cs.getEndClassTime(), DateUtil.EXPANDED_TIME_FORMAT);
|
|
|
+ cs = courseScheduleDao.queryRepairContinueCourse(cs,continueCourseTime,courseClassDate + " " + courseEndDateTime);
|
|
|
+ //存在连堂课
|
|
|
+ if(cs != null){
|
|
|
+ courseSchedules.add(cs);
|
|
|
+ }else {
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //只会修复签到的学员考勤
|
|
|
+ List<BasicUserDto> students = courseScheduleStudentPaymentDao.findStudents(courseSchedule.getId());
|
|
|
+ if(courseSchedules.size() > 0) {
|
|
|
+ //获取当前课程老师总上课时长
|
|
|
+ int totalMinutes = teacherAttendanceDao.getTotalMinutes(courseSchedule.getId(),courseSchedule.getActualTeacherId());
|
|
|
+ int firstMinutes = courseScheduleDao.getSingleClassMinutes(courseSchedule.getId());
|
|
|
+ totalMinutes -= firstMinutes;
|
|
|
+ if (totalMinutes > 0) {
|
|
|
+ String courseClassDate;
|
|
|
+ String courseStartDateTime;
|
|
|
+ String courseEndDateTime;
|
|
|
+ for (CourseSchedule e:courseSchedules) {
|
|
|
+ //获取当前课程的单节课时长
|
|
|
+ int signClassMinutes = courseScheduleDao.getSingleClassMinutes(e.getId());
|
|
|
+ totalMinutes -= signClassMinutes;
|
|
|
+ if (totalMinutes >= 0) {
|
|
|
+ //补充签到签退时间
|
|
|
+ courseClassDate = DateUtil.format(e.getClassDate(), DateUtil.DEFAULT_PATTERN);
|
|
|
+ courseStartDateTime = DateUtil.format(e.getStartClassTime(), DateUtil.EXPANDED_TIME_FORMAT);
|
|
|
+ courseEndDateTime = DateUtil.format(e.getEndClassTime(), DateUtil.EXPANDED_TIME_FORMAT);
|
|
|
+ Date startDateTime = DateUtil.stringToDate(courseClassDate + " " + courseStartDateTime, DateUtil.EXPANDED_DATE_TIME_FORMAT);
|
|
|
+ Date endDateTime = DateUtil.stringToDate(courseClassDate + " " + courseEndDateTime, DateUtil.EXPANDED_DATE_TIME_FORMAT);
|
|
|
+ if(students != null && students.size() > 0){
|
|
|
+ students.forEach(student->{
|
|
|
+ StudentAttendance byStatusAndCourseScheduleId = studentAttendanceDao.findByStatusAndCourseScheduleId(student.getUserId(), e.getId().intValue());
|
|
|
+ if(byStatusAndCourseScheduleId == null){
|
|
|
+ byStatusAndCourseScheduleId = new StudentAttendance();
|
|
|
+ byStatusAndCourseScheduleId.setSignOutTime(endDateTime);
|
|
|
+ byStatusAndCourseScheduleId.setStatus(StudentAttendanceStatusEnum.NORMAL);
|
|
|
+ byStatusAndCourseScheduleId.setSignInTime(startDateTime);
|
|
|
+ byStatusAndCourseScheduleId.setUpdateTime(date);
|
|
|
+ byStatusAndCourseScheduleId.setUserId(student.getUserId());
|
|
|
+ byStatusAndCourseScheduleId.setTeacherId(e.getActualTeacherId());
|
|
|
+ byStatusAndCourseScheduleId.setClassGroupId(e.getClassGroupId());
|
|
|
+ byStatusAndCourseScheduleId.setMusicGroupId(e.getMusicGroupId());
|
|
|
+ byStatusAndCourseScheduleId.setGroupType(e.getGroupType());
|
|
|
+ byStatusAndCourseScheduleId.setCourseScheduleId(e.getId());
|
|
|
+ studentAttendanceDao.insert(byStatusAndCourseScheduleId);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|