Kaynağa Gözat

需求召回视频 多种召回

wangyunpeng 3 gün önce
ebeveyn
işleme
adbc06e6dc
20 değiştirilmiş dosya ile 2374 ekleme ve 97 silme
  1. 1 1
      core/src/main/java/com/tzld/videoVector/api/DashScopeEmbeddingApiService.java
  2. 1 1
      core/src/main/java/com/tzld/videoVector/api/EmbeddingApiService.java
  3. 132 49
      core/src/main/java/com/tzld/videoVector/job/ChannelDemandMatchJob.java
  4. 1 1
      core/src/main/java/com/tzld/videoVector/job/DataMigrationJob.java
  5. 1 1
      core/src/main/java/com/tzld/videoVector/job/MaterialDeconstructCheckJob.java
  6. 4 4
      core/src/main/java/com/tzld/videoVector/job/VideoTitleVectorJob.java
  7. 13 13
      core/src/main/java/com/tzld/videoVector/job/VideoVectorJob.java
  8. 72 0
      core/src/main/java/com/tzld/videoVector/model/po/pgVector/ChannelDemandMatchConfig.java
  9. 140 0
      core/src/main/java/com/tzld/videoVector/model/po/pgVector/ChannelDemandMatchConfigExample.java
  10. 576 0
      core/src/main/java/com/tzld/videoVector/model/po/pgVector/ChannelDemandMatchResult.java
  11. 1110 0
      core/src/main/java/com/tzld/videoVector/model/po/pgVector/ChannelDemandMatchResultExample.java
  12. 2 2
      core/src/main/java/com/tzld/videoVector/service/impl/EmbeddingServiceImpl.java
  13. 1 1
      core/src/main/java/com/tzld/videoVector/service/impl/MaterialSearchServiceImpl.java
  14. 2 2
      core/src/main/java/com/tzld/videoVector/service/impl/PgVectorStoreServiceImpl.java
  15. 2 2
      core/src/main/java/com/tzld/videoVector/service/impl/RedisVectorStoreServiceImpl.java
  16. 3 3
      core/src/main/java/com/tzld/videoVector/service/impl/VectorizeServiceImpl.java
  17. 3 3
      core/src/main/java/com/tzld/videoVector/service/impl/VideoSearchServiceImpl.java
  18. 38 5
      core/src/main/resources/mapper/pgVector/ChannelDemandMatchConfigMapper.xml
  19. 260 7
      core/src/main/resources/mapper/pgVector/ChannelDemandMatchResultMapper.xml
  20. 12 2
      core/src/main/resources/mapper/pgVector/ext/ChannelDemandMatchResultMapperExt.xml

+ 1 - 1
core/src/main/java/com/tzld/videoVector/api/DashScopeEmbeddingApiService.java

@@ -152,7 +152,7 @@ public class DashScopeEmbeddingApiService {
                 vector.add(embeddingArray.getFloat(i));
             }
 
