Bläddra i källkod

VideoPostController 添加一个接口, 视频文件上传成功后直接创建一个 VideoPost 并返回 videoId

reghao 9 månader sedan
förälder
incheckning
cd7ab0d62e

+ 23 - 0
content/content-api/src/main/java/cn/reghao/tnb/content/api/dto/VideoFilePublish.java

@@ -0,0 +1,23 @@
+package cn.reghao.tnb.content.api.dto;
+
+import lombok.Getter;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+
+/**
+ * @author reghao
+ * @date 2025-06-01 19:23:39
+ */
+@Getter
+public class VideoFilePublish implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    @NotBlank
+    private String videoFileId;
+    @NotNull
+    private Integer channelCode;
+    @NotBlank
+    private String filename;
+}

+ 9 - 0
content/content-service/src/main/java/cn/reghao/tnb/content/app/vod/controller/VideoPostController.java

@@ -4,6 +4,7 @@ import cn.reghao.jutil.jdk.db.PageList;
 import cn.reghao.jutil.jdk.result.Result;
 import cn.reghao.jutil.web.WebResult;
 import cn.reghao.tnb.common.auth.AuthUser;
+import cn.reghao.tnb.content.api.dto.VideoFilePublish;
 import cn.reghao.tnb.content.api.dto.VideoFileUpdate;
 import cn.reghao.tnb.content.api.dto.VideoPublishSbt;
 import cn.reghao.tnb.content.app.vod.model.dto.*;
@@ -35,6 +36,14 @@ public class VideoPostController {
         this.videoPostQuery = videoPostQuery;
     }
 
+    @AuthUser
+    @ApiOperation(value = "发布视频文件", notes = "N")
+    @PostMapping("/file")
+    public String addVideoFile(@RequestBody @Validated VideoFilePublish videoFilePublish) {
+        String videoId = videoPostService.publishVideoFile(videoFilePublish);
+        return WebResult.success(videoId);
+    }
+
     @AuthUser
     @ApiOperation(value = "发布视频稿件", notes = "N")
     @PostMapping("")

+ 6 - 0
content/content-service/src/main/java/cn/reghao/tnb/content/app/vod/db/repository/VideoRepository.java

@@ -40,6 +40,12 @@ public class VideoRepository {
         videoStatisticMapper.save(videoStatistic);
     }
 
+    @Transactional(rollbackFor = Exception.class)
+    public void saveVideo(VideoFile videoFile, VideoPost videoPost) {
+        videoFileMapper.save(videoFile);
+        videoPostMapper.save(videoPost);
+    }
+
     @Transactional(rollbackFor = Exception.class)
     public void saveVideoFiles(List<VideoFile> videoFiles) {
         videoFileMapper.saveAll(videoFiles);

+ 15 - 0
content/content-service/src/main/java/cn/reghao/tnb/content/app/vod/model/po/VideoPost.java

@@ -52,6 +52,21 @@ public class VideoPost extends BaseObject<Integer> {
         this.publishBy = UserContext.getUser();
     }
 
+    public VideoPost(String videoId, String title, VideoFile videoInfo) {
+        this.videoId = videoId;
+        this.title = title;
+        this.description = "";
+        this.categoryPid = 3;
+        this.categoryId = 4;
+        this.duration = videoInfo.getDuration();
+        this.horizontal = videoInfo.getHorizontal();
+        this.coverUrl = "";
+        this.scope = PostScope.PRIVATE.getCode();
+        this.status = VideoStatus.censor.getValue();
+        this.publishAt = DateTimeConverter.localDateTime(System.currentTimeMillis());
+        this.publishBy = UserContext.getUser();
+    }
+
     @Deprecated
     public VideoPost(CrawledVideo video, int categoryPid, int categoryId) {
         this.videoId = video.getVideoId();

+ 2 - 0
content/content-service/src/main/java/cn/reghao/tnb/content/app/vod/service/VideoPostService.java

@@ -1,6 +1,7 @@
 package cn.reghao.tnb.content.app.vod.service;
 
 import cn.reghao.jutil.jdk.result.Result;
+import cn.reghao.tnb.content.api.dto.VideoFilePublish;
 import cn.reghao.tnb.content.api.dto.VideoPublishSbt;
 import cn.reghao.tnb.content.api.dto.VideoFileUpdate;
 import cn.reghao.tnb.content.app.vod.model.dto.*;
@@ -12,6 +13,7 @@ import cn.reghao.tnb.content.app.vod.model.po.VideoStatistic;
  * @date 2023-10-08 15:34:48
  */
 public interface VideoPostService {
+    String publishVideoFile(VideoFilePublish videoFilePublish);
     Result publishVideo(VideoPublishSbt videoPublishSbt);
     void saveVideo(VideoPost videoPost, VideoStatistic videoStatistic, String tags);
     void updateVideoStatus(VideoScopeUpdate videoScopeUpdate);

+ 21 - 6
content/content-service/src/main/java/cn/reghao/tnb/content/app/vod/service/impl/VideoPostServiceImpl.java

@@ -10,6 +10,7 @@ import cn.reghao.oss.sdk.model.dto.media.VideoUrlDto;
 import cn.reghao.tnb.common.auth.UserContext;
 import cn.reghao.tnb.content.api.constant.PostScope;
 import cn.reghao.tnb.content.api.constant.VideoStatus;
+import cn.reghao.tnb.content.api.dto.VideoFilePublish;
 import cn.reghao.tnb.content.api.dto.VideoFileUpdate;
 import cn.reghao.tnb.content.api.dto.VideoPublishSbt;
 import cn.reghao.tnb.content.app.vod.db.mapper.*;
@@ -63,6 +64,26 @@ public class VideoPostServiceImpl implements VideoPostService {
         this.videoCategoryPostMapper = videoCategoryPostMapper;
     }
 
+    public String publishVideoFile(VideoFilePublish videoFilePublish) {
+        String title = videoFilePublish.getFilename();
+        String videoFileId = videoFilePublish.getVideoFileId();
+        int channelCode = videoFilePublish.getChannelCode();
+        try {
+            VideoInfo videoInfo = ossService.getVideoInfo(channelCode, videoFileId);
+            String videoId = idGenerator.getUuid();
+            VideoFile videoFile = new VideoFile(videoId, videoInfo, channelCode);
+            VideoPost videoPost = new VideoPost(videoId, title, videoFile);
+            videoRepository.saveVideo(videoFile, videoPost);
+            return videoId;
+        } catch (Exception e) {
+            e.printStackTrace();
+            String errMsg = String.format("视频文件 %s 在 oss 中不存在", videoFileId);
+            log.error("{}", e.getMessage());
+        }
+
+        return null;
+    }
+
     public Result publishVideo(VideoPublishSbt videoPublishSbt) {
         Result result;
         try {
@@ -85,12 +106,6 @@ public class VideoPostServiceImpl implements VideoPostService {
 
             String videoId = idGenerator.getUuid();
             VideoFile videoFile = new VideoFile(videoId, videoInfo, channelCode);
-            String videoCodec = videoInfo.getVideoCodec();
-            String audioCodec = videoInfo.getAudioCodec();
-            if (audioCodec == null) {
-                audioCodec = "empty";
-            }
-            String codec = String.format("%s&%s", videoCodec, audioCodec);
 
             Integer channelScope = ossService.getChannelScope(channelCode);
             if (channelScope == null ) {