|
@@ -1470,6 +1470,9 @@ public class FsUserCourseVideoServiceImpl implements IFsUserCourseVideoService
|
|
|
return ResponseResult.fail(504, "课程项目不匹配");
|
|
|
}
|
|
|
|
|
|
+ if (!isUserCoursePeriodValid(param)) {
|
|
|
+ return ResponseResult.fail(504, "请观看最新的课程项目");
|
|
|
+ }
|
|
|
// 项目看课数限制
|
|
|
Integer logCount = fsUserCourseMapper.selectTodayCourseWatchLogCountByUserIdAndProjectId(param.getUserId(), param.getProjectId());
|
|
|
if (Objects.isNull(watchCourseVideo) && logCount > 0) {
|
|
@@ -1524,7 +1527,66 @@ public class FsUserCourseVideoServiceImpl implements IFsUserCourseVideoService
|
|
|
// }
|
|
|
return ResponseResult.ok(Boolean.TRUE);
|
|
|
}
|
|
|
+ /**
|
|
|
+ * 检查用户课程时间段是否有效
|
|
|
+ * @param param 查询参数
|
|
|
+ * @return 如果当前时间在有效范围内且状态为1,返回true,否则返回false
|
|
|
+ */
|
|
|
+ public boolean isUserCoursePeriodValid(FsUserCourseAddCompanyUserParam param) {
|
|
|
+ // 查询课程周期信息
|
|
|
+ FsUserCoursePeriodDays periodDays = getPeriodDaysInfo(param);
|
|
|
+
|
|
|
+ // 获取公司用户时间段信息
|
|
|
+ LocalDateTime[] companyUserTimeRange = getCompanyUserTimeRange(param);
|
|
|
+ LocalDateTime companyUserStartDateTime = companyUserTimeRange[0];
|
|
|
+ LocalDateTime companyUserEndDateTime = companyUserTimeRange[1];
|
|
|
+
|
|
|
+ // 确定实际使用的开始和结束时间
|
|
|
+ LocalDateTime effectiveStartTime = companyUserStartDateTime != null ?
|
|
|
+ companyUserStartDateTime : periodDays.getStartDateTime();
|
|
|
+ LocalDateTime effectiveEndTime = companyUserEndDateTime != null ?
|
|
|
+ companyUserEndDateTime : periodDays.getEndDateTime();
|
|
|
+ // 检查时间范围和状态
|
|
|
+ return DateUtil.isWithinRangeSafe(LocalDateTime.now(), effectiveStartTime, effectiveEndTime)&& periodDays.getStatus() == 1;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 其他辅助方法保持不变
|
|
|
+ private FsUserCoursePeriodDays getPeriodDaysInfo(FsUserCourseAddCompanyUserParam param) {
|
|
|
+ FsUserCoursePeriodDays query = new FsUserCoursePeriodDays();
|
|
|
+ query.setVideoId(param.getVideoId());
|
|
|
+ query.setPeriodId(param.getPeriodId());
|
|
|
+
|
|
|
+ List<FsUserCoursePeriodDays> periodDaysList = fsUserCoursePeriodDaysMapper.selectFsUserCoursePeriodDaysList(query);
|
|
|
+ return CollectionUtils.isNotEmpty(periodDaysList) ? periodDaysList.get(0) : query;
|
|
|
+ }
|
|
|
+
|
|
|
+ private LocalDateTime[] getCompanyUserTimeRange(FsUserCourseAddCompanyUserParam param) {
|
|
|
+ CompanyUserTimeQueryParam query = new CompanyUserTimeQueryParam();
|
|
|
+ query.setPeriodId(param.getPeriodId());
|
|
|
+ query.setCourseId(param.getCourseId());
|
|
|
+ query.setVideoId(param.getVideoId());
|
|
|
+ query.setCompanyUserId(param.getCompanyUserId());
|
|
|
|
|
|
+ List<FsUserCourseCompanyUserTime> companyUserTimes =
|
|
|
+ companyUserTimeMapper.batchSelectByParams(Collections.singletonList(query));
|
|
|
+
|
|
|
+ if (CollectionUtils.isEmpty(companyUserTimes)) {
|
|
|
+ return new LocalDateTime[]{null, null};
|
|
|
+ }
|
|
|
+
|
|
|
+ FsUserCourseCompanyUserTime companyUserTime = companyUserTimes.get(0);
|
|
|
+ return new LocalDateTime[]{
|
|
|
+ convertDateToLocalDateTime(companyUserTime.getStartDateTime()),
|
|
|
+ convertDateToLocalDateTime(companyUserTime.getEndDateTime())
|
|
|
+ };
|
|
|
+ }
|
|
|
+
|
|
|
+ private LocalDateTime convertDateToLocalDateTime(Date date) {
|
|
|
+ if (date == null) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ return date.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
|
|
|
+ }
|
|
|
// 添加关系表数据
|
|
|
public static FsUserCompanyUser getFsUserCompanyUser(FsUserCourseAddCompanyUserParam param, FsUser fsUser) {
|
|
|
FsUserCompanyUser fsUserCompanyUser = new FsUserCompanyUser();
|