|
@@ -469,139 +469,98 @@ public class StudentAttendanceServiceImpl extends BaseServiceImpl<Long, StudentA
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- @Transactional(rollbackFor = Exception.class, isolation = Isolation.READ_COMMITTED)
|
|
|
- public void addStudentAttendanceRecord(Integer courseScheduleId, Integer userId, StudentAttendanceStatusEnum statusEnum, SignStatusEnum signStatusEnum) {
|
|
|
- CourseSchedule courseSchedule = courseScheduleDao.get(courseScheduleId.longValue());
|
|
|
- ClassGroup classGroup = classGroupDao.findByCourseSchedule(courseScheduleId, 0);
|
|
|
- StudentAttendance studentAttendance = studentAttendanceDao.findByStatusAndCourseScheduleId(userId, courseScheduleId);
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public void addStudentAttendanceSignIn(Long firstCourseId, Integer userId,Long currentScheduleId) {
|
|
|
Date date = new Date();
|
|
|
+ ClassGroup classGroup = classGroupDao.findByCourseSchedule(currentScheduleId.intValue(), 0);
|
|
|
+ StudentAttendance studentAttendance = studentAttendanceDao.findByStatusAndCourseScheduleId(userId, currentScheduleId.intValue());
|
|
|
if (studentAttendance == null) {
|
|
|
studentAttendance = new StudentAttendance();
|
|
|
studentAttendance.setClassGroupId(classGroup.getId());
|
|
|
- studentAttendance.setCourseScheduleId(courseScheduleId.longValue());
|
|
|
+ studentAttendance.setCourseScheduleId(currentScheduleId);
|
|
|
studentAttendance.setCurrentClassTimes(classGroup.getCurrentClassTimes() + 1);
|
|
|
studentAttendance.setGroupType(classGroup.getGroupType());
|
|
|
studentAttendance.setMusicGroupId(classGroup.getMusicGroupId());
|
|
|
studentAttendance.setUserId(userId);
|
|
|
- studentAttendance.setTeacherId(courseSchedule.getActualTeacherId());
|
|
|
- if (signStatusEnum == SignStatusEnum.SIGN_IN) {
|
|
|
- if (courseSchedule.getStudentNum() == null) {
|
|
|
- courseSchedule.setStudentNum(0);
|
|
|
- }
|
|
|
- courseSchedule.setStudentNum(courseSchedule.getStudentNum() + 1);
|
|
|
- }
|
|
|
+ studentAttendance.setCurrentScheduleId(firstCourseId);
|
|
|
studentAttendanceDao.insert(studentAttendance);
|
|
|
} else {
|
|
|
- studentAttendance.setTeacherId(courseSchedule.getActualTeacherId());
|
|
|
+ studentAttendance.setCurrentScheduleId(firstCourseId);
|
|
|
studentAttendance.setUpdateTime(date);
|
|
|
}
|
|
|
-// Date signInTime = studentAttendance.getSignInTime();
|
|
|
- //没有签到信息才会生成
|
|
|
- if (signStatusEnum == SignStatusEnum.SIGN_IN && studentAttendance.getSignInTime() == null) {
|
|
|
- //判断是否在签到时间段内(课程开始前20~结束前)
|
|
|
-// int advanceSignMinutes = Integer.parseInt(sysConfigDao.findConfigValue(SysConfigService.ADVANCE_SIGN_IN_MINUTES));
|
|
|
-// 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);
|
|
|
-// Date addMinutes = DateUtil.addMinutes(classStartDateTime, -60);
|
|
|
+ if (studentAttendance.getSignInTime() == null){
|
|
|
+ CourseSchedule courseSchedule = courseScheduleDao.get(currentScheduleId);
|
|
|
+ if (courseSchedule.getStudentNum() == null) {
|
|
|
+ courseSchedule.setStudentNum(0);
|
|
|
+ }
|
|
|
+ courseSchedule.setStudentNum(courseSchedule.getStudentNum() + 1);
|
|
|
+ studentAttendance.setTeacherId(courseSchedule.getActualTeacherId());
|
|
|
//课程结束前进入,算正常
|
|
|
- studentAttendance.setStatus(statusEnum);
|
|
|
+ studentAttendance.setStatus(StudentAttendanceStatusEnum.NORMAL);
|
|
|
studentAttendance.setSignInTime(date);
|
|
|
|
|
|
courseSchedule.setUpdateTime(date);
|
|
|
-// courseSchedule.setStudentNum((courseSchedule.getStudentNum() == null?0:courseSchedule.getStudentNum()) + 1);
|
|
|
courseScheduleDao.update(courseSchedule);
|
|
|
- /*if(DateUtil.minutesBetween(addMinutes,date) >= 0 && DateUtil.minutesBetween(date,classEndDateTime) > 0){
|
|
|
-
|
|
|
- }*/
|
|
|
- } 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 = "5";
|
|
|
- }
|
|
|
- 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;
|
|
|
- }
|
|
|
- }
|
|
|
- if(courseSchedules.size() > 0){
|
|
|
- String courseClassDate;
|
|
|
- String courseStartDateTime;
|
|
|
- String courseEndDateTime;
|
|
|
- String format2 = DateUtil.format(courseSchedule.getClassDate(), DateUtil.DEFAULT_PATTERN);
|
|
|
- String format3 = DateUtil.format(courseSchedule.getEndClassTime(), DateUtil.EXPANDED_TIME_FORMAT);
|
|
|
- Date date1 = DateUtil.stringToDate(format2 + " " + format3, DateUtil.EXPANDED_DATE_TIME_FORMAT);
|
|
|
- studentAttendance.setSignOutTime(date1);
|
|
|
- for (int i = 0; i < courseSchedules.size(); i++) {
|
|
|
- courseClassDate = DateUtil.format(courseSchedules.get(i).getClassDate(), DateUtil.DEFAULT_PATTERN);
|
|
|
- courseStartDateTime = DateUtil.format(courseSchedules.get(i).getStartClassTime(), DateUtil.EXPANDED_TIME_FORMAT);
|
|
|
- Date startDateTime = DateUtil.stringToDate(courseClassDate + " " + courseStartDateTime, DateUtil.EXPANDED_DATE_TIME_FORMAT);
|
|
|
- //如果是接下来的第一节连堂课,并且签退时间不大于课程开始时间,那么跳出循环
|
|
|
- if(i == 0 && !date.after(startDateTime)){
|
|
|
- studentAttendance.setSignOutTime(date);
|
|
|
- break;
|
|
|
- }
|
|
|
- courseEndDateTime = DateUtil.format(courseSchedules.get(i).getEndClassTime(), DateUtil.EXPANDED_TIME_FORMAT);
|
|
|
- Date endDateTime = DateUtil.stringToDate(courseClassDate + " " + courseEndDateTime, DateUtil.EXPANDED_DATE_TIME_FORMAT);
|
|
|
-
|
|
|
- //不是最后一节课
|
|
|
- if(i < courseSchedules.size() - 1){
|
|
|
- //大于课程结束时间
|
|
|
- if(date.after(endDateTime)){
|
|
|
- String format = DateUtil.format(courseSchedules.get(i + 1).getClassDate(), DateUtil.DEFAULT_PATTERN);
|
|
|
- String format1 = DateUtil.format(courseSchedules.get(i + 1).getStartClassTime(), DateUtil.EXPANDED_TIME_FORMAT);
|
|
|
- Date stringToDate = DateUtil.stringToDate(format + " " + format1, DateUtil.EXPANDED_DATE_TIME_FORMAT);
|
|
|
- //大于下一节课开始时间
|
|
|
- if(date.after(stringToDate)){
|
|
|
- //当前课程签退时间为课程结束时间
|
|
|
- upsetAttendance(userId,startDateTime,endDateTime,courseSchedules.get(i));
|
|
|
- }else {
|
|
|
- //当前课程签退时间为退出时间
|
|
|
- upsetAttendance(userId,startDateTime,date,courseSchedules.get(i));
|
|
|
- }
|
|
|
- }else {
|
|
|
- if(date.after(startDateTime)){
|
|
|
- //小于课程结束时间
|
|
|
- upsetAttendance(userId,startDateTime,date,courseSchedules.get(i));
|
|
|
- }
|
|
|
- break;
|
|
|
- }
|
|
|
- }else {
|
|
|
- if(date.after(startDateTime)){
|
|
|
- //小于课程结束时间
|
|
|
- upsetAttendance(userId,startDateTime,date,courseSchedules.get(i));
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
+ studentAttendanceDao.update(studentAttendance);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public void addStudentAttendanceSignOut(Long firstCourseId, Integer userId) {
|
|
|
+ Date date = new Date();
|
|
|
+ CourseSchedule courseSchedule = courseScheduleDao.get(firstCourseId);
|
|
|
+ String continueCourseTime = sysConfigDao.findConfigValue(SysConfigService.ONLINE_CONTINUE_COURSE_TIME);
|
|
|
+ if (StringUtils.isEmpty(continueCourseTime)) {
|
|
|
+ continueCourseTime = "5";
|
|
|
+ }
|
|
|
+ List<CourseSchedule> courseSchedules = new ArrayList<>();
|
|
|
+ courseSchedules.add(courseSchedule);
|
|
|
+ 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;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ String courseClassDate;
|
|
|
+ String courseStartDateTime;
|
|
|
+ String courseEndDateTime;
|
|
|
+ Boolean isBreak = false;
|
|
|
+ //签退之前看是不是第一次进入这个连堂课
|
|
|
+ for (int i = courseSchedules.size() - 1; i >= 0; i--) {
|
|
|
+ if(isBreak){
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ CourseSchedule schedule = courseSchedules.get(i);
|
|
|
+ courseClassDate = DateUtil.format(schedule.getClassDate(), DateUtil.DEFAULT_PATTERN);
|
|
|
+ courseStartDateTime = DateUtil.format(schedule.getStartClassTime(), DateUtil.EXPANDED_TIME_FORMAT);
|
|
|
+ Date startDateTime = DateUtil.stringToDate(courseClassDate + " " + courseStartDateTime, DateUtil.EXPANDED_DATE_TIME_FORMAT);
|
|
|
+ courseEndDateTime = DateUtil.format(schedule.getEndClassTime(), DateUtil.EXPANDED_TIME_FORMAT);
|
|
|
+ Date endDateTime = DateUtil.stringToDate(courseClassDate + " " + courseEndDateTime, DateUtil.EXPANDED_DATE_TIME_FORMAT);
|
|
|
+ //不是最后一节课
|
|
|
+ if(i != courseSchedules.size() - 1){
|
|
|
+ isBreak = upsetAttendance(userId,startDateTime,endDateTime,schedule,firstCourseId);
|
|
|
+ }else {
|
|
|
+ isBreak = upsetAttendance(userId,startDateTime,date,schedule,firstCourseId);
|
|
|
}
|
|
|
}
|
|
|
- studentAttendanceDao.update(studentAttendance);
|
|
|
}
|
|
|
|
|
|
- public void upsetAttendance(Integer userId,Date signInTime,Date signOutTime,CourseSchedule courseSchedule){
|
|
|
+ public Boolean upsetAttendance(Integer userId,Date signInTime,Date signOutTime,CourseSchedule courseSchedule,Long courseScheduleId){
|
|
|
StudentAttendance studentAttendance = studentAttendanceDao.findByStatusAndCourseScheduleId(userId, courseSchedule.getId().intValue());
|
|
|
+ Boolean flag = false;
|
|
|
+ Long courseId = teacherAttendanceDao.findFirstSign(courseScheduleId);
|
|
|
+ //如果当前课程是第一次签到的课程那么不更新签到时间,并且退出下次循环
|
|
|
+ if(courseId != null && courseId.equals(courseSchedule.getId())){
|
|
|
+ flag = true;
|
|
|
+ }
|
|
|
if(studentAttendance == null){
|
|
|
studentAttendance = new StudentAttendance();
|
|
|
studentAttendance.setSignOutTime(signOutTime);
|
|
@@ -613,14 +572,18 @@ public class StudentAttendanceServiceImpl extends BaseServiceImpl<Long, StudentA
|
|
|
studentAttendance.setCourseScheduleId(courseSchedule.getId());
|
|
|
studentAttendance.setMusicGroupId(courseSchedule.getMusicGroupId());
|
|
|
studentAttendance.setGroupType(courseSchedule.getGroupType());
|
|
|
+ studentAttendance.setCurrentScheduleId(courseScheduleId);
|
|
|
studentAttendanceDao.insert(studentAttendance);
|
|
|
}else {
|
|
|
studentAttendance.setSignOutTime(signOutTime);
|
|
|
+ studentAttendance.setCurrentScheduleId(courseScheduleId);
|
|
|
studentAttendance.setStatus(StudentAttendanceStatusEnum.NORMAL);
|
|
|
- studentAttendance.setSignInTime(signInTime);
|
|
|
+ if(!flag){
|
|
|
+ studentAttendance.setSignInTime(signInTime);
|
|
|
+ }
|
|
|
studentAttendanceDao.update(studentAttendance);
|
|
|
}
|
|
|
-
|
|
|
+ return flag;
|
|
|
}
|
|
|
|
|
|
@Override
|
|
@@ -666,7 +629,7 @@ public class StudentAttendanceServiceImpl extends BaseServiceImpl<Long, StudentA
|
|
|
//获取当前课程的所有连堂课列表
|
|
|
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);
|
|
|
+ cs = courseScheduleDao.queryContinueCourse(cs, continueCourseTime, courseClassDate + " " + courseEndDateTime);
|
|
|
//存在连堂课
|
|
|
if (cs != null) {
|
|
|
courseSchedules.add(cs);
|