Explorar el Código

需求匹配视频 增加 头部单层回流率、头部进分发单层回流率

wangyunpeng hace 19 horas
padre
commit
d5bff5e2dd

+ 14 - 10
core/src/main/java/com/tzld/videoVector/job/ChannelDemandMatchJob.java

@@ -529,7 +529,9 @@ public class ChannelDemandMatchJob {
             row.setMatchScore(item.getScore());
             row.setMatchSim(item.getSim());
             row.setMatchRov(item.getRov());
-            row.setMatchExposurePv(extractExposurePv(item.getVideoDetail()));
+            row.setMatchExposurePv(extractNumber(item.getVideoDetail(), "分发曝光pv", Long.class));
+            row.setMatchHeadSingleReturnRate(extractNumber(item.getVideoDetail(), "头部单层回流率", Double.class));
+            row.setMatchHeadDistributionSingleReturnRate(extractNumber(item.getVideoDetail(), "头部进分发单层回流率", Double.class));
             row.setMatchText(item.getText());
             row.setMatchStatus((short) 1); // 已匹配
             // 生成确定性实验ID:相同需求+相同视频 → 相同实验ID
@@ -601,22 +603,24 @@ public class ChannelDemandMatchJob {
         return (hash != null && hash.length() >= 16) ? hash.substring(0, 16) : "0000000000000000";
     }
 
-    /**
-     * 从 videoDetail Map 中提取分发曝光pv
-     */
-    private Long extractExposurePv(Map<String, Object> videoDetail) {
+    @SuppressWarnings("unchecked")
+    private <T extends Number> T extractNumber(Map<String, Object> videoDetail, String key, Class<T> type) {
         if (videoDetail == null) {
             return null;
         }
-        Object pvObj = videoDetail.get("分发曝光pv");
-        if (pvObj == null) {
+        Object obj = videoDetail.get(key);
+        if (obj == null) {
             return null;
         }
         try {
-            if (pvObj instanceof Number) {
-                return ((Number) pvObj).longValue();
+            Number num = obj instanceof Number ? (Number) obj : Double.parseDouble(obj.toString());
+            if (type == Long.class) {
+                return (T) Long.valueOf(num.longValue());
+            }
+            if (type == Double.class) {
+                return (T) Double.valueOf(num.doubleValue());
             }
-            return Long.parseLong(pvObj.toString());
+            return (T) num;
         } catch (NumberFormatException e) {
             return null;
         }

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

@@ -83,7 +83,9 @@ public class VideoDetailSyncJob {
             "sum(流量池回流) AS 流量池回流",
             "sum(流量池分享) AS 流量池分享",
             "sum(推荐曝光) AS 推荐曝光",
-            "sum(推荐回流) AS 推荐回流"
+            "sum(推荐回流) AS 推荐回流",
+            "sum(头部回流人数)/sum(总回流uv) AS 头部单层回流率",
+            "sum(当日头部进分发单层回流人数)/sum(总回流uv) AS 头部进分发单层回流率"
     );
 
     /**

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

@@ -525,6 +525,28 @@ public class ChannelDemandMatchResult {
      */
     private Long matchExposurePv;
 
+    /**
+     * Database Column Remarks:
+     *   头部单层回流率
+     *
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database column channel_demand_match_result.match_head_single_return_rate
+     *
+     * @mbg.generated
+     */
+    private Double matchHeadSingleReturnRate;
+
+    /**
+     * Database Column Remarks:
+     *   头部进分发单层回流率
+     *
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database column channel_demand_match_result.match_head_distribution_single_return_rate
+     *
+     * @mbg.generated
+     */
+    private Double matchHeadDistributionSingleReturnRate;
+
     /**
      * This method was generated by MyBatis Generator.
      * This method returns the value of the database column channel_demand_match_result.id
@@ -1653,6 +1675,54 @@ public class ChannelDemandMatchResult {
         this.matchExposurePv = matchExposurePv;
     }
 
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method returns the value of the database column channel_demand_match_result.match_head_single_return_rate
+     *
+     * @return the value of channel_demand_match_result.match_head_single_return_rate
+     *
+     * @mbg.generated
+     */
+    public Double getMatchHeadSingleReturnRate() {
+        return matchHeadSingleReturnRate;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method sets the value of the database column channel_demand_match_result.match_head_single_return_rate
+     *
+     * @param matchHeadSingleReturnRate the value for channel_demand_match_result.match_head_single_return_rate
+     *
+     * @mbg.generated
+     */
+    public void setMatchHeadSingleReturnRate(Double matchHeadSingleReturnRate) {
+        this.matchHeadSingleReturnRate = matchHeadSingleReturnRate;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method returns the value of the database column channel_demand_match_result.match_head_distribution_single_return_rate
+     *
+     * @return the value of channel_demand_match_result.match_head_distribution_single_return_rate
+     *
+     * @mbg.generated
+     */
+    public Double getMatchHeadDistributionSingleReturnRate() {
+        return matchHeadDistributionSingleReturnRate;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method sets the value of the database column channel_demand_match_result.match_head_distribution_single_return_rate
+     *
+     * @param matchHeadDistributionSingleReturnRate the value for channel_demand_match_result.match_head_distribution_single_return_rate
+     *
+     * @mbg.generated
+     */
+    public void setMatchHeadDistributionSingleReturnRate(Double matchHeadDistributionSingleReturnRate) {
+        this.matchHeadDistributionSingleReturnRate = matchHeadDistributionSingleReturnRate;
+    }
+
     /**
      * This method was generated by MyBatis Generator.
      * This method corresponds to the database table channel_demand_match_result
@@ -1712,6 +1782,8 @@ public class ChannelDemandMatchResult {
         sb.append(", matchSort=").append(matchSort);
         sb.append(", sceneSumRov=").append(sceneSumRov);
         sb.append(", matchExposurePv=").append(matchExposurePv);
+        sb.append(", matchHeadSingleReturnRate=").append(matchHeadSingleReturnRate);
+        sb.append(", matchHeadDistributionSingleReturnRate=").append(matchHeadDistributionSingleReturnRate);
         sb.append("]");
         return sb.toString();
     }

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

@@ -3314,6 +3314,126 @@ public class ChannelDemandMatchResultExample {
             addCriterion("match_exposure_pv not between", value1, value2, "matchExposurePv");
             return (Criteria) this;
         }
+
+        public Criteria andMatchHeadSingleReturnRateIsNull() {
+            addCriterion("match_head_single_return_rate is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andMatchHeadSingleReturnRateIsNotNull() {
+            addCriterion("match_head_single_return_rate is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andMatchHeadSingleReturnRateEqualTo(Double value) {
+            addCriterion("match_head_single_return_rate =", value, "matchHeadSingleReturnRate");
+            return (Criteria) this;
+        }
+
+        public Criteria andMatchHeadSingleReturnRateNotEqualTo(Double value) {
+            addCriterion("match_head_single_return_rate <>", value, "matchHeadSingleReturnRate");
+            return (Criteria) this;
+        }
+
+        public Criteria andMatchHeadSingleReturnRateGreaterThan(Double value) {
+            addCriterion("match_head_single_return_rate >", value, "matchHeadSingleReturnRate");
+            return (Criteria) this;
+        }
+
+        public Criteria andMatchHeadSingleReturnRateGreaterThanOrEqualTo(Double value) {
+            addCriterion("match_head_single_return_rate >=", value, "matchHeadSingleReturnRate");
+            return (Criteria) this;
+        }
+
+        public Criteria andMatchHeadSingleReturnRateLessThan(Double value) {
+            addCriterion("match_head_single_return_rate <", value, "matchHeadSingleReturnRate");
+            return (Criteria) this;
+        }
+
+        public Criteria andMatchHeadSingleReturnRateLessThanOrEqualTo(Double value) {
+            addCriterion("match_head_single_return_rate <=", value, "matchHeadSingleReturnRate");
+            return (Criteria) this;
+        }
+
+        public Criteria andMatchHeadSingleReturnRateIn(List<Double> values) {
+            addCriterion("match_head_single_return_rate in", values, "matchHeadSingleReturnRate");
+            return (Criteria) this;
+        }
+
+        public Criteria andMatchHeadSingleReturnRateNotIn(List<Double> values) {
+            addCriterion("match_head_single_return_rate not in", values, "matchHeadSingleReturnRate");
+            return (Criteria) this;
+        }
+
+        public Criteria andMatchHeadSingleReturnRateBetween(Double value1, Double value2) {
+            addCriterion("match_head_single_return_rate between", value1, value2, "matchHeadSingleReturnRate");
+            return (Criteria) this;
+        }
+
+        public Criteria andMatchHeadSingleReturnRateNotBetween(Double value1, Double value2) {
+            addCriterion("match_head_single_return_rate not between", value1, value2, "matchHeadSingleReturnRate");
+            return (Criteria) this;
+        }
+
+        public Criteria andMatchHeadDistributionSingleReturnRateIsNull() {
+            addCriterion("match_head_distribution_single_return_rate is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andMatchHeadDistributionSingleReturnRateIsNotNull() {
+            addCriterion("match_head_distribution_single_return_rate is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andMatchHeadDistributionSingleReturnRateEqualTo(Double value) {
+            addCriterion("match_head_distribution_single_return_rate =", value, "matchHeadDistributionSingleReturnRate");
+            return (Criteria) this;
+        }
+
+        public Criteria andMatchHeadDistributionSingleReturnRateNotEqualTo(Double value) {
+            addCriterion("match_head_distribution_single_return_rate <>", value, "matchHeadDistributionSingleReturnRate");
+            return (Criteria) this;
+        }
+
+        public Criteria andMatchHeadDistributionSingleReturnRateGreaterThan(Double value) {
+            addCriterion("match_head_distribution_single_return_rate >", value, "matchHeadDistributionSingleReturnRate");
+            return (Criteria) this;
+        }
+
+        public Criteria andMatchHeadDistributionSingleReturnRateGreaterThanOrEqualTo(Double value) {
+            addCriterion("match_head_distribution_single_return_rate >=", value, "matchHeadDistributionSingleReturnRate");
+            return (Criteria) this;
+        }
+
+        public Criteria andMatchHeadDistributionSingleReturnRateLessThan(Double value) {
+            addCriterion("match_head_distribution_single_return_rate <", value, "matchHeadDistributionSingleReturnRate");
+            return (Criteria) this;
+        }
+
+        public Criteria andMatchHeadDistributionSingleReturnRateLessThanOrEqualTo(Double value) {
+            addCriterion("match_head_distribution_single_return_rate <=", value, "matchHeadDistributionSingleReturnRate");
+            return (Criteria) this;
+        }
+
+        public Criteria andMatchHeadDistributionSingleReturnRateIn(List<Double> values) {
+            addCriterion("match_head_distribution_single_return_rate in", values, "matchHeadDistributionSingleReturnRate");
+            return (Criteria) this;
+        }
+
+        public Criteria andMatchHeadDistributionSingleReturnRateNotIn(List<Double> values) {
+            addCriterion("match_head_distribution_single_return_rate not in", values, "matchHeadDistributionSingleReturnRate");
+            return (Criteria) this;
+        }
+
+        public Criteria andMatchHeadDistributionSingleReturnRateBetween(Double value1, Double value2) {
+            addCriterion("match_head_distribution_single_return_rate between", value1, value2, "matchHeadDistributionSingleReturnRate");
+            return (Criteria) this;
+        }
+
+        public Criteria andMatchHeadDistributionSingleReturnRateNotBetween(Double value1, Double value2) {
+            addCriterion("match_head_distribution_single_return_rate not between", value1, value2, "matchHeadDistributionSingleReturnRate");
+            return (Criteria) this;
+        }
     }
 
     /**

+ 6 - 0
core/src/main/java/com/tzld/videoVector/model/vo/ChannelDemandMatchVO.java

@@ -138,5 +138,11 @@ public class ChannelDemandMatchVO {
 
         /** 匹配曝光PV */
         private Long matchExposurePv;
+
+        /** 头部单层回流率 */
+        private Double matchHeadSingleReturnRate;
+
+        /** 头部进分发单层回流率 */
+        private Double matchHeadDistributionSingleReturnRate;
     }
 }

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

@@ -1598,6 +1598,8 @@ public class VideoSearchServiceImpl implements VideoSearchService {
                 mv.setRov(r.getMatchRov());
                 mv.setText(r.getMatchText());
                 mv.setMatchExposurePv(r.getMatchExposurePv());
+                mv.setMatchHeadSingleReturnRate(r.getMatchHeadSingleReturnRate());
+                mv.setMatchHeadDistributionSingleReturnRate(r.getMatchHeadDistributionSingleReturnRate());
                 vo.getMatchedVideos().add(mv);
             }
         }

+ 37 - 5
core/src/main/resources/mapper/pgVector/ChannelDemandMatchResultMapper.xml

@@ -53,6 +53,8 @@
     <result column="match_sort" jdbcType="VARCHAR" property="matchSort" />
     <result column="scene_sum_rov" jdbcType="DOUBLE" property="sceneSumRov" />
     <result column="match_exposure_pv" jdbcType="BIGINT" property="matchExposurePv" />
+    <result column="match_head_single_return_rate" jdbcType="DOUBLE" property="matchHeadSingleReturnRate" />
+    <result column="match_head_distribution_single_return_rate" jdbcType="DOUBLE" property="matchHeadDistributionSingleReturnRate" />
   </resultMap>
   <sql id="Example_Where_Clause">
     <!--
@@ -132,7 +134,7 @@
     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, 
     experiment_id, channel_level3, element_dimension, channel_median, match_method, match_video_filter, 
-    match_sort, scene_sum_rov, match_exposure_pv
+    match_sort, scene_sum_rov, match_exposure_pv, match_head_single_return_rate, match_head_distribution_single_return_rate
   </sql>
   <select id="selectByExample" parameterType="com.tzld.videoVector.model.po.pgVector.ChannelDemandMatchResultExample" resultMap="BaseResultMap">
     <!--
@@ -200,7 +202,8 @@
       demand_content_topic, uv_ratio, experiment_id, 
       channel_level3, element_dimension, channel_median, 
       match_method, match_video_filter, match_sort, 
-      scene_sum_rov, match_exposure_pv)
+      scene_sum_rov, match_exposure_pv, match_head_single_return_rate, 
+      match_head_distribution_single_return_rate)
     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}, 
@@ -216,7 +219,8 @@
       #{demandContentTopic,jdbcType=VARCHAR}, #{uvRatio,jdbcType=DOUBLE}, #{experimentId,jdbcType=VARCHAR}, 
       #{channelLevel3,jdbcType=VARCHAR}, #{elementDimension,jdbcType=VARCHAR}, #{channelMedian,jdbcType=DOUBLE}, 
       #{matchMethod,jdbcType=VARCHAR}, #{matchVideoFilter,jdbcType=VARCHAR}, #{matchSort,jdbcType=VARCHAR}, 
-      #{sceneSumRov,jdbcType=DOUBLE}, #{matchExposurePv,jdbcType=BIGINT})
+      #{sceneSumRov,jdbcType=DOUBLE}, #{matchExposurePv,jdbcType=BIGINT}, #{matchHeadSingleReturnRate,jdbcType=DOUBLE}, 
+      #{matchHeadDistributionSingleReturnRate,jdbcType=DOUBLE})
   </insert>
   <insert id="insertSelective" keyColumn="id" keyProperty="id" parameterType="com.tzld.videoVector.model.po.pgVector.ChannelDemandMatchResult" useGeneratedKeys="true">
     <!--
@@ -363,6 +367,12 @@
       <if test="matchExposurePv != null">
         match_exposure_pv,
       </if>
+      <if test="matchHeadSingleReturnRate != null">
+        match_head_single_return_rate,
+      </if>
+      <if test="matchHeadDistributionSingleReturnRate != null">
+        match_head_distribution_single_return_rate,
+      </if>
     </trim>
     <trim prefix="values (" suffix=")" suffixOverrides=",">
       <if test="configId != null">
@@ -503,6 +513,12 @@
       <if test="matchExposurePv != null">
         #{matchExposurePv,jdbcType=BIGINT},
       </if>
+      <if test="matchHeadSingleReturnRate != null">
+        #{matchHeadSingleReturnRate,jdbcType=DOUBLE},
+      </if>
+      <if test="matchHeadDistributionSingleReturnRate != null">
+        #{matchHeadDistributionSingleReturnRate,jdbcType=DOUBLE},
+      </if>
     </trim>
   </insert>
   <select id="countByExample" parameterType="com.tzld.videoVector.model.po.pgVector.ChannelDemandMatchResultExample" resultType="java.lang.Long">
@@ -663,6 +679,12 @@
       <if test="record.matchExposurePv != null">
         match_exposure_pv = #{record.matchExposurePv,jdbcType=BIGINT},
       </if>
+      <if test="record.matchHeadSingleReturnRate != null">
+        match_head_single_return_rate = #{record.matchHeadSingleReturnRate,jdbcType=DOUBLE},
+      </if>
+      <if test="record.matchHeadDistributionSingleReturnRate != null">
+        match_head_distribution_single_return_rate = #{record.matchHeadDistributionSingleReturnRate,jdbcType=DOUBLE},
+      </if>
     </set>
     <if test="_parameter != null">
       <include refid="Update_By_Example_Where_Clause" />
@@ -720,7 +742,9 @@
       match_video_filter = #{record.matchVideoFilter,jdbcType=VARCHAR},
       match_sort = #{record.matchSort,jdbcType=VARCHAR},
       scene_sum_rov = #{record.sceneSumRov,jdbcType=DOUBLE},
-      match_exposure_pv = #{record.matchExposurePv,jdbcType=BIGINT}
+      match_exposure_pv = #{record.matchExposurePv,jdbcType=BIGINT},
+      match_head_single_return_rate = #{record.matchHeadSingleReturnRate,jdbcType=DOUBLE},
+      match_head_distribution_single_return_rate = #{record.matchHeadDistributionSingleReturnRate,jdbcType=DOUBLE}
     <if test="_parameter != null">
       <include refid="Update_By_Example_Where_Clause" />
     </if>
@@ -870,6 +894,12 @@
       <if test="matchExposurePv != null">
         match_exposure_pv = #{matchExposurePv,jdbcType=BIGINT},
       </if>
+      <if test="matchHeadSingleReturnRate != null">
+        match_head_single_return_rate = #{matchHeadSingleReturnRate,jdbcType=DOUBLE},
+      </if>
+      <if test="matchHeadDistributionSingleReturnRate != null">
+        match_head_distribution_single_return_rate = #{matchHeadDistributionSingleReturnRate,jdbcType=DOUBLE},
+      </if>
     </set>
     where id = #{id,jdbcType=BIGINT}
   </update>
@@ -924,7 +954,9 @@
       match_video_filter = #{matchVideoFilter,jdbcType=VARCHAR},
       match_sort = #{matchSort,jdbcType=VARCHAR},
       scene_sum_rov = #{sceneSumRov,jdbcType=DOUBLE},
-      match_exposure_pv = #{matchExposurePv,jdbcType=BIGINT}
+      match_exposure_pv = #{matchExposurePv,jdbcType=BIGINT},
+      match_head_single_return_rate = #{matchHeadSingleReturnRate,jdbcType=DOUBLE},
+      match_head_distribution_single_return_rate = #{matchHeadDistributionSingleReturnRate,jdbcType=DOUBLE}
     where id = #{id,jdbcType=BIGINT}
   </update>
 </mapper>

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

@@ -8,6 +8,7 @@
       video_count, visit_uv, total_rov,
       match_video_id, match_config_code, match_score,
       match_sim, match_rov, match_exposure_pv,
+      match_head_single_return_rate, match_head_distribution_single_return_rate,
       match_text, match_status, online_action, match_experiment_id,
       demand_id, crowd_package, conversion_target,
       partner, account, scene_value,
@@ -23,6 +24,7 @@
       #{item.videoCount,jdbcType=INTEGER}, #{item.visitUv,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.matchExposurePv,jdbcType=BIGINT},
+      #{item.matchHeadSingleReturnRate,jdbcType=DOUBLE}, #{item.matchHeadDistributionSingleReturnRate,jdbcType=DOUBLE},
       #{item.matchText,jdbcType=VARCHAR}, #{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},