浏览代码

Merge branch 'master' of http://git.dayaedu.com/yonge/mec

yonge 4 年之前
父节点
当前提交
75bf3ca43c

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

@@ -93,6 +93,28 @@ public interface CourseScheduleDao extends BaseDAO<Long, CourseSchedule> {
                                                        @Param("groupType") String groupType);
                                                        @Param("groupType") String groupType);
 
 
     /**
     /**
+     * @describe 获取教师在指定时间的前一节课程
+     * @author Joburgess
+     * @date 2020.10.21
+     * @param startClassTime:
+     * @param teacherId:
+     * @return com.ym.mec.biz.dal.entity.CourseSchedule
+     */
+    CourseSchedule getTeacherPrevCourseWithStartTime(@Param("startClassTime") Date startClassTime,
+                                                     @Param("teacherId") Integer teacherId);
+
+    /**
+     * @describe 获取教师在指定时间前有签到的课程
+     * @author Joburgess
+     * @date 2020.10.21
+     * @param startClassTime:
+     * @param teacherId:
+     * @return com.ym.mec.biz.dal.entity.CourseSchedule
+     */
+    CourseSchedule getTeacherAttendanceCourseBeforeStartTime(@Param("startClassTime") Date startClassTime,
+                                                             @Param("teacherId") Integer teacherId);
+
+    /**
      * @param musicGroupId: 乐团编号
      * @param musicGroupId: 乐团编号
      * @param status:       状态
      * @param status:       状态
      * @param userId:       用户编号
      * @param userId:       用户编号

+ 11 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/TeacherAttendance.java

@@ -92,6 +92,9 @@ public class TeacherAttendance {
 	@ApiModelProperty(value = "签退附件")
 	@ApiModelProperty(value = "签退附件")
 	private String signOutAttachments;
 	private String signOutAttachments;
 
 
+	@ApiModelProperty(value = "签退备注")
+	private String signOutRemark;
+
 	public Long getCurrentScheduleId() {
 	public Long getCurrentScheduleId() {
 		return currentScheduleId;
 		return currentScheduleId;
 	}
 	}
@@ -100,6 +103,14 @@ public class TeacherAttendance {
 		this.currentScheduleId = currentScheduleId;
 		this.currentScheduleId = currentScheduleId;
 	}
 	}
 
 
+	public String getSignOutRemark() {
+		return signOutRemark;
+	}
+
+	public void setSignOutRemark(String signOutRemark) {
+		this.signOutRemark = signOutRemark;
+	}
+
 	public Date getComplaintsTime() {
 	public Date getComplaintsTime() {
 		return complaintsTime;
 		return complaintsTime;
 	}
 	}

+ 11 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/CourseScheduleService.java

@@ -83,6 +83,17 @@ public interface CourseScheduleService extends BaseService<Long, CourseSchedule>
 	 * @return com.ym.mec.biz.dal.enums.YesOrNoEnum
 	 * @return com.ym.mec.biz.dal.enums.YesOrNoEnum
 	 */
 	 */
 	YesOrNoEnum enableOnlyNormalAttendance(Date startClassTime,Long userId,boolean checkSchool,Integer schoolId);
 	YesOrNoEnum enableOnlyNormalAttendance(Date startClassTime,Long userId,boolean checkSchool,Integer schoolId);
