zouxuan 3 년 전
부모
커밋
0c191d9ba0

+ 4 - 2
mec-biz/src/main/java/com/ym/mec/biz/dal/enums/DeductReasonEnum.java

@@ -9,12 +9,14 @@ import com.ym.mec.common.enums.BaseEnum;
 public enum DeductReasonEnum implements BaseEnum<String,DeductReasonEnum> {
     SIGN_IN_TIME_ERR("SIGN_IN_TIME_ERR", "签到时间异常", ""),
     SIGN_OUT_TIME_ERR("SIGN_OUT_TIME_ERR", "签退时间异常", ""),
-    GPS_ERR("GPS_ERR", "位置异常", ""),
+    GPS_ERR_IN("GPS_ERR", "位置异常", ""),
+    GPS_ERR_OUT("GPS_ERR", "位置异常", ""),
     NOT_SETTLEMENT("NOT_SETTLEMENT", "不结算课酬", "特殊老师不结算课酬"),
-    TRAIL("TRAIL", "试用期扣减", "试用期老师课酬按正式老师的80%计算"),
+    TRAIL("TRAIL", "试用期扣减", "试用期老师课酬按系统配置的折扣计算"),
 
     //收入
     SALARY("SALARY", "基本课酬", "课时应发课酬"),
+    SUBSIDY("SUBSIDY", "课程补贴", "课程补贴"),
     COURSE_SUBSIDY("COURSE_SUBSIDY", "课酬调剂", "课时课酬调剂金额");
 
     private String code;

+ 2 - 2
mec-biz/src/main/java/com/ym/mec/biz/service/CourseScheduleTeacherSalaryService.java

@@ -235,7 +235,7 @@ public interface CourseScheduleTeacherSalaryService extends BaseService<Long, Co
      * @return void
      */
     void calMusicCourseTeacherActualSalary(CourseSchedule courseSchedule, CourseScheduleTeacherSalary courseScheduleTeacherSalary,
-                                           List<TeacherAttendance> teacherAttendances, School school, Teacher teacher, double attendanceRange, Boolean updated);
+                                           List<TeacherAttendance> teacherAttendances, School school, Teacher teacher, String attendanceRange, Boolean updated);
 
     /**
      * @describe 计算VIP课教师实际课酬
@@ -246,7 +246,7 @@ public interface CourseScheduleTeacherSalaryService extends BaseService<Long, Co
      * @return void
      */
     void calVipCourseTeacherActualSalary(CourseSchedule courseSchedule, CourseScheduleTeacherSalary courseScheduleTeacherSalary,
-                                         List<TeacherAttendance> teacherAttendances, School school, Teacher teacher, double attendanceRange, Boolean updated);
+                                         List<TeacherAttendance> teacherAttendances, School school, Teacher teacher, String attendanceRange, Boolean updated);
 
     /**
      * @describe 计算网管课教师实际课酬

+ 5 - 8
mec-biz/src/main/java/com/ym/mec/biz/service/SysConfigService.java

@@ -63,8 +63,12 @@ public interface SysConfigService extends BaseService<Long, SysConfig> {
     String OFFLINE_NO_SIGN_OUT_CUT_SALARY = "offline_no_sign_out_cut_salary";
     //线下课老师异常签退扣减课酬单位(1、元,2、百分比)
     String OFFLINE_NO_SIGN_OUT_CUT_SALARY_UNIT = "offline_no_sign_out_cut_salary_unit";
+    //vip课开课前可点名时间段,开课前{}分钟
+    String ENABLE_STUDENT_ATTENDANCE_BEFOR_COURSE_START_TIME_RANGE_VIP = "enable_student_attendance_befor_course_start_time_range_vip";
     //vip课程可更新学生签到状态时间限制,课程结束后{}分钟
     String ENABLE_STUDENT_ATTENDANCE_TIME_RANGE_VIP = "enable_student_attendance_time_range_vip";
+    //如果没有签退,{}分钟后自动发送推送信息
+    String SIGN_OUT_MESSAGE_PUSH_MINUTE = "sign_out_message_push_minute";
 
     //线上连堂课间隔时间
     String ONLINE_CONTINUE_COURSE_TIME = "online_continue_course_time";
@@ -209,11 +213,6 @@ public interface SysConfigService extends BaseService<Long, SysConfig> {
      */
     public static final String HIGH_GRADIENT_SETTLEMENT_RULE = "high_gradient_settlement_rule";
 
-    /**
-     * 如果没有签退,{}分钟后自动发送推送信息
-     */
-    public static final String SIGN_OUT_MESSAGE_PUSH_MINUTE = "sign_out_message_push_minute";
-
     String USER_DEFAULT_HEAD_URL = "user_default_head_url";
     String STUDENT_APPLY_URL = "student_apply_url";
     String SERVER_PHONE = "server_phone";
