Browse Source

线上课考勤逻辑修改

zouxuan 4 years ago
parent
commit
5583d7196d

+ 1 - 1
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();
 

+ 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,Long currentScheduleId);
+	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 - 16
mec-biz/src/main/java/com/ym/mec/biz/service/TeacherAttendanceService.java

@@ -17,30 +17,30 @@ import java.util.List;
 import java.util.Map;
 
 public interface TeacherAttendanceService extends BaseService<Long, TeacherAttendance> {
-
-	/**
-	 * @Author: Joburgess
-	 * @Date: 2019/9/10
-	 * 添加教师签到记录
-	 */
-	Map<String, Object> addTeacherAttendanceRecord(TeacherSignOutDto teacherSignOutDto);
-
 	/**
 	 * @describe 调价教师签到记录
 	 * @author Joburgess
 	 * @date 2019/11/4
 	 * @param courseScheduleId: 课程编号
 	 * @param userId: 用户编号
-	 * @param signStatus: 签到or签退
-	 * @param updateCourseScheduleStatus: 是否更新课程状态
-	 * @param currentScheduleId: 用户实际进入的教室编号
 	 * @return void
 	 */
-	void addTeacherAttendanceRecord(Integer courseScheduleId,
-									Integer userId,
-									SignStatusEnum signStatus,
-									boolean updateCourseScheduleStatus,
-									Long currentScheduleId);
+	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);
 
 	/**
 	 * 获取教师个人的签到记录

+ 58 - 55
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentAttendanceServiceImpl.java

@@ -470,27 +470,25 @@ public class StudentAttendanceServiceImpl extends BaseServiceImpl<Long, StudentA
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public void addStudentAttendanceRecord(Integer courseScheduleId, Integer userId, StudentAttendanceStatusEnum statusEnum, SignStatusEnum signStatusEnum,Long currentScheduleId) {
-
-        ClassGroup classGroup = classGroupDao.findByCourseSchedule(courseScheduleId, 0);
-        StudentAttendance studentAttendance = studentAttendanceDao.findByStatusAndCourseScheduleId(userId, currentScheduleId.intValue());
+    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.setCurrentScheduleId(currentScheduleId);
+            studentAttendance.setCurrentScheduleId(firstCourseId);
             studentAttendanceDao.insert(studentAttendance);
         } else {
-            studentAttendance.setCurrentScheduleId(currentScheduleId);
+            studentAttendance.setCurrentScheduleId(firstCourseId);
             studentAttendance.setUpdateTime(date);
         }
-        //没有签到信息才会生成
-        if (signStatusEnum == SignStatusEnum.SIGN_IN && studentAttendance.getSignInTime() == null) {
+        if (studentAttendance.getSignInTime() == null){
             CourseSchedule courseSchedule = courseScheduleDao.get(currentScheduleId);
             if (courseSchedule.getStudentNum() == null) {
                 courseSchedule.setStudentNum(0);
@@ -498,64 +496,69 @@ public class StudentAttendanceServiceImpl extends BaseServiceImpl<Long, StudentA
             courseSchedule.setStudentNum(courseSchedule.getStudentNum() + 1);
             studentAttendance.setTeacherId(courseSchedule.getActualTeacherId());
             //课程结束前进入,算正常
-            studentAttendance.setStatus(statusEnum);
+            studentAttendance.setStatus(StudentAttendanceStatusEnum.NORMAL);
             studentAttendance.setSignInTime(date);
 
             courseSchedule.setUpdateTime(date);
             courseScheduleDao.update(courseSchedule);
             studentAttendanceDao.update(studentAttendance);
-        } else if (signStatusEnum == SignStatusEnum.SIGN_OUT) {
-            CourseSchedule courseSchedule = courseScheduleDao.get(courseScheduleId.longValue());
-            String continueCourseTime = sysConfigDao.findConfigValue(SysConfigService.ONLINE_CONTINUE_COURSE_TIME);
-            if (StringUtils.isEmpty(continueCourseTime)) {
-                continueCourseTime = "5";
+        }
+    }
+
+    @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;
             }
-            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;
             }
-            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,currentScheduleId);
-                }else {
-                    isBreak = upsetAttendance(userId,startDateTime,date,schedule,currentScheduleId);
-                }
+            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);
             }
         }
     }
 
-    public Boolean upsetAttendance(Integer userId,Date signInTime,Date signOutTime,CourseSchedule courseSchedule,Long currentScheduleId){
+    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(currentScheduleId);
+        Long courseId = teacherAttendanceDao.findFirstSign(courseScheduleId);
         //如果当前课程是第一次签到的课程那么不更新签到时间,并且退出下次循环
-        if(courseId != null && courseId == courseSchedule.getId()){
+        if(courseId != null && courseId.equals(courseSchedule.getId())){
             flag = true;
         }
         if(studentAttendance == null){
@@ -569,11 +572,11 @@ public class StudentAttendanceServiceImpl extends BaseServiceImpl<Long, StudentA
             studentAttendance.setCourseScheduleId(courseSchedule.getId());
             studentAttendance.setMusicGroupId(courseSchedule.getMusicGroupId());
             studentAttendance.setGroupType(courseSchedule.getGroupType());
-            studentAttendance.setCurrentScheduleId(currentScheduleId);
+            studentAttendance.setCurrentScheduleId(courseScheduleId);
             studentAttendanceDao.insert(studentAttendance);
         }else {
             studentAttendance.setSignOutTime(signOutTime);
-            studentAttendance.setCurrentScheduleId(currentScheduleId);
+            studentAttendance.setCurrentScheduleId(courseScheduleId);
             studentAttendance.setStatus(StudentAttendanceStatusEnum.NORMAL);
             if(!flag){
                 studentAttendance.setSignInTime(signInTime);

+ 57 - 221
mec-biz/src/main/java/com/ym/mec/biz/service/impl/TeacherAttendanceServiceImpl.java

@@ -75,201 +75,85 @@ public class TeacherAttendanceServiceImpl extends BaseServiceImpl<Long, TeacherA
 		return teacherAttendanceDao;
 	}
 
-	@Transactional(rollbackFor = Exception.class, isolation = Isolation.READ_COMMITTED)
-	@Override
-	public Map<String, Object> addTeacherAttendanceRecord(TeacherSignOutDto teacherSignOutDto) {
-		SysUser user = sysUserFeignService.queryUserInfo();
-		teacherDao.getLocked(user.getId());
-		if(Objects.isNull(user)){
-			throw new BizException("请登录");
-		}
-
-		if(Objects.isNull(teacherSignOutDto.getTeacherAttendanceInfo().getCourseScheduleId())){
-			throw new BizException("请选择课程!");
-		}
-
-		Map<String,Object> result=new HashMap<>();
-
-		TeacherAttendance teacherAttendance=teacherAttendanceDao.findByTeacherAttendanceInfo(user.getId().longValue(),teacherSignOutDto.getTeacherAttendanceInfo().getCourseScheduleId());
 
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public void addTeacherAttendanceSignOut(Long firstCourseId, Integer userId) {
 		Date date = new Date();
-		if(Objects.isNull(teacherAttendance)){
-			teacherAttendance=teacherSignOutDto.getTeacherAttendanceInfo();
-			teacherAttendance.setTeacherId(user.getId());
-			teacherAttendance.setCreateTime(date);
-		}else if(teacherAttendance.getSignInTime() != null && teacherAttendance.getSignOutTime() != null){
-			throw new BizException("当前课程已签到");
-		}
-
-		TeacherAttendanceDto currentCourseDetail = courseScheduleDao.getCurrentCourseDetail(teacherSignOutDto.getTeacherAttendanceInfo().getCourseScheduleId(),user.getId());
-		if(Objects.isNull(currentCourseDetail)){
-			throw new BizException("课程不存在");
-		}
-
-		teacherAttendance.setMusicGroupId(currentCourseDetail.getMusicGroupId());
-		teacherAttendance.setClassGroupId(currentCourseDetail.getClassId());
-		teacherAttendance.setRemark(teacherSignOutDto.getTeacherAttendanceInfo().getRemark());
-		int advanceSignMinutes = Integer.parseInt(sysConfigDao.findConfigValue(SysConfigService.ADVANCE_SIGN_IN_MINUTES));
-
-		CourseSchedule courseSchedule = courseScheduleDao.get(teacherAttendance.getCourseScheduleId());
-		teacherAttendance.setGroupType(courseSchedule.getGroupType());
-		if(courseSchedule == null){
-			throw new BizException("课程信息不存在");
-		}
-
-		Date tomorrow = DateUtil.addDays1(date, 1);
-
-		if(tomorrow.before(courseSchedule.getStartClassTime())){
-			throw new BizException("明天的课程不能进行签到");
-		}
-
-		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, 180);
-		Date add20Minutes = DateUtil.addMinutes(classStartDateTime, advanceSignMinutes * -1);
-		if(teacherAttendance.getSignInTime() == null && teacherSignOutDto.getTeacherAttendanceInfo().getStatus().equals(SignStatusEnum.SIGN_IN.getCode())){
-
-			if(StringUtils.isBlank(teacherSignOutDto.getTeacherAttendanceInfo().getSignInLongitudeLatitude())){
-				throw new BizException("未获取到您的位置");
-			}
-
-			School school = schoolDao.get(courseSchedule.getSchoolId());
-
-			//是否在范围内
-			boolean isInScore = true;
-			if(StringUtils.isBlank(school.getLongitudeLatitude())){
-				if(teacherSignOutDto.getTeacherAttendanceInfo().getUpdate().equals(YesOrNoEnum.YES.getCode())){
-					school.setLongitudeLatitude(teacherSignOutDto.getTeacherAttendanceInfo().getSignInLongitudeLatitude());
-					schoolDao.update(school);
-				}else{
-					isInScore = false;
-				}
-			}else{
-				SysConfig sysConfig = sysConfigService.findByParamName(SysConfigService.ATTENDANCE_RANGE);
-				double attendanceRange = Double.valueOf(sysConfig.getParanValue());
-				double distance = MapUtil.distance(teacherSignOutDto.getTeacherAttendanceInfo().getSignInLongitudeLatitude(),
-						school.getLongitudeLatitude());
-				if(distance>attendanceRange){
-					isInScore=false;
-				}
-			}
-
-			teacherAttendance.setCurrentClassTimes(courseScheduleDao.countCurrentTimes(teacherAttendance.getClassGroupId(),courseSchedule.getStartClassTime()) + 1);
-			teacherAttendance.setSignInLongitudeLatitude(teacherSignOutDto.getTeacherAttendanceInfo().getSignInLongitudeLatitude());
-			if (currentCourseDetail.getEndClassTime().before(date)){
-				throw new BizException("该课程已结束,不能进行签到!");
-			}
-
-			YesOrNoEnum yesOrNoEnum = YesOrNoEnum.NO;
-			if(Objects.nonNull(courseSchedule.getSchoolId())){
-				yesOrNoEnum = courseScheduleService.enableOnlyNormalAttendance(currentCourseDetail.getStartClassTime(),
-						user.getId().longValue(),
-						true,
-						currentCourseDetail.getSchoolId().intValue());
-			}
-			teacherAttendance.setSignInTime(date);
-			teacherAttendance.setSignInStatus(YesOrNoEnum.YES);
-			result.put("signInStatus",0);
-			if(yesOrNoEnum == YesOrNoEnum.YES){
-				//连堂课
-			}else if(DateUtil.minutesBetween(date,add20Minutes) >= 0){
-				//正常签到范围(开始前60分钟  ~  开始之前20分钟)
-				if(!isInScore){
-					teacherAttendance.setSignInStatus(YesOrNoEnum.NO);
-				}
-			}else if(DateUtil.minutesBetween(add20Minutes,date) > 0){
-				if(StringUtils.isEmpty(teacherAttendance.getRemark())&&!teacherSignOutDto.isNotRturnErrorInfo()){
-					//当前为异常签到,请填写原因!
-					result.put("status",2);
-					return result;
-				}
-				//异常签到范围(开始之后  ~  结束之前)
-				teacherAttendance.setSignInStatus(YesOrNoEnum.NO);
-				result.put("signInStatus",1);
+		//签退
+		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 {
-				throw new BizException("签到时间异常");
+				break;
 			}
-			if(Objects.nonNull(teacherAttendance.getId())){
-				teacherAttendanceDao.update(teacherAttendance);
-			}else{
-				teacherAttendanceDao.insert(teacherAttendance);
+		}
+		String courseClassDate;
+		String courseStartDateTime;
+		String courseEndDateTime;
+		Boolean isBreak = false;
+		for (int i = courseSchedules.size() - 1; i >= 0; i--) {
+			if(isBreak){
+				break;
 			}
-			return result;
-		}else if(teacherAttendance.getSignOutTime() == null && teacherSignOutDto.getTeacherAttendanceInfo().getStatus().equals(SignStatusEnum.SIGN_OUT.getCode())){
-			//正常签退范围(结束后1小时内)
-			teacherAttendance.setSignOutTime(date);
-			ClassGroup classGroup = classGroupDao.get(courseSchedule.getClassGroupId());
-			teacherAttendance.setCurrentClassTimes(classGroup.getCurrentClassTimes() + 1);
-			if(DateUtil.minutesBetween(classEndDateTime,date) >= 0 && DateUtil.minutesBetween(date,classEndDateAdd60Minutes) >= 0){
-				teacherAttendance.setSignOutStatus(YesOrNoEnum.YES);
-				result.put("signInStatus",0);
-			}else if(DateUtil.minutesBetween(classEndDateAdd60Minutes,date) > 0){
-				teacherAttendance.setSignOutStatus(YesOrNoEnum.NO);
-				result.put("signInStatus",1);
+			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 {
-				throw new BizException("签退时间异常");
-			}
-			if(Objects.nonNull(teacherAttendance.getId())){
-				teacherAttendanceDao.update(teacherAttendance);
-			}else{
-				teacherAttendanceDao.insert(teacherAttendance);
+				isBreak = upsetAttendance(userId,startDateTime,endDateTime,YesOrNoEnum.YES,schedule,firstCourseId);
 			}
-			//新增课堂作业
-			CourseHomework courseHomework=teacherSignOutDto.getCourseHomeworkInfo();
-			courseHomework.setCourseScheduleId(teacherAttendance.getCourseScheduleId());
-			courseHomework.setMusicGroupId(currentCourseDetail.getMusicGroupId());
-			courseHomework.setGroupType(teacherAttendance.getGroupType());
-			courseHomework.setClassGroupId(currentCourseDetail.getClassId().intValue());
-			courseHomework.setExpiryDate(DateUtil.addDays(date,7));
-			courseHomework.setExpectNum(courseScheduleDao.countCourseStudentNum(teacherAttendance.getCourseScheduleId()));
-			courseHomeworkService.insert(courseHomework);
-			List<StudentCourseHomework> studentCourseHomeworks = studentCourseHomeworkDao
-					.constructInitialStudentHomeworkRecordsWithPayment(teacherAttendance.getCourseScheduleId(),
-							courseHomework.getId());
-			if(CollectionUtils.isEmpty(studentCourseHomeworks)){
-				throw new BizException("此课程没有学生");
-			}
-			studentCourseHomeworkDao.batchInsertStudentCourseHomeworkRecord(studentCourseHomeworks);
-			return result;
 		}
-
-		result.put("status",0);
-		result.put("currentTime",date);
-
-		return result;
 	}
 
-
 	@Override
 	@Transactional(rollbackFor = Exception.class)
-	public void addTeacherAttendanceRecord(Integer courseScheduleId, Integer userId, SignStatusEnum signStatus, boolean updateCourseScheduleStatus,Long currentScheduleId) {
-		ClassGroup classGroup = classGroupDao.findByCourseSchedule(courseScheduleId,0);
-		Date date = new Date();
-		TeacherAttendance teacherAttendance=teacherAttendanceDao.findByTeacherAttendanceInfo(userId.longValue(),currentScheduleId);
+	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(classGroup.getGroupType());
-			teacherAttendance.setCourseScheduleId(courseScheduleId.longValue());
+			teacherAttendance.setCourseScheduleId(courseScheduleId);
 			teacherAttendance.setTeacherId(userId);
 			teacherAttendance.setMusicGroupId(classGroup.getMusicGroupId());
 			teacherAttendance.setClassGroupId(classGroup.getId());
 			teacherAttendance.setTeacherId(userId);
-			teacherAttendance.setCurrentScheduleId(currentScheduleId);
+			teacherAttendance.setCurrentScheduleId(firstCourseId);
 			teacherAttendanceDao.insert(teacherAttendance);
 		}else {
-			teacherAttendance.setCurrentScheduleId(currentScheduleId);
+			teacherAttendance.setCurrentScheduleId(firstCourseId);
 			teacherAttendance.setGroupType(classGroup.getGroupType());
 			teacherAttendance.setTeacherId(userId);
 			teacherAttendance.setClassGroupId(classGroup.getId());
 			teacherAttendance.setMusicGroupId(classGroup.getMusicGroupId());
 		}
 		//签到
-		if(teacherAttendance.getSignInTime() == null && SignStatusEnum.SIGN_IN.equals(signStatus)){
-			CourseSchedule courseSchedule = courseScheduleDao.get(currentScheduleId);
+		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);
@@ -295,62 +179,14 @@ public class TeacherAttendanceServiceImpl extends BaseServiceImpl<Long, TeacherA
 				}
 			}
 		}
-		//签退
-		if(SignStatusEnum.SIGN_OUT.equals(signStatus)){
-			CourseSchedule courseSchedule = courseScheduleDao.get(courseScheduleId.longValue());
-			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,currentScheduleId);
-					}else {
-						isBreak = upsetAttendance(userId,startDateTime,date,YesOrNoEnum.NO,schedule,currentScheduleId);
-					}
-				}else {
-					isBreak = upsetAttendance(userId,startDateTime,endDateTime,YesOrNoEnum.YES,schedule,currentScheduleId);
-				}
-			}
-		}
 	}
 
-	public Boolean upsetAttendance(Integer userId,Date signInTime,Date signOutTime,YesOrNoEnum status,CourseSchedule courseSchedule,Long currentScheduleId){
+	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(currentScheduleId);
+		Long courseId = teacherAttendanceDao.findFirstSign(courseScheduleId);
 		//如果当前课程是第一次签到的课程那么不更新签到时间,并且退出下次循环
-		if(courseId != null && courseId == courseSchedule.getId()){
+		if(courseId != null && courseId.equals(courseSchedule.getId())){
 			flag = true;
 		}
 		if(teacherAttendance == null){
@@ -364,12 +200,12 @@ public class TeacherAttendanceServiceImpl extends BaseServiceImpl<Long, TeacherA
 			teacherAttendance.setSignOutStatus(status);
 			teacherAttendance.setSignOutTime(signOutTime);
 			teacherAttendance.setSignInTime(signInTime);
-			teacherAttendance.setCurrentScheduleId(currentScheduleId);
+			teacherAttendance.setCurrentScheduleId(courseScheduleId);
 			teacherAttendanceDao.insert(teacherAttendance);
 		}else {
 			teacherAttendance.setSignOutStatus(status);
 			teacherAttendance.setSignOutTime(signOutTime);
-			teacherAttendance.setCurrentScheduleId(currentScheduleId);
+			teacherAttendance.setCurrentScheduleId(courseScheduleId);
 			if(!flag){
 				teacherAttendance.setSignInTime(signInTime);
 				teacherAttendance.setSignInStatus(YesOrNoEnum.YES);

+ 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);

+ 48 - 44
mec-im/src/main/java/com/ym/service/Impl/RoomServiceImpl.java

@@ -282,7 +282,7 @@ public class RoomServiceImpl implements RoomService {
         log.info("signInSuccess: roomId={}, userId={}", roomId, userId);
         Integer userIdInt = Integer.parseInt(userId);
         String roomString = roomId.substring(1);
-        Long courseId = Long.parseLong(roomString);
+        Long firstCourseId = Long.parseLong(roomString);
 
         Long currentRoomId = Long.parseLong(redisTemplate.opsForValue().get(roomString));
         log.info("signInSuccess: currentRoomId={}", currentRoomId);
@@ -314,9 +314,9 @@ public class RoomServiceImpl implements RoomService {
         }*/
         RoleEnum roleEnum = RoleEnum.getEnumByValue(roomMember.getRole());
         if(roleEnum == RoleTeacher){
-            teacherAttendanceService.addTeacherAttendanceRecord(courseId.intValue(),userIdInt, SignStatusEnum.SIGN_IN,true,currentRoomId);
+            teacherAttendanceService.addTeacherAttendanceSignIn(firstCourseId,userIdInt,currentRoomId);
         }else {
-            studentAttendanceService.addStudentAttendanceRecord(courseId.intValue(),userIdInt, StudentAttendanceStatusEnum.NORMAL,SignStatusEnum.SIGN_IN,currentRoomId);
+            studentAttendanceService.addStudentAttendanceSignIn(firstCourseId,userIdInt,currentRoomId);
         }
     }
 
