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