From 6fe5122c10a1952fb31a4aae22b39bc1c3e9fd78 Mon Sep 17 00:00:00 2001
From: Helius <wangdoubleone@gmail.com>
Date: Mon, 20 Dec 2021 11:17:05 +0800
Subject: [PATCH] fix playCnt

---
 src/main/java/cc/mrbird/febs/video/service/IVideoMasterDataService.java         |    9 ++++
 src/main/java/cc/mrbird/febs/video/mapper/VideoMasterDataMapper.java            |    2 +
 src/main/java/cc/mrbird/febs/video/service/impl/VideoMasterDataServiceImpl.java |   62 +++++++++++++++++++++++++++++++
 src/main/resources/mapper/video/VideoMasterDataMapper.xml                       |    5 ++
 src/main/java/cc/mrbird/febs/video/service/impl/VideoMasterInfoServiceImpl.java |   11 +++++
 5 files changed, 89 insertions(+), 0 deletions(-)

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 60ba365..969f581 100644
--- a/src/main/java/cc/mrbird/febs/video/mapper/VideoMasterDataMapper.java
+++ b/src/main/java/cc/mrbird/febs/video/mapper/VideoMasterDataMapper.java
@@ -7,4 +7,6 @@
 public interface VideoMasterDataMapper extends BaseMapper<VideoMasterDataEntity> {
 
     VideoMasterDataEntity selectDataByMasterId(@Param("masterId") Long masterId);
+
+    VideoMasterDataEntity selectDataByMasterIdForUpdate(@Param("masterId") Long master);
 }
diff --git a/src/main/java/cc/mrbird/febs/video/service/IVideoMasterDataService.java b/src/main/java/cc/mrbird/febs/video/service/IVideoMasterDataService.java
new file mode 100644
index 0000000..feb5652
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/video/service/IVideoMasterDataService.java
@@ -0,0 +1,9 @@
+package cc.mrbird.febs.video.service;
+
+import cc.mrbird.febs.video.entity.VideoMasterDataEntity;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+public interface IVideoMasterDataService extends IService<VideoMasterDataEntity> {
+
+    void modifyVideoData(Long masterId, int cnt, int type);
+}
diff --git a/src/main/java/cc/mrbird/febs/video/service/impl/VideoMasterDataServiceImpl.java b/src/main/java/cc/mrbird/febs/video/service/impl/VideoMasterDataServiceImpl.java
new file mode 100644
index 0000000..a83f2b6
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/video/service/impl/VideoMasterDataServiceImpl.java
@@ -0,0 +1,62 @@
+package cc.mrbird.febs.video.service.impl;
+
+import cc.mrbird.febs.video.entity.VideoMasterDataEntity;
+import cc.mrbird.febs.video.mapper.VideoMasterDataMapper;
+import cc.mrbird.febs.video.service.IVideoMasterDataService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+/**
+ * @author wzy
+ * @date 2021-12-20
+ **/
+@Slf4j
+@Service
+@RequiredArgsConstructor
+public class VideoMasterDataServiceImpl extends ServiceImpl<VideoMasterDataMapper, VideoMasterDataEntity> implements IVideoMasterDataService {
+
+
+    @Override
+    public synchronized void modifyVideoData(Long masterId, int cnt, int type) {
+        VideoMasterDataEntity data = this.baseMapper.selectDataByMasterIdForUpdate(masterId);
+        if (data == null) {
+            data = new VideoMasterDataEntity();
+            data.setMasterId(masterId);
+            data.setCollectCnt(0);
+            data.setPlayCnt(0);
+            data.setStarCnt(0);
+        }
+
+        int targetCnt = 0;
+        switch (type) {
+            // 播放量
+            case 1:
+                targetCnt = data.getPlayCnt() + cnt;
+                if (targetCnt < 0) {
+                    targetCnt = 0;
+                }
+                data.setPlayCnt(targetCnt);
+                break;
+            // 收藏量
+            case 2:
+                targetCnt = data.getCollectCnt() + cnt;
+                if (targetCnt < 0) {
+                    targetCnt = 0;
+                }
+                data.setCollectCnt(targetCnt);
+                break;
+            // 点赞量
+            case 3:
+                targetCnt = data.getStarCnt() + cnt;
+                if (targetCnt < 0) {
+                    targetCnt = 0;
+                }
+                data.setStarCnt(targetCnt);
+                break;
+        }
+
+        this.baseMapper.updateById(data);
+    }
+}
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 fcef6c5..8f40ed5 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
@@ -13,6 +13,7 @@
 import cc.mrbird.febs.video.dto.VideoListDto;
 import cc.mrbird.febs.video.entity.*;
 import cc.mrbird.febs.video.mapper.*;