+
+	/**
+	 * @describe 检测是否可以忽略正常签到时间限制
+	 * @author Joburgess
+	 * @date 2020.10.21
+	 * @param startClassTime: 当前课程开始时间
+	 * @param teacherId: 当前课程上课教师编号
+	 * @param schoolId:当前课程教学点编号
+	 * @return boolean
+	 */
+	boolean enableIgnoreAttendanceTime(Date startClassTime, Integer teacherId, Integer schoolId);
 	
 	
 	/**
 	/**
 	 * 给班级加课
 	 * 给班级加课

+ 22 - 6
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleServiceImpl.java

@@ -281,11 +281,10 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
             throw new BizException("课程不存在");
             throw new BizException("课程不存在");
         }
         }
         if(Objects.nonNull(currentCourseDetail.getSchoolId())){
         if(Objects.nonNull(currentCourseDetail.getSchoolId())){
-            YesOrNoEnum yesOrNoEnum = enableOnlyNormalAttendance(currentCourseDetail.getStartClassTime(),
-                    user.getId().longValue(),
-                    true,
+            boolean enableIgnoreAttendanceTime = enableIgnoreAttendanceTime(currentCourseDetail.getStartClassTime(),
+                    user.getId(),
                     currentCourseDetail.getSchoolId().intValue());
                     currentCourseDetail.getSchoolId().intValue());
-            currentCourseDetail.setOnlyNormal(yesOrNoEnum);
+            currentCourseDetail.setOnlyNormal(enableIgnoreAttendanceTime?YesOrNoEnum.YES:YesOrNoEnum.NO);
         }else{
         }else{
             currentCourseDetail.setOnlyNormal(YesOrNoEnum.NO);
             currentCourseDetail.setOnlyNormal(YesOrNoEnum.NO);
         }
         }
@@ -294,7 +293,7 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
         SysConfig sysConfig = sysConfigService.findByParamName(SysConfigService.ENABLE_STUDENT_ATTENDANCE_TIME_RANGE);
         SysConfig sysConfig = sysConfigService.findByParamName(SysConfigService.ENABLE_STUDENT_ATTENDANCE_TIME_RANGE);
         SysConfig sysConfigVip = sysConfigService.findByParamName(SysConfigService.ENABLE_STUDENT_ATTENDANCE_TIME_RANGE_VIP);
         SysConfig sysConfigVip = sysConfigService.findByParamName(SysConfigService.ENABLE_STUDENT_ATTENDANCE_TIME_RANGE_VIP);
         currentCourseDetail.setEnableStudentAttendanceTimeRange(sysConfig.getParanValue(Integer.class));
         currentCourseDetail.setEnableStudentAttendanceTimeRange(sysConfig.getParanValue(Integer.class));
-        currentCourseDetail.setEnableStudentAttendanceTimeRange(sysConfigVip.getParanValue(Integer.class));
+        currentCourseDetail.setEnableStudentAttendanceTimeRangeVip(sysConfigVip.getParanValue(Integer.class));
         int studentNum = studentAttendanceDao.countByCourseSchedule(courseID);
         int studentNum = studentAttendanceDao.countByCourseSchedule(courseID);
         if (Objects.nonNull(studentNum)) {
         if (Objects.nonNull(studentNum)) {
             currentCourseDetail.setStudentAttendanceIsFirstTime(studentNum > 0 ? 0 : 1);
             currentCourseDetail.setStudentAttendanceIsFirstTime(studentNum > 0 ? 0 : 1);
@@ -432,7 +431,24 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
         }
         }
     }
     }
 
 
-    @Override
+	@Override
+	public boolean enableIgnoreAttendanceTime(Date startClassTime, Integer teacherId, Integer schoolId) {
+		CourseSchedule prevCourse = courseScheduleDao.getTeacherAttendanceCourseBeforeStartTime(startClassTime, teacherId);
+		if(Objects.isNull(prevCourse)){
+			return false;
+		}
+		if(!schoolId.equals(prevCourse.getSchoolId())){
+			return true;
+		}
+		int hoursBetween = DateUtil.hoursBetween(prevCourse.getStartClassTime(), startClassTime);
+		if(hoursBetween>1){
+			return false;
+		}else{
+			return true;
+		}
+	}
+
+	@Override
 	@Transactional(rollbackFor = Exception.class)
 	@Transactional(rollbackFor = Exception.class)
 	public boolean batchAddCourseSchedule(Integer classGroupId, int coursesTimes, Date startDate, Date groupEndDate, Date groupStartDate, List<CourseTimeDto> teachingArrangementList,
 	public boolean batchAddCourseSchedule(Integer classGroupId, int coursesTimes, Date startDate, Date groupEndDate, Date groupStartDate, List<CourseTimeDto> teachingArrangementList,
 			TeachModeEnum teachMode, CourseScheduleType type, Integer schoolId, boolean isJumpHoliday) {
 			TeachModeEnum teachMode, CourseScheduleType type, Integer schoolId, boolean isJumpHoliday) {

+ 16 - 12
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleTeacherSalaryServiceImpl.java

@@ -542,7 +542,9 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
 
 
         //需要根据实际上课学员结算课酬的课程编号
         //需要根据实际上课学员结算课酬的课程编号
         List<Long> needStudentAttendanceCourseScheduleIds = yesterdayCourseSchedules.stream()
         List<Long> needStudentAttendanceCourseScheduleIds = yesterdayCourseSchedules.stream()
-                .filter(c -> CourseSchedule.CourseScheduleType.HIGH_ONLINE.equals(c.getType()) || CourseSchedule.CourseScheduleType.MUSIC_NETWORK.equals(c.getType()))
+                .filter(c -> CourseSchedule.CourseScheduleType.HIGH_ONLINE.equals(c.getType())
+                        || CourseSchedule.CourseScheduleType.MUSIC_NETWORK.equals(c.getType())
+                        || CourseSchedule.CourseScheduleType.HIGH.equals(c.getType()))
                 .map(CourseSchedule::getId).collect(Collectors.toList());
                 .map(CourseSchedule::getId).collect(Collectors.toList());
 
 
         List<StudentAttendance> studentAttendances = studentAttendanceDao.findByCourseIds(needStudentAttendanceCourseScheduleIds);
         List<StudentAttendance> studentAttendances = studentAttendanceDao.findByCourseIds(needStudentAttendanceCourseScheduleIds);
@@ -735,7 +737,7 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
             boolean isCallName = false;
             boolean isCallName = false;
             List<StudentAttendance> courseStudentAttendance = courseStudentAttendanceMap.get(courseScheduleTeacherSalary.getCourseScheduleId());
             List<StudentAttendance> courseStudentAttendance = courseStudentAttendanceMap.get(courseScheduleTeacherSalary.getCourseScheduleId());
             if(!CollectionUtils.isEmpty(courseStudentAttendance)){
             if(!CollectionUtils.isEmpty(courseStudentAttendance)){
-                long csaNum = courseStudentAttendance.stream().filter(csa -> DateUtil.hoursBetween(csa.getSignInTime(), courseSchedule.getStartClassTime()) < 4).count();
+                long csaNum = courseStudentAttendance.stream().filter(csa -> DateUtil.hoursBetween(csa.getCreateTime(), courseSchedule.getStartClassTime()) < 4).count();
                 if(csaNum>0){
                 if(csaNum>0){
                     isCallName = true;
                     isCallName = true;
                 }
                 }
@@ -746,19 +748,21 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
                 deductCost = deductCost.add(teacherSalary);
                 deductCost = deductCost.add(teacherSalary);
             }else{
             }else{
                 TeacherAttendance teacherAttendance = courseTeacherAttendances.get(0);
                 TeacherAttendance teacherAttendance = courseTeacherAttendances.get(0);
-                int signCourseTimeBetween = DateUtil.minutesBetween(teacherAttendance.getSignInTime(), courseSchedule.getStartClassTime());
                 if(Objects.isNull(teacherAttendance.getSignInStatus())){
                 if(Objects.isNull(teacherAttendance.getSignInStatus())){
                     //未签到扣除全部课酬
                     //未签到扣除全部课酬
                     deductCost = deductCost.add(teacherSalary);
                     deductCost = deductCost.add(teacherSalary);
-                }else if(YesOrNoEnum.NO.equals(teacherAttendance.getSignInStatus())&&signCourseTimeBetween>=0&&signCourseTimeBetween<20){
-                    //未提前20分钟打卡扣除50元
-                    deductCost = deductCost.add(new BigDecimal(50));
-                }else if(YesOrNoEnum.NO.equals(teacherAttendance.getSignInStatus())&&signCourseTimeBetween<0&&signCourseTimeBetween>-30){
-                    //迟到30分钟内扣除一半课酬
-                    deductCost = deductCost.add(teacherSalary.divide(new BigDecimal(2)));
-                }else if(YesOrNoEnum.NO.equals(teacherAttendance.getSignInStatus())&&signCourseTimeBetween<=-30){
-                    //迟到30分钟及以上扣除全部课酬
-                    deductCost = deductCost.add(teacherSalary);
+                }else if(YesOrNoEnum.NO.equals(teacherAttendance.getSignInStatus())){
+                    int signCourseTimeBetween = DateUtil.minutesBetween(teacherAttendance.getSignInTime(), courseSchedule.getStartClassTime());
+                    if(signCourseTimeBetween>=0&&signCourseTimeBetween<20){
+                        //未提前20分钟打卡扣除50元
+                        deductCost = deductCost.add(new BigDecimal(50));
+                    }else if(signCourseTimeBetween<0&&signCourseTimeBetween>-30){
+                        //迟到30分钟内扣除一半课酬
+                        deductCost = deductCost.add(teacherSalary.divide(new BigDecimal(2)));
+                    }else if(signCourseTimeBetween<=-30){
+                        //迟到30分钟及以上扣除全部课酬
+                        deductCost = deductCost.add(teacherSalary);
+                    }
                 }
                 }
 
 
                 if(!isCallName){
                 if(!isCallName){

+ 43 - 15
mec-biz/src/main/java/com/ym/mec/biz/service/impl/TeacherAttendanceServiceImpl.java

@@ -111,6 +111,7 @@ public class TeacherAttendanceServiceImpl extends BaseServiceImpl<Long, TeacherA
 		teacherAttendance.setClassGroupId(currentCourseDetail.getClassId());
 		teacherAttendance.setClassGroupId(currentCourseDetail.getClassId());
 		teacherAttendance.setRemark(teacherSignOutDto.getTeacherAttendanceInfo().getRemark());
 		teacherAttendance.setRemark(teacherSignOutDto.getTeacherAttendanceInfo().getRemark());
 		int advanceSignMinutes = Integer.parseInt(sysConfigDao.findConfigValue(SysConfigService.ADVANCE_SIGN_IN_MINUTES));
 		int advanceSignMinutes = Integer.parseInt(sysConfigDao.findConfigValue(SysConfigService.ADVANCE_SIGN_IN_MINUTES));
+		int offlineSignInEarlyForwardTime = Integer.parseInt(sysConfigDao.findConfigValue(SysConfigService.OFFLINE_SIGN_IN_EARLY_FORWARD_TIME));
 
 
 		CourseSchedule courseSchedule = courseScheduleDao.get(teacherAttendance.getCourseScheduleId());
 		CourseSchedule courseSchedule = courseScheduleDao.get(teacherAttendance.getCourseScheduleId());
 		teacherAttendance.setGroupType(courseSchedule.getGroupType());
 		teacherAttendance.setGroupType(courseSchedule.getGroupType());
@@ -124,13 +125,16 @@ public class TeacherAttendanceServiceImpl extends BaseServiceImpl<Long, TeacherA
 			throw new BizException("明天的课程不能进行签到");
 			throw new BizException("明天的课程不能进行签到");
 		}
 		}
 
 
+		School school = schoolDao.get(courseSchedule.getSchoolId());
+
 		String classDate = DateUtil.format(courseSchedule.getClassDate(), DateUtil.DEFAULT_PATTERN);
 		String classDate = DateUtil.format(courseSchedule.getClassDate(), DateUtil.DEFAULT_PATTERN);
 		String startClassTime = DateUtil.format(courseSchedule.getStartClassTime(), DateUtil.EXPANDED_TIME_FORMAT);
 		String startClassTime = DateUtil.format(courseSchedule.getStartClassTime(), DateUtil.EXPANDED_TIME_FORMAT);
 		String endClassTime = DateUtil.format(courseSchedule.getEndClassTime(), 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 classStartDateTime = DateUtil.stringToDate(classDate + " " + startClassTime, DateUtil.EXPANDED_DATE_TIME_FORMAT);
 		Date classEndDateTime = DateUtil.stringToDate(classDate + " " + endClassTime, DateUtil.EXPANDED_DATE_TIME_FORMAT);
 		Date classEndDateTime = DateUtil.stringToDate(classDate + " " + endClassTime, DateUtil.EXPANDED_DATE_TIME_FORMAT);
-		Date classEndDateAdd60Minutes = DateUtil.addMinutes(classEndDateTime, 180);
+		Date classEndDateAdd60Minutes = DateUtil.addMinutes(classEndDateTime, 60);
+		Date add60Minutes = DateUtil.addMinutes(classStartDateTime, offlineSignInEarlyForwardTime * -1);
 		Date add20Minutes = DateUtil.addMinutes(classStartDateTime, advanceSignMinutes * -1);
 		Date add20Minutes = DateUtil.addMinutes(classStartDateTime, advanceSignMinutes * -1);
 		if(teacherAttendance.getSignInTime() == null && teacherSignOutDto.getTeacherAttendanceInfo().getStatus().equals(SignStatusEnum.SIGN_IN.getCode())){
 		if(teacherAttendance.getSignInTime() == null && teacherSignOutDto.getTeacherAttendanceInfo().getStatus().equals(SignStatusEnum.SIGN_IN.getCode())){
 
 
@@ -138,8 +142,6 @@ public class TeacherAttendanceServiceImpl extends BaseServiceImpl<Long, TeacherA
 				throw new BizException("未获取到您的位置");
 				throw new BizException("未获取到您的位置");
 			}
 			}
 
 
-			School school = schoolDao.get(courseSchedule.getSchoolId());
-
 			//是否在范围内
 			//是否在范围内
 			boolean isInScore = true;
 			boolean isInScore = true;
 			if(StringUtils.isBlank(school.getLongitudeLatitude())){
 			if(StringUtils.isBlank(school.getLongitudeLatitude())){
@@ -165,24 +167,25 @@ public class TeacherAttendanceServiceImpl extends BaseServiceImpl<Long, TeacherA
 				throw new BizException("该课程已结束,不能进行签到!");
 				throw new BizException("该课程已结束,不能进行签到!");
 			}
 			}
 
 
-			YesOrNoEnum yesOrNoEnum = YesOrNoEnum.NO;
+			boolean enableIgnoreAttendanceTime = false;
 			if(Objects.nonNull(courseSchedule.getSchoolId())){
 			if(Objects.nonNull(courseSchedule.getSchoolId())){
-				yesOrNoEnum = courseScheduleService.enableOnlyNormalAttendance(currentCourseDetail.getStartClassTime(),
-						user.getId().longValue(),
-						true,
+				enableIgnoreAttendanceTime = courseScheduleService.enableIgnoreAttendanceTime(currentCourseDetail.getStartClassTime(),
+						user.getId(),
 						currentCourseDetail.getSchoolId().intValue());
 						currentCourseDetail.getSchoolId().intValue());
 			}
 			}
 			teacherAttendance.setSignInTime(date);
 			teacherAttendance.setSignInTime(date);
 			teacherAttendance.setSignInStatus(YesOrNoEnum.YES);
 			teacherAttendance.setSignInStatus(YesOrNoEnum.YES);
 			result.put("signInStatus",0);
 			result.put("signInStatus",0);
-			if(yesOrNoEnum == YesOrNoEnum.YES){
-				//连堂课
-			}else if(DateUtil.minutesBetween(date,add20Minutes) >= 0){
+			if(!isInScore){
+				teacherAttendance.setSignInStatus(YesOrNoEnum.NO);
+			}else if(enableIgnoreAttendanceTime){
+				//连堂课,可忽略正常时间签到范围
+			}else if(date.compareTo(add20Minutes) <= 0&&date.compareTo(add60Minutes)>=0){
 				//正常签到范围(开始前60分钟  ~  开始之前20分钟)
 				//正常签到范围(开始前60分钟  ~  开始之前20分钟)
 				if(!isInScore){
 				if(!isInScore){
 					teacherAttendance.setSignInStatus(YesOrNoEnum.NO);
 					teacherAttendance.setSignInStatus(YesOrNoEnum.NO);
 				}
 				}
-			}else if(DateUtil.minutesBetween(add20Minutes,date) > 0){
+			}else if(date.compareTo(add20Minutes) > 0&&date.compareTo(add60Minutes) < 0){
 				if(StringUtils.isEmpty(teacherAttendance.getRemark())&&!teacherSignOutDto.isNotRturnErrorInfo()){
 				if(StringUtils.isEmpty(teacherAttendance.getRemark())&&!teacherSignOutDto.isNotRturnErrorInfo()){
 					//当前为异常签到,请填写原因!
 					//当前为异常签到,请填写原因!
 					result.put("status",2);
 					result.put("status",2);
@@ -201,17 +204,42 @@ public class TeacherAttendanceServiceImpl extends BaseServiceImpl<Long, TeacherA
 			}
 			}
 			return result;
 			return result;
 		}else if(teacherAttendance.getSignOutTime() == null && teacherSignOutDto.getTeacherAttendanceInfo().getStatus().equals(SignStatusEnum.SIGN_OUT.getCode())){
 		}else if(teacherAttendance.getSignOutTime() == null && teacherSignOutDto.getTeacherAttendanceInfo().getStatus().equals(SignStatusEnum.SIGN_OUT.getCode())){
+			//是否在范围内
+			boolean isInScore = false;
+			if(StringUtils.isBlank(school.getLongitudeLatitude())){
+				if(teacherSignOutDto.getTeacherAttendanceInfo().getUpdate().equals(YesOrNoEnum.YES.getCode())){
+					school.setLongitudeLatitude(teacherSignOutDto.getTeacherAttendanceInfo().getSignInLongitudeLatitude());
+					schoolDao.update(school);
+				}
+			}else if(StringUtils.isNotBlank(teacherSignOutDto.getTeacherAttendanceInfo().getSignOutLongitudeLatitude())){
+				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=true;
+				}
+			}
+
 			//正常签退范围(结束后1小时内)
 			//正常签退范围(结束后1小时内)
 			teacherAttendance.setSignOutTime(date);
 			teacherAttendance.setSignOutTime(date);
 			teacherAttendance.setSignOutAttachments(teacherSignOutDto.getCourseHomeworkInfo().getAttachments());
 			teacherAttendance.setSignOutAttachments(teacherSignOutDto.getCourseHomeworkInfo().getAttachments());
 			ClassGroup classGroup = classGroupDao.get(courseSchedule.getClassGroupId());
 			ClassGroup classGroup = classGroupDao.get(courseSchedule.getClassGroupId());
 			teacherAttendance.setCurrentClassTimes(classGroup.getCurrentClassTimes() + 1);
 			teacherAttendance.setCurrentClassTimes(classGroup.getCurrentClassTimes() + 1);
-			if(DateUtil.minutesBetween(classEndDateTime,date) >= 0 && DateUtil.minutesBetween(date,classEndDateAdd60Minutes) >= 0){
+			if(!isInScore){
+				teacherAttendance.setSignOutStatus(YesOrNoEnum.NO);
+				result.put("signOutStatus",1);
+			}else if(date.compareTo(classEndDateTime) >= 0 && date.compareTo(classEndDateAdd60Minutes) <= 0){
 				teacherAttendance.setSignOutStatus(YesOrNoEnum.YES);
 				teacherAttendance.setSignOutStatus(YesOrNoEnum.YES);
-				result.put("signInStatus",0);
-			}else if(DateUtil.minutesBetween(classEndDateAdd60Minutes,date) > 0){
+				result.put("signOutStatus",0);
+			}else if(date.compareTo(classEndDateAdd60Minutes) > 0){
+				if(StringUtils.isEmpty(teacherAttendance.getSignOutRemark())&&!teacherSignOutDto.isNotRturnErrorInfo()){
+					//当前为异常签退,请填写原因!
+					result.put("status",2);
+					return result;
+				}
 				teacherAttendance.setSignOutStatus(YesOrNoEnum.NO);
 				teacherAttendance.setSignOutStatus(YesOrNoEnum.NO);
-				result.put("signInStatus",1);
+				result.put("signOutStatus",1);
 			}else {
 			}else {
 				throw new BizException("签退时间异常");
 				throw new BizException("签退时间异常");
 			}
 			}

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

@@ -437,6 +437,8 @@
         ORDER BY cs.id_
         ORDER BY cs.id_
     </select>
     </select>
 
 
+
+
     <resultMap id="studentAttendanceViewUtilEntity" type="com.ym.mec.biz.dal.dto.StudentAttendanceViewDto">
     <resultMap id="studentAttendanceViewUtilEntity" type="com.ym.mec.biz.dal.dto.StudentAttendanceViewDto">
         <result property="classGroupId" column="class_group_id_"/>
         <result property="classGroupId" column="class_group_id_"/>
         <result property="studentId" column="student_id_"/>
         <result property="studentId" column="student_id_"/>
@@ -3244,4 +3246,67 @@
         GROUP BY cgtm.class_group_id_
         GROUP BY cgtm.class_group_id_
     </select>
     </select>
 
 
+    <select id="getTeacherPrevCourseWithStartTime" resultMap="CourseSchedule">
+        SELECT  cs.id_,
+                cs.music_group_id_,
+                cs.group_type_,
+                cs.class_group_id_,
+                cs.status_,
+                cs.subsidy_,
+                cs.class_date_,
+                CONCAT(cs.class_date_, ' ', cs.start_class_time_) start_class_time_,
+                CONCAT(cs.class_date_, ' ', cs.end_class_time_)   end_class_time_,
+                cs.teacher_id_,
+                cs.actual_teacher_id_,
+                cs.create_time_,
+                cs.update_time_,
+                cs.teach_mode_,
+                cs.type_,
+                cs.name_,
+                cs.student_num_,
+                cs.leave_student_num_,
+                cs.teaching_content_,
+                cs.note_,
+                cs.schoole_id_,
+                cs.organ_id_
+        FROM course_schedule cs LEFT JOIN course_schedule_teacher_salary csts ON csts.course_schedule_id_=cs.id_
+        WHERE csts.user_id_=#{teacherId}
+        AND cs.class_date_ = DATE_FORMAT(#{startClassTime},'%Y-%m-%d')
+        AND cs.start_class_time_ &lt; DATE_FORMAT(#{startClassTime},'%H:%i:%S')
+        ORDER BY start_class_time_ DESC LIMIT 1;
+    </select>
+
+    <select id="getTeacherAttendanceCourseBeforeStartTime" resultMap="CourseSchedule">
+        SELECT  cs.id_,
+                cs.music_group_id_,
+                cs.group_type_,
+                cs.class_group_id_,
+                cs.status_,
+                cs.subsidy_,
+                cs.class_date_,
+                CONCAT(cs.class_date_, ' ', cs.start_class_time_) start_class_time_,
+                CONCAT(cs.class_date_, ' ', cs.end_class_time_)   end_class_time_,
+                cs.teacher_id_,
+                cs.actual_teacher_id_,
+                cs.create_time_,
+                cs.update_time_,
+                cs.teach_mode_,
+                cs.type_,
+                cs.name_,
+                cs.student_num_,
+                cs.leave_student_num_,
+                cs.teaching_content_,
+                cs.note_,
+                cs.schoole_id_,
+                cs.organ_id_
+        FROM course_schedule cs
+            LEFT JOIN course_schedule_teacher_salary csts ON csts.course_schedule_id_=cs.id_
+            LEFT JOIN teacher_attendance ta ON cs.id_=ta.course_schedule_id_ AND ta.teacher_id_=#{teacherId}
+        WHERE csts.user_id_=#{teacherId}
+        AND cs.class_date_ = DATE_FORMAT(#{startClassTime},'%Y-%m-%d')
+        AND cs.start_class_time_ &lt; DATE_FORMAT(#{startClassTime},'%H:%i:%S')
+        AND ta.sign_in_status_ IS NOT NULL
+        ORDER BY start_class_time_ DESC LIMIT 1;
+    </select>
+
 </mapper>
 </mapper>

+ 11 - 4
mec-biz/src/main/resources/config/mybatis/TeacherAttendanceMapper.xml

@@ -31,6 +31,7 @@
         <result column="complaints_time_" property="complaintsTime"/>
         <result column="complaints_time_" property="complaintsTime"/>
         <result column="current_schedule_id_" property="currentScheduleId"/>
         <result column="current_schedule_id_" property="currentScheduleId"/>
         <result column="sign_out_attachments_" property="signOutAttachments"/>
         <result column="sign_out_attachments_" property="signOutAttachments"/>
+        <result column="sign_out_remark_" property="signOutRemark"/>
     </resultMap>
     </resultMap>
     
     
     <resultMap type="com.ym.mec.biz.dal.dto.Mapper" id="Mapper">
     <resultMap type="com.ym.mec.biz.dal.dto.Mapper" id="Mapper">
@@ -54,18 +55,20 @@
             keyColumn="id" keyProperty="id">
             keyColumn="id" keyProperty="id">
         INSERT INTO teacher_attendance
         INSERT INTO teacher_attendance
         (group_type_,teacher_id_,music_group_id_,class_group_id_,course_schedule_id_,sign_in_time_,sign_in_status_,remark_,create_time_,sign_out_time_,
         (group_type_,teacher_id_,music_group_id_,class_group_id_,course_schedule_id_,sign_in_time_,sign_in_status_,remark_,create_time_,sign_out_time_,
-        sign_out_status_,current_class_times_,sign_in_longitude_latitude_,sign_out_longitude_latitude_,current_schedule_id_,sign_out_attachments_)
+        sign_out_status_,current_class_times_,sign_in_longitude_latitude_,sign_out_longitude_latitude_,current_schedule_id_,sign_out_attachments_,
+        sign_out_remark_)
         VALUES(#{groupType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{teacherId},
         VALUES(#{groupType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{teacherId},
         #{musicGroupId},#{classGroupId},#{courseScheduleId},#{signInTime},#{signInStatus,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{remark},
         #{musicGroupId},#{classGroupId},#{courseScheduleId},#{signInTime},#{signInStatus,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{remark},
         now(),#{signOutTime},#{signOutStatus,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
         now(),#{signOutTime},#{signOutStatus,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
-        #{currentClassTimes},#{signInLongitudeLatitude},#{signOutLongitudeLatitude},#{currentScheduleId},#{signOutAttachments})
+        #{currentClassTimes},#{signInLongitudeLatitude},#{signOutLongitudeLatitude},#{currentScheduleId},#{signOutAttachments},#{signOutRemark})
     </insert>
     </insert>
 
 
     <insert id="batchInsert" parameterType="com.ym.mec.biz.dal.entity.TeacherAttendance" useGeneratedKeys="true"
     <insert id="batchInsert" parameterType="com.ym.mec.biz.dal.entity.TeacherAttendance" useGeneratedKeys="true"
             keyColumn="id" keyProperty="id">
             keyColumn="id" keyProperty="id">
         INSERT INTO teacher_attendance
         INSERT INTO teacher_attendance
         (group_type_,teacher_id_,music_group_id_,class_group_id_,course_schedule_id_,sign_in_time_,sign_in_status_,
         (group_type_,teacher_id_,music_group_id_,class_group_id_,course_schedule_id_,sign_in_time_,sign_in_status_,
-        remark_,create_time_,sign_out_time_,sign_out_status_,sign_in_longitude_latitude_,sign_out_longitude_latitude_,current_schedule_id_,sign_out_attachments_)
+        remark_,create_time_,sign_out_time_,sign_out_status_,sign_in_longitude_latitude_,sign_out_longitude_latitude_,current_schedule_id_,sign_out_attachments_,
+        sign_out_remark_)
         VALUE
         VALUE
         <foreach collection="teacherAttendances" item="teacherAttendance" separator=",">
         <foreach collection="teacherAttendances" item="teacherAttendance" separator=",">
             (#{teacherAttendance.groupType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
             (#{teacherAttendance.groupType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
@@ -74,7 +77,8 @@
             #{teacherAttendance.signInStatus,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
             #{teacherAttendance.signInStatus,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
             #{teacherAttendance.remark},now(),#{teacherAttendance.signOutTime},
             #{teacherAttendance.remark},now(),#{teacherAttendance.signOutTime},
             #{teacherAttendance.signOutStatus,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
             #{teacherAttendance.signOutStatus,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
-            #{teacherAttendance.signInLongitudeLatitude},#{teacherAttendance.signOutLongitudeLatitude},#{teacherAttendance.currentScheduleId},#{teacherAttendance.signOutAttachments})
+            #{teacherAttendance.signInLongitudeLatitude},#{teacherAttendance.signOutLongitudeLatitude},#{teacherAttendance.currentScheduleId},
+            #{teacherAttendance.signOutAttachments},#{teacherAttendance.signOutRemark})
         </foreach>
         </foreach>
     </insert>
     </insert>
 
 
@@ -145,6 +149,9 @@
             <if test="signOutAttachments != null">
             <if test="signOutAttachments != null">
                 sign_out_attachments_ = #{signOutAttachments},
                 sign_out_attachments_ = #{signOutAttachments},
             </if>
             </if>
+            <if test="signOutRemark != null">
+                sign_out_remark_ = #{signOutRemark},
+            </if>
         </set>
         </set>
         WHERE id_ = #{id}
         WHERE id_ = #{id}
     </update>
     </update>