| 
					
				 | 
			
			
				@@ -178,59 +178,73 @@ public class TeacherAttendanceServiceImpl extends BaseServiceImpl<Long, TeacherA 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		TeacherAttendance teacherAttendance=teacherAttendanceDao.findByTeacherAttendanceInfo(userId.longValue(),courseScheduleId.longValue()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		ClassGroup classGroup = classGroupDao.findByCourseSchedule(courseScheduleId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		CourseSchedule courseSchedule = courseScheduleDao.get(courseScheduleId.longValue()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		boolean isAttendance=false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		Date now=new Date(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		SysConfig byParamName = sysConfigService.findByParamName(SysConfigService.ADVANCE_SIGN_IN_MINUTES); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		Integer advanceSignInMinutes=Integer.parseInt(byParamName.getParanValue()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		if(Objects.isNull(teacherAttendance)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			teacherAttendance=new TeacherAttendance(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			teacherAttendance.setCourseScheduleId(courseScheduleId.longValue()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		}else{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			isAttendance=true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			teacherAttendance.setCurrentClassTimes(classGroup.getCurrentClassTimes()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			teacherAttendance.setTeacherId(userId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			teacherAttendance.setMusicGroupId(classGroup.getMusicGroupId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			teacherAttendance.setClassGroupId(classGroup.getId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			teacherAttendance.setClassGroupId(courseScheduleId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			teacherAttendance.setTeacherId(userId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			teacherAttendanceDao.insert(teacherAttendance); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		}else if(teacherAttendance.getSignInTime() != null && teacherAttendance.getSignOutTime() != null){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		teacherAttendance.setTeacherId(userId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		teacherAttendance.setClassGroupId(classGroup.getId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		teacherAttendance.setMusicGroupId(classGroup.getMusicGroupId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		int timeGap = DateUtil.minutesBetween(now, courseSchedule.getStartClassTime()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		YesOrNoEnum yesOrNoEnum = courseScheduleService.enableOnlyNormalAttendance(courseSchedule.getStartClassTime(), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				userId.longValue(), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				false, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				null); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		switch (signStatus){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			case SIGN_IN: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				if (courseSchedule.getEndClassTime().after(now)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					teacherAttendance.setSignInTime(now); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					if(yesOrNoEnum.equals(YesOrNoEnum.YES)||advanceSignInMinutes<=timeGap&&timeGap<=60){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						teacherAttendance.setSignInStatus(YesOrNoEnum.YES); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					}else{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						teacherAttendance.setSignInStatus(YesOrNoEnum.NO); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		int advanceSignMinutes = Integer.parseInt(sysConfigDao.findConfigValue(SysConfigService.ADVANCE_SIGN_IN_MINUTES)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		Date date = new 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); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		Date addMinutes = DateUtil.addMinutes(classStartDateTime, advanceSignMinutes * -1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		//签到 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		if(teacherAttendance.getSignInTime() == null && SignStatusEnum.SIGN_IN.equals(signStatus)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			//是否连堂课 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			YesOrNoEnum yesOrNoEnum = courseScheduleService.enableOnlyNormalAttendance(courseSchedule.getStartClassTime(), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					userId.longValue(), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					false, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					null); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			teacherAttendance.setSignInTime(date); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			teacherAttendance.setSignInStatus(YesOrNoEnum.YES); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			boolean isSign = false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			if(yesOrNoEnum == YesOrNoEnum.YES){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				isSign = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			}else if(DateUtil.minutesBetween(addMinutes,date) >= 0 && DateUtil.minutesBetween(date,classStartDateTime) > 0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				//正常签到范围(开始前20分钟  ~  开始之前) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				isSign = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			}else if(DateUtil.minutesBetween(classStartDateTime,date) > 0 && DateUtil.minutesBetween(date,classEndDateTime) > 0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				//异常签到范围(开始之后  ~  结束之前) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				isSign = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				teacherAttendance.setSignInStatus(YesOrNoEnum.NO); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			if(isSign){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				teacherAttendanceDao.update(teacherAttendance); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				if(courseSchedule.getTeachMode() == TeachModeEnum.ONLINE){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					//获取所有当前课程的学生列表 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					Map<Integer,String> userMap = JSONObject.parseObject(JSONObject.toJSONString(MapUtil.convertMybatisMap(courseScheduleDao.findStudentMap(courseScheduleId))),HashMap.class); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					if(userMap != null && userMap.size() > 0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						String name = subjectDao.findNames(classGroup.getSubjectIdList()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						sysMessageService.batchSendMessage(MessageSender.JIGUANG,MessageTypeEnum.STUDENT_PUSH_ONLINE_COURSE_ACTION,userMap, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+								null,0,"6?sealClassId=" + courseScheduleId + "&subjectName=" + name ,courseSchedule.getName()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				int currentClassTimes = teacherAttendanceDao.countClassTime(classGroup.getId().longValue()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				classGroup.setCurrentClassTimes(currentClassTimes); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				if(updateCourseScheduleStatus&&courseSchedule.getStatus().equals(CourseStatusEnum.NOT_START)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					courseScheduleDao.updateCourscheduleStatus(courseScheduleId,CourseStatusEnum.UNDERWAY.getCode()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			case SIGN_OUT: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				teacherAttendance.setSignOutTime(now); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				teacherAttendance.setSignOutStatus(YesOrNoEnum.YES); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			default: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if(isAttendance){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			if(SignStatusEnum.SIGN_OUT.equals(signStatus)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		//签退 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		if(teacherAttendance.getSignOutTime() == null && SignStatusEnum.SIGN_OUT.equals(signStatus)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			//正常签退范围(课程结束后) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			if(DateUtil.minutesBetween(classEndDateTime,date) > 0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				teacherAttendance.setSignOutTime(date); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				teacherAttendance.setSignOutStatus(YesOrNoEnum.YES); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				teacherAttendanceDao.update(teacherAttendance); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				//教师签退后,给未签到学员添加旷课记录 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				//封装未签到学员签到列表 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				List<StudentAttendance> studentAttendances = studentAttendanceDao.queryNoSignStudentRecord(courseScheduleId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				if(studentAttendances != null && studentAttendances.size() > 0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					studentAttendances.forEach(e->{ 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -241,18 +255,6 @@ public class TeacherAttendanceServiceImpl extends BaseServiceImpl<Long, TeacherA 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					studentAttendanceDao.addStudentAttendances(studentAttendances); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		}else{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			teacherAttendanceDao.insert(teacherAttendance); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			//教师到课推送 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			if(courseSchedule.getTeachMode() == TeachModeEnum.ONLINE){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				//获取所有当前课程的学生列表 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				Map<Integer,String> userMap = JSONObject.parseObject(JSONObject.toJSONString(MapUtil.convertMybatisMap(courseScheduleDao.findStudentMap(courseScheduleId))),HashMap.class); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				if(userMap != null && userMap.size() > 0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					String name = subjectDao.findNames(classGroup.getSubjectIdList()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					sysMessageService.batchSendMessage(MessageSender.JIGUANG,MessageTypeEnum.STUDENT_PUSH_ONLINE_COURSE_ACTION,userMap, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-							null,0,"6?sealClassId=" + courseScheduleId + "&subjectName=" + name ,courseSchedule.getName()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 |