yfh преди 1 месец
родител
ревизия
20b9bc5da9
променени са 1 файла, в които са добавени 63 реда и са изтрити 1 реда
  1. 63 1
      fs-service-system/src/main/java/com/fs/course/service/impl/FsUserCourseVideoServiceImpl.java

+ 63 - 1
fs-service-system/src/main/java/com/fs/course/service/impl/FsUserCourseVideoServiceImpl.java

@@ -3,6 +3,7 @@ package com.fs.course.service.impl;
 import cn.hutool.core.util.NumberUtil;
 import cn.hutool.json.JSONUtil;
 import com.alibaba.fastjson.JSON;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.fs.common.BeanCopyUtils;
 import com.fs.common.core.domain.R;
 import com.fs.common.core.domain.ResponseResult;
@@ -1249,7 +1250,9 @@ public class FsUserCourseVideoServiceImpl implements IFsUserCourseVideoService
         if (Objects.isNull(courseProject) || !courseProject.equals(param.getProjectId())) {
             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) {
@@ -1319,7 +1322,66 @@ public class FsUserCourseVideoServiceImpl implements IFsUserCourseVideoService
 //        fsUserCompanyUser.setCompanyUserId(param.getCompanyUserId());
 //        return fsUserCompanyUser;
 //    }
+    /**
+     * 检查用户课程时间段是否有效
+     * @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();
+    }
     private String getCompanyUserQRCode(CompanyUser companyUser) {
         String companyUserQRCode;
         if(StringUtils.isNotEmpty(companyUser.getQrCodeWeixin())){