xiaoyong931011
2021-12-17 5d9add8982a94cabc61c4acfb7573e8ca6f2e39d
Merge branch 'master' of http://120.27.238.55:7000/r/xc-video
10 files modified
4 files added
268 ■■■■■ changed files
src/main/java/cc/mrbird/febs/common/configure/WebMvcConfigure.java 4 ●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/common/interceptor/VideoInterceptor.java 51 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/video/controller/ApiVideoController.java 15 ●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/video/conversion/VideoConversion.java 25 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/video/entity/VideoMasterItemsEntity.java 2 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/video/mapper/VideoMasterDataMapper.java 3 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/video/mapper/VideoMasterItemsMapper.java 2 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/video/service/IVideoMasterInfoService.java 3 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/video/service/impl/VideoMasterInfoServiceImpl.java 61 ●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/video/vo/VideoInfoItemVo.java 29 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/video/vo/VideoInfoVo.java 55 ●●●●● patch | view | raw | blame | history
src/main/resources/mapper/video/VideoMasterDataMapper.xml 4 ●●●● patch | view | raw | blame | history
src/main/resources/mapper/video/VideoMasterInfoMapper.xml 4 ●●●● patch | view | raw | blame | history
src/main/resources/mapper/video/VideoMasterItemsMapper.xml 10 ●●●●● patch | view | raw | blame | history
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/**");
    }
}
src/main/java/cc/mrbird/febs/common/interceptor/VideoInterceptor.java
New file
@@ -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);
    }
}
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));
    }
}
src/main/java/cc/mrbird/febs/video/conversion/VideoConversion.java
New file
@@ -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);
}
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)
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);
}
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);
}
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);
}
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;
    }
}
src/main/java/cc/mrbird/febs/video/vo/VideoInfoItemVo.java
New file
@@ -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;
}
src/main/java/cc/mrbird/febs/video/vo/VideoInfoVo.java
New file
@@ -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;
}
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>
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
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>