Browse Source

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

zouxuan 5 năm trước cách đây
mục cha
commit
b859c57cce

+ 1 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/TeacherDao.java

@@ -75,7 +75,7 @@ public interface TeacherDao extends BaseDAO<Integer, Teacher> {
     List<TeacherBasicDto> findTeachers(@Param("userIds") List<Integer> userIds);
 
     /**
-     * @describe 获取指定声部和分部下的老师
+     * @describe 获取指定声部和分部下的全职老师
      * @author Joburgess
      * @date 2020/2/2
      * @param organId: 分部编号

+ 78 - 51
mec-biz/src/main/java/com/ym/mec/biz/service/impl/PracticeGroupServiceImpl.java

@@ -80,7 +80,12 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
 
     private static Map<Integer,String> subjectSubjectsMap=new HashMap<>();
 
+    private static Date activityStartDate,activityEndDate;
+
     static{
+        activityStartDate=DateUtil.stringToDate("2020-02-01 00:00:00");
+        activityEndDate=DateUtil.stringToDate("2020-03-25 00:00:00");
+
         schoolSubjectTeachersMap=new HashMap<>();
         Map<Integer,List<Integer>> subjectTeachersMap1=new HashMap<>();
         subjectTeachersMap1.put(2,Arrays.asList(new Integer[]{100887,100353,100854,102227}));
@@ -365,71 +370,85 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
             result.put("teacherFreeDates",new ArrayList<>());
             return result;
         }
+        Set<Date> allTeacherFreeDates=new HashSet<>();
         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());
         Date now = new Date();
         Calendar calendar = Calendar.getInstance();
         calendar.setTime(now);
+        findTeacherFreeTimes:
         calendar.set(Calendar.HOUR_OF_DAY, 0);
         calendar.set(Calendar.MINUTE, 0);
         calendar.set(Calendar.SECOND, 0);
-        calendar.add(Calendar.DATE,1);
-        Date applyStartDay = calendar.getTime();
-        calendar.add(Calendar.DATE,7);
-        Date applyEndDay = calendar.getTime();
-        List<Date> enableApplyDates = getEnableApplyDates(7);
-        List<CourseSchedule> allTeacherCourses = courseScheduleDao.findTeachersCoursesWithDateRange(teacherIds, applyStartDay, applyEndDay);
-        HashSet<Integer> excludeTeacherIds=new HashSet<>();
-        if(Objects.nonNull(firstClassTime)){
-            Date firstClassEndTime = DateUtil.addMinutes(firstClassTime, practiceCourseMinutes);
-            for (CourseSchedule teacherCourse : allTeacherCourses) {
-                if((!teacherCourse.getStartClassTime().before(firstClassTime)&&!teacherCourse.getStartClassTime().after(firstClassEndTime))
-                    ||(!teacherCourse.getEndClassTime().before(firstClassTime)&&!teacherCourse.getEndClassTime().after(firstClassEndTime))){
-                    excludeTeacherIds.add(teacherCourse.getActualTeacherId());
-                }
-            }
-        }
-        Map<Integer, List<CourseSchedule>> teacherCoursesMap = allTeacherCourses.stream().collect(Collectors.groupingBy(CourseSchedule::getActualTeacherId));
-        Set<Date> allTeacherFreeDates=new HashSet<>();
-        for (Integer teacherId : teacherIds) {
-            if(excludeTeacherIds.contains(teacherId)){
-                continue;
+        while (calendar.getTime().before(activityEndDate)){
+            calendar.add(Calendar.DATE,1);
+            Date applyStartDay = calendar.getTime();
+            calendar.add(Calendar.DATE,7);
+            Date applyEndDay = calendar.getTime();
+            if(applyEndDay.after(activityEndDate)){
+                applyEndDay=activityEndDate;
             }
-            List<CourseSchedule> teacherCourses = teacherCoursesMap.get(teacherId);
-            if(CollectionUtils.isEmpty(teacherCourses)){
-                allTeacherFreeDates=new HashSet<>(enableApplyDates);
-                break;
+            List<Date> enableApplyDates = getEnableApplyDates(7);
+            List<CourseSchedule> allTeacherCourses = courseScheduleDao.findTeachersCoursesWithDateRange(teacherIds, applyStartDay, applyEndDay);
+            HashSet<Integer> excludeTeacherIds=new HashSet<>();
+            if(Objects.nonNull(firstClassTime)){
+                Date firstClassEndTime = DateUtil.addMinutes(firstClassTime, practiceCourseMinutes);
+                for (CourseSchedule teacherCourse : allTeacherCourses) {
+                    if(firstClassTime.before(teacherCourse.getEndClassTime())
+                        &&firstClassEndTime.after(teacherCourse.getStartClassTime())){
+                        excludeTeacherIds.add(teacherCourse.getActualTeacherId());
+                    }
+                }
             }
-            teacherCourses.sort(Comparator.comparing(CourseSchedule::getStartClassTime));
-            for (int i=0;i<teacherCourses.size()-1;i++) {
-                CourseSchedule preCourseSchedule = teacherCourses.get(i);
-                CourseSchedule backCourseSchedule = teacherCourses.get(i+1);
-                if(i==0){
-                    for (Date enableApplyDate : enableApplyDates) {
-                        Date enableApplyDateCourseEndTime = DateUtil.addMinutes(enableApplyDate, practiceCourseMinutes);
-                        if(!enableApplyDateCourseEndTime.after(preCourseSchedule.getStartClassTime())){
-                            allTeacherFreeDates.add(enableApplyDate);
+            Map<Integer, List<CourseSchedule>> teacherCoursesMap = allTeacherCourses.stream().collect(Collectors.groupingBy(CourseSchedule::getActualTeacherId));
+            for (Integer teacherId : teacherIds) {
+                if(excludeTeacherIds.contains(teacherId)){
+                    continue;
+                }
+                List<CourseSchedule> teacherCourses = teacherCoursesMap.get(teacherId);
+                if(CollectionUtils.isEmpty(teacherCourses)){
+                    allTeacherFreeDates=new HashSet<>(enableApplyDates);
+                    break;
+                }
+                teacherCourses.sort(Comparator.comparing(CourseSchedule::getStartClassTime));
+                for (int j=0;j<teacherCourses.size()-1;j++) {
+                    CourseSchedule preCourseSchedule = teacherCourses.get(j);
+                    CourseSchedule backCourseSchedule = teacherCourses.get(j+1);
+                    if(j==0){
+                        for (Date enableApplyDate : enableApplyDates) {
+                            Date enableApplyDateCourseEndTime = DateUtil.addMinutes(enableApplyDate, practiceCourseMinutes);
+                            if(!enableApplyDateCourseEndTime.after(preCourseSchedule.getStartClassTime())){
+                                allTeacherFreeDates.add(enableApplyDate);
+                            }
+                        }
+                    }
+                    if (j==teacherCourses.size()-1){
+                        for (Date enableApplyDate : enableApplyDates) {
+                            if(!enableApplyDate.before(backCourseSchedule.getEndClassTime())){
+                                allTeacherFreeDates.add(enableApplyDate);
+                            }
                         }
                     }
-                }
-                if (i==teacherCourses.size()-1){
                     for (Date enableApplyDate : enableApplyDates) {
-                        if(!enableApplyDate.before(backCourseSchedule.getEndClassTime())){
+                        Date enableApplyDateCourseEndTime = DateUtil.addMinutes(enableApplyDate, practiceCourseMinutes);
+                        if(!enableApplyDate.before(preCourseSchedule.getEndClassTime())
+                                &&!enableApplyDateCourseEndTime.after(backCourseSchedule.getStartClassTime())){
                             allTeacherFreeDates.add(enableApplyDate);
                         }
                     }
                 }
-                for (Date enableApplyDate : enableApplyDates) {
-                    Date enableApplyDateCourseEndTime = DateUtil.addMinutes(enableApplyDate, practiceCourseMinutes);
-                    if(!enableApplyDate.before(preCourseSchedule.getEndClassTime())
-                            &&!enableApplyDateCourseEndTime.after(backCourseSchedule.getStartClassTime())){
-                        allTeacherFreeDates.add(enableApplyDate);
-                    }
-                }
             }
+            if(!CollectionUtils.isEmpty(allTeacherFreeDates)){
+                break;
+            }
+        }
+        if(!CollectionUtils.isEmpty(allTeacherFreeDates)){
+            Set<String> days = allTeacherFreeDates.stream()
+                    .map(date -> DateUtil.dateToString(date,"yyyy-MM-dd")).collect(Collectors.toSet());
+            result.put("teacherFreeDays",days);
+            result.put("teacherFreeDates",allTeacherFreeDates);
         }
-        result.put("teacherFreeDates",allTeacherFreeDates);
         return result;
     }
 
@@ -487,14 +506,12 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
         Date applyStartDay = calendar.getTime();
         calendar.add(Calendar.DATE,8);
         Date applyEndDay = calendar.getTime();
-        if (practiceGroup.getFirstCourseTime().before(applyStartDay)
-                || (practiceGroup.getFirstCourseTime().after(applyEndDay)
-                && !DateUtil.isSameDay(practiceGroup.getFirstCourseTime(), applyStartDay))) {
+        if (practiceGroup.getFirstCourseTime().before(activityStartDate)
+                ||practiceGroup.getFirstCourseTime().after(activityEndDate)) {
             throw new BizException("预约时间超过范围");
         }
-        if (practiceGroup.getSecondCourseTime().before(applyStartDay)
-                || (practiceGroup.getSecondCourseTime().after(applyEndDay)
-                && !DateUtil.isSameDay(practiceGroup.getSecondCourseTime(), applyStartDay))) {
+        if (practiceGroup.getSecondCourseTime().before(activityStartDate)
+                ||practiceGroup.getSecondCourseTime().after(activityEndDate)) {
             throw new BizException("预约时间超过范围");
         }
 
@@ -502,7 +519,17 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
         allCourseDates.add(practiceGroup.getFirstCourseTime());
         allCourseDates.add(practiceGroup.getSecondCourseTime());
         allCourseDates.add(DateUtil.addDays(practiceGroup.getFirstCourseTime(),7));
+        if(DateUtil.isSameDay(allCourseDates.get(1),allCourseDates.get(2))){
+            Date tempDate = allCourseDates.get(2);
+            allCourseDates.remove(2);
+            allCourseDates.add(DateUtil.addDays(tempDate,7));
+        }
         allCourseDates.add(DateUtil.addDays(practiceGroup.getSecondCourseTime(),7));
+        if(DateUtil.isSameDay(allCourseDates.get(2),allCourseDates.get(3))){
+            Date tempDate = allCourseDates.get(3);
+            allCourseDates.remove(3);
+            allCourseDates.add(DateUtil.addDays(tempDate,7));
+        }
         allCourseDates.sort(Comparator.comparing(Date::getTime));
 
         Integer applyTimes = practiceGroupDao.countUserPracticeApplyRecord(practiceGroup.getStudentId());

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

@@ -302,6 +302,7 @@
         WHERE
             INTE_ARRAY(#{subjectIds},t.subject_id_)
             AND (t.organ_id_=#{organId} OR FIND_IN_SET(#{organId},t.flow_organ_range_))
+            AND t.job_nature_='FULL_TIME'
     </select>
     <select id="findTeacherByOrganAndSubject" resultMap="TeacherBasicDto">
         SELECT