Pārlūkot izejas kodu

迁移调整校验方法

yfh 1 nedēļu atpakaļ
vecāks
revīzija
4cf6d2fa80

+ 62 - 0
fs-service/src/main/java/com/fs/course/service/impl/FsUserCourseVideoServiceImpl.java

@@ -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();