From 8fb29eb05a29096e4aebf9c50d694e347e8ea04c Mon Sep 17 00:00:00 2001
From: Helius <wangdoubleone@gmail.com>
Date: Thu, 16 Dec 2021 19:01:35 +0800
Subject: [PATCH] add video/info and video/list

---
 src/main/java/cc/mrbird/febs/common/interceptor/VideoInterceptor.java           |   51 ++++++++++
 src/main/java/cc/mrbird/febs/video/mapper/VideoMasterDataMapper.java            |    3 
 src/main/java/cc/mrbird/febs/video/vo/VideoInfoItemVo.java                      |   29 +++++
 src/main/java/cc/mrbird/febs/video/conversion/VideoConversion.java              |   25 +++++
 src/main/java/cc/mrbird/febs/video/vo/VideoInfoVo.java                          |   55 +++++++++++
 src/main/resources/mapper/video/VideoMasterDataMapper.xml                       |    4 
 src/main/java/cc/mrbird/febs/video/service/impl/VideoMasterInfoServiceImpl.java |   61 ++++++++++-
 src/main/java/cc/mrbird/febs/video/controller/ApiVideoController.java           |   15 ++
 src/main/java/cc/mrbird/febs/video/mapper/VideoMasterItemsMapper.java           |    2 
 src/main/resources/mapper/video/VideoMasterItemsMapper.xml                      |   10 ++
 src/main/resources/mapper/video/VideoMasterInfoMapper.xml                       |    4 
 src/main/java/cc/mrbird/febs/video/entity/VideoMasterItemsEntity.java           |    2 
 src/main/java/cc/mrbird/febs/common/configure/WebMvcConfigure.java              |    4 
 src/main/java/cc/mrbird/febs/video/service/IVideoMasterInfoService.java         |    3 
 14 files changed, 256 insertions(+), 12 deletions(-)

diff --git a/src/main/java/cc/mrbird/febs/common/configure/WebMvcConfigure.java b/src/main/java/cc/mrbird/febs/common/configure/WebMvcConfigure.java
index ad4a481..f650c28 100644
--- a/src/main/java/cc/mrbird/febs/common/configure/WebMvcConfigure.java
+++ b/src/main/java/cc/mrbird/febs/common/configure/WebMvcConfigure.java
@@ -1,6 +1,7 @@
 package cc.mrbird.febs.common.configure;
 
 import cc.mrbird.febs.common.interceptor.LoginInterceptor;
+import cc.mrbird.febs.common.interceptor.VideoInterceptor;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.web.servlet.config.annotation.InterceptorRegistration;
 import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
@@ -16,5 +17,8 @@
         registration.excludePathPatterns("/api/video/**");
         registration.excludePathPatterns("/api/member/vipCostInfo");
         registration.excludePathPatterns("/api/member/appVersion");
+
+        InterceptorRegistration registration1 = registry.addInterceptor(new VideoInterceptor());
+        registration1.addPathPatterns("/api/video/**");
     }
 }
diff --git a/src/main/java/cc/mrbird/febs/common/interceptor/VideoInterceptor.java b/src/main/java/cc/mrbird/febs/common/interceptor/VideoInterceptor.java
new file mode 100644
index 0000000..72d55ac
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/common/interceptor/VideoInterceptor.java
@@ -0,0 +1,51 @@
+package cc.mrbird.febs.common.interceptor;
+
+
+import cc.mrbird.febs.common.utils.AppContants;
+import cc.mrbird.febs.common.utils.RedisUtils;
+import cc.mrbird.febs.common.utils.SpringContextUtil;
+import cc.mrbird.febs.video.entity.VideoMemberEntity;
+import cn.hutool.core.util.StrUtil;
+import cn.hutool.crypto.asymmetric.KeyType;
+import cn.hutool.crypto.asymmetric.RSA;
+import com.alibaba.fastjson.JSON;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.servlet.HandlerInterceptor;
+import org.springframework.web.servlet.ModelAndView;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+@Slf4j
+public class VideoInterceptor implements HandlerInterceptor {
+
+    private final RedisUtils redisUtils = SpringContextUtil.getBean(RedisUtils.class);
+    @Override
+    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
+        String headerToken = request.getHeader("token");
+        if (StrUtil.isNotBlank(headerToken)) {
+            RSA rsa = new RSA(AppContants.PRIVATE_KEY, null);
+            String[] tokens = StrUtil.split(rsa.decryptStr(headerToken, KeyType.PrivateKey), "_");
+
+            String token = tokens[0];
+            String userJsonStr = redisUtils.getString(token);
+
+            if (StrUtil.isNotBlank(userJsonStr)) {
+                VideoMemberEntity member = JSON.parseObject(userJsonStr, VideoMemberEntity.class);
+                request.getSession().setAttribute("member", member);
+            }
+        }
+
+        return true;
+    }
+
+    @Override
+    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
+        HandlerInterceptor.super.postHandle(request, response, handler, modelAndView);
+    }
+
+    @Override
+    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
+        HandlerInterceptor.super.afterCompletion(request, response, handler, ex);
+    }
+}
diff --git a/src/main/java/cc/mrbird/febs/video/controller/ApiVideoController.java b/src/main/java/cc/mrbird/febs/video/controller/ApiVideoController.java
index bd17963..40f634a 100644
--- a/src/main/java/cc/mrbird/febs/video/controller/ApiVideoController.java
+++ b/src/main/java/cc/mrbird/febs/video/controller/ApiVideoController.java
@@ -3,6 +3,7 @@
 import cc.mrbird.febs.common.entity.FebsResponse;
 import cc.mrbird.febs.video.dto.VideoListDto;
 import cc.mrbird.febs.video.service.IVideoMasterInfoService;
