Showing
7 changed files
with
135 additions
and
44 deletions
@@ -48,22 +48,26 @@ public class SortBrandRecallRequestBuilder { | @@ -48,22 +48,26 @@ public class SortBrandRecallRequestBuilder { | ||
48 | if (productCountConfig.getNewShelve() > 0) { | 48 | if (productCountConfig.getNewShelve() > 0) { |
49 | requests.add(this.buildSortBrandNewShelveRequest(paramQueryFilter, sortBrand, productCountConfig.getNewShelve(), sortBrandType)); | 49 | requests.add(this.buildSortBrandNewShelveRequest(paramQueryFilter, sortBrand, productCountConfig.getNewShelve(), sortBrandType)); |
50 | } | 50 | } |
51 | - // 2) 人气 | ||
52 | - if (productCountConfig.getHeatValue() > 0) { | ||
53 | - requests.add(this.buildSortBrandHeatValueRequest(paramQueryFilter, sortBrand, productCountConfig.getHeatValue(), sortBrandType)); | 51 | + // 2) 新开促销 |
52 | + if (productCountConfig.getPromotion() > 0) { | ||
53 | + requests.add(this.buildSortBrandPromotionRequest(paramQueryFilter, sortBrand, productCountConfig.getPromotion(), sortBrandType)); | ||
54 | } | 54 | } |
55 | // 3) 新降价 | 55 | // 3) 新降价 |
56 | if (productCountConfig.getReducePrice() > 0) { | 56 | if (productCountConfig.getReducePrice() > 0) { |
57 | requests.add(this.buildSortBrandReducePriceRequest(paramQueryFilter, sortBrand, productCountConfig.getReducePrice(), sortBrandType)); | 57 | requests.add(this.buildSortBrandReducePriceRequest(paramQueryFilter, sortBrand, productCountConfig.getReducePrice(), sortBrandType)); |
58 | } | 58 | } |
59 | - // 4) 新开促销 | ||
60 | - if (productCountConfig.getPromotion() > 0) { | ||
61 | - requests.add(this.buildSortBrandPromotionRequest(paramQueryFilter, sortBrand, productCountConfig.getPromotion(), sortBrandType)); | ||
62 | - } | ||
63 | - // 5) 转化率 | 59 | + // 4) 转化率 |
64 | if (productCountConfig.getCtrValue() > 0) { | 60 | if (productCountConfig.getCtrValue() > 0) { |
65 | requests.add(this.buildSortBrandCtrValueRequest(paramQueryFilter, sortBrand, productCountConfig.getCtrValue(), sortBrandType)); | 61 | requests.add(this.buildSortBrandCtrValueRequest(paramQueryFilter, sortBrand, productCountConfig.getCtrValue(), sortBrandType)); |
66 | } | 62 | } |
63 | + // 5) 人气 | ||
64 | + if (productCountConfig.getHeatValue() > 0) { | ||
65 | + requests.add(this.buildSortBrandHeatValueRequest(paramQueryFilter, sortBrand, productCountConfig.getHeatValue(), sortBrandType)); | ||
66 | + } | ||
67 | + // 6) 随机 | ||
68 | + if (productCountConfig.getRandom() > 0) { | ||
69 | + requests.add(this.buildSortBrandRandomRequest(paramQueryFilter, sortBrand, productCountConfig.getRandom(), sortBrandType)); | ||
70 | + } | ||
67 | } | 71 | } |
68 | return requests; | 72 | return requests; |
69 | } | 73 | } |
@@ -80,67 +84,80 @@ public class SortBrandRecallRequestBuilder { | @@ -80,67 +84,80 @@ public class SortBrandRecallRequestBuilder { | ||
80 | } | 84 | } |
81 | 85 | ||
82 | /** | 86 | /** |
83 | - * 【按品类+品牌召回人气商品】 | 87 | + * 【按品类+品牌召回新品】 |
84 | * | 88 | * |
85 | * @param paramQueryFilter | 89 | * @param paramQueryFilter |
86 | * @param sortBrand | 90 | * @param sortBrand |
87 | * @param size | 91 | * @param size |
88 | * @return | 92 | * @return |
89 | */ | 93 | */ |
90 | - private RecallRequest buildSortBrandHeatValueRequest(ParamQueryFilter paramQueryFilter, SortBrand sortBrand, int size, SortBrandType sortBrandType) { | ||
91 | - IStrategy strategy = new SortBrandHeatValueStrategy(sortBrand, size, sortBrandType); | 94 | + private RecallRequest buildSortBrandNewShelveRequest(ParamQueryFilter paramQueryFilter, SortBrand sortBrand, int size, SortBrandType sortBrandType) { |
95 | + IStrategy strategy = new SortBrandNewShelveStrategy(sortBrand, size, sortBrandType); | ||
92 | return new RecallRequest(paramQueryFilter, strategy); | 96 | return new RecallRequest(paramQueryFilter, strategy); |
93 | } | 97 | } |
94 | 98 | ||
95 | /** | 99 | /** |
96 | - * 【按品类+品牌召回转化率高的商品】 | 100 | + * 【按品类+品牌召回新开促销】 |
97 | * | 101 | * |
98 | * @param paramQueryFilter | 102 | * @param paramQueryFilter |
99 | * @param sortBrand | 103 | * @param sortBrand |
100 | * @param size | 104 | * @param size |
101 | * @return | 105 | * @return |
102 | */ | 106 | */ |
103 | - private RecallRequest buildSortBrandCtrValueRequest(ParamQueryFilter paramQueryFilter, SortBrand sortBrand, int size, SortBrandType sortBrandType) { | ||
104 | - IStrategy strategy = new SortBrandCtrValueStrategy(sortBrand, size, sortBrandType); | 107 | + private RecallRequest buildSortBrandPromotionRequest(ParamQueryFilter paramQueryFilter, SortBrand sortBrand, int size, SortBrandType sortBrandType) { |
108 | + IStrategy strategy = new SortBrandPromotionStrategy(sortBrand, size, sortBrandType); | ||
105 | return new RecallRequest(paramQueryFilter, strategy); | 109 | return new RecallRequest(paramQueryFilter, strategy); |
106 | } | 110 | } |
107 | 111 | ||
108 | /** | 112 | /** |
109 | - * 【按品类+品牌召回新品】 | 113 | + * 【按品类+品牌召回新降价】 |
110 | * | 114 | * |
111 | * @param paramQueryFilter | 115 | * @param paramQueryFilter |
112 | * @param sortBrand | 116 | * @param sortBrand |
113 | * @param size | 117 | * @param size |
114 | * @return | 118 | * @return |
115 | */ | 119 | */ |
116 | - private RecallRequest buildSortBrandNewShelveRequest(ParamQueryFilter paramQueryFilter, SortBrand sortBrand, int size, SortBrandType sortBrandType) { | ||
117 | - IStrategy strategy = new SortBrandNewShelveStrategy(sortBrand, size, sortBrandType); | 120 | + private RecallRequest buildSortBrandReducePriceRequest(ParamQueryFilter paramQueryFilter, SortBrand sortBrand, int size, SortBrandType sortBrandType) { |
121 | + IStrategy strategy = new SortBrandReducePriceStrategy(sortBrand, size, sortBrandType); | ||
118 | return new RecallRequest(paramQueryFilter, strategy); | 122 | return new RecallRequest(paramQueryFilter, strategy); |
119 | } | 123 | } |
120 | 124 | ||
121 | /** | 125 | /** |
122 | - * 【按品类+品牌召回新降价】 | 126 | + * 【按品类+品牌召回转化率高的商品】 |
123 | * | 127 | * |
124 | * @param paramQueryFilter | 128 | * @param paramQueryFilter |
125 | * @param sortBrand | 129 | * @param sortBrand |
126 | * @param size | 130 | * @param size |
127 | * @return | 131 | * @return |
128 | */ | 132 | */ |
129 | - private RecallRequest buildSortBrandReducePriceRequest(ParamQueryFilter paramQueryFilter, SortBrand sortBrand, int size, SortBrandType sortBrandType) { | ||
130 | - IStrategy strategy = new SortBrandReducePriceStrategy(sortBrand, size, sortBrandType); | 133 | + private RecallRequest buildSortBrandCtrValueRequest(ParamQueryFilter paramQueryFilter, SortBrand sortBrand, int size, SortBrandType sortBrandType) { |
134 | + IStrategy strategy = new SortBrandCtrValueStrategy(sortBrand, size, sortBrandType); | ||
131 | return new RecallRequest(paramQueryFilter, strategy); | 135 | return new RecallRequest(paramQueryFilter, strategy); |
132 | } | 136 | } |
133 | 137 | ||
134 | /** | 138 | /** |
135 | - * 【按品类+品牌召回新开促销】 | 139 | + * 【按品类+品牌召回人气商品】 |
136 | * | 140 | * |
137 | * @param paramQueryFilter | 141 | * @param paramQueryFilter |
138 | * @param sortBrand | 142 | * @param sortBrand |
139 | * @param size | 143 | * @param size |
140 | * @return | 144 | * @return |
141 | */ | 145 | */ |
142 | - private RecallRequest buildSortBrandPromotionRequest(ParamQueryFilter paramQueryFilter, SortBrand sortBrand, int size, SortBrandType sortBrandType) { | ||
143 | - IStrategy strategy = new SortBrandPromotionStrategy(sortBrand, size, sortBrandType); | 146 | + private RecallRequest buildSortBrandHeatValueRequest(ParamQueryFilter paramQueryFilter, SortBrand sortBrand, int size, SortBrandType sortBrandType) { |
147 | + IStrategy strategy = new SortBrandHeatValueStrategy(sortBrand, size, sortBrandType); | ||
148 | + return new RecallRequest(paramQueryFilter, strategy); | ||
149 | + } | ||
150 | + | ||
151 | + /** | ||
152 | + * 【按品类+品牌随机召回】 | ||
153 | + * | ||
154 | + * @param paramQueryFilter | ||
155 | + * @param sortBrand | ||
156 | + * @param size | ||
157 | + * @return | ||
158 | + */ | ||
159 | + private RecallRequest buildSortBrandRandomRequest(ParamQueryFilter paramQueryFilter, SortBrand sortBrand, int size, SortBrandType sortBrandType) { | ||
160 | + IStrategy strategy = new SortBrandRandomStrategy(sortBrand, size, sortBrandType); | ||
144 | return new RecallRequest(paramQueryFilter, strategy); | 161 | return new RecallRequest(paramQueryFilter, strategy); |
145 | } | 162 | } |
146 | 163 |
@@ -156,7 +156,7 @@ public class ExtendFilterHelper { | @@ -156,7 +156,7 @@ public class ExtendFilterHelper { | ||
156 | } | 156 | } |
157 | 157 | ||
158 | /** | 158 | /** |
159 | - * 【品类+品牌】人气 | 159 | + * 【品类+品牌】点击率 |
160 | * | 160 | * |
161 | * @return | 161 | * @return |
162 | */ | 162 | */ |
@@ -169,6 +169,20 @@ public class ExtendFilterHelper { | @@ -169,6 +169,20 @@ public class ExtendFilterHelper { | ||
169 | return filter; | 169 | return filter; |
170 | } | 170 | } |
171 | 171 | ||
172 | + /** | ||
173 | + * 【品类+品牌】随机 | ||
174 | + * | ||
175 | + * @return | ||
176 | + */ | ||
177 | + public static QueryBuilder sortBrandRandom(SortBrand sortBrand) { | ||
178 | + BoolQueryBuilder filter = QueryBuilders.boolQuery(); | ||
179 | + //must | ||
180 | + filter.must(sortBrandIdFilter(sortBrand)); | ||
181 | + //must not | ||
182 | + filter.mustNot(notRecallFilter()); | ||
183 | + return filter; | ||
184 | + } | ||
185 | + | ||
172 | 186 | ||
173 | private static QueryBuilder sortBrandIdFilter(SortBrand sortBrand) { | 187 | private static QueryBuilder sortBrandIdFilter(SortBrand sortBrand) { |
174 | BoolQueryBuilder filter = QueryBuilders.boolQuery(); | 188 | BoolQueryBuilder filter = QueryBuilders.boolQuery(); |
@@ -9,23 +9,26 @@ public enum StrategyEnum { | @@ -9,23 +9,26 @@ public enum StrategyEnum { | ||
9 | ADD_FLOW(106),//流量补偿 | 9 | ADD_FLOW(106),//流量补偿 |
10 | NEW_SHOP(105),//新开店铺 | 10 | NEW_SHOP(105),//新开店铺 |
11 | 11 | ||
12 | - REC_S_B_HEAT_VALUE(80),//实时的品牌+品类的人气值 | ||
13 | - REC_S_B_CTR_VALUE(81),//实时的品牌+品类的转化率 | ||
14 | - REC_S_B_REDUCE_PRICE(82),//实时的品牌+品类的最新降价 | ||
15 | - REC_S_B_PROMOTION(83),//实时的品牌+品类的新开促销 | ||
16 | - REC_S_B_NEW(84),//实时的品牌+品类的新品 | ||
17 | - | ||
18 | - VEC_RNN_S_B_HEAT_VALUE(60),//向量预测的品牌+品类的人气值 | ||
19 | - VEC_RNN_S_B_CTR_VALUE(61),//实时的品牌+品类的转化率 | ||
20 | - VEC_RNN_S_B_REDUCE_PRICE(62),//向量预测的品牌+品类的最新降价 | ||
21 | - VEC_RNN_S_B_PROMOTION(63),//向量预测的品牌+品类的新开促销 | ||
22 | - VEC_RNN_S_B_NEW(64),//向量预测的品牌+品类的新品 | ||
23 | - | ||
24 | - VEC_W2V_S_B_HEAT_VALUE(50),//向量预测的品牌+品类的人气值 | ||
25 | - VEC_W2V_S_B_CTR_VALUE(51),//实时的品牌+品类的转化率 | ||
26 | - VEC_W2V_S_B_REDUCE_PRICE(52),//向量预测的品牌+品类的最新降价 | ||
27 | - VEC_W2V_S_B_PROMOTION(53),//向量预测的品牌+品类的新开促销 | ||
28 | - VEC_W2V_S_B_NEW(54),//向量预测的品牌+品类的新品 | 12 | + REC_S_B_NEW(89),//实时的品牌+品类的新品 |
13 | + REC_S_B_PROMOTION(88),//实时的品牌+品类的新开促销 | ||
14 | + REC_S_B_REDUCE_PRICE(87),//实时的品牌+品类的最新降价 | ||
15 | + REC_S_B_CTR_VALUE(86),//实时的品牌+品类的转化率 | ||
16 | + REC_S_B_HEAT_VALUE(85),//实时的品牌+品类的人气值 | ||
17 | + REC_S_B_RANDOM(84),//实时的品牌+品类的随机 | ||
18 | + | ||
19 | + VEC_RNN_S_B_NEW(79),//向量预测的品牌+品类的新品 | ||
20 | + VEC_RNN_S_B_PROMOTION(78),//向量预测的品牌+品类的新开促销 | ||
21 | + VEC_RNN_S_B_REDUCE_PRICE(77),//向量预测的品牌+品类的最新降价 | ||
22 | + VEC_RNN_S_B_CTR_VALUE(76),//实时的品牌+品类的转化率 | ||
23 | + VEC_RNN_S_B_HEAT_VALUE(75),//向量预测的品牌+品类的人气值 | ||
24 | + VEC_RNN_S_B_RANDOM(74),//向量预测的品牌+品类的随机 | ||
25 | + | ||
26 | + VEC_W2V_S_B_NEW(69),//向量预测的品牌+品类的新品 | ||
27 | + VEC_W2V_S_B_PROMOTION(68),//向量预测的品牌+品类的新开促销 | ||
28 | + VEC_W2V_S_B_REDUCE_PRICE(67),//向量预测的品牌+品类的最新降价 | ||
29 | + VEC_W2V_S_B_CTR_VALUE(66),//实时的品牌+品类的转化率 | ||
30 | + VEC_W2V_S_B_HEAT_VALUE(65),//向量预测的品牌+品类的人气值 | ||
31 | + VEC_W2V_S_B_RANDOM(64),//向量预测的品牌+品类的随机 | ||
29 | 32 | ||
30 | COMMON_CTR_VALUE(2),//页面兜底召回-包含个性化【随机200取40】 | 33 | COMMON_CTR_VALUE(2),//页面兜底召回-包含个性化【随机200取40】 |
31 | COMMON_HEAT_VALUE(1),//页面兜底召回-包含个性化【随机200取40】 | 34 | COMMON_HEAT_VALUE(1),//页面兜底召回-包含个性化【随机200取40】 |
@@ -102,4 +102,17 @@ public abstract class SortBrandAbstractStrategy implements IStrategy { | @@ -102,4 +102,17 @@ public abstract class SortBrandAbstractStrategy implements IStrategy { | ||
102 | } | 102 | } |
103 | } | 103 | } |
104 | 104 | ||
105 | + public StrategyEnum randomStrategyEnum(SortBrandType sortBrandType) { | ||
106 | + switch (sortBrandType) { | ||
107 | + case REC_SORT_BRAND: | ||
108 | + return StrategyEnum.REC_S_B_RANDOM; | ||
109 | + case VEC_RNN_SORT_BRAND: | ||
110 | + return StrategyEnum.VEC_RNN_S_B_RANDOM; | ||
111 | + case VEC_W2V_SORT_BRAND: | ||
112 | + return StrategyEnum.VEC_W2V_S_B_RANDOM; | ||
113 | + default: | ||
114 | + return null; | ||
115 | + } | ||
116 | + } | ||
117 | + | ||
105 | } | 118 | } |
service/src/main/java/com/yoho/search/recall/beans/strategy/impls/SortBrandRandomStrategy.java
0 → 100644
1 | +package com.yoho.search.recall.beans.strategy.impls; | ||
2 | + | ||
3 | +import com.yoho.search.core.personalized.models.SortBrand; | ||
4 | +import com.yoho.search.recall.beans.helper.ExtendFilterHelper; | ||
5 | +import com.yoho.search.recall.beans.helper.SortBuilderHelper; | ||
6 | +import com.yoho.search.recall.beans.strategy.SortBrandType; | ||
7 | +import com.yoho.search.recall.beans.strategy.StrategyEnum; | ||
8 | +import org.elasticsearch.index.query.QueryBuilder; | ||
9 | +import org.elasticsearch.search.sort.SortBuilder; | ||
10 | + | ||
11 | +public class SortBrandRandomStrategy extends SortBrandAbstractStrategy { | ||
12 | + | ||
13 | + public SortBrandRandomStrategy(SortBrand sortBrand, int size, SortBrandType sortBrandType) { | ||
14 | + super(sortBrand,size,sortBrandType); | ||
15 | + } | ||
16 | + | ||
17 | + @Override | ||
18 | + public StrategyEnum strategtEnum() { | ||
19 | + return randomStrategyEnum(this.sortBrandType); | ||
20 | + } | ||
21 | + | ||
22 | + @Override | ||
23 | + public QueryBuilder extendFilter() { | ||
24 | + return ExtendFilterHelper.sortBrandRandom(sortBrand); | ||
25 | + } | ||
26 | + | ||
27 | + @Override | ||
28 | + public SortBuilder<?> sortBuilder() { | ||
29 | + return SortBuilderHelper.getRandomSort(); | ||
30 | + } | ||
31 | + | ||
32 | +} |
@@ -7,6 +7,7 @@ public class ProductCountConfig { | @@ -7,6 +7,7 @@ public class ProductCountConfig { | ||
7 | private int reducePrice; | 7 | private int reducePrice; |
8 | private int ctrValue; | 8 | private int ctrValue; |
9 | private int heatValue; | 9 | private int heatValue; |
10 | + private int random; | ||
10 | 11 | ||
11 | public int getNewShelve() { | 12 | public int getNewShelve() { |
12 | return newShelve; | 13 | return newShelve; |
@@ -47,4 +48,12 @@ public class ProductCountConfig { | @@ -47,4 +48,12 @@ public class ProductCountConfig { | ||
47 | public void setHeatValue(int heatValue) { | 48 | public void setHeatValue(int heatValue) { |
48 | this.heatValue = heatValue; | 49 | this.heatValue = heatValue; |
49 | } | 50 | } |
51 | + | ||
52 | + public int getRandom() { | ||
53 | + return random; | ||
54 | + } | ||
55 | + | ||
56 | + public void setRandom(int random) { | ||
57 | + this.random = random; | ||
58 | + } | ||
50 | } | 59 | } |
@@ -16,6 +16,7 @@ public class ProductCountConfigService { | @@ -16,6 +16,7 @@ public class ProductCountConfigService { | ||
16 | private static int DEFAULT_REDUCE_PRICE = 6; | 16 | private static int DEFAULT_REDUCE_PRICE = 6; |
17 | private static int DEFAULT_CTR_VALUE = 6; | 17 | private static int DEFAULT_CTR_VALUE = 6; |
18 | private static int DEFAULT_HEAT_VALUE = 6; | 18 | private static int DEFAULT_HEAT_VALUE = 6; |
19 | + private static int DEFAULT_RANDOM = 0; | ||
19 | 20 | ||
20 | private Map<Integer, ProductCountConfig> middleSortConfig = new HashMap<>(); | 21 | private Map<Integer, ProductCountConfig> middleSortConfig = new HashMap<>(); |
21 | private Map<Integer, ProductCountConfig> brandConfig = new HashMap<>(); | 22 | private Map<Integer, ProductCountConfig> brandConfig = new HashMap<>(); |
@@ -41,7 +42,7 @@ public class ProductCountConfigService { | @@ -41,7 +42,7 @@ public class ProductCountConfigService { | ||
41 | if (pageProductCountConfig != null) { | 42 | if (pageProductCountConfig != null) { |
42 | return pageProductCountConfig; | 43 | return pageProductCountConfig; |
43 | } | 44 | } |
44 | - return genProductCountConfig(DEFAULT_NEW_SHELVE, DEFAULT_PROMOTION, DEFAULT_REDUCE_PRICE, DEFAULT_CTR_VALUE, DEFAULT_HEAT_VALUE); | 45 | + return genProductCountConfig(DEFAULT_NEW_SHELVE, DEFAULT_PROMOTION, DEFAULT_REDUCE_PRICE, DEFAULT_CTR_VALUE, DEFAULT_HEAT_VALUE,DEFAULT_RANDOM); |
45 | } | 46 | } |
46 | 47 | ||
47 | private ProductCountConfig genProductCountConfigByCompare(ProductCountConfig productCountConfig1, ProductCountConfig productCountConfig2) { | 48 | private ProductCountConfig genProductCountConfigByCompare(ProductCountConfig productCountConfig1, ProductCountConfig productCountConfig2) { |
@@ -50,16 +51,18 @@ public class ProductCountConfigService { | @@ -50,16 +51,18 @@ public class ProductCountConfigService { | ||
50 | int reducePrice = Math.min(productCountConfig1.getReducePrice(), productCountConfig2.getReducePrice()); | 51 | int reducePrice = Math.min(productCountConfig1.getReducePrice(), productCountConfig2.getReducePrice()); |
51 | int ctrValue = Math.min(productCountConfig1.getCtrValue(), productCountConfig2.getCtrValue()); | 52 | int ctrValue = Math.min(productCountConfig1.getCtrValue(), productCountConfig2.getCtrValue()); |
52 | int heatValue = Math.min(productCountConfig1.getHeatValue(), productCountConfig2.getHeatValue()); | 53 | int heatValue = Math.min(productCountConfig1.getHeatValue(), productCountConfig2.getHeatValue()); |
53 | - return genProductCountConfig(newShelve, promotion, reducePrice, ctrValue, heatValue); | 54 | + int random = Math.min(productCountConfig1.getHeatValue(), productCountConfig2.getHeatValue()); |
55 | + return genProductCountConfig(newShelve, promotion, reducePrice, ctrValue, heatValue,random); | ||
54 | } | 56 | } |
55 | 57 | ||
56 | - private ProductCountConfig genProductCountConfig(int newShelve, int promotion, int reducePrice, int ctrValue, int heatValue) { | 58 | + private ProductCountConfig genProductCountConfig(int newShelve, int promotion, int reducePrice, int ctrValue, int heatValue,int random) { |
57 | ProductCountConfig productCountConfig = new ProductCountConfig(); | 59 | ProductCountConfig productCountConfig = new ProductCountConfig(); |
58 | productCountConfig.setNewShelve(newShelve); | 60 | productCountConfig.setNewShelve(newShelve); |
59 | productCountConfig.setPromotion(promotion); | 61 | productCountConfig.setPromotion(promotion); |
60 | productCountConfig.setReducePrice(reducePrice); | 62 | productCountConfig.setReducePrice(reducePrice); |
61 | productCountConfig.setCtrValue(ctrValue); | 63 | productCountConfig.setCtrValue(ctrValue); |
62 | productCountConfig.setHeatValue(heatValue); | 64 | productCountConfig.setHeatValue(heatValue); |
65 | + productCountConfig.setRandom(random); | ||
63 | return productCountConfig; | 66 | return productCountConfig; |
64 | } | 67 | } |
65 | } | 68 | } |
-
Please register or login to post a comment