|  | @@ -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());
 | 
	
		
			
				|  |  | -				}
 | 
	
		
			
				|  |  | -			}
 | 
	
		
			
				|  |  |  		}
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  
 |