|
@@ -313,14 +313,35 @@ public class FsUserCoursePeriodDaysServiceImpl extends ServiceImpl<FsUserCourseP
|
|
|
|
|
|
// 确定开始课次 - 从现有最大课次+1开始,确保连续性
|
|
|
int startLesson;
|
|
|
+ LocalDate startDate; // 新增:确定开始日期
|
|
|
+
|
|
|
if (param.getStartLesson() != null) {
|
|
|
startLesson = param.getStartLesson();
|
|
|
+ // 如果指定了起始课次,仍然基于营期开始时间计算日期
|
|
|
+ startDate = period.getPeriodStartingTime().plusDays(startLesson - 1);
|
|
|
} else {
|
|
|
// 获取现有最大课次,如果没有则从1开始
|
|
|
startLesson = existingDays.stream()
|
|
|
.mapToInt(FsUserCoursePeriodDays::getLesson)
|
|
|
.max()
|
|
|
.orElse(0) + 1;
|
|
|
+
|
|
|
+ // 关键修复:获取已存在课程的最后日期,从该日期的下一天开始
|
|
|
+ if (!existingDays.isEmpty()) {
|
|
|
+ // 按日期排序,获取最后一个课程的日期
|
|
|
+ LocalDate lastDate = existingDays.stream()
|
|
|
+ .map(FsUserCoursePeriodDays::getDayDate)
|
|
|
+ .filter(date -> date != null)
|
|
|
+ .max(LocalDate::compareTo)
|
|
|
+ .orElse(period.getPeriodStartingTime().plusDays(startLesson - 2));
|
|
|
+
|
|
|
+ startDate = lastDate.plusDays(1); // 从最后日期的下一天开始
|
|
|
+ log.info("基于已存在课程的最后日期计算起始日期:最后日期={}, 新起始日期={}", lastDate, startDate);
|
|
|
+ } else {
|
|
|
+ // 如果没有已存在的课程,从营期开始时间计算
|
|
|
+ startDate = period.getPeriodStartingTime();
|
|
|
+ log.info("营期暂无课程,从营期开始时间计算起始日期:{}", startDate);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
// 使用排序后的视频列表进行处理,确保按courseSort顺序添加
|
|
@@ -336,8 +357,9 @@ public class FsUserCoursePeriodDaysServiceImpl extends ServiceImpl<FsUserCourseP
|
|
|
// 设置课次 - 严格按排序后的顺序递增,确保有序
|
|
|
newDay.setLesson(startLesson + i);
|
|
|
|
|
|
- // 计算日期 - 基于课次计算正确日期(课次从1开始,所以偏移量是课次-1)
|
|
|
- LocalDate courseDate = period.getPeriodStartingTime().plusDays(newDay.getLesson() - 1);
|
|
|
+ // 计算日期 - 修复:基于起始日期递增,而不是基于课次计算
|
|
|
+ // 这样可以避免当已存在课程的日期与课次不对应时出现重复日期
|
|
|
+ LocalDate courseDate = startDate.plusDays(i);
|
|
|
newDay.setDayDate(courseDate);
|
|
|
|
|
|
// 设置时间 - 优先使用参数中的时间,其次使用视频默认时间
|