@@ -230,12 +229,10 @@ public interface SysConfigService extends BaseService<Long, SysConfig> {
     String ENABLE_SIGN_OUT_TIME_RANGE = "enable_sign_out_time_range";
 
     /**
-     * 可更新学生签到状态时间限制,课程结束后{}分钟
+     * 可更新学生签到状态时间限制,课程结束后{}分钟(和前端核实过,乐团的已弃用)
      */
     String ENABLE_STUDENT_ATTENDANCE_TIME_RANGE = "enable_student_attendance_time_range";
 
-    String ENABLE_STUDENT_ATTENDANCE_BEFOR_COURSE_START_TIME_RANGE_VIP = "enable_student_attendance_befor_course_start_time_range_vip";
-
     /**
      * @describe 陪练课课酬
      */

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

@@ -70,7 +70,7 @@ public interface TeacherAttendanceService extends BaseService<Long, TeacherAtten
 	 * 推送未签退消息提醒
 	 * @return
 	 */
-	boolean pushNoSignOutMessage();
+	boolean pushNoSignOutMessage(Integer tenantId);
 
 	/**
 	 * @describe 根据日期获取部门下异常签到的课程记录

+ 4 - 5
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleServiceImpl.java

@@ -217,10 +217,9 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 
 		currentCourseDetail.setCurrentClassTimes(courseScheduleDao.countClassGroupOverCourseNum(currentCourseDetail.getClassId()));
         SysConfig sysConfig = sysConfigService.findByParamName(SysConfigService.ENABLE_STUDENT_ATTENDANCE_TIME_RANGE);
-        sysTenantConfigService.getTenantConfigValue(SysConfigService.ENABLE_STUDENT_ATTENDANCE_TIME_RANGE,user.getTenantId());
-        SysConfig sysConfigVip = sysConfigService.findByParamName(SysConfigService.ENABLE_STUDENT_ATTENDANCE_TIME_RANGE_VIP);
+        String sysConfigVip = sysTenantConfigService.getTenantConfigValue(SysConfigService.ENABLE_STUDENT_ATTENDANCE_TIME_RANGE_VIP,user.getTenantId());
         currentCourseDetail.setEnableStudentAttendanceTimeRange(sysConfig.getParanValue(Integer.class));
-        currentCourseDetail.setEnableStudentAttendanceTimeRangeVip(sysConfigVip.getParanValue(Integer.class));
+        currentCourseDetail.setEnableStudentAttendanceTimeRangeVip(StringUtils.isEmpty(sysConfigVip)?0:Integer.parseInt(sysConfigVip));
         int studentNum = studentAttendanceDao.countByCourseSchedule(courseID);
         if (Objects.nonNull(studentNum)) {
             currentCourseDetail.setStudentAttendanceIsFirstTime(studentNum > 0 ? 0 : 1);
@@ -1051,7 +1050,7 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
             throw new BizException("用户机构信息异常");
         }
         Date now = new Date();
-        SysConfig studentAttendanceAfterTimeConfig = sysConfigService.findByParamName(SysConfigService.ENABLE_STUDENT_ATTENDANCE_BEFOR_COURSE_START_TIME_RANGE_VIP);
+		String configValue = sysTenantConfigService.getTenantConfigValue(SysConfigService.ENABLE_STUDENT_ATTENDANCE_BEFOR_COURSE_START_TIME_RANGE_VIP, user.getTenantId());
 		SysConfig courseBeforeBufferTime = sysConfigService.findByParamName(SysConfigService.COURSE_BEFORE_BUFFER_TIME);
 		SysConfig courseAfterBufferTime = sysConfigService.findByParamName(SysConfigService.COURSE_AFTER_BUFFER_TIME);
         Map<String, Object> result = new HashMap<>(3);
@@ -1063,7 +1062,7 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 		}
 		result.put("advanceLeaveHours", advanceLeaveHours);
         result.put("earliestTimeForLeave", Integer.parseInt(sysConfigDao.findConfigValue(SysConfigService.EARLIEST_TIME_FOR_LEAVE)));
-        result.put("joinRoomBeforeTime",studentAttendanceAfterTimeConfig.getParanValue(Integer.class));
+        result.put("joinRoomBeforeTime",StringUtils.isEmpty(configValue)?0:Integer.parseInt(configValue));
 		result.put("courseBeforeBufferTime", courseBeforeBufferTime.getParanValue(Integer.class));
 		result.put("courseAfterBufferTime", courseAfterBufferTime.getParanValue(Integer.class));
 //		List<Integer> quitClassGroupIds=classGroupStudentMapperDao.findClassGroupIdByUserAndCourseDateAndStatus(user.getId(),classDate, ClassGroupStudentStatusEnum.QUIT.getCode());

+ 129 - 186
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleTeacherSalaryServiceImpl.java

@@ -636,7 +636,11 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
         return getCutAmount(cutSalary,cutSalaryUnit,salary);
     }
 
-    public Boolean getSignRange(String schoolLongitudeLatitude,String longitudeLatitude,double attendanceRange){
+    public Boolean getSignRange(String schoolLongitudeLatitude,String longitudeLatitude,String gpsRange){
+        if(StringUtils.isEmpty(gpsRange)){
+            return true;
+        }
+        double attendanceRange = Double.parseDouble(gpsRange);
         Boolean signRange = false;
         if(Objects.nonNull(schoolLongitudeLatitude) && StringUtils.isNotBlank(longitudeLatitude)){
             double signInDistance = MapUtil.distance(longitudeLatitude,schoolLongitudeLatitude);
@@ -689,11 +693,7 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
                 .collect(Collectors.toMap(CourseSchedule::getId, courseSchedule -> courseSchedule));
 
         //定位范围
-        String gpsRange = sysTenantConfigService.getTenantConfigValue(SysConfigService.ATTENDANCE_RANGE,tenantId);
-        double attendanceRange = 0;
-        if(StringUtils.isNotEmpty(gpsRange)){
-            attendanceRange = Double.valueOf(gpsRange);
-        }
+        String attendanceRange = sysTenantConfigService.getTenantConfigValue(SysConfigService.ATTENDANCE_RANGE,tenantId);
           //试用期课酬规则
         String configValue2 = sysTenantConfigService.getTenantConfigValue(SysConfigService.PROBATION_TEACHER_SALARY,tenantId);
         Integer probationTeacherSalary = 100;
@@ -1596,7 +1596,7 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
 
     @Override
     public void calMusicCourseTeacherActualSalary(CourseSchedule courseSchedule, CourseScheduleTeacherSalary courseScheduleTeacherSalary,
-                                                  List<TeacherAttendance> teacherAttendances, School school, Teacher teacher, double attendanceRange, Boolean updated) {
+                                                  List<TeacherAttendance> teacherAttendances, School school, Teacher teacher, String attendanceRange, Boolean updated) {
 
 
         //教师课酬
@@ -1611,16 +1611,20 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
             return;
         }
 
-        List<String> deductReasons = new ArrayList<>();
+        List<TeacherSalaryDeductReasonDto> deductReasons = new ArrayList<>();
 
+        BigDecimal teacherSalary = courseScheduleTeacherSalary.getExpectSalary();
         if(Objects.isNull(courseScheduleTeacherSalary.getSubsidy())){
             courseScheduleTeacherSalary.setSubsidy(BigDecimal.ZERO);
         }
-        BigDecimal teacherSalary = courseScheduleTeacherSalary.getExpectSalary();
         if(BigDecimal.ZERO.compareTo(courseScheduleTeacherSalary.getSubsidy()) != 0){
             teacherSalary = teacherSalary.add(courseScheduleTeacherSalary.getSubsidy());
-            deductReasons.add("课程补贴:" + courseScheduleTeacherSalary.getSubsidy());
+            deductReasons.add(new TeacherSalaryDeductReasonDto(DeductReasonEnum.SUBSIDY, courseScheduleTeacherSalary.getSubsidy()));
+        }
+        if(BigDecimal.ZERO.compareTo(teacherSalary) > 0){
+            teacherSalary = new BigDecimal(0);
         }
+
         Integer tenantId = TenantContextHolder.getTenantId();
 
         //试用期课酬规则
@@ -1630,9 +1634,10 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
             probationTeacherSalary = Integer.parseInt(configValue2);
         }
         //如果上课日期在试用期内按80%结算
+        BigDecimal expectTeacherSalary = teacherSalary;
         if(isTrail(teacher,courseSchedule.getClassDate())){
-            teacherSalary = teacherSalary.multiply(new BigDecimal(probationTeacherSalary/100));
-            deductReasons.add("未转正");
+            teacherSalary = teacherSalary.multiply(new BigDecimal(probationTeacherSalary / 100));
+            deductReasons.add(new TeacherSalaryDeductReasonDto(DeductReasonEnum.TRAIL, expectTeacherSalary.subtract(teacherSalary)));
         }
 
         //扣除费用
@@ -1651,7 +1656,7 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
             BigDecimal signInDeductCost = getSignInDeduce(teacherSalary, signInStatus, teachMode,tenantId);
             if(signInDeductCost.compareTo(BigDecimal.ZERO) > 0){
                 deductCost = deductCost.add(signInDeductCost);
-                deductReasons.add("签到状态异常扣除课酬" + signInDeductCost);
+                deductReasons.add(new TeacherSalaryDeductReasonDto(DeductReasonEnum.SIGN_IN_TIME_ERR, teacherSalary.subtract(signInDeductCost)));
             }
         }
         if(teacherAttendance.getSignOutStatus() == null || teacherAttendance.getSignOutStatus() == YesOrNoEnum.NO){
@@ -1659,7 +1664,7 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
             BigDecimal signOutDeductCost = getSignInDeduce(teacherSalary, signOutStatus, teachMode,tenantId);
             if(signOutDeductCost.compareTo(BigDecimal.ZERO) > 0){
                 deductCost = deductCost.add(signOutDeductCost);
-                deductReasons.add("签退状态异常扣除课酬" + signOutDeductCost);
+                deductReasons.add(new TeacherSalaryDeductReasonDto(DeductReasonEnum.SIGN_OUT_TIME_ERR, teacherSalary.subtract(signOutDeductCost)));
             }
         }
 
@@ -1679,7 +1684,7 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
                     String c1 = sysTenantConfigService.getTenantConfigValue(SysConfigService.OFFLINE_SIGN_IN_GPS_ERROR_CUT_SALARY_UNIT, tenantId);
                     BigDecimal signInGpsCutAmount = getCutAmount(c, c1, teacherSalary);
                     if(signInGpsCutAmount.compareTo(BigDecimal.ZERO) > 0){
-                        deductReasons.add("签到经纬度异常扣除" + signInGpsCutAmount);
+                        deductReasons.add(new TeacherSalaryDeductReasonDto(DeductReasonEnum.GPS_ERR_IN, teacherSalary.subtract(signInGpsCutAmount)));
                     }
                 }
                 if(!signOutRange){
@@ -1687,27 +1692,19 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
                     String c1 = sysTenantConfigService.getTenantConfigValue(SysConfigService.OFFLINE_SIGN_OUT_GPS_ERROR_CUT_SALARY_UNIT, tenantId);
                     BigDecimal signOutGpsCutAmount = getCutAmount(c, c1, teacherSalary);
                     if(signOutGpsCutAmount.compareTo(BigDecimal.ZERO) > 0){
-                        deductReasons.add("签退经纬度异常扣除" + signOutGpsCutAmount);
+                        deductReasons.add(new TeacherSalaryDeductReasonDto(DeductReasonEnum.GPS_ERR_OUT, teacherSalary.subtract(signOutGpsCutAmount)));
                     }
                 }
             }
         }
-
         BigDecimal finalSalary = teacherSalary.subtract(deductCost).setScale(BigDecimal.ZERO.intValue(), BigDecimal.ROUND_HALF_UP);
-
-        if(BigDecimal.ZERO.compareTo(deductCost)<0){
-            deductReasons.add("扣除总费用:" + deductCost);
-        }
-        if(!CollectionUtils.isEmpty(deductReasons))
-            courseScheduleTeacherSalary.setDeductionReason(org.apache.commons.lang3.StringUtils.join(deductReasons, ";"));
-        //更新教师结算信息
+        courseScheduleTeacherSalary.setDeductReasons(deductReasons);
         courseScheduleTeacherSalary.setActualSalary(finalSalary.compareTo(BigDecimal.ZERO)<0?BigDecimal.ZERO:finalSalary);
-        courseScheduleTeacherSalary.setBelongToDaya(false);
     }
 
     @Override
     public void calVipCourseTeacherActualSalary(CourseSchedule courseSchedule, CourseScheduleTeacherSalary courseScheduleTeacherSalary,
-                                                List<TeacherAttendance> teacherAttendances, School school, Teacher teacher, double attendanceRange, Boolean updated) {
+                                                List<TeacherAttendance> teacherAttendances, School school, Teacher teacher, String attendanceRange, Boolean updated) {
         List<TeacherSalaryDeductReasonDto> deductReasons = new ArrayList<>();
 
         if(StringUtils.isNotBlank(courseScheduleTeacherSalary.getDeductionReason())&&"不结算课酬".equals(courseScheduleTeacherSalary.getDeductionReason())){
@@ -1719,97 +1716,81 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
             }
             return;
         }
-        
-        BigDecimal expectSalary = courseScheduleTeacherSalary.getExpectSalary();
 
-        expectSalary = expectSalary.add(courseScheduleTeacherSalary.getSubsidy());
-        if(BigDecimal.ZERO.compareTo(expectSalary)>0){
+        BigDecimal expectSalary = courseScheduleTeacherSalary.getExpectSalary();
+        if(Objects.isNull(courseScheduleTeacherSalary.getSubsidy())){
+            courseScheduleTeacherSalary.setSubsidy(BigDecimal.ZERO);
+        }
+        if(BigDecimal.ZERO.compareTo(courseScheduleTeacherSalary.getSubsidy()) != 0){
+            expectSalary = expectSalary.add(courseScheduleTeacherSalary.getSubsidy());
+            deductReasons.add(new TeacherSalaryDeductReasonDto(DeductReasonEnum.SUBSIDY, courseScheduleTeacherSalary.getSubsidy()));
+        }
+        if(BigDecimal.ZERO.compareTo(expectSalary) > 0){
             expectSalary = new BigDecimal(0);
         }
 
-        BigDecimal expectTeacherSalary = expectSalary;
-
-        //判断课程是否在试用期内
-        boolean trail = false;
+        Integer tenantId = TenantContextHolder.getTenantId();
 
-        if(Objects.nonNull(teacher)&&Objects.nonNull(teacher.getEntryDate())&&courseSchedule.getClassDate().compareTo(teacher.getEntryDate())>=0){
-            trail = true;
-        }
-        if(Objects.nonNull(teacher)&&Objects.nonNull(teacher.getFormalStaffDate())&&courseSchedule.getClassDate().compareTo(teacher.getFormalStaffDate())>=0){
-            trail = false;
+        //试用期课酬规则
+        String configValue2 = sysTenantConfigService.getTenantConfigValue(SysConfigService.PROBATION_TEACHER_SALARY,tenantId);
+        Integer probationTeacherSalary = 100;
+        if(StringUtils.isNotEmpty(configValue2)){
+            probationTeacherSalary = Integer.parseInt(configValue2);
         }
-
         //如果上课日期在试用期内按80%结算
-        if(trail){
-            expectSalary = expectSalary.multiply(new BigDecimal("0.8"));
-//            deductReasons.add("未转正");
+        BigDecimal expectTeacherSalary = expectSalary;
+        if(isTrail(teacher,courseSchedule.getClassDate())){
+            expectSalary = expectSalary.multiply(new BigDecimal(probationTeacherSalary / 100));
             deductReasons.add(new TeacherSalaryDeductReasonDto(DeductReasonEnum.TRAIL, expectTeacherSalary.subtract(expectSalary)));
         }
-
         //扣除费用
-        BigDecimal deductCost = new BigDecimal(0);
-        BigDecimal gpsDeductAmount = new BigDecimal("0");
-
-        if(CollectionUtils.isEmpty(teacherAttendances)||Objects.isNull(teacherAttendances.get(0).getSignInStatus())){
-            //未签到扣除全部课酬
-            deductCost = deductCost.add(expectSalary.abs());
-//            deductReasons.add("未签到扣除全部课酬");
-            deductReasons.add(new TeacherSalaryDeductReasonDto(DeductReasonEnum.SIGN_IN_TIME_ERR, expectSalary.abs()));
-        }else if(YesOrNoEnum.NO.equals(teacherAttendances.get(0).getSignInStatus())&&TeachModeEnum.ONLINE.equals(courseSchedule.getTeachMode())){
-            //异常签到
-            int signCourseTimeBetweenSeconds = DateUtil.secondsBetween(teacherAttendances.get(0).getSignInTime(), courseSchedule.getStartClassTime());
-            float signCourseTimeBetween = (float)signCourseTimeBetweenSeconds/(float)60;
-            if(signCourseTimeBetween<=1&&signCourseTimeBetween>-3){
-                //课程开始前1分钟至开始后3分钟进入教室
-                deductCost = deductCost.add(expectSalary.divide(new BigDecimal(2)).abs());
-//                deductReasons.add("课程开始前1分钟至开始后3分钟进入教室扣除一半课酬");
-                deductReasons.add(new TeacherSalaryDeductReasonDto(DeductReasonEnum.SIGN_IN_TIME_ERR, expectSalary.divide(new BigDecimal(2)).abs()));
-            }else if(signCourseTimeBetween<=-3){
-                //课程开始后3分钟后进入教室
-                deductCost = deductCost.add(expectSalary.abs());
-//                deductReasons.add("课程开始后3分钟进入教室扣除全部课酬");
-                deductReasons.add(new TeacherSalaryDeductReasonDto(DeductReasonEnum.SIGN_IN_TIME_ERR, expectSalary.abs()));
-            }
-        }else if(YesOrNoEnum.NO.equals(teacherAttendances.get(0).getSignInStatus())&&TeachModeEnum.OFFLINE.equals(courseSchedule.getTeachMode())){
-            deductCost = deductCost.add(expectSalary.abs());
-//            deductReasons.add("点名时经纬度不在范围内扣除全部课酬");
-            gpsDeductAmount = expectSalary.abs();
-        }
-
-        if(CollectionUtils.isEmpty(teacherAttendances)||Objects.isNull(teacherAttendances.get(0).getSignOutStatus())){
-            //未签退扣除全部课酬
-            deductCost = deductCost.add(expectSalary.abs());
-//            deductReasons.add("未签退扣除全部课酬");
-            deductReasons.add(new TeacherSalaryDeductReasonDto(DeductReasonEnum.SIGN_OUT_TIME_ERR, expectSalary.abs()));
-        }else if(YesOrNoEnum.NO.equals(teacherAttendances.get(0).getSignOutStatus())&&TeachModeEnum.ONLINE.equals(courseSchedule.getTeachMode())){
-            //异常签退
-            int signOutCourseTimeBetweenSeconds = DateUtil.secondsBetween(teacherAttendances.get(0).getSignOutTime(), courseSchedule.getEndClassTime());
-            float signOutCourseTimeBetween = (float)signOutCourseTimeBetweenSeconds/(float)60;
-
-            if(signOutCourseTimeBetween>3){
-                //课程开始前20分钟至开始后3分钟退出教室
-                deductCost = deductCost.add(expectSalary.abs());
-//                deductReasons.add("课程结束前3分钟之前退出教室扣除全部课酬");
-                deductReasons.add(new TeacherSalaryDeductReasonDto(DeductReasonEnum.SIGN_OUT_TIME_ERR, expectSalary.abs()));
-            }else if(signOutCourseTimeBetween<=3&&signOutCourseTimeBetween>0){
-                //课程结束前3分钟后至课程结束前退出教室
-                deductCost = deductCost.add(expectSalary.divide(new BigDecimal(2)).abs());
-//                deductReasons.add("课程结束前3分钟后至课程结束前退出教室扣除一半课酬");
-                deductReasons.add(new TeacherSalaryDeductReasonDto(DeductReasonEnum.SIGN_OUT_TIME_ERR, expectSalary.divide(new BigDecimal(2)).abs()));
-            }
-        }else if(YesOrNoEnum.NO.equals(teacherAttendances.get(0).getSignInStatus())&&TeachModeEnum.OFFLINE.equals(courseSchedule.getTeachMode())){
-            deductCost = deductCost.add(expectSalary.abs());
-//            deductReasons.add("点名时经纬度不在范围内扣除全部课酬");
-            gpsDeductAmount = expectSalary.abs();
-        }
-
-        if(BigDecimal.ZERO.compareTo(gpsDeductAmount)<0){
-            deductReasons.add(new TeacherSalaryDeductReasonDto(DeductReasonEnum.GPS_ERR, gpsDeductAmount));
+        BigDecimal deductCost = BigDecimal.ZERO;
+        TeachModeEnum teachMode = courseSchedule.getTeachMode();
+        if(TeachModeEnum.OFFLINE == teachMode){
+            if(true){
+                String c = sysTenantConfigService.getTenantConfigValue(SysConfigService.OFFLINE_SIGN_IN_GPS_ERROR_CUT_SALARY, tenantId);
+                String c1 = sysTenantConfigService.getTenantConfigValue(SysConfigService.OFFLINE_SIGN_IN_GPS_ERROR_CUT_SALARY_UNIT, tenantId);
+                BigDecimal signInGpsCutAmount = getCutAmount(c, c1, expectSalary);
+                if(signInGpsCutAmount.compareTo(BigDecimal.ZERO) > 0){
+                    deductReasons.add(new TeacherSalaryDeductReasonDto(DeductReasonEnum.GPS_ERR_IN, expectSalary.subtract(signInGpsCutAmount)));
+                }
+            }
+            if(true){
+                String c = sysTenantConfigService.getTenantConfigValue(SysConfigService.OFFLINE_SIGN_OUT_GPS_ERROR_CUT_SALARY, tenantId);
+                String c1 = sysTenantConfigService.getTenantConfigValue(SysConfigService.OFFLINE_SIGN_OUT_GPS_ERROR_CUT_SALARY_UNIT, tenantId);
+                BigDecimal signOutGpsCutAmount = getCutAmount(c, c1, expectSalary);
+                if(signOutGpsCutAmount.compareTo(BigDecimal.ZERO) > 0){
+                    deductReasons.add(new TeacherSalaryDeductReasonDto(DeductReasonEnum.GPS_ERR_OUT, expectSalary.subtract(signOutGpsCutAmount)));
+                }
+            }
+        }else {
+            TeacherAttendance teacherAttendance = null;
+            if(teacherAttendances != null && teacherAttendances.size() > 0){
+                teacherAttendance = teacherAttendances.get(0);
+            }
+            if(teacherAttendance == null){
+                teacherAttendance = new TeacherAttendance();
+            }
+            if(teacherAttendance.getSignInStatus() == null || teacherAttendance.getSignInStatus() == YesOrNoEnum.NO){
+                SalarySettlementSignEnum signInStatus = getSignInStatus(teacherAttendance.getSignInTime(), courseSchedule.getStartClassTime(), teachMode,tenantId);
+                BigDecimal signInDeductCost = getSignInDeduce(expectSalary, signInStatus, teachMode,tenantId);
+                if(signInDeductCost.compareTo(BigDecimal.ZERO) > 0){
+                    deductCost = deductCost.add(signInDeductCost);
+                    deductReasons.add(new TeacherSalaryDeductReasonDto(DeductReasonEnum.SIGN_IN_TIME_ERR, expectSalary.subtract(signInDeductCost)));
+                }
+            }
+            if(teacherAttendance.getSignOutStatus() == null || teacherAttendance.getSignOutStatus() == YesOrNoEnum.NO){
+                SalarySettlementSignEnum signOutStatus = getSignInStatus(teacherAttendance.getSignInTime(), courseSchedule.getStartClassTime(), teachMode,tenantId);
+                BigDecimal signOutDeductCost = getSignInDeduce(expectSalary, signOutStatus, teachMode,tenantId);
+                if(signOutDeductCost.compareTo(BigDecimal.ZERO) > 0){
+                    deductCost = deductCost.add(signOutDeductCost);
+                    deductReasons.add(new TeacherSalaryDeductReasonDto(DeductReasonEnum.SIGN_OUT_TIME_ERR, expectSalary.subtract(signOutDeductCost)));
+                }
+            }
         }
-
+        courseScheduleTeacherSalary.setDeductReasons(deductReasons);
         BigDecimal finalSalary = expectSalary.subtract(deductCost).setScale(BigDecimal.ZERO.intValue(), BigDecimal.ROUND_HALF_UP);
         courseScheduleTeacherSalary.setActualSalary(finalSalary.compareTo(BigDecimal.ZERO)<0?BigDecimal.ZERO:finalSalary);
-        courseScheduleTeacherSalary.setDeductReasons(deductReasons);
     }
 
     @Override
@@ -1826,89 +1807,65 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
             }
             return;
         }
+        Integer tenantId = TenantContextHolder.getTenantId();
 
         BigDecimal expectSalary = courseScheduleTeacherSalary.getExpectSalary();
-
-        expectSalary = expectSalary.add(courseScheduleTeacherSalary.getSubsidy());
-        if(BigDecimal.ZERO.compareTo(expectSalary)>0){
-            expectSalary = new BigDecimal(0);
+        if(Objects.isNull(courseScheduleTeacherSalary.getSubsidy())){
+            courseScheduleTeacherSalary.setSubsidy(BigDecimal.ZERO);
         }
-
-        BigDecimal expectTeacherSalary = expectSalary;
-
-        //判断课程是否在试用期内
-        boolean trail = false;
-
-        if(Objects.nonNull(teacher)&&Objects.nonNull(teacher.getEntryDate())&&courseSchedule.getClassDate().compareTo(teacher.getEntryDate())>=0){
-            trail = true;
+        if(BigDecimal.ZERO.compareTo(courseScheduleTeacherSalary.getSubsidy()) != 0){
+            expectSalary = expectSalary.add(courseScheduleTeacherSalary.getSubsidy());
+            deductReasons.add(new TeacherSalaryDeductReasonDto(DeductReasonEnum.SUBSIDY, courseScheduleTeacherSalary.getSubsidy()));
         }
-        if(Objects.nonNull(teacher)&&Objects.nonNull(teacher.getFormalStaffDate())&&courseSchedule.getClassDate().compareTo(teacher.getFormalStaffDate())>=0){
-            trail = false;
+        if(BigDecimal.ZERO.compareTo(expectSalary) > 0){
+            expectSalary = new BigDecimal(0);
         }
 
         //如果上课日期在试用期内按80%结算
-        if(trail){
-            expectSalary = expectSalary.multiply(new BigDecimal("0.8"));
-//            deductReasons.add("未转正");
+        //试用期课酬规则
+        String configValue2 = sysTenantConfigService.getTenantConfigValue(SysConfigService.PROBATION_TEACHER_SALARY,tenantId);
+        Integer probationTeacherSalary = 100;
+        if(StringUtils.isNotEmpty(configValue2)){
+            probationTeacherSalary = Integer.parseInt(configValue2);
+        }
+        BigDecimal expectTeacherSalary = expectSalary;
+        if(isTrail(teacher,courseSchedule.getClassDate())){
+            expectSalary = expectSalary.multiply(new BigDecimal(probationTeacherSalary / 100));
             deductReasons.add(new TeacherSalaryDeductReasonDto(DeductReasonEnum.TRAIL, expectTeacherSalary.subtract(expectSalary)));
         }
 
         //扣除费用
-        BigDecimal deductCost = new BigDecimal(0);
+        BigDecimal deductCost = BigDecimal.ZERO;
 
+        //获取签到状态
+        TeachModeEnum teachMode = courseScheduleTeacherSalary.getCourseSchedule().getTeachMode();
         TeacherAttendance teacherAttendance = null;
-        if(!CollectionUtils.isEmpty(teacherAttendances)){
+        if(teacherAttendances != null && teacherAttendances.size() > 0){
             teacherAttendance = teacherAttendances.get(0);
         }
-        if(CollectionUtils.isEmpty(teacherAttendances)||Objects.isNull(teacherAttendance.getSignInStatus())){
-            //未签到扣除全部课酬
-            deductCost = deductCost.add(expectSalary.abs());
-//            deductReasons.add("未签到扣除全部课酬");
-            deductReasons.add(new TeacherSalaryDeductReasonDto(DeductReasonEnum.SIGN_IN_TIME_ERR, expectSalary.abs()));
-        }else if(YesOrNoEnum.NO.equals(teacherAttendance.getSignInStatus())){
-            //异常签到
-            int signCourseTimeBetweenSeconds = DateUtil.secondsBetween(teacherAttendance.getSignInTime(), courseSchedule.getStartClassTime());
-            float signCourseTimeBetween = (float)signCourseTimeBetweenSeconds/(float)60;
-            if(signCourseTimeBetween<=1&&signCourseTimeBetween>-3){
-                //课程开始前1分钟至开始后3分钟进入教室
-                deductCost = deductCost.add(expectSalary.divide(new BigDecimal(2)).abs());
-//                deductReasons.add("课程开始前1分钟至开始后3分钟进入教室扣除一半课酬");
-                deductReasons.add(new TeacherSalaryDeductReasonDto(DeductReasonEnum.SIGN_IN_TIME_ERR, expectSalary.divide(new BigDecimal(2)).abs()));
-            }else if(signCourseTimeBetween<=-3){
-                //课程开始后3分钟后进入教室
-                deductCost = deductCost.add(expectSalary.abs());
-//                deductReasons.add("课程开始后3分钟进入教室扣除全部课酬");
-                deductReasons.add(new TeacherSalaryDeductReasonDto(DeductReasonEnum.SIGN_IN_TIME_ERR, expectSalary.abs()));
-            }
-        }
-
-        if(CollectionUtils.isEmpty(teacherAttendances)||Objects.isNull(teacherAttendance.getSignOutStatus())){
-            //未签退扣除全部课酬
-            deductCost = deductCost.add(expectSalary.abs());
-//            deductReasons.add("未签退扣除全部课酬");
-            deductReasons.add(new TeacherSalaryDeductReasonDto(DeductReasonEnum.SIGN_OUT_TIME_ERR, expectSalary.abs()));
-        }else if(YesOrNoEnum.NO.equals(teacherAttendance.getSignOutStatus())){
-            //异常签退
-            int signOutCourseTimeBetweenSeconds = DateUtil.secondsBetween(teacherAttendance.getSignOutTime(), courseSchedule.getEndClassTime());
-            float signOutCourseTimeBetween = (float)signOutCourseTimeBetweenSeconds/(float)60;
-
-            if(signOutCourseTimeBetween>3){
-                //课程开始前20分钟至开始后3分钟退出教室
-                deductCost = deductCost.add(expectSalary.abs());
-//                deductReasons.add("课程结束前3分钟之前退出教室扣除全部课酬");
-                deductReasons.add(new TeacherSalaryDeductReasonDto(DeductReasonEnum.SIGN_OUT_TIME_ERR, expectSalary.abs()));
-            }else if(signOutCourseTimeBetween<=3&&signOutCourseTimeBetween>0){
-                //课程结束前3分钟后至课程结束前退出教室
-                deductCost = deductCost.add(expectSalary.divide(new BigDecimal(2)).abs());
-//                deductReasons.add("课程结束前3分钟后至课程结束前退出教室扣除一半课酬");
-                deductReasons.add(new TeacherSalaryDeductReasonDto(DeductReasonEnum.SIGN_OUT_TIME_ERR, expectSalary.divide(new BigDecimal(2)).abs()));
+        if(teacherAttendance == null){
+            teacherAttendance = new TeacherAttendance();
+        }
+        if(teacherAttendance.getSignInStatus() == null || teacherAttendance.getSignInStatus() == YesOrNoEnum.NO){
+            SalarySettlementSignEnum signInStatus = getSignInStatus(teacherAttendance.getSignInTime(), courseSchedule.getStartClassTime(), teachMode,tenantId);
+            BigDecimal signInDeductCost = getSignInDeduce(expectSalary, signInStatus, teachMode,tenantId);
+            if(signInDeductCost.compareTo(BigDecimal.ZERO) > 0){
+                deductCost = deductCost.add(signInDeductCost);
+                deductReasons.add(new TeacherSalaryDeductReasonDto(DeductReasonEnum.SIGN_IN_TIME_ERR, signInDeductCost));
+            }
+        }
+        if(teacherAttendance.getSignInStatus() == null || teacherAttendance.getSignOutStatus() == YesOrNoEnum.NO){
+            SalarySettlementSignEnum signOutStatus = getSignInStatus(teacherAttendance.getSignInTime(), courseSchedule.getStartClassTime(), teachMode,tenantId);
+            BigDecimal signOutDeductCost = getSignInDeduce(expectSalary, signOutStatus, teachMode,tenantId);
+            if(signOutDeductCost.compareTo(BigDecimal.ZERO) > 0){
+                deductCost = deductCost.add(signOutDeductCost);
+                deductReasons.add(new TeacherSalaryDeductReasonDto(DeductReasonEnum.SIGN_OUT_TIME_ERR, signOutDeductCost));
             }
         }
 
         BigDecimal finalSalary = expectSalary.subtract(deductCost).setScale(BigDecimal.ZERO.intValue(), BigDecimal.ROUND_HALF_UP);
-
-        courseScheduleTeacherSalary.setActualSalary(finalSalary.compareTo(BigDecimal.ZERO)<0?BigDecimal.ZERO:finalSalary);
         courseScheduleTeacherSalary.setDeductReasons(deductReasons);
+        courseScheduleTeacherSalary.setActualSalary(finalSalary.compareTo(BigDecimal.ZERO)<0?BigDecimal.ZERO:finalSalary);
     }
 
     @Override
@@ -1960,11 +1917,7 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
         }
 
         //签到GPS范围
-        String gpsRange = sysTenantConfigService.getTenantConfigValue(SysConfigService.ATTENDANCE_RANGE,tenantId);
-        double attendanceRange = 0;
-        if(StringUtils.isNotEmpty(gpsRange)){
-            attendanceRange = Integer.parseInt(gpsRange);
-        }
+        String attendanceRange = sysTenantConfigService.getTenantConfigValue(SysConfigService.ATTENDANCE_RANGE,tenantId);
 
         //教师签到记录
         List<TeacherAttendance> allTeacherAttendances = teacherAttendanceDao.findByCourseSchedules(courseIds);
@@ -2027,8 +1980,8 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
             teacherSalaryOverview.setDayaIncome(monthActualIncome);
         }
 
-        teacherSalaryOverview.setAttendanceRange(attendanceRange);
-        teacherSalaryOverview.setVipAttendanceRange(attendanceRange);
+        teacherSalaryOverview.setAttendanceRange(StringUtils.isEmpty(attendanceRange)?0:Double.parseDouble(attendanceRange));
+        teacherSalaryOverview.setVipAttendanceRange(StringUtils.isEmpty(attendanceRange)?0:Double.parseDouble(attendanceRange));
 
         return teacherSalaryOverview;
     }
@@ -2045,6 +1998,7 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
             pageInfo.setRows(Collections.EMPTY_LIST);
             return pageInfo;
         }
+        Integer tenantId = TenantContextHolder.getTenantId();
 
         int count = courseScheduleDao.countTeacherCourse(params);
         pageInfo.setTotal(count);
@@ -2070,18 +2024,7 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
             }
 
             //签到GPS范围
-            SysConfig sysConfig = sysConfigService.findByParamName(SysConfigService.ATTENDANCE_RANGE);
-            double attendanceRange = 0;
-            if(Objects.nonNull(sysConfig)){
-                attendanceRange = Double.valueOf(sysConfig.getParanValue());
-            }
-
-            //签到GPS范围VIP
-//            SysConfig vipSysConfig = sysConfigService.findByParamName(SysConfigService.ATTENDANCE_RANGE_VIP);
-//            double vipAttendanceRange = 0;
-//            if(Objects.nonNull(vipSysConfig)){
-//                vipAttendanceRange = Double.valueOf(vipSysConfig.getParanValue());
-//            }
+            String attendanceRange = sysTenantConfigService.getTenantConfigValue(SysConfigService.ATTENDANCE_RANGE,tenantId);
 
             //教师签到记录
             List<TeacherAttendance> allTeacherAttendances = teacherAttendanceDao.findByCourseSchedules(courseIds);

+ 12 - 1
mec-biz/src/main/java/com/ym/mec/biz/service/impl/InspectionItemPlanServiceImpl.java

@@ -7,12 +7,15 @@ import com.ym.mec.biz.dal.enums.MessageTypeEnum;
 import com.ym.mec.biz.dal.page.InspectionItemPlanQueryInfo;
 import com.ym.mec.biz.service.SysConfigService;
 import com.ym.mec.biz.service.SysMessageService;
+import com.ym.mec.biz.service.SysTenantConfigService;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.exception.BizException;
 import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
+import com.ym.mec.common.tenant.TenantContextHolder;
 import com.ym.mec.thirdparty.message.MessageSenderPluginContext;
 import com.ym.mec.util.date.DateUtil;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import com.ym.mec.biz.service.InspectionItemPlanService;
@@ -40,6 +43,8 @@ public class InspectionItemPlanServiceImpl extends BaseServiceImpl<Long, Inspect
     private SysMessageService sysMessageService;
     @Autowired
     private SchoolDao schoolDao;
+    @Autowired
+    private SysTenantConfigService sysTenantConfigService;
 
     @Override
     public BaseDAO<Long, InspectionItemPlan> getDAO() {
@@ -51,7 +56,13 @@ public class InspectionItemPlanServiceImpl extends BaseServiceImpl<Long, Inspect
     public PageInfo<InspectionItemPlan> getPageList(InspectionItemPlanQueryInfo queryInfo) {
         PageInfo<InspectionItemPlan> pageInfo = this.queryPage(queryInfo);
         if (pageInfo.getRows().size() > 0) {
-            Integer attendanceRange = Integer.valueOf(sysConfigDao.findConfigValue(SysConfigService.ATTENDANCE_RANGE));
+            Integer tenantId = TenantContextHolder.getTenantId();
+            //签到GPS范围
+            String gpsRange = sysTenantConfigService.getTenantConfigValue(SysConfigService.ATTENDANCE_RANGE,tenantId);
+            Integer attendanceRange = 0;
+            if(StringUtils.isNotEmpty(gpsRange)){
+                attendanceRange = Integer.parseInt(gpsRange);
+            }
             List<Long> planIds = pageInfo.getRows().stream().map(InspectionItemPlan::getId).collect(Collectors.toList());
             List<CheckItemDto> lastCheckItems = inspectionItemPlanConclusionDao.getLastCheckItem(planIds);
             for (InspectionItemPlan row : pageInfo.getRows()) {

+ 27 - 14
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentAttendanceServiceImpl.java

@@ -14,6 +14,7 @@ import com.alibaba.fastjson.JSON;
 import com.ym.mec.biz.dal.dto.*;
 import com.ym.mec.biz.dal.entity.*;
 import com.ym.mec.biz.service.SysTenantConfigService;
+import com.ym.mec.common.tenant.TenantContextHolder;
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -130,6 +131,7 @@ public class StudentAttendanceServiceImpl extends BaseServiceImpl<Long, StudentA
         if (TeachModeEnum.ONLINE.equals(courseSchedule.getTeachMode())) {
             throw new BizException("线上课程请进入房间授课");
         }
+        Integer tenantId = TenantContextHolder.getTenantId();
         Date date = new Date();
         SysConfig attendanceTimeRange;
         if (courseSchedule.getGroupType().equals(GroupType.MUSIC)) {
@@ -141,15 +143,21 @@ public class StudentAttendanceServiceImpl extends BaseServiceImpl<Long, StudentA
                 throw new BizException("乐团课禁止跨天点名");
             }
         } else {
-            SysConfig beforeAttendanceTimeRange = sysConfigService.findByParamName(SysConfigService.ENABLE_STUDENT_ATTENDANCE_TIME_RANGE_VIP);
-            int courseStartTime = DateUtil.minutesBetween(date, courseSchedule.getStartClassTime());
-            if (date.before(courseSchedule.getStartClassTime()) && courseStartTime > beforeAttendanceTimeRange.getParanValue(Integer.class)) {
-                throw new BizException("VIP课开课前{}分钟禁止点名", beforeAttendanceTimeRange.getParanValue(Integer.class));
+            String sysConfigVip = sysTenantConfigService.getTenantConfigValue(SysConfigService.ENABLE_STUDENT_ATTENDANCE_BEFOR_COURSE_START_TIME_RANGE_VIP,tenantId);
+            if(StringUtils.isNotEmpty(sysConfigVip)){
+                int i = Integer.parseInt(sysConfigVip);
+                int courseStartTime = DateUtil.minutesBetween(date, courseSchedule.getStartClassTime());
+                if (date.before(courseSchedule.getStartClassTime()) && courseStartTime > i) {
+                    throw new BizException("VIP课开课前{}分钟禁止点名", i);
+                }
             }
-            attendanceTimeRange = sysConfigService.findByParamName(SysConfigService.ENABLE_STUDENT_ATTENDANCE_TIME_RANGE_VIP);
-            int courseEndTime = DateUtil.minutesBetween(courseSchedule.getEndClassTime(), date);
-            if (date.after(courseSchedule.getEndClassTime()) && courseEndTime > attendanceTimeRange.getParanValue(Integer.class)) {
-                throw new BizException("VIP课结束{}分钟后禁止点名",attendanceTimeRange.getParanValue(Integer.class));
+            String configValue = sysTenantConfigService.getTenantConfigValue(SysConfigService.ENABLE_STUDENT_ATTENDANCE_TIME_RANGE_VIP, tenantId);
+            if(StringUtils.isNotEmpty(configValue)){
+                int i = Integer.parseInt(sysConfigVip);
+                int courseEndTime = DateUtil.minutesBetween(courseSchedule.getEndClassTime(), date);
+                if (date.after(courseSchedule.getEndClassTime()) && courseEndTime > i) {
+                    throw new BizException("VIP课结束{}分钟后禁止点名",i);
+                }
             }
         }
 
@@ -247,13 +255,18 @@ public class StudentAttendanceServiceImpl extends BaseServiceImpl<Long, StudentA
                     schoolDao.update(school);
                 }
             } else {
-                SysConfig sysConfig = sysConfigService.findByParamName(SysConfigService.ATTENDANCE_RANGE);
-                double attendanceRange = Double.valueOf(sysConfig.getParanValue());
-                double distance = MapUtil.distance(studentAttendanceInfos.getSignInLongitudeLatitude(),
-                        school.getLongitudeLatitude());
-                if (distance > attendanceRange) {
-                    isInScore = false;
+                //签到GPS范围
+                String gpsRange = sysTenantConfigService.getTenantConfigValue(SysConfigService.ATTENDANCE_RANGE,tenantId);
+                if(StringUtils.isEmpty(gpsRange)){
+                    isInScore = true;
+                }else {
+                    double attendanceRange = Double.parseDouble(gpsRange);
+                    double distance = MapUtil.distance(studentAttendanceInfos.getSignInLongitudeLatitude(),
+                            school.getLongitudeLatitude());
+                    if (distance > attendanceRange) {
+                        isInScore = false;
 //                    teacherAttendanceMemo = "打卡地点距离教学点" + distance + "米";
+                    }
                 }
             }
         }

+ 28 - 16
mec-biz/src/main/java/com/ym/mec/biz/service/impl/TeacherAttendanceServiceImpl.java

@@ -95,6 +95,7 @@ public class TeacherAttendanceServiceImpl extends BaseServiceImpl<Long, TeacherA
 		if(Objects.isNull(teacherSignOutDto.getTeacherAttendanceInfo().getCourseScheduleId())){
 			throw new BizException("请选择课程!");
 		}
+		Integer tenantId = TenantContextHolder.getTenantId();
 
 		Map<String,Object> result=new HashMap<>();
 
@@ -166,13 +167,17 @@ public class TeacherAttendanceServiceImpl extends BaseServiceImpl<Long, TeacherA
 					isInScore = false;
 				}
 			}else{
-			    teacherAttendance.setSignInLongitudeLatitude(teacherSignOutDto.getTeacherAttendanceInfo().getSignInLongitudeLatitude());
-				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;
+				//签到GPS范围
+				String gpsRange = sysTenantConfigService.getTenantConfigValue(SysConfigService.ATTENDANCE_RANGE,tenantId);
+				if(StringUtils.isEmpty(gpsRange)){
+					isInScore = true;
+				}else {
+					double attendanceRange = Double.parseDouble(gpsRange);
+					double distance = MapUtil.distance(teacherSignOutDto.getTeacherAttendanceInfo().getSignInLongitudeLatitude(),
+							school.getLongitudeLatitude());
+					if(distance>attendanceRange){
+						isInScore=false;
+					}
 				}
 			}
 
@@ -234,12 +239,16 @@ public class TeacherAttendanceServiceImpl extends BaseServiceImpl<Long, TeacherA
 				}
 			}else if(StringUtils.isNotBlank(teacherSignOutDto.getTeacherAttendanceInfo().getSignOutLongitudeLatitude())){
 			    teacherAttendance.setSignOutLongitudeLatitude(teacherSignOutDto.getTeacherAttendanceInfo().getSignOutLongitudeLatitude());
-				SysConfig sysConfig = sysConfigService.findByParamName(SysConfigService.ATTENDANCE_RANGE);
-				double attendanceRange = Double.valueOf(sysConfig.getParanValue());
-				double distance = MapUtil.distance(teacherSignOutDto.getTeacherAttendanceInfo().getSignOutLongitudeLatitude(),
-						school.getLongitudeLatitude());
-				if(distance<=attendanceRange){
-					isInScore=true;
+				String gpsRange = sysTenantConfigService.getTenantConfigValue(SysConfigService.ATTENDANCE_RANGE,tenantId);
+				if(StringUtils.isNotEmpty(gpsRange)){
+					double attendanceRange = Double.parseDouble(gpsRange);
+					double distance = MapUtil.distance(teacherSignOutDto.getTeacherAttendanceInfo().getSignOutLongitudeLatitude(),
+							school.getLongitudeLatitude());
+					if(distance <= attendanceRange){
+						isInScore = true;
+					}
+				}else {
+					isInScore = true;
 				}
 			}
 
@@ -565,9 +574,12 @@ public class TeacherAttendanceServiceImpl extends BaseServiceImpl<Long, TeacherA
 	}
 
 	@Override
-	public boolean pushNoSignOutMessage() {
-		Integer minutes = Integer.parseInt(sysConfigDao.findConfigValue(SysConfigService.SIGN_OUT_MESSAGE_PUSH_MINUTE));;
-
+	public boolean pushNoSignOutMessage(Integer tenantId) {
+		String configValue = sysTenantConfigService.getTenantConfigValue(SysConfigService.SIGN_OUT_MESSAGE_PUSH_MINUTE, tenantId);
+		if(StringUtils.isEmpty(configValue)){
+			return true;
+		}
+		Integer minutes = Integer.parseInt(configValue);
 		List<Mapper> list = teacherAttendanceDao.queryNoSignOutListByOverMinutes(minutes);
 		if(CollectionUtils.isEmpty(list)){
 			return true;

+ 4 - 4
mec-teacher/src/main/java/com/ym/mec/teacher/controller/TeacherCourseScheduleController.java

@@ -90,18 +90,18 @@ public class TeacherCourseScheduleController extends BaseController {
         }
         SysConfig sysConfig = sysConfigService.findByParamName(SysConfigService.ENABLE_STUDENT_ATTENDANCE_TIME_RANGE);
         SysConfig offlineSignInEarlyForwardTime = sysConfigService.findByParamName(SysConfigService.OFFLINE_SIGN_IN_EARLY_FORWARD_TIME);
-        SysConfig sysConfigVip = sysConfigService.findByParamName(SysConfigService.ENABLE_STUDENT_ATTENDANCE_TIME_RANGE_VIP);
+        String configValue1 = sysTenantConfigService.getTenantConfigValue(SysConfigService.ENABLE_STUDENT_ATTENDANCE_TIME_RANGE_VIP, user.getTenantId());
         SysConfig courseBeforeBufferTime = sysConfigService.findByParamName(SysConfigService.COURSE_BEFORE_BUFFER_TIME);
         SysConfig courseAfterBufferTime = sysConfigService.findByParamName(SysConfigService.COURSE_AFTER_BUFFER_TIME);
-        SysConfig studentAttendanceAfterTimeConfig = sysConfigService.findByParamName(SysConfigService.ENABLE_STUDENT_ATTENDANCE_BEFOR_COURSE_START_TIME_RANGE_VIP);
+        String configValue = sysTenantConfigService.getTenantConfigValue(SysConfigService.ENABLE_STUDENT_ATTENDANCE_BEFOR_COURSE_START_TIME_RANGE_VIP, user.getTenantId());
         List<CourseScheduleDto> teacherCourseSchedulesWithDate = scheduleService.getTeacherCourseSchedulesWithDate(user.getId(),date,type,user.getTenantId());
         Map<String,Object> result = new HashMap<>();
         result.put("rows",teacherCourseSchedulesWithDate);
         result.put("appealHoursRange",4);
         result.put("offlineSignInEarlyForwardTime", offlineSignInEarlyForwardTime.getParanValue(Integer.class));
         result.put("enableStudentAttendanceTimeRange",sysConfig.getParanValue(Integer.class));
-        result.put("enableStudentAttendanceTimeRangeVip",sysConfigVip.getParanValue(Integer.class));
-        result.put("joinRoomBeforeTime",studentAttendanceAfterTimeConfig.getParanValue(Integer.class));
+        result.put("enableStudentAttendanceTimeRangeVip",StringUtils.isEmpty(configValue1)?0:Integer.parseInt(configValue1));
+        result.put("joinRoomBeforeTime",StringUtils.isEmpty(configValue)?0:Integer.parseInt(configValue));
         result.put("courseBeforeBufferTime", courseBeforeBufferTime.getParanValue(Integer.class));
         result.put("courseAfterBufferTime", courseAfterBufferTime.getParanValue(Integer.class));
         return succeed(result);

+ 6 - 1
mec-web/src/main/java/com/ym/mec/web/controller/TaskController.java

@@ -240,7 +240,12 @@ public class TaskController extends BaseController {
 	@GetMapping("/pushNoSignOutMessage")
 	// 推送未签退消息提醒
 	public void pushNoSignOutMessage() {
-		teacherAttendanceService.pushNoSignOutMessage();
+		List<TenantInfo> tenantInfos = tenantInfoService.list(new QueryWrapper<TenantInfo>().eq("state_",1));
+		if(tenantInfos != null && tenantInfos.size() > 0){
+			for (TenantInfo tenantInfo : tenantInfos) {
+				teacherAttendanceService.pushNoSignOutMessage(tenantInfo.getId());
+			}
+		}
 	}
 
 	@GetMapping("/studentCoursesScheduleRemind")