+import cc.mrbird.febs.video.vo.VideoInfoVo;
 import cc.mrbird.febs.video.vo.VideoListVo;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -10,10 +11,7 @@
 import io.swagger.annotations.ApiResponses;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 /**
  * @author wzy
@@ -36,4 +34,13 @@
     public FebsResponse videoInPage(@RequestBody VideoListDto videoListDto) {
         return new FebsResponse().success().data(this.videoMasterInfoService.findVideoList(videoListDto));
     }
+
+    @ApiOperation(value = "根据ID获取视频信息", notes = "根据ID获取视频信息")
+    @ApiResponses({
+            @ApiResponse(code = 200, message = "success", response = VideoInfoVo.class)
+    })
+    @GetMapping(value = "/info/{videoId}")
+    public FebsResponse videoInfo(@PathVariable("videoId") Long videoId, @RequestParam(value = "itemId", required = false) Long itemId) {
+        return new FebsResponse().success().data(this.videoMasterInfoService.findVideoInfo(videoId, itemId));
+    }
 }
diff --git a/src/main/java/cc/mrbird/febs/video/conversion/VideoConversion.java b/src/main/java/cc/mrbird/febs/video/conversion/VideoConversion.java
new file mode 100644
index 0000000..a066a1c
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/video/conversion/VideoConversion.java
@@ -0,0 +1,25 @@
+package cc.mrbird.febs.video.conversion;
+
+import cc.mrbird.febs.video.entity.VideoMasterInfoEntity;
+import cc.mrbird.febs.video.entity.VideoMasterItemsEntity;
+import cc.mrbird.febs.video.vo.VideoInfoItemVo;
+import cc.mrbird.febs.video.vo.VideoInfoVo;
+import org.mapstruct.Mapper;
+import org.mapstruct.factory.Mappers;
+
+import java.util.List;
+
+/**
+ * @author wzy
+ * @date 2021-12-16
+ **/
+@Mapper
+public abstract class VideoConversion {
+    public static final VideoConversion INSTANCE = Mappers.getMapper(VideoConversion.class);
+
+    public abstract VideoInfoVo videoInfoEntityToInfoVo(VideoMasterInfoEntity videoMasterInfoEntity);
+
+    public abstract VideoInfoItemVo videoItemEntityToItemVo(VideoMasterItemsEntity item);
+
+    public abstract List<VideoInfoItemVo> videoItemEntitiesToItemVoes(List<VideoMasterItemsEntity> items);
+}
diff --git a/src/main/java/cc/mrbird/febs/video/entity/VideoMasterItemsEntity.java b/src/main/java/cc/mrbird/febs/video/entity/VideoMasterItemsEntity.java
index 6b1043d..4489288 100644
--- a/src/main/java/cc/mrbird/febs/video/entity/VideoMasterItemsEntity.java
+++ b/src/main/java/cc/mrbird/febs/video/entity/VideoMasterItemsEntity.java
@@ -23,6 +23,8 @@
 
     private Integer seq;
 
+    private String timeLength;
+
     private Long sourceId;
 
     @TableField(exist = false)
