|
@@ -80,7 +80,12 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
|
|
|
|
|
|
private static Map<Integer,String> subjectSubjectsMap=new HashMap<>();
|
|
private static Map<Integer,String> subjectSubjectsMap=new HashMap<>();
|
|
|
|
|
|
|
|
+ private static Date activityStartDate,activityEndDate;
|
|
|
|
+
|
|
static{
|
|
static{
|
|
|
|
+ activityStartDate=DateUtil.stringToDate("2020-02-01 00:00:00");
|
|
|
|
+ activityEndDate=DateUtil.stringToDate("2020-03-25 00:00:00");
|
|
|
|
+
|
|
schoolSubjectTeachersMap=new HashMap<>();
|
|
schoolSubjectTeachersMap=new HashMap<>();
|
|
Map<Integer,List<Integer>> subjectTeachersMap1=new HashMap<>();
|
|
Map<Integer,List<Integer>> subjectTeachersMap1=new HashMap<>();
|
|
subjectTeachersMap1.put(2,Arrays.asList(new Integer[]{100887,100353,100854,102227}));
|
|
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<>());
|
|
result.put("teacherFreeDates",new ArrayList<>());
|
|
return result;
|
|
return result;
|
|
}
|
|
}
|
|
|
|
+ Set<Date> allTeacherFreeDates=new HashSet<>();
|
|
SysConfig practiceCourseMinutesConfig = sysConfigService.findByParamName(SysConfigService.PRACTICE_COURSE_MINUTES);
|
|
SysConfig practiceCourseMinutesConfig = sysConfigService.findByParamName(SysConfigService.PRACTICE_COURSE_MINUTES);
|
|
Integer practiceCourseMinutes=practiceCourseMinutesConfig.getParanValue(Integer.class);
|
|
Integer practiceCourseMinutes=practiceCourseMinutesConfig.getParanValue(Integer.class);
|
|
List<Integer> teacherIds = organAndSubjectTeachers.stream().map(TeacherBasicDto::getId).collect(Collectors.toList());
|
|
List<Integer> teacherIds = organAndSubjectTeachers.stream().map(TeacherBasicDto::getId).collect(Collectors.toList());
|
|
Date now = new Date();
|
|
Date now = new Date();
|
|
Calendar calendar = Calendar.getInstance();
|
|
Calendar calendar = Calendar.getInstance();
|
|
calendar.setTime(now);
|
|
calendar.setTime(now);
|
|
|
|
+ findTeacherFreeTimes:
|
|
calendar.set(Calendar.HOUR_OF_DAY, 0);
|
|
calendar.set(Calendar.HOUR_OF_DAY, 0);
|
|
calendar.set(Calendar.MINUTE, 0);
|
|
calendar.set(Calendar.MINUTE, 0);
|
|
calendar.set(Calendar.SECOND, 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) {
|
|
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);
|
|
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;
|
|
return result;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -487,14 +506,12 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
|
|
Date applyStartDay = calendar.getTime();
|
|
Date applyStartDay = calendar.getTime();
|
|
calendar.add(Calendar.DATE,8);
|
|
calendar.add(Calendar.DATE,8);
|
|
Date applyEndDay = calendar.getTime();
|
|
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("预约时间超过范围");
|
|
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("预约时间超过范围");
|
|
throw new BizException("预约时间超过范围");
|
|
}
|
|
}
|
|
|
|
|
|
@@ -502,7 +519,17 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
|
|
allCourseDates.add(practiceGroup.getFirstCourseTime());
|
|
allCourseDates.add(practiceGroup.getFirstCourseTime());
|
|
allCourseDates.add(practiceGroup.getSecondCourseTime());
|
|
allCourseDates.add(practiceGroup.getSecondCourseTime());
|
|
allCourseDates.add(DateUtil.addDays(practiceGroup.getFirstCourseTime(),7));
|
|
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));
|
|
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));
|
|
allCourseDates.sort(Comparator.comparing(Date::getTime));
|
|
|
|
|
|
Integer applyTimes = practiceGroupDao.countUserPracticeApplyRecord(practiceGroup.getStudentId());
|
|
Integer applyTimes = practiceGroupDao.countUserPracticeApplyRecord(practiceGroup.getStudentId());
|