zouxuan 4 anni fa
parent
commit
f1fdc2514e

+ 8 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/TeacherAttendanceService.java

@@ -17,6 +17,14 @@ 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

+ 168 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/TeacherAttendanceServiceImpl.java

@@ -75,6 +75,174 @@ 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());
+
+		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);
+			}else {
+				throw new BizException("签到时间异常");
+			}
+			if(Objects.nonNull(teacherAttendance.getId())){
+				teacherAttendanceDao.update(teacherAttendance);
+			}else{
+				teacherAttendanceDao.insert(teacherAttendance);
+			}
+			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);
+			}else {
+				throw new BizException("签退时间异常");
+			}
+			if(Objects.nonNull(teacherAttendance.getId())){
+				teacherAttendanceDao.update(teacherAttendance);
+			}else{
+				teacherAttendanceDao.insert(teacherAttendance);
+			}
+			//新增课堂作业
+			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)