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