Browse Source

Merge remote-tracking branch 'origin/master'

Joburgess 5 years ago
parent
commit
dda704230d

+ 1 - 2
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseScheduleStudentPaymentDao.java

@@ -250,10 +250,9 @@ public interface CourseScheduleStudentPaymentDao extends BaseDAO<Long, CourseSch
     
     /**
      * 从指定时间开始查询学的线上可数
-     * @param startDate 指定的开始时间
      * @return
      */
-    List<StudentCourseTimesDto> queryStudentCourseTimesOfOnline(Date startDate);
+    List<StudentCourseTimesDto> queryStudentNotStartCourseTimesOfOnline();
 
     List<StudentTeacherCourseDto> findAllStudentCourseInfo();
 }

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

@@ -277,4 +277,11 @@ public interface StudentAttendanceDao extends BaseDAO<Long, StudentAttendance> {
      * @param endDateTime
      */
     void cuntinueCourseSign(@Param("courseScheduleId")Long courseScheduleId,@Param("startDateTime")Date startDateTime,@Param("endDateTime")Date endDateTime);
+
+    /**
+     * 清除学员签退信息
+     * @param courseId
+     * @param userId
+     */
+    void cleanCourseStudentSignOut(@Param("courseId") Long courseId, @Param("userId") Integer userId);
 }

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

@@ -18,7 +18,7 @@ public interface StudentDao extends com.ym.mec.common.dal.BaseDAO<Integer, Stude
 
     int countStudents(Map<String, Object> params);
 
-    List<Student> queryByOperatingTag(Integer operatingTag);
+    List<Student> queryByOperatingTempTag(Integer operatingTag);
 
     int batchUpdate(@Param("studentList") List<Student> studentList);
 

+ 10 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/Student.java

@@ -17,6 +17,8 @@ public class Student {
 
 	private Integer operatingTag;
 
+	private Integer operatingTempTag;
+
 	private Integer teacherId;
 	
 	/**  */
@@ -86,6 +88,14 @@ public class Student {
 		this.operatingTag = operatingTag;
 	}
 
+	public Integer getOperatingTempTag() {
+		return operatingTempTag;
+	}
+
+	public void setOperatingTempTag(Integer operatingTempTag) {
+		this.operatingTempTag = operatingTempTag;
+	}
+
 	public Integer getTeacherId() {
 		return teacherId;
 	}

+ 14 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/StudentAttendanceService.java

@@ -94,4 +94,18 @@ public interface StudentAttendanceService extends BaseService<Long, StudentAtten
 	 * @param month
 	 */
     void repairStudentAttendance(Integer month);
+
+	/**
+	 * 获取签到数据
+	 * @param courseId
+	 * @param userId
+	 */
+	StudentAttendance findByStatusAndCourseScheduleId(Long courseId, Integer userId);
+
+	/**
+	 * 清除当前学生签退信息
+	 * @param courseId
+	 * @param userId
+	 */
+	void cleanCourseStudentSignOut(Long courseId, Integer userId);
 }

+ 3 - 3
mec-biz/src/main/java/com/ym/mec/biz/service/StudentService.java

@@ -1,12 +1,12 @@
 package com.ym.mec.biz.service;
 
+import java.text.ParseException;
+
 import com.ym.mec.biz.dal.entity.Student;
 import com.ym.mec.biz.dal.page.StudentQueryInfo;
 import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.service.BaseService;
 
