Bläddra i källkod

Merge master into cooperation_video_candidate_pool_improved_lld_0509

# Conflicts:
#	api-module/src/main/resources/mapper/contentplatform/ext/ContentPlatformDemandVideoMapperExt.xml
刘立冬 12 timmar sedan
förälder
incheckning
5fb9068c13
22 ändrade filer med 389 tillägg och 211 borttagningar
  1. 9 5
      api-module/src/main/java/com/tzld/piaoquan/api/component/TouLiuHttpClient.java
  2. 2 0
      api-module/src/main/java/com/tzld/piaoquan/api/dao/mapper/contentplatform/ext/ContentPlatformDemandVideoMapperExt.java
  3. 102 63
      api-module/src/main/java/com/tzld/piaoquan/api/job/contentplatform/ContentPlatformDemandVideoJob.java
  4. 1 0
      api-module/src/main/java/com/tzld/piaoquan/api/model/dto/PageUrlExtData.java
  5. 1 1
      api-module/src/main/java/com/tzld/piaoquan/api/model/param/contentplatform/GzhPlanVideoContentItemParam.java
  6. 1 1
      api-module/src/main/java/com/tzld/piaoquan/api/model/param/contentplatform/QwPlanSaveVideoParam.java
  7. 11 0
      api-module/src/main/java/com/tzld/piaoquan/api/model/po/contentplatform/ContentPlatformDemandVideo.java
  8. 70 0
      api-module/src/main/java/com/tzld/piaoquan/api/model/po/contentplatform/ContentPlatformDemandVideoExample.java
  9. 6 6
      api-module/src/main/java/com/tzld/piaoquan/api/model/po/contentplatform/ContentPlatformGzhPlanVideo.java
  10. 28 28
      api-module/src/main/java/com/tzld/piaoquan/api/model/po/contentplatform/ContentPlatformGzhPlanVideoExample.java
  11. 6 6
      api-module/src/main/java/com/tzld/piaoquan/api/model/po/contentplatform/ContentPlatformQwPlanVideo.java
  12. 28 28
      api-module/src/main/java/com/tzld/piaoquan/api/model/po/contentplatform/ContentPlatformQwPlanVideoExample.java
  13. 8 8
      api-module/src/main/java/com/tzld/piaoquan/api/service/contentplatform/impl/ContentPlatformPlanServiceImpl.java
  14. 3 3
      api-module/src/main/java/com/tzld/piaoquan/api/service/impl/GhDetailServiceImpl.java
  15. 21 1
      api-module/src/main/java/com/tzld/piaoquan/api/service/impl/VideoMultiServiceImpl.java
  16. 1 1
      api-module/src/main/java/com/tzld/piaoquan/api/service/strategy/impl/ThirdPartyPushMessageStrategyV1.java
  17. 29 14
      api-module/src/main/resources/mapper/contentplatform/ContentPlatformDemandVideoMapper.xml
  18. 14 14
      api-module/src/main/resources/mapper/contentplatform/ContentPlatformGzhPlanVideoMapper.xml
  19. 14 14
      api-module/src/main/resources/mapper/contentplatform/ContentPlatformQwPlanVideoMapper.xml
  20. 7 3
      api-module/src/main/resources/mapper/contentplatform/ext/ContentPlatformDemandVideoMapperExt.xml
  21. 24 12
      common-module/src/main/java/com/tzld/piaoquan/growth/common/service/Impl/MessageAttachmentServiceImpl.java
  22. 3 3
      common-module/src/main/java/com/tzld/piaoquan/growth/common/service/MessageAttachmentService.java

+ 9 - 5
api-module/src/main/java/com/tzld/piaoquan/api/component/TouLiuHttpClient.java

