zouxuan 5 роки тому
батько
коміт
46e7418dd3

+ 6 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/TeacherAttendanceDao.java

@@ -191,4 +191,10 @@ public interface TeacherAttendanceDao extends BaseDAO<Long, TeacherAttendance> {
 	 * @return
 	 */
     int getTotalMinutes(@Param("courseId") Long courseId, @Param("teacherId") Integer teacherId);
+
+	/**
+	 * 清空签退信息
+	 * @param courseId
+	 */
+	void cleanCourseTeacherSignOut(@Param("courseId") Long courseId);
 }

+ 6 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/TeacherAttendanceService.java

@@ -104,4 +104,10 @@ public interface TeacherAttendanceService extends BaseService<Long, TeacherAtten
 	 * @return void
 	 */
 	void updateTeacherAttendance(TeacherAttendance teacherAttendance);
+
+	/**
+	 * 清空考勤
+	 * @param courseId
+	 */
+	void cleanCourseTeacherSignOut(Long courseId);
 }

+ 11 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/TeacherAttendanceServiceImpl.java

@@ -348,6 +348,11 @@ public class TeacherAttendanceServiceImpl extends BaseServiceImpl<Long, TeacherA
 //								signOutTime = endDateTime;
 //							}
 							//如果签退时间大于课程结束时间
+							//如果当前课程没有签退记录,那么正常更新
+							TeacherAttendance personalAttendance = teacherAttendanceDao.getTeacherPersonalAttendance(courseSchedules.get(i).getId().intValue());
+							if(personalAttendance != null && personalAttendance.getSignOutTime() != null){
+								break;
+							}
 							if(date.after(endDateTime)){
 								teacherAttendanceDao.cuntinueCourseSign(courseSchedules.get(i).getId(),signInTime,date,1);
 							}else if (date.equals(endDateTime)){
@@ -496,4 +501,10 @@ public class TeacherAttendanceServiceImpl extends BaseServiceImpl<Long, TeacherA
 			teacherAttendanceDao.update(teacherAttendance);
 		}
 	}
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public void cleanCourseTeacherSignOut(Long courseId) {
+		teacherAttendanceDao.cleanCourseTeacherSignOut(courseId);
+	}
 }

+ 5 - 0
mec-biz/src/main/resources/config/mybatis/TeacherAttendanceMapper.xml

@@ -384,6 +384,11 @@
             #{courseScheduleId}
         </foreach>
     </update>
+    <update id="cleanCourseTeacherSignOut">
+        UPDATE teacher_attendance
+        SET sign_out_status_ = NULL,sign_out_time_= NULL
+    	WHERE course_schedule_id_=#{courseId}
+    </update>
 
     <delete id="deleteByMusicGroupId" parameterType="map" >
 		DELETE ta FROM teacher_attendance ta LEFT JOIN course_schedule cs ON ta.course_schedule_id_ = cs.id_

+ 29 - 3
mec-im/src/main/java/com/ym/service/Impl/RoomServiceImpl.java

@@ -17,6 +17,7 @@ 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.Teacher;
+import com.ym.mec.biz.dal.entity.TeacherAttendance;
 import com.ym.mec.biz.dal.enums.GroupType;
 import com.ym.mec.biz.dal.enums.SignStatusEnum;
 import com.ym.mec.biz.dal.enums.StudentAttendanceStatusEnum;
@@ -245,6 +246,7 @@ public class RoomServiceImpl implements RoomService {
         log.info("roomSignIn: roomId={}, userId={}", roomId, userId);
         Teacher teacher = teacherDao.get(Integer.parseInt(userId));
         CourseSchedule courseSchedule = courseScheduleDao.get(roomId);
+        Date date = new Date();
 
         String continueCourseTime = sysConfigDao.findConfigValue(SysConfigService.ONLINE_CONTINUE_COURSE_TIME);
         if(StringUtils.isEmpty(continueCourseTime)){
@@ -252,21 +254,45 @@ public class RoomServiceImpl implements RoomService {
         }
         CourseSchedule schedule = courseSchedule;
         //如果当前课程是连堂课,那么获取第一节课的课程编号
+        Long signInRoomId = null;
         while (true){
             String classDate = DateUtil.format(schedule.getClassDate(), DateUtil.DEFAULT_PATTERN);
             String startClassTime = DateUtil.format(schedule.getStartClassTime(), DateUtil.EXPANDED_TIME_FORMAT);
             schedule = courseScheduleDao.getLastCourse(schedule.getClassGroupId(),classDate + " " + startClassTime,schedule.getActualTeacherId(),continueCourseTime);
             if(schedule != null){
-                roomId = schedule.getId();
+                signInRoomId = schedule.getId();
             }else {
                 break;
             }
         }
+        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);
+                //获取当前课程的签退时间
+                TeacherAttendance teacherAttendance = teacherAttendanceService.getTeacherPersonalAttendance(lastCourse.getId().intValue());
+                //如果上次课签退时间和当前签到时间间隔小于等于5分钟,清除上一次课程的教师签退记录
+                Date signOutTime = teacherAttendance.getSignOutTime();
+                log.info("signOutTime: 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);
+                }
+            }
+        }
+        //如果存在连堂课,并且跨课超过5分钟
+        log.info("signInRoomId: signInRoomId={}, userId={}", signInRoomId, userId);
         try {
             if(teacher != null && teacher.getId().equals(courseSchedule.getActualTeacherId())){
-                teacherAttendanceService.addTeacherAttendanceRecord(roomId.intValue(),courseSchedule.getActualTeacherId(), SignStatusEnum.SIGN_IN,true);
+                teacherAttendanceService.addTeacherAttendanceRecord(signInRoomId.intValue(),courseSchedule.getActualTeacherId(), SignStatusEnum.SIGN_IN,true);
             }else {
-                studentAttendanceService.addStudentAttendanceRecord(roomId.intValue(),Integer.parseInt(userId), StudentAttendanceStatusEnum.NORMAL,SignStatusEnum.SIGN_IN);
+                studentAttendanceService.addStudentAttendanceRecord(signInRoomId.intValue(),Integer.parseInt(userId), StudentAttendanceStatusEnum.NORMAL,SignStatusEnum.SIGN_IN);
             }
         }catch (Exception e){
             e.printStackTrace();