Browse Source

ignore_files

Joburgess 5 years ago
parent
commit
01050b6a9b

+ 111 - 74
mec-biz/src/main/java/com/ym/mec/biz/service/impl/PracticeGroupServiceImpl.java

@@ -80,10 +80,11 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
 
     private static Map<Integer,String> subjectSubjectsMap=new HashMap<>();
 
-    private static Date activityStartDate,activityEndDate;
+    private static Date activityStartDate,activityEndDate,applyStartDay;
 
     static{
-        activityStartDate=DateUtil.stringToDate("2020-02-01 00:00:00");
+        applyStartDay=DateUtil.stringToDate("2020-02-08 00:00:00");
+        activityStartDate=DateUtil.stringToDate("2020-02-09 00:00:00");
         activityEndDate=DateUtil.stringToDate("2020-03-25 00:00:00");
 
         schoolSubjectTeachersMap=new HashMap<>();
@@ -178,45 +179,57 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
         List<Integer> teacherIds = organAndSubjectTeachers.stream().map(TeacherBasicDto::getId).collect(Collectors.toList());
         Date now = new Date();
         Calendar calendar = Calendar.getInstance();
+        if(now.before(applyStartDay)){
+            now=applyStartDay;
+        }
         calendar.setTime(now);
         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<CourseSchedule> allTeacherCourses = courseScheduleDao.findTeachersCoursesWithDateRange(teacherIds, applyStartDay, applyEndDay);
         List<Integer> includeTeacherIds=new ArrayList<>();
+        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> allTeacherCourses = courseScheduleDao.findTeachersCoursesWithDateRange(teacherIds, applyStartDay, applyEndDay);
 
-        Date firstClassEndTime = DateUtil.addMinutes(practiceGroup.getFirstCourseTime(), practiceCourseMinutes);
-        Date secondClassEndTime = DateUtil.addMinutes(practiceGroup.getSecondCourseTime(), practiceCourseMinutes);
+            Date firstClassEndTime = DateUtil.addMinutes(practiceGroup.getFirstCourseTime(), practiceCourseMinutes);
+            Date secondClassEndTime = DateUtil.addMinutes(practiceGroup.getSecondCourseTime(), practiceCourseMinutes);
 
-        Map<Integer, List<CourseSchedule>> teacherCoursesMap = allTeacherCourses.stream().collect(Collectors.groupingBy(CourseSchedule::getActualTeacherId));
-        for (Integer teacherId : teacherIds) {
-            List<CourseSchedule> teacherCourses = teacherCoursesMap.get(teacherId);
-            if(CollectionUtils.isEmpty(teacherCourses)){
-                includeTeacherIds.add(teacherId);
-                continue;
-            }
-            teacherCourses.sort(Comparator.comparing(CourseSchedule::getStartClassTime));
-            boolean enableCreateFirstCourse=true;
-            boolean enableCreateSecondCourse=true;
-            for (int i=0;i<teacherCourses.size()-1;i++) {
-                CourseSchedule preCourseSchedule = teacherCourses.get(i);
-
-                if(practiceGroup.getFirstCourseTime().before(preCourseSchedule.getEndClassTime())
-                        &&firstClassEndTime.after(preCourseSchedule.getStartClassTime())){
-                    enableCreateFirstCourse=false;
+            Map<Integer, List<CourseSchedule>> teacherCoursesMap = allTeacherCourses.stream().collect(Collectors.groupingBy(CourseSchedule::getActualTeacherId));
+            for (Integer teacherId : teacherIds) {
+                List<CourseSchedule> teacherCourses = teacherCoursesMap.get(teacherId);
+                if(CollectionUtils.isEmpty(teacherCourses)){
+                    includeTeacherIds.add(teacherId);
+                    continue;
                 }
+                teacherCourses.sort(Comparator.comparing(CourseSchedule::getStartClassTime));
+                boolean enableCreateFirstCourse=true;
+                boolean enableCreateSecondCourse=true;
+                for (int i=0;i<teacherCourses.size()-1;i++) {
+                    CourseSchedule preCourseSchedule = teacherCourses.get(i);
+
+                    if(practiceGroup.getFirstCourseTime().before(preCourseSchedule.getEndClassTime())
+                            &&firstClassEndTime.after(preCourseSchedule.getStartClassTime())){
+                        enableCreateFirstCourse=false;
+                    }
 
-                if(practiceGroup.getSecondCourseTime().before(preCourseSchedule.getEndClassTime())
-                        &&secondClassEndTime.after(preCourseSchedule.getStartClassTime())){
-                    enableCreateSecondCourse=false;
+                    if(practiceGroup.getSecondCourseTime().before(preCourseSchedule.getEndClassTime())
+                            &&secondClassEndTime.after(preCourseSchedule.getStartClassTime())){
+                        enableCreateSecondCourse=false;
+                    }
+                }
+                if (enableCreateFirstCourse&&enableCreateSecondCourse){
+                    includeTeacherIds.add(teacherId);
                 }
             }
-            if (enableCreateFirstCourse&&enableCreateSecondCourse){
-                includeTeacherIds.add(teacherId);
+            if(!CollectionUtils.isEmpty(includeTeacherIds)){
+                break;
             }
         }
         if(CollectionUtils.isEmpty(includeTeacherIds)){
@@ -267,46 +280,58 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
         SysConfig practiceCourseMinutesConfig = sysConfigService.findByParamName(SysConfigService.PRACTICE_COURSE_MINUTES);
         Integer practiceCourseMinutes=practiceCourseMinutesConfig.getParanValue(Integer.class);
         Date now = new Date();
+        if(now.before(applyStartDay)){
+            now=applyStartDay;
+        }
         Calendar calendar = Calendar.getInstance();
         calendar.setTime(now);
         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<CourseSchedule> allTeacherCourses = courseScheduleDao.findTeachersCoursesWithDateRange(teacherIds, applyStartDay, applyEndDay);
         List<Integer> includeTeacherIds=new ArrayList<>();
+        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;
+            }
 
-        Date firstClassEndTime = DateUtil.addMinutes(practiceGroup.getFirstCourseTime(), practiceCourseMinutes);
-        Date secondClassEndTime = DateUtil.addMinutes(practiceGroup.getSecondCourseTime(), practiceCourseMinutes);
+            List<CourseSchedule> allTeacherCourses = courseScheduleDao.findTeachersCoursesWithDateRange(teacherIds, applyStartDay, applyEndDay);
 
-        Map<Integer, List<CourseSchedule>> teacherCoursesMap = allTeacherCourses.stream().collect(Collectors.groupingBy(CourseSchedule::getActualTeacherId));
-        for (Integer teacherId : teacherIds) {
-            List<CourseSchedule> teacherCourses = teacherCoursesMap.get(teacherId);
-            if(CollectionUtils.isEmpty(teacherCourses)){
-                includeTeacherIds.add(teacherId);
-                continue;
-            }
-            teacherCourses.sort(Comparator.comparing(CourseSchedule::getStartClassTime));
-            boolean enableCreateFirstCourse=true;
-            boolean enableCreateSecondCourse=true;
-            for (int i=0;i<teacherCourses.size()-1;i++) {
-                CourseSchedule preCourseSchedule = teacherCourses.get(i);
-
-                if(practiceGroup.getFirstCourseTime().before(preCourseSchedule.getEndClassTime())
-                        &&firstClassEndTime.after(preCourseSchedule.getStartClassTime())){
-                    enableCreateFirstCourse=false;
+            Date firstClassEndTime = DateUtil.addMinutes(practiceGroup.getFirstCourseTime(), practiceCourseMinutes);
+            Date secondClassEndTime = DateUtil.addMinutes(practiceGroup.getSecondCourseTime(), practiceCourseMinutes);
+
+            Map<Integer, List<CourseSchedule>> teacherCoursesMap = allTeacherCourses.stream().collect(Collectors.groupingBy(CourseSchedule::getActualTeacherId));
+            for (Integer teacherId : teacherIds) {
+                List<CourseSchedule> teacherCourses = teacherCoursesMap.get(teacherId);
+                if(CollectionUtils.isEmpty(teacherCourses)){
+                    includeTeacherIds.add(teacherId);
+                    continue;
                 }
+                teacherCourses.sort(Comparator.comparing(CourseSchedule::getStartClassTime));
+                boolean enableCreateFirstCourse=true;
+                boolean enableCreateSecondCourse=true;
+                for (int i=0;i<teacherCourses.size()-1;i++) {
+                    CourseSchedule preCourseSchedule = teacherCourses.get(i);
+
+                    if(practiceGroup.getFirstCourseTime().before(preCourseSchedule.getEndClassTime())
+                            &&firstClassEndTime.after(preCourseSchedule.getStartClassTime())){
+                        enableCreateFirstCourse=false;
+                    }
 
-                if(practiceGroup.getSecondCourseTime().before(preCourseSchedule.getEndClassTime())
-                        &&secondClassEndTime.after(preCourseSchedule.getStartClassTime())){
-                    enableCreateSecondCourse=false;
+                    if(practiceGroup.getSecondCourseTime().before(preCourseSchedule.getEndClassTime())
+                            &&secondClassEndTime.after(preCourseSchedule.getStartClassTime())){
+                        enableCreateSecondCourse=false;
+                    }
+                }
+                if (enableCreateFirstCourse&&enableCreateSecondCourse){
+                    includeTeacherIds.add(teacherId);
                 }
             }
-            if (enableCreateFirstCourse&&enableCreateSecondCourse){
-                includeTeacherIds.add(teacherId);
+            if(!CollectionUtils.isEmpty(includeTeacherIds)){
+                break;
             }
         }
         if(CollectionUtils.isEmpty(includeTeacherIds)){
@@ -365,19 +390,37 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
             throw new BizException("未找到用户分部属性");
         }
         Map result = new HashMap();
-        List<TeacherBasicDto> organAndSubjectTeachers = teacherDao.findTeaTeachersByOrganAndSubject(sysUser.getOrganId(), subjectSubjectsMap.get(subjectId));
-        if (CollectionUtils.isEmpty(organAndSubjectTeachers)) {
-            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());
+        List<Integer> teacherIds=new ArrayList<>();
+
+        //如果是广州分部的,并且声部满足条件的需要特殊处理
+        if(sysUser.getOrganId().equals(GUANGZHOU_ORGAN_ID)&&GUANGZHOU_SUBJECTIDS.contains(subjectId)){
+            List<MusicGroup>  userMusicGroups=musicGroupDao.findUserMusicGroups(userId);
+            if(!CollectionUtils.isEmpty(userMusicGroups)){
+                Collections.shuffle(userMusicGroups);
+                Integer schoolId = userMusicGroups.get(0).getSchoolId();
+                if(schoolSubjectTeachersMap.containsKey(schoolId)){
+                    teacherIds = schoolSubjectTeachersMap.get(schoolId).get(subjectId);
+                }
+            }
+        }
+        if(CollectionUtils.isEmpty(teacherIds)){
+            List<TeacherBasicDto> organAndSubjectTeachers = teacherDao.findTeaTeachersByOrganAndSubject(sysUser.getOrganId(), subjectSubjectsMap.get(subjectId));
+            if (CollectionUtils.isEmpty(organAndSubjectTeachers)) {
+                result.put("teacherFreeDates",new ArrayList<>());
+                return result;
+            }
+            teacherIds = organAndSubjectTeachers.stream().map(TeacherBasicDto::getId).collect(Collectors.toList());
+        }
+
         Date now = new Date();
+        if(now.before(applyStartDay)){
+            now=applyStartDay;
+        }
         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);
@@ -457,6 +500,9 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
         List<Date> result=new ArrayList<>();
         Calendar calendar = Calendar.getInstance();
         Date now = new Date();
+        if(now.before(applyStartDay)){
+            now=applyStartDay;
+        }
         calendar.setTime(now);
         calendar.set(Calendar.SECOND, 0);
         SysConfig practiceApplyStartTimeConfig = sysConfigService.findByParamName(SysConfigService.PRACTICE_APPLY_START_TIME);
@@ -497,15 +543,6 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
         }
         SysConfig practiceCourseSalaryConfig = sysConfigService.findByParamName(SysConfigService.PRACTICE_COURSE_SALARY);
         Date now = new Date();
-        Calendar calendar = Calendar.getInstance();
-        calendar.setTime(now);
-        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,8);
-        Date applyEndDay = calendar.getTime();
         if (practiceGroup.getFirstCourseTime().before(activityStartDate)
                 ||practiceGroup.getFirstCourseTime().after(activityEndDate)) {
             throw new BizException("预约时间超过范围");