| 
					
				 | 
			
			
				@@ -33,7 +33,7 @@ import java.util.stream.Collectors; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 @Service 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 public class StudentAttendanceServiceImpl extends BaseServiceImpl<Long, StudentAttendance>  implements StudentAttendanceService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	@Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	private StudentAttendanceDao studentAttendanceDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	@Autowired 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -265,8 +265,8 @@ public class StudentAttendanceServiceImpl extends BaseServiceImpl<Long, StudentA 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				case LEAVE: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					result.put("numberOfLeavePeoples",studentStatusCount.getNumberOfStudent()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			default: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				default: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		}); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -297,18 +297,18 @@ public class StudentAttendanceServiceImpl extends BaseServiceImpl<Long, StudentA 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	@Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	@Transactional(rollbackFor = Exception.class) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	public boolean leave(Integer userId, Long courseScheduleId, String remark) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		CourseSchedule courseSchedule = courseScheduleDao.get(courseScheduleId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		if(courseSchedule == null){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			throw new BizException("课程编号异常"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		if(courseSchedule.getStatus() == CourseStatusEnum.OVER){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			throw new BizException("课程已结束"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		Date date = new Date(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		int hours = 4; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		String str = sysConfigDao.findConfigValue(SysConfigService.ADVANCE_LEAVE_HOURS); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		if (StringUtils.isNotBlank(str)) { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -318,7 +318,7 @@ public class StudentAttendanceServiceImpl extends BaseServiceImpl<Long, StudentA 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		if(DateUtil.addHours(date, hours).after(courseSchedule.getStartClassTime())){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			throw new BizException("开课{}小时之前才可以请假",hours); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		StudentAttendance studentAttendance  = studentAttendanceDao.findByStatusAndCourseScheduleId(userId,courseScheduleId.intValue()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		if(Objects.isNull(studentAttendance)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			studentAttendance=new StudentAttendance(); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -338,7 +338,7 @@ public class StudentAttendanceServiceImpl extends BaseServiceImpl<Long, StudentA 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		}else{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			studentAttendanceDao.insert(studentAttendance); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		ClassGroupStudentMapper classGroupStudentMapper = classGroupStudentMapperDao.query(courseSchedule.getClassGroupId(), userId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		if(Objects.isNull(classGroupStudentMapper)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			throw new BizException("您不在此课程对应班级上"); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -500,7 +500,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 = "3"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					continueCourseTime = "10"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				List<CourseSchedule> courseSchedules = new ArrayList<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				CourseSchedule cs = courseSchedule; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -528,36 +528,37 @@ public class StudentAttendanceServiceImpl extends BaseServiceImpl<Long, StudentA 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 						String courseEndDateTime; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 						for (CourseSchedule e:courseSchedules) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 							//获取当前课程的单节课时长 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-//							int signClassMinutes = courseScheduleDao.getSingleClassMinutes(e.getId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-//							totalMinutes -= signClassMinutes; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-							//补充签到签退时间 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-							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); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							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); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+								} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 							}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); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-							} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-							if(!date.before(endDateTime)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 								break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 							} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 						} 
			 |