Browse Source

Merge branch '20250812-wyp-videoCharacteristic' of Server/growth-manager into master

wangyunpeng 2 weeks ago
parent
commit
30f499bb5c

+ 3 - 0
api-module/src/main/java/com/tzld/piaoquan/api/common/enums/ExceptionEnum.java

@@ -47,6 +47,9 @@ public enum ExceptionEnum {
     API_PAGE_PARAM_ERROR(4001, "请输入正确的分页参数"),
     API_PAGE_SIZE_TOO_LARGE(4002, "每页获取数量不能超过500条"),
     API_PAGE_URL_SIZE_TOO_LARGE(4002, "获取视频嵌入路径 每次最多3条"),
+
+    // 自动回复
+    CGI_REPLY_BUCKET_DATA_NOT_FOUND(10000, "自动回复数据不存在"),
     ;
     private int code;
     private String msg;

+ 7 - 4
api-module/src/main/java/com/tzld/piaoquan/api/controller/CgiReplyController.java

@@ -2,14 +2,12 @@ package com.tzld.piaoquan.api.controller;
 
 import com.tzld.piaoquan.api.model.bo.BucketDataParam;
 import com.tzld.piaoquan.api.model.bo.ReplyBucketData;
+import com.tzld.piaoquan.api.model.vo.VideoCharacteristicVO;
 import com.tzld.piaoquan.api.service.CgiReplyService;
 import com.tzld.piaoquan.growth.common.common.base.CommonResponse;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
-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.*;
 
 @RestController
 @RequestMapping("/cgi/reply")
@@ -24,4 +22,9 @@ public class CgiReplyController {
         ReplyBucketData replyBucketData = cgiReplyService.getRgiReplyData(bucketDataParam);
         return CommonResponse.success(replyBucketData);
     }
+
+    @GetMapping("/getVideoCharacteristic")
+    public CommonResponse<VideoCharacteristicVO> getVideoCharacteristicByRootSourceId(@RequestParam String rootSourceId) {
+        return CommonResponse.success(cgiReplyService.getVideoCharacteristicByRootSourceId(rootSourceId));
+    }
 }

+ 17 - 0
api-module/src/main/java/com/tzld/piaoquan/api/model/vo/VideoCharacteristicVO.java

@@ -0,0 +1,17 @@
+package com.tzld.piaoquan.api.model.vo;
+
+import lombok.Data;
+
+@Data
+public class VideoCharacteristicVO {
+
+    private String ghId;
+
+    private String name;
+
+    private Long videoId;
+
+    private String title;
+
+    private String cover;
+}

+ 5 - 0
api-module/src/main/java/com/tzld/piaoquan/api/service/CgiReplyService.java

@@ -2,6 +2,7 @@ package com.tzld.piaoquan.api.service;
 
 import com.tzld.piaoquan.api.model.bo.BucketDataParam;
 import com.tzld.piaoquan.api.model.bo.ReplyBucketData;
+import com.tzld.piaoquan.api.model.vo.VideoCharacteristicVO;
 import com.tzld.piaoquan.growth.common.model.po.CgiReplyBucketData;
 
 import java.util.List;
@@ -14,4 +15,8 @@ public interface CgiReplyService {
     List<CgiReplyBucketData> getCgiReplyBucketDataListByVideoId(Long videoId);
 
     List<CgiReplyBucketData> getCgiReplyBucketDataListByGhIdVideoId(String ghId, List<Long> videoIds, String strategy);
+
+    List<CgiReplyBucketData> getCgiReplyBucketDataListByRootSourceId(String rootSourceId);
+
+    VideoCharacteristicVO getVideoCharacteristicByRootSourceId(String rootSourceId);
 }

+ 2 - 0
api-module/src/main/java/com/tzld/piaoquan/api/service/GhDetailService.java

@@ -20,5 +20,7 @@ public interface GhDetailService {
 
     GhDetail getGhDetailByGhIdType(String ghId, Integer type);
 
+    GhDetail getGhDetailByGhId(String ghId);
+
     List<GhDetail> getByChannel(String channel);
 }

+ 49 - 5
api-module/src/main/java/com/tzld/piaoquan/api/service/impl/CgiReplyServiceImpl.java

@@ -1,19 +1,25 @@
 package com.tzld.piaoquan.api.service.impl;
 
 import com.alibaba.fastjson.JSONArray;
-import com.tzld.piaoquan.growth.common.common.enums.GhTypeEnum;
+import com.alibaba.fastjson.JSONObject;
+import com.tzld.piaoquan.api.common.enums.ExceptionEnum;
 import com.tzld.piaoquan.api.common.enums.ReplyStrategyServiceEnum;
-import com.tzld.piaoquan.growth.common.dao.mapper.CgiReplyBucketDataMapper;
-import com.tzld.piaoquan.growth.common.dao.mapper.GhDetailMapper;
+import com.tzld.piaoquan.api.common.exception.CommonException;
 import com.tzld.piaoquan.api.model.bo.BucketDataParam;
 import com.tzld.piaoquan.api.model.bo.ReplyBucketData;
