Pārlūkot izejas kodu

修改课程将时长放入redis

xw 6 dienas atpakaļ
vecāks
revīzija
d0ea7f895e

+ 12 - 0
fs-admin/src/main/java/com/fs/course/business/FsVideoResourceBusinessService.java

@@ -1,5 +1,6 @@
 package com.fs.course.business;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.fs.course.domain.FsUserCourseVideo;
 import com.fs.course.domain.FsVideoResource;
@@ -8,6 +9,8 @@ import com.fs.course.service.IFsVideoResourceService;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.util.List;
+
 @Service
 public class FsVideoResourceBusinessService {
 
@@ -24,6 +27,9 @@ public class FsVideoResourceBusinessService {
     @Transactional(rollbackFor = Exception.class)
     public void edit(FsVideoResource fsVideoResource) {
         FsVideoResource oldResource = fsVideoResourceService.getById(fsVideoResource.getId());
+        List<FsUserCourseVideo> courseVideos = fsUserCourseVideoService.list(new LambdaQueryWrapper<FsUserCourseVideo>()
+                .eq(FsUserCourseVideo::getVideoUrl, oldResource.getVideoUrl())
+                .eq(FsUserCourseVideo::getIsDel, 0));
         fsVideoResourceService.updateById(fsVideoResource);
         fsUserCourseVideoService.update(new UpdateWrapper<FsUserCourseVideo>()
                 .eq("video_url", oldResource.getVideoUrl())
@@ -37,5 +43,11 @@ public class FsVideoResourceBusinessService {
                 .set("file_name", fsVideoResource.getFileName())
                 .set("thumbnail", fsVideoResource.getThumbnail())
         );
+        if (fsVideoResource.getDuration() != null) {
+            Long duration = fsVideoResource.getDuration().longValue();
+            for (FsUserCourseVideo courseVideo : courseVideos) {
+                fsUserCourseVideoService.syncVideoDurationCache(courseVideo.getVideoId(), duration);
+            }
+        }
     }
 }

+ 0 - 6
fs-admin/src/main/java/com/fs/course/controller/FsVideoResourceController.java

@@ -137,12 +137,6 @@ public class FsVideoResourceController extends BaseController {
         fsVideoResourceResult.setOldVideoUrl(fsVideoResourceResult.getVideoUrl());
         fsVideoResource.setUpdateTime(LocalDateTime.now());
         //12.10要求素材名称跟着视频名称走
-        //fsVideoResource.setResourceName(fsVideoResource.getFileName());
-        if (("今正科技".equals(cloudHostProper.getCompanyName()))) {
-            // 同步资源到课程
-            videoResourceBusinessService.edit(fsVideoResource);
-            return AjaxResult.success();
-        }
         fsVideoResourceService.updateById(fsVideoResource);
         fsUserCourseVideoService.updateVideoByVideoUrl(fsVideoResource.getVideoUrl(), fsVideoResourceResult.getOldVideoUrl(), fsVideoResource.getThumbnail(), fsVideoResource.getFileName(), fsVideoResource.getDuration(), fsVideoResource.getLine1(), fsVideoResource.getLine2());
         return AjaxResult.success();

+ 5 - 0
fs-service/src/main/java/com/fs/course/service/IFsUserCourseVideoService.java

@@ -209,6 +209,11 @@ public interface IFsUserCourseVideoService extends IService<FsUserCourseVideo> {
     R updateVideo();
     AjaxResult updateVideoByVideoUrl(String videoUrl, String oldVideoUrl, String thumbnail, String fileName, Integer duration, String lineOne, String lineTwo);
 
+    /**
+     * 同步视频时长到 Redis(看课完课判定依赖 h5user / h5wxuser 缓存)
+     */
+    void syncVideoDurationCache(Long videoId, Long duration);
+
     R checkUserInfo(Long userId);
 
     public FsUserCourseVideoQVO selectFsUserCourseVideoByVideoIdVO(Long videoId, Long userId);

+ 23 - 4
fs-service/src/main/java/com/fs/course/service/impl/FsUserCourseVideoServiceImpl.java

@@ -362,13 +362,26 @@ public class FsUserCourseVideoServiceImpl extends ServiceImpl<FsUserCourseVideoM
             }
         }
 
-        String videoRedisKey1 = "h5user:video:duration:" + fsUserCourseVideo.getVideoId();
-        redisCache.setCacheObject(videoRedisKey1, fsUserCourseVideo.getDuration());
-        String videoRedisKey2 = "h5wxuser:video:duration:" + fsUserCourseVideo.getVideoId();
-        redisCache.setCacheObject(videoRedisKey2, fsUserCourseVideo.getDuration());
+        syncVideoDurationCache(fsUserCourseVideo.getVideoId(), fsUserCourseVideo.getDuration());
         return fsUserCourseVideoMapper.updateFsUserCourseVideo(fsUserCourseVideo);
     }
 
+    @Override
+    public void syncVideoDurationCache(Long videoId, Long duration) {
+        if (videoId == null) {
+            return;
+        }
+        String videoRedisKey1 = "h5user:video:duration:" + videoId;
+        String videoRedisKey2 = "h5wxuser:video:duration:" + videoId;
+        if (duration == null) {
+            redisCache.deleteObject(videoRedisKey1);
+            redisCache.deleteObject(videoRedisKey2);
+            return;
+        }
+        redisCache.setCacheObject(videoRedisKey1, duration);
+        redisCache.setCacheObject(videoRedisKey2, duration);
+    }
+
     @Override
     public int updateFsUserCourseRedPage(FsUserCourseRedPageParam userCourseRedPageParam) {
 
@@ -3942,6 +3955,12 @@ public class FsUserCourseVideoServiceImpl extends ServiceImpl<FsUserCourseVideoM
         }
         List<Long> idList = videoList.stream().map(FsUserCourseVideo::getVideoId).collect(Collectors.toList());
         fsUserCourseVideoMapper.updateVideoByVideoUrl(videoUrl, thumbnail, idList, fileName, duration, lineOne, lineTwo);
+        if (duration != null) {
+            Long durationValue = duration.longValue();
+            for (Long videoId : idList) {
+                syncVideoDurationCache(videoId, durationValue);
+            }
+        }
         return AjaxResult.success();
     }
     @Override