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