diff --git a/src/main/java/cc/mrbird/febs/video/mapper/VideoMasterDataMapper.java b/src/main/java/cc/mrbird/febs/video/mapper/VideoMasterDataMapper.java
index 2de0ea5..60ba365 100644
--- a/src/main/java/cc/mrbird/febs/video/mapper/VideoMasterDataMapper.java
+++ b/src/main/java/cc/mrbird/febs/video/mapper/VideoMasterDataMapper.java
@@ -2,6 +2,9 @@
 
 import cc.mrbird.febs.video.entity.VideoMasterDataEntity;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
 
 public interface VideoMasterDataMapper extends BaseMapper<VideoMasterDataEntity> {
+
+    VideoMasterDataEntity selectDataByMasterId(@Param("masterId") Long masterId);
 }
diff --git a/src/main/java/cc/mrbird/febs/video/mapper/VideoMasterItemsMapper.java b/src/main/java/cc/mrbird/febs/video/mapper/VideoMasterItemsMapper.java
index c82f054..ce74975 100644
--- a/src/main/java/cc/mrbird/febs/video/mapper/VideoMasterItemsMapper.java
+++ b/src/main/java/cc/mrbird/febs/video/mapper/VideoMasterItemsMapper.java
@@ -15,4 +15,6 @@
     int deleteNotInIds(@Param("list") List<Long> list, @Param("masterId") Long masterId);
 
 //    int batchInsert(@Param("list") List<VideoMasterItemsEntity> list);
+
+    VideoMasterItemsEntity selectItemByVideoIdAndItemId(@Param("videoId") Long videoId, @Param("itemId") Long itemId);
 }
diff --git a/src/main/java/cc/mrbird/febs/video/service/IVideoMasterInfoService.java b/src/main/java/cc/mrbird/febs/video/service/IVideoMasterInfoService.java
index 5969ac0..8e9ae42 100644
--- a/src/main/java/cc/mrbird/febs/video/service/IVideoMasterInfoService.java
+++ b/src/main/java/cc/mrbird/febs/video/service/IVideoMasterInfoService.java
@@ -3,6 +3,7 @@
 import cc.mrbird.febs.common.entity.QueryRequest;
 import cc.mrbird.febs.video.dto.VideoListDto;
 import cc.mrbird.febs.video.entity.VideoMasterInfoEntity;
+import cc.mrbird.febs.video.vo.VideoInfoVo;
 import cc.mrbird.febs.video.vo.VideoListVo;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
@@ -22,5 +23,7 @@
     void changeIsUp(Long id);
 
     List<VideoListVo> findVideoList(VideoListDto videoListDto);
+
+    VideoInfoVo findVideoInfo(Long videoId, Long itemId);
 }
 
diff --git a/src/main/java/cc/mrbird/febs/video/service/impl/VideoMasterInfoServiceImpl.java b/src/main/java/cc/mrbird/febs/video/service/impl/VideoMasterInfoServiceImpl.java
index f5cf45c..bf845cd 100644
--- a/src/main/java/cc/mrbird/febs/video/service/impl/VideoMasterInfoServiceImpl.java
+++ b/src/main/java/cc/mrbird/febs/video/service/impl/VideoMasterInfoServiceImpl.java
@@ -3,16 +3,15 @@
 import cc.mrbird.febs.common.entity.QueryRequest;
 import cc.mrbird.febs.common.exception.FebsException;
 import cc.mrbird.febs.common.utils.AppContants;
+import cc.mrbird.febs.common.utils.LoginUserUtil;
+import cc.mrbird.febs.video.conversion.VideoConversion;
+import cc.mrbird.febs.video.conversion.VideoMemberConversion;
 import cc.mrbird.febs.video.dto.VideoListDto;
-import cc.mrbird.febs.video.entity.VideoMasterDataEntity;
-import cc.mrbird.febs.video.entity.VideoMasterInfoEntity;
-import cc.mrbird.febs.video.entity.VideoMasterItemsEntity;
-import cc.mrbird.febs.video.entity.VideoMasterSourceEntity;
-import cc.mrbird.febs.video.mapper.VideoMasterDataMapper;
-import cc.mrbird.febs.video.mapper.VideoMasterInfoMapper;
-import cc.mrbird.febs.video.mapper.VideoMasterItemsMapper;
-import cc.mrbird.febs.video.mapper.VideoMasterSourceMapper;
+import cc.mrbird.febs.video.entity.*;
+import cc.mrbird.febs.video.mapper.*;
 import cc.mrbird.febs.video.service.IVideoMasterInfoService;
