|
@@ -781,7 +781,12 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
|
|
|
*/
|
|
|
@Override
|
|
|
public IPage<PracticeTeacherVo> teacherList(IPage<PracticeTeacherVo> page, PracticeTeacherSearch search) {
|
|
|
- return page.setRecords(baseMapper.teacherList(page, search));
|
|
|
+ if (search.getScreen() != null && search.getScreen()) {
|
|
|
+ search.setTeacherIdList(getTeacherId(30));
|
|
|
+ return page.setRecords(baseMapper.teacherList(page, search));
|
|
|
+ } else {
|
|
|
+ return page.setRecords(baseMapper.teacherList(page, search));
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -1331,52 +1336,125 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
|
|
|
return sysConfig;
|
|
|
}
|
|
|
|
|
|
- public void test() {
|
|
|
- //1.查询所有过审的老师
|
|
|
+ /**
|
|
|
+ * 获取未来30天有空老师id
|
|
|
+ *
|
|
|
+ * @param amount 未来天数
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public List<Long> getTeacherId(Integer amount) {
|
|
|
+ if (amount == null) {
|
|
|
+ amount = 30;
|
|
|
+ }
|
|
|
+ //查询所有过审的老师时间配置
|
|
|
List<TeacherFreeTime> teacherFreeTime = teacherFreeTimeDao.getTeacherFreeTime();
|
|
|
|
|
|
- //2.根据配置是否跳过节假日分组
|
|
|
- //跳过节假日
|
|
|
+ //老师配置-跳过节假日
|
|
|
List<TeacherFreeTime> skipHoliday = teacherFreeTime.stream().filter(item -> item.getSkipHolidayFlag()).collect(Collectors.toList());
|
|
|
- //不跳过节假日
|
|
|
+ //老师配置
|
|
|
List<TeacherFreeTime> noSkipHoliday = teacherFreeTime.stream().filter(item -> !item.getSkipHolidayFlag()).collect(Collectors.toList());
|
|
|
|
|
|
- //3.查询节假日
|
|
|
+ //查询节假日
|
|
|
HolidaysFestivals holidays = holidaysFestivalsDao.queryByYear(Integer.parseInt(DateUtil.getYear(new Date())));
|
|
|
String[] strs = holidays.getHolidaysFestivalsJson().split(",");
|
|
|
List<String> holiday = Arrays.asList(strs);
|
|
|
|
|
|
- //4.获取未来30天日期
|
|
|
- List<String> futureDays = DateUtil.getFutureDays(30);
|
|
|
- //5.获取未来30天日期(剔除节假日)
|
|
|
+ //未来30天日期
|
|
|
+ List<String> futureDays = DateUtil.getFutureDays(amount);
|
|
|
+ //未来30天日期-跳过节假日
|
|
|
List<String> futureDaysNoVacation = futureDays.stream().filter(item -> !holiday.contains(item)).collect(Collectors.toList());
|
|
|
|
|
|
- Map<Long, Object> map = new HashMap<>();
|
|
|
+ //查询所有老师未开始、进行中的课程
|
|
|
+ List<String> statusList = Lists.newArrayList(CourseScheduleEnum.NOT_START.getCode(), CourseScheduleEnum.ING.getCode());
|
|
|
|
|
|
+ List<Long> teacherIdList = new ArrayList<>();
|
|
|
+ getAllTimeConfig(skipHoliday, futureDaysNoVacation, teacherIdList);//跳过节假日配置
|
|
|
+ getAllTimeConfig(noSkipHoliday, futureDays, teacherIdList);//未跳过节假日配置
|
|
|
|
|
|
- //6.遍历老师获取周1-7配置
|
|
|
- for (TeacherFreeTime freeTimeConfig : skipHoliday) {//跳过节假日
|
|
|
- String mondayConfig = freeTimeConfig.getMonday();
|
|
|
- List<DateVo> mondayConfigList = JSONObject.parseArray(mondayConfig, DateVo.class);
|
|
|
- List<DateChangeVo> rList = new ArrayList<>();//未来30天所有周一排课时间
|
|
|
+ return teacherIdList;
|
|
|
+ }
|
|
|
|
|
|
- map.put(freeTimeConfig.getId(), rList);
|
|
|
- for (String day : futureDaysNoVacation) {//遍历未来30天跳过节假日
|
|
|
- String week = DateUtil.getWeek(day);
|
|
|
- if (week.equals("monday")) {//当前时间为周一
|
|
|
- splicingDate(day, mondayConfigList, rList);
|
|
|
- }
|
|
|
+ /**
|
|
|
+ * 获取未来30天有空老师id
|
|
|
+ *
|
|
|
+ * @param teacherFreeTime 老师配置
|
|
|
+ * @param futureDay 未来30天日期
|
|
|
+ * @param idList 未约满老师id集合
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public List<Long> getAllTimeConfig(List<TeacherFreeTime> teacherFreeTime, List<String> futureDay, List<Long> idList) {
|
|
|
+ List<String> statusList = Lists.newArrayList(CourseScheduleEnum.NOT_START.getCode(), CourseScheduleEnum.ING.getCode());
|
|
|
+
|
|
|
+ for (TeacherFreeTime freeTimeConfig : teacherFreeTime) {//遍历老师配置
|
|
|
+ //根据老师id查询未开始、进行中的课程
|
|
|
+ List<CourseSchedule> scheduleList = this.list(Wrappers.<CourseSchedule>lambdaQuery()
|
|
|
+ .eq(CourseSchedule::getTeacherId, freeTimeConfig.getTeacherId())
|
|
|
+ .in(CourseSchedule::getStatus, statusList)
|
|
|
+ .gt(CourseSchedule::getClassDate, DateUtil.getNowStr()));
|
|
|
+
|
|
|
+ if (CollectionUtils.isEmpty(scheduleList)) {//无人购课直接跳出本次循环
|
|
|
+ idList.add(freeTimeConfig.getTeacherId());
|
|
|
+ continue;
|
|
|
}
|
|
|
- }
|
|
|
- System.out.println(map);
|
|
|
|
|
|
- //7.遍历30天日期拼接配置 生成日历
|
|
|
+ //获取一周配置格式化
|
|
|
+ List<DateVo> monday = JSONObject.parseArray(freeTimeConfig.getMonday(), DateVo.class);
|
|
|
+ List<DateVo> tuesday = JSONObject.parseArray(freeTimeConfig.getTuesday(), DateVo.class);
|
|
|
+ List<DateVo> wednesday = JSONObject.parseArray(freeTimeConfig.getWednesday(), DateVo.class);
|
|
|
+ List<DateVo> thursday = JSONObject.parseArray(freeTimeConfig.getThursday(), DateVo.class);
|
|
|
+ List<DateVo> friday = JSONObject.parseArray(freeTimeConfig.getFriday(), DateVo.class);
|
|
|
+ List<DateVo> saturday = JSONObject.parseArray(freeTimeConfig.getSaturday(), DateVo.class);
|
|
|
+ List<DateVo> sunday = JSONObject.parseArray(freeTimeConfig.getSunday(), DateVo.class);
|
|
|
+
|
|
|
+ //存储未来30天所有时间
|
|
|
+ List<DateChangeVo> rList = new ArrayList<>();
|
|
|
+
|
|
|
+ for (String day : futureDay) {
|
|
|
+ switch (DateUtil.getWeek(day)) {
|
|
|
+ case "monday":
|
|
|
+ splicingDate(day, monday, rList);
|
|
|
+ break;
|
|
|
+ case "tuesday":
|
|
|
+ splicingDate(day, tuesday, rList);
|
|
|
+ break;
|
|
|
+ case "wednesday":
|
|
|
+ splicingDate(day, wednesday, rList);
|
|
|
+ break;
|
|
|
+ case "thursday":
|
|
|
+ splicingDate(day, thursday, rList);
|
|
|
+ break;
|
|
|
+ case "friday":
|
|
|
+ splicingDate(day, friday, rList);
|
|
|
+ break;
|
|
|
+ case "saturday":
|
|
|
+ splicingDate(day, saturday, rList);
|
|
|
+ break;
|
|
|
+ case "sunday":
|
|
|
+ splicingDate(day, sunday, rList);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
- //8.根据老师id查询未来课程时间
|
|
|
+ //记录冲突索引
|
|
|
+ List<Integer> indexList = new ArrayList<>();
|
|
|
|
|
|
- //9.遍历7.8校验区间是否重合
|
|
|
+ for (int i = 0; i < rList.size(); i++) {//遍历未来30天所有时间
|
|
|
+ DateChangeVo dateChange = rList.get(i);
|
|
|
+ for (CourseSchedule schedule : scheduleList) {//遍历已排课时间
|
|
|
+ //校验当前时间 与 排课时间是否冲突 记录冲突时间索引
|
|
|
+ if (inInterSection(dateChange.getStartTime(), dateChange.getEndTime(), schedule.getStartTime(), schedule.getEndTime())) {
|
|
|
+ indexList.add(i);
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
- //10.记录没重合老师id
|
|
|
+ //冲突数<配置数 则有空档期 记录老师id
|
|
|
+ if (indexList.size() < rList.size()) {
|
|
|
+ idList.add(freeTimeConfig.getTeacherId());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return idList;
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -1389,10 +1467,12 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
|
|
|
*/
|
|
|
public List<DateChangeVo> splicingDate(String day, List<DateVo> strDateList, List<DateChangeVo> rList) {
|
|
|
for (DateVo vo : strDateList) {
|
|
|
- DateChangeVo dateChange = new DateChangeVo();
|
|
|
- dateChange.setStartTime(DateUtil.strToDate(day + " " + vo.getStartTime()));
|
|
|
- dateChange.setEndTime(DateUtil.strToDate(day + " " + vo.getEndTime()));
|
|
|
- rList.add(dateChange);
|
|
|
+ if (vo != null) {
|
|
|
+ DateChangeVo dateChange = new DateChangeVo();
|
|
|
+ dateChange.setStartTime(DateUtil.strToDate(day + " " + vo.getStartTime()));
|
|
|
+ dateChange.setEndTime(DateUtil.strToDate(day + " " + vo.getEndTime()));
|
|
|
+ rList.add(dateChange);
|
|
|
+ }
|
|
|
}
|
|
|
return rList;
|
|
|
}
|
|
@@ -1403,7 +1483,7 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
|
|
|
* @Date: 2022/5/17
|
|
|
*/
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
- public void scheduleTask(){
|
|
|
+ public void scheduleTask() {
|
|
|
baseMapper.updateStartTime();
|
|
|
baseMapper.updateEndTime();
|
|
|
}
|