Bladeren bron

Merge remote-tracking branch 'origin/master'

Joburgess 5 jaren geleden
bovenliggende
commit
81dbffc22a

+ 16 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseScheduleDao.java

@@ -1079,4 +1079,20 @@ public interface CourseScheduleDao extends BaseDAO<Long, CourseSchedule> {
     List<CourseSchedule> findStudentCoursesWithIncludeDateRange(@Param("userId") Integer userId,
                                                                 @Param("startTime") Date startTime,
                                                                 @Param("endTime") Date endTime);
+
+    /**
+     * 获取当前课程,下一次连堂课
+     * @param continueCourseTime
+     * @param courseSchedule
+     * @return
+     */
+    CourseSchedule queryContinueCourse(@Param("courseSchedule")CourseSchedule courseSchedule,
+                                @Param("continueCourseTime")String continueCourseTime);
+
+    /**
+     * 获取单节课时长
+     * @param courseScheduleId
+     * @return
+     */
+    Integer getSingleClassMinutes(@Param("courseScheduleId") Long courseScheduleId);
 }

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

@@ -147,4 +147,10 @@ public interface TeacherAttendanceDao extends BaseDAO<Long, TeacherAttendance> {
 	int cleanCourseTeacherSignInfo(@Param("courseScheduleId") Long courseScheduleId);
 
     TeacherAttendance getTeacherPersonalAttendance(Integer courseScheduleId);
+
+	/**
+	 * 连堂课签到,签退
+	 * @param courseScheduleId
+	 */
+	void cuntinueCourseSign(@Param("courseScheduleId")Long courseScheduleId,@Param("startDateTime")Date startDateTime,@Param("endDateTime")Date endDateTime);
 }

+ 5 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/SysConfigService.java

