Browse Source

fix:课酬

Joburgess 4 năm trước cách đây
mục cha
commit
544fcc4803

+ 9 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/SchoolDao.java

@@ -23,6 +23,15 @@ public interface SchoolDao extends BaseDAO<Integer, School> {
      * @return
      */
     List<Map<Integer, String>> queryNameByIds(@Param("schoolIds") String schoolIds);
+
+    /**
+     * @describe 获取指定的教学点
+     * @author Joburgess
+     * @date 2020/12/18 0018
+     * @param schoolIds:
+     * @return java.util.List<com.ym.mec.biz.dal.entity.School>
+     */
+    List<School> getSchools(@Param("schoolIds") List<Integer> schoolIds);
     
     /**
      * 获取老师的教学点

+ 7 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/SimpleUserDto.java

@@ -17,6 +17,8 @@ public class SimpleUserDto {
 
     private String userName;
 
+    private String realName;
+
     private String avatar;
 
     private Integer gender;
@@ -93,12 +95,17 @@ public class SimpleUserDto {
         this.nickName = nickName;
     }
 
+    public String getRealName() {
+        return realName;
+    }
+
     public String getUserName() {
         return userName;
     }
 
     public void setUserName(String userName) {
         this.userName = userName;
+        this.realName = userName;
     }
 
     public Integer getGender() {

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

@@ -79,6 +79,10 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
     private MusicGroupDao musicGroupDao;
     @Autowired
     private TeacherDefaultPracticeGroupSalaryDao teacherDefaultPracticeGroupSalaryDao;
+    @Autowired
+    private SchoolDao schoolDao;
+    @Autowired
+    private SysConfigService sysConfigService;
 
     private static final Logger LOGGER = LoggerFactory
             .getLogger(CourseScheduleTeacherSalaryServiceImpl.class);
@@ -342,11 +346,11 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
                 //异常签到
                 int signCourseTimeBetweenSeconds = DateUtil.secondsBetween(teacherAttendance.getSignInTime(), courseScheduleTeacherSalary.getCourseSchedule().getStartClassTime());
                 int signCourseTimeBetween = signCourseTimeBetweenSeconds/60;
-                if(signCourseTimeBetween<1&&signCourseTimeBetween>-3){
+                if(signCourseTimeBetween<=1&&signCourseTimeBetween>-3){
                     //课程开始前1分钟至开始后3分钟进入教室
                     deductCost = deductCost.add(new BigDecimal(50));
                     deductReasons.add("课程开始前1分钟至开始后3分钟进入教室扣除50元");
-                }else if(signCourseTimeBetween<-3){
+                }else if(signCourseTimeBetween<=-3){
                     //课程开始后3分钟后进入教室
                     deductCost = deductCost.add(courseScheduleTeacherSalary.getExpectSalary());
                     deductReasons.add("课程开始后3分钟进入教室扣除全部课酬");
@@ -371,7 +375,7 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
                 int signOutCourseTimeBetweenSeconds = DateUtil.secondsBetween(teacherAttendance.getSignOutTime(), courseScheduleTeacherSalary.getCourseSchedule().getEndClassTime());
                 int signOutCourseTimeBetween = signOutCourseTimeBetweenSeconds/60;
 
-                if(signCourseTimeBetween<20&&signCourseTimeBetween>-3){
+                if(signCourseTimeBetween<=20&&signCourseTimeBetween>-3){
                     //课程开始前20分钟至开始后3分钟退出教室
                     deductCost = deductCost.add(courseScheduleTeacherSalary.getExpectSalary());
                     deductReasons.add("课程开始前20分钟至开始后3分钟退出教室扣除全部课酬");
@@ -421,6 +425,13 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
         List<Map<Long, BigDecimal>> courseSubsidyByCourses = courseScheduleTeacherSalaryDao.findCourseSubsidyByCourses(courseScheduleIds);
         Map<Integer, BigDecimal> courseSubsidyMap = MapUtil.convertIntegerMap(courseSubsidyByCourses);
 
+        Set<Integer> schoolIds = yesterdayCourseSchedules.stream().map(CourseSchedule::getSchoolId).collect(Collectors.toSet());
+        List<School> schools = schoolDao.getSchools(new ArrayList<>(schoolIds));
+        Map<Integer, School> idSchoolMap = new HashMap<>();
+        if(!CollectionUtils.isEmpty(schools)){
+            idSchoolMap = schools.stream().collect(Collectors.toMap(School::getId, s->s, (s1, s2)->s1));
+        }
+
         //课程编号与课程对应集合
         Map<Long, CourseSchedule> courseScheduleIdMap = yesterdayCourseSchedules.stream()
                 .collect(Collectors.toMap(CourseSchedule::getId, courseSchedule -> courseSchedule));
@@ -432,6 +443,12 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
             return;
         }
 
+        SysConfig sysConfig = sysConfigService.findByParamName(SysConfigService.ATTENDANCE_RANGE_VIP);
+        double attendanceRange = 0;
+        if(Objects.nonNull(sysConfig)){
+            attendanceRange = Double.valueOf(sysConfig.getParanValue());
+        }
+
         //教师签到记录
         List<TeacherAttendance> allTeacherAttendances = teacherAttendanceDao.findByCourseSchedules(courseScheduleIds);
         Map<String, List<TeacherAttendance>> teacherCourseAttendanceMap = allTeacherAttendances.stream().collect(Collectors.groupingBy(ta -> org.apache.commons.lang3.StringUtils.joinWith(":", ta.getCourseScheduleId(), ta.getTeacherId())));
@@ -588,10 +605,6 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
                     //迟到30分钟及以上扣除全部课酬
                     deductCost = deductCost.add(teacherSalary);
                     deductReasons.add("迟到30分钟及以上扣除全部课酬");
-                }else{
-                    //其他,例如签到经纬度不在范围内
-                    deductCost = deductCost.add(new BigDecimal(50));
-                    deductReasons.add("经纬度不在范围内扣除50元");
                 }
             }
 
@@ -613,6 +626,31 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
                 }
             }
 
+            School school = idSchoolMap.get(courseSchedule.getSchoolId());
+            boolean signInInRange = false;
+            boolean signOutInRange = false;
+            if(Objects.nonNull(school)&&Objects.nonNull(school.getLongitudeLatitude())
+                    &&StringUtils.isNotBlank(teacherAttendance.getSignInLongitudeLatitude())
+                    &&StringUtils.isNotBlank(teacherAttendance.getSignOutLongitudeLatitude())){
+                double signInDistance = MapUtil.distance(teacherAttendance.getSignInLongitudeLatitude(),
+                        school.getLongitudeLatitude());
+                if (signInDistance <= attendanceRange) {
+                    signInInRange = true;
+                }
+                double signOutDistance = MapUtil.distance(teacherAttendance.getSignOutLongitudeLatitude(),
+                        school.getLongitudeLatitude());
+                if (signOutDistance <= attendanceRange) {
+                    signOutInRange = true;
+                }
+            }
+
+            if(!signInInRange&&!signOutInRange){
+                deductReasons.clear();
+                //签到签退GPS定位在指定距离外
+                deductCost = deductCost.add(teacherSalary);
+                deductReasons.add("签到签退GPS定位在指定距离外,扣除全部课酬");
+            }
+
             BigDecimal finalSalary = teacherSalary.subtract(deductCost).setScale(BigDecimal.ZERO.intValue(), BigDecimal.ROUND_HALF_UP);
 
             if(BigDecimal.ZERO.compareTo(deductCost)<0){

+ 7 - 0
mec-biz/src/main/resources/config/mybatis/SchoolMapper.xml

@@ -145,4 +145,11 @@
         SELECT * FROM school WHERE del_flag_ != 1
             AND FIND_IN_SET(organ_id_,#{organId}) AND user_id_ = #{userId}
     </select>
+
+    <select id="getSchools" resultMap="School">
+        SELECT * FROM school WHERE id_ IN
+        <foreach collection="schoolIds" item="schoolId" open="(" close=")" separator=",">
+            #{schoolId}
+        </foreach>
+    </select>
 </mapper>