+import cc.mrbird.febs.video.service.IVideoMasterDataService;
 import cc.mrbird.febs.video.service.IVideoMasterInfoService;
 import cc.mrbird.febs.video.vo.VideoInfoItemVo;
 import cc.mrbird.febs.video.vo.VideoInfoVo;
@@ -48,6 +49,7 @@
     private final VideoCommentLikeMapper videoCommentLikeMapper;
     private final VideoHistoryMapper videoHistoryMapper;
     private final VideoMemberMapper videoMemberMapper;
+    private final IVideoMasterDataService videoMasterDataService;
 
     @Override
     public IPage<VideoMasterInfoEntity> findInPage(VideoMasterInfoEntity info, QueryRequest request) {
@@ -180,6 +182,7 @@
         videoInfoVo.setStarCnt(data.getStarCnt());
 
         if (loginUser != null) {
+            // 是否点赞
             VideoCommentLikeEntity commentLike = this.videoCommentLikeMapper.selectCommentLikeByMemberIdAndRelateId(loginUser.getId(), videoInfoEntity.getId());
             if (commentLike != null) {
                 videoInfoVo.setIsLike(1);
@@ -187,6 +190,7 @@
                 videoInfoVo.setIsLike(2);
             }
 
+            // 是否收藏
             VideoCollectionEntity collection = this.videoCollectionMapper.selectVideoCollectionByVideoIdAndMemberId(videoInfoEntity.getId(), loginUser.getId());
             if (collection != null) {
                 videoInfoVo.setIsCollect(1);
@@ -195,12 +199,15 @@
             }
         }
 
+        // 视频是否需要vip
         if (AppContants.FLAG_INT_N.equals(videoInfoEntity.getIsFree())) {
+            // 判断用户是否登录
             if (loginUser == null) {
                 videoInfoVo.setNotLogin(AppContants.FLAG_INT_N);
                 return videoInfoVo;
             }
 
+            // 判断用户是否为vip
             VideoMemberEntity member = this.videoMemberMapper.selectById(loginUser.getId());
             if (AppContants.FLAG_INT_N.equals(member.getIsVip())) {
                 videoInfoVo.setNotVip(AppContants.FLAG_INT_N);
@@ -222,6 +229,10 @@
         videoInfoVo.setItemId(currentItem.getId());
         videoInfoVo.setTimeLength(currentItem.getTimeLength());
 
+        // 增加播放量
+        this.videoMasterDataService.modifyVideoData(videoInfoEntity.getId(), 1, 1);
+
+        // 历史记录
         if (loginUser != null) {
             VideoHistoryEntity history = this.videoHistoryMapper.selectByMemberIdAndVideoId(loginUser.getId(), videoInfoEntity.getId());
             if (history == null) {
diff --git a/src/main/resources/mapper/video/VideoMasterDataMapper.xml b/src/main/resources/mapper/video/VideoMasterDataMapper.xml
index 8b5aaba..99f7870 100644
--- a/src/main/resources/mapper/video/VideoMasterDataMapper.xml
+++ b/src/main/resources/mapper/video/VideoMasterDataMapper.xml
@@ -6,4 +6,9 @@
         select * from video_master_data
         where master_id=#{masterId}
     </select>
+
+    <select id="selectDataByMasterIdForUpdate" resultType="cc.mrbird.febs.video.entity.VideoMasterDataEntity">
+        select * from video_master_data
+        where master_id=#{masterId} for update
+    </select>
 </mapper>
\ No newline at end of file

--
Gitblit v1.9.1