| 
					
				 | 
			
			
				@@ -64,6 +64,56 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     private TeacherDao teacherDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     private SysMessageService sysMessageService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private MusicGroupDao musicGroupDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private static Map<Integer,Map<Integer,List<Integer>>> schoolSubjectTeachersMap; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private static final Set<Integer> GUANGZHOU_SUBJECTIDS=new HashSet<Integer>(Arrays.asList(new Integer[]{2,4,5,12,13,15,23})); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    //广州分部编号 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private static final Integer GUANGZHOU_ORGAN_ID=3; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    static{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        schoolSubjectTeachersMap=new HashMap<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Map<Integer,List<Integer>> subjectTeachersMap1=new HashMap<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        subjectTeachersMap1.put(2,Arrays.asList(new Integer[]{100887,100353,100854,102227})); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        subjectTeachersMap1.put(4,Arrays.asList(new Integer[]{102209,101110,102084,102141,100753})); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        subjectTeachersMap1.put(5,Arrays.asList(new Integer[]{102140,100368,100354})); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        subjectTeachersMap1.put(12,Arrays.asList(new Integer[]{101088,100360,100366})); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        subjectTeachersMap1.put(13,Arrays.asList(new Integer[]{100363,100873})); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        subjectTeachersMap1.put(15,Arrays.asList(new Integer[]{100361,100358,102127,100736})); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        subjectTeachersMap1.put(23,Arrays.asList(new Integer[]{100966,102143,101161})); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Integer[] schoolIds1=new Integer[]{258,271,780,408,262,240,270,274,242,259,508,507,241,739,272,248,427,847,991}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        for (Integer schoolId : schoolIds1) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            schoolSubjectTeachersMap.put(schoolId,subjectTeachersMap1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Map<Integer,List<Integer>> subjectTeachersMap2=new HashMap<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        subjectTeachersMap2.put(2,Arrays.asList(new Integer[]{100812,100401,101683,100362,102147})); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        subjectTeachersMap2.put(4,Arrays.asList(new Integer[]{102096,102145,101386})); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        subjectTeachersMap2.put(5,Arrays.asList(new Integer[]{100939,101797,101809,102121})); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        subjectTeachersMap2.put(12,Arrays.asList(new Integer[]{100375,102210,100698})); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        subjectTeachersMap2.put(13,Arrays.asList(new Integer[]{100873,100876})); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        subjectTeachersMap2.put(15,Arrays.asList(new Integer[]{102294,102081,101111})); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        subjectTeachersMap2.put(23,Arrays.asList(new Integer[]{102142,102122,101188})); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Integer[] schoolIds2=new Integer[]{928,1044,243,269,250,932,502,943,954,846,266,428,819,961,492}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        for (Integer schoolId : schoolIds2) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            schoolSubjectTeachersMap.put(schoolId,subjectTeachersMap2); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Map<Integer,List<Integer>> subjectTeachersMap3=new HashMap<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        subjectTeachersMap3.put(2,Arrays.asList(new Integer[]{102139,101650})); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        subjectTeachersMap3.put(4,Arrays.asList(new Integer[]{101796,101387})); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        subjectTeachersMap3.put(5,Arrays.asList(new Integer[]{102229,101388})); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        subjectTeachersMap3.put(12,Arrays.asList(new Integer[]{100806,101950})); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        subjectTeachersMap3.put(13,Arrays.asList(new Integer[]{100806,101950})); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        subjectTeachersMap3.put(15,Arrays.asList(new Integer[]{102203,100640})); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        subjectTeachersMap3.put(23,Arrays.asList(new Integer[]{101915})); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Integer[] schoolIds3=new Integer[]{852,267,245,848,845,862,863,854,781,864,861,931,875}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        for (Integer schoolId : schoolIds3) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            schoolSubjectTeachersMap.put(schoolId,subjectTeachersMap3); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     public BaseDAO<Long, PracticeGroup> getDAO() { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -87,6 +137,15 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if (Objects.isNull(sysUser.getOrganId())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             throw new BizException("未找到用户分部属性"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //如果是广州分部的,并且声部满足条件的需要特殊处理 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if(sysUser.getOrganId().equals(GUANGZHOU_ORGAN_ID)&&GUANGZHOU_SUBJECTIDS.contains(practiceGroup.getSubjectId())){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            Integer teacherId=searchTeacherIdForGuangZhou(practiceGroup); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if(Objects.nonNull(teacherId)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                return teacherId; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         List<TeacherBasicDto> organAndSubjectTeachers = teacherDao.findTeaTeachersByOrganAndSubject(sysUser.getOrganId(), practiceGroup.getSubjectId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if (CollectionUtils.isEmpty(organAndSubjectTeachers)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             throw new BizException("未找到合适教师"); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -171,6 +230,80 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public Integer searchTeacherIdForGuangZhou(PracticeGroup practiceGroup) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<MusicGroup>  userMusicGroups=musicGroupDao.findUserMusicGroups(practiceGroup.getStudentId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if(CollectionUtils.isEmpty(userMusicGroups)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Collections.shuffle(userMusicGroups); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Integer schoolId = userMusicGroups.get(0).getSchoolId(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if(!schoolSubjectTeachersMap.containsKey(schoolId)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<Integer> teacherIds = schoolSubjectTeachersMap.get(schoolId).get(practiceGroup.getSubjectId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        SysConfig practiceCourseMinutesConfig = sysConfigService.findByParamName(SysConfigService.PRACTICE_COURSE_MINUTES); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Integer practiceCourseMinutes=practiceCourseMinutesConfig.getParanValue(Integer.class); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        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,7); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Date applyEndDay = calendar.getTime(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<CourseSchedule> allTeacherCourses = courseScheduleDao.findTeachersCoursesWithDateRange(teacherIds, applyStartDay, applyEndDay); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<Integer> includeTeacherIds=new ArrayList<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        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 (enableCreateFirstCourse&&enableCreateSecondCourse){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                includeTeacherIds.add(teacherId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if(CollectionUtils.isEmpty(includeTeacherIds)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<Map<Integer, Integer>> teacherCourseNumMaps = courseScheduleTeacherSalaryDao.countTeacherCourses(includeTeacherIds, GroupType.PRACTICE); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        HashMap<Integer,Integer> teacherCourseNumMap= (HashMap<Integer, Integer>) MapUtil.convertIntegerMap(teacherCourseNumMaps); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        for (Integer includeTeacherId : includeTeacherIds) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if(!teacherCourseNumMap.containsKey(includeTeacherId)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                teacherCourseNumMap.put(includeTeacherId,0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<Integer> temp=new ArrayList<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        teacherCourseNumMap.entrySet().stream() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                .sorted((r1,r2)->r1.getValue().compareTo(r2.getValue())) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                .forEach(result->temp.add(result.getKey())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return temp.get(0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     public Map getPracticeApplyParams(Integer userId) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         Map result = new HashMap(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         SysConfig practiceSubjectIdListConfig = sysConfigService.findByParamName(SysConfigService.PRACTICE_SUBJECT_ID_LIST); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -354,12 +487,11 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         allCourseDates.add(DateUtil.addDays(practiceGroup.getSecondCourseTime(),7)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         allCourseDates.sort(Comparator.comparing(Date::getTime)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        Integer applyTimes = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        applyTimes = practiceGroupDao.countUserPracticeApplyRecord(practiceGroup.getStudentId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Integer applyTimes = practiceGroupDao.countUserPracticeApplyRecord(practiceGroup.getStudentId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (applyTimes >= 1) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            throw new BizException("您的预约次数已经达到限制"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//        if (applyTimes >= 1) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//            throw new BizException("您的预约次数已经达到限制"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         applyTimes += 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         practiceGroup.setCoursesStartDate(allCourseDates.get(0)); 
			 |