+import com.tzld.piaoquan.api.model.vo.VideoCharacteristicVO;
+import com.tzld.piaoquan.api.service.CgiReplyService;
+import com.tzld.piaoquan.api.service.GhDetailService;
+import com.tzld.piaoquan.api.service.strategy.ReplyStrategyService;
+import com.tzld.piaoquan.growth.common.common.enums.GhTypeEnum;
+import com.tzld.piaoquan.growth.common.dao.mapper.CgiReplyBucketDataMapper;
+import com.tzld.piaoquan.growth.common.dao.mapper.GhDetailMapper;
 import com.tzld.piaoquan.growth.common.model.po.CgiReplyBucketData;
 import com.tzld.piaoquan.growth.common.model.po.CgiReplyBucketDataExample;
 import com.tzld.piaoquan.growth.common.model.po.GhDetail;
 import com.tzld.piaoquan.growth.common.model.po.GhDetailExample;
-import com.tzld.piaoquan.api.service.CgiReplyService;
-import com.tzld.piaoquan.api.service.strategy.ReplyStrategyService;
 import com.tzld.piaoquan.growth.common.utils.LarkRobotUtil;
+import com.tzld.piaoquan.growth.common.utils.RedisUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.ApplicationContext;
@@ -21,6 +27,7 @@ import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
 
 import javax.annotation.PostConstruct;
+import java.util.Comparator;
 import java.util.List;
 import java.util.Map;
 import java.util.Objects;
@@ -39,6 +46,12 @@ public class CgiReplyServiceImpl implements CgiReplyService {
     @Autowired
     private CgiReplyBucketDataMapper cgiReplyBucketDataMapper;
 
+    @Autowired
+    GhDetailService ghDetailService;
+
+    @Autowired
+    private RedisUtils redisUtils;
+
     @PostConstruct
     public void init() {
         strategyServiceMap = applicationContext.getBeansOfType(ReplyStrategyService.class);
@@ -114,4 +127,35 @@ public class CgiReplyServiceImpl implements CgiReplyService {
                 .andStrategyEqualTo(strategy).andIsDeleteEqualTo(0);
         return cgiReplyBucketDataMapper.selectByExample(example);
     }
+
+    @Override
+    public List<CgiReplyBucketData> getCgiReplyBucketDataListByRootSourceId(String rootSourceId) {
+        CgiReplyBucketDataExample example = new CgiReplyBucketDataExample();
+        example.createCriteria().andRootSourceIdEqualTo(rootSourceId).andIsDeleteEqualTo(0);
+        return cgiReplyBucketDataMapper.selectByExample(example);
+    }
+
+    @Override
+    public VideoCharacteristicVO getVideoCharacteristicByRootSourceId(String rootSourceId) {
+        String redisKey = "auto_reply_video_detail_" + rootSourceId;
+        String value = redisUtils.get(redisKey);
+        if (StringUtils.isNotEmpty(value)) {
+            return JSONObject.parseObject(value, VideoCharacteristicVO.class);
+        }
+        List<CgiReplyBucketData> list = getCgiReplyBucketDataListByRootSourceId(rootSourceId);
+        if (CollectionUtils.isEmpty(list)) {
+            throw new CommonException(ExceptionEnum.CGI_REPLY_BUCKET_DATA_NOT_FOUND);
+        }
+        list.sort(Comparator.comparing(CgiReplyBucketData::getCreateTime).reversed());
+        CgiReplyBucketData cgiReplyBucketData = list.get(0);
+        GhDetail ghDetail = ghDetailService.getGhDetailByGhId(cgiReplyBucketData.getGhId());
+        VideoCharacteristicVO vo = new VideoCharacteristicVO();
+        vo.setGhId(cgiReplyBucketData.getGhId());
+        vo.setName(ghDetail.getGhName());
+        vo.setVideoId(cgiReplyBucketData.getMiniVideoId());
+        vo.setTitle(cgiReplyBucketData.getTitle());
+        vo.setCover(cgiReplyBucketData.getCoverUrl());
+        redisUtils.set(redisKey, JSONObject.toJSONString(vo), 3L * 24 * 60 * 60);
+        return vo;
+    }
 }

+ 12 - 0
api-module/src/main/java/com/tzld/piaoquan/api/service/impl/GhDetailServiceImpl.java

@@ -233,6 +233,18 @@ public class GhDetailServiceImpl implements GhDetailService {
         return null;
     }
 
+    @Override
+    public GhDetail getGhDetailByGhId(String ghId) {
+        GhDetailExample example = new GhDetailExample();
+        example.createCriteria().andGhIdEqualTo(ghId).andIsDeleteEqualTo(0);
+        example.setOrderByClause("id desc");
+        List<GhDetail> ghDetails = ghDetailMapper.selectByExample(example);
+        if (!CollectionUtils.isEmpty(ghDetails)) {
+            return ghDetails.get(0);
+        }
+        return null;
+    }
+
     @Override
     public List<GhDetail> getByChannel(String channel) {
         GhDetailExample ghDetailExample = new GhDetailExample();