Pārlūkot izejas kodu

Merge remote-tracking branch 'origin/master'

周箭河 4 gadi atpakaļ
vecāks
revīzija
1aa5644c1e

+ 1 - 11
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseScheduleDao.java

@@ -820,7 +820,7 @@ public interface CourseScheduleDao extends BaseDAO<Long, CourseSchedule> {
      * @param courseScheduleId
      * @return
      */
-    List<Map<Integer, String>> findStudentMap(Integer courseScheduleId);
+    List<Map<Integer, String>> findStudentMap(Long courseScheduleId);
 
     List<CourseSchedule> findAllCourseSches();
 
@@ -1245,16 +1245,6 @@ public interface CourseScheduleDao extends BaseDAO<Long, CourseSchedule> {
                                        @Param("continueCourseTime") String continueCourseTime, @Param("endDateTime") String endDateTime);
 
     /**
-     * 获取当前课程,下一次连堂课
-     *
-     * @param continueCourseTime
-     * @param courseSchedule
-     * @return
-     */
-    CourseSchedule queryRepairContinueCourse(@Param("courseSchedule") CourseSchedule courseSchedule,
-                                             @Param("continueCourseTime") String continueCourseTime, @Param("endDateTime") String endDateTime);
-
-    /**
      * 获取单节课时长
      *
      * @param courseScheduleId

+ 0 - 8
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentAttendanceDao.java

@@ -271,14 +271,6 @@ public interface StudentAttendanceDao extends BaseDAO<Long, StudentAttendance> {
                       @Param("groupType")GroupType groupType);
 
     /**
-     * 连堂课签到,签退
-     * @param courseScheduleId
-     * @param startDateTime
-     * @param endDateTime
-     */
-    void cuntinueCourseSign(@Param("courseScheduleId")Long courseScheduleId,@Param("startDateTime")Date startDateTime,@Param("endDateTime")Date endDateTime);
-
-    /**
      * 清除学员签退信息
      * @param courseId
      * @param userId

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

@@ -246,4 +246,15 @@ public interface TeacherAttendanceDao extends BaseDAO<Long, TeacherAttendance> {
 	 * @return
 	 */
     Integer getAttendClassTime(Integer courseScheduleId);
+
+    /**
+     * @describe 获取连堂课里第一次签到的课程
+     * @apiNote 时光荏苒,认真工作的时间总是过得很快,而我、享受这一刻!
+     * @author zouxuan
+     * @date 2020/9/26
+     * @time 16:58
+     * @param currentScheduleId:
+     * @return java.lang.Long
+     */
+	Long findFirstSign(Long currentScheduleId);
 }

+ 4 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/MusicGroup.java

@@ -6,6 +6,7 @@ import com.ym.mec.biz.dal.enums.MusicGroupStatusEnum;
 import com.ym.mec.biz.dal.enums.SalarySettlementTypeEnum;
 import com.ym.mec.biz.dal.enums.YesOrNoEnum;
 import io.swagger.annotations.ApiModelProperty;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.builder.ToStringBuilder;
 
 import java.util.Date;
