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