|  | @@ -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));
 |