@@ -186,7 +187,9 @@ public class MusicGroup {
 	}
 
 	public void setPaymentValidEndDate(String paymentValidEndDate) {
-		this.paymentValidEndDate = paymentValidEndDate;
+		if(StringUtils.isNotEmpty(paymentValidEndDate)){
+			this.paymentValidEndDate = paymentValidEndDate;
+		}
 	}
 
 	public String getSubjectName() {

+ 1 - 3
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/MusicGroupPaymentCalender.java

@@ -115,9 +115,7 @@ public class MusicGroupPaymentCalender implements Comparable<MusicGroupPaymentCa
 	}
 
 	public void setPaymentValidEndDate(String paymentValidEndDate) {
-		if(StringUtils.isEmpty(paymentValidEndDate)){
-			this.paymentValidEndDate = null;
-		}else {
+		if(StringUtils.isNotEmpty(paymentValidEndDate)){
 			this.paymentValidEndDate = paymentValidEndDate;
 		}
 	}

+ 12 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/StudentAttendance.java

@@ -30,6 +30,10 @@ public class StudentAttendance {
 	/** 课程计划 */
 	@ApiModelProperty(value = "课程计划",required = false)
 	private Long courseScheduleId;
+
+	/** 课程计划 */
+	@ApiModelProperty(value = "课程计划",required = false)
+	private Long currentScheduleId;
 	
 	/**  */
 	@ApiModelProperty(value = "学生编号",required = false)
@@ -72,6 +76,14 @@ public class StudentAttendance {
 	@ApiModelProperty(value = "当前课时")
 	private Integer currentClassTimes;
 
+	public Long getCurrentScheduleId() {
+		return currentScheduleId;
+	}
+
+	public void setCurrentScheduleId(Long currentScheduleId) {
+		this.currentScheduleId = currentScheduleId;
+	}
+
 	public Date getSignInTime() {
 		return signInTime;
 	}

+ 12 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/TeacherAttendance.java

@@ -33,6 +33,10 @@ public class TeacherAttendance {
 	/**  */
 	@ApiModelProperty(value = "课程计划编号",required = false)
 	private Long courseScheduleId;
+
+	/**  */
+	@ApiModelProperty(value = "实际教室编号",required = false)
+	private Long currentScheduleId;
 	
 	/** 签到时间 */
 	@ApiModelProperty(value = "签到时间",required = false)
@@ -85,6 +89,14 @@ public class TeacherAttendance {
 	//处理结果
 	private Integer operator;
 
+	public Long getCurrentScheduleId() {
+		return currentScheduleId;
+	}
+
+	public void setCurrentScheduleId(Long currentScheduleId) {
+		this.currentScheduleId = currentScheduleId;
+	}
+
 	public Date getComplaintsTime() {
 		return complaintsTime;
 	}

+ 15 - 4
mec-biz/src/main/java/com/ym/mec/biz/service/StudentAttendanceService.java

@@ -75,12 +75,23 @@ public interface StudentAttendanceService extends BaseService<Long, StudentAtten
 	CourseScheduleResponse getStatisticsInfo(Integer classGroupId);
 
 	/**
-	 * 线上课学生考勤
-	 * @param courseScheduleId
+	 * 线上课学生签到
+	 * @param firstCourseId
 	 * @param userId
-	 * @param statusEnum
 	 */
-	void addStudentAttendanceRecord(Integer courseScheduleId, Integer userId, StudentAttendanceStatusEnum statusEnum,SignStatusEnum signStatusEnum);
+	void addStudentAttendanceSignIn(Long firstCourseId, Integer userId,Long currentScheduleId);
+
+	/**
+	 * @describe 线上课学员签退
+	 * @apiNote 时光荏苒,认真工作的时间总是过得很快,而我、享受这一刻!
+	 * @author zouxuan
+	 * @date 2020/9/26
+	 * @time 22:48
+	 * @param firstCourseId:
+	 * @param userId:
+	 * @return void
+	 */
+	void addStudentAttendanceSignOut(Long firstCourseId, Integer userId);
 
 	/**
 	 * 某节课所有学员签到状态

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

@@ -31,14 +31,24 @@ public interface TeacherAttendanceService extends BaseService<Long, TeacherAtten
 	 * @date 2019/11/4
 	 * @param courseScheduleId: 课程编号
 	 * @param userId: 用户编号
-	 * @param signStatus: 签到or签退
-	 * @param updateCourseScheduleStatus: 是否更新课程状态
 	 * @return void
 	 */
-	void addTeacherAttendanceRecord(Integer courseScheduleId,
-									Integer userId,
-									SignStatusEnum signStatus,
-									boolean updateCourseScheduleStatus);
+	void addTeacherAttendanceSignOut(Long courseScheduleId,
+									Integer userId);
+
+
+
+	/**
+	 * @describe 教室线上课签到
+	 * @apiNote 时光荏苒,认真工作的时间总是过得很快,而我、享受这一刻!
+	 * @author zouxuan
+	 * @date 2020/9/26
+	 * @time 19:59
+	 * @param userId:
+	 * @param courseScheduleId:
+	 * @return void
+	 */
+	void addTeacherAttendanceSignIn(Long firstCourseId,Integer userId, Long courseScheduleId);
 
 	/**
 	 * 获取教师个人的签到记录

+ 77 - 114
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentAttendanceServiceImpl.java

@@ -469,139 +469,98 @@ public class StudentAttendanceServiceImpl extends BaseServiceImpl<Long, StudentA
     }
 
     @Override
-    @Transactional(rollbackFor = Exception.class, isolation = Isolation.READ_COMMITTED)
-    public void addStudentAttendanceRecord(Integer courseScheduleId, Integer userId, StudentAttendanceStatusEnum statusEnum, SignStatusEnum signStatusEnum) {
-        CourseSchedule courseSchedule = courseScheduleDao.get(courseScheduleId.longValue());
-        ClassGroup classGroup = classGroupDao.findByCourseSchedule(courseScheduleId, 0);
-        StudentAttendance studentAttendance = studentAttendanceDao.findByStatusAndCourseScheduleId(userId, courseScheduleId);
+    @Transactional(rollbackFor = Exception.class)
+    public void addStudentAttendanceSignIn(Long firstCourseId, Integer userId,Long currentScheduleId) {
         Date date = new Date();
+        ClassGroup classGroup = classGroupDao.findByCourseSchedule(currentScheduleId.intValue(), 0);
+        StudentAttendance studentAttendance = studentAttendanceDao.findByStatusAndCourseScheduleId(userId, currentScheduleId.intValue());
         if (studentAttendance == null) {
             studentAttendance = new StudentAttendance();
             studentAttendance.setClassGroupId(classGroup.getId());
-            studentAttendance.setCourseScheduleId(courseScheduleId.longValue());
+            studentAttendance.setCourseScheduleId(currentScheduleId);
             studentAttendance.setCurrentClassTimes(classGroup.getCurrentClassTimes() + 1);
             studentAttendance.setGroupType(classGroup.getGroupType());
             studentAttendance.setMusicGroupId(classGroup.getMusicGroupId());
             studentAttendance.setUserId(userId);
-            studentAttendance.setTeacherId(courseSchedule.getActualTeacherId());
-            if (signStatusEnum == SignStatusEnum.SIGN_IN) {
-                if (courseSchedule.getStudentNum() == null) {
-                    courseSchedule.setStudentNum(0);
-                }
-                courseSchedule.setStudentNum(courseSchedule.getStudentNum() + 1);
-            }
+            studentAttendance.setCurrentScheduleId(firstCourseId);
             studentAttendanceDao.insert(studentAttendance);
         } else {
-            studentAttendance.setTeacherId(courseSchedule.getActualTeacherId());
+            studentAttendance.setCurrentScheduleId(firstCourseId);
             studentAttendance.setUpdateTime(date);
         }
-//		Date signInTime = studentAttendance.getSignInTime();
-        //没有签到信息才会生成
-        if (signStatusEnum == SignStatusEnum.SIGN_IN && studentAttendance.getSignInTime() == null) {
-            //判断是否在签到时间段内(课程开始前20~结束前)
-//			int advanceSignMinutes = Integer.parseInt(sysConfigDao.findConfigValue(SysConfigService.ADVANCE_SIGN_IN_MINUTES));
-//			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, -60);
+        if (studentAttendance.getSignInTime() == null){
+            CourseSchedule courseSchedule = courseScheduleDao.get(currentScheduleId);
+            if (courseSchedule.getStudentNum() == null) {
+                courseSchedule.setStudentNum(0);
+            }
+            courseSchedule.setStudentNum(courseSchedule.getStudentNum() + 1);
+            studentAttendance.setTeacherId(courseSchedule.getActualTeacherId());
             //课程结束前进入,算正常
-            studentAttendance.setStatus(statusEnum);
+            studentAttendance.setStatus(StudentAttendanceStatusEnum.NORMAL);
             studentAttendance.setSignInTime(date);
 
             courseSchedule.setUpdateTime(date);
-//				courseSchedule.setStudentNum((courseSchedule.getStudentNum() == null?0:courseSchedule.getStudentNum()) + 1);
             courseScheduleDao.update(courseSchedule);
-			/*if(DateUtil.minutesBetween(addMinutes,date) >= 0 && DateUtil.minutesBetween(date,classEndDateTime) > 0){
-
-			}*/
-        } else if (signStatusEnum == SignStatusEnum.SIGN_OUT) {
-            studentAttendance.setStatus(statusEnum);
-            studentAttendance.setSignOutTime(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);
-            if (DateUtil.minutesBetween(classEndDateTime, date) > 0) {
-                String continueCourseTime = sysConfigDao.findConfigValue(SysConfigService.ONLINE_CONTINUE_COURSE_TIME);
-                if (StringUtils.isEmpty(continueCourseTime)) {
-                    continueCourseTime = "5";
-                }
-                List<CourseSchedule> courseSchedules = new ArrayList<>();
-                CourseSchedule cs = courseSchedule;
-                while (true) {
-                    //获取当前课程的所有连堂课列表
-                    String courseClassDate = DateUtil.format(cs.getClassDate(), DateUtil.DEFAULT_PATTERN);
-                    String courseEndDateTime = DateUtil.format(cs.getEndClassTime(), DateUtil.EXPANDED_TIME_FORMAT);
-                    cs = courseScheduleDao.queryRepairContinueCourse(cs, continueCourseTime, courseClassDate + " " + courseEndDateTime);
-                    //存在连堂课
-                    if (cs != null) {
-                        courseSchedules.add(cs);
-                    } else {
-                        break;
-                    }
-                }
-                if(courseSchedules.size() > 0){
-                    String courseClassDate;
-                    String courseStartDateTime;
-                    String courseEndDateTime;
-                    String format2 = DateUtil.format(courseSchedule.getClassDate(), DateUtil.DEFAULT_PATTERN);
-                    String format3 = DateUtil.format(courseSchedule.getEndClassTime(), DateUtil.EXPANDED_TIME_FORMAT);
-                    Date date1 = DateUtil.stringToDate(format2 + " " + format3, DateUtil.EXPANDED_DATE_TIME_FORMAT);
-                    studentAttendance.setSignOutTime(date1);
-                    for (int i = 0; i < courseSchedules.size(); i++) {
-                        courseClassDate = DateUtil.format(courseSchedules.get(i).getClassDate(), DateUtil.DEFAULT_PATTERN);
-                        courseStartDateTime = DateUtil.format(courseSchedules.get(i).getStartClassTime(), DateUtil.EXPANDED_TIME_FORMAT);
-                        Date startDateTime = DateUtil.stringToDate(courseClassDate + " " + courseStartDateTime, DateUtil.EXPANDED_DATE_TIME_FORMAT);
-                        //如果是接下来的第一节连堂课,并且签退时间不大于课程开始时间,那么跳出循环
-                        if(i == 0 && !date.after(startDateTime)){
-                            studentAttendance.setSignOutTime(date);
-                            break;
-                        }
-                        courseEndDateTime = DateUtil.format(courseSchedules.get(i).getEndClassTime(), DateUtil.EXPANDED_TIME_FORMAT);
-                        Date endDateTime = DateUtil.stringToDate(courseClassDate + " " + courseEndDateTime, DateUtil.EXPANDED_DATE_TIME_FORMAT);
-
-                        //不是最后一节课
-                        if(i < courseSchedules.size() - 1){
-                            //大于课程结束时间
-                            if(date.after(endDateTime)){
-                                String format = DateUtil.format(courseSchedules.get(i + 1).getClassDate(), DateUtil.DEFAULT_PATTERN);
-                                String format1 = DateUtil.format(courseSchedules.get(i + 1).getStartClassTime(), DateUtil.EXPANDED_TIME_FORMAT);
-                                Date stringToDate = DateUtil.stringToDate(format + " " + format1, DateUtil.EXPANDED_DATE_TIME_FORMAT);
-                                //大于下一节课开始时间
-                                if(date.after(stringToDate)){
-                                    //当前课程签退时间为课程结束时间
-                                    upsetAttendance(userId,startDateTime,endDateTime,courseSchedules.get(i));
-                                }else {
-                                    //当前课程签退时间为退出时间
-                                    upsetAttendance(userId,startDateTime,date,courseSchedules.get(i));
-                                }
-                            }else {
-                                if(date.after(startDateTime)){
-                                    //小于课程结束时间
-                                    upsetAttendance(userId,startDateTime,date,courseSchedules.get(i));
-                                }
-                                break;
-                            }
-                        }else {
-                            if(date.after(startDateTime)){
-                                //小于课程结束时间
-                                upsetAttendance(userId,startDateTime,date,courseSchedules.get(i));
-                            }
-                        }
-                    }
-                }
+            studentAttendanceDao.update(studentAttendance);
+        }
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void addStudentAttendanceSignOut(Long firstCourseId, Integer userId) {
+        Date date = new Date();
+        CourseSchedule courseSchedule = courseScheduleDao.get(firstCourseId);
+        String continueCourseTime = sysConfigDao.findConfigValue(SysConfigService.ONLINE_CONTINUE_COURSE_TIME);
+        if (StringUtils.isEmpty(continueCourseTime)) {
+            continueCourseTime = "5";
+        }
+        List<CourseSchedule> courseSchedules = new ArrayList<>();
+        courseSchedules.add(courseSchedule);
+        CourseSchedule cs = courseSchedule;
+        while (true) {
+            //获取当前课程的所有连堂课列表
+            String courseClassDate = DateUtil.format(cs.getClassDate(), DateUtil.DEFAULT_PATTERN);
+            String courseEndDateTime = DateUtil.format(cs.getEndClassTime(), DateUtil.EXPANDED_TIME_FORMAT);
+            cs = courseScheduleDao.queryContinueCourse(cs, continueCourseTime, courseClassDate + " " + courseEndDateTime);
+            //存在连堂课
+            if (cs != null) {
+                courseSchedules.add(cs);
+            } else {
+                break;
+            }
+        }
+        String courseClassDate;
+        String courseStartDateTime;
+        String courseEndDateTime;
+        Boolean isBreak = false;
+        //签退之前看是不是第一次进入这个连堂课
+        for (int i = courseSchedules.size() - 1; i >= 0; i--) {
+            if(isBreak){
+                break;
+            }
+            CourseSchedule schedule = courseSchedules.get(i);
+            courseClassDate = DateUtil.format(schedule.getClassDate(), DateUtil.DEFAULT_PATTERN);
+            courseStartDateTime = DateUtil.format(schedule.getStartClassTime(), DateUtil.EXPANDED_TIME_FORMAT);
+            Date startDateTime = DateUtil.stringToDate(courseClassDate + " " + courseStartDateTime, DateUtil.EXPANDED_DATE_TIME_FORMAT);
+            courseEndDateTime = DateUtil.format(schedule.getEndClassTime(), DateUtil.EXPANDED_TIME_FORMAT);
+            Date endDateTime = DateUtil.stringToDate(courseClassDate + " " + courseEndDateTime, DateUtil.EXPANDED_DATE_TIME_FORMAT);
+            //不是最后一节课
+            if(i != courseSchedules.size() - 1){
+                isBreak = upsetAttendance(userId,startDateTime,endDateTime,schedule,firstCourseId);
+            }else {
+                isBreak = upsetAttendance(userId,startDateTime,date,schedule,firstCourseId);
             }
         }
-        studentAttendanceDao.update(studentAttendance);
     }
 
-    public void upsetAttendance(Integer userId,Date signInTime,Date signOutTime,CourseSchedule courseSchedule){
+    public Boolean upsetAttendance(Integer userId,Date signInTime,Date signOutTime,CourseSchedule courseSchedule,Long courseScheduleId){
         StudentAttendance studentAttendance = studentAttendanceDao.findByStatusAndCourseScheduleId(userId, courseSchedule.getId().intValue());
+        Boolean flag = false;
+        Long courseId = teacherAttendanceDao.findFirstSign(courseScheduleId);
+        //如果当前课程是第一次签到的课程那么不更新签到时间,并且退出下次循环
+        if(courseId != null && courseId.equals(courseSchedule.getId())){
+            flag = true;
+        }
         if(studentAttendance == null){
             studentAttendance = new StudentAttendance();
             studentAttendance.setSignOutTime(signOutTime);
@@ -613,14 +572,18 @@ public class StudentAttendanceServiceImpl extends BaseServiceImpl<Long, StudentA
             studentAttendance.setCourseScheduleId(courseSchedule.getId());
             studentAttendance.setMusicGroupId(courseSchedule.getMusicGroupId());
             studentAttendance.setGroupType(courseSchedule.getGroupType());
+            studentAttendance.setCurrentScheduleId(courseScheduleId);
             studentAttendanceDao.insert(studentAttendance);
         }else {
             studentAttendance.setSignOutTime(signOutTime);
+            studentAttendance.setCurrentScheduleId(courseScheduleId);
             studentAttendance.setStatus(StudentAttendanceStatusEnum.NORMAL);
-            studentAttendance.setSignInTime(signInTime);
+            if(!flag){
+                studentAttendance.setSignInTime(signInTime);
+            }
             studentAttendanceDao.update(studentAttendance);
         }
-
+        return flag;
     }
 
     @Override
@@ -666,7 +629,7 @@ public class StudentAttendanceServiceImpl extends BaseServiceImpl<Long, StudentA
                 //获取当前课程的所有连堂课列表
                 String courseClassDate = DateUtil.format(cs.getClassDate(), DateUtil.DEFAULT_PATTERN);
                 String courseEndDateTime = DateUtil.format(cs.getEndClassTime(), DateUtil.EXPANDED_TIME_FORMAT);
-                cs = courseScheduleDao.queryRepairContinueCourse(cs, continueCourseTime, courseClassDate + " " + courseEndDateTime);
+                cs = courseScheduleDao.queryContinueCourse(cs, continueCourseTime, courseClassDate + " " + courseEndDateTime);
                 //存在连堂课
                 if (cs != null) {
                     courseSchedules.add(cs);

+ 79 - 107
mec-biz/src/main/java/com/ym/mec/biz/service/impl/TeacherAttendanceServiceImpl.java

@@ -246,40 +246,85 @@ public class TeacherAttendanceServiceImpl extends BaseServiceImpl<Long, TeacherA
 
 	@Override
 	@Transactional(rollbackFor = Exception.class)
-	public void addTeacherAttendanceRecord(Integer courseScheduleId, Integer userId, SignStatusEnum signStatus, boolean updateCourseScheduleStatus) {
-		TeacherAttendance teacherAttendance=teacherAttendanceDao.findByTeacherAttendanceInfo(userId.longValue(),courseScheduleId.longValue());
-		ClassGroup classGroup = classGroupDao.findByCourseSchedule(courseScheduleId,0);
-		CourseSchedule courseSchedule = courseScheduleDao.get(courseScheduleId.longValue());
+	public void addTeacherAttendanceSignOut(Long firstCourseId, Integer userId) {
+		Date date = new Date();
+		//签退
+		CourseSchedule courseSchedule = courseScheduleDao.get(firstCourseId);
+		List<CourseSchedule> courseSchedules = new ArrayList<>();
+		courseSchedules.add(courseSchedule);
+		CourseSchedule cs = courseSchedule;
+		String continueCourseTime = sysConfigDao.findConfigValue(SysConfigService.ONLINE_CONTINUE_COURSE_TIME);
+		if(StringUtils.isEmpty(continueCourseTime)){
+			continueCourseTime = "5";
+		}
+		while (true){
+			//获取当前课程的所有连堂课列表
+			String courseClassDate = DateUtil.format(cs.getClassDate(), DateUtil.DEFAULT_PATTERN);
+			String courseEndDateTime = DateUtil.format(cs.getEndClassTime(), DateUtil.EXPANDED_TIME_FORMAT);
+			cs = courseScheduleDao.queryContinueCourse(cs,continueCourseTime,courseClassDate + " " + courseEndDateTime);
+			//存在连堂课
+			if(cs != null){
+				courseSchedules.add(cs);
+			}else {
+				break;
+			}
+		}
+		String courseClassDate;
+		String courseStartDateTime;
+		String courseEndDateTime;
+		Boolean isBreak = false;
+		for (int i = courseSchedules.size() - 1; i >= 0; i--) {
+			if(isBreak){
+				break;
+			}
+			CourseSchedule schedule = courseSchedules.get(i);
+			courseClassDate = DateUtil.format(schedule.getClassDate(), DateUtil.DEFAULT_PATTERN);
+			courseStartDateTime = DateUtil.format(schedule.getStartClassTime(), DateUtil.EXPANDED_TIME_FORMAT);
+			Date startDateTime = DateUtil.stringToDate(courseClassDate + " " + courseStartDateTime, DateUtil.EXPANDED_DATE_TIME_FORMAT);
+			courseEndDateTime = DateUtil.format(schedule.getEndClassTime(), DateUtil.EXPANDED_TIME_FORMAT);
+			Date endDateTime = DateUtil.stringToDate(courseClassDate + " " + courseEndDateTime, DateUtil.EXPANDED_DATE_TIME_FORMAT);
+			//不是最后一节课
+			if(i == courseSchedules.size() - 1){
+				if(date.after(endDateTime)){
+					isBreak = upsetAttendance(userId,startDateTime,date,YesOrNoEnum.YES,schedule,firstCourseId);
+				}else {
+					isBreak = upsetAttendance(userId,startDateTime,date,YesOrNoEnum.NO,schedule,firstCourseId);
+				}
+			}else {
+				isBreak = upsetAttendance(userId,startDateTime,endDateTime,YesOrNoEnum.YES,schedule,firstCourseId);
+			}
+		}
+	}
 
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public void addTeacherAttendanceSignIn(Long firstCourseId, Integer userId, Long courseScheduleId) {
+		ClassGroup classGroup = classGroupDao.findByCourseSchedule(courseScheduleId.intValue(),0);
+		TeacherAttendance teacherAttendance=teacherAttendanceDao.findByTeacherAttendanceInfo(userId.longValue(),courseScheduleId);
 		if(Objects.isNull(teacherAttendance)){
 			teacherAttendance=new TeacherAttendance();
-			teacherAttendance.setGroupType(courseSchedule.getGroupType());
-			teacherAttendance.setCourseScheduleId(courseScheduleId.longValue());
+			teacherAttendance.setGroupType(classGroup.getGroupType());
+			teacherAttendance.setCourseScheduleId(courseScheduleId);
 			teacherAttendance.setTeacherId(userId);
 			teacherAttendance.setMusicGroupId(classGroup.getMusicGroupId());
 			teacherAttendance.setClassGroupId(classGroup.getId());
 			teacherAttendance.setTeacherId(userId);
+			teacherAttendance.setCurrentScheduleId(firstCourseId);
 			teacherAttendanceDao.insert(teacherAttendance);
 		}else {
-			teacherAttendance.setGroupType(courseSchedule.getGroupType());
+			teacherAttendance.setCurrentScheduleId(firstCourseId);
+			teacherAttendance.setGroupType(classGroup.getGroupType());
 			teacherAttendance.setTeacherId(userId);
 			teacherAttendance.setClassGroupId(classGroup.getId());
 			teacherAttendance.setMusicGroupId(classGroup.getMusicGroupId());
 		}
-//		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 classEndDateAdd60Minutes = DateUtil.addMinutes(classEndDateTime, 60);
-//		Date classEndDateCut10Minutes = DateUtil.addMinutes(classEndDateTime, -10);
-
-//		Date add60Minutes = DateUtil.addMinutes(classStartDateTime, -60);
 		//签到
-		if(teacherAttendance.getSignInTime() == null && SignStatusEnum.SIGN_IN.equals(signStatus)){
+		if(teacherAttendance.getSignInTime() == null){
+			Date date = new Date();
+			CourseSchedule courseSchedule = courseScheduleDao.get(courseScheduleId);
+			String classDate = DateUtil.format(courseSchedule.getClassDate(), DateUtil.DEFAULT_PATTERN);
+			String startClassTime = DateUtil.format(courseSchedule.getStartClassTime(), DateUtil.EXPANDED_TIME_FORMAT);
+			Date classStartDateTime = DateUtil.stringToDate(classDate + " " + startClassTime, DateUtil.EXPANDED_DATE_TIME_FORMAT);
 			YesOrNoEnum yesOrNoEnum = courseScheduleService.enableOnlyNormalAttendance(courseSchedule.getStartClassTime(),
 					userId.longValue(),
 					false,
@@ -302,94 +347,16 @@ public class TeacherAttendanceServiceImpl extends BaseServiceImpl<Long, TeacherA
 				}
 			}
 		}
-		//签退
-		if(SignStatusEnum.SIGN_OUT.equals(signStatus)){
-			teacherAttendance.setSignOutStatus(YesOrNoEnum.YES);
-			teacherAttendance.setSignOutTime(date);
-			if(DateUtil.minutesBetween(classEndDateTime,date) > 0){
-				List<CourseSchedule> courseSchedules = new ArrayList<>();
-				CourseSchedule cs = courseSchedule;
-				String continueCourseTime = sysConfigDao.findConfigValue(SysConfigService.ONLINE_CONTINUE_COURSE_TIME);
-				if(StringUtils.isEmpty(continueCourseTime)){
-					continueCourseTime = "5";
-				}
-				while (true){
-					//签到为空那么看下一条数据,
-					//获取当前课程的所有连堂课列表
-					String courseClassDate = DateUtil.format(cs.getClassDate(), DateUtil.DEFAULT_PATTERN);
-					String courseEndDateTime = DateUtil.format(cs.getEndClassTime(), DateUtil.EXPANDED_TIME_FORMAT);
-//					Date toDate = DateUtil.stringToDate(courseClassDate + " " + courseEndDateTime, DateUtil.EXPANDED_DATE_TIME_FORMAT);
-					cs = courseScheduleDao.queryContinueCourse(cs,continueCourseTime,courseClassDate + " " + courseEndDateTime);
-					//存在连堂课
-					if(cs != null){
-						courseSchedules.add(cs);
-					}else {
-						break;
-					}
-				}
-				if(courseSchedules.size() > 0){
-					String courseClassDate;
-					String courseStartDateTime;
-					String courseEndDateTime;
-					String format2 = DateUtil.format(courseSchedule.getClassDate(), DateUtil.DEFAULT_PATTERN);
-					String format3 = DateUtil.format(courseSchedule.getEndClassTime(), DateUtil.EXPANDED_TIME_FORMAT);
-					Date date1 = DateUtil.stringToDate(format2 + " " + format3, DateUtil.EXPANDED_DATE_TIME_FORMAT);
-					teacherAttendance.setSignOutTime(date1);
-					for (int i = 0; i < courseSchedules.size(); i++) {
-						courseClassDate = DateUtil.format(courseSchedules.get(i).getClassDate(), DateUtil.DEFAULT_PATTERN);
-						courseStartDateTime = DateUtil.format(courseSchedules.get(i).getStartClassTime(), DateUtil.EXPANDED_TIME_FORMAT);
-						Date startDateTime = DateUtil.stringToDate(courseClassDate + " " + courseStartDateTime, DateUtil.EXPANDED_DATE_TIME_FORMAT);
-
-						//如果是接下来的第一节连堂课,并且签退时间不大于课程开始时间,那么跳出循环
-						if(i == 0 && !date.after(startDateTime)){
-							teacherAttendance.setSignOutTime(date);
-							break;
-						}
-						courseEndDateTime = DateUtil.format(courseSchedules.get(i).getEndClassTime(), DateUtil.EXPANDED_TIME_FORMAT);
-						Date endDateTime = DateUtil.stringToDate(courseClassDate + " " + courseEndDateTime, DateUtil.EXPANDED_DATE_TIME_FORMAT);
-						//不是最后一节课
-						if(i < courseSchedules.size() - 1){
-							//大于课程结束时间
-							if(date.after(endDateTime)){
-								String format = DateUtil.format(courseSchedules.get(i + 1).getClassDate(), DateUtil.DEFAULT_PATTERN);
-								String format1 = DateUtil.format(courseSchedules.get(i + 1).getStartClassTime(), DateUtil.EXPANDED_TIME_FORMAT);
-								Date stringToDate = DateUtil.stringToDate(format + " " + format1, DateUtil.EXPANDED_DATE_TIME_FORMAT);
-								//大于下一节课开始时间
-								if(date.after(stringToDate)){
-									//当前课程签退时间为课程结束时间
-									upsetAttendance(userId,startDateTime,endDateTime,YesOrNoEnum.YES,courseSchedules.get(i));
-								}else {
-									//当前课程签退时间为退出时间
-									upsetAttendance(userId,startDateTime,date,YesOrNoEnum.YES,courseSchedules.get(i));
-								}
-							}else {
-								if(date.after(startDateTime)){
-									//小于课程结束时间,异常签退
-									upsetAttendance(userId,startDateTime,date,YesOrNoEnum.NO,courseSchedules.get(i));
-								}
-								break;
-							}
-						}else {
-							if(date.after(startDateTime)){
-								if(date.after(endDateTime)){
-									upsetAttendance(userId,startDateTime,date,YesOrNoEnum.YES,courseSchedules.get(i));
-								}else {
-									upsetAttendance(userId,startDateTime,date,YesOrNoEnum.NO,courseSchedules.get(i));
-								}
-							}
-						}
-					}
-				}
-			}else {
-				teacherAttendance.setSignOutStatus(YesOrNoEnum.NO);
-				teacherAttendance.setSignOutTime(date);
-			}
-			teacherAttendanceDao.update(teacherAttendance);
-		}
 	}
 
-	public void upsetAttendance(Integer userId,Date signInTime,Date signOutTime,YesOrNoEnum status,CourseSchedule courseSchedule){
+	public Boolean upsetAttendance(Integer userId,Date signInTime,Date signOutTime,YesOrNoEnum status,CourseSchedule courseSchedule,Long courseScheduleId){
 		TeacherAttendance teacherAttendance = teacherAttendanceDao.findByTeacherAttendanceInfo(userId.longValue(),courseSchedule.getId());
+		Boolean flag = false;
+		Long courseId = teacherAttendanceDao.findFirstSign(courseScheduleId);
+		//如果当前课程是第一次签到的课程那么不更新签到时间,并且退出下次循环
+		if(courseId != null && courseId.equals(courseSchedule.getId())){
+			flag = true;
+		}
 		if(teacherAttendance == null){
 			teacherAttendance = new TeacherAttendance();
 			teacherAttendance.setGroupType(courseSchedule.getGroupType());
@@ -401,14 +368,19 @@ public class TeacherAttendanceServiceImpl extends BaseServiceImpl<Long, TeacherA
 			teacherAttendance.setSignOutStatus(status);
 			teacherAttendance.setSignOutTime(signOutTime);
 			teacherAttendance.setSignInTime(signInTime);
+			teacherAttendance.setCurrentScheduleId(courseScheduleId);
 			teacherAttendanceDao.insert(teacherAttendance);
 		}else {
-			teacherAttendance.setSignInStatus(YesOrNoEnum.YES);
 			teacherAttendance.setSignOutStatus(status);
 			teacherAttendance.setSignOutTime(signOutTime);
-			teacherAttendance.setSignInTime(signInTime);
+			teacherAttendance.setCurrentScheduleId(courseScheduleId);
+			if(!flag){
+				teacherAttendance.setSignInTime(signInTime);
+				teacherAttendance.setSignInStatus(YesOrNoEnum.YES);
+			}
 			teacherAttendanceDao.update(teacherAttendance);
 		}
+		return flag;
 	}
 
 	@Override

+ 1 - 14
mec-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml

@@ -2622,21 +2622,10 @@
     <select id="queryContinueCourse" resultMap="CourseSchedule">
         SELECT cs.*
         FROM course_schedule cs
-                 LEFT JOIN teacher_attendance ta ON cs.id_ = ta.course_schedule_id_
-        WHERE TIMESTAMPDIFF(MINUTE, #{endDateTime}, CONCAT(cs.class_date_, ' ', cs.start_class_time_)) >= 0
-          AND TIMESTAMPDIFF(MINUTE, #{endDateTime}, CONCAT(cs.class_date_, ' ', cs.start_class_time_)) &lt;= #{continueCourseTime}
-          AND cs.teacher_id_ = #{courseSchedule.teacherId}
-          AND cs.class_group_id_ = #{courseSchedule.classGroupId}
-        LIMIT 1
-    </select>
-    <select id="queryRepairContinueCourse" resultMap="CourseSchedule">
-        SELECT cs.*
-        FROM course_schedule cs
-                 LEFT JOIN teacher_attendance ta ON cs.id_ = ta.course_schedule_id_
         WHERE TIMESTAMPDIFF(MINUTE, #{endDateTime}, CONCAT(cs.class_date_, ' ', cs.start_class_time_)) >= 0
           AND TIMESTAMPDIFF(MINUTE, #{endDateTime}, CONCAT(cs.class_date_, ' ', cs.start_class_time_)) &lt;= #{continueCourseTime}
           AND cs.teacher_id_ = #{courseSchedule.teacherId}
-          AND cs.class_group_id_ = #{courseSchedule.classGroupId}
+          AND cs.class_group_id_ = #{courseSchedule.classGroupId} AND NOW() > CONCAT(cs.class_date_,' ', cs.start_class_time_)
         LIMIT 1
     </select>
     <select id="getSingleClassMinutes" resultType="java.lang.Integer">
@@ -3109,8 +3098,6 @@
 
     <select id="getLastCourse" resultMap="CourseSchedule">
         SELECT cs.* FROM course_schedule cs
-        LEFT JOIN teacher_attendance ta ON cs.id_ = ta.course_schedule_id_ AND ta.teacher_id_ = cs.actual_teacher_id_
-        LEFT JOIN student_attendance sa ON cs.id_ = sa.course_schedule_id_
         WHERE cs.class_group_id_ = #{classGroupId}
         AND TIMESTAMPDIFF(MINUTE, CONCAT(cs.class_date_," ",cs.end_class_time_),#{startTime}) &lt;= #{continueCourseTime}
         AND TIMESTAMPDIFF(MINUTE, CONCAT(cs.class_date_," ",cs.end_class_time_),#{startTime}) >= 0

+ 0 - 2
mec-biz/src/main/resources/config/mybatis/MusicGroupMapper.xml

@@ -93,8 +93,6 @@
             </if>
             <if test="paymentValidStartDate != null">
                 payment_valid_start_date_ = #{paymentValidStartDate},
-            </if>
-            <if test="paymentValidEndDate != null">
                 payment_valid_end_date_ = #{paymentValidEndDate},
             </if>
             <if test="ownershipType != null">

+ 9 - 9
mec-biz/src/main/resources/config/mybatis/StudentAttendanceMapper.xml

@@ -25,6 +25,8 @@
         <result column="update_time_" property="updateTime"/>
         <result column="remark_" property="remark"/>
         <result column="current_class_times_" property="currentClassTimes"/>
+        <result column="current_class_times_" property="currentClassTimes"/>
+        <result column="current_schedule_id_" property="currentScheduleId"/>
     </resultMap>
 
     <!-- 根据主键查询一条记录 -->
@@ -42,15 +44,15 @@
             keyColumn="id" keyProperty="id">
         INSERT INTO student_attendance
         (group_type_,music_group_id_,class_group_id_,course_schedule_id_,user_id_,teacher_id_,status_,create_time_,
-        update_time_,remark_,current_class_times_,sign_in_time_,sign_out_time_)
+        update_time_,remark_,current_class_times_,sign_in_time_,sign_out_time_,current_schedule_id_)
         VALUES(#{groupType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{musicGroupId},#{classGroupId},
         #{courseScheduleId},#{userId},#{teacherId},#{status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},now(),now(),
-        #{remark},#{currentClassTimes},#{signInTime},#{signOutTime})
+        #{remark},#{currentClassTimes},#{signInTime},#{signOutTime},#{currentScheduleId})
     </insert>
 
     <insert id="addStudentAttendances" parameterType="java.util.List" useGeneratedKeys="true" keyProperty="id_">
       INSERT INTO student_attendance (group_type_, music_group_id_, class_group_id_, course_schedule_id_,
-      user_id_, teacher_id_, status_, create_time_,update_time_, remark_ ,current_class_times_,sign_in_time_,sign_out_time_)
+      user_id_, teacher_id_, status_, create_time_,update_time_, remark_ ,current_class_times_,sign_in_time_,sign_out_time_,current_schedule_id_)
       VALUES
 	  <foreach collection="list" item="studentAttendance" separator=",">
           (#{studentAttendance.groupType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
@@ -58,14 +60,9 @@
           #{studentAttendance.userId},#{studentAttendance.teacherId},
           #{studentAttendance.status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},now(),#{studentAttendance.updateTime},
           #{studentAttendance.remark},#{studentAttendance.currentClassTimes},
-          #{studentAttendance.signInTime},#{studentAttendance.signOutTime})
+          #{studentAttendance.signInTime},#{studentAttendance.signOutTime},#{studentAttendance.currentScheduleId})
       </foreach>
     </insert>
-    <insert id="cuntinueCourseSign">
-        INSERT INTO student_attendance (group_type_, music_group_id_, class_group_id_, course_schedule_id_,
-        user_id_, teacher_id_, status_, create_time_,update_time_, remark_ ,current_class_times_,sign_in_time_,sign_out_time_)
-        VALUES()
-    </insert>
 
     <!-- 根据主键查询一条记录 -->
     <update id="update" parameterType="com.ym.mec.biz.dal.entity.StudentAttendance">
@@ -74,6 +71,9 @@
             <if test="status != null">
                 status_ = #{status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
             </if>
+            <if test="currentScheduleId != null">
+                current_schedule_id_ = #{currentScheduleId},
+            </if>
             <if test="signOutTime != null">
                 sign_out_time_ = #{signOutTime},
             </if>

+ 14 - 6
mec-biz/src/main/resources/config/mybatis/TeacherAttendanceMapper.xml

@@ -29,6 +29,7 @@
         <result column="dispose_content_" property="disposeContent"/>
         <result column="operator_" property="operator"/>
         <result column="complaints_time_" property="complaintsTime"/>
+        <result column="current_schedule_id_" property="currentScheduleId"/>
     </resultMap>
     
     <resultMap type="com.ym.mec.biz.dal.dto.Mapper" id="Mapper">
@@ -51,19 +52,19 @@
     <insert id="insert" parameterType="com.ym.mec.biz.dal.entity.TeacherAttendance" useGeneratedKeys="true"
             keyColumn="id" keyProperty="id">
         INSERT INTO teacher_attendance
-        (id_,group_type_,teacher_id_,music_group_id_,class_group_id_,course_schedule_id_,sign_in_time_,sign_in_status_,remark_,create_time_,sign_out_time_,
-        sign_out_status_,current_class_times_,sign_in_longitude_latitude_,sign_out_longitude_latitude_)
-        VALUES(#{id},#{groupType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{teacherId},
+        (group_type_,teacher_id_,music_group_id_,class_group_id_,course_schedule_id_,sign_in_time_,sign_in_status_,remark_,create_time_,sign_out_time_,
+        sign_out_status_,current_class_times_,sign_in_longitude_latitude_,sign_out_longitude_latitude_,current_schedule_id_)
+        VALUES(#{groupType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{teacherId},
         #{musicGroupId},#{classGroupId},#{courseScheduleId},#{signInTime},#{signInStatus,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{remark},
         now(),#{signOutTime},#{signOutStatus,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
-        #{currentClassTimes},#{signInLongitudeLatitude},#{signOutLongitudeLatitude})
+        #{currentClassTimes},#{signInLongitudeLatitude},#{signOutLongitudeLatitude},#{currentScheduleId})
     </insert>
 
     <insert id="batchInsert" parameterType="com.ym.mec.biz.dal.entity.TeacherAttendance" useGeneratedKeys="true"
             keyColumn="id" keyProperty="id">
         INSERT INTO teacher_attendance
         (group_type_,teacher_id_,music_group_id_,class_group_id_,course_schedule_id_,sign_in_time_,sign_in_status_,
-        remark_,create_time_,sign_out_time_,sign_out_status_,sign_in_longitude_latitude_,sign_out_longitude_latitude_)
+        remark_,create_time_,sign_out_time_,sign_out_status_,sign_in_longitude_latitude_,sign_out_longitude_latitude_,current_schedule_id_)
         VALUE
         <foreach collection="teacherAttendances" item="teacherAttendance" separator=",">
             (#{teacherAttendance.groupType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
@@ -72,7 +73,7 @@
             #{teacherAttendance.signInStatus,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
             #{teacherAttendance.remark},now(),#{teacherAttendance.signOutTime},
             #{teacherAttendance.signOutStatus,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
-            #{teacherAttendance.signInLongitudeLatitude},#{teacherAttendance.signOutLongitudeLatitude})
+            #{teacherAttendance.signInLongitudeLatitude},#{teacherAttendance.signOutLongitudeLatitude},#{teacherAttendance.currentScheduleId})
         </foreach>
     </insert>
 
@@ -83,6 +84,9 @@
             <if test="signInStatus != null">
                 sign_in_status_ = #{signInStatus,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
             </if>
+            <if test="currentScheduleId != null">
+                current_schedule_id_ = #{currentScheduleId},
+            </if>
             <if test="remark != null">
                 remark_ = #{remark},
             </if>
@@ -529,6 +533,10 @@
         LEFT JOIN student_attendance sa ON ta.course_schedule_id_ = sa.course_schedule_id_
         WHERE ta.course_schedule_id_ = #{courseScheduleId}
     </select>
+    <select id="findFirstSign" resultType="java.lang.Long">
+        SELECT ta.course_schedule_id_ FROM teacher_attendance ta
+        WHERE ta.current_schedule_id_ = #{currentScheduleId} AND ta.sign_in_time_ IS NOT NULL ORDER BY ta.sign_in_time_ ASC LIMIT 1
+    </select>
 
     <update id="updateViPSignOutStatus" parameterType="string">
     	UPDATE teacher_attendance SET sign_out_status_ = 1,sign_out_time_= now()

+ 5 - 0
mec-im/src/main/java/com/ym/controller/RoomController.java

@@ -51,6 +51,11 @@ public class RoomController{
         return new BaseResponse<>();
     }
 
+    @RequestMapping(value = "/leaveRoomSuccess")
+    public void leaveRoomSuccess() throws Exception {
+        roomService.leaveRoomSuccess("S1560287", "100136");
+    }
+
     @RequestMapping(value = "/statusSync")
     public void statusSync(@RequestBody String body) throws Exception {
         ChannelStateNotify notify = JSONObject.parseObject(body, ChannelStateNotify.class);

+ 18 - 36
mec-im/src/main/java/com/ym/service/Impl/RoomServiceImpl.java

@@ -42,6 +42,7 @@ import com.ym.whiteboard.WhiteBoardHelper;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Isolation;
 import org.springframework.transaction.annotation.Transactional;
@@ -90,6 +91,8 @@ public class RoomServiceImpl implements RoomService {
     private SysUserFeignService sysUserFeignService;
     @Autowired
     private SysConfigDao sysConfigDao;
+    @Autowired
+    private RedisTemplate<String,String> redisTemplate;
 
     @Transactional(rollbackFor = Exception.class, isolation = Isolation.SERIALIZABLE)
     @Override
@@ -123,6 +126,8 @@ public class RoomServiceImpl implements RoomService {
             }
         }
         Long courseId = Long.parseLong(roomId);
+        //记录用户实际选择的房间
+        redisTemplate.opsForValue().set(roomId,courseSchedule.getId().toString());
         log.info("joinRoom current: roomId={}, userId={}", roomId, userId);
         if(courseSchedule.getGroupType() == GroupType.COMM){
             roomId = "I" + roomId;
@@ -276,41 +281,17 @@ public class RoomServiceImpl implements RoomService {
         String userId = roomMember.getUid();
         log.info("signInSuccess: roomId={}, userId={}", roomId, userId);
         Integer userIdInt = Integer.parseInt(userId);
-        Long courseId = Long.parseLong(roomId.substring(1));
-        CourseSchedule schedule = courseScheduleDao.get(courseId);
-        Date date = new Date();
-        String classDate = DateUtil.format(schedule.getClassDate(), DateUtil.DEFAULT_PATTERN);
-        String endClassTime = DateUtil.format(schedule.getEndClassTime(), DateUtil.EXPANDED_TIME_FORMAT);
-        Date classEndDateTime = DateUtil.stringToDate(classDate + " " + endClassTime, DateUtil.EXPANDED_DATE_TIME_FORMAT);
-        //如果当前时间大于课程结束时间,并查看是否是连堂课,将签到记录落到对应的考勤上
-        if(date.after(classEndDateTime)){
-            //获取下一节连堂课
-            CourseSchedule cs = schedule;
-            String continueCourseTime = sysConfigDao.findConfigValue(SysConfigService.ONLINE_CONTINUE_COURSE_TIME);
-            if(StringUtils.isEmpty(continueCourseTime)){
-                continueCourseTime = "5";
-            }
-            while (true){
-                //获取当前课程的所有连堂课列表
-                String courseClassDate = DateUtil.format(cs.getClassDate(), DateUtil.DEFAULT_PATTERN);
-                String courseEndDateTime = DateUtil.format(cs.getEndClassTime(), DateUtil.EXPANDED_TIME_FORMAT);
-                Date stringToDate = DateUtil.stringToDate(courseClassDate + " " + courseEndDateTime, DateUtil.EXPANDED_DATE_TIME_FORMAT);
-                cs = courseScheduleDao.queryContinueCourse(cs,continueCourseTime,courseClassDate + " " + courseEndDateTime);
-                if(cs != null){
-                    if(stringToDate.after(date)){
-                        courseId = cs.getId();
-                        break;
-                    }
-                }else {
-                    break;
-                }
-            }
-        }
+        String roomString = roomId.substring(1);
+        Long firstCourseId = Long.parseLong(roomString);
+
+        Long currentRoomId = Long.parseLong(redisTemplate.opsForValue().get(roomString));
+        log.info("signInSuccess: currentRoomId={}", currentRoomId);
+        redisTemplate.delete(roomString);
         RoleEnum roleEnum = RoleEnum.getEnumByValue(roomMember.getRole());
         if(roleEnum == RoleTeacher){
-            teacherAttendanceService.addTeacherAttendanceRecord(courseId.intValue(),userIdInt, SignStatusEnum.SIGN_IN,true);
+            teacherAttendanceService.addTeacherAttendanceSignIn(firstCourseId,userIdInt,currentRoomId);
         }else {
-            studentAttendanceService.addStudentAttendanceRecord(courseId.intValue(),userIdInt, StudentAttendanceStatusEnum.NORMAL,SignStatusEnum.SIGN_IN);
+            studentAttendanceService.addStudentAttendanceSignIn(firstCourseId,userIdInt,currentRoomId);
         }
     }
 
@@ -346,12 +327,13 @@ public class RoomServiceImpl implements RoomService {
         }
         log.info("leaveRoomSuccess: roomId={}, userId={}", roomId,userId);
         RoleEnum roleEnum = RoleEnum.getEnumByValue(roomMember.getRole());
-        Long scheduleId = Long.parseLong(roomId.substring(1));
+        Integer firstCourseId = Integer.parseInt(roomId.substring(1));
+
         if(roleEnum == RoleTeacher){
-            courseScheduleStudentPaymentDao.adjustPlayMidi(scheduleId.intValue(),null,null);
-            teacherAttendanceService.addTeacherAttendanceRecord(scheduleId.intValue(),Integer.parseInt(userId), SignStatusEnum.SIGN_OUT,true);
+            courseScheduleStudentPaymentDao.adjustPlayMidi(firstCourseId,null,null);
+            teacherAttendanceService.addTeacherAttendanceSignOut(firstCourseId.longValue(),Integer.parseInt(userId));
         }else {
-            studentAttendanceService.addStudentAttendanceRecord(scheduleId.intValue(),Integer.parseInt(userId), StudentAttendanceStatusEnum.NORMAL,SignStatusEnum.SIGN_OUT);
+            studentAttendanceService.addStudentAttendanceSignOut(firstCourseId.longValue(),Integer.parseInt(userId));
         }
         Room room = roomDao.findByRid(roomId);
         if (room == null) {