wangyunpeng пре 1 недеља
родитељ
комит
5376a3c4e3

+ 48 - 0
core/src/main/java/com/tzld/videoVector/job/ChannelDemandMatchJob.java

@@ -650,6 +650,12 @@ public class ChannelDemandMatchJob {
         sb.append(" AND 总访问uv > 2000 AND 全局分发pv > 10000 ");
         sb.append(" AND `merge二级品类` not in ('早中晚好','节日祝福') ");
         sb.append(" AND 维度 = '传播的头部' ");
+        // 空间维度过滤
+        List<String> dimensions = parseJsonArray(config.getFilterDimensions());
+        appendInCondition(sb, "维度", dimensions);
+        // 时间维度过滤
+        List<String> timeDimensions = parseJsonArray(config.getFilterTimeDimensions());
+        appendInCondition(sb, "驱动维度_时间", timeDimensions);
         // 渠道筛选
         if (StringUtils.hasText(config.getChannelName())) {
             sb.append(" AND 渠道类 = '").append(config.getChannelName().replace("'", "''")).append("'");
@@ -712,6 +718,12 @@ public class ChannelDemandMatchJob {
         if (minRov > 0) {
             sb.append(" AND 效率值 >= ").append(minRov);
         }
+        // 空间维度过滤
+        List<String> dimensions = parseJsonArray(config.getFilterDimensions());
+        appendInCondition(sb, "驱动维度_空间", dimensions);
+        // 时间维度过滤
+        List<String> timeDimensions = parseJsonArray(config.getFilterTimeDimensions());
+        appendInCondition(sb, "驱动维度_时间", timeDimensions);
         sb.append(";");
         return sb.toString();
     }
@@ -758,6 +770,42 @@ public class ChannelDemandMatchJob {
         return LocalDate.now().minusDays(1).format(DateTimeFormatter.ofPattern("yyyyMMdd"));
     }
 
+    // ========================== 过滤条件解析工具方法 ==========================
+
+    /**
+     * 解析配置中的字符串字段为字符串列表
+     * 解析JSON数组格式如 ["value1","value2"]
+     */
+    private List<String> parseJsonArray(String jsonStr) {
+        if (!StringUtils.hasText(jsonStr)) {
+            return Collections.emptyList();
+        }
+        try {
+            List<String> list = JSON.parseArray(jsonStr, String.class);
+            return list != null ? list : Collections.emptyList();
+        } catch (Exception e) {
+            log.warn("解析过滤条件JSON数组失败: {}", jsonStr, e);
+            return Collections.emptyList();
+        }
+    }
+
+    /**
+     * 构造ODPS SQL IN条件片段,如: AND 字段名 IN ('值1','值2')
+     */
+    private void appendInCondition(StringBuilder sb, String fieldName, List<String> values) {
+        if (CollectionUtils.isEmpty(values)) {
+            return;
+        }
+        sb.append(" AND ").append(fieldName).append(" IN (");
+        for (int i = 0; i < values.size(); i++) {
+            if (i > 0) {
+                sb.append(",");
+            }
+            sb.append("'").append(values.get(i).replace("'", "''")).append("'");
+        }
+        sb.append(")");
+    }
+
     // ========================== 安全取值工具方法 ==========================
 
     private Integer safeGetInt(Record record, String fieldName) {

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

@@ -114,6 +114,28 @@ public class ChannelDemandMatchConfig {
      */
     private String demandStrategy;
 
+    /**
+     * Database Column Remarks:
+     *   空间维度过滤条件,JSON数组格式,如["传播的头部","传播的腰部"],为空表示不限制
+     *
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database column channel_demand_match_config.filter_dimensions
+     *
+     * @mbg.generated
+     */
+    private String filterDimensions;
+
+    /**
+     * Database Column Remarks:
+     *   时间维度过滤条件,JSON数组格式,如["近7天","近30天"],为空表示不限制
+     *
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database column channel_demand_match_config.filter_time_dimensions
+     *
+     * @mbg.generated
+     */
+    private String filterTimeDimensions;
+
     /**
      * This method was generated by MyBatis Generator.
      * This method returns the value of the database column channel_demand_match_config.id
@@ -354,6 +376,54 @@ public class ChannelDemandMatchConfig {
         this.demandStrategy = demandStrategy;
     }
 
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method returns the value of the database column channel_demand_match_config.filter_dimensions
+     *
+     * @return the value of channel_demand_match_config.filter_dimensions
+     *
+     * @mbg.generated
+     */
+    public String getFilterDimensions() {
+        return filterDimensions;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method sets the value of the database column channel_demand_match_config.filter_dimensions
+     *
+     * @param filterDimensions the value for channel_demand_match_config.filter_dimensions
+     *
+     * @mbg.generated
+     */
+    public void setFilterDimensions(String filterDimensions) {
+        this.filterDimensions = filterDimensions;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method returns the value of the database column channel_demand_match_config.filter_time_dimensions
+     *
+     * @return the value of channel_demand_match_config.filter_time_dimensions
+     *
+     * @mbg.generated
+     */
+    public String getFilterTimeDimensions() {
+        return filterTimeDimensions;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method sets the value of the database column channel_demand_match_config.filter_time_dimensions
+     *
+     * @param filterTimeDimensions the value for channel_demand_match_config.filter_time_dimensions
+     *
+     * @mbg.generated
+     */
+    public void setFilterTimeDimensions(String filterTimeDimensions) {
+        this.filterTimeDimensions = filterTimeDimensions;
+    }
+
     /**
      * This method was generated by MyBatis Generator.
      * This method corresponds to the database table channel_demand_match_config
@@ -376,6 +446,8 @@ public class ChannelDemandMatchConfig {
         sb.append(", updateTime=").append(updateTime);
         sb.append(", onlineAction=").append(onlineAction);
         sb.append(", demandStrategy=").append(demandStrategy);
+        sb.append(", filterDimensions=").append(filterDimensions);
+        sb.append(", filterTimeDimensions=").append(filterTimeDimensions);
         sb.append("]");
         return sb.toString();
     }

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

@@ -824,6 +824,146 @@ public class ChannelDemandMatchConfigExample {
             addCriterion("demand_strategy not between", value1, value2, "demandStrategy");
             return (Criteria) this;
         }
+
+        public Criteria andFilterDimensionsIsNull() {
+            addCriterion("filter_dimensions is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andFilterDimensionsIsNotNull() {
+            addCriterion("filter_dimensions is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andFilterDimensionsEqualTo(String value) {
+            addCriterion("filter_dimensions =", value, "filterDimensions");
+            return (Criteria) this;
+        }
+
+        public Criteria andFilterDimensionsNotEqualTo(String value) {
+            addCriterion("filter_dimensions <>", value, "filterDimensions");
+            return (Criteria) this;
+        }
+
+        public Criteria andFilterDimensionsGreaterThan(String value) {
+            addCriterion("filter_dimensions >", value, "filterDimensions");
+            return (Criteria) this;
+        }
+
+        public Criteria andFilterDimensionsGreaterThanOrEqualTo(String value) {
+            addCriterion("filter_dimensions >=", value, "filterDimensions");
+            return (Criteria) this;
+        }
+
+        public Criteria andFilterDimensionsLessThan(String value) {
+            addCriterion("filter_dimensions <", value, "filterDimensions");
+            return (Criteria) this;
+        }
+
+        public Criteria andFilterDimensionsLessThanOrEqualTo(String value) {
+            addCriterion("filter_dimensions <=", value, "filterDimensions");
+            return (Criteria) this;
+        }
+
+        public Criteria andFilterDimensionsLike(String value) {
+            addCriterion("filter_dimensions like", value, "filterDimensions");
+            return (Criteria) this;
+        }
+
+        public Criteria andFilterDimensionsNotLike(String value) {
+            addCriterion("filter_dimensions not like", value, "filterDimensions");
+            return (Criteria) this;
+        }
+
+        public Criteria andFilterDimensionsIn(List<String> values) {
+            addCriterion("filter_dimensions in", values, "filterDimensions");
+            return (Criteria) this;
+        }
+
+        public Criteria andFilterDimensionsNotIn(List<String> values) {
+            addCriterion("filter_dimensions not in", values, "filterDimensions");
+            return (Criteria) this;
+        }
+
+        public Criteria andFilterDimensionsBetween(String value1, String value2) {
+            addCriterion("filter_dimensions between", value1, value2, "filterDimensions");
+            return (Criteria) this;
+        }
+
+        public Criteria andFilterDimensionsNotBetween(String value1, String value2) {
+            addCriterion("filter_dimensions not between", value1, value2, "filterDimensions");
+            return (Criteria) this;
+        }
+
+        public Criteria andFilterTimeDimensionsIsNull() {
+            addCriterion("filter_time_dimensions is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andFilterTimeDimensionsIsNotNull() {
+            addCriterion("filter_time_dimensions is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andFilterTimeDimensionsEqualTo(String value) {
+            addCriterion("filter_time_dimensions =", value, "filterTimeDimensions");
+            return (Criteria) this;
+        }
+
+        public Criteria andFilterTimeDimensionsNotEqualTo(String value) {
+            addCriterion("filter_time_dimensions <>", value, "filterTimeDimensions");
+            return (Criteria) this;
+        }
+
+        public Criteria andFilterTimeDimensionsGreaterThan(String value) {
+            addCriterion("filter_time_dimensions >", value, "filterTimeDimensions");
+            return (Criteria) this;
+        }
+
+        public Criteria andFilterTimeDimensionsGreaterThanOrEqualTo(String value) {
+            addCriterion("filter_time_dimensions >=", value, "filterTimeDimensions");
+            return (Criteria) this;
+        }
+
+        public Criteria andFilterTimeDimensionsLessThan(String value) {
+            addCriterion("filter_time_dimensions <", value, "filterTimeDimensions");
+            return (Criteria) this;
+        }
+
+        public Criteria andFilterTimeDimensionsLessThanOrEqualTo(String value) {
+            addCriterion("filter_time_dimensions <=", value, "filterTimeDimensions");
+            return (Criteria) this;
+        }
+
+        public Criteria andFilterTimeDimensionsLike(String value) {
+            addCriterion("filter_time_dimensions like", value, "filterTimeDimensions");
+            return (Criteria) this;
+        }
+
+        public Criteria andFilterTimeDimensionsNotLike(String value) {
+            addCriterion("filter_time_dimensions not like", value, "filterTimeDimensions");
+            return (Criteria) this;
+        }
+
+        public Criteria andFilterTimeDimensionsIn(List<String> values) {
+            addCriterion("filter_time_dimensions in", values, "filterTimeDimensions");
+            return (Criteria) this;
+        }
+
+        public Criteria andFilterTimeDimensionsNotIn(List<String> values) {
+            addCriterion("filter_time_dimensions not in", values, "filterTimeDimensions");
+            return (Criteria) this;
+        }
+
+        public Criteria andFilterTimeDimensionsBetween(String value1, String value2) {
+            addCriterion("filter_time_dimensions between", value1, value2, "filterTimeDimensions");
+            return (Criteria) this;
+        }
+
+        public Criteria andFilterTimeDimensionsNotBetween(String value1, String value2) {
+            addCriterion("filter_time_dimensions not between", value1, value2, "filterTimeDimensions");
+            return (Criteria) this;
+        }
     }
 
     /**

+ 37 - 7
core/src/main/resources/mapper/pgVector/ChannelDemandMatchConfigMapper.xml

@@ -16,6 +16,8 @@
     <result column="update_time" jdbcType="TIMESTAMP" property="updateTime" />
     <result column="online_action" jdbcType="VARCHAR" property="onlineAction" />
     <result column="demand_strategy" jdbcType="VARCHAR" property="demandStrategy" />
+    <result column="filter_dimensions" jdbcType="VARCHAR" property="filterDimensions" />
+    <result column="filter_time_dimensions" jdbcType="VARCHAR" property="filterTimeDimensions" />
   </resultMap>
   <sql id="Example_Where_Clause">
     <!--
@@ -89,7 +91,7 @@
       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, online_action, 
-    demand_strategy
+    demand_strategy, filter_dimensions, filter_time_dimensions
   </sql>
   <select id="selectByExample" parameterType="com.tzld.videoVector.model.po.pgVector.ChannelDemandMatchConfigExample" resultMap="BaseResultMap">
     <!--
@@ -144,12 +146,12 @@
     -->
     insert into channel_demand_match_config (channel_name, min_uv, min_rov, 
       top_n, "status", create_time, 
-      update_time, online_action, demand_strategy
-      )
+      update_time, online_action, demand_strategy, 
+      filter_dimensions, filter_time_dimensions)
     values (#{channelName,jdbcType=VARCHAR}, #{minUv,jdbcType=INTEGER}, #{minRov,jdbcType=DOUBLE}, 
       #{topN,jdbcType=INTEGER}, #{status,jdbcType=SMALLINT}, #{createTime,jdbcType=TIMESTAMP}, 
-      #{updateTime,jdbcType=TIMESTAMP}, #{onlineAction,jdbcType=VARCHAR}, #{demandStrategy,jdbcType=VARCHAR}
-      )
+      #{updateTime,jdbcType=TIMESTAMP}, #{onlineAction,jdbcType=VARCHAR}, #{demandStrategy,jdbcType=VARCHAR}, 
+      #{filterDimensions,jdbcType=VARCHAR}, #{filterTimeDimensions,jdbcType=VARCHAR})
   </insert>
   <insert id="insertSelective" keyColumn="id" keyProperty="id" parameterType="com.tzld.videoVector.model.po.pgVector.ChannelDemandMatchConfig" useGeneratedKeys="true">
     <!--
@@ -185,6 +187,12 @@
       <if test="demandStrategy != null">
         demand_strategy,
       </if>
+      <if test="filterDimensions != null">
+        filter_dimensions,
+      </if>
+      <if test="filterTimeDimensions != null">
+        filter_time_dimensions,
+      </if>
     </trim>
     <trim prefix="values (" suffix=")" suffixOverrides=",">
       <if test="channelName != null">
@@ -214,6 +222,12 @@
       <if test="demandStrategy != null">
         #{demandStrategy,jdbcType=VARCHAR},
       </if>
+      <if test="filterDimensions != null">
+        #{filterDimensions,jdbcType=VARCHAR},
+      </if>
+      <if test="filterTimeDimensions != null">
+        #{filterTimeDimensions,jdbcType=VARCHAR},
+      </if>
     </trim>
   </insert>
   <select id="countByExample" parameterType="com.tzld.videoVector.model.po.pgVector.ChannelDemandMatchConfigExample" resultType="java.lang.Long">
@@ -263,6 +277,12 @@
       <if test="record.demandStrategy != null">
         demand_strategy = #{record.demandStrategy,jdbcType=VARCHAR},
       </if>
+      <if test="record.filterDimensions != null">
+        filter_dimensions = #{record.filterDimensions,jdbcType=VARCHAR},
+      </if>
+      <if test="record.filterTimeDimensions != null">
+        filter_time_dimensions = #{record.filterTimeDimensions,jdbcType=VARCHAR},
+      </if>
     </set>
     <if test="_parameter != null">
       <include refid="Update_By_Example_Where_Clause" />
@@ -283,7 +303,9 @@
       create_time = #{record.createTime,jdbcType=TIMESTAMP},
       update_time = #{record.updateTime,jdbcType=TIMESTAMP},
       online_action = #{record.onlineAction,jdbcType=VARCHAR},
-      demand_strategy = #{record.demandStrategy,jdbcType=VARCHAR}
+      demand_strategy = #{record.demandStrategy,jdbcType=VARCHAR},
+      filter_dimensions = #{record.filterDimensions,jdbcType=VARCHAR},
+      filter_time_dimensions = #{record.filterTimeDimensions,jdbcType=VARCHAR}
     <if test="_parameter != null">
       <include refid="Update_By_Example_Where_Clause" />
     </if>
@@ -322,6 +344,12 @@
       <if test="demandStrategy != null">
         demand_strategy = #{demandStrategy,jdbcType=VARCHAR},
       </if>
+      <if test="filterDimensions != null">
+        filter_dimensions = #{filterDimensions,jdbcType=VARCHAR},
+      </if>
+      <if test="filterTimeDimensions != null">
+        filter_time_dimensions = #{filterTimeDimensions,jdbcType=VARCHAR},
+      </if>
     </set>
     where id = #{id,jdbcType=BIGINT}
   </update>
@@ -339,7 +367,9 @@
       create_time = #{createTime,jdbcType=TIMESTAMP},
       update_time = #{updateTime,jdbcType=TIMESTAMP},
       online_action = #{onlineAction,jdbcType=VARCHAR},
-      demand_strategy = #{demandStrategy,jdbcType=VARCHAR}
+      demand_strategy = #{demandStrategy,jdbcType=VARCHAR},
+      filter_dimensions = #{filterDimensions,jdbcType=VARCHAR},
+      filter_time_dimensions = #{filterTimeDimensions,jdbcType=VARCHAR}
     where id = #{id,jdbcType=BIGINT}
   </update>
 </mapper>