@@ -31,11 +31,15 @@ public class TouLiuHttpClient {
                                        String putTypeTwo,
                                        String putTypeThree,
                                        String putCarrierId,
-                                       String testId) {
+                                       String experimentId) {
         String url = baseUrl + "/ad/put/flow/add/tencent";
         UUID uuid = UUID.randomUUID();
-        String testIdParam = (testId != null && !testId.isEmpty()) ? "&testId=" + testId : "";
-        String testIdField = (testId != null && !testId.isEmpty()) ? "\"testId\":\"" + testId + "\"," : "";
+        String experimentIdParam = (experimentId != null && !experimentId.isEmpty()) ? "&experimentId=" + experimentId : "";
+        String growthExtDataParam = "";
+        if (experimentId != null && !experimentId.isEmpty()) {
+            growthExtDataParam = "&growthExtData={\"experimentId\":\"" + experimentId + "\"}";
+        }
+        String experimentIdField = (experimentId != null && !experimentId.isEmpty()) ? "\"experimentId\":\"" + experimentId + "\"," : "";
         String jsonBody = "{" +
                 "\"videoId\":\"" + videoId + "\"," +
                 "\"putScene\":\"" + putScene + "\"," +
@@ -45,10 +49,10 @@ public class TouLiuHttpClient {
                 "\"putTypeTwo\":\"" + putTypeTwo + "\"," +
                 "\"putTypeThree\":\"" + putTypeThree + "\"," +
                 "\"putCarrierId\":\"" + putCarrierId + "\"," +
-                testIdField +
+                experimentIdField +
                 "\"path\":\"" + "pages/category" + "\"," +
                 "\"requestParam\":{" +
-                "\"jumpPage\":\"" + "pages/user-videos?fromGzh=1&rootShareId=" + uuid + "&id=" + videoId + "&shareId=" + uuid + "&rootSourceId=[rootSourceId]" + testIdParam + "\"" +
+                "\"jumpPage\":\"" + "pages/user-videos?fromGzh=1&rootShareId=" + uuid + "&id=" + videoId + "&shareId=" + uuid + "&rootSourceId=[rootSourceId]" + experimentIdParam + growthExtDataParam + "\"" +
                 "}" +
                 "}";
         try {

+ 2 - 0
api-module/src/main/java/com/tzld/piaoquan/api/dao/mapper/contentplatform/ext/ContentPlatformDemandVideoMapperExt.java

@@ -11,6 +11,8 @@ public interface ContentPlatformDemandVideoMapperExt {
 
     int deleteByDt(@Param("dt") String dt);
 
+    int deleteByDtAndChannelName(@Param("dt") String dt, @Param("channelName") String channelName);
+
     List<ContentPlatformDemandVideo> selectByCondition(@Param("dt") String dt,
                                                        @Param("channelName") String channelName,
                                                        @Param("pointType") String pointType,

+ 102 - 63
api-module/src/main/java/com/tzld/piaoquan/api/job/contentplatform/ContentPlatformDemandVideoJob.java

@@ -35,6 +35,11 @@ public class ContentPlatformDemandVideoJob {
     @Autowired
     private MessageAttachmentService messageAttachmentService;
 
+    private static final List<String> SYNC_CHANNEL_NAMES = Arrays.asList(
+            "公众号合作-即转-稳定",
+            "群/企微合作-稳定"
+    );
+
     @XxlJob("syncContentPlatformDemandVideoJob")
     public ReturnT<String> syncContentPlatformDemandVideoJob(String param) {
         String dt = DateUtil.getBeforeDayDateString("yyyyMMdd");
@@ -43,40 +48,71 @@ public class ContentPlatformDemandVideoJob {
         }
         log.info("syncContentPlatformDemandVideoJob start, dt={}", dt);
 
-        try {
-            // 调用接口获取需求匹配结果
+        for (String syncChannelName : SYNC_CHANNEL_NAMES) {
+            try {
+                syncByChannel(dt, syncChannelName);
+            } catch (Exception e) {
+                log.error("syncContentPlatformDemandVideoJob error, dt={}, channelName={}", dt, syncChannelName, e);
+                return ReturnT.FAIL;
+            }
+        }
+
+        log.info("syncContentPlatformDemandVideoJob finish, dt={}", dt);
+        return ReturnT.SUCCESS;
+    }
+
+    private static final int PAGE_SIZE = 10000;
+
+    private void syncByChannel(String dt, String syncChannelName) throws Exception {
+        log.info("syncByChannel start, dt={}, channelName={}", dt, syncChannelName);
+
+        Long now = System.currentTimeMillis();
+        List<ContentPlatformDemandVideo> saveList = new ArrayList<>();
+
+        int pageNum = 1;
+        int totalPages = 1;
+
+        while (pageNum <= totalPages) {
+            // 调用分页接口获取需求匹配结果
             JSONObject requestParam = new JSONObject();
             requestParam.put("dt", dt);
-            requestParam.put("channelName", "群/企微合作-稳定");
+            requestParam.put("channelName", syncChannelName);
+            requestParam.put("pageNum", pageNum);
+            requestParam.put("pageSize", PAGE_SIZE);
 
             String response = httpPoolClient.post(DEMAND_MATCH_API_URL, requestParam.toJSONString());
             if (!StringUtils.hasText(response)) {
-                log.error("syncContentPlatformDemandVideoJob response is empty, dt={}", dt);
-                return ReturnT.FAIL;
+                log.error("syncByChannel response is empty, dt={}, channelName={}, pageNum={}", dt, syncChannelName, pageNum);
+                throw new RuntimeException("syncByChannel response is empty");
             }
 
             JSONObject result = JSONObject.parseObject(response);
             if (result.getInteger("code") != 0) {
-                log.error("syncContentPlatformDemandVideoJob api error, dt={}, msg={}", dt, result.getString("msg"));
-                return ReturnT.FAIL;
+                log.error("syncByChannel api error, dt={}, channelName={}, pageNum={}, msg={}", dt, syncChannelName, pageNum, result.getString("msg"));
+                throw new RuntimeException("syncByChannel api error: " + result.getString("msg"));
             }
 
-            JSONArray dataArray = result.getJSONArray("data");
-            if (dataArray == null || dataArray.isEmpty()) {
-                log.info("syncContentPlatformDemandVideoJob no data, dt={}", dt);
-                return ReturnT.SUCCESS;
+            JSONObject dataObj = result.getJSONObject("data");
+            if (dataObj == null) {
+                log.info("syncByChannel no data, dt={}, channelName={}, pageNum={}", dt, syncChannelName, pageNum);
+                break;
             }
 
-            Long now = System.currentTimeMillis();
-            List<ContentPlatformDemandVideo> saveList = new ArrayList<>();
+            totalPages = dataObj.getIntValue("totalPages");
+            JSONArray records = dataObj.getJSONArray("records");
+            if (records == null || records.isEmpty()) {
+                log.info("syncByChannel no records, dt={}, channelName={}, pageNum={}", dt, syncChannelName, pageNum);
+                break;
+            }
 
-            for (int i = 0; i < dataArray.size(); i++) {
-                JSONObject demandItem = dataArray.getJSONObject(i);
+            for (int i = 0; i < records.size(); i++) {
+                JSONObject demandItem = records.getJSONObject(i);
                 String channelName = demandItem.getString("channelName");
                 String crowdSegment = demandItem.getString("crowdSegment");
                 String dimension = demandItem.getString("dimension");
                 String pointType = demandItem.getString("pointType");
                 String standardElement = demandItem.getString("standardElement");
+                String elementDimension = demandItem.getString("elementDimension");
                 String categoryName = demandItem.getString("categoryName");
                 String demandId = demandItem.getString("demandId");
                 String crowdPackage = demandItem.getString("crowdPackage");
@@ -113,6 +149,7 @@ public class ContentPlatformDemandVideoJob {
                     demandVideo.setDimension(dimension != null ? dimension : "");
                     demandVideo.setPointType(pointType != null ? pointType : "");
                     demandVideo.setStandardElement(standardElement != null ? standardElement : "");
+                    demandVideo.setElementDimension(elementDimension != null ? elementDimension : "");
                     demandVideo.setCategoryName(categoryName != null ? categoryName : "");
                     demandVideo.setDemandId(demandId != null ? demandId : "");
                     demandVideo.setCrowdPackage(crowdPackage != null ? crowdPackage : "");
@@ -143,65 +180,67 @@ public class ContentPlatformDemandVideoJob {
                     demandVideo.setExperimentId(videoItem.getString("experimentId"));
                     demandVideo.setStatus(1);
                     demandVideo.setCreateTimestamp(now);
+                    if (Objects.isNull(demandVideo.getRov()) || demandVideo.getRov() == 0.0) {
+                        continue;
+                    }
                     saveList.add(demandVideo);
                 }
             }
 
-            if (CollectionUtils.isEmpty(saveList)) {
-                log.info("syncContentPlatformDemandVideoJob no matched videos, dt={}", dt);
-                return ReturnT.SUCCESS;
-            }
+            pageNum++;
+        }
 
-            // 获取视频详情(标题、封面、视频URL)
-            List<Long> videoIds = saveList.stream().map(ContentPlatformDemandVideo::getVideoId)
-                    .distinct().collect(Collectors.toList());
-            Map<Long, VideoDetail> videoDetailMap = new HashMap<>();
-            for (List<Long> partition : Lists.partition(videoIds, 20)) {
-                Set<Long> ids = new HashSet<>(partition);
-                videoDetailMap.putAll(messageAttachmentService.getVideoDetail(ids));
-            }
+        if (CollectionUtils.isEmpty(saveList)) {
+            log.info("syncByChannel no matched videos, dt={}, channelName={}", dt, syncChannelName);
+            return;
+        }
 
-            // 填充视频详情
-            for (ContentPlatformDemandVideo demandVideo : saveList) {
-                VideoDetail detail = videoDetailMap.get(demandVideo.getVideoId());
-                if (Objects.nonNull(detail)) {
-                    demandVideo.setTitle(detail.getTitle());
-                    String cover = detail.getCover();
-                    if (StringUtils.hasText(cover) && cover.contains("/watermark")) {
-                        cover = cover.substring(0, cover.indexOf("/watermark"));
-                    }
-                    demandVideo.setCover(cover);
-                    demandVideo.setVideo(detail.getVideoPath());
+        // 获取视频详情(标题、封面、视频URL)
+        List<Long> videoIds = saveList.stream().map(ContentPlatformDemandVideo::getVideoId)
+                .distinct().collect(Collectors.toList());
+        Map<Long, VideoDetail> videoDetailMap = new HashMap<>();
+        for (List<Long> partition : Lists.partition(videoIds, 20)) {
+            Set<Long> ids = new HashSet<>(partition);
+            videoDetailMap.putAll(messageAttachmentService.getVideoDetail(ids));
+        }
+
+        // 填充视频详情
+        for (ContentPlatformDemandVideo demandVideo : saveList) {
+            VideoDetail detail = videoDetailMap.get(demandVideo.getVideoId());
+            if (Objects.nonNull(detail)) {
+                demandVideo.setTitle(detail.getTitle());
+                String cover = detail.getCover();
+                if (StringUtils.hasText(cover) && cover.contains("/watermark")) {
+                    cover = cover.substring(0, cover.indexOf("/watermark"));
                 }
+                demandVideo.setCover(cover);
+                demandVideo.setVideo(detail.getVideoPath());
             }
+        }
 
-            // 过滤未获取到视频详情的记录
-            saveList = saveList.stream()
-                    .filter(v -> StringUtils.hasText(v.getTitle()))
-                    .collect(Collectors.toList());
-
-            // 按crowd_segment粒度去重,相同videoId保留分数最高的一条
-            saveList = saveList.stream()
-                    .collect(Collectors.groupingBy(v -> v.getCrowdSegment() + "_" + v.getVideoId()))
-                    .values().stream()
-                    .map(group -> group.stream()
-                            .max(Comparator.comparingDouble(v -> v.getScore() != null ? v.getScore() : 0.0))
-                            .orElse(null))
-                    .filter(Objects::nonNull)
-                    .collect(Collectors.toList());
-
-            // 先删除当天数据,再批量插入
-            demandVideoMapperExt.deleteByDt(dt);
-            for (List<ContentPlatformDemandVideo> partition : Lists.partition(saveList, 500)) {
-                demandVideoMapperExt.batchInsert(partition);
-            }
+        // 过滤未获取到视频详情的记录
+        saveList = saveList.stream()
+                .filter(v -> StringUtils.hasText(v.getTitle()))
+                .collect(Collectors.toList());
 
-            log.info("syncContentPlatformDemandVideoJob success, dt={}, count={}", dt, saveList.size());
-            return ReturnT.SUCCESS;
-        } catch (Exception e) {
-            log.error("syncContentPlatformDemandVideoJob error, dt={}", dt, e);
-            return ReturnT.FAIL;
+//        // 按crowd_segment粒度去重,相同videoId保留分数最高的一条
+//        saveList = saveList.stream()
+//                .collect(Collectors.groupingBy(v -> v.getCrowdSegment() + "_"
+//                        + v.getChannelLevel3() + "_" + v.getDimension() + "_" + v.getVideoId()))
+//                .values().stream()
+//                .map(group -> group.stream()
+//                        .max(Comparator.comparingDouble(v -> v.getScore() != null ? v.getScore() : 0.0))
+//                        .orElse(null))
+//                .filter(Objects::nonNull)
+//                .collect(Collectors.toList());
+
+        // 先删除当天该渠道数据,再批量插入
+        demandVideoMapperExt.deleteByDtAndChannelName(dt, syncChannelName);
+        for (List<ContentPlatformDemandVideo> partition : Lists.partition(saveList, 1000)) {
+            demandVideoMapperExt.batchInsert(partition);
         }
+
+        log.info("syncByChannel success, dt={}, channelName={}, count={}", dt, syncChannelName, saveList.size());
     }
 
     @XxlJob("checkContentPlatformDemandVideoStatusJob")

+ 1 - 0
api-module/src/main/java/com/tzld/piaoquan/api/model/dto/PageUrlExtData.java

@@ -8,4 +8,5 @@ public class PageUrlExtData {
     private String growthTitleSource;
     private Long growthCoverId;
     private String growthCoverSource;
+    private String experimentId;
 }

+ 1 - 1
api-module/src/main/java/com/tzld/piaoquan/api/model/param/contentplatform/GzhPlanVideoContentItemParam.java

@@ -31,5 +31,5 @@ public class GzhPlanVideoContentItemParam {
     private Double score;
 
     @ApiModelProperty(value = "匹配实验id")
-    private String matchExperimentId;
+    private String experimentId;
 }

+ 1 - 1
api-module/src/main/java/com/tzld/piaoquan/api/model/param/contentplatform/QwPlanSaveVideoParam.java

@@ -22,6 +22,6 @@ public class QwPlanSaveVideoParam {
     private Integer scene;
 
     @ApiModelProperty(value = "匹配实验id")
-    private String matchExperimentId;
+    private String experimentId;
 
 }

+ 11 - 0
api-module/src/main/java/com/tzld/piaoquan/api/model/po/contentplatform/ContentPlatformDemandVideo.java

@@ -45,6 +45,8 @@ public class ContentPlatformDemandVideo {
 
     private String standardElement;
 
+    private String elementDimension;
+
     private String categoryName;
 
     private Integer crowdCount;
@@ -261,6 +263,14 @@ public class ContentPlatformDemandVideo {
         this.standardElement = standardElement;
     }
 
+    public String getElementDimension() {
+        return elementDimension;
+    }
+
+    public void setElementDimension(String elementDimension) {
+        this.elementDimension = elementDimension;
+    }
+
     public String getCategoryName() {
         return categoryName;
     }
@@ -449,6 +459,7 @@ public class ContentPlatformDemandVideo {
         sb.append(", demandContentTopic=").append(demandContentTopic);
         sb.append(", pointType=").append(pointType);
         sb.append(", standardElement=").append(standardElement);
+        sb.append(", elementDimension=").append(elementDimension);
         sb.append(", categoryName=").append(categoryName);
         sb.append(", crowdCount=").append(crowdCount);
         sb.append(", videoCount=").append(videoCount);

+ 70 - 0
api-module/src/main/java/com/tzld/piaoquan/api/model/po/contentplatform/ContentPlatformDemandVideoExample.java

@@ -1645,6 +1645,76 @@ public class ContentPlatformDemandVideoExample {
             return (Criteria) this;
         }
 
+        public Criteria andElementDimensionIsNull() {
+            addCriterion("element_dimension is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andElementDimensionIsNotNull() {
+            addCriterion("element_dimension is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andElementDimensionEqualTo(String value) {
+            addCriterion("element_dimension =", value, "elementDimension");
+            return (Criteria) this;
+        }
+
+        public Criteria andElementDimensionNotEqualTo(String value) {
+            addCriterion("element_dimension <>", value, "elementDimension");
+            return (Criteria) this;
+        }
+
+        public Criteria andElementDimensionGreaterThan(String value) {
+            addCriterion("element_dimension >", value, "elementDimension");
+            return (Criteria) this;
+        }
+
+        public Criteria andElementDimensionGreaterThanOrEqualTo(String value) {
+            addCriterion("element_dimension >=", value, "elementDimension");
+            return (Criteria) this;
+        }
+
+        public Criteria andElementDimensionLessThan(String value) {
+            addCriterion("element_dimension <", value, "elementDimension");
+            return (Criteria) this;
+        }
+
+        public Criteria andElementDimensionLessThanOrEqualTo(String value) {
+            addCriterion("element_dimension <=", value, "elementDimension");
+            return (Criteria) this;
+        }
+
+        public Criteria andElementDimensionLike(String value) {
+            addCriterion("element_dimension like", value, "elementDimension");
+            return (Criteria) this;
+        }
+
+        public Criteria andElementDimensionNotLike(String value) {
+            addCriterion("element_dimension not like", value, "elementDimension");
+            return (Criteria) this;
+        }
+
+        public Criteria andElementDimensionIn(List<String> values) {
+            addCriterion("element_dimension in", values, "elementDimension");
+            return (Criteria) this;
+        }
+
+        public Criteria andElementDimensionNotIn(List<String> values) {
+            addCriterion("element_dimension not in", values, "elementDimension");
+            return (Criteria) this;
+        }
+
+        public Criteria andElementDimensionBetween(String value1, String value2) {
+            addCriterion("element_dimension between", value1, value2, "elementDimension");
+            return (Criteria) this;
+        }
+
+        public Criteria andElementDimensionNotBetween(String value1, String value2) {
+            addCriterion("element_dimension not between", value1, value2, "elementDimension");
+            return (Criteria) this;
+        }
+
         public Criteria andCategoryNameIsNull() {
             addCriterion("category_name is null");
             return (Criteria) this;

+ 6 - 6
api-module/src/main/java/com/tzld/piaoquan/api/model/po/contentplatform/ContentPlatformGzhPlanVideo.java

@@ -27,7 +27,7 @@ public class ContentPlatformGzhPlanVideo {
 
     private String rootSourceId;
 
-    private String matchExperimentId;
+    private String experimentId;
 
     private Integer status;
 
@@ -139,12 +139,12 @@ public class ContentPlatformGzhPlanVideo {
         this.rootSourceId = rootSourceId;
     }
 
-    public String getMatchExperimentId() {
-        return matchExperimentId;
+    public String getExperimentId() {
+        return experimentId;
     }
 
-    public void setMatchExperimentId(String matchExperimentId) {
-        this.matchExperimentId = matchExperimentId;
+    public void setExperimentId(String experimentId) {
+        this.experimentId = experimentId;
     }
 
     public Integer getStatus() {
@@ -190,7 +190,7 @@ public class ContentPlatformGzhPlanVideo {
         sb.append(", video=").append(video);
         sb.append(", pageUrl=").append(pageUrl);
         sb.append(", rootSourceId=").append(rootSourceId);
-        sb.append(", matchExperimentId=").append(matchExperimentId);
+        sb.append(", experimentId=").append(experimentId);
         sb.append(", status=").append(status);
         sb.append(", createAccountId=").append(createAccountId);
         sb.append(", createTimestamp=").append(createTimestamp);

+ 28 - 28
api-module/src/main/java/com/tzld/piaoquan/api/model/po/contentplatform/ContentPlatformGzhPlanVideoExample.java

@@ -965,73 +965,73 @@ public class ContentPlatformGzhPlanVideoExample {
             return (Criteria) this;
         }
 
-        public Criteria andMatchExperimentIdIsNull() {
-            addCriterion("match_experiment_id is null");
+        public Criteria andExperimentIdIsNull() {
+            addCriterion("experiment_id is null");
             return (Criteria) this;
         }
 
-        public Criteria andMatchExperimentIdIsNotNull() {
-            addCriterion("match_experiment_id is not null");
+        public Criteria andExperimentIdIsNotNull() {
+            addCriterion("experiment_id is not null");
             return (Criteria) this;
         }
 
-        public Criteria andMatchExperimentIdEqualTo(String value) {
-            addCriterion("match_experiment_id =", value, "matchExperimentId");
+        public Criteria andExperimentIdEqualTo(String value) {
+            addCriterion("experiment_id =", value, "experimentId");
             return (Criteria) this;
         }
 
-        public Criteria andMatchExperimentIdNotEqualTo(String value) {
-            addCriterion("match_experiment_id <>", value, "matchExperimentId");
+        public Criteria andExperimentIdNotEqualTo(String value) {
+            addCriterion("experiment_id <>", value, "experimentId");
             return (Criteria) this;
         }
 
-        public Criteria andMatchExperimentIdGreaterThan(String value) {
-            addCriterion("match_experiment_id >", value, "matchExperimentId");
+        public Criteria andExperimentIdGreaterThan(String value) {
+            addCriterion("experiment_id >", value, "experimentId");
             return (Criteria) this;
         }
 
-        public Criteria andMatchExperimentIdGreaterThanOrEqualTo(String value) {
-            addCriterion("match_experiment_id >=", value, "matchExperimentId");
+        public Criteria andExperimentIdGreaterThanOrEqualTo(String value) {
+            addCriterion("experiment_id >=", value, "experimentId");
             return (Criteria) this;
         }
 
-        public Criteria andMatchExperimentIdLessThan(String value) {
-            addCriterion("match_experiment_id <", value, "matchExperimentId");
+        public Criteria andExperimentIdLessThan(String value) {
+            addCriterion("experiment_id <", value, "experimentId");
             return (Criteria) this;
         }
 
-        public Criteria andMatchExperimentIdLessThanOrEqualTo(String value) {
-            addCriterion("match_experiment_id <=", value, "matchExperimentId");
+        public Criteria andExperimentIdLessThanOrEqualTo(String value) {
+            addCriterion("experiment_id <=", value, "experimentId");
             return (Criteria) this;
         }
 
-        public Criteria andMatchExperimentIdLike(String value) {
-            addCriterion("match_experiment_id like", value, "matchExperimentId");
+        public Criteria andExperimentIdLike(String value) {
+            addCriterion("experiment_id like", value, "experimentId");
             return (Criteria) this;
         }
 
-        public Criteria andMatchExperimentIdNotLike(String value) {
-            addCriterion("match_experiment_id not like", value, "matchExperimentId");
+        public Criteria andExperimentIdNotLike(String value) {
+            addCriterion("experiment_id not like", value, "experimentId");
             return (Criteria) this;
         }
 
-        public Criteria andMatchExperimentIdIn(List<String> values) {
-            addCriterion("match_experiment_id in", values, "matchExperimentId");
+        public Criteria andExperimentIdIn(List<String> values) {
+            addCriterion("experiment_id in", values, "experimentId");
             return (Criteria) this;
         }
 
-        public Criteria andMatchExperimentIdNotIn(List<String> values) {
-            addCriterion("match_experiment_id not in", values, "matchExperimentId");
+        public Criteria andExperimentIdNotIn(List<String> values) {
+            addCriterion("experiment_id not in", values, "experimentId");
             return (Criteria) this;
         }
 
-        public Criteria andMatchExperimentIdBetween(String value1, String value2) {
-            addCriterion("match_experiment_id between", value1, value2, "matchExperimentId");
+        public Criteria andExperimentIdBetween(String value1, String value2) {
+            addCriterion("experiment_id between", value1, value2, "experimentId");
             return (Criteria) this;
         }
 
-        public Criteria andMatchExperimentIdNotBetween(String value1, String value2) {
-            addCriterion("match_experiment_id not between", value1, value2, "matchExperimentId");
+        public Criteria andExperimentIdNotBetween(String value1, String value2) {
+            addCriterion("experiment_id not between", value1, value2, "experimentId");
             return (Criteria) this;
         }
 

+ 6 - 6
api-module/src/main/java/com/tzld/piaoquan/api/model/po/contentplatform/ContentPlatformQwPlanVideo.java

@@ -13,7 +13,7 @@ public class ContentPlatformQwPlanVideo {
 
     private String video;
 
-    private String matchExperimentId;
+    private String experimentId;
 
     private Integer status;
 
@@ -69,12 +69,12 @@ public class ContentPlatformQwPlanVideo {
         this.video = video;
     }
 
-    public String getMatchExperimentId() {
-        return matchExperimentId;
+    public String getExperimentId() {
+        return experimentId;
     }
 
-    public void setMatchExperimentId(String matchExperimentId) {
-        this.matchExperimentId = matchExperimentId;
+    public void setExperimentId(String experimentId) {
+        this.experimentId = experimentId;
     }
 
     public Integer getStatus() {
@@ -113,7 +113,7 @@ public class ContentPlatformQwPlanVideo {
         sb.append(", title=").append(title);
         sb.append(", cover=").append(cover);
         sb.append(", video=").append(video);
-        sb.append(", matchExperimentId=").append(matchExperimentId);
+        sb.append(", experimentId=").append(experimentId);
         sb.append(", status=").append(status);
         sb.append(", createAccountId=").append(createAccountId);
         sb.append(", createTimestamp=").append(createTimestamp);

+ 28 - 28
api-module/src/main/java/com/tzld/piaoquan/api/model/po/contentplatform/ContentPlatformQwPlanVideoExample.java

@@ -505,73 +505,73 @@ public class ContentPlatformQwPlanVideoExample {
             return (Criteria) this;
         }
 
-        public Criteria andMatchExperimentIdIsNull() {
-            addCriterion("match_experiment_id is null");
+        public Criteria andExperimentIdIsNull() {
+            addCriterion("experiment_id is null");
             return (Criteria) this;
         }
 
-        public Criteria andMatchExperimentIdIsNotNull() {
-            addCriterion("match_experiment_id is not null");
+        public Criteria andExperimentIdIsNotNull() {
+            addCriterion("experiment_id is not null");
             return (Criteria) this;
         }
 
-        public Criteria andMatchExperimentIdEqualTo(String value) {
-            addCriterion("match_experiment_id =", value, "matchExperimentId");
+        public Criteria andExperimentIdEqualTo(String value) {
+            addCriterion("experiment_id =", value, "experimentId");
             return (Criteria) this;
         }
 
-        public Criteria andMatchExperimentIdNotEqualTo(String value) {
-            addCriterion("match_experiment_id <>", value, "matchExperimentId");
+        public Criteria andExperimentIdNotEqualTo(String value) {
+            addCriterion("experiment_id <>", value, "experimentId");
             return (Criteria) this;
         }
 
-        public Criteria andMatchExperimentIdGreaterThan(String value) {
-            addCriterion("match_experiment_id >", value, "matchExperimentId");
+        public Criteria andExperimentIdGreaterThan(String value) {
+            addCriterion("experiment_id >", value, "experimentId");
             return (Criteria) this;
         }
 
-        public Criteria andMatchExperimentIdGreaterThanOrEqualTo(String value) {
-            addCriterion("match_experiment_id >=", value, "matchExperimentId");
+        public Criteria andExperimentIdGreaterThanOrEqualTo(String value) {
+            addCriterion("experiment_id >=", value, "experimentId");
             return (Criteria) this;
         }
 
-        public Criteria andMatchExperimentIdLessThan(String value) {
-            addCriterion("match_experiment_id <", value, "matchExperimentId");
+        public Criteria andExperimentIdLessThan(String value) {
+            addCriterion("experiment_id <", value, "experimentId");
             return (Criteria) this;
         }
 
-        public Criteria andMatchExperimentIdLessThanOrEqualTo(String value) {
-            addCriterion("match_experiment_id <=", value, "matchExperimentId");
+        public Criteria andExperimentIdLessThanOrEqualTo(String value) {
+            addCriterion("experiment_id <=", value, "experimentId");
             return (Criteria) this;
         }
 
-        public Criteria andMatchExperimentIdLike(String value) {
-            addCriterion("match_experiment_id like", value, "matchExperimentId");
+        public Criteria andExperimentIdLike(String value) {
+            addCriterion("experiment_id like", value, "experimentId");
             return (Criteria) this;
         }
 
-        public Criteria andMatchExperimentIdNotLike(String value) {
-            addCriterion("match_experiment_id not like", value, "matchExperimentId");
+        public Criteria andExperimentIdNotLike(String value) {
+            addCriterion("experiment_id not like", value, "experimentId");
             return (Criteria) this;
         }
 
-        public Criteria andMatchExperimentIdIn(List<String> values) {
-            addCriterion("match_experiment_id in", values, "matchExperimentId");
+        public Criteria andExperimentIdIn(List<String> values) {
+            addCriterion("experiment_id in", values, "experimentId");
             return (Criteria) this;
         }
 
-        public Criteria andMatchExperimentIdNotIn(List<String> values) {
-            addCriterion("match_experiment_id not in", values, "matchExperimentId");
+        public Criteria andExperimentIdNotIn(List<String> values) {
+            addCriterion("experiment_id not in", values, "experimentId");
             return (Criteria) this;
         }
 
-        public Criteria andMatchExperimentIdBetween(String value1, String value2) {
-            addCriterion("match_experiment_id between", value1, value2, "matchExperimentId");
+        public Criteria andExperimentIdBetween(String value1, String value2) {
+            addCriterion("experiment_id between", value1, value2, "experimentId");
             return (Criteria) this;
         }
 
-        public Criteria andMatchExperimentIdNotBetween(String value1, String value2) {
-            addCriterion("match_experiment_id not between", value1, value2, "matchExperimentId");
+        public Criteria andExperimentIdNotBetween(String value1, String value2) {
+            addCriterion("experiment_id not between", value1, value2, "experimentId");
             return (Criteria) this;
         }
 

+ 8 - 8
api-module/src/main/java/com/tzld/piaoquan/api/service/contentplatform/impl/ContentPlatformPlanServiceImpl.java

@@ -340,8 +340,8 @@ public class ContentPlatformPlanServiceImpl implements ContentPlatformPlanServic
             updateCgiReplyBucketData(account.getGhId());
             // 更新gh_detail
             Map<Long, String> videoIdTestIdMap = param.getVideoList().stream()
-                    .filter(o -> StringUtils.hasText(o.getMatchExperimentId()))
-                    .collect(Collectors.toMap(GzhPlanVideoContentItemParam::getVideoId, GzhPlanVideoContentItemParam::getMatchExperimentId));
+                    .filter(o -> StringUtils.hasText(o.getExperimentId()))
+                    .collect(Collectors.toMap(GzhPlanVideoContentItemParam::getVideoId, GzhPlanVideoContentItemParam::getExperimentId));
             updateGhDetail(account, param.getSelectVideoType(), videoIds, videoIdTestIdMap);
         }
         // 调用aigc重新拉取视频
@@ -388,7 +388,7 @@ public class ContentPlatformPlanServiceImpl implements ContentPlatformPlanServic
                 item.setCustomCoverType(vo.getCustomCoverType());
                 // 上报多标题封面
                 item.setPageUrl(setMultiTitleCoverPagePath(item));
-                item.setMatchExperimentId(vo.getMatchExperimentId());
+                item.setExperimentId(vo.getExperimentId());
                 if (StringUtils.hasText(item.getPageUrl())) {
                     String rootSourceId = MessageUtil.getRootSourceId(item.getPageUrl());
                     if (StringUtils.hasText(rootSourceId)) {
@@ -408,20 +408,20 @@ public class ContentPlatformPlanServiceImpl implements ContentPlatformPlanServic
                 item.setVideo(vo.getVideo());
                 if (param.getType() == ContentPlatformGzhPlanTypeEnum.FWH_PUSH.getVal()) {
                     String response = touLiuHttpClient.sendAdFlowAddRequest(GET_SMALL_PAGE_URL, String.valueOf(vo.getVideoId()), "fwhdyy",
-                            loginAccount.getChannel(), "自动", "公众号", "文章插小程序", "文字和小程序", account.getGhId(), vo.getMatchExperimentId());
+                            loginAccount.getChannel(), "自动", "公众号", "文章插小程序", "文字和小程序", account.getGhId(), vo.getExperimentId());
                     JSONObject json = JSONObject.parseObject(response);
                     SmallPageUrlDetail smallPageUrlDetail = json.getJSONObject("data").toJavaObject(SmallPageUrlDetail.class);
                     item.setPageUrl(smallPageUrlDetail.getUrl());
                 } else if (param.getType() == ContentPlatformGzhPlanTypeEnum.GZH_PUSH.getVal()) {
                     String response = touLiuHttpClient.sendAdFlowAddRequest(GET_SMALL_PAGE_URL, String.valueOf(vo.getVideoId()), "longArticles_outer",
-                            loginAccount.getChannel(), "自动", "公众号", "文章插小程序", "小程序", account.getGhId(), vo.getMatchExperimentId());
+                            loginAccount.getChannel(), "自动", "公众号", "文章插小程序", "小程序", account.getGhId(), vo.getExperimentId());
                     JSONObject json = JSONObject.parseObject(response);
                     SmallPageUrlDetail smallPageUrlDetail = json.getJSONObject("data").toJavaObject(SmallPageUrlDetail.class);
                     item.setPageUrl(smallPageUrlDetail.getUrl());
                 }
                 // 上报多标题封面
                 item.setPageUrl(setMultiTitleCoverPagePath(item));
-                item.setMatchExperimentId(vo.getMatchExperimentId());
+                item.setExperimentId(vo.getExperimentId());
                 if (StringUtils.hasText(item.getPageUrl())) {
                     String rootSourceId = MessageUtil.getRootSourceId(item.getPageUrl());
                     if (StringUtils.hasText(rootSourceId)) {
@@ -1469,7 +1469,7 @@ public class ContentPlatformPlanServiceImpl implements ContentPlatformPlanServic
             String carrierId = StringUtils.hasText(param.getSubChannel()) ? param.getSubChannel() : "wxbdd2a2e93d9a6e25";
             String pageUrl = messageAttachmentService.getPage(loginUser.getChannel(), carrierId,
                     "dyyqw", "企微", QwPlanTypeEnum.from(param.getType()).getDescription(),
-                    "位置1", videoParam.getVideoId(), videoParam.getMatchExperimentId());
+                    "位置1", videoParam.getVideoId(), videoParam.getExperimentId());
             //pageUrl = videoMultiService.setVideoMultiTitleCoverPagePath(videoParam.getVideoId(), pageUrl,
             //        videoParam.getTitle(), videoParam.getCover());
             String rootSourceId = MessageUtil.getRootSourceId(pageUrl);
@@ -1493,7 +1493,7 @@ public class ContentPlatformPlanServiceImpl implements ContentPlatformPlanServic
         item.setTitle(videoParam.getTitle());
         item.setCover(videoParam.getCover());
         item.setVideo(videoParam.getVideo());
-        item.setMatchExperimentId(videoParam.getMatchExperimentId());
+        item.setExperimentId(videoParam.getExperimentId());
         item.setCreateAccountId(loginAccountId);
         item.setCreateTimestamp(System.currentTimeMillis());
         qwPlanVideoMapper.insertSelective(item);

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

@@ -268,7 +268,7 @@ public class GhDetailServiceImpl implements GhDetailService {
         }
     }
 
-    private String getVideoPageUrl(Long videoId, String channel, String ghId, Integer sort, Integer accountType, String testId) {
+    private String getVideoPageUrl(Long videoId, String channel, String ghId, Integer sort, Integer accountType, String experimentId) {
         // 查询库里是否存在,如果存在即复用
         try {
             CgiReplyBucketDataExample cgiReplyBucketDataExample = new CgiReplyBucketDataExample();
@@ -292,10 +292,10 @@ public class GhDetailServiceImpl implements GhDetailService {
                     }
                 }
                 response = touLiuHttpClient.sendAdFlowAddRequest(GET_SMALL_PAGE_URL, String.valueOf(videoId), putScene,
-                        channel, "自动", "公众号", "自动回复小程序", "位置" + sort, ghId, testId);
+                        channel, "自动", "公众号", "自动回复小程序", "位置" + sort, ghId, experimentId);
             } else {
                 response = touLiuHttpClient.sendAdFlowAddRequest(GET_SMALL_PAGE_URL, String.valueOf(videoId), "dyyjs",
-                        channel, "自动", "公众号", "自动回复小程序", "位置" + sort, ghId, testId);
+                        channel, "自动", "公众号", "自动回复小程序", "位置" + sort, ghId, experimentId);
             }
             JSONObject jsonObject = JSON.parseObject(response);
             if (jsonObject != null && jsonObject.containsKey("data")) {

+ 21 - 1
api-module/src/main/java/com/tzld/piaoquan/api/service/impl/VideoMultiServiceImpl.java

@@ -36,8 +36,28 @@ public class VideoMultiServiceImpl implements VideoMultiService {
 
     @Override
     public String setVideoMultiTitleCoverPagePath(Long videoId, String pageUrl, String title, String coverUrl) {
+        // 解析已有的growthExtData,判断是否已包含对应字段
         if (pageUrl.contains("growthExtData")) {
-            return pageUrl;
+            try {
+                String decoded = java.net.URLDecoder.decode(pageUrl, "UTF-8");
+                int idx = decoded.indexOf("growthExtData=");
+                if (idx >= 0) {
+                    String jsonStr = decoded.substring(idx + "growthExtData=".length());
+                    // 截取到下一个&或结尾,避免后续参数干扰JSON解析
+                    int ampIdx = jsonStr.indexOf("&");
+                    if (ampIdx >= 0) {
+                        jsonStr = jsonStr.substring(0, ampIdx);
+                    }
+                    JSONObject existingData = JSONObject.parseObject(jsonStr);
+                    if (existingData != null
+                            && existingData.containsKey("growthTitleId")
+                            && existingData.containsKey("growthCoverId")) {
+                        return pageUrl;
+                    }
+                }
+            } catch (Exception e) {
+                log.error("VideoMultiService parse existing growthExtData error", e);
+            }
         }
         List<VideoGrowthMultiTitle> multiTitleList = getMultiTitleByVideoId(videoId);
         List<VideoGrowthMultiCover> multiCoverList = getMultiCoverByVideoId(videoId);

+ 1 - 1
api-module/src/main/java/com/tzld/piaoquan/api/service/strategy/impl/ThirdPartyPushMessageStrategyV1.java

@@ -434,7 +434,7 @@ public class ThirdPartyPushMessageStrategyV1 implements ReplyStrategyService {
                                 }
                                 cgiReplyBucketData.setCoverUrl(cover + coverSuffix);
                             }
-                            videoTestIdMap.put(gzhPlanVideo.getVideoId(), gzhPlanVideo.getMatchExperimentId());
+                            videoTestIdMap.put(gzhPlanVideo.getVideoId(), gzhPlanVideo.getExperimentId());
                         } else {
                             if (videoDetail != null && StringUtils.isNotEmpty(videoDetail.getCover())) {
                                 cgiReplyBucketData.setCoverUrl(videoDetail.getCover());

+ 29 - 14
api-module/src/main/resources/mapper/contentplatform/ContentPlatformDemandVideoMapper.xml

@@ -24,6 +24,7 @@
     <result column="demand_content_topic" jdbcType="VARCHAR" property="demandContentTopic" />
     <result column="point_type" jdbcType="VARCHAR" property="pointType" />
     <result column="standard_element" jdbcType="VARCHAR" property="standardElement" />
+    <result column="element_dimension" jdbcType="VARCHAR" property="elementDimension" />
     <result column="category_name" jdbcType="VARCHAR" property="categoryName" />
     <result column="crowd_count" jdbcType="INTEGER" property="crowdCount" />
     <result column="video_count" jdbcType="INTEGER" property="videoCount" />
@@ -107,10 +108,10 @@
     id, dt, online_action, channel_name, crowd_segment, channel_level3, demand_id, crowd_package, 
     conversion_target, partner, account, scene_value, demand_strategy, drive_dimension_time, 
     dimension, demand_filter_sort_strategy, demand_type, demand_content_id, demand_content_title, 
-    demand_content_topic, point_type, standard_element, category_name, crowd_count, video_count, 
-    visit_uv, uv_ratio, total_rov, match_experiment_id, video_id, config_code, score, 
-    sim, rov, match_text, title, cover, video, experiment_id, `status`, create_timestamp, 
-    update_timestamp
+    demand_content_topic, point_type, standard_element, element_dimension, category_name, 
+    crowd_count, video_count, visit_uv, uv_ratio, total_rov, match_experiment_id, video_id, 
+    config_code, score, sim, rov, match_text, title, cover, video, experiment_id, `status`, 
+    create_timestamp, update_timestamp
   </sql>
   <select id="selectByExample" parameterType="com.tzld.piaoquan.api.model.po.contentplatform.ContentPlatformDemandVideoExample" resultMap="BaseResultMap">
     select
@@ -153,11 +154,11 @@
       demand_strategy, drive_dimension_time, dimension, 
       demand_filter_sort_strategy, demand_type, demand_content_id, 
       demand_content_title, demand_content_topic, 
-      point_type, standard_element, category_name, 
-      crowd_count, video_count, visit_uv, 
-      uv_ratio, total_rov, match_experiment_id, 
-      video_id, config_code, score, 
-      sim, rov, match_text, 
+      point_type, standard_element, element_dimension, 
+      category_name, crowd_count, video_count, 
+      visit_uv, uv_ratio, total_rov, 
+      match_experiment_id, video_id, config_code, 
+      score, sim, rov, match_text, 
       title, cover, video, 
       experiment_id, `status`, create_timestamp, 
       update_timestamp)
@@ -168,11 +169,11 @@
       #{demandStrategy,jdbcType=VARCHAR}, #{driveDimensionTime,jdbcType=VARCHAR}, #{dimension,jdbcType=VARCHAR}, 
       #{demandFilterSortStrategy,jdbcType=VARCHAR}, #{demandType,jdbcType=VARCHAR}, #{demandContentId,jdbcType=VARCHAR}, 
       #{demandContentTitle,jdbcType=VARCHAR}, #{demandContentTopic,jdbcType=VARCHAR}, 
-      #{pointType,jdbcType=VARCHAR}, #{standardElement,jdbcType=VARCHAR}, #{categoryName,jdbcType=VARCHAR}, 
-      #{crowdCount,jdbcType=INTEGER}, #{videoCount,jdbcType=INTEGER}, #{visitUv,jdbcType=BIGINT}, 
-      #{uvRatio,jdbcType=DOUBLE}, #{totalRov,jdbcType=DOUBLE}, #{matchExperimentId,jdbcType=VARCHAR}, 
-      #{videoId,jdbcType=BIGINT}, #{configCode,jdbcType=VARCHAR}, #{score,jdbcType=DOUBLE}, 
-      #{sim,jdbcType=DOUBLE}, #{rov,jdbcType=DOUBLE}, #{matchText,jdbcType=VARCHAR}, 
+      #{pointType,jdbcType=VARCHAR}, #{standardElement,jdbcType=VARCHAR}, #{elementDimension,jdbcType=VARCHAR}, 
+      #{categoryName,jdbcType=VARCHAR}, #{crowdCount,jdbcType=INTEGER}, #{videoCount,jdbcType=INTEGER}, 
+      #{visitUv,jdbcType=BIGINT}, #{uvRatio,jdbcType=DOUBLE}, #{totalRov,jdbcType=DOUBLE}, 
+      #{matchExperimentId,jdbcType=VARCHAR}, #{videoId,jdbcType=BIGINT}, #{configCode,jdbcType=VARCHAR}, 
+      #{score,jdbcType=DOUBLE}, #{sim,jdbcType=DOUBLE}, #{rov,jdbcType=DOUBLE}, #{matchText,jdbcType=VARCHAR}, 
       #{title,jdbcType=VARCHAR}, #{cover,jdbcType=VARCHAR}, #{video,jdbcType=VARCHAR}, 
       #{experimentId,jdbcType=VARCHAR}, #{status,jdbcType=INTEGER}, #{createTimestamp,jdbcType=BIGINT}, 
       #{updateTimestamp,jdbcType=BIGINT})
@@ -246,6 +247,9 @@
       <if test="standardElement != null">
         standard_element,
       </if>
+      <if test="elementDimension != null">
+        element_dimension,
+      </if>
       <if test="categoryName != null">
         category_name,
       </if>
@@ -374,6 +378,9 @@
       <if test="standardElement != null">
         #{standardElement,jdbcType=VARCHAR},
       </if>
+      <if test="elementDimension != null">
+        #{elementDimension,jdbcType=VARCHAR},
+      </if>
       <if test="categoryName != null">
         #{categoryName,jdbcType=VARCHAR},
       </if>
@@ -511,6 +518,9 @@
       <if test="record.standardElement != null">
         standard_element = #{record.standardElement,jdbcType=VARCHAR},
       </if>
+      <if test="record.elementDimension != null">
+        element_dimension = #{record.elementDimension,jdbcType=VARCHAR},
+      </if>
       <if test="record.categoryName != null">
         category_name = #{record.categoryName,jdbcType=VARCHAR},
       </if>
@@ -600,6 +610,7 @@
       demand_content_topic = #{record.demandContentTopic,jdbcType=VARCHAR},
       point_type = #{record.pointType,jdbcType=VARCHAR},
       standard_element = #{record.standardElement,jdbcType=VARCHAR},
+      element_dimension = #{record.elementDimension,jdbcType=VARCHAR},
       category_name = #{record.categoryName,jdbcType=VARCHAR},
       crowd_count = #{record.crowdCount,jdbcType=INTEGER},
       video_count = #{record.videoCount,jdbcType=INTEGER},
@@ -690,6 +701,9 @@
       <if test="standardElement != null">
         standard_element = #{standardElement,jdbcType=VARCHAR},
       </if>
+      <if test="elementDimension != null">
+        element_dimension = #{elementDimension,jdbcType=VARCHAR},
+      </if>
       <if test="categoryName != null">
         category_name = #{categoryName,jdbcType=VARCHAR},
       </if>
@@ -776,6 +790,7 @@
       demand_content_topic = #{demandContentTopic,jdbcType=VARCHAR},
       point_type = #{pointType,jdbcType=VARCHAR},
       standard_element = #{standardElement,jdbcType=VARCHAR},
+      element_dimension = #{elementDimension,jdbcType=VARCHAR},
       category_name = #{categoryName,jdbcType=VARCHAR},
       crowd_count = #{crowdCount,jdbcType=INTEGER},
       video_count = #{videoCount,jdbcType=INTEGER},

+ 14 - 14
api-module/src/main/resources/mapper/contentplatform/ContentPlatformGzhPlanVideoMapper.xml

@@ -15,7 +15,7 @@
     <result column="video" jdbcType="VARCHAR" property="video" />
     <result column="page_url" jdbcType="VARCHAR" property="pageUrl" />
     <result column="root_source_id" jdbcType="VARCHAR" property="rootSourceId" />
-    <result column="match_experiment_id" jdbcType="VARCHAR" property="matchExperimentId" />
+    <result column="experiment_id" jdbcType="VARCHAR" property="experimentId" />
     <result column="status" jdbcType="INTEGER" property="status" />
     <result column="create_account_id" jdbcType="BIGINT" property="createAccountId" />
     <result column="create_timestamp" jdbcType="BIGINT" property="createTimestamp" />
@@ -80,7 +80,7 @@
   </sql>
   <sql id="Base_Column_List">
     id, plan_id, video_id, title, custom_title_id, custom_title, cover, custom_cover_id, 
-    custom_cover, custom_cover_type, video, page_url, root_source_id, match_experiment_id, 
+    custom_cover, custom_cover_type, video, page_url, root_source_id, experiment_id, 
     `status`, create_account_id, create_timestamp
   </sql>
   <select id="selectByExample" parameterType="com.tzld.piaoquan.api.model.po.contentplatform.ContentPlatformGzhPlanVideoExample" resultMap="BaseResultMap">
@@ -121,13 +121,13 @@
       title, custom_title_id, custom_title, 
       cover, custom_cover_id, custom_cover, 
       custom_cover_type, video, page_url, 
-      root_source_id, match_experiment_id, `status`, 
+      root_source_id, experiment_id, `status`, 
       create_account_id, create_timestamp)
     values (#{id,jdbcType=BIGINT}, #{planId,jdbcType=BIGINT}, #{videoId,jdbcType=BIGINT}, 
       #{title,jdbcType=VARCHAR}, #{customTitleId,jdbcType=BIGINT}, #{customTitle,jdbcType=VARCHAR}, 
       #{cover,jdbcType=VARCHAR}, #{customCoverId,jdbcType=BIGINT}, #{customCover,jdbcType=VARCHAR}, 
       #{customCoverType,jdbcType=INTEGER}, #{video,jdbcType=VARCHAR}, #{pageUrl,jdbcType=VARCHAR}, 
-      #{rootSourceId,jdbcType=VARCHAR}, #{matchExperimentId,jdbcType=VARCHAR}, #{status,jdbcType=INTEGER}, 
+      #{rootSourceId,jdbcType=VARCHAR}, #{experimentId,jdbcType=VARCHAR}, #{status,jdbcType=INTEGER}, 
       #{createAccountId,jdbcType=BIGINT}, #{createTimestamp,jdbcType=BIGINT})
   </insert>
   <insert id="insertSelective" parameterType="com.tzld.piaoquan.api.model.po.contentplatform.ContentPlatformGzhPlanVideo">
@@ -172,8 +172,8 @@
       <if test="rootSourceId != null">
         root_source_id,
       </if>
-      <if test="matchExperimentId != null">
-        match_experiment_id,
+      <if test="experimentId != null">
+        experiment_id,
       </if>
       <if test="status != null">
         `status`,
@@ -225,8 +225,8 @@
       <if test="rootSourceId != null">
         #{rootSourceId,jdbcType=VARCHAR},
       </if>
-      <if test="matchExperimentId != null">
-        #{matchExperimentId,jdbcType=VARCHAR},
+      <if test="experimentId != null">
+        #{experimentId,jdbcType=VARCHAR},
       </if>
       <if test="status != null">
         #{status,jdbcType=INTEGER},
@@ -287,8 +287,8 @@
       <if test="record.rootSourceId != null">
         root_source_id = #{record.rootSourceId,jdbcType=VARCHAR},
       </if>
-      <if test="record.matchExperimentId != null">
-        match_experiment_id = #{record.matchExperimentId,jdbcType=VARCHAR},
+      <if test="record.experimentId != null">
+        experiment_id = #{record.experimentId,jdbcType=VARCHAR},
       </if>
       <if test="record.status != null">
         `status` = #{record.status,jdbcType=INTEGER},
@@ -319,7 +319,7 @@
       video = #{record.video,jdbcType=VARCHAR},
       page_url = #{record.pageUrl,jdbcType=VARCHAR},
       root_source_id = #{record.rootSourceId,jdbcType=VARCHAR},
-      match_experiment_id = #{record.matchExperimentId,jdbcType=VARCHAR},
+      experiment_id = #{record.experimentId,jdbcType=VARCHAR},
       `status` = #{record.status,jdbcType=INTEGER},
       create_account_id = #{record.createAccountId,jdbcType=BIGINT},
       create_timestamp = #{record.createTimestamp,jdbcType=BIGINT}
@@ -366,8 +366,8 @@
       <if test="rootSourceId != null">
         root_source_id = #{rootSourceId,jdbcType=VARCHAR},
       </if>
-      <if test="matchExperimentId != null">
-        match_experiment_id = #{matchExperimentId,jdbcType=VARCHAR},
+      <if test="experimentId != null">
+        experiment_id = #{experimentId,jdbcType=VARCHAR},
       </if>
       <if test="status != null">
         `status` = #{status,jdbcType=INTEGER},
@@ -395,7 +395,7 @@
       video = #{video,jdbcType=VARCHAR},
       page_url = #{pageUrl,jdbcType=VARCHAR},
       root_source_id = #{rootSourceId,jdbcType=VARCHAR},
-      match_experiment_id = #{matchExperimentId,jdbcType=VARCHAR},
+      experiment_id = #{experimentId,jdbcType=VARCHAR},
       `status` = #{status,jdbcType=INTEGER},
       create_account_id = #{createAccountId,jdbcType=BIGINT},
       create_timestamp = #{createTimestamp,jdbcType=BIGINT}

+ 14 - 14
api-module/src/main/resources/mapper/contentplatform/ContentPlatformQwPlanVideoMapper.xml

@@ -8,7 +8,7 @@
     <result column="title" jdbcType="VARCHAR" property="title" />
     <result column="cover" jdbcType="VARCHAR" property="cover" />
     <result column="video" jdbcType="VARCHAR" property="video" />
-    <result column="match_experiment_id" jdbcType="VARCHAR" property="matchExperimentId" />
+    <result column="experiment_id" jdbcType="VARCHAR" property="experimentId" />
     <result column="status" jdbcType="INTEGER" property="status" />
     <result column="create_account_id" jdbcType="BIGINT" property="createAccountId" />
     <result column="create_timestamp" jdbcType="BIGINT" property="createTimestamp" />
@@ -72,7 +72,7 @@
     </where>
   </sql>
   <sql id="Base_Column_List">
-    id, plan_id, video_id, title, cover, video, match_experiment_id, `status`, create_account_id, 
+    id, plan_id, video_id, title, cover, video, experiment_id, `status`, create_account_id, 
     create_timestamp
   </sql>
   <select id="selectByExample" parameterType="com.tzld.piaoquan.api.model.po.contentplatform.ContentPlatformQwPlanVideoExample" resultMap="BaseResultMap">
@@ -111,11 +111,11 @@
   <insert id="insert" parameterType="com.tzld.piaoquan.api.model.po.contentplatform.ContentPlatformQwPlanVideo">
     insert into content_platform_qw_plan_video (id, plan_id, video_id, 
       title, cover, video, 
-      match_experiment_id, `status`, create_account_id, 
+      experiment_id, `status`, create_account_id, 
       create_timestamp)
     values (#{id,jdbcType=BIGINT}, #{planId,jdbcType=BIGINT}, #{videoId,jdbcType=BIGINT}, 
       #{title,jdbcType=VARCHAR}, #{cover,jdbcType=VARCHAR}, #{video,jdbcType=VARCHAR}, 
-      #{matchExperimentId,jdbcType=VARCHAR}, #{status,jdbcType=INTEGER}, #{createAccountId,jdbcType=BIGINT}, 
+      #{experimentId,jdbcType=VARCHAR}, #{status,jdbcType=INTEGER}, #{createAccountId,jdbcType=BIGINT}, 
       #{createTimestamp,jdbcType=BIGINT})
   </insert>
   <insert id="insertSelective" parameterType="com.tzld.piaoquan.api.model.po.contentplatform.ContentPlatformQwPlanVideo">
@@ -139,8 +139,8 @@
       <if test="video != null">
         video,
       </if>
-      <if test="matchExperimentId != null">
-        match_experiment_id,
+      <if test="experimentId != null">
+        experiment_id,
       </if>
       <if test="status != null">
         `status`,
@@ -171,8 +171,8 @@
       <if test="video != null">
         #{video,jdbcType=VARCHAR},
       </if>
-      <if test="matchExperimentId != null">
-        #{matchExperimentId,jdbcType=VARCHAR},
+      <if test="experimentId != null">
+        #{experimentId,jdbcType=VARCHAR},
       </if>
       <if test="status != null">
         #{status,jdbcType=INTEGER},
@@ -212,8 +212,8 @@
       <if test="record.video != null">
         video = #{record.video,jdbcType=VARCHAR},
       </if>
-      <if test="record.matchExperimentId != null">
-        match_experiment_id = #{record.matchExperimentId,jdbcType=VARCHAR},
+      <if test="record.experimentId != null">
+        experiment_id = #{record.experimentId,jdbcType=VARCHAR},
       </if>
       <if test="record.status != null">
         `status` = #{record.status,jdbcType=INTEGER},
@@ -237,7 +237,7 @@
       title = #{record.title,jdbcType=VARCHAR},
       cover = #{record.cover,jdbcType=VARCHAR},
       video = #{record.video,jdbcType=VARCHAR},
-      match_experiment_id = #{record.matchExperimentId,jdbcType=VARCHAR},
+      experiment_id = #{record.experimentId,jdbcType=VARCHAR},
       `status` = #{record.status,jdbcType=INTEGER},
       create_account_id = #{record.createAccountId,jdbcType=BIGINT},
       create_timestamp = #{record.createTimestamp,jdbcType=BIGINT}
@@ -263,8 +263,8 @@
       <if test="video != null">
         video = #{video,jdbcType=VARCHAR},
       </if>
-      <if test="matchExperimentId != null">
-        match_experiment_id = #{matchExperimentId,jdbcType=VARCHAR},
+      <if test="experimentId != null">
+        experiment_id = #{experimentId,jdbcType=VARCHAR},
       </if>
       <if test="status != null">
         `status` = #{status,jdbcType=INTEGER},
@@ -285,7 +285,7 @@
       title = #{title,jdbcType=VARCHAR},
       cover = #{cover,jdbcType=VARCHAR},
       video = #{video,jdbcType=VARCHAR},
-      match_experiment_id = #{matchExperimentId,jdbcType=VARCHAR},
+      experiment_id = #{experimentId,jdbcType=VARCHAR},
       `status` = #{status,jdbcType=INTEGER},
       create_account_id = #{createAccountId,jdbcType=BIGINT},
       create_timestamp = #{createTimestamp,jdbcType=BIGINT}

+ 7 - 3
api-module/src/main/resources/mapper/contentplatform/ext/ContentPlatformDemandVideoMapperExt.xml

@@ -4,7 +4,7 @@
 
     <insert id="batchInsert" parameterType="java.util.List">
         INSERT INTO content_platform_demand_video
-        (dt, channel_name, crowd_segment, dimension, point_type, standard_element,
+        (dt, channel_name, crowd_segment, dimension, point_type, standard_element, element_dimension,
          category_name, demand_id, crowd_package, conversion_target, partner, account, scene_value,
          demand_strategy, drive_dimension_time, demand_filter_sort_strategy, demand_type,
          demand_content_id, demand_content_title, demand_content_topic,
@@ -13,7 +13,7 @@
          match_text, title, cover, video, experiment_id, channel_level3, status, create_timestamp, update_timestamp)
         VALUES
         <foreach collection="list" item="item" separator=",">
-            (#{item.dt}, #{item.channelName}, #{item.crowdSegment}, #{item.dimension}, #{item.pointType}, #{item.standardElement},
+            (#{item.dt}, #{item.channelName}, #{item.crowdSegment}, #{item.dimension}, #{item.pointType}, #{item.standardElement}, #{item.elementDimension},
              #{item.categoryName}, #{item.demandId}, #{item.crowdPackage}, #{item.conversionTarget}, #{item.partner}, #{item.account}, #{item.sceneValue},
              #{item.demandStrategy}, #{item.driveDimensionTime}, #{item.demandFilterSortStrategy}, #{item.demandType},
              #{item.demandContentId}, #{item.demandContentTitle}, #{item.demandContentTopic},
@@ -27,8 +27,12 @@
         DELETE FROM content_platform_demand_video WHERE dt = #{dt}
     </delete>
 
+    <delete id="deleteByDtAndChannelName">
+        DELETE FROM content_platform_demand_video WHERE dt = #{dt} AND channel_name = #{channelName}
+    </delete>
+
     <select id="selectByCondition" resultType="com.tzld.piaoquan.api.model.po.contentplatform.ContentPlatformDemandVideo">
-        SELECT id, dt, channel_name, channel_level3, crowd_segment, dimension, point_type, standard_element,
+        SELECT id, dt, channel_name, channel_level3, crowd_segment, dimension, point_type, standard_element, element_dimension,
                category_name, demand_id, crowd_package, conversion_target, partner, account, scene_value,
                demand_strategy, drive_dimension_time, demand_filter_sort_strategy, demand_type,
                demand_content_id, demand_content_title, demand_content_topic,

+ 24 - 12
common-module/src/main/java/com/tzld/piaoquan/growth/common/service/Impl/MessageAttachmentServiceImpl.java

@@ -389,7 +389,7 @@ public class MessageAttachmentServiceImpl implements MessageAttachmentService {
     }
 
     @Override
-    public String getPage(String putScene, String channel, Staff staff, Long videoId, String typeOne, String typeTwo, String testId) {
+    public String getPage(String putScene, String channel, Staff staff, Long videoId, String typeOne, String typeTwo, String experimentId) {
         try {
             if (staff == null || staff.getCarrierId() == null) {
                 return "";
@@ -398,7 +398,7 @@ public class MessageAttachmentServiceImpl implements MessageAttachmentService {
             if (StringUtils.isNotEmpty(page)) {
                 return page;
             }
-            return insertPage(putScene, channel, staff.getCarrierId(), videoId, staff.getRemark(), typeOne, typeTwo, testId);
+            return insertPage(putScene, channel, staff.getCarrierId(), videoId, staff.getRemark(), typeOne, typeTwo, experimentId);
         } catch (IOException e) {
             log.error("MessageAttachmentService getPage error", e);
         }
@@ -406,19 +406,19 @@ public class MessageAttachmentServiceImpl implements MessageAttachmentService {
     }
 
     @Override
-    public String getPageNoCache(String putScene, String channel, Staff staff, Long videoId, String typeOne, String typeTwo, String testId) {
+    public String getPageNoCache(String putScene, String channel, Staff staff, Long videoId, String typeOne, String typeTwo, String experimentId) {
         try {
             if (staff == null || staff.getCarrierId() == null) {
                 return "";
             }
-            return insertPage(putScene, channel, staff.getCarrierId(), videoId, staff.getRemark(), typeOne, typeTwo, testId);
+            return insertPage(putScene, channel, staff.getCarrierId(), videoId, staff.getRemark(), typeOne, typeTwo, experimentId);
         } catch (IOException e) {
             log.error("MessageAttachmentService getPageNoCache error", e);
         }
         return null;
     }
 
-    private String insertPage(String putScene, String channel, String carrierId, Long videoId, String remark, String typeOne, String typeTwo, String testId) throws IOException {
+    private String insertPage(String putScene, String channel, String carrierId, Long videoId, String remark, String typeOne, String typeTwo, String experimentId) throws IOException {
         AdPutFlowParam param = new AdPutFlowParam();
         param.setChannel(channel);
         param.setPath("pages/category.html");
@@ -430,13 +430,19 @@ public class MessageAttachmentServiceImpl implements MessageAttachmentService {
         param.setPutTypeThree("位置X");
         param.setRemark(remark);
         param.setVideoId(videoId);
-        param.setTestId(testId);
+        param.setTestId(experimentId);
         Map<String, String> requestParam = new HashMap<>();
-        String testIdParam = (testId != null && !testId.isEmpty()) ? "&testId=" + testId : "";
+        String experimentIdParam = (experimentId != null && !experimentId.isEmpty()) ? "&experimentId=" + experimentId : "";
+        String growthExtDataParam = "";
+        if (experimentId != null && !experimentId.isEmpty()) {
+            JSONObject growthExtData = new JSONObject();
+            growthExtData.put("experimentId", experimentId);
+            growthExtDataParam = "&growthExtData=" + growthExtData.toJSONString();
+        }
         String jumpPage = "pages/user-videos?fromGzh=1&rootShareId=${uuid}&id=${videoId}&shareId=${uuid}&rootSourceId=[rootSourceId]"
                 .replace("${videoId}", "" + videoId)
                 .replace("${uuid}", "" + UUID.randomUUID())
-                + testIdParam;
+                + experimentIdParam + growthExtDataParam;
         requestParam.put("jumpPage", jumpPage);
         param.setRequestParam(requestParam);
         String res = httpPoolClient.post(POST_ADD_TENCENT, JSONObject.toJSONString(param));
@@ -498,7 +504,7 @@ public class MessageAttachmentServiceImpl implements MessageAttachmentService {
 
     @Override
     public String getPage(String channel, String carrierId, String scene, String putTypeOne,
-                          String putTypeTwo, String putTypeThree, Long videoId, String testId) {
+                          String putTypeTwo, String putTypeThree, Long videoId, String experimentId) {
         AdPutFlowParam param = new AdPutFlowParam();
         param.setChannel(channel);
         param.setPath("pages/category");
@@ -509,13 +515,19 @@ public class MessageAttachmentServiceImpl implements MessageAttachmentService {
         param.setPutTypeTwo(putTypeTwo);
         param.setPutTypeThree(putTypeThree);
         param.setVideoId(videoId);
-        param.setTestId(testId);
+        param.setTestId(experimentId);
         Map<String, String> requestParam = new HashMap<>();
-        String testIdParam = (testId != null && !testId.isEmpty()) ? "&testId=" + testId : "";
+        String experimentIdParam = (experimentId != null && !experimentId.isEmpty()) ? "&experimentId=" + experimentId : "";
+        String growthExtDataParam = "";
+        if (experimentId != null && !experimentId.isEmpty()) {
+            JSONObject growthExtData = new JSONObject();
+            growthExtData.put("experimentId", experimentId);
+            growthExtDataParam = "&growthExtData=" + growthExtData.toJSONString();
+        }
         String jumpPage = "pages/user-videos?fromGzh=1&rootShareId=${uuid}&id=${videoId}&shareId=${uuid}&rootSourceId=[rootSourceId]"
                 .replace("${videoId}", "" + videoId)
                 .replace("${uuid}", "" + UUID.randomUUID())
-                + testIdParam;
+                + experimentIdParam + growthExtDataParam;
         requestParam.put("jumpPage", jumpPage);
         param.setRequestParam(requestParam);
         try {

+ 3 - 3
common-module/src/main/java/com/tzld/piaoquan/growth/common/service/MessageAttachmentService.java

@@ -25,11 +25,11 @@ public interface MessageAttachmentService {
 
     String getPicMediaId(String cover, Long corpId, Long miniprogramVideoId);
 
-    String getPage(String putScene, String channel, Staff staff, Long videoId, String typeOne, String typeTwo, String testId);
+    String getPage(String putScene, String channel, Staff staff, Long videoId, String typeOne, String typeTwo, String experimentId);
 
-    String getPageNoCache(String putScene, String channel, Staff staff, Long videoId, String typeOne, String typeTwo, String testId);
+    String getPageNoCache(String putScene, String channel, Staff staff, Long videoId, String typeOne, String typeTwo, String experimentId);
 
-    String getPage(String channel, String carrierId, String scene, String putTypeOne, String putTypeTwo, String putTypeThree, Long videoId, String testId);
+    String getPage(String channel, String carrierId, String scene, String putTypeOne, String putTypeTwo, String putTypeThree, Long videoId, String experimentId);
 
     CommonResponse<Long> createAttachment(Integer type, MultipartFile file, String url, String picUrl, String page, String title, String desc, String appId, Integer extType);
 }