-            log.debug("DashScope Embedding 解析成功,维度: {}", vector.size());
+            log.info("DashScope Embedding 解析成功,维度: {}", vector.size());
             return vector;
         } catch (Exception e) {
             log.error("解析 DashScope Embedding 响应失败: {}, 响应: {}", e.getMessage(), responseBody);

+ 1 - 1
core/src/main/java/com/tzld/videoVector/api/EmbeddingApiService.java

@@ -132,7 +132,7 @@ public class EmbeddingApiService {
                 vector.add(embeddingArray.getFloat(i));
             }
 
-            log.debug("成功解析向量,维度: {}", vector.size());
+            log.info("成功解析向量,维度: {}", vector.size());
             return vector;
         } catch (Exception e) {
             log.error("解析向量化 API 响应失败: {}", e.getMessage(), e);

+ 132 - 49
core/src/main/java/com/tzld/videoVector/job/ChannelDemandMatchJob.java

@@ -122,7 +122,7 @@ public class ChannelDemandMatchJob {
         deleteExistingResults(config.getId(), dt);
 
         // 2. 构造ODPS SQL并查询需求数据
-        String sql = buildDemandSql(channelName, dt, minUv, minRov);
+        String sql = buildDemandSql(config, dt, minUv, minRov);
         log.info("查询ODPS需求, 渠道: {}, sql长度: {}", channelName, sql.length());
 
         List<ChannelDemandMatchResult> demandResults = new ArrayList<>();
@@ -133,8 +133,23 @@ public class ChannelDemandMatchJob {
                 result.setConfigId(config.getId());
                 result.setDt(dt);
                 result.setChannelName(record.getString("人群_渠道"));
+                result.setOnlineAction(record.getString("线上应用动作"));
+                result.setMatchExperimentId(record.getString("匹配实验id"));
+                result.setDemandId(record.getString("需求id"));
                 result.setCrowdSegment(record.getString("人群细分"));
+                result.setCrowdPackage(record.getString("人群包"));
+                result.setConversionTarget(record.getString("转化目标"));
+                result.setPartner(record.getString("合作方"));
+                result.setAccount(record.getString("账号"));
+                result.setSceneValue(record.getString("场景值"));
+                result.setDemandStrategy(record.getString("需求策略"));
+                result.setDriveDimensionTime(record.getString("驱动维度_时间"));
                 result.setDimension(record.getString("驱动维度_空间"));
+                result.setDemandFilterSortStrategy(record.getString("需求筛选排序策略"));
+                result.setDemandType(record.getString("需求类型"));
+                result.setDemandContentId(record.getString("需求内容id"));
+                result.setDemandContentTitle(record.getString("需求内容标题"));
+                result.setDemandContentTopic(record.getString("需求内容选题"));
                 result.setPointType(record.getString("需求特征点类型"));
                 result.setStandardElement(record.getString("需求特征点"));
                 result.setCategoryName(record.getString("需求特征类"));
@@ -144,8 +159,9 @@ public class ChannelDemandMatchJob {
                 if (Objects.nonNull(crowdCount)) {
                     result.setCrowdCount(crowdCount.intValue());
                 }
-                result.setVideoCount(safeGetInt(record, "内容数量"));
                 result.setVisitUv(safeGetLong(record, "群体访问uv"));
+                result.setUvRatio(safeGetDouble(record, "uv占比"));
+                result.setVideoCount(safeGetInt(record, "内容数量"));
                 result.setTotalRov(safeGetDouble(record, "群体rov"));
 
                 result.setMatchStatus((short) 0); // 待匹配
@@ -197,23 +213,49 @@ public class ChannelDemandMatchJob {
 
     /**
      * 对单条需求执行向量匹配,将所有匹配到的视频逐条写入结果表
-     * 每条需求 × 每个匹配视频 = 一行记录
+     * 三种召回策略可同时存在,分别执行:
+     * 1. 需求类型+需求内容id+需求内容标题 均有值 → 用需求内容标题召回
+     * 2. 需求内容选题 有值 → 用需求内容选题召回
+     * 3. 需求特征点类型+需求特征点 均有值 → 用需求特征点召回
      */
     private void matchDemandAndSave(ChannelDemandMatchResult demand, int topN) {
-        String pointType = demand.getPointType();
-        String queryText = demand.getStandardElement();
+        List<ChannelDemandMatchResult> allBatchRows = new ArrayList<>();
+
+        // 策略一:需求类型+需求内容id+需求内容标题 均有值 → 用需求内容标题召回
+        if (hasValidValue(demand.getDemandType()) && hasValidValue(demand.getDemandContentId())
+                && hasValidValue(demand.getDemandContentTitle())) {
+            List<ChannelDemandMatchResult> rows = doRecall(demand, demand.getDemandContentTitle(), "VIDEO_TITLE", topN);
+            allBatchRows.addAll(rows);
+        }
+
+        // 策略二:需求内容选题 有值 → 用需求内容选题召回
+        if (hasValidValue(demand.getDemandContentTopic())) {
+            List<ChannelDemandMatchResult> rows = doRecall(demand, demand.getDemandContentTopic(), "VIDEO_TOPIC", topN);
+            allBatchRows.addAll(rows);
+        }
+
+        // 策略三:需求特征点类型+需求特征点 均有值 → 用需求特征点召回
+        if (hasValidValue(demand.getPointType()) && hasValidValue(demand.getStandardElement())) {
+            String configCode = POINT_TYPE_CONFIG_CODE_MAP.getOrDefault(demand.getPointType(), "VIDEO_TOPIC");
+            List<ChannelDemandMatchResult> rows = doRecall(demand, demand.getStandardElement(), configCode, topN);
+            allBatchRows.addAll(rows);
+        }
 
-        if (!StringUtils.hasText(queryText)) {
-            log.warn("标准化元素为空, pointType={}", pointType);
-            demand.setMatchStatus((short) 2); // 无结果
-            resultMapper.insertSelective(demand);
+        if (allBatchRows.isEmpty()) {
             return;
         }
 
-        // 根据点类型确定configCode
-        String configCode = POINT_TYPE_CONFIG_CODE_MAP.getOrDefault(pointType, "VIDEO_TOPIC");
+        resultMapperExt.batchInsert(allBatchRows);
+        log.info("需求匹配完成, channelName={}, demandId={}, 写入{}条视频",
+                demand.getChannelName(), demand.getDemandId(), allBatchRows.size());
+    }
+
+    /**
+     * 执行单次召回并构建结果行
+     */
+    private List<ChannelDemandMatchResult> doRecall(ChannelDemandMatchResult demand, String queryText, String configCode, int topN) {
+        List<ChannelDemandMatchResult> batchRows = new ArrayList<>();
 
-        // 调用recallWithScore
         RecallVideoScoreParam param = new RecallVideoScoreParam();
         param.setQueryText(queryText);
         param.setConfigCode(configCode);
@@ -221,35 +263,16 @@ public class ChannelDemandMatchJob {
 
         RecallVideoScoreVO scoreVO = videoSearchService.recallWithScore(param);
         if (scoreVO == null || CollectionUtils.isEmpty(scoreVO.getItems())) {
-            log.debug("未匹配到视频, pointType={}, queryText={}", pointType, queryText);
-            demand.setMatchStatus((short) 2); // 无结果
-            resultMapper.insertSelective(demand);
-            return;
+            return batchRows;
         }
 
-        // 将所有匹配结果收集后批量写入(每条需求对应多个匹配视频,按videoId去重)
         List<RecallVideoScoreVO.ScoredVideoItem> items = scoreVO.getItems();
         Set<Long> seenVideoIds = new HashSet<>();
-        List<ChannelDemandMatchResult> batchRows = new ArrayList<>();
         for (RecallVideoScoreVO.ScoredVideoItem item : items) {
-            // videoId去重:同一条需求下不写入重复的视频
             if (item.getVideoId() == null || !seenVideoIds.add(item.getVideoId())) {
                 continue;
             }
-            ChannelDemandMatchResult row = new ChannelDemandMatchResult();
-            // 复制需求维度字段
-            row.setConfigId(demand.getConfigId());
-            row.setDt(demand.getDt());
-            row.setChannelName(demand.getChannelName());
-            row.setCrowdSegment(demand.getCrowdSegment());
-            row.setDimension(demand.getDimension());
-            row.setPointType(demand.getPointType());
-            row.setStandardElement(demand.getStandardElement());
-            row.setCategoryName(demand.getCategoryName());
-            row.setCrowdCount(demand.getCrowdCount());
-            row.setVideoCount(demand.getVideoCount());
-            row.setVisitUv(demand.getVisitUv());
-            row.setTotalRov(demand.getTotalRov());
+            ChannelDemandMatchResult row = copyDemandFields(demand);
             // 填充匹配结果
             row.setMatchVideoId(item.getVideoId());
             row.setMatchConfigCode(item.getConfigCode());
@@ -258,38 +281,98 @@ public class ChannelDemandMatchJob {
             row.setMatchRov(item.getRov());
             row.setMatchText(item.getText());
             row.setMatchStatus((short) 1); // 已匹配
-
             batchRows.add(row);
         }
-        if (!batchRows.isEmpty()) {
-            resultMapperExt.batchInsert(batchRows);
-        }
-        log.debug("需求匹配完成, pointType={}, queryText={}, 召回{}条, 去重后写入{}条视频",
-                pointType, queryText, items.size(), batchRows.size());
+        return batchRows;
+    }
+
+    /**
+     * 复制需求维度字段到新行
+     */
+    private ChannelDemandMatchResult copyDemandFields(ChannelDemandMatchResult demand) {
+        ChannelDemandMatchResult row = new ChannelDemandMatchResult();
+        row.setConfigId(demand.getConfigId());
+        row.setDt(demand.getDt());
+        row.setChannelName(demand.getChannelName());
+        row.setOnlineAction(demand.getOnlineAction());
+        row.setMatchExperimentId(demand.getMatchExperimentId());
+        row.setDemandId(demand.getDemandId());
+        row.setCrowdSegment(demand.getCrowdSegment());
+        row.setCrowdPackage(demand.getCrowdPackage());
+        row.setConversionTarget(demand.getConversionTarget());
+        row.setPartner(demand.getPartner());
+        row.setAccount(demand.getAccount());
+        row.setSceneValue(demand.getSceneValue());
+        row.setDemandStrategy(demand.getDemandStrategy());
+        row.setDriveDimensionTime(demand.getDriveDimensionTime());
+        row.setDimension(demand.getDimension());
+        row.setDemandFilterSortStrategy(demand.getDemandFilterSortStrategy());
+        row.setDemandType(demand.getDemandType());
+        row.setDemandContentId(demand.getDemandContentId());
+        row.setDemandContentTitle(demand.getDemandContentTitle());
+        row.setDemandContentTopic(demand.getDemandContentTopic());
+        row.setPointType(demand.getPointType());
+        row.setStandardElement(demand.getStandardElement());
+        row.setCategoryName(demand.getCategoryName());
+        row.setCrowdCount(demand.getCrowdCount());
+        row.setVisitUv(demand.getVisitUv());
+        row.setUvRatio(demand.getUvRatio());
+        row.setVideoCount(demand.getVideoCount());
+        row.setTotalRov(demand.getTotalRov());
+        return row;
     }
 
     /**
-     * 构造ODPS查询需求SQL
+     * 判断字段是否有效(不为空且不是'-')
      */
-    private String buildDemandSql(String channelName, String dt, int minUv, double minRov) {
+    private boolean hasValidValue(String value) {
+        return StringUtils.hasText(value) && !"-".equals(value.trim());
+    }
+
+    /**
+     * 构造ODPS查询需求SQL(返回所有字段)
+     */
+    private String buildDemandSql(ChannelDemandMatchConfig config, String dt, int minUv, double minRov) {
         StringBuilder sb = new StringBuilder();
-        sb.append("SELECT 人群_渠道");
+        sb.append("SELECT 日期");
+        sb.append(",线上应用动作");
+        sb.append(",匹配实验id");
+        sb.append(",需求id");
+        sb.append(",人群_渠道");
         sb.append(",人群细分");
+        sb.append(",人群包");
+        sb.append(",转化目标");
+        sb.append(",合作方");
+        sb.append(",账号");
+        sb.append(",场景值");
+        sb.append(",需求策略");
+        sb.append(",驱动维度_时间");
         sb.append(",驱动维度_空间");
-        sb.append(",需求特征点类型");
+        sb.append(",需求筛选排序策略");
+        sb.append(",需求类型");
+        sb.append(",需求内容id");
+        sb.append(",需求内容标题");
+        sb.append(",需求内容选题");
         sb.append(",需求特征点");
+        sb.append(",需求特征点类型");
         sb.append(",需求特征类");
         sb.append(",round(人群总数量, 0) as 人群总数量");
-        sb.append(",内容数量");
         sb.append(",群体访问uv");
+        sb.append(",uv占比");
+        sb.append(",内容数量");
         sb.append(",群体rov");
         sb.append(" FROM loghubods.dwd_channel_element_demand_feature_stat");
         sb.append(" WHERE dt = '").append(dt).append("'");
-        sb.append(" AND 人群_渠道 = '").append(channelName.replace("'", "''")).append("'");
-        sb.append(" AND 人群细分 IS NOT NULL AND 人群细分 <> '-'");
-        sb.append(" AND 驱动维度_空间 IS NOT NULL AND 驱动维度_空间 <> '-'");
-        sb.append(" AND 需求特征点类型 IS NOT NULL AND 需求特征点类型 <> '-'");
-        sb.append(" AND 需求特征点 IS NOT NULL AND 需求特征点 <> '-'");
+        // 人群渠道筛选:使用channelName
+        sb.append(" AND 人群_渠道 = '").append(config.getChannelName().replace("'", "''")).append("'");
+        // 线上应用动作筛选
+        if (StringUtils.hasText(config.getOnlineAction())) {
+            sb.append(" AND 线上应用动作 = '").append(config.getOnlineAction().replace("'", "''")).append("'");
+        }
+        // 需求策略筛选
+        if (StringUtils.hasText(config.getDemandStrategy())) {
+            sb.append(" AND 需求策略 = '").append(config.getDemandStrategy().replace("'", "''")).append("'");
+        }
         sb.append(" AND 群体访问uv > ").append(minUv);
         if (minRov > 0) {
             sb.append(" AND 群体rov >= ").append(minRov);

+ 1 - 1
core/src/main/java/com/tzld/videoVector/job/DataMigrationJob.java

@@ -200,7 +200,7 @@ public class DataMigrationJob {
                 try {
                     String vectorData = mysql.getVectorData();
                     if (!StringUtils.hasText(vectorData)) {
-                        log.debug("content_vector id={} vectorData 为空,跳过", mysql.getId());
+                        log.info("content_vector id={} vectorData 为空,跳过", mysql.getId());
                         skipCount++;
                         continue;
                     }

+ 1 - 1
core/src/main/java/com/tzld/videoVector/job/MaterialDeconstructCheckJob.java

@@ -135,7 +135,7 @@ public class MaterialDeconstructCheckJob {
                     ? result.getStatus().shortValue() : content.getStatus();
 
             if (newStatus.equals(content.getStatus())) {
-                log.debug("解构状态未变化,taskId={}, status={}", taskId, newStatus);
+                log.info("解构状态未变化,taskId={}, status={}", taskId, newStatus);
                 return 0;
             }
 

+ 4 - 4
core/src/main/java/com/tzld/videoVector/job/VideoTitleVectorJob.java

@@ -169,14 +169,14 @@ public class VideoTitleVectorJob {
             try {
                 VideoDetail detail = detailMap.get(videoId);
                 if (detail == null || !StringUtils.hasText(detail.getTitle())) {
-                    log.debug("videoId={} 无视频详情或标题为空,跳过", videoId);
+                    log.info("videoId={} 无视频详情或标题为空,跳过", videoId);
                     totalSkip.incrementAndGet();
                     continue;
                 }
 
                 // 审核过滤:未通过审核的视频跳过
                 if (!detail.isAuditPassed()) {
-                    log.debug("videoId={} 审核未通过,跳过", videoId);
+                    log.info("videoId={} 审核未通过,跳过", videoId);
                     totalSkip.incrementAndGet();
                     continue;
                 }
@@ -198,7 +198,7 @@ public class VideoTitleVectorJob {
                 // 存储向量
                 vectorStoreService.save(configCode, videoId, vector, title);
                 totalSuccess.incrementAndGet();
-                log.debug("videoId={} 标题向量化存储成功", videoId);
+                log.info("videoId={} 标题向量化存储成功", videoId);
 
             } catch (Exception e) {
                 log.error("videoId={} 标题向量化异常: {}", videoId, e.getMessage(), e);
@@ -216,7 +216,7 @@ public class VideoTitleVectorJob {
         if (StringUtils.hasText(textHash)) {
             List<Float> cached = vectorStoreService.getVectorByTextHash(textHash, configCode);
             if (cached != null && !cached.isEmpty()) {
-                log.debug("命中 text_hash 缓存,复用 embedding,hash={}", textHash);
+                log.info("命中 text_hash 缓存,复用 embedding,hash={}", textHash);
                 return cached;
             }
         }

+ 13 - 13
core/src/main/java/com/tzld/videoVector/job/VideoVectorJob.java

@@ -177,7 +177,7 @@ public class VideoVectorJob {
                     .filter(id -> !existingVideoIds.contains(id))
                     .collect(Collectors.toList());
             if (needProcessIds.isEmpty()) {
-                log.debug("配置 {} 下所有视频已有向量,跳过", configCode);
+                log.info("配置 {} 下所有视频已有向量,跳过", configCode);
                 return;
             }
             log.info("配置 {} 需要处理 {} 个视频", configCode, needProcessIds.size());
@@ -233,7 +233,7 @@ public class VideoVectorJob {
                         ? extractTextsFromResultLogData(rawData, config)
                         : extractTextsFromRawResult(rawData, config);
                 if (CollectionUtils.isEmpty(texts)) {
-                    log.debug("videoId={} 配置 {} 未提取到文本,跳过", videoId, configCode);
+                    log.info("videoId={} 配置 {} 未提取到文本,跳过", videoId, configCode);
                     failCount.incrementAndGet();
                     return;
                 }
@@ -353,7 +353,7 @@ public class VideoVectorJob {
                         }
                     }
                 }
-                log.debug("置信度过滤(数组):路径={}, 总数={}, 满足条件={}", sourcePath, items.size(), texts.size());
+                log.info("置信度过滤(数组):路径={}, 总数={}, 满足条件={}", sourcePath, items.size(), texts.size());
             } else {
                 // 单对象模式:导航到目标对象,检查置信度后提取文本
                 List<String> pathValues = VectorUtils.extractFromJson(json, sourcePath);
@@ -366,7 +366,7 @@ public class VideoVectorJob {
                             texts.add(text);
                         }
                     }
-                    log.debug("置信度过滤(单对象):路径={}, 通过={}", sourcePath, !texts.isEmpty());
+                    log.info("置信度过滤(单对象):路径={}, 通过={}", sourcePath, !texts.isEmpty());
                 }
             }
 
@@ -461,7 +461,7 @@ public class VideoVectorJob {
                     continue;
                 }
                 vectorStoreService.save(configCode, videoId, i, vector, text);
-                log.debug("videoId={} 配置 {} 第{}个点向量化存储成功", videoId, configCode, i);
+                log.info("videoId={} 配置 {} 第{}个点向量化存储成功", videoId, configCode, i);
                 successCount++;
             }
             return successCount;
@@ -475,7 +475,7 @@ public class VideoVectorJob {
                 }
             }
             if (text == null) {
-                log.debug("videoId={} 配置 {} 无有效文本,跳过", videoId, configCode);
+                log.info("videoId={} 配置 {} 无有效文本,跳过", videoId, configCode);
                 return 0;
             }
             if (maxLength != null && maxLength > 0 && text.length() > maxLength) {
@@ -488,7 +488,7 @@ public class VideoVectorJob {
                 return 0;
             }
             vectorStoreService.save(configCode, videoId, vector, text);
-            log.debug("videoId={} 配置 {} 向量化存储成功", videoId, configCode);
+            log.info("videoId={} 配置 {} 向量化存储成功", videoId, configCode);
             return 1;
         }
     }
@@ -507,7 +507,7 @@ public class VideoVectorJob {
         if (StringUtils.hasText(textHash)) {
             List<Float> cached = vectorStoreService.getVectorByTextHash(textHash, configCode);
             if (cached != null && !cached.isEmpty()) {
-                log.debug("命中 text_hash 缓存,复用 embedding,hash={}, configCode={}", textHash, configCode);
+                log.info("命中 text_hash 缓存,复用 embedding,hash={}, configCode={}", textHash, configCode);
                 return cached;
             }
         }
@@ -638,7 +638,7 @@ public class VideoVectorJob {
                     .filter(id -> !existingVideoIds.contains(id))
                     .collect(Collectors.toList());
             if (needProcessIds.isEmpty()) {
-                log.debug("配置 {} 下所有视频已有向量,跳过", configCode);
+                log.info("配置 {} 下所有视频已有向量,跳过", configCode);
                 return;
             }
             log.info("配置 {} 需要处理 {} 个视频", configCode, needProcessIds.size());
@@ -685,7 +685,7 @@ public class VideoVectorJob {
 
             List<String> texts = extractTextsFromDataContent(dataContent, config);
             if (CollectionUtils.isEmpty(texts)) {
-                log.debug("videoId={} 配置 {} 未提取到选题文本,跳过", videoId, configCode);
+                log.info("videoId={} 配置 {} 未提取到选题文本,跳过", videoId, configCode);
                 failCount.incrementAndGet();
                 return;
             }
@@ -853,7 +853,7 @@ public class VideoVectorJob {
             // 获取该配置下所有已有的存储ID
             Set<Long> allStoredIds = vectorStoreService.getAllVideoIds(configCode);
             if (allStoredIds == null || allStoredIds.isEmpty()) {
-                log.debug("配置 {} 下没有已存储的向量,跳过审核检查", configCode);
+                log.info("配置 {} 下没有已存储的向量,跳过审核检查", configCode);
                 return;
             }
 
@@ -1063,7 +1063,7 @@ public class VideoVectorJob {
                     .filter(id -> !existingVideoIds.contains(id))
                     .collect(Collectors.toList());
             if (needProcessIds.isEmpty()) {
-                log.debug("配置 {} 下所有视频已有向量,跳过", configCode);
+                log.info("配置 {} 下所有视频已有向量,跳过", configCode);
                 return;
             }
             log.info("配置 {} 需要处理 {} 个视频", configCode, needProcessIds.size());
@@ -1220,7 +1220,7 @@ public class VideoVectorJob {
             // 记录到追踪 SET
             redisUtils.sAdd(VectorConstants.VID_DECODE_IDS_SET_KEY, String.valueOf(videoId));
             decodeCachedInThisRun.add(videoId);
-            log.debug("decode 缓存写入成功,videoId={}", videoId);
+            log.info("decode 缓存写入成功,videoId={}", videoId);
         } catch (Exception e) {
             log.warn("tryCacheDecodeResult 失败,videoId={}, error={}", videoId, e.getMessage());
         }

+ 72 - 0
core/src/main/java/com/tzld/videoVector/model/po/pgVector/ChannelDemandMatchConfig.java

@@ -92,6 +92,28 @@ public class ChannelDemandMatchConfig {
      */
     private Date updateTime;
 
+    /**
+     * Database Column Remarks:
+     *   线上应用动作筛选值(为空表示不限制)
+     *
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database column channel_demand_match_config.online_action
+     *
+     * @mbg.generated
+     */
+    private String onlineAction;
+
+    /**
+     * Database Column Remarks:
+     *   需求策略筛选值(为空表示不限制)
+     *
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database column channel_demand_match_config.demand_strategy
+     *
+     * @mbg.generated
+     */
+    private String demandStrategy;
+
     /**
      * This method was generated by MyBatis Generator.
      * This method returns the value of the database column channel_demand_match_config.id
@@ -284,6 +306,54 @@ public class ChannelDemandMatchConfig {
         this.updateTime = updateTime;
     }
 
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method returns the value of the database column channel_demand_match_config.online_action
+     *
+     * @return the value of channel_demand_match_config.online_action
+     *
+     * @mbg.generated
+     */
+    public String getOnlineAction() {
+        return onlineAction;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method sets the value of the database column channel_demand_match_config.online_action
+     *
+     * @param onlineAction the value for channel_demand_match_config.online_action
+     *
+     * @mbg.generated
+     */
+    public void setOnlineAction(String onlineAction) {
+        this.onlineAction = onlineAction;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method returns the value of the database column channel_demand_match_config.demand_strategy
+     *
+     * @return the value of channel_demand_match_config.demand_strategy
+     *
+     * @mbg.generated
+     */
+    public String getDemandStrategy() {
+        return demandStrategy;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method sets the value of the database column channel_demand_match_config.demand_strategy
+     *
+     * @param demandStrategy the value for channel_demand_match_config.demand_strategy
+     *
+     * @mbg.generated
+     */
+    public void setDemandStrategy(String demandStrategy) {
+        this.demandStrategy = demandStrategy;
+    }
+
     /**
      * This method was generated by MyBatis Generator.
      * This method corresponds to the database table channel_demand_match_config
@@ -304,6 +374,8 @@ public class ChannelDemandMatchConfig {
         sb.append(", status=").append(status);
         sb.append(", createTime=").append(createTime);
         sb.append(", updateTime=").append(updateTime);
+        sb.append(", onlineAction=").append(onlineAction);
+        sb.append(", demandStrategy=").append(demandStrategy);
         sb.append("]");
         return sb.toString();
     }

+ 140 - 0
core/src/main/java/com/tzld/videoVector/model/po/pgVector/ChannelDemandMatchConfigExample.java

@@ -684,6 +684,146 @@ public class ChannelDemandMatchConfigExample {
             addCriterion("update_time not between", value1, value2, "updateTime");
             return (Criteria) this;
         }
+
+        public Criteria andOnlineActionIsNull() {
+            addCriterion("online_action is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andOnlineActionIsNotNull() {
+            addCriterion("online_action is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andOnlineActionEqualTo(String value) {
+            addCriterion("online_action =", value, "onlineAction");
+            return (Criteria) this;
+        }
+
+        public Criteria andOnlineActionNotEqualTo(String value) {
+            addCriterion("online_action <>", value, "onlineAction");
+            return (Criteria) this;
+        }
+
+        public Criteria andOnlineActionGreaterThan(String value) {
+            addCriterion("online_action >", value, "onlineAction");
+            return (Criteria) this;
+        }
+
+        public Criteria andOnlineActionGreaterThanOrEqualTo(String value) {
+            addCriterion("online_action >=", value, "onlineAction");
+            return (Criteria) this;
+        }
+
+        public Criteria andOnlineActionLessThan(String value) {
+            addCriterion("online_action <", value, "onlineAction");
+            return (Criteria) this;
+        }
+
+        public Criteria andOnlineActionLessThanOrEqualTo(String value) {
+            addCriterion("online_action <=", value, "onlineAction");
+            return (Criteria) this;
+        }
+
+        public Criteria andOnlineActionLike(String value) {
+            addCriterion("online_action like", value, "onlineAction");
+            return (Criteria) this;
+        }
+
+        public Criteria andOnlineActionNotLike(String value) {
+            addCriterion("online_action not like", value, "onlineAction");
+            return (Criteria) this;
+        }
+
+        public Criteria andOnlineActionIn(List<String> values) {
+            addCriterion("online_action in", values, "onlineAction");
+            return (Criteria) this;
+        }
+
+        public Criteria andOnlineActionNotIn(List<String> values) {
+            addCriterion("online_action not in", values, "onlineAction");
+            return (Criteria) this;
+        }
+
+        public Criteria andOnlineActionBetween(String value1, String value2) {
+            addCriterion("online_action between", value1, value2, "onlineAction");
+            return (Criteria) this;
+        }
+
+        public Criteria andOnlineActionNotBetween(String value1, String value2) {
+            addCriterion("online_action not between", value1, value2, "onlineAction");
+            return (Criteria) this;
+        }
+
+        public Criteria andDemandStrategyIsNull() {
+            addCriterion("demand_strategy is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andDemandStrategyIsNotNull() {
+            addCriterion("demand_strategy is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andDemandStrategyEqualTo(String value) {
+            addCriterion("demand_strategy =", value, "demandStrategy");
+            return (Criteria) this;
+        }
+
+        public Criteria andDemandStrategyNotEqualTo(String value) {
+            addCriterion("demand_strategy <>", value, "demandStrategy");
+            return (Criteria) this;
+        }
+
+        public Criteria andDemandStrategyGreaterThan(String value) {
+            addCriterion("demand_strategy >", value, "demandStrategy");
+            return (Criteria) this;
+        }
+
+        public Criteria andDemandStrategyGreaterThanOrEqualTo(String value) {
+            addCriterion("demand_strategy >=", value, "demandStrategy");
+            return (Criteria) this;
+        }
+
+        public Criteria andDemandStrategyLessThan(String value) {
+            addCriterion("demand_strategy <", value, "demandStrategy");
+            return (Criteria) this;
+        }
+
+        public Criteria andDemandStrategyLessThanOrEqualTo(String value) {
+            addCriterion("demand_strategy <=", value, "demandStrategy");
+            return (Criteria) this;
+        }
+
+        public Criteria andDemandStrategyLike(String value) {
+            addCriterion("demand_strategy like", value, "demandStrategy");
+            return (Criteria) this;
+        }
+
+        public Criteria andDemandStrategyNotLike(String value) {
+            addCriterion("demand_strategy not like", value, "demandStrategy");
+            return (Criteria) this;
+        }
+
+        public Criteria andDemandStrategyIn(List<String> values) {
+            addCriterion("demand_strategy in", values, "demandStrategy");
+            return (Criteria) this;
+        }
+
+        public Criteria andDemandStrategyNotIn(List<String> values) {
+            addCriterion("demand_strategy not in", values, "demandStrategy");
+            return (Criteria) this;
+        }
+
+        public Criteria andDemandStrategyBetween(String value1, String value2) {
+            addCriterion("demand_strategy between", value1, value2, "demandStrategy");
+            return (Criteria) this;
+        }
+
+        public Criteria andDemandStrategyNotBetween(String value1, String value2) {
+            addCriterion("demand_strategy not between", value1, value2, "demandStrategy");
+            return (Criteria) this;
+        }
     }
 
     /**

+ 576 - 0
core/src/main/java/com/tzld/videoVector/model/po/pgVector/ChannelDemandMatchResult.java

@@ -253,6 +253,182 @@ public class ChannelDemandMatchResult {
      */
     private Date updateTime;
 
+    /**
+     * Database Column Remarks:
+     *   线上应用动作类型
+     *
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database column channel_demand_match_result.online_action
+     *
+     * @mbg.generated
+     */
+    private String onlineAction;
+
+    /**
+     * Database Column Remarks:
+     *   匹配实验ID
+     *
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database column channel_demand_match_result.match_experiment_id
+     *
+     * @mbg.generated
+     */
+    private String matchExperimentId;
+
+    /**
+     * Database Column Remarks:
+     *   需求ID
+     *
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database column channel_demand_match_result.demand_id
+     *
+     * @mbg.generated
+     */
+    private String demandId;
+
+    /**
+     * Database Column Remarks:
+     *   人群包
+     *
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database column channel_demand_match_result.crowd_package
+     *
+     * @mbg.generated
+     */
+    private String crowdPackage;
+
+    /**
+     * Database Column Remarks:
+     *   转化目标
+     *
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database column channel_demand_match_result.conversion_target
+     *
+     * @mbg.generated
+     */
+    private String conversionTarget;
+
+    /**
+     * Database Column Remarks:
+     *   合作方
+     *
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database column channel_demand_match_result.partner
+     *
+     * @mbg.generated
+     */
+    private String partner;
+
+    /**
+     * Database Column Remarks:
+     *   账号
+     *
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database column channel_demand_match_result.account
+     *
+     * @mbg.generated
+     */
+    private String account;
+
+    /**
+     * Database Column Remarks:
+     *   场景值
+     *
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database column channel_demand_match_result.scene_value
+     *
+     * @mbg.generated
+     */
+    private String sceneValue;
+
+    /**
+     * Database Column Remarks:
+     *   需求策略
+     *
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database column channel_demand_match_result.demand_strategy
+     *
+     * @mbg.generated
+     */
+    private String demandStrategy;
+
+    /**
+     * Database Column Remarks:
+     *   驱动时间维度
+     *
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database column channel_demand_match_result.drive_dimension_time
+     *
+     * @mbg.generated
+     */
+    private String driveDimensionTime;
+
+    /**
+     * Database Column Remarks:
+     *   需求筛选排序策略
+     *
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database column channel_demand_match_result.demand_filter_sort_strategy
+     *
+     * @mbg.generated
+     */
+    private String demandFilterSortStrategy;
+
+    /**
+     * Database Column Remarks:
+     *   需求类型
+     *
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database column channel_demand_match_result.demand_type
+     *
+     * @mbg.generated
+     */
+    private String demandType;
+
+    /**
+     * Database Column Remarks:
+     *   需求内容ID
+     *
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database column channel_demand_match_result.demand_content_id
+     *
+     * @mbg.generated
+     */
+    private String demandContentId;
+
+    /**
+     * Database Column Remarks:
+     *   需求内容标题
+     *
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database column channel_demand_match_result.demand_content_title
+     *
+     * @mbg.generated
+     */
+    private String demandContentTitle;
+
+    /**
+     * Database Column Remarks:
+     *   需求内容选题
+     *
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database column channel_demand_match_result.demand_content_topic
+     *
+     * @mbg.generated
+     */
+    private String demandContentTopic;
+
+    /**
+     * Database Column Remarks:
+     *   UV占比
+     *
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database column channel_demand_match_result.uv_ratio
+     *
+     * @mbg.generated
+     */
+    private Double uvRatio;
+
     /**
      * This method was generated by MyBatis Generator.
      * This method returns the value of the database column channel_demand_match_result.id
@@ -853,6 +1029,390 @@ public class ChannelDemandMatchResult {
         this.updateTime = updateTime;
     }
 
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method returns the value of the database column channel_demand_match_result.online_action
+     *
+     * @return the value of channel_demand_match_result.online_action
+     *
+     * @mbg.generated
+     */
+    public String getOnlineAction() {
+        return onlineAction;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method sets the value of the database column channel_demand_match_result.online_action
+     *
+     * @param onlineAction the value for channel_demand_match_result.online_action
+     *
+     * @mbg.generated
+     */
+    public void setOnlineAction(String onlineAction) {
+        this.onlineAction = onlineAction;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method returns the value of the database column channel_demand_match_result.match_experiment_id
+     *
+     * @return the value of channel_demand_match_result.match_experiment_id
+     *
+     * @mbg.generated
+     */
+    public String getMatchExperimentId() {
+        return matchExperimentId;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method sets the value of the database column channel_demand_match_result.match_experiment_id
+     *
+     * @param matchExperimentId the value for channel_demand_match_result.match_experiment_id
+     *
+     * @mbg.generated
+     */
+    public void setMatchExperimentId(String matchExperimentId) {
+        this.matchExperimentId = matchExperimentId;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method returns the value of the database column channel_demand_match_result.demand_id
+     *
+     * @return the value of channel_demand_match_result.demand_id
+     *
+     * @mbg.generated
+     */
+    public String getDemandId() {
+        return demandId;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method sets the value of the database column channel_demand_match_result.demand_id
+     *
+     * @param demandId the value for channel_demand_match_result.demand_id
+     *
+     * @mbg.generated
+     */
+    public void setDemandId(String demandId) {
+        this.demandId = demandId;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method returns the value of the database column channel_demand_match_result.crowd_package
+     *
+     * @return the value of channel_demand_match_result.crowd_package
+     *
+     * @mbg.generated
+     */
+    public String getCrowdPackage() {
+        return crowdPackage;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method sets the value of the database column channel_demand_match_result.crowd_package
+     *
+     * @param crowdPackage the value for channel_demand_match_result.crowd_package
+     *
+     * @mbg.generated
+     */
+    public void setCrowdPackage(String crowdPackage) {
+        this.crowdPackage = crowdPackage;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method returns the value of the database column channel_demand_match_result.conversion_target
+     *
+     * @return the value of channel_demand_match_result.conversion_target
+     *
+     * @mbg.generated
+     */
+    public String getConversionTarget() {
+        return conversionTarget;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method sets the value of the database column channel_demand_match_result.conversion_target
+     *
+     * @param conversionTarget the value for channel_demand_match_result.conversion_target
+     *
+     * @mbg.generated
+     */
+    public void setConversionTarget(String conversionTarget) {
+        this.conversionTarget = conversionTarget;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method returns the value of the database column channel_demand_match_result.partner
+     *
+     * @return the value of channel_demand_match_result.partner
+     *
+     * @mbg.generated
+     */
+    public String getPartner() {
+        return partner;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method sets the value of the database column channel_demand_match_result.partner
+     *
+     * @param partner the value for channel_demand_match_result.partner
+     *
+     * @mbg.generated
+     */
+    public void setPartner(String partner) {
+        this.partner = partner;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method returns the value of the database column channel_demand_match_result.account
+     *
+     * @return the value of channel_demand_match_result.account
+     *
+     * @mbg.generated
+     */
+    public String getAccount() {
+        return account;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method sets the value of the database column channel_demand_match_result.account
+     *
+     * @param account the value for channel_demand_match_result.account
+     *
+     * @mbg.generated
+     */
+    public void setAccount(String account) {
+        this.account = account;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method returns the value of the database column channel_demand_match_result.scene_value
+     *
+     * @return the value of channel_demand_match_result.scene_value
+     *
+     * @mbg.generated
+     */
+    public String getSceneValue() {
+        return sceneValue;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method sets the value of the database column channel_demand_match_result.scene_value
+     *
+     * @param sceneValue the value for channel_demand_match_result.scene_value
+     *
+     * @mbg.generated
+     */
+    public void setSceneValue(String sceneValue) {
+        this.sceneValue = sceneValue;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method returns the value of the database column channel_demand_match_result.demand_strategy
+     *
+     * @return the value of channel_demand_match_result.demand_strategy
+     *
+     * @mbg.generated
+     */
+    public String getDemandStrategy() {
+        return demandStrategy;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method sets the value of the database column channel_demand_match_result.demand_strategy
+     *
+     * @param demandStrategy the value for channel_demand_match_result.demand_strategy
+     *
+     * @mbg.generated
+     */
+    public void setDemandStrategy(String demandStrategy) {
+        this.demandStrategy = demandStrategy;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method returns the value of the database column channel_demand_match_result.drive_dimension_time
+     *
+     * @return the value of channel_demand_match_result.drive_dimension_time
+     *
+     * @mbg.generated
+     */
+    public String getDriveDimensionTime() {
+        return driveDimensionTime;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method sets the value of the database column channel_demand_match_result.drive_dimension_time
+     *
+     * @param driveDimensionTime the value for channel_demand_match_result.drive_dimension_time
+     *
+     * @mbg.generated
+     */
+    public void setDriveDimensionTime(String driveDimensionTime) {
+        this.driveDimensionTime = driveDimensionTime;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method returns the value of the database column channel_demand_match_result.demand_filter_sort_strategy
+     *
+     * @return the value of channel_demand_match_result.demand_filter_sort_strategy
+     *
+     * @mbg.generated
+     */
+    public String getDemandFilterSortStrategy() {
+        return demandFilterSortStrategy;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method sets the value of the database column channel_demand_match_result.demand_filter_sort_strategy
+     *
+     * @param demandFilterSortStrategy the value for channel_demand_match_result.demand_filter_sort_strategy
+     *
+     * @mbg.generated
+     */
+    public void setDemandFilterSortStrategy(String demandFilterSortStrategy) {
+        this.demandFilterSortStrategy = demandFilterSortStrategy;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method returns the value of the database column channel_demand_match_result.demand_type
+     *
+     * @return the value of channel_demand_match_result.demand_type
+     *
+     * @mbg.generated
+     */
+    public String getDemandType() {
+        return demandType;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method sets the value of the database column channel_demand_match_result.demand_type
+     *
+     * @param demandType the value for channel_demand_match_result.demand_type
+     *
+     * @mbg.generated
+     */
+    public void setDemandType(String demandType) {
+        this.demandType = demandType;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method returns the value of the database column channel_demand_match_result.demand_content_id
+     *
+     * @return the value of channel_demand_match_result.demand_content_id
+     *
+     * @mbg.generated
+     */
+    public String getDemandContentId() {
+        return demandContentId;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method sets the value of the database column channel_demand_match_result.demand_content_id
+     *
+     * @param demandContentId the value for channel_demand_match_result.demand_content_id
+     *
+     * @mbg.generated
+     */
+    public void setDemandContentId(String demandContentId) {
+        this.demandContentId = demandContentId;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method returns the value of the database column channel_demand_match_result.demand_content_title
+     *
+     * @return the value of channel_demand_match_result.demand_content_title
+     *
+     * @mbg.generated
+     */
+    public String getDemandContentTitle() {
+        return demandContentTitle;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method sets the value of the database column channel_demand_match_result.demand_content_title
+     *
+     * @param demandContentTitle the value for channel_demand_match_result.demand_content_title
+     *
+     * @mbg.generated
+     */
+    public void setDemandContentTitle(String demandContentTitle) {
+        this.demandContentTitle = demandContentTitle;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method returns the value of the database column channel_demand_match_result.demand_content_topic
+     *
+     * @return the value of channel_demand_match_result.demand_content_topic
+     *
+     * @mbg.generated
+     */
+    public String getDemandContentTopic() {
+        return demandContentTopic;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method sets the value of the database column channel_demand_match_result.demand_content_topic
+     *
+     * @param demandContentTopic the value for channel_demand_match_result.demand_content_topic
+     *
+     * @mbg.generated
+     */
+    public void setDemandContentTopic(String demandContentTopic) {
+        this.demandContentTopic = demandContentTopic;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method returns the value of the database column channel_demand_match_result.uv_ratio
+     *
+     * @return the value of channel_demand_match_result.uv_ratio
+     *
+     * @mbg.generated
+     */
+    public Double getUvRatio() {
+        return uvRatio;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method sets the value of the database column channel_demand_match_result.uv_ratio
+     *
+     * @param uvRatio the value for channel_demand_match_result.uv_ratio
+     *
+     * @mbg.generated
+     */
+    public void setUvRatio(Double uvRatio) {
+        this.uvRatio = uvRatio;
+    }
+
     /**
      * This method was generated by MyBatis Generator.
      * This method corresponds to the database table channel_demand_match_result
@@ -890,6 +1450,22 @@ public class ChannelDemandMatchResult {
         sb.append(", matchStatus=").append(matchStatus);
         sb.append(", createTime=").append(createTime);
         sb.append(", updateTime=").append(updateTime);
+        sb.append(", onlineAction=").append(onlineAction);
+        sb.append(", matchExperimentId=").append(matchExperimentId);
+        sb.append(", demandId=").append(demandId);
+        sb.append(", crowdPackage=").append(crowdPackage);
+        sb.append(", conversionTarget=").append(conversionTarget);
+        sb.append(", partner=").append(partner);
+        sb.append(", account=").append(account);
+        sb.append(", sceneValue=").append(sceneValue);
+        sb.append(", demandStrategy=").append(demandStrategy);
+        sb.append(", driveDimensionTime=").append(driveDimensionTime);
+        sb.append(", demandFilterSortStrategy=").append(demandFilterSortStrategy);
+        sb.append(", demandType=").append(demandType);
+        sb.append(", demandContentId=").append(demandContentId);
+        sb.append(", demandContentTitle=").append(demandContentTitle);
+        sb.append(", demandContentTopic=").append(demandContentTopic);
+        sb.append(", uvRatio=").append(uvRatio);
         sb.append("]");
         return sb.toString();
     }

+ 1110 - 0
core/src/main/java/com/tzld/videoVector/model/po/pgVector/ChannelDemandMatchResultExample.java

@@ -1784,6 +1784,1116 @@ public class ChannelDemandMatchResultExample {
             addCriterion("update_time not between", value1, value2, "updateTime");
             return (Criteria) this;
         }
+
+        public Criteria andOnlineActionIsNull() {
+            addCriterion("online_action is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andOnlineActionIsNotNull() {
+            addCriterion("online_action is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andOnlineActionEqualTo(String value) {
+            addCriterion("online_action =", value, "onlineAction");
+            return (Criteria) this;
+        }
+
+        public Criteria andOnlineActionNotEqualTo(String value) {
+            addCriterion("online_action <>", value, "onlineAction");
+            return (Criteria) this;
+        }
+
+        public Criteria andOnlineActionGreaterThan(String value) {
+            addCriterion("online_action >", value, "onlineAction");
+            return (Criteria) this;
+        }
+
+        public Criteria andOnlineActionGreaterThanOrEqualTo(String value) {
+            addCriterion("online_action >=", value, "onlineAction");
+            return (Criteria) this;
+        }
+
+        public Criteria andOnlineActionLessThan(String value) {
+            addCriterion("online_action <", value, "onlineAction");
+            return (Criteria) this;
+        }
+
+        public Criteria andOnlineActionLessThanOrEqualTo(String value) {
+            addCriterion("online_action <=", value, "onlineAction");
+            return (Criteria) this;
+        }
+
+        public Criteria andOnlineActionLike(String value) {
+            addCriterion("online_action like", value, "onlineAction");
+            return (Criteria) this;
+        }
+
+        public Criteria andOnlineActionNotLike(String value) {
+            addCriterion("online_action not like", value, "onlineAction");
+            return (Criteria) this;
+        }
+
+        public Criteria andOnlineActionIn(List<String> values) {
+            addCriterion("online_action in", values, "onlineAction");
+            return (Criteria) this;
+        }
+
+        public Criteria andOnlineActionNotIn(List<String> values) {
+            addCriterion("online_action not in", values, "onlineAction");
+            return (Criteria) this;
+        }
+
+        public Criteria andOnlineActionBetween(String value1, String value2) {
+            addCriterion("online_action between", value1, value2, "onlineAction");
+            return (Criteria) this;
+        }
+
+        public Criteria andOnlineActionNotBetween(String value1, String value2) {
+            addCriterion("online_action not between", value1, value2, "onlineAction");
+            return (Criteria) this;
+        }
+
+        public Criteria andMatchExperimentIdIsNull() {
+            addCriterion("match_experiment_id is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andMatchExperimentIdIsNotNull() {
+            addCriterion("match_experiment_id is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andMatchExperimentIdEqualTo(String value) {
+            addCriterion("match_experiment_id =", value, "matchExperimentId");
+            return (Criteria) this;
+        }
+
+        public Criteria andMatchExperimentIdNotEqualTo(String value) {
+            addCriterion("match_experiment_id <>", value, "matchExperimentId");
+            return (Criteria) this;
+        }
+
+        public Criteria andMatchExperimentIdGreaterThan(String value) {
+            addCriterion("match_experiment_id >", value, "matchExperimentId");
+            return (Criteria) this;
+        }
+
+        public Criteria andMatchExperimentIdGreaterThanOrEqualTo(String value) {
+            addCriterion("match_experiment_id >=", value, "matchExperimentId");
+            return (Criteria) this;
+        }
+
+        public Criteria andMatchExperimentIdLessThan(String value) {
+            addCriterion("match_experiment_id <", value, "matchExperimentId");
+            return (Criteria) this;
+        }
+
+        public Criteria andMatchExperimentIdLessThanOrEqualTo(String value) {
+            addCriterion("match_experiment_id <=", value, "matchExperimentId");
+            return (Criteria) this;
+        }
+
+        public Criteria andMatchExperimentIdLike(String value) {
+            addCriterion("match_experiment_id like", value, "matchExperimentId");
+            return (Criteria) this;
+        }
+
+        public Criteria andMatchExperimentIdNotLike(String value) {
+            addCriterion("match_experiment_id not like", value, "matchExperimentId");
+            return (Criteria) this;
+        }
+
+        public Criteria andMatchExperimentIdIn(List<String> values) {
+            addCriterion("match_experiment_id in", values, "matchExperimentId");
+            return (Criteria) this;
+        }
+
+        public Criteria andMatchExperimentIdNotIn(List<String> values) {
+            addCriterion("match_experiment_id not in", values, "matchExperimentId");
+            return (Criteria) this;
+        }
+
+        public Criteria andMatchExperimentIdBetween(String value1, String value2) {
+            addCriterion("match_experiment_id between", value1, value2, "matchExperimentId");
+            return (Criteria) this;
+        }
+
+        public Criteria andMatchExperimentIdNotBetween(String value1, String value2) {
+            addCriterion("match_experiment_id not between", value1, value2, "matchExperimentId");
+            return (Criteria) this;
+        }
+
+        public Criteria andDemandIdIsNull() {
+            addCriterion("demand_id is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andDemandIdIsNotNull() {
+            addCriterion("demand_id is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andDemandIdEqualTo(String value) {
+            addCriterion("demand_id =", value, "demandId");
+            return (Criteria) this;
+        }
+
+        public Criteria andDemandIdNotEqualTo(String value) {
+            addCriterion("demand_id <>", value, "demandId");
+            return (Criteria) this;
+        }
+
+        public Criteria andDemandIdGreaterThan(String value) {
+            addCriterion("demand_id >", value, "demandId");
+            return (Criteria) this;
+        }
+
+        public Criteria andDemandIdGreaterThanOrEqualTo(String value) {
+            addCriterion("demand_id >=", value, "demandId");
+            return (Criteria) this;
+        }
+
+        public Criteria andDemandIdLessThan(String value) {
+            addCriterion("demand_id <", value, "demandId");
+            return (Criteria) this;
+        }
+
+        public Criteria andDemandIdLessThanOrEqualTo(String value) {
+            addCriterion("demand_id <=", value, "demandId");
+            return (Criteria) this;
+        }
+
+        public Criteria andDemandIdLike(String value) {
+            addCriterion("demand_id like", value, "demandId");
+            return (Criteria) this;
+        }
+
+        public Criteria andDemandIdNotLike(String value) {
+            addCriterion("demand_id not like", value, "demandId");
+            return (Criteria) this;
+        }
+
+        public Criteria andDemandIdIn(List<String> values) {
+            addCriterion("demand_id in", values, "demandId");
+            return (Criteria) this;
+        }
+
+        public Criteria andDemandIdNotIn(List<String> values) {
+            addCriterion("demand_id not in", values, "demandId");
+            return (Criteria) this;
+        }
+
+        public Criteria andDemandIdBetween(String value1, String value2) {
+            addCriterion("demand_id between", value1, value2, "demandId");
+            return (Criteria) this;
+        }
+
+        public Criteria andDemandIdNotBetween(String value1, String value2) {
+            addCriterion("demand_id not between", value1, value2, "demandId");
+            return (Criteria) this;
+        }
+
+        public Criteria andCrowdPackageIsNull() {
+            addCriterion("crowd_package is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andCrowdPackageIsNotNull() {
+            addCriterion("crowd_package is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andCrowdPackageEqualTo(String value) {
+            addCriterion("crowd_package =", value, "crowdPackage");
+            return (Criteria) this;
+        }
+
+        public Criteria andCrowdPackageNotEqualTo(String value) {
+            addCriterion("crowd_package <>", value, "crowdPackage");
+            return (Criteria) this;
+        }
+
+        public Criteria andCrowdPackageGreaterThan(String value) {
+            addCriterion("crowd_package >", value, "crowdPackage");
+            return (Criteria) this;
+        }
+
+        public Criteria andCrowdPackageGreaterThanOrEqualTo(String value) {
+            addCriterion("crowd_package >=", value, "crowdPackage");
+            return (Criteria) this;
+        }
+
+        public Criteria andCrowdPackageLessThan(String value) {
+            addCriterion("crowd_package <", value, "crowdPackage");
+            return (Criteria) this;
+        }
+
+        public Criteria andCrowdPackageLessThanOrEqualTo(String value) {
+            addCriterion("crowd_package <=", value, "crowdPackage");
+            return (Criteria) this;
+        }
+
+        public Criteria andCrowdPackageLike(String value) {
+            addCriterion("crowd_package like", value, "crowdPackage");
+            return (Criteria) this;
+        }
+
+        public Criteria andCrowdPackageNotLike(String value) {
+            addCriterion("crowd_package not like", value, "crowdPackage");
+            return (Criteria) this;
+        }
+
+        public Criteria andCrowdPackageIn(List<String> values) {
+            addCriterion("crowd_package in", values, "crowdPackage");
+            return (Criteria) this;
+        }
+
+        public Criteria andCrowdPackageNotIn(List<String> values) {
+            addCriterion("crowd_package not in", values, "crowdPackage");
+            return (Criteria) this;
+        }
+
+        public Criteria andCrowdPackageBetween(String value1, String value2) {
+            addCriterion("crowd_package between", value1, value2, "crowdPackage");
+            return (Criteria) this;
+        }
+
+        public Criteria andCrowdPackageNotBetween(String value1, String value2) {
+            addCriterion("crowd_package not between", value1, value2, "crowdPackage");
+            return (Criteria) this;
+        }
+
+        public Criteria andConversionTargetIsNull() {
+            addCriterion("conversion_target is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andConversionTargetIsNotNull() {
+            addCriterion("conversion_target is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andConversionTargetEqualTo(String value) {
+            addCriterion("conversion_target =", value, "conversionTarget");
+            return (Criteria) this;
+        }
+
+        public Criteria andConversionTargetNotEqualTo(String value) {
+            addCriterion("conversion_target <>", value, "conversionTarget");
+            return (Criteria) this;
+        }
+
+        public Criteria andConversionTargetGreaterThan(String value) {
+            addCriterion("conversion_target >", value, "conversionTarget");
+            return (Criteria) this;
+        }
+
+        public Criteria andConversionTargetGreaterThanOrEqualTo(String value) {
+            addCriterion("conversion_target >=", value, "conversionTarget");
+            return (Criteria) this;
+        }
+
+        public Criteria andConversionTargetLessThan(String value) {
+            addCriterion("conversion_target <", value, "conversionTarget");
+            return (Criteria) this;
+        }
+
+        public Criteria andConversionTargetLessThanOrEqualTo(String value) {
+            addCriterion("conversion_target <=", value, "conversionTarget");
+            return (Criteria) this;
+        }
+
+        public Criteria andConversionTargetLike(String value) {
+            addCriterion("conversion_target like", value, "conversionTarget");
+            return (Criteria) this;
+        }
+
+        public Criteria andConversionTargetNotLike(String value) {
+            addCriterion("conversion_target not like", value, "conversionTarget");
+            return (Criteria) this;
+        }
+
+        public Criteria andConversionTargetIn(List<String> values) {
+            addCriterion("conversion_target in", values, "conversionTarget");
+            return (Criteria) this;
+        }
+
+        public Criteria andConversionTargetNotIn(List<String> values) {
+            addCriterion("conversion_target not in", values, "conversionTarget");
+            return (Criteria) this;
+        }
+
+        public Criteria andConversionTargetBetween(String value1, String value2) {
+            addCriterion("conversion_target between", value1, value2, "conversionTarget");
+            return (Criteria) this;
+        }
+
+        public Criteria andConversionTargetNotBetween(String value1, String value2) {
+            addCriterion("conversion_target not between", value1, value2, "conversionTarget");
+            return (Criteria) this;
+        }
+
+        public Criteria andPartnerIsNull() {
+            addCriterion("partner is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andPartnerIsNotNull() {
+            addCriterion("partner is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andPartnerEqualTo(String value) {
+            addCriterion("partner =", value, "partner");
+            return (Criteria) this;
+        }
+
+        public Criteria andPartnerNotEqualTo(String value) {
+            addCriterion("partner <>", value, "partner");
+            return (Criteria) this;
+        }
+
+        public Criteria andPartnerGreaterThan(String value) {
+            addCriterion("partner >", value, "partner");
+            return (Criteria) this;
+        }
+
+        public Criteria andPartnerGreaterThanOrEqualTo(String value) {
+            addCriterion("partner >=", value, "partner");
+            return (Criteria) this;
+        }
+
+        public Criteria andPartnerLessThan(String value) {
+            addCriterion("partner <", value, "partner");
+            return (Criteria) this;
+        }
+
+        public Criteria andPartnerLessThanOrEqualTo(String value) {
+            addCriterion("partner <=", value, "partner");
+            return (Criteria) this;
+        }
+
+        public Criteria andPartnerLike(String value) {
+            addCriterion("partner like", value, "partner");
+            return (Criteria) this;
+        }
+
+        public Criteria andPartnerNotLike(String value) {
+            addCriterion("partner not like", value, "partner");
+            return (Criteria) this;
+        }
+
+        public Criteria andPartnerIn(List<String> values) {
+            addCriterion("partner in", values, "partner");
+            return (Criteria) this;
+        }
+
+        public Criteria andPartnerNotIn(List<String> values) {
+            addCriterion("partner not in", values, "partner");
+            return (Criteria) this;
+        }
+
+        public Criteria andPartnerBetween(String value1, String value2) {
+            addCriterion("partner between", value1, value2, "partner");
+            return (Criteria) this;
+        }
+
+        public Criteria andPartnerNotBetween(String value1, String value2) {
+            addCriterion("partner not between", value1, value2, "partner");
+            return (Criteria) this;
+        }
+
+        public Criteria andAccountIsNull() {
+            addCriterion("account is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andAccountIsNotNull() {
+            addCriterion("account is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andAccountEqualTo(String value) {
+            addCriterion("account =", value, "account");
+            return (Criteria) this;
+        }
+
+        public Criteria andAccountNotEqualTo(String value) {
+            addCriterion("account <>", value, "account");
+            return (Criteria) this;
+        }
+
+        public Criteria andAccountGreaterThan(String value) {
+            addCriterion("account >", value, "account");
+            return (Criteria) this;
+        }
+
+        public Criteria andAccountGreaterThanOrEqualTo(String value) {
+            addCriterion("account >=", value, "account");
+            return (Criteria) this;
+        }
+
+        public Criteria andAccountLessThan(String value) {
+            addCriterion("account <", value, "account");
+            return (Criteria) this;
+        }
+
+        public Criteria andAccountLessThanOrEqualTo(String value) {
+            addCriterion("account <=", value, "account");
+            return (Criteria) this;
+        }
+
+        public Criteria andAccountLike(String value) {
+            addCriterion("account like", value, "account");
+            return (Criteria) this;
+        }
+
+        public Criteria andAccountNotLike(String value) {
+            addCriterion("account not like", value, "account");
+            return (Criteria) this;
+        }
+
+        public Criteria andAccountIn(List<String> values) {
+            addCriterion("account in", values, "account");
+            return (Criteria) this;
+        }
+
+        public Criteria andAccountNotIn(List<String> values) {
+            addCriterion("account not in", values, "account");
+            return (Criteria) this;
+        }
+
+        public Criteria andAccountBetween(String value1, String value2) {
+            addCriterion("account between", value1, value2, "account");
+            return (Criteria) this;
+        }
+
+        public Criteria andAccountNotBetween(String value1, String value2) {
+            addCriterion("account not between", value1, value2, "account");
+            return (Criteria) this;
+        }
+
+        public Criteria andSceneValueIsNull() {
+            addCriterion("scene_value is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andSceneValueIsNotNull() {
+            addCriterion("scene_value is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andSceneValueEqualTo(String value) {
+            addCriterion("scene_value =", value, "sceneValue");
+            return (Criteria) this;
+        }
+
+        public Criteria andSceneValueNotEqualTo(String value) {
+            addCriterion("scene_value <>", value, "sceneValue");
+            return (Criteria) this;
+        }
+
+        public Criteria andSceneValueGreaterThan(String value) {
+            addCriterion("scene_value >", value, "sceneValue");
+            return (Criteria) this;
+        }
+
+        public Criteria andSceneValueGreaterThanOrEqualTo(String value) {
+            addCriterion("scene_value >=", value, "sceneValue");
+            return (Criteria) this;
+        }
+
+        public Criteria andSceneValueLessThan(String value) {
+            addCriterion("scene_value <", value, "sceneValue");
+            return (Criteria) this;
+        }
+
+        public Criteria andSceneValueLessThanOrEqualTo(String value) {
+            addCriterion("scene_value <=", value, "sceneValue");
+            return (Criteria) this;
+        }
+
+        public Criteria andSceneValueLike(String value) {
+            addCriterion("scene_value like", value, "sceneValue");
+            return (Criteria) this;
+        }
+
+        public Criteria andSceneValueNotLike(String value) {
+            addCriterion("scene_value not like", value, "sceneValue");
+            return (Criteria) this;
+        }
+
+        public Criteria andSceneValueIn(List<String> values) {
+            addCriterion("scene_value in", values, "sceneValue");
+            return (Criteria) this;
+        }
+
+        public Criteria andSceneValueNotIn(List<String> values) {
+            addCriterion("scene_value not in", values, "sceneValue");
+            return (Criteria) this;
+        }
+
+        public Criteria andSceneValueBetween(String value1, String value2) {
+            addCriterion("scene_value between", value1, value2, "sceneValue");
+            return (Criteria) this;
+        }
+
+        public Criteria andSceneValueNotBetween(String value1, String value2) {
+            addCriterion("scene_value not between", value1, value2, "sceneValue");
+            return (Criteria) this;
+        }
+
+        public Criteria andDemandStrategyIsNull() {
+            addCriterion("demand_strategy is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andDemandStrategyIsNotNull() {
+            addCriterion("demand_strategy is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andDemandStrategyEqualTo(String value) {
+            addCriterion("demand_strategy =", value, "demandStrategy");
+            return (Criteria) this;
+        }
+
+        public Criteria andDemandStrategyNotEqualTo(String value) {
+            addCriterion("demand_strategy <>", value, "demandStrategy");
+            return (Criteria) this;
+        }
+
+        public Criteria andDemandStrategyGreaterThan(String value) {
+            addCriterion("demand_strategy >", value, "demandStrategy");
+            return (Criteria) this;
+        }
+
+        public Criteria andDemandStrategyGreaterThanOrEqualTo(String value) {
+            addCriterion("demand_strategy >=", value, "demandStrategy");
+            return (Criteria) this;
+        }
+
+        public Criteria andDemandStrategyLessThan(String value) {
+            addCriterion("demand_strategy <", value, "demandStrategy");
+            return (Criteria) this;
+        }
+
+        public Criteria andDemandStrategyLessThanOrEqualTo(String value) {
+            addCriterion("demand_strategy <=", value, "demandStrategy");
+            return (Criteria) this;
+        }
+
+        public Criteria andDemandStrategyLike(String value) {
+            addCriterion("demand_strategy like", value, "demandStrategy");
+            return (Criteria) this;
+        }
+
+        public Criteria andDemandStrategyNotLike(String value) {
+            addCriterion("demand_strategy not like", value, "demandStrategy");
+            return (Criteria) this;
+        }
+
+        public Criteria andDemandStrategyIn(List<String> values) {
+            addCriterion("demand_strategy in", values, "demandStrategy");
+            return (Criteria) this;
+        }
+
+        public Criteria andDemandStrategyNotIn(List<String> values) {
+            addCriterion("demand_strategy not in", values, "demandStrategy");
+            return (Criteria) this;
+        }
+
+        public Criteria andDemandStrategyBetween(String value1, String value2) {
+            addCriterion("demand_strategy between", value1, value2, "demandStrategy");
+            return (Criteria) this;
+        }
+
+        public Criteria andDemandStrategyNotBetween(String value1, String value2) {
+            addCriterion("demand_strategy not between", value1, value2, "demandStrategy");
+            return (Criteria) this;
+        }
+
+        public Criteria andDriveDimensionTimeIsNull() {
+            addCriterion("drive_dimension_time is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andDriveDimensionTimeIsNotNull() {
+            addCriterion("drive_dimension_time is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andDriveDimensionTimeEqualTo(String value) {
+            addCriterion("drive_dimension_time =", value, "driveDimensionTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andDriveDimensionTimeNotEqualTo(String value) {
+            addCriterion("drive_dimension_time <>", value, "driveDimensionTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andDriveDimensionTimeGreaterThan(String value) {
+            addCriterion("drive_dimension_time >", value, "driveDimensionTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andDriveDimensionTimeGreaterThanOrEqualTo(String value) {
+            addCriterion("drive_dimension_time >=", value, "driveDimensionTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andDriveDimensionTimeLessThan(String value) {
+            addCriterion("drive_dimension_time <", value, "driveDimensionTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andDriveDimensionTimeLessThanOrEqualTo(String value) {
+            addCriterion("drive_dimension_time <=", value, "driveDimensionTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andDriveDimensionTimeLike(String value) {
+            addCriterion("drive_dimension_time like", value, "driveDimensionTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andDriveDimensionTimeNotLike(String value) {
+            addCriterion("drive_dimension_time not like", value, "driveDimensionTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andDriveDimensionTimeIn(List<String> values) {
+            addCriterion("drive_dimension_time in", values, "driveDimensionTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andDriveDimensionTimeNotIn(List<String> values) {
+            addCriterion("drive_dimension_time not in", values, "driveDimensionTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andDriveDimensionTimeBetween(String value1, String value2) {
+            addCriterion("drive_dimension_time between", value1, value2, "driveDimensionTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andDriveDimensionTimeNotBetween(String value1, String value2) {
+            addCriterion("drive_dimension_time not between", value1, value2, "driveDimensionTime");
+            return (Criteria) this;
+        }
+
+        public Criteria andDemandFilterSortStrategyIsNull() {
+            addCriterion("demand_filter_sort_strategy is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andDemandFilterSortStrategyIsNotNull() {
+            addCriterion("demand_filter_sort_strategy is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andDemandFilterSortStrategyEqualTo(String value) {
+            addCriterion("demand_filter_sort_strategy =", value, "demandFilterSortStrategy");
+            return (Criteria) this;
+        }
+
+        public Criteria andDemandFilterSortStrategyNotEqualTo(String value) {
+            addCriterion("demand_filter_sort_strategy <>", value, "demandFilterSortStrategy");
+            return (Criteria) this;
+        }
+
+        public Criteria andDemandFilterSortStrategyGreaterThan(String value) {
+            addCriterion("demand_filter_sort_strategy >", value, "demandFilterSortStrategy");
+            return (Criteria) this;
+        }
+
+        public Criteria andDemandFilterSortStrategyGreaterThanOrEqualTo(String value) {
+            addCriterion("demand_filter_sort_strategy >=", value, "demandFilterSortStrategy");
+            return (Criteria) this;
+        }
+
+        public Criteria andDemandFilterSortStrategyLessThan(String value) {
+            addCriterion("demand_filter_sort_strategy <", value, "demandFilterSortStrategy");
+            return (Criteria) this;
+        }
+
+        public Criteria andDemandFilterSortStrategyLessThanOrEqualTo(String value) {
+            addCriterion("demand_filter_sort_strategy <=", value, "demandFilterSortStrategy");
+            return (Criteria) this;
+        }
+
+        public Criteria andDemandFilterSortStrategyLike(String value) {
+            addCriterion("demand_filter_sort_strategy like", value, "demandFilterSortStrategy");
+            return (Criteria) this;
+        }
+
+        public Criteria andDemandFilterSortStrategyNotLike(String value) {
+            addCriterion("demand_filter_sort_strategy not like", value, "demandFilterSortStrategy");
+            return (Criteria) this;
+        }
+
+        public Criteria andDemandFilterSortStrategyIn(List<String> values) {
+            addCriterion("demand_filter_sort_strategy in", values, "demandFilterSortStrategy");
+            return (Criteria) this;
+        }
+
+        public Criteria andDemandFilterSortStrategyNotIn(List<String> values) {
+            addCriterion("demand_filter_sort_strategy not in", values, "demandFilterSortStrategy");
+            return (Criteria) this;
+        }
+
+        public Criteria andDemandFilterSortStrategyBetween(String value1, String value2) {
+            addCriterion("demand_filter_sort_strategy between", value1, value2, "demandFilterSortStrategy");
+            return (Criteria) this;
+        }
+
+        public Criteria andDemandFilterSortStrategyNotBetween(String value1, String value2) {
+            addCriterion("demand_filter_sort_strategy not between", value1, value2, "demandFilterSortStrategy");
+            return (Criteria) this;
+        }
+
+        public Criteria andDemandTypeIsNull() {
+            addCriterion("demand_type is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andDemandTypeIsNotNull() {
+            addCriterion("demand_type is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andDemandTypeEqualTo(String value) {
+            addCriterion("demand_type =", value, "demandType");
+            return (Criteria) this;
+        }
+
+        public Criteria andDemandTypeNotEqualTo(String value) {
+            addCriterion("demand_type <>", value, "demandType");
+            return (Criteria) this;
+        }
+
+        public Criteria andDemandTypeGreaterThan(String value) {
+            addCriterion("demand_type >", value, "demandType");
+            return (Criteria) this;
+        }
+
+        public Criteria andDemandTypeGreaterThanOrEqualTo(String value) {
+            addCriterion("demand_type >=", value, "demandType");
+            return (Criteria) this;
+        }
+
+        public Criteria andDemandTypeLessThan(String value) {
+            addCriterion("demand_type <", value, "demandType");
+            return (Criteria) this;
+        }
+
+        public Criteria andDemandTypeLessThanOrEqualTo(String value) {
+            addCriterion("demand_type <=", value, "demandType");
+            return (Criteria) this;
+        }
+
+        public Criteria andDemandTypeLike(String value) {
+            addCriterion("demand_type like", value, "demandType");
+            return (Criteria) this;
+        }
+
+        public Criteria andDemandTypeNotLike(String value) {
+            addCriterion("demand_type not like", value, "demandType");
+            return (Criteria) this;
+        }
+
+        public Criteria andDemandTypeIn(List<String> values) {
+            addCriterion("demand_type in", values, "demandType");
+            return (Criteria) this;
+        }
+
+        public Criteria andDemandTypeNotIn(List<String> values) {
+            addCriterion("demand_type not in", values, "demandType");
+            return (Criteria) this;
+        }
+
+        public Criteria andDemandTypeBetween(String value1, String value2) {
+            addCriterion("demand_type between", value1, value2, "demandType");
+            return (Criteria) this;
+        }
+
+        public Criteria andDemandTypeNotBetween(String value1, String value2) {
+            addCriterion("demand_type not between", value1, value2, "demandType");
+            return (Criteria) this;
+        }
+
+        public Criteria andDemandContentIdIsNull() {
+            addCriterion("demand_content_id is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andDemandContentIdIsNotNull() {
+            addCriterion("demand_content_id is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andDemandContentIdEqualTo(String value) {
+            addCriterion("demand_content_id =", value, "demandContentId");
+            return (Criteria) this;
+        }
+
+        public Criteria andDemandContentIdNotEqualTo(String value) {
+            addCriterion("demand_content_id <>", value, "demandContentId");
+            return (Criteria) this;
+        }
+
+        public Criteria andDemandContentIdGreaterThan(String value) {
+            addCriterion("demand_content_id >", value, "demandContentId");
+            return (Criteria) this;
+        }
+
+        public Criteria andDemandContentIdGreaterThanOrEqualTo(String value) {
+            addCriterion("demand_content_id >=", value, "demandContentId");
+            return (Criteria) this;
+        }
+
+        public Criteria andDemandContentIdLessThan(String value) {
+            addCriterion("demand_content_id <", value, "demandContentId");
+            return (Criteria) this;
+        }
+
+        public Criteria andDemandContentIdLessThanOrEqualTo(String value) {
+            addCriterion("demand_content_id <=", value, "demandContentId");
+            return (Criteria) this;
+        }
+
+        public Criteria andDemandContentIdLike(String value) {
+            addCriterion("demand_content_id like", value, "demandContentId");
+            return (Criteria) this;
+        }
+
+        public Criteria andDemandContentIdNotLike(String value) {
+            addCriterion("demand_content_id not like", value, "demandContentId");
+            return (Criteria) this;
+        }
+
+        public Criteria andDemandContentIdIn(List<String> values) {
+            addCriterion("demand_content_id in", values, "demandContentId");
+            return (Criteria) this;
+        }
+
+        public Criteria andDemandContentIdNotIn(List<String> values) {
+            addCriterion("demand_content_id not in", values, "demandContentId");
+            return (Criteria) this;
+        }
+
+        public Criteria andDemandContentIdBetween(String value1, String value2) {
+            addCriterion("demand_content_id between", value1, value2, "demandContentId");
+            return (Criteria) this;
+        }
+
+        public Criteria andDemandContentIdNotBetween(String value1, String value2) {
+            addCriterion("demand_content_id not between", value1, value2, "demandContentId");
+            return (Criteria) this;
+        }
+
+        public Criteria andDemandContentTitleIsNull() {
+            addCriterion("demand_content_title is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andDemandContentTitleIsNotNull() {
+            addCriterion("demand_content_title is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andDemandContentTitleEqualTo(String value) {
+            addCriterion("demand_content_title =", value, "demandContentTitle");
+            return (Criteria) this;
+        }
+
+        public Criteria andDemandContentTitleNotEqualTo(String value) {
+            addCriterion("demand_content_title <>", value, "demandContentTitle");
+            return (Criteria) this;
+        }
+
+        public Criteria andDemandContentTitleGreaterThan(String value) {
+            addCriterion("demand_content_title >", value, "demandContentTitle");
+            return (Criteria) this;
+        }
+
+        public Criteria andDemandContentTitleGreaterThanOrEqualTo(String value) {
+            addCriterion("demand_content_title >=", value, "demandContentTitle");
+            return (Criteria) this;
+        }
+
+        public Criteria andDemandContentTitleLessThan(String value) {
+            addCriterion("demand_content_title <", value, "demandContentTitle");
+            return (Criteria) this;
+        }
+
+        public Criteria andDemandContentTitleLessThanOrEqualTo(String value) {
+            addCriterion("demand_content_title <=", value, "demandContentTitle");
+            return (Criteria) this;
+        }
+
+        public Criteria andDemandContentTitleLike(String value) {
+            addCriterion("demand_content_title like", value, "demandContentTitle");
+            return (Criteria) this;
+        }
+
+        public Criteria andDemandContentTitleNotLike(String value) {
+            addCriterion("demand_content_title not like", value, "demandContentTitle");
+            return (Criteria) this;
+        }
+
+        public Criteria andDemandContentTitleIn(List<String> values) {
+            addCriterion("demand_content_title in", values, "demandContentTitle");
+            return (Criteria) this;
+        }
+
+        public Criteria andDemandContentTitleNotIn(List<String> values) {
+            addCriterion("demand_content_title not in", values, "demandContentTitle");
+            return (Criteria) this;
+        }
+
+        public Criteria andDemandContentTitleBetween(String value1, String value2) {
+            addCriterion("demand_content_title between", value1, value2, "demandContentTitle");
+            return (Criteria) this;
+        }
+
+        public Criteria andDemandContentTitleNotBetween(String value1, String value2) {
+            addCriterion("demand_content_title not between", value1, value2, "demandContentTitle");
+            return (Criteria) this;
+        }
+
+        public Criteria andDemandContentTopicIsNull() {
+            addCriterion("demand_content_topic is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andDemandContentTopicIsNotNull() {
+            addCriterion("demand_content_topic is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andDemandContentTopicEqualTo(String value) {
+            addCriterion("demand_content_topic =", value, "demandContentTopic");
+            return (Criteria) this;
+        }
+
+        public Criteria andDemandContentTopicNotEqualTo(String value) {
+            addCriterion("demand_content_topic <>", value, "demandContentTopic");
+            return (Criteria) this;
+        }
+
+        public Criteria andDemandContentTopicGreaterThan(String value) {
+            addCriterion("demand_content_topic >", value, "demandContentTopic");
+            return (Criteria) this;
+        }
+
+        public Criteria andDemandContentTopicGreaterThanOrEqualTo(String value) {
+            addCriterion("demand_content_topic >=", value, "demandContentTopic");
+            return (Criteria) this;
+        }
+
+        public Criteria andDemandContentTopicLessThan(String value) {
+            addCriterion("demand_content_topic <", value, "demandContentTopic");
+            return (Criteria) this;
+        }
+
+        public Criteria andDemandContentTopicLessThanOrEqualTo(String value) {
+            addCriterion("demand_content_topic <=", value, "demandContentTopic");
+            return (Criteria) this;
+        }
+
+        public Criteria andDemandContentTopicLike(String value) {
+            addCriterion("demand_content_topic like", value, "demandContentTopic");
+            return (Criteria) this;
+        }
+
+        public Criteria andDemandContentTopicNotLike(String value) {
+            addCriterion("demand_content_topic not like", value, "demandContentTopic");
+            return (Criteria) this;
+        }
+
+        public Criteria andDemandContentTopicIn(List<String> values) {
+            addCriterion("demand_content_topic in", values, "demandContentTopic");
+            return (Criteria) this;
+        }
+
+        public Criteria andDemandContentTopicNotIn(List<String> values) {
+            addCriterion("demand_content_topic not in", values, "demandContentTopic");
+            return (Criteria) this;
+        }
+
+        public Criteria andDemandContentTopicBetween(String value1, String value2) {
+            addCriterion("demand_content_topic between", value1, value2, "demandContentTopic");
+            return (Criteria) this;
+        }
+
+        public Criteria andDemandContentTopicNotBetween(String value1, String value2) {
+            addCriterion("demand_content_topic not between", value1, value2, "demandContentTopic");
+            return (Criteria) this;
+        }
+
+        public Criteria andUvRatioIsNull() {
+            addCriterion("uv_ratio is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andUvRatioIsNotNull() {
+            addCriterion("uv_ratio is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andUvRatioEqualTo(Double value) {
+            addCriterion("uv_ratio =", value, "uvRatio");
+            return (Criteria) this;
+        }
+
+        public Criteria andUvRatioNotEqualTo(Double value) {
+            addCriterion("uv_ratio <>", value, "uvRatio");
+            return (Criteria) this;
+        }
+
+        public Criteria andUvRatioGreaterThan(Double value) {
+            addCriterion("uv_ratio >", value, "uvRatio");
+            return (Criteria) this;
+        }
+
+        public Criteria andUvRatioGreaterThanOrEqualTo(Double value) {
+            addCriterion("uv_ratio >=", value, "uvRatio");
+            return (Criteria) this;
+        }
+
+        public Criteria andUvRatioLessThan(Double value) {
+            addCriterion("uv_ratio <", value, "uvRatio");
+            return (Criteria) this;
+        }
+
+        public Criteria andUvRatioLessThanOrEqualTo(Double value) {
+            addCriterion("uv_ratio <=", value, "uvRatio");
+            return (Criteria) this;
+        }
+
+        public Criteria andUvRatioIn(List<Double> values) {
+            addCriterion("uv_ratio in", values, "uvRatio");
+            return (Criteria) this;
+        }
+
+        public Criteria andUvRatioNotIn(List<Double> values) {
+            addCriterion("uv_ratio not in", values, "uvRatio");
+            return (Criteria) this;
+        }
+
+        public Criteria andUvRatioBetween(Double value1, Double value2) {
+            addCriterion("uv_ratio between", value1, value2, "uvRatio");
+            return (Criteria) this;
+        }
+
+        public Criteria andUvRatioNotBetween(Double value1, Double value2) {
+            addCriterion("uv_ratio not between", value1, value2, "uvRatio");
+            return (Criteria) this;
+        }
     }
 
     /**

+ 2 - 2
core/src/main/java/com/tzld/videoVector/service/impl/EmbeddingServiceImpl.java

@@ -72,7 +72,7 @@ public class EmbeddingServiceImpl implements EmbeddingService {
                 if (StringUtils.hasText(cached)) {
                     List<Float> vector = JSON.parseObject(cached, new TypeReference<List<Float>>() {});
                     if (vector != null && !vector.isEmpty()) {
-                        log.debug("命中 embedding Redis 缓存,key={}", cacheKey);
+                        log.info("命中 embedding Redis 缓存,key={}", cacheKey);
                         return vector;
                     }
                 }
@@ -96,7 +96,7 @@ public class EmbeddingServiceImpl implements EmbeddingService {
         if (vector != null && !vector.isEmpty() && cacheKey != null) {
             try {
                 redisUtils.set(cacheKey, JSON.toJSONString(vector), cacheExpireSeconds);
-                log.debug("embedding 结果已缓存,key={}, 维度={}", cacheKey, vector.size());
+                log.info("embedding 结果已缓存,key={}, 维度={}", cacheKey, vector.size());
             } catch (Exception e) {
                 log.warn("写入 embedding 缓存失败,key={}", cacheKey, e);
             }

+ 1 - 1
core/src/main/java/com/tzld/videoVector/service/impl/MaterialSearchServiceImpl.java

@@ -218,7 +218,7 @@ public class MaterialSearchServiceImpl implements MaterialSearchService {
                         cfgCode, queryVectorStr, candidateSize);
 
                 if (CollectionUtils.isEmpty(matches)) {
-                    log.debug("配置 {} 无匹配结果", cfgCode);
+                    log.info("配置 {} 无匹配结果", cfgCode);
                     continue;
                 }
 

+ 2 - 2
core/src/main/java/com/tzld/videoVector/service/impl/PgVectorStoreServiceImpl.java

@@ -59,7 +59,7 @@ public class PgVectorStoreServiceImpl implements VectorStoreService {
         String embedding = vectorToString(vector);
         String textHash = (text != null && !text.isEmpty()) ? Md5Util.encoderByMd5(text) : null;
         videoVectorMapperExt.upsertVector(videoId, configCode, pointIndex, embedding, text, textHash);
-        log.debug("保存向量成功,configCode={}, videoId={}, pointIndex={}, 维度={}", configCode, videoId, pointIndex, vector.size());
+        log.info("保存向量成功,configCode={}, videoId={}, pointIndex={}, 维度={}", configCode, videoId, pointIndex, vector.size());
     }
 
     @Override
@@ -178,7 +178,7 @@ public class PgVectorStoreServiceImpl implements VectorStoreService {
             configCode = DEFAULT_CONFIG_CODE;
         }
         videoVectorMapperExt.deleteByVideoIdAndConfigCode(videoId, configCode);
-        log.debug("删除向量成功,configCode={}, videoId={}", configCode, videoId);
+        log.info("删除向量成功,configCode={}, videoId={}", configCode, videoId);
     }
 
     @Override

+ 2 - 2
core/src/main/java/com/tzld/videoVector/service/impl/RedisVectorStoreServiceImpl.java

@@ -90,7 +90,7 @@ public class RedisVectorStoreServiceImpl implements VectorStoreService {
         // 更新本地缓存
         updateLocalCache(configCode, videoId, normalized);
 
-        log.debug("保存向量成功,configCode={}, videoId={}, 维度={}", configCode, videoId, vector.size());
+        log.info("保存向量成功,configCode={}, videoId={}, 维度={}", configCode, videoId, vector.size());
     }
 
     @Override
@@ -275,7 +275,7 @@ public class RedisVectorStoreServiceImpl implements VectorStoreService {
         // 从本地缓存移除
         removeFromLocalCache(configCode, videoId);
 
-        log.debug("删除向量成功,configCode={}, videoId={}", configCode, videoId);
+        log.info("删除向量成功,configCode={}, videoId={}", configCode, videoId);
     }
 
     @Override

+ 3 - 3
core/src/main/java/com/tzld/videoVector/service/impl/VectorizeServiceImpl.java

@@ -73,7 +73,7 @@ public class VectorizeServiceImpl implements VectorizeService {
                 // 幂等检查:若该 configCode 已有向量则跳过,防止重复向量化
                 List<ContentVector> existing = getVectorsByContentId(content.getId(), config.getConfigCode());
                 if (!CollectionUtils.isEmpty(existing)) {
-                    log.debug("contentId={} 已有 configCode={} 的向量,跳过向量化",
+                    log.info("contentId={} 已有 configCode={} 的向量,跳过向量化",
                             content.getId(), config.getConfigCode());
                     continue;
                 }
@@ -105,7 +105,7 @@ public class VectorizeServiceImpl implements VectorizeService {
         // 提取文本内容
         List<String> texts = extractTexts(content, config);
         if (CollectionUtils.isEmpty(texts)) {
-            log.debug("未提取到文本内容,configCode={}", config.getConfigCode());
+            log.info("未提取到文本内容,configCode={}", config.getConfigCode());
             return vectors;
         }
 
@@ -124,7 +124,7 @@ public class VectorizeServiceImpl implements VectorizeService {
             List<Float> vectorData = findCachedVectorData(textHash, config.getConfigCode());
             String embeddingModel = config.getEmbeddingModel();
             if (vectorData != null) {
-                log.debug("命中 text_hash 向量缓存,跳过 embedding API,hash={}, configCode={}",
+                log.info("命中 text_hash 向量缓存,跳过 embedding API,hash={}, configCode={}",
                         textHash, config.getConfigCode());
             } else {
                 // 未命中缓存,调用 embedding API

+ 3 - 3
core/src/main/java/com/tzld/videoVector/service/impl/VideoSearchServiceImpl.java

@@ -652,7 +652,7 @@ public class VideoSearchServiceImpl implements VideoSearchService {
                 List<VideoMatch> matches = vectorStoreService.searchTopN(cfgCode, queryVector, candidateSize);
 
                 if (matches == null || matches.isEmpty()) {
-                    log.debug("配置 {} 无匹配结果", cfgCode);
+                    log.info("配置 {} 无匹配结果", cfgCode);
                     continue;
                 }
 
@@ -1379,11 +1379,11 @@ public class VideoSearchServiceImpl implements VideoSearchService {
             simNorm = Math.max(0.0, Math.min(1.0, simNorm));
             item.setSimNorm(round(simNorm));
 
-            // rov 归一化: rov_norm = clip((rov - rovP5) / (rovP95 - rovP5), 0, 1)
+            // rov 归一化: rov_norm = max((rov - rovP5) / (rovP95 - rovP5), 0),不设上限
             double rovNorm = (rovP95 - rovP5) > 0
                     ? (rov - rovP5) / (rovP95 - rovP5)
                     : 0.0;
-            rovNorm = Math.max(0.0, Math.min(1.0, rovNorm));
+            rovNorm = Math.max(0.0, rovNorm);
             item.setRovNorm(round(rovNorm));
 
             // 综合得分: score = alpha * sim_norm + (1-alpha) * rov_norm

+ 38 - 5
core/src/main/resources/mapper/pgVector/ChannelDemandMatchConfigMapper.xml

@@ -14,6 +14,8 @@
     <result column="status" jdbcType="SMALLINT" property="status" />
     <result column="create_time" jdbcType="TIMESTAMP" property="createTime" />
     <result column="update_time" jdbcType="TIMESTAMP" property="updateTime" />
+    <result column="online_action" jdbcType="VARCHAR" property="onlineAction" />
+    <result column="demand_strategy" jdbcType="VARCHAR" property="demandStrategy" />
   </resultMap>
   <sql id="Example_Where_Clause">
     <!--
@@ -86,7 +88,8 @@
       WARNING - @mbg.generated
       This element is automatically generated by MyBatis Generator, do not modify.
     -->
-    id, channel_name, min_uv, min_rov, top_n, "status", create_time, update_time
+    id, channel_name, min_uv, min_rov, top_n, "status", create_time, update_time, online_action, 
+    demand_strategy
   </sql>
   <select id="selectByExample" parameterType="com.tzld.videoVector.model.po.pgVector.ChannelDemandMatchConfigExample" resultMap="BaseResultMap">
     <!--
@@ -141,10 +144,12 @@
     -->
     insert into channel_demand_match_config (channel_name, min_uv, min_rov, 
       top_n, "status", create_time, 
-      update_time)
+      update_time, online_action, demand_strategy
+      )
     values (#{channelName,jdbcType=VARCHAR}, #{minUv,jdbcType=INTEGER}, #{minRov,jdbcType=DOUBLE}, 
       #{topN,jdbcType=INTEGER}, #{status,jdbcType=SMALLINT}, #{createTime,jdbcType=TIMESTAMP}, 
-      #{updateTime,jdbcType=TIMESTAMP})
+      #{updateTime,jdbcType=TIMESTAMP}, #{onlineAction,jdbcType=VARCHAR}, #{demandStrategy,jdbcType=VARCHAR}
+      )
   </insert>
   <insert id="insertSelective" keyColumn="id" keyProperty="id" parameterType="com.tzld.videoVector.model.po.pgVector.ChannelDemandMatchConfig" useGeneratedKeys="true">
     <!--
@@ -174,6 +179,12 @@
       <if test="updateTime != null">
         update_time,
       </if>
+      <if test="onlineAction != null">
+        online_action,
+      </if>
+      <if test="demandStrategy != null">
+        demand_strategy,
+      </if>
     </trim>
     <trim prefix="values (" suffix=")" suffixOverrides=",">
       <if test="channelName != null">
@@ -197,6 +208,12 @@
       <if test="updateTime != null">
         #{updateTime,jdbcType=TIMESTAMP},
       </if>
+      <if test="onlineAction != null">
+        #{onlineAction,jdbcType=VARCHAR},
+      </if>
+      <if test="demandStrategy != null">
+        #{demandStrategy,jdbcType=VARCHAR},
+      </if>
     </trim>
   </insert>
   <select id="countByExample" parameterType="com.tzld.videoVector.model.po.pgVector.ChannelDemandMatchConfigExample" resultType="java.lang.Long">
@@ -240,6 +257,12 @@
       <if test="record.updateTime != null">
         update_time = #{record.updateTime,jdbcType=TIMESTAMP},
       </if>
+      <if test="record.onlineAction != null">
+        online_action = #{record.onlineAction,jdbcType=VARCHAR},
+      </if>
+      <if test="record.demandStrategy != null">
+        demand_strategy = #{record.demandStrategy,jdbcType=VARCHAR},
+      </if>
     </set>
     <if test="_parameter != null">
       <include refid="Update_By_Example_Where_Clause" />
@@ -258,7 +281,9 @@
       top_n = #{record.topN,jdbcType=INTEGER},
       "status" = #{record.status,jdbcType=SMALLINT},
       create_time = #{record.createTime,jdbcType=TIMESTAMP},
-      update_time = #{record.updateTime,jdbcType=TIMESTAMP}
+      update_time = #{record.updateTime,jdbcType=TIMESTAMP},
+      online_action = #{record.onlineAction,jdbcType=VARCHAR},
+      demand_strategy = #{record.demandStrategy,jdbcType=VARCHAR}
     <if test="_parameter != null">
       <include refid="Update_By_Example_Where_Clause" />
     </if>
@@ -291,6 +316,12 @@
       <if test="updateTime != null">
         update_time = #{updateTime,jdbcType=TIMESTAMP},
       </if>
+      <if test="onlineAction != null">
+        online_action = #{onlineAction,jdbcType=VARCHAR},
+      </if>
+      <if test="demandStrategy != null">
+        demand_strategy = #{demandStrategy,jdbcType=VARCHAR},
+      </if>
     </set>
     where id = #{id,jdbcType=BIGINT}
   </update>
@@ -306,7 +337,9 @@
       top_n = #{topN,jdbcType=INTEGER},
       "status" = #{status,jdbcType=SMALLINT},
       create_time = #{createTime,jdbcType=TIMESTAMP},
-      update_time = #{updateTime,jdbcType=TIMESTAMP}
+      update_time = #{updateTime,jdbcType=TIMESTAMP},
+      online_action = #{onlineAction,jdbcType=VARCHAR},
+      demand_strategy = #{demandStrategy,jdbcType=VARCHAR}
     where id = #{id,jdbcType=BIGINT}
   </update>
 </mapper>

+ 260 - 7
core/src/main/resources/mapper/pgVector/ChannelDemandMatchResultMapper.xml

@@ -31,6 +31,22 @@
     <result column="match_status" jdbcType="SMALLINT" property="matchStatus" />
     <result column="create_time" jdbcType="TIMESTAMP" property="createTime" />
     <result column="update_time" jdbcType="TIMESTAMP" property="updateTime" />
+    <result column="online_action" jdbcType="VARCHAR" property="onlineAction" />
+    <result column="match_experiment_id" jdbcType="VARCHAR" property="matchExperimentId" />
+    <result column="demand_id" jdbcType="VARCHAR" property="demandId" />
+    <result column="crowd_package" jdbcType="VARCHAR" property="crowdPackage" />
+    <result column="conversion_target" jdbcType="VARCHAR" property="conversionTarget" />
+    <result column="partner" jdbcType="VARCHAR" property="partner" />
+    <result column="account" jdbcType="VARCHAR" property="account" />
+    <result column="scene_value" jdbcType="VARCHAR" property="sceneValue" />
+    <result column="demand_strategy" jdbcType="VARCHAR" property="demandStrategy" />
+    <result column="drive_dimension_time" jdbcType="VARCHAR" property="driveDimensionTime" />
+    <result column="demand_filter_sort_strategy" jdbcType="VARCHAR" property="demandFilterSortStrategy" />
+    <result column="demand_type" jdbcType="VARCHAR" property="demandType" />
+    <result column="demand_content_id" jdbcType="VARCHAR" property="demandContentId" />
+    <result column="demand_content_title" jdbcType="VARCHAR" property="demandContentTitle" />
+    <result column="demand_content_topic" jdbcType="VARCHAR" property="demandContentTopic" />
+    <result column="uv_ratio" jdbcType="DOUBLE" property="uvRatio" />
   </resultMap>
   <sql id="Example_Where_Clause">
     <!--
@@ -106,7 +122,10 @@
     id, config_id, dt, channel_name, crowd_segment, dimension, point_type, standard_element, 
     category_name, crowd_count, video_count, visit_uv, visit_pv, share_pv, backflow_uv, 
     total_rov, match_video_id, match_config_code, match_score, match_sim, match_rov, 
-    match_text, match_status, create_time, update_time
+    match_text, match_status, create_time, update_time, online_action, match_experiment_id, 
+    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, uv_ratio
   </sql>
   <select id="selectByExample" parameterType="com.tzld.videoVector.model.po.pgVector.ChannelDemandMatchResultExample" resultMap="BaseResultMap">
     <!--
@@ -166,8 +185,13 @@
       share_pv, backflow_uv, total_rov, 
       match_video_id, match_config_code, match_score, 
       match_sim, match_rov, match_text, 
-      match_status, create_time, update_time
-      )
+      match_status, create_time, update_time, 
+      online_action, match_experiment_id, 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, uv_ratio)
     values (#{configId,jdbcType=BIGINT}, #{dt,jdbcType=VARCHAR}, #{channelName,jdbcType=VARCHAR}, 
       #{crowdSegment,jdbcType=VARCHAR}, #{dimension,jdbcType=VARCHAR}, #{pointType,jdbcType=VARCHAR}, 
       #{standardElement,jdbcType=VARCHAR}, #{categoryName,jdbcType=VARCHAR}, #{crowdCount,jdbcType=INTEGER}, 
@@ -175,8 +199,13 @@
       #{sharePv,jdbcType=BIGINT}, #{backflowUv,jdbcType=BIGINT}, #{totalRov,jdbcType=DOUBLE}, 
       #{matchVideoId,jdbcType=BIGINT}, #{matchConfigCode,jdbcType=VARCHAR}, #{matchScore,jdbcType=DOUBLE}, 
       #{matchSim,jdbcType=DOUBLE}, #{matchRov,jdbcType=DOUBLE}, #{matchText,jdbcType=VARCHAR}, 
-      #{matchStatus,jdbcType=SMALLINT}, #{createTime,jdbcType=TIMESTAMP}, #{updateTime,jdbcType=TIMESTAMP}
-      )
+      #{matchStatus,jdbcType=SMALLINT}, #{createTime,jdbcType=TIMESTAMP}, #{updateTime,jdbcType=TIMESTAMP}, 
+      #{onlineAction,jdbcType=VARCHAR}, #{matchExperimentId,jdbcType=VARCHAR}, #{demandId,jdbcType=VARCHAR}, 
+      #{crowdPackage,jdbcType=VARCHAR}, #{conversionTarget,jdbcType=VARCHAR}, #{partner,jdbcType=VARCHAR}, 
+      #{account,jdbcType=VARCHAR}, #{sceneValue,jdbcType=VARCHAR}, #{demandStrategy,jdbcType=VARCHAR}, 
+      #{driveDimensionTime,jdbcType=VARCHAR}, #{demandFilterSortStrategy,jdbcType=VARCHAR}, 
+      #{demandType,jdbcType=VARCHAR}, #{demandContentId,jdbcType=VARCHAR}, #{demandContentTitle,jdbcType=VARCHAR}, 
+      #{demandContentTopic,jdbcType=VARCHAR}, #{uvRatio,jdbcType=DOUBLE})
   </insert>
   <insert id="insertSelective" keyColumn="id" keyProperty="id" parameterType="com.tzld.videoVector.model.po.pgVector.ChannelDemandMatchResult" useGeneratedKeys="true">
     <!--
@@ -257,6 +286,54 @@
       <if test="updateTime != null">
         update_time,
       </if>
+      <if test="onlineAction != null">
+        online_action,
+      </if>
+      <if test="matchExperimentId != null">
+        match_experiment_id,
+      </if>
+      <if test="demandId != null">
+        demand_id,
+      </if>
+      <if test="crowdPackage != null">
+        crowd_package,
+      </if>
+      <if test="conversionTarget != null">
+        conversion_target,
+      </if>
+      <if test="partner != null">
+        partner,
+      </if>
+      <if test="account != null">
+        account,
+      </if>
+      <if test="sceneValue != null">
+        scene_value,
+      </if>
+      <if test="demandStrategy != null">
+        demand_strategy,
+      </if>
+      <if test="driveDimensionTime != null">
+        drive_dimension_time,
+      </if>
+      <if test="demandFilterSortStrategy != null">
+        demand_filter_sort_strategy,
+      </if>
+      <if test="demandType != null">
+        demand_type,
+      </if>
+      <if test="demandContentId != null">
+        demand_content_id,
+      </if>
+      <if test="demandContentTitle != null">
+        demand_content_title,
+      </if>
+      <if test="demandContentTopic != null">
+        demand_content_topic,
+      </if>
+      <if test="uvRatio != null">
+        uv_ratio,
+      </if>
     </trim>
     <trim prefix="values (" suffix=")" suffixOverrides=",">
       <if test="configId != null">
@@ -331,6 +408,54 @@
       <if test="updateTime != null">
         #{updateTime,jdbcType=TIMESTAMP},
       </if>
+      <if test="onlineAction != null">
+        #{onlineAction,jdbcType=VARCHAR},
+      </if>
+      <if test="matchExperimentId != null">
+        #{matchExperimentId,jdbcType=VARCHAR},
+      </if>
+      <if test="demandId != null">
+        #{demandId,jdbcType=VARCHAR},
+      </if>
+      <if test="crowdPackage != null">
+        #{crowdPackage,jdbcType=VARCHAR},
+      </if>
+      <if test="conversionTarget != null">
+        #{conversionTarget,jdbcType=VARCHAR},
+      </if>
+      <if test="partner != null">
+        #{partner,jdbcType=VARCHAR},
+      </if>
+      <if test="account != null">
+        #{account,jdbcType=VARCHAR},
+      </if>
+      <if test="sceneValue != null">
+        #{sceneValue,jdbcType=VARCHAR},
+      </if>
+      <if test="demandStrategy != null">
+        #{demandStrategy,jdbcType=VARCHAR},
+      </if>
+      <if test="driveDimensionTime != null">
+        #{driveDimensionTime,jdbcType=VARCHAR},
+      </if>
+      <if test="demandFilterSortStrategy != null">
+        #{demandFilterSortStrategy,jdbcType=VARCHAR},
+      </if>
+      <if test="demandType != null">
+        #{demandType,jdbcType=VARCHAR},
+      </if>
+      <if test="demandContentId != null">
+        #{demandContentId,jdbcType=VARCHAR},
+      </if>
+      <if test="demandContentTitle != null">
+        #{demandContentTitle,jdbcType=VARCHAR},
+      </if>
+      <if test="demandContentTopic != null">
+        #{demandContentTopic,jdbcType=VARCHAR},
+      </if>
+      <if test="uvRatio != null">
+        #{uvRatio,jdbcType=DOUBLE},
+      </if>
     </trim>
   </insert>
   <select id="countByExample" parameterType="com.tzld.videoVector.model.po.pgVector.ChannelDemandMatchResultExample" resultType="java.lang.Long">
@@ -425,6 +550,54 @@
       <if test="record.updateTime != null">
         update_time = #{record.updateTime,jdbcType=TIMESTAMP},
       </if>
+      <if test="record.onlineAction != null">
+        online_action = #{record.onlineAction,jdbcType=VARCHAR},
+      </if>
+      <if test="record.matchExperimentId != null">
+        match_experiment_id = #{record.matchExperimentId,jdbcType=VARCHAR},
+      </if>
+      <if test="record.demandId != null">
+        demand_id = #{record.demandId,jdbcType=VARCHAR},
+      </if>
+      <if test="record.crowdPackage != null">
+        crowd_package = #{record.crowdPackage,jdbcType=VARCHAR},
+      </if>
+      <if test="record.conversionTarget != null">
+        conversion_target = #{record.conversionTarget,jdbcType=VARCHAR},
+      </if>
+      <if test="record.partner != null">
+        partner = #{record.partner,jdbcType=VARCHAR},
+      </if>
+      <if test="record.account != null">
+        account = #{record.account,jdbcType=VARCHAR},
+      </if>
+      <if test="record.sceneValue != null">
+        scene_value = #{record.sceneValue,jdbcType=VARCHAR},
+      </if>
+      <if test="record.demandStrategy != null">
+        demand_strategy = #{record.demandStrategy,jdbcType=VARCHAR},
+      </if>
+      <if test="record.driveDimensionTime != null">
+        drive_dimension_time = #{record.driveDimensionTime,jdbcType=VARCHAR},
+      </if>
+      <if test="record.demandFilterSortStrategy != null">
+        demand_filter_sort_strategy = #{record.demandFilterSortStrategy,jdbcType=VARCHAR},
+      </if>
+      <if test="record.demandType != null">
+        demand_type = #{record.demandType,jdbcType=VARCHAR},
+      </if>
+      <if test="record.demandContentId != null">
+        demand_content_id = #{record.demandContentId,jdbcType=VARCHAR},
+      </if>
+      <if test="record.demandContentTitle != null">
+        demand_content_title = #{record.demandContentTitle,jdbcType=VARCHAR},
+      </if>
+      <if test="record.demandContentTopic != null">
+        demand_content_topic = #{record.demandContentTopic,jdbcType=VARCHAR},
+      </if>
+      <if test="record.uvRatio != null">
+        uv_ratio = #{record.uvRatio,jdbcType=DOUBLE},
+      </if>
     </set>
     <if test="_parameter != null">
       <include refid="Update_By_Example_Where_Clause" />
@@ -460,7 +633,23 @@
       match_text = #{record.matchText,jdbcType=VARCHAR},
       match_status = #{record.matchStatus,jdbcType=SMALLINT},
       create_time = #{record.createTime,jdbcType=TIMESTAMP},
-      update_time = #{record.updateTime,jdbcType=TIMESTAMP}
+      update_time = #{record.updateTime,jdbcType=TIMESTAMP},
+      online_action = #{record.onlineAction,jdbcType=VARCHAR},
+      match_experiment_id = #{record.matchExperimentId,jdbcType=VARCHAR},
+      demand_id = #{record.demandId,jdbcType=VARCHAR},
+      crowd_package = #{record.crowdPackage,jdbcType=VARCHAR},
+      conversion_target = #{record.conversionTarget,jdbcType=VARCHAR},
+      partner = #{record.partner,jdbcType=VARCHAR},
+      account = #{record.account,jdbcType=VARCHAR},
+      scene_value = #{record.sceneValue,jdbcType=VARCHAR},
+      demand_strategy = #{record.demandStrategy,jdbcType=VARCHAR},
+      drive_dimension_time = #{record.driveDimensionTime,jdbcType=VARCHAR},
+      demand_filter_sort_strategy = #{record.demandFilterSortStrategy,jdbcType=VARCHAR},
+      demand_type = #{record.demandType,jdbcType=VARCHAR},
+      demand_content_id = #{record.demandContentId,jdbcType=VARCHAR},
+      demand_content_title = #{record.demandContentTitle,jdbcType=VARCHAR},
+      demand_content_topic = #{record.demandContentTopic,jdbcType=VARCHAR},
+      uv_ratio = #{record.uvRatio,jdbcType=DOUBLE}
     <if test="_parameter != null">
       <include refid="Update_By_Example_Where_Clause" />
     </if>
@@ -544,6 +733,54 @@
       <if test="updateTime != null">
         update_time = #{updateTime,jdbcType=TIMESTAMP},
       </if>
+      <if test="onlineAction != null">
+        online_action = #{onlineAction,jdbcType=VARCHAR},
+      </if>
+      <if test="matchExperimentId != null">
+        match_experiment_id = #{matchExperimentId,jdbcType=VARCHAR},
+      </if>
+      <if test="demandId != null">
+        demand_id = #{demandId,jdbcType=VARCHAR},
+      </if>
+      <if test="crowdPackage != null">
+        crowd_package = #{crowdPackage,jdbcType=VARCHAR},
+      </if>
+      <if test="conversionTarget != null">
+        conversion_target = #{conversionTarget,jdbcType=VARCHAR},
+      </if>
+      <if test="partner != null">
+        partner = #{partner,jdbcType=VARCHAR},
+      </if>
+      <if test="account != null">
+        account = #{account,jdbcType=VARCHAR},
+      </if>
+      <if test="sceneValue != null">
+        scene_value = #{sceneValue,jdbcType=VARCHAR},
+      </if>
+      <if test="demandStrategy != null">
+        demand_strategy = #{demandStrategy,jdbcType=VARCHAR},
+      </if>
+      <if test="driveDimensionTime != null">
+        drive_dimension_time = #{driveDimensionTime,jdbcType=VARCHAR},
+      </if>
+      <if test="demandFilterSortStrategy != null">
+        demand_filter_sort_strategy = #{demandFilterSortStrategy,jdbcType=VARCHAR},
+      </if>
+      <if test="demandType != null">
+        demand_type = #{demandType,jdbcType=VARCHAR},
+      </if>
+      <if test="demandContentId != null">
+        demand_content_id = #{demandContentId,jdbcType=VARCHAR},
+      </if>
+      <if test="demandContentTitle != null">
+        demand_content_title = #{demandContentTitle,jdbcType=VARCHAR},
+      </if>
+      <if test="demandContentTopic != null">
+        demand_content_topic = #{demandContentTopic,jdbcType=VARCHAR},
+      </if>
+      <if test="uvRatio != null">
+        uv_ratio = #{uvRatio,jdbcType=DOUBLE},
+      </if>
     </set>
     where id = #{id,jdbcType=BIGINT}
   </update>
@@ -576,7 +813,23 @@
       match_text = #{matchText,jdbcType=VARCHAR},
       match_status = #{matchStatus,jdbcType=SMALLINT},
       create_time = #{createTime,jdbcType=TIMESTAMP},
-      update_time = #{updateTime,jdbcType=TIMESTAMP}
+      update_time = #{updateTime,jdbcType=TIMESTAMP},
+      online_action = #{onlineAction,jdbcType=VARCHAR},
+      match_experiment_id = #{matchExperimentId,jdbcType=VARCHAR},
+      demand_id = #{demandId,jdbcType=VARCHAR},
+      crowd_package = #{crowdPackage,jdbcType=VARCHAR},
+      conversion_target = #{conversionTarget,jdbcType=VARCHAR},
+      partner = #{partner,jdbcType=VARCHAR},
+      account = #{account,jdbcType=VARCHAR},
+      scene_value = #{sceneValue,jdbcType=VARCHAR},
+      demand_strategy = #{demandStrategy,jdbcType=VARCHAR},
+      drive_dimension_time = #{driveDimensionTime,jdbcType=VARCHAR},
+      demand_filter_sort_strategy = #{demandFilterSortStrategy,jdbcType=VARCHAR},
+      demand_type = #{demandType,jdbcType=VARCHAR},
+      demand_content_id = #{demandContentId,jdbcType=VARCHAR},
+      demand_content_title = #{demandContentTitle,jdbcType=VARCHAR},
+      demand_content_topic = #{demandContentTopic,jdbcType=VARCHAR},
+      uv_ratio = #{uvRatio,jdbcType=DOUBLE}
     where id = #{id,jdbcType=BIGINT}
   </update>
 </mapper>

+ 12 - 2
core/src/main/resources/mapper/pgVector/ext/ChannelDemandMatchResultMapperExt.xml

@@ -9,7 +9,12 @@
       share_pv, backflow_uv, total_rov,
       match_video_id, match_config_code, match_score,
       match_sim, match_rov, match_text,
-      match_status)
+      match_status, online_action, match_experiment_id,
+      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, uv_ratio)
     values
     <foreach collection="list" item="item" separator=",">
       (#{item.configId,jdbcType=BIGINT}, #{item.dt,jdbcType=VARCHAR}, #{item.channelName,jdbcType=VARCHAR},
@@ -19,7 +24,12 @@
       #{item.sharePv,jdbcType=BIGINT}, #{item.backflowUv,jdbcType=BIGINT}, #{item.totalRov,jdbcType=DOUBLE},
       #{item.matchVideoId,jdbcType=BIGINT}, #{item.matchConfigCode,jdbcType=VARCHAR}, #{item.matchScore,jdbcType=DOUBLE},
       #{item.matchSim,jdbcType=DOUBLE}, #{item.matchRov,jdbcType=DOUBLE}, #{item.matchText,jdbcType=VARCHAR},
-      #{item.matchStatus,jdbcType=SMALLINT})
+      #{item.matchStatus,jdbcType=SMALLINT}, #{item.onlineAction,jdbcType=VARCHAR}, #{item.matchExperimentId,jdbcType=VARCHAR},
+      #{item.demandId,jdbcType=VARCHAR}, #{item.crowdPackage,jdbcType=VARCHAR}, #{item.conversionTarget,jdbcType=VARCHAR},
+      #{item.partner,jdbcType=VARCHAR}, #{item.account,jdbcType=VARCHAR}, #{item.sceneValue,jdbcType=VARCHAR},
+      #{item.demandStrategy,jdbcType=VARCHAR}, #{item.driveDimensionTime,jdbcType=VARCHAR}, #{item.demandFilterSortStrategy,jdbcType=VARCHAR},
+      #{item.demandType,jdbcType=VARCHAR}, #{item.demandContentId,jdbcType=VARCHAR}, #{item.demandContentTitle,jdbcType=VARCHAR},
+      #{item.demandContentTopic,jdbcType=VARCHAR}, #{item.uvRatio,jdbcType=DOUBLE})
     </foreach>
   </insert>
 </mapper>