-import java.text.ParseException;
-
 public interface StudentService extends BaseService<Integer, Student> {
 
     PageInfo findStudentVipGroupList(StudentQueryInfo queryInfo);
@@ -18,7 +18,7 @@ public interface StudentService extends BaseService<Integer, Student> {
      * @return
      * @throws ParseException 
      */
-    boolean updateOperatingTag() throws ParseException;
+    boolean updateOperatingTempTag();
 
     /**
      * @describe 初始化教师编号

+ 39 - 16
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentAttendanceServiceImpl.java

@@ -468,7 +468,7 @@ public class StudentAttendanceServiceImpl extends BaseServiceImpl<Long, StudentA
 			studentAttendance.setTeacherId(courseSchedule.getActualTeacherId());
 			studentAttendance.setUpdateTime(date);
 		}
-		Date signInTime = studentAttendance.getSignInTime();
+//		Date signInTime = studentAttendance.getSignInTime();
 		//没有签到信息才会生成
 		if(signStatusEnum == SignStatusEnum.SIGN_IN && studentAttendance.getSignInTime() == null){
 			//判断是否在签到时间段内(课程开始前20~结束前)
@@ -490,8 +490,6 @@ public class StudentAttendanceServiceImpl extends BaseServiceImpl<Long, StudentA
 				courseScheduleDao.update(courseSchedule);
 			}
 		}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);
@@ -525,30 +523,40 @@ public class StudentAttendanceServiceImpl extends BaseServiceImpl<Long, StudentA
 					totalMinutes -= firstMinutes;
 					if(totalMinutes > 0){
 						String courseClassDate;
-//						String courseStartDateTime;
+						String courseStartDateTime;
 						String courseEndDateTime;
 						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);
+							courseStartDateTime = DateUtil.format(courseSchedules.get(i).getStartClassTime(), DateUtil.EXPANDED_TIME_FORMAT);
 							courseEndDateTime = DateUtil.format(courseSchedules.get(i).getEndClassTime(), DateUtil.EXPANDED_TIME_FORMAT);
-//							Date startDateTime = DateUtil.stringToDate(courseClassDate + " " + courseStartDateTime, DateUtil.EXPANDED_DATE_TIME_FORMAT);
+							Date startDateTime = DateUtil.stringToDate(courseClassDate + " " + courseStartDateTime, DateUtil.EXPANDED_DATE_TIME_FORMAT);
 							Date endDateTime = DateUtil.stringToDate(courseClassDate + " " + courseEndDateTime, DateUtil.EXPANDED_DATE_TIME_FORMAT);
 							StudentAttendance byStatusAndCourseScheduleId = studentAttendanceDao.findByStatusAndCourseScheduleId(userId, courseSchedules.get(i).getId().intValue());
-//							Date signOutTime = date;
-//							if(i < courseSchedules.size() - 1 && date.after(endDateTime)){
-							//不是最后一节连堂课,并且签退时间大于课程结束时间,签退时间等于课程结束时间
-//								signOutTime = endDateTime;
-//							}
+							Date signOutTime = date;
+							if(date.before(startDateTime)){
+								continue;
+							}
+							if(i < courseSchedules.size() - 1 && date.after(endDateTime)){
+								//不是最后一节连堂课,并且签退时间大于课程结束时间,签退时间等于课程结束时间
+								signOutTime = endDateTime;
+							}
 							if(byStatusAndCourseScheduleId != null){
-								byStatusAndCourseScheduleId.setSignOutTime(date);
+								if(byStatusAndCourseScheduleId.getSignOutTime() != null){
+									continue;
+								}
+								if(byStatusAndCourseScheduleId.getSignInTime() != null){
+									startDateTime = null;
+								}
+								byStatusAndCourseScheduleId.setSignInTime(startDateTime);
+								byStatusAndCourseScheduleId.setSignOutTime(signOutTime);
 								byStatusAndCourseScheduleId.setStatus(statusEnum);
 								byStatusAndCourseScheduleId.setUpdateTime(date);
 								studentAttendanceDao.update(byStatusAndCourseScheduleId);
 							}else {
 								byStatusAndCourseScheduleId = new StudentAttendance();
-								byStatusAndCourseScheduleId.setSignOutTime(date);
+								byStatusAndCourseScheduleId.setSignOutTime(signOutTime);
 								byStatusAndCourseScheduleId.setStatus(statusEnum);
-								byStatusAndCourseScheduleId.setSignInTime(signInTime);
+								byStatusAndCourseScheduleId.setSignInTime(startDateTime);
 								byStatusAndCourseScheduleId.setUpdateTime(date);
 								byStatusAndCourseScheduleId.setUserId(userId);
 								byStatusAndCourseScheduleId.setTeacherId(courseSchedule.getActualTeacherId());
@@ -559,12 +567,17 @@ public class StudentAttendanceServiceImpl extends BaseServiceImpl<Long, StudentA
 								byStatusAndCourseScheduleId.setCurrentClassTimes(classGroup.getCurrentClassTimes() + 1);
 								studentAttendanceDao.insert(byStatusAndCourseScheduleId);
 							}
-							if(!date.after(endDateTime)){
-								break;
+							if(studentAttendance.getSignOutTime() == null){
+								studentAttendance.setStatus(statusEnum);
+								studentAttendance.setSignOutTime(classEndDateTime);
 							}
 						}
 					}
 				}
+				if(studentAttendance.getSignOutTime() == null){
+					studentAttendance.setStatus(statusEnum);
+					studentAttendance.setSignOutTime(date);
+				}
 			}
 		}
 		studentAttendanceDao.update(studentAttendance);
@@ -666,4 +679,14 @@ public class StudentAttendanceServiceImpl extends BaseServiceImpl<Long, StudentA
 			}
 		}
 	}
+
+	@Override
+	public StudentAttendance findByStatusAndCourseScheduleId(Long courseId, Integer userId) {
+		return studentAttendanceDao.findByStatusAndCourseScheduleId(userId,courseId.intValue());
+	}
+
+	@Override
+	public void cleanCourseStudentSignOut(Long courseId, Integer userId) {
+		studentAttendanceDao.cleanCourseStudentSignOut(courseId,userId);
+	}
 }

+ 34 - 17
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentServiceImpl.java

@@ -1,5 +1,18 @@
 package com.ym.mec.biz.service.impl;
 
+import java.util.ArrayList;
+import java.util.Comparator;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
+
 import com.ym.mec.biz.dal.dao.CourseScheduleStudentPaymentDao;
 import com.ym.mec.biz.dal.dao.StudentDao;
 import com.ym.mec.biz.dal.dto.StudentCourseTimesDto;
@@ -12,15 +25,6 @@ import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
 import com.ym.mec.util.collection.MapUtil;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-import org.springframework.util.CollectionUtils;
-
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
-import java.util.*;
-import java.util.stream.Collectors;
 
 @Service
 public class StudentServiceImpl extends BaseServiceImpl<Integer, Student> implements StudentService {
@@ -69,26 +73,39 @@ public class StudentServiceImpl extends BaseServiceImpl<Integer, Student> implem
 	}
 
 	@Override
-	@Transactional(rollbackFor = Exception.class)
-	public boolean updateOperatingTag() throws ParseException {
-		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
-		Date date = sdf.parse("2020-02-08");
-		List<StudentCourseTimesDto> studentCourseTimesDtoList = courseScheduleStudentPaymentDao.queryStudentCourseTimesOfOnline(date);
+	public boolean updateOperatingTempTag() {
+		List<StudentCourseTimesDto> studentCourseTimesDtoList = courseScheduleStudentPaymentDao.queryStudentNotStartCourseTimesOfOnline();
 		Map<Integer,StudentCourseTimesDto> map = studentCourseTimesDtoList.stream().collect(Collectors.toMap(StudentCourseTimesDto::getUserId, s -> s));
 		//查询服务指标为0的用户
-		List<Student> studentList = studentDao.queryByOperatingTag(0);
+		List<Student> unlabeledStudentList = studentDao.queryByOperatingTempTag(0);
 		
 		List<Student> updateStudentList = new ArrayList<Student>();
 		StudentCourseTimesDto dto = null;
-		for(Student s : studentList){
+		for(Student s : unlabeledStudentList){
+			if(s.getOperatingTag() == 1){
+				continue;
+			}
 			dto = map.get(s.getUserId());
 			if(dto != null){
-				if(dto.getTotalCourseTimes() != dto.getFreePracticeCourseTimes()){
+				if(dto.getTotalCourseTimes() > 0 && dto.getTotalCourseTimes() != dto.getFreePracticeCourseTimes()){
+					s.setOperatingTempTag(1);
 					s.setOperatingTag(1);
 					updateStudentList.add(s);
 				}
 			}
 		}
+
+		List<Student> labeledStudentList = studentDao.queryByOperatingTempTag(1);
+		for(Student s : labeledStudentList){
+			dto = map.get(s.getUserId());
+			if(dto != null){
+				if(dto.getTotalCourseTimes() == dto.getFreePracticeCourseTimes()){
+					s.setOperatingTempTag(0);
+					s.setOperatingTag(0);
+					updateStudentList.add(s);
+				}
+			}
+		}
 		
 		if(updateStudentList.size() > 0){
 			studentDao.batchUpdate(updateStudentList);

+ 12 - 5
mec-biz/src/main/java/com/ym/mec/biz/service/impl/TeacherAttendanceServiceImpl.java

@@ -309,15 +309,13 @@ public class TeacherAttendanceServiceImpl extends BaseServiceImpl<Long, TeacherA
 		//签退
 		if(SignStatusEnum.SIGN_OUT.equals(signStatus)){
 			if(DateUtil.minutesBetween(classEndDateTime,date) >= 0){
-				teacherAttendance.setSignOutStatus(YesOrNoEnum.YES);
-				Date signInTime = teacherAttendance.getSignInTime();
 				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);
-					Date endDateTime = DateUtil.stringToDate(courseClassDate + " " + courseEndDateTime, DateUtil.EXPANDED_DATE_TIME_FORMAT);
+//					Date toDate = DateUtil.stringToDate(courseClassDate + " " + courseEndDateTime, DateUtil.EXPANDED_DATE_TIME_FORMAT);
 					cs = courseScheduleDao.queryContinueCourse(cs,continueCourseTime,courseClassDate + " " + courseEndDateTime);
 					//存在连堂课
 					if(cs != null){
@@ -360,6 +358,9 @@ public class TeacherAttendanceServiceImpl extends BaseServiceImpl<Long, TeacherA
 							if(personalAttendance.getSignInTime() != null){
 								startDateTime = null;
 							}
+							if(personalAttendance.getSignOutTime() != null){
+								continue;
+							}
 							if(date.after(endDateTime)){
 								teacherAttendanceDao.cuntinueCourseSign(courseSchedules.get(i).getId(),startDateTime,signOutTime,1);
 							}else if (date.equals(endDateTime)){
@@ -367,14 +368,20 @@ public class TeacherAttendanceServiceImpl extends BaseServiceImpl<Long, TeacherA
 							}else {
 								teacherAttendanceDao.cuntinueCourseSign(courseSchedules.get(i).getId(),startDateTime,signOutTime,0);
 							}
+							if(teacherAttendance.getSignOutTime() == null){
+								teacherAttendance.setSignOutStatus(YesOrNoEnum.YES);
+								teacherAttendance.setSignOutTime(classEndDateTime);
+							}
 						}
-						date = classEndDateTime;
 					}
 				}
+				if(teacherAttendance.getSignOutTime() == null){
+					teacherAttendance.setSignOutStatus(YesOrNoEnum.YES);
+					teacherAttendance.setSignOutTime(date);
+				}
 			}else {
 				teacherAttendance.setSignOutStatus(YesOrNoEnum.NO);
 			}
-			teacherAttendance.setSignOutTime(date);
 			teacherAttendanceDao.update(teacherAttendance);
 		}
 	}

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

@@ -382,13 +382,13 @@
 		DELETE FROM course_schedule_student_payment WHERE music_group_id_=#{groupId} AND group_type_=#{groupType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
 	</delete>
 	
-	<select id="queryStudentCourseTimesOfOnline" resultMap="studentCourseTimesDto">
+	<select id="queryStudentNotStartCourseTimesOfOnline" resultMap="studentCourseTimesDto">
 		SELECT cssp.`user_id_`,count(*) totalTimes, 
 		sum(case when (pg.buy_months_ > 0) then 1 ELSE 0 END) practiceTmes,
 		sum(case when (pg.buy_months_ IS NULL AND cssp.`group_type_` = 'PRACTICE' ) then 1 ELSE 0 END) freePracticeTimes
 		FROM course_schedule_student_payment cssp LEFT JOIN course_schedule cs on cssp.course_schedule_id_ = cs.id_
 		LEFT JOIN practice_group pg ON pg.id_ = cs.music_group_id_ AND cs.group_type_ = 'PRACTICE'
-		WHERE cs.`teach_mode_` = 'ONLINE' AND cs.`class_date_` &gt;= #{startDate}
+		WHERE cs.`teach_mode_` = 'ONLINE' AND cs.status_ = 'NOT_START'
 		GROUP BY cssp.`user_id_`
 	</select>
 

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

@@ -149,6 +149,11 @@
 	        where id_ = #{item.id}
 	    </foreach>      
 	</update>
+    <update id="cleanCourseStudentSignOut">
+        UPDATE student_attendance
+        SET sign_out_time_= NULL
+    	WHERE course_schedule_id_=#{courseId} AND user_id_ = #{userId}
+    </update>
 
     <!-- 根据主键删除一条记录 -->
     <delete id="delete">

+ 12 - 2
mec-biz/src/main/resources/config/mybatis/StudentMapper.xml

@@ -11,6 +11,7 @@
         <result column="subject_id_list_" property="subjectIdList"/>
         <result column="service_tag_" property="serviceTag"/>
         <result column="operating_tag_" property="operatingTag"/>
+        <result column="operating_temp_tag_" property="operatingTempTag"/>
         <result column="teacher_id_" property="teacherId"/>
         <result column="create_time_" property="createTime"/>
         <result column="update_time_" property="updateTime"/>
@@ -46,6 +47,9 @@
         <if test="operatingTag != null">
             operating_tag_,
         </if>
+        <if test="operatingTempTag != null">
+            operating_temp_tag_,
+        </if>
         teacher_id_,create_time_,update_time_)
         VALUES
         (#{userId},#{subjectIdList},
@@ -70,6 +74,9 @@
             <if test="operatingTag != null">
                 operating_tag_ = #{operatingTag},
             </if>
+            <if test="operatingTempTag != null">
+                operating_temp_tag_ = #{operatingTempTag},
+            </if>
             <if test="teacherId != null">
                 teacher_id_=#{teacherId},
             </if>
@@ -119,10 +126,10 @@
         </where>
     </sql>
 
-    <select id="queryByOperatingTag" resultMap="Student">
+    <select id="queryByOperatingTempTag" resultMap="Student">
         SELECT *
         FROM student
-        WHERE operating_tag_ = #{operatingTag}
+        WHERE operating_temp_tag_ = #{operatingTempTag}
     </select>
 
     <update id="batchUpdate" parameterType="java.util.List">
@@ -138,6 +145,9 @@
                 <if test="item.operatingTag != null">
                     operating_tag_ = #{item.operatingTag},
                 </if>
+                <if test="item.operatingTempTag != null">
+                    operating_temp_tag_ = #{item.operatingTempTag},
+                </if>
                 <if test="item.teacherId != null">
                     teacher_id_=#{item.teacherId},
                 </if>

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

@@ -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();

+ 20 - 6
mec-web/src/main/java/com/ym/mec/web/controller/TaskController.java

@@ -1,15 +1,29 @@
 package com.ym.mec.web.controller;
 
-import com.ym.mec.biz.service.*;
-import com.ym.mec.common.controller.BaseController;
+import java.util.Date;
 
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
-import java.text.ParseException;
-import java.util.Date;
+import com.ym.mec.biz.service.CourseHomeworkService;
+import com.ym.mec.biz.service.CourseReviewService;
+import com.ym.mec.biz.service.CourseScheduleEvaluateService;
+import com.ym.mec.biz.service.CourseScheduleService;
+import com.ym.mec.biz.service.CourseScheduleTeacherSalaryService;
+import com.ym.mec.biz.service.CoursesGroupService;
+import com.ym.mec.biz.service.ExtracurricularExercisesReplyService;
+import com.ym.mec.biz.service.MusicGroupStudentFeeService;
+import com.ym.mec.biz.service.PracticeGroupService;
+import com.ym.mec.biz.service.StudentCourseHomeworkService;
+import com.ym.mec.biz.service.StudentPaymentOrderService;
+import com.ym.mec.biz.service.StudentService;
+import com.ym.mec.biz.service.TeacherAttendanceService;
+import com.ym.mec.biz.service.TeacherCourseStatisticsService;
+import com.ym.mec.biz.service.TenantPaymentOrderService;
+import com.ym.mec.biz.service.VipGroupService;
+import com.ym.mec.common.controller.BaseController;
 
 @RequestMapping("task")
 @RestController
@@ -221,7 +235,7 @@ public class TaskController extends BaseController {
 
 	//更新学生运营指标
 	@GetMapping("/updateStudentOperatingTag")
-	public void updateStudentOperatingTag() throws ParseException{
-		studentService.updateOperatingTag();
+	public void updateStudentOperatingTag(){
+		studentService.updateOperatingTempTag();
 	}
 }