Prechádzať zdrojové kódy

作者:张哲
时间:2023/02/20
类型:优化
描述:里程碑(2)定时任务开发&从新进入审核流程批次+1

ZizgZh 2 rokov pred
rodič
commit
d490233074

+ 23 - 15
src/main/java/com/redxun/knowledge/album/service/AlbumInfoServiceImpl.java

@@ -25,6 +25,7 @@ import com.redxun.knowledge.common.UserService;
 import com.redxun.knowledge.entity.dao.ActionLog;
 import com.redxun.knowledge.entity.dao.Knowledge;
 import com.redxun.knowledge.entity.vo.KnowledgeCategoryAdminVo;
+import com.redxun.knowledge.mapper.ActionLogMapper;
 import com.redxun.knowledge.service.KnowledgeCategoryServiceImpl;
 import com.redxun.knowledge.service.KnowledgeServiceImpl;
 import com.redxun.knowledge.utils.PageListUtils;
@@ -86,6 +87,9 @@ public class AlbumInfoServiceImpl extends SuperServiceImpl<AlbumInfoMapper, Albu
     @Autowired
     private AlbumYelpApproveServiceImpl albumYelpApproveService;
 
+    @Autowired
+    private ActionLogMapper actionLogMapper;
+
     @Autowired
     private UserService userService;
 
@@ -578,9 +582,8 @@ public class AlbumInfoServiceImpl extends SuperServiceImpl<AlbumInfoMapper, Albu
             albumInfoDetailPcVo.setActionFlag(new ArrayList<>());
         }
         //增加点击量
-        // TODO: 2023/2/17  增加点击量
-        if (albumInfoDetailPcVo.getVersionState() == 2){
-            addCountViews(userId,albumInfoDetailPcVo.getPkId());
+        if (albumInfoDetailPcVo.getVersionState() == 2) {
+            addCountViews(userId, albumInfoDetailPcVo.getPkId());
         }
         return albumInfoDetailPcVo;
     }
@@ -684,6 +687,8 @@ public class AlbumInfoServiceImpl extends SuperServiceImpl<AlbumInfoMapper, Albu
      * 生成最新版审核流程数据
      */
     private void createAlbumApprove(String albumId, String versionId) {
+        //根据专辑Id查询审核表中批次(每次生成批次+1)
+        List<AlbumApprove> albumApproveListBatch = albumApproveService.findAll(new LambdaQueryWrapper<AlbumApprove>().eq(AlbumApprove::getAlbumId, albumId));
         //删除老版本审核流程
         albumApproveService.deleteByVersionId(versionId);
         //拉取专辑审核节点表
@@ -702,6 +707,7 @@ public class AlbumInfoServiceImpl extends SuperServiceImpl<AlbumInfoMapper, Albu
             albumApprove.setIsFinal(albumApprovalNode.getIsFinal());
             albumApprove.setUpdateBy(userService.queryLoginUser());
             albumApprove.setName(albumApprovalNode.getName());
+            albumApprove.setApprovalBatch(albumApproveListBatch.get(0).getApprovalBatch() + 1);
             return albumApprove;
         }).collect(Collectors.toList());
         //批量添加
@@ -815,19 +821,21 @@ public class AlbumInfoServiceImpl extends SuperServiceImpl<AlbumInfoMapper, Albu
 
     /**
      * 向统计表中增加数据(相同数据不增加)
-     * @param userId 用户Id
+     *
+     * @param userId  用户Id
      * @param albumId 专辑Id
      */
-    private void addCountViews(String userId,String albumId){
-        //QueryWrapper<ActionLog> queryWrapper = new QueryWrapper<>();
-        //queryWrapper.eq("USER_ID",userId);
-        //queryWrapper.eq("KNOWLEDGE_ID",knowledgeId);
-        //List<ActionLog> actionLogList = actionLogMapper.selectList(queryWrapper);
-        //if (org.springframework.util.CollectionUtils.isEmpty(actionLogList)){
-        //    ActionLog actionLog = new ActionLog();
-        //    actionLog.setType(1);
-        //    actionLog.setKnowledgeId(knowledgeId);
-        //    actionLog.setUserId(userId);
-        //    actionLogMapper.insert(actionLog);
+    private void addCountViews(String userId, String albumId) {
+        QueryWrapper<ActionLog> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("USER_ID", userId);
+        queryWrapper.eq("KNOWLEDGE_ID", albumId);
+        List<ActionLog> actionLogList = actionLogMapper.selectList(queryWrapper);
+        if (CollectionUtils.isEmpty(actionLogList)) {
+            ActionLog actionLog = new ActionLog();
+            actionLog.setType(2);
+            actionLog.setKnowledgeId(albumId);
+            actionLog.setUserId(userId);
+            actionLogMapper.insert(actionLog);
+        }
     }
 }

