|
|
|
@ -39,10 +39,14 @@ import org.springframework.validation.annotation.Validated;
|
|
|
|
|
|
|
|
|
|
import javax.validation.constraints.NotNull;
|
|
|
|
|
import java.util.*;
|
|
|
|
|
import java.util.concurrent.CopyOnWriteArrayList;
|
|
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
|
|
|
|
import static cn.hutool.core.collection.CollUtil.join;
|
|
|
|
|
import static cn.hutool.core.date.DatePattern.NORM_DATE_PATTERN;
|
|
|
|
|
import static cn.hutool.core.date.DateUtil.parseDate;
|
|
|
|
|
import static com.ibeetl.admin.core.util.DateUtil.weekNumberInList;
|
|
|
|
|
import static java.util.stream.Collectors.groupingBy;
|
|
|
|
|
import static java.util.stream.Collectors.toMap;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -76,9 +80,28 @@ public class TeacherOpenCourseScheduleSessionService extends CoreBaseService<Tea
|
|
|
|
|
public PageQuery<TeacherOpenCourseScheduleSession> queryByConditionGroup(PageQuery query){
|
|
|
|
|
PageQuery ret = teacherOpenCourseScheduleSessionDao.queryByConditionGroup(query);
|
|
|
|
|
queryListAfter(ret.getList());
|
|
|
|
|
|
|
|
|
|
((List<TeacherOpenCourseScheduleSession>)ret.getList()).parallelStream()
|
|
|
|
|
.forEach(scheduleSession -> {
|
|
|
|
|
// 每周根据周次进行拆分
|
|
|
|
|
scheduleSession.set("partitionList", sessionTagListPartition(scheduleSession.getSessionTagList()));
|
|
|
|
|
});
|
|
|
|
|
return ret;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 排课多周次每周进行拆分
|
|
|
|
|
*
|
|
|
|
|
* @param sessionTagList 至少确保已经根据日期排过序
|
|
|
|
|
* @return
|
|
|
|
|
*/
|
|
|
|
|
private Map<Integer, List<TeacherOpenCourseScheduleSessionSnap>> sessionTagListPartition(List<TeacherOpenCourseScheduleSessionSnap> sessionTagList) {
|
|
|
|
|
Map<Integer, List<TeacherOpenCourseScheduleSessionSnap>> listMap = sessionTagList.stream()
|
|
|
|
|
.collect(groupingBy(TeacherOpenCourseScheduleSessionSnap::getTeacherOpenCourseScheduleSessionSnapCurrentWeekNumber));
|
|
|
|
|
|
|
|
|
|
return listMap;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public PageQuery<TeacherOpenCourseScheduleSession>queryByConditionQuery(PageQuery query){
|
|
|
|
|
PageQuery ret = teacherOpenCourseScheduleSessionDao.queryByConditionQuery(query);
|
|
|
|
|
queryListAfter(ret.getList());
|
|
|
|
@ -215,7 +238,7 @@ public class TeacherOpenCourseScheduleSessionService extends CoreBaseService<Tea
|
|
|
|
|
public InsertByOptionResult insertScheduleSessionByOption(TeacherOpenCourseScheduleSessionOptions options) {
|
|
|
|
|
|
|
|
|
|
// 偏移周
|
|
|
|
|
DateTime startTime = DateUtil.parseDate(options.getStartTime());
|
|
|
|
|
DateTime startTime = parseDate(options.getStartTime());
|
|
|
|
|
DateTime endTime = DateUtil.offsetWeek(startTime, options.getWeekNum());
|
|
|
|
|
List<DateTime> dateTimes = DateUtil.rangeToList(startTime, endTime, DateField.DAY_OF_YEAR);
|
|
|
|
|
|
|
|
|
@ -270,6 +293,9 @@ public class TeacherOpenCourseScheduleSessionService extends CoreBaseService<Tea
|
|
|
|
|
List<DateTime> dateTimes = insertByOptionResult.getDateTimes();
|
|
|
|
|
Long teacherOpenCourseScheduleSessionId = insertByOptionResult.getTeacherOpenCourseScheduleSessionId();
|
|
|
|
|
|
|
|
|
|
DateTime startTime = parseDate(options.getStartTime());
|
|
|
|
|
DateTime endTime = DateUtil.offsetWeek(startTime, options.getWeekNum());
|
|
|
|
|
|
|
|
|
|
// 断言,确保开课节次不为空
|
|
|
|
|
Assert.notEmpty(options.getSessionClassList(), "开课节次不能为空!");
|
|
|
|
|
|
|
|
|
@ -310,14 +336,17 @@ public class TeacherOpenCourseScheduleSessionService extends CoreBaseService<Tea
|
|
|
|
|
// 循环遍历 天
|
|
|
|
|
for (DateTime dateTime: dateTimes) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 根据跟教室ID分组
|
|
|
|
|
Map<Long, TeacherOpenCourseScheduleSessionClass> classIdMap =
|
|
|
|
|
Optional.ofNullable(teacherOpenCourseScheduleSessionClassDao.getValuesByQuery(classQuery)).orElseGet(Lists::emptyList)
|
|
|
|
|
.stream().collect(toMap(TeacherOpenCourseScheduleSessionClass::getTeacherOpenCourseScheduleSessionClassId, sc -> sc));
|
|
|
|
|
|
|
|
|
|
// 一个教室ID对应一个或多个开课节次ID
|
|
|
|
|
options.getSessionClassList().forEach((sessionClassId ,sessionTagIdsList) -> {
|
|
|
|
|
// 为防止lambda里修改集合。
|
|
|
|
|
CopyOnWriteArrayList<DateTime> finalDateTimes = new CopyOnWriteArrayList<>(dateTimes);
|
|
|
|
|
|
|
|
|
|
// 班级和课次列表遍历
|
|
|
|
|
options.getSessionClassList().forEach((sessionClassId , sessionTagIdsList) -> {
|
|
|
|
|
// 断言,确保开课节次不为空
|
|
|
|
|
Assert.notEmpty(sessionTagIdsList, "开课节次列表不能为空!");
|
|
|
|
|
// 课次的标签ID
|
|
|
|
@ -334,6 +363,10 @@ public class TeacherOpenCourseScheduleSessionService extends CoreBaseService<Tea
|
|
|
|
|
item.setTeacherOpenCourseScheduleSessionClassName(className);
|
|
|
|
|
item.setTeacherOpenCourseScheduleSessionDayTime(dateTime.toString(NORM_DATE_PATTERN));
|
|
|
|
|
item.setTeacherOpenCourseId(options.getTeacherOpenCourseId());
|
|
|
|
|
// 根据具体周
|
|
|
|
|
item.setTeacherOpenCourseScheduleSessionSnapCurrentWeekNumber(weekNumberInList(finalDateTimes, dateTime));
|
|
|
|
|
// 根据天数来
|
|
|
|
|
// item.setTeacherOpenCourseScheduleSessionSnapCurrentWeekNumber(weekNumberInList(finalDateTimes, dateTime, options.getWeekNum()));
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
teacherOpenCourseScheduleSessionSnapDao.insertBatch(res);
|
|
|
|
|