+import cc.mrbird.febs.video.vo.VideoInfoItemVo;
+import cc.mrbird.febs.video.vo.VideoInfoVo;
 import cc.mrbird.febs.video.vo.VideoListVo;
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.util.StrUtil;
@@ -39,6 +38,7 @@
     private final VideoMasterItemsMapper videoMasterItemsMapper;
     private final VideoMasterSourceMapper videoMasterSourceMapper;
     private final VideoMasterDataMapper videoMasterDataMapper;
+    private final VideoMemberMapper videoMemberMapper;
 
     @Override
     public IPage<VideoMasterInfoEntity> findInPage(VideoMasterInfoEntity info, QueryRequest request) {
@@ -152,4 +152,49 @@
         IPage<VideoListVo> data = this.baseMapper.selectVideoListInPage(videoListDto, page);
         return data.getRecords();
     }
+
+    @Override
+    public VideoInfoVo findVideoInfo(Long videoId, Long itemId) {
+        VideoMasterInfoEntity videoInfoEntity = this.baseMapper.selectEntityById(videoId);
+        if (videoInfoEntity == null) {
+            throw new FebsException("视频不存在");
+        }
+
+        VideoInfoVo videoInfoVo = VideoConversion.INSTANCE.videoInfoEntityToInfoVo(videoInfoEntity);
+        List<VideoInfoItemVo> items = VideoConversion.INSTANCE.videoItemEntitiesToItemVoes(videoInfoEntity.getItems());
+        videoInfoVo.setItems(items);
+
+        VideoMasterDataEntity data = this.videoMasterDataMapper.selectDataByMasterId(videoInfoEntity.getId());
+        videoInfoVo.setPlayCnt(data.getPlayCnt());
+        videoInfoVo.setCollectCnt(data.getCollectCnt());
+        videoInfoVo.setStarCnt(data.getStarCnt());
+
+        VideoMemberEntity loginUser = LoginUserUtil.getLoginUser();
+        if (loginUser == null) {
+            videoInfoVo.setNotLogin(AppContants.FLAG_INT_N);
+            return videoInfoVo;
+        }
+
+        if (AppContants.FLAG_INT_N.equals(videoInfoEntity.getIsFree())) {
+            VideoMemberEntity member = this.videoMemberMapper.selectById(loginUser.getId());
+            if (AppContants.FLAG_INT_N.equals(member.getIsVip())) {
+                videoInfoVo.setNotVip(AppContants.FLAG_INT_N);
+                return videoInfoVo;
+            }
+        }
+
+        VideoMasterItemsEntity currentItem = this.videoMasterItemsMapper.selectItemByVideoIdAndItemId(videoId, itemId);
+        if (currentItem == null) {
+            throw new FebsException("视频不存在");
+        }
+
+        videoInfoVo.setNotLogin(AppContants.FLAG_INT_Y);
+        videoInfoVo.setNotVip(AppContants.FLAG_INT_Y);
+        videoInfoVo.setSubTitle(currentItem.getName());
+        videoInfoVo.setVideoUrl(currentItem.getVideoUrl());
+        videoInfoVo.setThumb(currentItem.getThumb());
+        videoInfoVo.setItemId(currentItem.getId());
+        videoInfoVo.setTimeLength(currentItem.getTimeLength());
+        return videoInfoVo;
+    }
 }
