Browse Source

修改复用逻辑

xueyiming 9 tháng trước cách đây
mục cha
commit
fe1cb63735

+ 1 - 1
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/service/cgi/TouLiuHttpClientService.java

@@ -23,7 +23,7 @@ public class TouLiuHttpClientService {
 //    }
 
     public String sendAdFlowAddRequest(String baseUrl,
-                                       Long videoId,
+                                       String videoId,
                                        String putScene,
                                        String channel,
                                        String remark,

+ 25 - 9
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/service/strategy/reply/impl/BuckStrategyV1.java

@@ -168,37 +168,53 @@ public class BuckStrategyV1 implements ReplyStrategyService {
         if (CollectionUtils.isEmpty(smallDataCgiReplyList)) {
             return smallDataCgiReplyList;
         }
-        for (CgiReplyBucketData cgiReplyBucketData : smallDataCgiReplyList) {
+        Set<String> keys = smallDataCgiReplyList.stream().map(x -> x.getGhId() + "&" + x.getMiniVideoId() + "&" + x.getSort()).collect(Collectors.toSet());
+        Map<String, SmallPageUrlDetail> keyPageUrl = new HashMap<>();
+        // gh-id + videoId + sort 复用同一page_url及落地页id
+        for (String key : keys) {
+            String[] keyArr = key.split("&");
+            String ghId = keyArr[0];
+            String videoId = keyArr[1];
+            String sort = keyArr[2];
             // 查询库里是否存在,如果存在即复用
             CgiReplyBucketDataExample cgiReplyBucketDataExample = new CgiReplyBucketDataExample();
-            cgiReplyBucketDataExample.createCriteria().andIsDeleteEqualTo(0)
-                    .andMiniVideoIdEqualTo(cgiReplyBucketData.getMiniVideoId())
-                    .andGhIdEqualTo(cgiReplyBucketData.getGhId())
-                    .andSortEqualTo(cgiReplyBucketData.getSort());
-            List<CgiReplyBucketData> cgiReplyBucketDataList = cgiReplyBucketDataMapper.selectByExample(cgiReplyBucketDataExample);
+            cgiReplyBucketDataExample.createCriteria().andIsDeleteEqualTo(0).andMiniVideoIdEqualTo(Long.valueOf(videoId)).andGhIdEqualTo(ghId);
+            List<CgiReplyBucketData> cgiReplyBucketData = cgiReplyBucketDataMapper.selectByExample(cgiReplyBucketDataExample);
             SmallPageUrlDetail smallPageUrlDetail = new SmallPageUrlDetail();
-            if (CollectionUtils.isEmpty(cgiReplyBucketDataList)) {
+            if (CollectionUtils.isEmpty(cgiReplyBucketData)) {
                 // 库里不存在,调用新生成
-                String response = httpClientService.sendAdFlowAddRequest(GET_SMALL_PAGE_URL, cgiReplyBucketData.getMiniVideoId(), "touliu","tencentgzh","自动","公众号", "自动回复小程序", "位置" + cgiReplyBucketData.getSort(), cgiReplyBucketData.getGhId());
+                String response = httpClientService.sendAdFlowAddRequest(GET_SMALL_PAGE_URL, videoId, "touliu","tencentgzh","自动","公众号", "自动回复小程序", "位置" + sort, ghId);
                 JSONObject jsonObject = JSON.parseObject(response);
                 if (jsonObject.getInteger("code").equals(0)) {
                     smallPageUrlDetail = jsonObject.getObject("data", SmallPageUrlDetail.class);
+                    keyPageUrl.put(key, smallPageUrlDetail);
                 } else {
                     log.error("httpClientService get page url error,response:" + response);
                     throw new RuntimeException("httpClientService get page url error");
                 }
             } else {
                 // 复用
-                CgiReplyBucketData cgiReplyBucketData1 = cgiReplyBucketDataList.get(0);
+                CgiReplyBucketData cgiReplyBucketData1 = cgiReplyBucketData.get(0);
                 smallPageUrlDetail.setId(cgiReplyBucketData1.getPagePathUrlId());
                 smallPageUrlDetail.setUrl(cgiReplyBucketData1.getMiniPagePath());
             }
+            keyPageUrl.put(key, smallPageUrlDetail);
+        }
+        // 处理数据
+        for (CgiReplyBucketData cgiReplyBucketData : smallDataCgiReplyList) {
+            String key = cgiReplyBucketData.getGhId() + "&" + cgiReplyBucketData.getMiniVideoId();
+            SmallPageUrlDetail smallPageUrlDetail = keyPageUrl.get(key);
+            if (Objects.isNull(smallPageUrlDetail)) {
+                log.error("setSmallPageUrl get map url is null" + JSON.toJSONString(keyPageUrl));
+                throw new RuntimeException("setSmallPageUrl get map url is null");
+            }
             cgiReplyBucketData.setPagePathUrlId(smallPageUrlDetail.getId());
             cgiReplyBucketData.setMiniPagePath(smallPageUrlDetail.getUrl());
         }
         return smallDataCgiReplyList;
     }
 
+
     private List<CgiReplyBucketData> readStrategyOrderSmallData(Set<String> keyedSet) {
         List<CgiReplyBucketData> result = new ArrayList<>();
         for (String key : keyedSet) {

+ 24 - 9
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/service/strategy/reply/impl/PushMessageStrategyV1.java

@@ -152,31 +152,46 @@ public class PushMessageStrategyV1 implements ReplyStrategyService {
         if (CollectionUtils.isEmpty(smallDataCgiReplyList)) {
             return smallDataCgiReplyList;
         }
-        for (CgiReplyBucketData cgiReplyBucketData : smallDataCgiReplyList) {
+        Set<String> keys = smallDataCgiReplyList.stream().map(x -> x.getGhId() + "&" + x.getMiniVideoId() + "&" + x.getSort()).collect(Collectors.toSet());
+        Map<String, SmallPageUrlDetail> keyPageUrl = new HashMap<>();
+        // gh-id + videoId + sort 复用同一page_url及落地页id
+        for (String key : keys) {
+            String[] keyArr = key.split("&");
+            String ghId = keyArr[0];
+            String videoId = keyArr[1];
+            String sort = keyArr[2];
             // 查询库里是否存在,如果存在即复用
             CgiReplyBucketDataExample cgiReplyBucketDataExample = new CgiReplyBucketDataExample();
-            cgiReplyBucketDataExample.createCriteria().andIsDeleteEqualTo(0)
-                    .andMiniVideoIdEqualTo(cgiReplyBucketData.getMiniVideoId())
-                    .andGhIdEqualTo(cgiReplyBucketData.getGhId())
-                    .andSortEqualTo(cgiReplyBucketData.getSort());
-            List<CgiReplyBucketData> cgiReplyBucketDataList = cgiReplyBucketDataMapper.selectByExample(cgiReplyBucketDataExample);
+            cgiReplyBucketDataExample.createCriteria().andIsDeleteEqualTo(0).andMiniVideoIdEqualTo(Long.valueOf(videoId)).andGhIdEqualTo(ghId);
+            List<CgiReplyBucketData> cgiReplyBucketData = cgiReplyBucketDataMapper.selectByExample(cgiReplyBucketDataExample);
             SmallPageUrlDetail smallPageUrlDetail = new SmallPageUrlDetail();
-            if (CollectionUtils.isEmpty(cgiReplyBucketDataList)) {
+            if (CollectionUtils.isEmpty(cgiReplyBucketData)) {
                 // 库里不存在,调用新生成
-                String response = httpClientService.sendAdFlowAddRequest(GET_SMALL_PAGE_URL, cgiReplyBucketData.getMiniVideoId(), "dyyjs", channel, "自动", "公众号", "自动回复小程序", "位置" + cgiReplyBucketData.getSort(), cgiReplyBucketData.getGhId());
+                String response = httpClientService.sendAdFlowAddRequest(GET_SMALL_PAGE_URL, videoId, "dyyjs", channel, "自动", "公众号", "自动回复小程序", "位置" + sort, ghId);
                 JSONObject jsonObject = JSON.parseObject(response);
                 if (jsonObject.getInteger("code").equals(0)) {
                     smallPageUrlDetail = jsonObject.getObject("data", SmallPageUrlDetail.class);
+                    keyPageUrl.put(key, smallPageUrlDetail);
                 } else {
                     log.error("httpClientService get page url error,response:" + response);
                     throw new RuntimeException("httpClientService get page url error");
                 }
             } else {
                 // 复用
-                CgiReplyBucketData cgiReplyBucketData1 = cgiReplyBucketDataList.get(0);
+                CgiReplyBucketData cgiReplyBucketData1 = cgiReplyBucketData.get(0);
                 smallPageUrlDetail.setId(cgiReplyBucketData1.getPagePathUrlId());
                 smallPageUrlDetail.setUrl(cgiReplyBucketData1.getMiniPagePath());
             }
+            keyPageUrl.put(key, smallPageUrlDetail);
+        }
+        // 处理数据
+        for (CgiReplyBucketData cgiReplyBucketData : smallDataCgiReplyList) {
+            String key = cgiReplyBucketData.getGhId() + "&" + cgiReplyBucketData.getMiniVideoId();
+            SmallPageUrlDetail smallPageUrlDetail = keyPageUrl.get(key);
+            if (Objects.isNull(smallPageUrlDetail)) {
+                log.error("setSmallPageUrl get map url is null" + JSON.toJSONString(keyPageUrl));
+                throw new RuntimeException("setSmallPageUrl get map url is null");
+            }
             cgiReplyBucketData.setPagePathUrlId(smallPageUrlDetail.getId());
             cgiReplyBucketData.setMiniPagePath(smallPageUrlDetail.getUrl());
         }

+ 24 - 9
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/service/strategy/reply/impl/WeComPushMessageStrategyV1.java

@@ -152,31 +152,46 @@ public class WeComPushMessageStrategyV1 implements ReplyStrategyService {
         if (CollectionUtils.isEmpty(smallDataCgiReplyList)) {
             return smallDataCgiReplyList;
         }
-        for (CgiReplyBucketData cgiReplyBucketData : smallDataCgiReplyList) {
+        Set<String> keys = smallDataCgiReplyList.stream().map(x -> x.getGhId() + "&" + x.getMiniVideoId() + "&" + x.getSort()).collect(Collectors.toSet());
+        Map<String, SmallPageUrlDetail> keyPageUrl = new HashMap<>();
+        // gh-id + videoId + sort 复用同一page_url及落地页id
+        for (String key : keys) {
+            String[] keyArr = key.split("&");
+            String ghId = keyArr[0];
+            String videoId = keyArr[1];
+            String sort = keyArr[2];
             // 查询库里是否存在,如果存在即复用
             CgiReplyBucketDataExample cgiReplyBucketDataExample = new CgiReplyBucketDataExample();
-            cgiReplyBucketDataExample.createCriteria().andIsDeleteEqualTo(0)
-                    .andMiniVideoIdEqualTo(cgiReplyBucketData.getMiniVideoId())
-                    .andGhIdEqualTo(cgiReplyBucketData.getGhId())
-                    .andSortEqualTo(cgiReplyBucketData.getSort());
-            List<CgiReplyBucketData> cgiReplyBucketDataList = cgiReplyBucketDataMapper.selectByExample(cgiReplyBucketDataExample);
+            cgiReplyBucketDataExample.createCriteria().andIsDeleteEqualTo(0).andMiniVideoIdEqualTo(Long.valueOf(videoId)).andGhIdEqualTo(ghId);
+            List<CgiReplyBucketData> cgiReplyBucketData = cgiReplyBucketDataMapper.selectByExample(cgiReplyBucketDataExample);
             SmallPageUrlDetail smallPageUrlDetail = new SmallPageUrlDetail();
-            if (CollectionUtils.isEmpty(cgiReplyBucketDataList)) {
+            if (CollectionUtils.isEmpty(cgiReplyBucketData)) {
                 // 库里不存在,调用新生成
-                String response = httpClientService.sendAdFlowAddRequest(GET_SMALL_PAGE_URL, cgiReplyBucketData.getMiniVideoId(), "touliu", "tencentqw", "自动", "企微", "自动回复小程序", "位置" + cgiReplyBucketData.getSort(), cgiReplyBucketData.getGhId());
+                String response = httpClientService.sendAdFlowAddRequest(GET_SMALL_PAGE_URL, videoId, "touliu", "tencentqw", "自动", "企微", "自动回复小程序", "位置" + sort, ghId);
                 JSONObject jsonObject = JSON.parseObject(response);
                 if (jsonObject.getInteger("code").equals(0)) {
                     smallPageUrlDetail = jsonObject.getObject("data", SmallPageUrlDetail.class);
+                    keyPageUrl.put(key, smallPageUrlDetail);
                 } else {
                     log.error("httpClientService get page url error,response:" + response);
                     throw new RuntimeException("httpClientService get page url error");
                 }
             } else {
                 // 复用
-                CgiReplyBucketData cgiReplyBucketData1 = cgiReplyBucketDataList.get(0);
+                CgiReplyBucketData cgiReplyBucketData1 = cgiReplyBucketData.get(0);
                 smallPageUrlDetail.setId(cgiReplyBucketData1.getPagePathUrlId());
                 smallPageUrlDetail.setUrl(cgiReplyBucketData1.getMiniPagePath());
             }
+            keyPageUrl.put(key, smallPageUrlDetail);
+        }
+        // 处理数据
+        for (CgiReplyBucketData cgiReplyBucketData : smallDataCgiReplyList) {
+            String key = cgiReplyBucketData.getGhId() + "&" + cgiReplyBucketData.getMiniVideoId();
+            SmallPageUrlDetail smallPageUrlDetail = keyPageUrl.get(key);
+            if (Objects.isNull(smallPageUrlDetail)) {
+                log.error("setSmallPageUrl get map url is null" + JSON.toJSONString(keyPageUrl));
+                throw new RuntimeException("setSmallPageUrl get map url is null");
+            }
             cgiReplyBucketData.setPagePathUrlId(smallPageUrlDetail.getId());
             cgiReplyBucketData.setMiniPagePath(smallPageUrlDetail.getUrl());
         }