@@ -128,6 +128,11 @@ public interface SysConfigService extends BaseService<Long, SysConfig> {
     String SMS_MAX_TIMES = "sms_max_times";
 
     /**
+     * 连堂课间隔时间
+     */
+    String ONLINE_CONTINUE_COURSE_TIME = "online_continue_course_time";
+
+    /**
      * @return com.ym.mec.biz.dal.entity.SysConfig
      * @params paramName
      * @describe 根据配置名称获取配置信息

+ 42 - 2
mec-biz/src/main/java/com/ym/mec/biz/service/impl/TeacherAttendanceServiceImpl.java

@@ -273,8 +273,11 @@ public class TeacherAttendanceServiceImpl extends BaseServiceImpl<Long, TeacherA
 //		Date add20Minutes = DateUtil.addMinutes(classStartDateTime, advanceSignMinutes * -1);
 //		Date add60Minutes = DateUtil.addMinutes(classStartDateTime, -60);
 		//签到
+		String continueCourseTime = sysConfigDao.findConfigValue(SysConfigService.ONLINE_CONTINUE_COURSE_TIME);
+		if(StringUtils.isEmpty(continueCourseTime)){
+			continueCourseTime = "10";
+		}
 		if(teacherAttendance.getSignInTime() == null && SignStatusEnum.SIGN_IN.equals(signStatus)){
-			//是否连堂课
 			YesOrNoEnum yesOrNoEnum = courseScheduleService.enableOnlyNormalAttendance(courseSchedule.getStartClassTime(),
 					userId.longValue(),
 					false,
@@ -308,9 +311,46 @@ public class TeacherAttendanceServiceImpl extends BaseServiceImpl<Long, TeacherA
 		}
 		//签退
 		if(SignStatusEnum.SIGN_OUT.equals(signStatus)){
-			//正常签退范围(课程结束前10分钟,1小时内)
 			if(DateUtil.minutesBetween(classEndDateCut10Minutes,date) >= 0){
 				teacherAttendance.setSignOutStatus(YesOrNoEnum.YES);
+				List<CourseSchedule> courseSchedules = new ArrayList<>();
+				CourseSchedule cs = courseSchedule;
+				while (true){
+					//获取当前课程的所有连堂课列表
+					cs = courseScheduleDao.queryContinueCourse(courseSchedule,continueCourseTime);
+					//存在连堂课
+					if(cs != null){
+						courseSchedules.add(cs);
+					}else {
+						break;
+					}
+				}
+				if(courseSchedules.size() > 0){
+					//获取总上课时长(当前时间减去第一节课上课时间)
+					int totalMinutes = DateUtil.minutesBetween(classStartDateTime, date);
+					//减去第一节课时长
+					int firstMinutes = courseScheduleDao.getSingleClassMinutes(courseScheduleId.longValue());
+					totalMinutes -= firstMinutes;
+					String courseClassDate;
+					String courseStartDateTime;
+					String courseEndDateTime;
+					for (CourseSchedule e:courseSchedules) {
+						//获取当前课程的单节课时长
+						int signClassMinutes = courseScheduleDao.getSingleClassMinutes(e.getId());
+						totalMinutes -= signClassMinutes;
+						if(totalMinutes >= 0){
+							//补充签到签退时间
+							courseClassDate = DateUtil.format(e.getClassDate(), DateUtil.DEFAULT_PATTERN);
+							courseStartDateTime = DateUtil.format(e.getClassDate(), DateUtil.DEFAULT_PATTERN);
+							courseEndDateTime = DateUtil.format(e.getClassDate(), DateUtil.DEFAULT_PATTERN);
+							Date startDateTime = DateUtil.stringToDate(courseClassDate + " " + courseStartDateTime, DateUtil.EXPANDED_DATE_TIME_FORMAT);
+							Date endDateTime = DateUtil.stringToDate(courseClassDate + " " + courseEndDateTime, DateUtil.EXPANDED_DATE_TIME_FORMAT);
+							teacherAttendanceDao.cuntinueCourseSign(e.getId(),startDateTime,endDateTime);
+						}else {
+							break;
+						}
+					}
+				}
 				//异常签退时间段,并且没有签退状态
 			}else if(DateUtil.minutesBetween(classStartDateTime,date) > 0 && DateUtil.minutesBetween(date,classEndDateCut10Minutes) > 0){
 				teacherAttendance.setSignOutStatus(YesOrNoEnum.NO);

+ 13 - 0
mec-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml

@@ -2204,4 +2204,17 @@
             cssp.user_id_ = #{userId}
             AND #{startTime} &lt; CONCAT( cs.class_date_, ' ', cs.end_class_time_ ) AND #{endTime} &gt; CONCAT( cs.class_date_, ' ', cs.start_class_time_ );
     </select>
+    <select id="queryContinueCourse" resultMap="CourseSchedule">
+        SELECT cs.* FROM course_schedule cs
+        LEFT JOIN teacher_attendance ta ON cs.id_ = ta.course_schedule_id_
+        WHERE (UNIX_TIMESTAMP(CONCAT(cs.class_date_,' ',cs.start_class_time_)) -
+        UNIX_TIMESTAMP(CONCAT(#{courseSchedule.classDate},' ',#{courseSchedule.endClassTime}))) >= 60 * #{continueCourseTime}
+        AND cs.teacher_id_ = #{courseSchedule.teacherId} AND cs.class_group_id_ = #{courseSchedule.courseScheduleId}
+        AND ta.sign_in_time_ IS NULL AND ta.sign_out_time_ IS NULL
+    </select>
+    <select id="getSingleClassMinutes" resultType="java.lang.Integer">
+        SELECT FLOOR((UNIX_TIMESTAMP(CONCAT(cs.class_date_,' ',cs.end_class_time_)) -
+        UNIX_TIMESTAMP(CONCAT(cs.class_date_,' ',cs.start_class_time_))) / 60) FROM course_schedule cs
+        WHERE cs.id_ = #{courseScheduleId}
+    </select>
 </mapper>

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

@@ -65,7 +65,7 @@
 				AND parent_id_ = #{parentId}
 			</if>
 			<if test="subjectId != null">
-				AND subject_id_ = #{subjectId}
+				AND (subject_id_ = #{subjectId} OR subject_id_ IS NULL)
 			</if>
 		</where>
 		ORDER BY order_ DESC

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

@@ -354,6 +354,11 @@
         SET sign_in_time_ = NULL,sign_in_status_=NULL,sign_out_status_ = NULL,sign_out_time_= NULL
     	WHERE course_schedule_id_=#{courseScheduleId}
     </update>
+    <update id="cuntinueCourseSign">
+        UPDATE teacher_attendance
+        SET sign_in_time_ = #{startDateTime},sign_in_status_ = 1,sign_out_status_ = 1,sign_out_time_= #{endDateTime}
+    	WHERE course_schedule_id_ = #{courseScheduleId}
+    </update>
 
     <delete id="deleteByMusicGroupId" parameterType="map" >
 		DELETE ta FROM teacher_attendance ta LEFT JOIN course_schedule cs ON ta.course_schedule_id_ = cs.id_ WHERE ta.music_group_id_=#{musicGroupId} AND ta.group_type_=#{groupType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler} and cs.status_ = 'NOT_START'