diff --git a/src/main/java/cc/mrbird/febs/video/vo/VideoInfoItemVo.java b/src/main/java/cc/mrbird/febs/video/vo/VideoInfoItemVo.java
new file mode 100644
index 0000000..91fef5a
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/video/vo/VideoInfoItemVo.java
@@ -0,0 +1,29 @@
+package cc.mrbird.febs.video.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @author wzy
+ * @date 2021-12-16
+ **/
+@Data
+@ApiModel(value = "VideoInfoItemVo", description = "视频item返回参数类")
+public class VideoInfoItemVo {
+
+    @ApiModelProperty(value = "itemId")
+    private Long id;
+
+    @ApiModelProperty(value = "缩略图")
+    private String thumb;
+
+    @ApiModelProperty(value = "标题")
+    private String name;
+
+    @ApiModelProperty(value = "序号")
+    private Integer seq;
+
+    @ApiModelProperty(value = "时长")
+    private String timeLength;
+}
diff --git a/src/main/java/cc/mrbird/febs/video/vo/VideoInfoVo.java b/src/main/java/cc/mrbird/febs/video/vo/VideoInfoVo.java
new file mode 100644
index 0000000..abc1f92
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/video/vo/VideoInfoVo.java
@@ -0,0 +1,55 @@
+package cc.mrbird.febs.video.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @author wzy
+ * @date 2021-12-16
+ **/
+@Data
+@ApiModel(value = "VideoInfoVo", description = "视频信息返回参数类")
+public class VideoInfoVo {
+
+    @ApiModelProperty(value = "标题")
+    private String title;
+
+    @ApiModelProperty(value = "简介")
+    private String intro;
+
+    @ApiModelProperty(value = "当前播放视频标题")
+    private String subTitle;
+
+    @ApiModelProperty(value = "当前播放视频链接")
+    private String videoUrl;
+
+    @ApiModelProperty(value = "当前播放视频缩略图")
+    private String thumb;
+
+    @ApiModelProperty(value = "当前播放视频时长")
+    private String timeLength;
+
+    @ApiModelProperty(value = "当前播放itemid")
+    private Long itemId;
+
+    @ApiModelProperty(value = "1-已登录 2-未登录")
+    private Integer notLogin;
+
+    @ApiModelProperty(value = "1-是vip 2-非vip")
+    private Integer notVip;
+
+    @ApiModelProperty(value = "点赞数量")
+    private int starCnt;
+
+    @ApiModelProperty(value = "收藏量")
+    private int collectCnt;
+
+    @ApiModelProperty(value = "播放量")
+    private int playCnt;
+
+    @ApiModelProperty(value = "视频剧集")
+    private List<VideoInfoItemVo> items;
+}
diff --git a/src/main/resources/mapper/video/VideoMasterDataMapper.xml b/src/main/resources/mapper/video/VideoMasterDataMapper.xml
index 1a29dae..8b5aaba 100644
--- a/src/main/resources/mapper/video/VideoMasterDataMapper.xml
+++ b/src/main/resources/mapper/video/VideoMasterDataMapper.xml
@@ -2,4 +2,8 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="cc.mrbird.febs.video.mapper.VideoMasterDataMapper">
 
+    <select id="selectDataByMasterId" resultType="cc.mrbird.febs.video.entity.VideoMasterDataEntity">
+        select * from video_master_data
+        where master_id=#{masterId}
+    </select>
 </mapper>
\ No newline at end of file
diff --git a/src/main/resources/mapper/video/VideoMasterInfoMapper.xml b/src/main/resources/mapper/video/VideoMasterInfoMapper.xml
index 0ffcb3d..1332c0e 100644
--- a/src/main/resources/mapper/video/VideoMasterInfoMapper.xml
+++ b/src/main/resources/mapper/video/VideoMasterInfoMapper.xml
@@ -32,6 +32,8 @@
             <result property="thumb" column="item_thumb" />
             <result property="sourceId" column="source_id" />
             <result property="sourceName" column="sourceName" />
+            <result property="timeLength" column="item_time_length" />
+            <result property="seq" column="seq" />
         </collection>
     </resultMap>
 
@@ -42,6 +44,8 @@
             b.name,
             b.thumb item_thumb,
             b.source_id,
+            b.time_length item_time_length,
+            b.seq,
             c.name sourceName
         from video_master_info a, video_master_items b, video_master_source c
         where a.id=b.master_id and a.id=#{id} and b.source_id=c.id
diff --git a/src/main/resources/mapper/video/VideoMasterItemsMapper.xml b/src/main/resources/mapper/video/VideoMasterItemsMapper.xml
index b597c27..e8b6234 100644
--- a/src/main/resources/mapper/video/VideoMasterItemsMapper.xml
+++ b/src/main/resources/mapper/video/VideoMasterItemsMapper.xml
@@ -43,4 +43,14 @@
 <!--            )-->
 <!--        </foreach>-->
 <!--    </insert>-->
+
+    <select id="selectItemByVideoIdAndItemId" resultType="cc.mrbird.febs.video.entity.VideoMasterItemsEntity">
+        select * from video_master_items
+        where master_id=#{videoId}
+        <if test="itemId != null">
+            and id = #{itemId}
+        </if>
+        order by seq asc
+        limit 1
+    </select>
 </mapper>
\ No newline at end of file

--
Gitblit v1.9.1