+ 33 - 0
src/main/java/com/redxun/knowledge/service/ActionLogServiceImpl.java

@@ -4,6 +4,8 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.redxun.common.base.db.BaseDao;
 import com.redxun.common.base.db.BaseService;
 import com.redxun.common.service.impl.SuperServiceImpl;
+import com.redxun.knowledge.album.entity.dao.AlbumInfo;
+import com.redxun.knowledge.album.mapper.AlbumInfoMapper;
 import com.redxun.knowledge.entity.dao.ActionLog;
 import com.redxun.knowledge.entity.dao.Knowledge;
 import com.redxun.knowledge.entity.vo.ActionLogVo;
@@ -35,6 +37,9 @@ public class ActionLogServiceImpl extends SuperServiceImpl<ActionLogMapper, Acti
     @Autowired
     private KnowledgeMapper knowledgeMapper;
 
+    @Autowired
+    private AlbumInfoMapper albumInfoMapper;
+
     @Override
     public BaseDao<ActionLog> getRepository() {
         return actionLogMapper;
@@ -60,6 +65,26 @@ public class ActionLogServiceImpl extends SuperServiceImpl<ActionLogMapper, Acti
         return true;
     }
 
+    /**
+     * 定时执行方法(每天0时统计专辑浏览量)
+     * @return
+     */
+    public boolean countAlbumViews() {
+        List<ActionLogVo> actionLogVoList = actionLogMapper.countViews(2);
+        actionLogVoList.forEach(actionLogVo -> {
+            AlbumInfo albumInfo = albumInfoMapper.selectById(actionLogVo.getKnowledgeId());
+            // 专辑没有被删除
+            if (albumInfo != null){
+                albumInfo.setPkId(actionLogVo.getKnowledgeId());
+                // 在原有点击量上增加
+                Integer views = albumInfo.getViews();
+                albumInfo.setViews(views + actionLogVo.getSum());
+                albumInfoMapper.updateById(albumInfo);
+            }
+        });
+        return true;
+    }
+
     /**
      * 定时执行方法(统计知识浏览量后清除记录)
      * @return
@@ -67,4 +92,12 @@ public class ActionLogServiceImpl extends SuperServiceImpl<ActionLogMapper, Acti
     public void deleteCountViews() {
         actionLogMapper.deleteCountViews(1);
     }
+
+    /**
+     * 定时执行方法(统计知识浏览量后清除记录)
+     * @return
+     */
+    public void deleteCountAlbumViews() {
+        actionLogMapper.deleteCountViews(2);
+    }
 }

+ 14 - 7
src/main/java/com/redxun/knowledge/task/AlbumJobHandler.java

@@ -3,12 +3,15 @@ package com.redxun.knowledge.task;
 import com.redxun.knowledge.album.entity.dao.AlbumYelp;
 import com.redxun.knowledge.album.mapper.AlbumInfoMapper;
 import com.redxun.knowledge.album.mapper.AlbumYelpMapper;
+import com.redxun.knowledge.service.ActionLogServiceImpl;
+import com.xxl.job.core.context.XxlJobHelper;
 import com.xxl.job.core.handler.IJobHandler;
 import com.xxl.job.core.handler.annotation.XxlJob;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.stereotype.Component;
+import org.springframework.transaction.annotation.Transactional;
 
 /**
  * 文件名: AlbumJobHandler
@@ -24,16 +27,20 @@ import org.springframework.stereotype.Component;
 public class AlbumJobHandler extends IJobHandler {
 
     @Autowired
-    private RedisTemplate redisTemplate;
-
-    @Autowired
-    private AlbumInfoMapper albumInfoMapper;
-
-    @Autowired
-    private AlbumYelpMapper albumYelpMapper;
+    private ActionLogServiceImpl actionLogService;
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
+    @XxlJob("countAlbumViews")
     public void execute() throws Exception {
+        // 统计专辑点击量
+        boolean result = actionLogService.countAlbumViews();
+        if (result){
+            XxlJobHelper.handleSuccess("执行成功!");
+            actionLogService.deleteCountAlbumViews();
+        } else {
+            XxlJobHelper.handleFail("执行失败!");
+        }
     }
 
 }

+ 1 - 1
src/main/resources/mapper/knowledge/ActionLogMapper.xml

@@ -4,7 +4,7 @@
 
     <select id="countViews" resultType="com.redxun.knowledge.entity.vo.ActionLogVo">
         select KNOWLEDGE_ID as knowledgeId,count(*) as sum from KM_ACTION_LOG
-        where TYPE = #{type}
+        where TYPE = #{type} and IS_DEL = 0
         group by KNOWLEDGE_ID
     </select>