zouxuan 4 years ago
parent
commit
e88c3825ba

+ 41 - 78
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentAttendanceServiceImpl.java

@@ -517,90 +517,51 @@ public class StudentAttendanceServiceImpl extends BaseServiceImpl<Long, StudentA
 			/*if(DateUtil.minutesBetween(addMinutes,date) >= 0 && DateUtil.minutesBetween(date,classEndDateTime) > 0){
 
 			}*/
+            studentAttendanceDao.update(studentAttendance);
         } 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";
+            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.queryRepairContinueCourse(cs, continueCourseTime, courseClassDate + " " + courseEndDateTime);
+                //存在连堂课
+                if (cs != null) {
+                    courseSchedules.add(cs);
+                } else {
+                    break;
                 }
-                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;
-                    }
+            }
+            String courseClassDate;
+            String courseStartDateTime;
+            String courseEndDateTime;
+            Boolean isBreak = false;
+            for (int i = courseSchedules.size() - 1; i >= 0; i--) {
+                if(isBreak){
+                    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));
-                            }
-                        }
-                    }
+                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);
+                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){
+                    isBreak = upsetAttendance(userId,startDateTime,endDateTime,courseSchedules.get(i));
+                }else {
+                    isBreak = upsetAttendance(userId,startDateTime,date,courseSchedules.get(i));
                 }
             }
         }
-        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){
         StudentAttendance studentAttendance = studentAttendanceDao.findByStatusAndCourseScheduleId(userId, courseSchedule.getId().intValue());
         if(studentAttendance == null){
             studentAttendance = new StudentAttendance();
@@ -617,10 +578,12 @@ public class StudentAttendanceServiceImpl extends BaseServiceImpl<Long, StudentA
         }else {
             studentAttendance.setSignOutTime(signOutTime);
             studentAttendance.setStatus(StudentAttendanceStatusEnum.NORMAL);
-            studentAttendance.setSignInTime(signInTime);
             studentAttendanceDao.update(studentAttendance);
+            if(studentAttendance.getSignInTime() != null){
+                return true;
+            }
         }
-
+        return false;
     }
 
     @Override

+ 38 - 61
mec-biz/src/main/java/com/ym/mec/biz/service/impl/TeacherAttendanceServiceImpl.java

@@ -304,72 +304,49 @@ 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";
+			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;
 				}
-				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;
-					}
+			}
+			String courseClassDate;
+			String courseStartDateTime;
+			String courseEndDateTime;
+			Boolean isBreak = false;
+			for (int i = courseSchedules.size() - 1; i >= 0; i--) {
+				if(isBreak){
+					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);
-					Boolean isBreak = false;
-					for (int i = courseSchedules.size() - 1; i >= 0; i--) {
-						if(isBreak){
-							break;
-						}
-						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(date.before(startDateTime)){
-							continue;
-						}
-						//如果是接下来的第一节连堂课,并且签退时间不大于课程开始时间,那么跳出循环
-						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){
-							isBreak = upsetAttendance(userId,startDateTime,date,YesOrNoEnum.YES,courseSchedules.get(i));
-						}else {
-							if(date.after(endDateTime)){
-								isBreak = upsetAttendance(userId,startDateTime,date,YesOrNoEnum.YES,courseSchedules.get(i));
-							}else {
-								isBreak = upsetAttendance(userId,startDateTime,date,YesOrNoEnum.NO,courseSchedules.get(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);
+				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){
+					isBreak = upsetAttendance(userId,startDateTime,endDateTime,YesOrNoEnum.YES,courseSchedules.get(i));
+				}else {
+					if(date.after(endDateTime)){
+						isBreak = upsetAttendance(userId,startDateTime,date,YesOrNoEnum.YES,courseSchedules.get(i));
+					}else {
+						isBreak = upsetAttendance(userId,startDateTime,date,YesOrNoEnum.NO,courseSchedules.get(i));
 					}
 				}
-			}else {
-				teacherAttendance.setSignOutStatus(YesOrNoEnum.NO);
-				teacherAttendance.setSignOutTime(date);
 			}
-			teacherAttendanceDao.update(teacherAttendance);
 		}
 	}
 

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

@@ -2631,11 +2631,10 @@
     <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">