소스 검색

1、陪练课名称生成逻辑调整
2、一个部门下只有一节课成导致的可预约日期异常

Joburgess 5 년 전
부모
커밋
2ba274a26e

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

@@ -125,7 +125,7 @@ public interface SysConfigService extends BaseService<Long, SysConfig> {
     /**
      * @describe 教师请假数据
      */
-    String TEACHER_LEAVE_DATAS = "teacher_leave_datas";
+    String TEACHER_LEAVE_DATA = "teacher_leave_data";
     
     /**
      * 十分钟内最大可发送的短信次数

+ 121 - 1
mec-biz/src/main/java/com/ym/mec/biz/service/impl/PracticeGroupServiceImpl.java

@@ -1,5 +1,6 @@
 package com.ym.mec.biz.service.impl;
 
+import com.alibaba.fastjson.JSONObject;
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.dao.*;
@@ -182,6 +183,18 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
         if (CollectionUtils.isEmpty(organAndSubjectTeachers)) {
             return null;
         }
+
+        boolean checkTeacherLeaveDate = true;
+        SysConfig allTeacherLeaveDataConfig = sysConfigService.findByParamName(SysConfigService.TEACHER_LEAVE_DATA);
+        JSONObject allTeacherLeaveData = JSONObject.parseObject(allTeacherLeaveDataConfig.getParanValue());
+        JSONObject organTeacherLeaveData = null;
+        if(Objects.nonNull(allTeacherLeaveData)){
+            organTeacherLeaveData = allTeacherLeaveData.getJSONObject(sysUser.getOrganId().toString());
+        }
+        if(Objects.isNull(organTeacherLeaveData)){
+            checkTeacherLeaveDate=false;
+        }
+
         SysConfig practiceCourseMinutesConfig = sysConfigService.findByParamName(SysConfigService.PRACTICE_COURSE_MINUTES);
         Integer practiceCourseMinutes = practiceCourseMinutesConfig.getParanValue(Integer.class);
         List<Integer> teacherIds = organAndSubjectTeachers.stream().map(TeacherBasicDto::getId).collect(Collectors.toList());
@@ -224,6 +237,31 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
 
             Map<Integer, List<CourseSchedule>> teacherCoursesMap = allTeacherCourses.stream().collect(Collectors.groupingBy(CourseSchedule::getActualTeacherId));
             for (Integer teacherId : teacherIds) {
+
+                JSONObject teacherLeaveData=null;
+                if(checkTeacherLeaveDate){
+                    teacherLeaveData=organTeacherLeaveData.getJSONObject(teacherId.toString());
+                }
+                Date leaveStartTime=null;
+                Date leaveEndTime=null;
+                if(Objects.isNull(teacherLeaveData)){
+                    checkTeacherLeaveDate=false;
+                }else{
+                    leaveStartTime=teacherLeaveData.getDate("leave_start_time");
+                    leaveEndTime=teacherLeaveData.getDate("leave_end_time");
+                }
+
+                if(checkTeacherLeaveDate){
+                    if(practiceGroup.getFirstCourseTime().before(leaveEndTime)
+                            && firstClassEndTime.after(leaveStartTime)){
+                        continue;
+                    }
+                    if(practiceGroup.getSecondCourseTime().before(leaveEndTime)
+                            && secondClassEndTime.after(leaveStartTime)){
+                        continue;
+                    }
+                }
+
                 List<CourseSchedule> teacherCourses = teacherCoursesMap.get(teacherId);
                 if (CollectionUtils.isEmpty(teacherCourses)) {
                     if (!excludeFirstTime) {
@@ -375,6 +413,18 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
 
         List<Integer> teacherIds = schoolSubjectTeachersMap.get(schoolId).get(practiceGroup.getSubjectId());
         teacherDao.lockTeachers(teacherIds);
+
+        boolean checkTeacherLeaveDate = true;
+        SysConfig allTeacherLeaveDataConfig = sysConfigService.findByParamName(SysConfigService.TEACHER_LEAVE_DATA);
+        JSONObject allTeacherLeaveData = JSONObject.parseObject(allTeacherLeaveDataConfig.getParanValue());
+        JSONObject organTeacherLeaveData = null;
+        if(Objects.nonNull(allTeacherLeaveData)){
+            organTeacherLeaveData = allTeacherLeaveData.getJSONObject(GUANGZHOU_ORGAN_ID.toString());
+        }
+        if(Objects.isNull(organTeacherLeaveData)){
+            checkTeacherLeaveDate=false;
+        }
+
         SysConfig practiceCourseMinutesConfig = sysConfigService.findByParamName(SysConfigService.PRACTICE_COURSE_MINUTES);
         Integer practiceCourseMinutes = practiceCourseMinutesConfig.getParanValue(Integer.class);
         Date now = new Date();
@@ -414,6 +464,31 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
 
             Map<Integer, List<CourseSchedule>> teacherCoursesMap = allTeacherCourses.stream().collect(Collectors.groupingBy(CourseSchedule::getActualTeacherId));
             for (Integer teacherId : teacherIds) {
+
+                JSONObject teacherLeaveData=null;
+                if(checkTeacherLeaveDate){
+                    teacherLeaveData=organTeacherLeaveData.getJSONObject(teacherId.toString());
+                }
+                Date leaveStartTime=null;
+                Date leaveEndTime=null;
+                if(Objects.isNull(teacherLeaveData)){
+                    checkTeacherLeaveDate=false;
+                }else{
+                    leaveStartTime=teacherLeaveData.getDate("leave_start_time");
+                    leaveEndTime=teacherLeaveData.getDate("leave_end_time");
+                }
+
+                if(checkTeacherLeaveDate){
+                    if(practiceGroup.getFirstCourseTime().before(leaveEndTime)
+                            && firstClassEndTime.after(leaveStartTime)){
+                        continue;
+                    }
+                    if(practiceGroup.getSecondCourseTime().before(leaveEndTime)
+                            && secondClassEndTime.after(leaveStartTime)){
+                        continue;
+                    }
+                }
+
                 List<CourseSchedule> teacherCourses = teacherCoursesMap.get(teacherId);
                 if (CollectionUtils.isEmpty(teacherCourses)) {
                     if (!excludeFirstTime) {
@@ -602,6 +677,17 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
         }
         teacherDao.lockTeachers(teacherIds);
 
+        boolean checkTeacherLeaveDate = true;
+        SysConfig allTeacherLeaveDataConfig = sysConfigService.findByParamName(SysConfigService.TEACHER_LEAVE_DATA);
+        JSONObject allTeacherLeaveData = JSONObject.parseObject(allTeacherLeaveDataConfig.getParanValue());
+        JSONObject organTeacherLeaveData = null;
+        if(Objects.nonNull(allTeacherLeaveData)){
+            organTeacherLeaveData = allTeacherLeaveData.getJSONObject(sysUser.getOrganId().toString());
+        }
+        if(Objects.isNull(organTeacherLeaveData)){
+            checkTeacherLeaveDate=false;
+        }
+
         Date now = new Date();
         if (now.before(applyStartDay)) {
             now = applyStartDay;
@@ -641,9 +727,31 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
                 if (excludeTeacherIds.contains(teacherId)) {
                     continue;
                 }
+                JSONObject teacherLeaveData=null;
+                if(checkTeacherLeaveDate){
+                    teacherLeaveData=organTeacherLeaveData.getJSONObject(teacherId.toString());
+                }
+                Date leaveStartTime=null;
+                Date leaveEndTime=null;
+                if(Objects.isNull(teacherLeaveData)){
+                    checkTeacherLeaveDate=false;
+                }else{
+                    leaveStartTime=teacherLeaveData.getDate("leave_start_time");
+                    leaveEndTime=teacherLeaveData.getDate("leave_end_time");
+                }
                 List<CourseSchedule> teacherCourses = teacherCoursesMap.get(teacherId);
                 if (CollectionUtils.isEmpty(teacherCourses)) {
-                    allTeacherFreeDates = new HashSet<>(enableApplyDates);
+                    for (Date enableApplyDate : enableApplyDates) {
+                        if (Objects.nonNull(firstClassTime) && DateUtil.isSameDay(enableApplyDate, firstClassTime)) {
+                            continue;
+                        }
+                        Date enableApplyDateCourseEndTime = DateUtil.addMinutes(enableApplyDate, practiceCourseMinutes);
+                        if (checkTeacherLeaveDate&&enableApplyDateCourseEndTime.after(leaveStartTime)
+                                &&enableApplyDate.before(leaveEndTime)) {
+                            continue;
+                        }
+                        allTeacherFreeDates.add(enableApplyDate);
+                    }
                     break;
                 }
 
@@ -694,6 +802,11 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
 
                 List<Date> tempEnableApplyDates = new ArrayList<>();
                 for (Date enableApplyDate : enableApplyDates) {
+                    Date enableApplyDateCourseEndTime = DateUtil.addMinutes(enableApplyDate, practiceCourseMinutes);
+                    if (checkTeacherLeaveDate&&enableApplyDateCourseEndTime.after(leaveStartTime)
+                            &&enableApplyDate.before(leaveEndTime)) {
+                        continue;
+                    }
                     if (!enableApplyDate.before(enableApplyStartDate)) {
                         tempEnableApplyDates.add(enableApplyDate);
                     }
@@ -748,6 +861,13 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
                 }
             }
             if (!CollectionUtils.isEmpty(allTeacherFreeDates)) {
+//                if(Objects.nonNull(firstClassTime)){
+//                    Set<String> days = allTeacherFreeDates.stream()
+//                            .map(date -> DateUtil.dateToString(date, "yyyy-MM-dd")).collect(Collectors.toSet());
+//                    if(days.size()<2){
+//                        continue;
+//                    }
+//                }
                 break;
             }
         }

+ 1 - 0
mec-biz/src/main/resources/config/mybatis/TeacherMapper.xml

@@ -304,6 +304,7 @@
             AND (t.organ_id_=#{organId} OR FIND_IN_SET(#{organId},t.flow_organ_range_))
             AND t.job_nature_='FULL_TIME'
             AND su.del_flag_=0 AND su.lock_flag_=0
+            AND t.organ_id_!=36 AND t.organ_id_!=38
     </select>
     <select id="findTeacherByOrganAndSubject" resultMap="TeacherBasicDto">
         SELECT