| 
					
				 | 
			
			
				@@ -468,6 +468,7 @@ public class StudentAttendanceServiceImpl extends BaseServiceImpl<Long, StudentA 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			studentAttendance.setTeacherId(courseSchedule.getActualTeacherId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			studentAttendance.setUpdateTime(date); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//		Date signInTime = studentAttendance.getSignInTime(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		//没有签到信息才会生成 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		if(signStatusEnum == SignStatusEnum.SIGN_IN && studentAttendance.getSignInTime() == null){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			//判断是否在签到时间段内(课程开始前20~结束前) 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -489,8 +490,6 @@ 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); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -500,7 +499,7 @@ public class StudentAttendanceServiceImpl extends BaseServiceImpl<Long, StudentA 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			if(DateUtil.minutesBetween(classEndDateTime,date) >= 0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				String continueCourseTime = sysConfigDao.findConfigValue(SysConfigService.ONLINE_CONTINUE_COURSE_TIME); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				if(StringUtils.isEmpty(continueCourseTime)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					continueCourseTime = "10"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					continueCourseTime = "5"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				List<CourseSchedule> courseSchedules = new ArrayList<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				CourseSchedule cs = courseSchedule; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -526,44 +525,62 @@ public class StudentAttendanceServiceImpl extends BaseServiceImpl<Long, StudentA 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 						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 = new StudentAttendance(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-									byStatusAndCourseScheduleId.setSignOutTime(endDateTime); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-									byStatusAndCourseScheduleId.setStatus(statusEnum); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-									byStatusAndCourseScheduleId.setSignInTime(startDateTime); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-									byStatusAndCourseScheduleId.setUpdateTime(date); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-									byStatusAndCourseScheduleId.setUserId(userId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-									byStatusAndCourseScheduleId.setTeacherId(courseSchedule.getActualTeacherId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-									byStatusAndCourseScheduleId.setClassGroupId(e.getClassGroupId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-									byStatusAndCourseScheduleId.setCourseScheduleId(e.getId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-									byStatusAndCourseScheduleId.setMusicGroupId(e.getMusicGroupId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-									byStatusAndCourseScheduleId.setGroupType(e.getGroupType()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-									byStatusAndCourseScheduleId.setCurrentClassTimes(classGroup.getCurrentClassTimes() + 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-									studentAttendanceDao.insert(byStatusAndCourseScheduleId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						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); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							courseEndDateTime = DateUtil.format(courseSchedules.get(i).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, courseSchedules.get(i).getId().intValue()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							Date signOutTime = date; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							if(date.before(startDateTime)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+								continue; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							if(i < courseSchedules.size() - 1 && date.after(endDateTime)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+								//不是最后一节连堂课,并且签退时间大于课程结束时间,签退时间等于课程结束时间 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+								signOutTime = endDateTime; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							if(byStatusAndCourseScheduleId != null){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+								if(byStatusAndCourseScheduleId.getSignOutTime() != null){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+									continue; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+								} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+								if(byStatusAndCourseScheduleId.getSignInTime() != null){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+									startDateTime = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 								} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+								byStatusAndCourseScheduleId.setSignInTime(startDateTime); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+								byStatusAndCourseScheduleId.setSignOutTime(signOutTime); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+								byStatusAndCourseScheduleId.setStatus(statusEnum); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+								byStatusAndCourseScheduleId.setUpdateTime(date); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+								studentAttendanceDao.update(byStatusAndCourseScheduleId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 							}else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-								break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+								byStatusAndCourseScheduleId = new StudentAttendance(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+								byStatusAndCourseScheduleId.setSignOutTime(signOutTime); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+								byStatusAndCourseScheduleId.setStatus(statusEnum); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+								byStatusAndCourseScheduleId.setSignInTime(startDateTime); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+								byStatusAndCourseScheduleId.setUpdateTime(date); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+								byStatusAndCourseScheduleId.setUserId(userId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+								byStatusAndCourseScheduleId.setTeacherId(courseSchedule.getActualTeacherId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+								byStatusAndCourseScheduleId.setClassGroupId(courseSchedules.get(i).getClassGroupId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+								byStatusAndCourseScheduleId.setCourseScheduleId(courseSchedules.get(i).getId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+								byStatusAndCourseScheduleId.setMusicGroupId(courseSchedules.get(i).getMusicGroupId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+								byStatusAndCourseScheduleId.setGroupType(courseSchedules.get(i).getGroupType()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+								byStatusAndCourseScheduleId.setCurrentClassTimes(classGroup.getCurrentClassTimes() + 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+								studentAttendanceDao.insert(byStatusAndCourseScheduleId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							if(studentAttendance.getSignOutTime() == null){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+								studentAttendance.setStatus(statusEnum); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+								studentAttendance.setSignOutTime(classEndDateTime); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 							} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 						} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				if(studentAttendance.getSignOutTime() == null){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					studentAttendance.setStatus(statusEnum); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					studentAttendance.setSignOutTime(date); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			}else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				studentAttendance.setStatus(statusEnum); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				studentAttendance.setSignOutTime(date); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		studentAttendanceDao.update(studentAttendance); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -596,7 +613,7 @@ public class StudentAttendanceServiceImpl extends BaseServiceImpl<Long, StudentA 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		//是否是连堂课 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		String continueCourseTime = sysConfigDao.findConfigValue(SysConfigService.ONLINE_CONTINUE_COURSE_TIME); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		if(StringUtils.isEmpty(continueCourseTime)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			continueCourseTime = "10"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			continueCourseTime = "5"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		Date date = new Date(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		for (CourseSchedule courseSchedule : courseScheduleList) { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -665,4 +682,14 @@ public class StudentAttendanceServiceImpl extends BaseServiceImpl<Long, StudentA 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	@Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	public StudentAttendance findByStatusAndCourseScheduleId(Long courseId, Integer userId) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		return studentAttendanceDao.findByStatusAndCourseScheduleId(userId,courseId.intValue()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	@Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	public void cleanCourseStudentSignOut(Long courseId, Integer userId) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		studentAttendanceDao.cleanCourseStudentSignOut(courseId,userId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 |