|  | @@ -16,6 +16,7 @@ import com.ym.mec.biz.dal.dao.CourseScheduleDao;
 | 
	
		
			
				|  |  |  import com.ym.mec.biz.dal.dao.SysConfigDao;
 | 
	
		
			
				|  |  |  import com.ym.mec.biz.dal.dao.TeacherDao;
 | 
	
		
			
				|  |  |  import com.ym.mec.biz.dal.entity.CourseSchedule;
 | 
	
		
			
				|  |  | +import com.ym.mec.biz.dal.entity.StudentAttendance;
 | 
	
		
			
				|  |  |  import com.ym.mec.biz.dal.entity.Teacher;
 | 
	
		
			
				|  |  |  import com.ym.mec.biz.dal.entity.TeacherAttendance;
 | 
	
		
			
				|  |  |  import com.ym.mec.biz.dal.enums.GroupType;
 | 
	
	
		
			
				|  | @@ -242,19 +243,11 @@ public class RoomServiceImpl implements RoomService {
 | 
	
		
			
				|  |  |      @Transactional(rollbackFor = Exception.class)
 | 
	
		
			
				|  |  |      public void signIn(Long roomId) {
 | 
	
		
			
				|  |  |          SysUser sysUser = sysUserFeignService.queryUserInfo();
 | 
	
		
			
				|  |  | -        String userId = sysUser.getId().toString();
 | 
	
		
			
				|  |  | +        Integer userId = sysUser.getId();
 | 
	
		
			
				|  |  |          log.info("roomSignIn: roomId={}, userId={}", roomId, userId);
 | 
	
		
			
				|  |  | -        Teacher teacher = teacherDao.get(Integer.parseInt(userId));
 | 
	
		
			
				|  |  | +        Teacher teacher = teacherDao.get(userId);
 | 
	
		
			
				|  |  |          CourseSchedule courseSchedule = courseScheduleDao.get(roomId);
 | 
	
		
			
				|  |  |          Date date = new Date();
 | 
	
		
			
				|  |  | -        TeacherAttendance attendanceInfo = teacherAttendanceService.findByTeacherAttendanceInfo(roomId, courseSchedule.getActualTeacherId());
 | 
	
		
			
				|  |  | -        String format = DateUtil.format(courseSchedule.getClassDate(), DateUtil.DEFAULT_PATTERN);
 | 
	
		
			
				|  |  | -        String format1 = DateUtil.format(courseSchedule.getEndClassTime(), DateUtil.EXPANDED_TIME_FORMAT);
 | 
	
		
			
				|  |  | -        Date endDateTime = DateUtil.stringToDate(format + " " + format1, DateUtil.EXPANDED_DATE_TIME_FORMAT);
 | 
	
		
			
				|  |  | -        //如果
 | 
	
		
			
				|  |  | -        if(attendanceInfo != null && attendanceInfo.getSignOutTime() != null && date.before(endDateTime)){
 | 
	
		
			
				|  |  | -            teacherAttendanceService.cleanCourseTeacherSignOut(roomId);
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  |          String continueCourseTime = sysConfigDao.findConfigValue(SysConfigService.ONLINE_CONTINUE_COURSE_TIME);
 | 
	
		
			
				|  |  |          if(StringUtils.isEmpty(continueCourseTime)){
 | 
	
		
			
				|  |  |              continueCourseTime = "5";
 | 
	
	
		
			
				|  | @@ -275,31 +268,53 @@ public class RoomServiceImpl implements RoomService {
 | 
	
		
			
				|  |  |          if(signInRoomId == null){
 | 
	
		
			
				|  |  |              signInRoomId = roomId;
 | 
	
		
			
				|  |  |          }else {
 | 
	
		
			
				|  |  | -            if(teacher != null && teacher.getId().equals(courseSchedule.getActualTeacherId())){
 | 
	
		
			
				|  |  | -                String classDate = DateUtil.format(courseSchedule.getClassDate(), DateUtil.DEFAULT_PATTERN);
 | 
	
		
			
				|  |  | -                String startClassTime = DateUtil.format(courseSchedule.getStartClassTime(), DateUtil.EXPANDED_TIME_FORMAT);
 | 
	
		
			
				|  |  | -                //获取上一次课程
 | 
	
		
			
				|  |  | -                CourseSchedule lastCourse = courseScheduleDao.getLastCourse(courseSchedule.getClassGroupId(), classDate + " " + startClassTime, courseSchedule.getActualTeacherId(), continueCourseTime);
 | 
	
		
			
				|  |  | +            String classDate = DateUtil.format(courseSchedule.getClassDate(), DateUtil.DEFAULT_PATTERN);
 | 
	
		
			
				|  |  | +            String startClassTime = DateUtil.format(courseSchedule.getStartClassTime(), DateUtil.EXPANDED_TIME_FORMAT);
 | 
	
		
			
				|  |  | +            //获取上一次课程
 | 
	
		
			
				|  |  | +            CourseSchedule lastCourse = courseScheduleDao.getLastCourse(courseSchedule.getClassGroupId(), classDate + " " + startClassTime, courseSchedule.getActualTeacherId(), continueCourseTime);
 | 
	
		
			
				|  |  | +            if(teacher != null && userId.equals(courseSchedule.getActualTeacherId())){
 | 
	
		
			
				|  |  |                  //获取当前课程的签退时间
 | 
	
		
			
				|  |  | -                TeacherAttendance teacherAttendance = teacherAttendanceService.findByTeacherAttendanceInfo(lastCourse.getId(),courseSchedule.getActualTeacherId());
 | 
	
		
			
				|  |  | +                TeacherAttendance teacherAttendance = teacherAttendanceService.findByTeacherAttendanceInfo(lastCourse.getId(),userId);
 | 
	
		
			
				|  |  |                  //如果上次课签退时间和当前签到时间间隔小于等于5分钟,清除上一次课程的教师签退记录
 | 
	
		
			
				|  |  |                  Date signOutTime = teacherAttendance.getSignOutTime();
 | 
	
		
			
				|  |  | -                log.info("signOutTime: signOutTime={}, date={}", signOutTime, date);
 | 
	
		
			
				|  |  | +                log.info("teacherSignOutTime: signOutTime={}, date={}", signOutTime, date);
 | 
	
		
			
				|  |  |                  if(signOutTime != null && DateUtil.minutesBetween(signOutTime,date) <= Integer.parseInt(continueCourseTime)){
 | 
	
		
			
				|  |  |                      teacherAttendanceService.cleanCourseTeacherSignOut(lastCourse.getId());
 | 
	
		
			
				|  |  |                  }else {
 | 
	
		
			
				|  |  |                      //如果大于5分钟,不换课堂,对当前课程进行签到
 | 
	
		
			
				|  |  | -                    teacherAttendanceService.addTeacherAttendanceRecord(roomId.intValue(),courseSchedule.getActualTeacherId(), SignStatusEnum.SIGN_IN,true);
 | 
	
		
			
				|  |  | +                    teacherAttendanceService.addTeacherAttendanceRecord(roomId.intValue(),userId, SignStatusEnum.SIGN_IN,true);
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +            }else{
 | 
	
		
			
				|  |  | +                StudentAttendance statusAndCourseScheduleId = studentAttendanceService.findByStatusAndCourseScheduleId(lastCourse.getId(), userId);
 | 
	
		
			
				|  |  | +                Date signOutTime = statusAndCourseScheduleId.getSignOutTime();
 | 
	
		
			
				|  |  | +                log.info("studentSignOutTime: signOutTime={}, date={}", signOutTime, date);
 | 
	
		
			
				|  |  | +                if(signOutTime != null && DateUtil.minutesBetween(signOutTime,date) <= Integer.parseInt(continueCourseTime)){
 | 
	
		
			
				|  |  | +                    studentAttendanceService.cleanCourseStudentSignOut(lastCourse.getId(), userId);
 | 
	
		
			
				|  |  | +                }else {
 | 
	
		
			
				|  |  | +                    //如果大于5分钟,不换课堂,对当前课程进行签到
 | 
	
		
			
				|  |  | +                    studentAttendanceService.addStudentAttendanceRecord(signInRoomId.intValue(),userId, StudentAttendanceStatusEnum.NORMAL,SignStatusEnum.SIGN_IN);
 | 
	
		
			
				|  |  |                  }
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |          //如果存在连堂课,并且跨课超过5分钟
 | 
	
		
			
				|  |  |          log.info("signInRoomId: signInRoomId={}, userId={}", signInRoomId, userId);
 | 
	
		
			
				|  |  |          try {
 | 
	
		
			
				|  |  | -            if(teacher != null && teacher.getId().equals(courseSchedule.getActualTeacherId())){
 | 
	
		
			
				|  |  | -                teacherAttendanceService.addTeacherAttendanceRecord(signInRoomId.intValue(),courseSchedule.getActualTeacherId(), SignStatusEnum.SIGN_IN,true);
 | 
	
		
			
				|  |  | +            String format = DateUtil.format(courseSchedule.getClassDate(), DateUtil.DEFAULT_PATTERN);
 | 
	
		
			
				|  |  | +            String format1 = DateUtil.format(courseSchedule.getEndClassTime(), DateUtil.EXPANDED_TIME_FORMAT);
 | 
	
		
			
				|  |  | +            Date endDateTime = DateUtil.stringToDate(format + " " + format1, DateUtil.EXPANDED_DATE_TIME_FORMAT);
 | 
	
		
			
				|  |  | +            if(teacher != null && userId.equals(courseSchedule.getActualTeacherId())){
 | 
	
		
			
				|  |  | +                TeacherAttendance attendanceInfo = teacherAttendanceService.findByTeacherAttendanceInfo(roomId,userId);
 | 
	
		
			
				|  |  | +                //如果当前课程签退不为空,并且当前时间小于课程结束时间,那么清除签退时间
 | 
	
		
			
				|  |  | +                if(attendanceInfo != null && attendanceInfo.getSignOutTime() != null && date.before(endDateTime)){
 | 
	
		
			
				|  |  | +                    teacherAttendanceService.cleanCourseTeacherSignOut(roomId);
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +                teacherAttendanceService.addTeacherAttendanceRecord(signInRoomId.intValue(),userId, SignStatusEnum.SIGN_IN,true);
 | 
	
		
			
				|  |  |              }else {
 | 
	
		
			
				|  |  | -                studentAttendanceService.addStudentAttendanceRecord(signInRoomId.intValue(),Integer.parseInt(userId), StudentAttendanceStatusEnum.NORMAL,SignStatusEnum.SIGN_IN);
 | 
	
		
			
				|  |  | +                StudentAttendance studentAttendance = studentAttendanceService.findByStatusAndCourseScheduleId(roomId, userId);
 | 
	
		
			
				|  |  | +                if(studentAttendance != null && studentAttendance.getSignOutTime() != null && date.before(endDateTime)){
 | 
	
		
			
				|  |  | +                    studentAttendanceService.cleanCourseStudentSignOut(roomId, userId);
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +                studentAttendanceService.addStudentAttendanceRecord(signInRoomId.intValue(),userId, StudentAttendanceStatusEnum.NORMAL,SignStatusEnum.SIGN_IN);
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |          }catch (Exception e){
 | 
	
		
			
				|  |  |              e.printStackTrace();
 |