@@ -346,49 +346,53 @@ public class RoomServiceImpl implements RoomService {
 
     @Transactional(rollbackFor = Exception.class, isolation = Isolation.SERIALIZABLE)
     public void leaveRoomSuccess(String roomId,String userId) throws Exception {
-        RoomMember roomMember = roomMemberDao.findByRidAndUid(roomId, userId);
-        if(roomMember == null){
-            return ;
-        }
-        log.info("leaveRoomSuccess: roomId={}, userId={}", roomId,userId);
-        RoleEnum roleEnum = RoleEnum.getEnumByValue(roomMember.getRole());
+//        RoomMember roomMember = roomMemberDao.findByRidAndUid(roomId, userId);
+//        if(roomMember == null){
+//            return ;
+//        }
+//        log.info("leaveRoomSuccess: roomId={}, userId={}", roomId,userId);
+//        RoleEnum roleEnum = RoleEnum.getEnumByValue(roomMember.getRole());
         String roomString = roomId.substring(1);
-        Integer scheduleId = Integer.parseInt(roomString);
-        Long currentRoomId = Long.parseLong(redisTemplate.opsForValue().get(roomString));
-        log.info("leaveRoomSuccess: currentRoomId={}", currentRoomId);
-        redisTemplate.delete(roomString);
-        if(roleEnum == RoleTeacher){
-            courseScheduleStudentPaymentDao.adjustPlayMidi(scheduleId.intValue(),null,null);
-            teacherAttendanceService.addTeacherAttendanceRecord(scheduleId.intValue(),Integer.parseInt(userId), SignStatusEnum.SIGN_OUT,true,currentRoomId);
-        }else {
-            studentAttendanceService.addStudentAttendanceRecord(scheduleId.intValue(),Integer.parseInt(userId), StudentAttendanceStatusEnum.NORMAL,SignStatusEnum.SIGN_OUT,currentRoomId);
-        }
-        Room room = roomDao.findByRid(roomId);
-        if (room == null) {
-            roomMemberDao.deleteUserByRidAndUid(roomId, userId);
-            userDao.deleteByUid(userId);
-            return;
-        }
-
-        if (roleEnum != RoleStudent && isUserDisplay(room, userId)) {
-            updateDisplay(roomId, userId, "", 0);
-        }
-        if (roomMemberDao.countByRid(roomId) == 1) {
-            roomMemberDao.deleteUserByRidAndUid(roomId, userId);
-            roomDao.deleteByRid(roomId);
-            deleteWhiteboardByUser(roomId, userId);
-            imHelper.dismiss(userId, roomId);
-            log.info("leaveRoomSuccess dismiss the room: {},userId: {}", roomId,userId);
-        } else {
+        Integer firstCourseId = Integer.parseInt(roomString);
+//        Long currentRoomId = Long.parseLong(redisTemplate.opsForValue().get(roomString));
+
+        teacherAttendanceService.addTeacherAttendanceSignOut(firstCourseId.longValue(),Integer.parseInt(userId));
+
+//
+//        log.info("leaveRoomSuccess: currentRoomId={}", currentRoomId);
+//        redisTemplate.delete(roomString);
+//        if(roleEnum == RoleTeacher){
+//            courseScheduleStudentPaymentDao.adjustPlayMidi(firstCourseId,null,null);
+//            teacherAttendanceService.addTeacherAttendanceSignOut(firstCourseId.longValue(),Integer.parseInt(userId));
+//        }else {
+//            studentAttendanceService.addStudentAttendanceSignOut(firstCourseId.longValue(),Integer.parseInt(userId));
+//        }
+//        Room room = roomDao.findByRid(roomId);
+//        if (room == null) {
+//            roomMemberDao.deleteUserByRidAndUid(roomId, userId);
+//            userDao.deleteByUid(userId);
+//            return;
+//        }
+//
+//        if (roleEnum != RoleStudent && isUserDisplay(room, userId)) {
+//            updateDisplay(roomId, userId, "", 0);
+//        }
+//        if (roomMemberDao.countByRid(roomId) == 1) {
+//            roomMemberDao.deleteUserByRidAndUid(roomId, userId);
+//            roomDao.deleteByRid(roomId);
+//            deleteWhiteboardByUser(roomId, userId);
+//            imHelper.dismiss(userId, roomId);
+//            log.info("leaveRoomSuccess dismiss the room: {},userId: {}", roomId,userId);
+//        } else {
+////            imHelper.quit(new String[]{userId}, roomId);
+//            roomMemberDao.deleteUserByRidAndUid(roomId, userId);
+//            MemberChangedMessage msg = new MemberChangedMessage(MemberChangedMessage.Action_Leave, userId, roleEnum.getValue());
+//            msg.setUserName(roomMember.getName());
+//            imHelper.publishMessage(userId, roomId, msg);
 //            imHelper.quit(new String[]{userId}, roomId);
-            roomMemberDao.deleteUserByRidAndUid(roomId, userId);
-            MemberChangedMessage msg = new MemberChangedMessage(MemberChangedMessage.Action_Leave, userId, roleEnum.getValue());
-            msg.setUserName(roomMember.getName());
-            imHelper.publishMessage(userId, roomId, msg);
-            imHelper.quit(new String[]{userId}, roomId);
-            log.info("leaveRoomSuccess quit group: roomId={},userId: {}", roomId,userId);
-        }
-        userDao.deleteByUid(userId);
+//            log.info("leaveRoomSuccess quit group: roomId={},userId: {}", roomId,userId);
+//        }
+//        userDao.deleteByUid(userId);
     }
 
     private void deleteWhiteboardByUser(String roomId, String userId) throws Exception {