Browse Source

Merge remote-tracking branch 'origin/master'

周箭河 4 years ago
parent
commit
de99e1f1b3

+ 11 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/TeacherAttendanceDetailDto.java

@@ -1,6 +1,7 @@
 package com.ym.mec.biz.dal.dto;
 
 import com.ym.mec.biz.dal.entity.CourseSchedule;
+import com.ym.mec.biz.dal.entity.School;
 import com.ym.mec.biz.dal.enums.*;
 
 import java.util.Date;
@@ -31,6 +32,8 @@ public class TeacherAttendanceDetailDto {
     private Date signOutTime;
 
     private Integer attendClassTime;
+    
+    private School school;
 
     public Integer getAttendClassTime() {
         return attendClassTime;
@@ -135,4 +138,12 @@ public class TeacherAttendanceDetailDto {
     public void setSignOutTime(Date signOutTime) {
         this.signOutTime = signOutTime;
     }
+
+	public School getSchool() {
+		return school;
+	}
+
+	public void setSchool(School school) {
+		this.school = school;
+	}
 }

+ 13 - 34
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleServiceImpl.java

@@ -4320,7 +4320,7 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 
     @Override
     public PageInfo<CourseScheduleEndDto> endFindCourseSchedules(EndCourseScheduleQueryInfo queryInfo) {
-        PageInfo pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
+        PageInfo<CourseScheduleEndDto> pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
         Map<String, Object> params = new HashMap<>(16);
         MapUtil.populateMap(params, queryInfo);
 
@@ -4334,24 +4334,21 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
             params.put("offset", pageInfo.getOffset());
             results = courseScheduleDao.endFindCourseSchedules(params);
             List<Long> courseScheduleIds = results.stream().map(CourseScheduleEndDto::getId).collect(Collectors.toList());
-//            List<TeacherAttendance> teacherAttendances = teacherAttendanceDao.findTeacherIdByCourseSchedule(courseScheduleIds);
-//            Map<Long, List<TeacherAttendance>> courseTeacherAttendanceMap = teacherAttendances.stream().collect(Collectors.groupingBy(TeacherAttendance::getCourseScheduleId));
-//            Map<Integer, Long> studentNumCourseMap = MapUtil.convertIntegerMap(studentAttendanceDao.countStudentAttendancesByCourses(courseScheduleIds));
-            Map<Long, String> studentIdMap = MapUtil.convertIntegerMap(courseScheduleStudentPaymentDao.getStudentIdMap(courseScheduleIds));
-            List<Integer> teacherIds=results.stream().filter(t->Objects.nonNull(t.getActualTeacherId())).map(CourseSchedule::getActualTeacherId).collect(Collectors.toList());
+            //Map<Long, String> studentIdMap = MapUtil.convertIntegerMap(courseScheduleStudentPaymentDao.getStudentIdMap(courseScheduleIds));
+            //List<Integer> teacherIds=results.stream().filter(t->Objects.nonNull(t.getActualTeacherId())).map(CourseSchedule::getActualTeacherId).collect(Collectors.toList());
 
-            List<Map<Integer, String>> nameIdMaps = teacherDao.queryNameByIdList(teacherIds);
-            Map<Integer, String> nameIdMap=MapUtil.convertIntegerMap(nameIdMaps);
+            //List<Map<Integer, String>> nameIdMaps = teacherDao.queryNameByIdList(teacherIds);
+            //Map<Integer, String> nameIdMap=MapUtil.convertIntegerMap(nameIdMaps);
 
-			List<Map<Long, String>> coursesSettlementTimeMaps = courseScheduleTeacherSalaryDao.getCoursesSettlementTime(courseScheduleIds);
-			Map<Long, String> coursesSettlementTimeMap = MapUtil.convertIntegerMap(coursesSettlementTimeMaps);
+			//List<Map<Long, String>> coursesSettlementTimeMaps = courseScheduleTeacherSalaryDao.getCoursesSettlementTime(courseScheduleIds);
+			//Map<Long, String> coursesSettlementTimeMap = MapUtil.convertIntegerMap(coursesSettlementTimeMaps);
 
-			List<Long> practiceIds = results.stream().filter(e -> PRACTICE.equals(e.getGroupType())).map(e -> Long.valueOf(e.getMusicGroupId())).collect(Collectors.toList());
+			/*List<Long> practiceIds = results.stream().filter(e -> PRACTICE.equals(e.getGroupType())).map(e -> Long.valueOf(e.getMusicGroupId())).collect(Collectors.toList());
 			Map<Long, PracticeGroup> idPracticeMap = new HashMap<>();
 			if(!CollectionUtils.isEmpty(practiceIds)){
 				List<PracticeGroup> practiceGroups = practiceGroupDao.getWithIds(practiceIds);
                 idPracticeMap = practiceGroups.stream().collect(Collectors.toMap(PracticeGroup::getId, e->e));
-			}
+			}*/
 
 			List<Map<Long, Long>> courseMergeCourseNum = courseScheduleDao.countCourseMergeCourseNum(courseScheduleIds);
 			Map<Long, Long> courseMergeCourseNumMap = new HashMap<>();
@@ -4359,35 +4356,17 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 				courseMergeCourseNumMap = MapUtil.convertIntegerMap(courseMergeCourseNum);
 			}
 
-//			Set<Long> mergeCourseIds = results.stream().filter(e -> Objects.nonNull(e.getNewCourseId())).map(e -> e.getNewCourseId()).collect(Collectors.toSet());
 
 			//获取班级声部名称
             List<Map<Integer, String>> classGroupSubjectNameMaps = classGroupDao.findClassGroupSubjectNameMaps(courseScheduleIds);
             Map<Integer, String> classGroupSubjectNameMap = MapUtil.convertIntegerMap(classGroupSubjectNameMaps);
 			for (CourseScheduleEndDto result : results) {
 				result.setTeacher(null);
-				result.setTeacherName(nameIdMap.get(result.getActualTeacherId()));
+				//result.setTeacherName(nameIdMap.get(result.getActualTeacherId()));
 				result.setSubjectName(classGroupSubjectNameMap.get(result.getId()));
-				result.setStudentId(studentIdMap.get(result.getId()));
-				result.setPracticeGroup(idPracticeMap.get(Long.valueOf(result.getMusicGroupId())));
-//				List<TeacherAttendance> courseTeacherAttendances = courseTeacherAttendanceMap.get(result.getId());
-				/*if(!CollectionUtils.isEmpty(courseTeacherAttendances)){
-					TeacherAttendance teacherAttendance=courseTeacherAttendances.get(0);
-					result.setIsSignIn(Objects.isNull(teacherAttendance.getSignInStatus())?3:teacherAttendance.getSignInStatus().getCode());
-					result.setIsSignOut(Objects.isNull(teacherAttendance.getSignOutStatus())?3:teacherAttendance.getSignOutStatus().getCode());
-					result.setSignInStatusEnum(result.getIsSignIn() == 1?NORMAL:result.getIsSignIn() == 0?UNUSUAL:NO);
-					result.setSignOutStatusEnum(result.getIsSignOut() == 1?SignOutStatusEnum.NORMAL:result.getIsSignOut() == 0? SignOutStatusEnum.UNUSUAL: SignOutStatusEnum.NO);
-					result.setSignInTime(teacherAttendance.getSignInTime());
-					result.setSignOutTime(teacherAttendance.getSignOutTime());
-					result.setRemark(teacherAttendance.getRemark());
-				}*/
-//				Long studentNum = studentNumCourseMap.get(result.getId());
-//				if (Objects.nonNull(studentNum)) {
-//					result.setIsCallNames(studentNum > 0 ? YesOrNoEnum.YES : YesOrNoEnum.NO);
-//				} else {
-//					result.setIsCallNames(YesOrNoEnum.NO);
-//				}
-				result.setSettlementTime(coursesSettlementTimeMap.get(result.getId()));
+				//result.setStudentId(studentIdMap.get(result.getId()));
+				//result.setPracticeGroup(idPracticeMap.get(Long.valueOf(result.getMusicGroupId())));
+				//result.setSettlementTime(coursesSettlementTimeMap.get(result.getId()));
 				result.setIsSettlement(Objects.isNull(result.getSettlementTime())?0:1);
 				if(courseMergeCourseNumMap.containsKey(result.getId())){
 					result.setBeMerged(courseMergeCourseNumMap.get(result.getId())>0?true:false);

+ 133 - 45
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleTeacherSalaryServiceImpl.java

@@ -221,27 +221,57 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
             List<TeacherAttendance> courseTeacherAttendances = teacherCourseAttendanceMap.get(org.apache.commons.lang3.StringUtils.joinWith(":", courseScheduleTeacherSalary.getCourseScheduleId(), courseScheduleTeacherSalary.getUserId()));
 
             TeacherAttendance teacherAttendance = courseTeacherAttendances.get(0);
-            if(CollectionUtils.isEmpty(courseTeacherAttendances)||Objects.isNull(teacherAttendance.getSignInStatus())||YesOrNoEnum.NO.equals(teacherAttendance.getSignInStatus())){
-                //未签到或异常签到扣除一半课酬
-                deductCost = deductCost.add(courseScheduleTeacherSalary.getExpectSalary().divide(new BigDecimal(2)));
-                deductReasons.add("未签到或异常签到扣除一半课酬");
+            if(CollectionUtils.isEmpty(courseTeacherAttendances)||Objects.isNull(teacherAttendance.getSignInStatus())){
+                //未签到扣除全部课酬
+                deductCost = deductCost.add(courseScheduleTeacherSalary.getExpectSalary());
+                deductReasons.add("未签到扣除全部课酬");
+            }else if(YesOrNoEnum.NO.equals(teacherAttendance.getSignInStatus())){
+                //异常签到
+                int signCourseTimeBetweenSeconds = DateUtil.secondsBetween(teacherAttendance.getSignInTime(), courseScheduleTeacherSalary.getCourseSchedule().getStartClassTime());
+                int signCourseTimeBetween = signCourseTimeBetweenSeconds/60;
+                if(signCourseTimeBetween<1&&signCourseTimeBetween>-3){
+                    //课程开始前1分钟至开始后3分钟进入教室
+                    deductCost = deductCost.add(new BigDecimal(50));
+                    deductReasons.add("课程开始前1分钟至开始后3分钟进入教室扣除50元");
+                }else if(signCourseTimeBetween<-3){
+                    //课程开始后3分钟后进入教室
+                    deductCost = deductCost.add(courseScheduleTeacherSalary.getExpectSalary());
+                    deductReasons.add("课程开始后3分钟进入教室扣除全部课酬");
+                }
             }
 
-            if(CollectionUtils.isEmpty(courseTeacherAttendances)||Objects.isNull(teacherAttendance.getSignOutStatus())||YesOrNoEnum.NO.equals(teacherAttendance.getSignOutStatus())){
-                //未签退或异常签退扣除一半课酬
+            if(CollectionUtils.isEmpty(courseTeacherAttendances)||Objects.isNull(teacherAttendance.getSignOutStatus())){
+                //未签退扣除一半课酬
                 deductCost = deductCost.add(courseScheduleTeacherSalary.getExpectSalary().divide(new BigDecimal(2)));
-                deductReasons.add("未签退或异常签退扣除一半课酬");
+                deductReasons.add("未签退扣除一半课酬");
+            }else if(YesOrNoEnum.NO.equals(teacherAttendance.getSignOutStatus())){
+                //异常签退
+                int signCourseTimeBetweenSeconds = DateUtil.secondsBetween(teacherAttendance.getSignOutTime(), courseScheduleTeacherSalary.getCourseSchedule().getStartClassTime());
+                int signCourseTimeBetween = signCourseTimeBetweenSeconds/60;
+
+                int signOutCourseTimeBetweenSeconds = DateUtil.secondsBetween(teacherAttendance.getSignOutTime(), courseScheduleTeacherSalary.getCourseSchedule().getEndClassTime());
+                int signOutCourseTimeBetween = signOutCourseTimeBetweenSeconds/60;
+
+                if(signCourseTimeBetween<20&&signCourseTimeBetween>-3){
+                    //课程开始前20分钟至开始后3分钟退出教室
+                    deductCost = deductCost.add(courseScheduleTeacherSalary.getExpectSalary());
+                    deductReasons.add("课程开始前20分钟至开始后3分钟退出教室扣除全部课酬");
+                }else if(signOutCourseTimeBetween<=3&&signOutCourseTimeBetween>0){
+                    //课程结束前3分钟后至课程结束前退出教室
+                    deductCost = deductCost.add(new BigDecimal(50));
+                    deductReasons.add("课程结束前3分钟后至课程结束前退出教室扣除50元");
+                }
             }
 
             BigDecimal finalSalary = courseScheduleTeacherSalary.getExpectSalary().subtract(deductCost).setScale(BigDecimal.ZERO.intValue(), BigDecimal.ROUND_HALF_UP);
 
             if(BigDecimal.ZERO.compareTo(deductCost)<0){
                 deductReasons.add("扣除总费用:" + deductCost);
+                courseScheduleTeacherSalary.setDeductionReason(StringUtils.join(deductReasons, ";"));
             }
 
             courseScheduleTeacherSalary.setActualSalary(finalSalary);
             courseScheduleTeacherSalary.setSettlementTime(now);
-            courseScheduleTeacherSalary.setDeductionReason(StringUtils.join(deductReasons, ";"));
             courseScheduleTeacherSalaryDao.update(courseScheduleTeacherSalary);
         });
     }
@@ -304,26 +334,68 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
             List<TeacherAttendance> courseTeacherAttendances = teacherCourseAttendanceMap.get(org.apache.commons.lang3.StringUtils.joinWith(":", courseScheduleTeacherSalary.getCourseScheduleId(), courseScheduleTeacherSalary.getUserId()));
 
             TeacherAttendance teacherAttendance = courseTeacherAttendances.get(0);
-            if(CollectionUtils.isEmpty(courseTeacherAttendances)||Objects.isNull(teacherAttendance.getSignInStatus())||YesOrNoEnum.NO.equals(teacherAttendance.getSignInStatus())){
-                //未签到或异常签到扣除一半课酬
-                deductCost = deductCost.add(courseScheduleTeacherSalary.getExpectSalary().divide(new BigDecimal(2)));
-                deductReasons.add("未签到或异常签到扣除一半课酬");
+            if(CollectionUtils.isEmpty(courseTeacherAttendances)||Objects.isNull(teacherAttendance.getSignInStatus())){
+                //未签到扣除全部课酬
+                deductCost = deductCost.add(courseScheduleTeacherSalary.getExpectSalary());
+                deductReasons.add("未签到扣除全部课酬");
+            }else if(YesOrNoEnum.NO.equals(teacherAttendance.getSignInStatus())){
+                //异常签到
+                int signCourseTimeBetweenSeconds = DateUtil.secondsBetween(teacherAttendance.getSignInTime(), courseScheduleTeacherSalary.getCourseSchedule().getStartClassTime());
+                int signCourseTimeBetween = signCourseTimeBetweenSeconds/60;
+                if(signCourseTimeBetween<1&&signCourseTimeBetween>-3){
+                    //课程开始前1分钟至开始后3分钟进入教室
+                    deductCost = deductCost.add(new BigDecimal(50));
+                    deductReasons.add("课程开始前1分钟至开始后3分钟进入教室扣除50元");
+                }else if(signCourseTimeBetween<-3){
+                    //课程开始后3分钟后进入教室
+                    deductCost = deductCost.add(courseScheduleTeacherSalary.getExpectSalary());
+                    deductReasons.add("课程开始后3分钟进入教室扣除全部课酬");
+                }
+
+                if(TeachModeEnum.OFFLINE.equals(courseScheduleTeacherSalary.getCourseSchedule().getTeachMode())){
+                    deductCost = courseScheduleTeacherSalary.getExpectSalary();
+                    deductReasons.clear();
+                    deductReasons.add("点名时经纬度不在范围内扣除全部课酬");
+                }
             }
 
-            if(CollectionUtils.isEmpty(courseTeacherAttendances)||Objects.isNull(teacherAttendance.getSignOutStatus())||YesOrNoEnum.NO.equals(teacherAttendance.getSignOutStatus())){
-                //未签退或异常签退扣除一半课酬
+            if(CollectionUtils.isEmpty(courseTeacherAttendances)||Objects.isNull(teacherAttendance.getSignOutStatus())){
+                //未签退扣除一半课酬
                 deductCost = deductCost.add(courseScheduleTeacherSalary.getExpectSalary().divide(new BigDecimal(2)));
-                deductReasons.add("未签退或异常签退扣除一半课酬");
+                deductReasons.add("未签退扣除一半课酬");
+            }else if(YesOrNoEnum.NO.equals(teacherAttendance.getSignOutStatus())){
+                //异常签退
+                int signCourseTimeBetweenSeconds = DateUtil.secondsBetween(teacherAttendance.getSignOutTime(), courseScheduleTeacherSalary.getCourseSchedule().getStartClassTime());
+                int signCourseTimeBetween = signCourseTimeBetweenSeconds/60;
+
+                int signOutCourseTimeBetweenSeconds = DateUtil.secondsBetween(teacherAttendance.getSignOutTime(), courseScheduleTeacherSalary.getCourseSchedule().getEndClassTime());
+                int signOutCourseTimeBetween = signOutCourseTimeBetweenSeconds/60;
+
+                if(signCourseTimeBetween<20&&signCourseTimeBetween>-3){
+                    //课程开始前20分钟至开始后3分钟退出教室
+                    deductCost = deductCost.add(courseScheduleTeacherSalary.getExpectSalary());
+                    deductReasons.add("课程开始前20分钟至开始后3分钟退出教室扣除全部课酬");
+                }else if(signOutCourseTimeBetween<=3&&signOutCourseTimeBetween>0){
+                    //课程结束前3分钟后至课程结束前退出教室
+                    deductCost = deductCost.add(new BigDecimal(50));
+                    deductReasons.add("课程结束前3分钟后至课程结束前退出教室扣除50元");
+                }
+
+                if(TeachModeEnum.OFFLINE.equals(courseScheduleTeacherSalary.getCourseSchedule().getTeachMode())){
+                    deductCost = courseScheduleTeacherSalary.getExpectSalary();
+                    deductReasons.clear();
+                    deductReasons.add("点名时经纬度不在范围内扣除全部课酬");
+                }
             }
 
             if(BigDecimal.ZERO.compareTo(deductCost)<0){
                 deductReasons.add("扣除总费用:" + deductCost);
+                courseScheduleTeacherSalary.setDeductionReason(StringUtils.join(deductReasons, ";"));
             }
 
             BigDecimal finalSalary = courseScheduleTeacherSalary.getExpectSalary().subtract(deductCost).setScale(BigDecimal.ZERO.intValue(), BigDecimal.ROUND_HALF_UP);
 
             courseScheduleTeacherSalary.setActualSalary(finalSalary);
-            courseScheduleTeacherSalary.setDeductionReason(StringUtils.join(deductReasons, ";"));
             courseScheduleTeacherSalary.setSettlementTime(now);
             courseScheduleTeacherSalaryDao.update(courseScheduleTeacherSalary);
         });
@@ -375,7 +447,10 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
                         || CourseSchedule.CourseScheduleType.HIGH.equals(c.getType()))
                 .map(CourseSchedule::getId).collect(Collectors.toList());
 
-        List<StudentAttendance> studentAttendances = studentAttendanceDao.findByCourseIds(needStudentAttendanceCourseScheduleIds);
+        List<StudentAttendance> studentAttendances = null;
+        if(!CollectionUtils.isEmpty(needStudentAttendanceCourseScheduleIds)){
+            studentAttendances = studentAttendanceDao.findByCourseIds(needStudentAttendanceCourseScheduleIds);
+        }
         Map<Long, Long> courseNormalStudentsMap = new HashMap<>();
         if(!CollectionUtils.isEmpty(studentAttendances)){
             courseNormalStudentsMap =studentAttendances.stream()
@@ -489,52 +564,65 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
                 }
             }
 
-            if(CollectionUtils.isEmpty(courseTeacherAttendances)||!isCallName){
-                //无签到记录或者未点名扣除全部课酬
+            TeacherAttendance teacherAttendance = null;
+            if(!CollectionUtils.isEmpty(courseTeacherAttendances)){
+                teacherAttendance = courseTeacherAttendances.get(0);
+            }
+
+            if(Objects.isNull(teacherAttendance)||Objects.isNull(teacherAttendance.getSignInStatus())){
+                //无签到记录扣除全部课酬
                 deductCost = deductCost.add(teacherSalary);
-                deductReasons.add("无签到记录扣除全部课酬");
-            }else{
-                TeacherAttendance teacherAttendance = courseTeacherAttendances.get(0);
-                if(Objects.isNull(teacherAttendance.getSignInStatus())){
-                    //未签到扣除全部课酬
+                deductReasons.add("未签到扣除全部课酬");
+            }else if(YesOrNoEnum.NO.equals(teacherAttendance.getSignInStatus())){
+                int signCourseTimeBetweenSeconds = DateUtil.secondsBetween(teacherAttendance.getSignInTime(), courseSchedule.getStartClassTime());
+                int signCourseTimeBetween = signCourseTimeBetweenSeconds/60;
+                if(signCourseTimeBetween>=0&&signCourseTimeBetween<20){
+                    //未提前20分钟打卡扣除50元
+                    deductCost = deductCost.add(new BigDecimal(50));
+                    deductReasons.add("未提前20分钟打卡扣除50元");
+                }else if(signCourseTimeBetween<0&&signCourseTimeBetween>-30){
+                    //迟到30分钟内扣除一半课酬
+                    deductCost = deductCost.add(teacherSalary.divide(new BigDecimal(2)));
+                    deductReasons.add("迟到30分钟内扣除一半课酬");
+                }else if(signCourseTimeBetween<=-30){
+                    //迟到30分钟及以上扣除全部课酬
                     deductCost = deductCost.add(teacherSalary);
-                    deductReasons.add("未签到扣除全部课酬");
-                }else if(YesOrNoEnum.NO.equals(teacherAttendance.getSignInStatus())){
-                    int signCourseTimeBetweenSeconds = DateUtil.secondsBetween(teacherAttendance.getSignInTime(), courseSchedule.getStartClassTime());
-                    int signCourseTimeBetween = signCourseTimeBetweenSeconds/60;
-                    if(signCourseTimeBetween>=0&&signCourseTimeBetween<20){
-                        //未提前20分钟打卡扣除50元
-                        deductCost = deductCost.add(new BigDecimal(50));
-                        deductReasons.add("未提前20分钟打卡扣除50元");
-                    }else if(signCourseTimeBetween<0&&signCourseTimeBetween>-30){
-                        //迟到30分钟内扣除一半课酬
-                        deductCost = deductCost.add(teacherSalary.divide(new BigDecimal(2)));
-                        deductReasons.add("迟到30分钟内扣除一半课酬");
-                    }else if(signCourseTimeBetween<=-30){
-                        //迟到30分钟及以上扣除全部课酬
-                        deductCost = deductCost.add(teacherSalary);
-                        deductReasons.add("迟到30分钟及以上扣除全部课酬");
-                    }
+                    deductReasons.add("迟到30分钟及以上扣除全部课酬");
+                }else{
+                    //其他,例如签到经纬度不在范围内
+                    deductCost = deductCost.add(new BigDecimal(50));
+                    deductReasons.add("经纬度不在范围内扣除50元");
                 }
+            }
 
-                if((Objects.isNull(teacherAttendance.getSignOutStatus())||YesOrNoEnum.NO.equals(teacherAttendance.getSignOutStatus()))&&isCallName){
-                    //异常签退或者未签退,但是正常点名扣除50元课酬
+            if(Objects.isNull(teacherAttendance)||!isCallName||Objects.isNull(teacherAttendance.getSignOutStatus())){
+                //未签退或者未点名扣除全部课酬
+                deductCost = deductCost.add(teacherSalary);
+                deductReasons.add("未签退或者未点名扣除全部课酬");
+            }else if(YesOrNoEnum.NO.equals(teacherAttendance.getSignOutStatus())){
+                int signOutCourseTimeBetweenSeconds = DateUtil.secondsBetween(teacherAttendance.getSignOutTime(), courseSchedule.getSignOutTime());
+                int signOutCourseTimeBetween = signOutCourseTimeBetweenSeconds/60;
+                if(signOutCourseTimeBetween<=3&&signOutCourseTimeBetween>0){
+                    //早退
+                    deductCost = deductCost.add(teacherSalary);
+                    deductReasons.add("早退扣除全部课酬");
+                }if(isCallName){
+                    //异常签退,但是正常点名扣除50元课酬
                     deductCost = deductCost.add(new BigDecimal(50));
                     deductReasons.add("异常签退或者未签退,但是正常点名扣除50元课酬");
                 }
-
             }
 
             BigDecimal finalSalary = teacherSalary.subtract(deductCost).setScale(BigDecimal.ZERO.intValue(), BigDecimal.ROUND_HALF_UP);
 
             if(BigDecimal.ZERO.compareTo(deductCost)<0){
                 deductReasons.add("扣除总费用:" + deductCost);
+                courseScheduleTeacherSalary.setDeductionReason(org.apache.commons.lang3.StringUtils.join(deductReasons, ";"));
             }
 
             //更新教师结算信息
             courseScheduleTeacherSalary.setActualSalary(finalSalary.compareTo(BigDecimal.ZERO)<0?BigDecimal.ZERO:finalSalary);
             courseScheduleTeacherSalary.setSettlementTime(now);
-            courseScheduleTeacherSalary.setDeductionReason(org.apache.commons.lang3.StringUtils.join(deductReasons, ";"));
             courseScheduleTeacherSalaryDao.update(courseScheduleTeacherSalary);
         }
     }

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

@@ -631,6 +631,7 @@ public class TeacherAttendanceServiceImpl extends BaseServiceImpl<Long, TeacherA
 		result.setType(courseSchedule.getType());
 		result.setTeacherName(teacherDao.queryNameById(courseSchedule.getActualTeacherId()));
 		result.setAttendClassTime(teacherAttendanceDao.getAttendClassTime(courseScheduleId));
+		result.setSchool(schoolDao.get(courseSchedule.getSchoolId()));
 		if(teacherAttendance != null){
 			result.setIsSignIn(Objects.isNull(teacherAttendance.getSignInStatus())?3:teacherAttendance.getSignInStatus().getCode());
 			result.setIsSignOut(Objects.isNull(teacherAttendance.getSignOutStatus())?3:teacherAttendance.getSignOutStatus().getCode());

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

@@ -29,6 +29,7 @@
         <result column="student_num_" property="studentNum"/>
         <result column="leave_student_num_" property="leaveStudentNum"/>
         <result column="schoole_id_" property="schoolId"/>
+        <result column="is_lock_" property="isLock"/>
         <result column="schoole_name_" property="schoolName"/>
         <result column="class_group_name_" property="classGroupName"/>
         <result column="class_group_type_" property="classGroupType"/>
@@ -2359,6 +2360,7 @@
             cs.type_,
             cs.schoole_id_,
             cs.create_time_,
+            cs.is_lock_,
             s.name_ schoole_name_,
             o.name_ organ_name_,
             CASE WHEN COUNT(sa.id_) > 0 THEN 1 ELSE 0 END isCallNames,

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

@@ -266,8 +266,11 @@
 	</select>
     <select id="findSomeDayAgoTeacherCourseSalaryNoSettlement" resultMap="CourseScheduleTeacherSalary">
 		SELECT
-		cs.class_date_,
-		csts.*
+			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.teach_mode_,
+			csts.*
 		FROM
 		course_schedule_teacher_salary csts
 		LEFT JOIN course_schedule cs ON cs.id_ = csts.course_schedule_id_
@@ -295,6 +298,8 @@
     <select id="findTeacherCourseSalaryNoSettlement" resultMap="CourseScheduleTeacherSalary">
 		SELECT
 		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_,
 		csts.*
 		FROM
 		course_schedule_teacher_salary csts

+ 1 - 1
mec-im/src/main/java/com/ym/config/ResourceServerConfig.java

@@ -12,6 +12,6 @@ public class ResourceServerConfig extends ResourceServerConfigurerAdapter {
     public void configure(HttpSecurity http) throws Exception {
         http.authorizeRequests().antMatchers("/v2/api-docs","/user/register",
                 "/group/join","/group/create","/room/leave","/room/statusSync",
-                "/room/statusImMsg","/group/batchDismiss","/private/send","/group/send").permitAll().anyRequest().authenticated().and().csrf().disable();
+                "/room/statusImMsg","/group/batchDismiss","/private/send","/group/send","/room/statusImMsg").permitAll().anyRequest().authenticated().and().csrf().disable();
     }
 }

+ 6 - 0
mec-im/src/main/java/com/ym/controller/RoomController.java

@@ -33,6 +33,12 @@ public class RoomController{
         return new BaseResponse<>();
     }
 
+    @RequestMapping(value = "/statusImMsg", method = RequestMethod.POST)
+    public Object statusImMsg(@RequestBody String body){
+        log.info("statusImMsg body{}:",body);
+        return new BaseResponse<>();
+    }
+
     @RequestMapping(value = "/leave", method = RequestMethod.POST)
     public Object leaveRoom(@RequestBody RoomStatusNotify roomStatusNotify) throws Exception {
         //成员退出