Authored by hugufei

获取默认图的逻辑优化

1 -package com.yoho.search.dal.model;  
2 -  
3 -  
4 -/**  
5 - * Created by wangnan on 2016/6/30.  
6 - */  
7 -public class GoodsCoverImage{  
8 -  
9 - private Integer goodsId;  
10 - private String cover_1;  
11 - private String cover_2;  
12 -  
13 - public GoodsCoverImage() {  
14 - }  
15 -  
16 - public GoodsCoverImage(Integer goodsId) {  
17 - this.goodsId = goodsId;  
18 - }  
19 -  
20 - public Integer getGoodsId() {  
21 - return goodsId;  
22 - }  
23 -  
24 - public void setGoodsId(Integer goodsId) {  
25 - this.goodsId = goodsId;  
26 - }  
27 -  
28 - public String getCover_2() {  
29 - return cover_2;  
30 - }  
31 -  
32 - public void setCover_2(String cover_2) {  
33 - this.cover_2 = cover_2;  
34 - }  
35 -  
36 - public String getCover_1() {  
37 - return cover_1;  
38 - }  
39 -  
40 - public void setCover_1(String cover_1) {  
41 - this.cover_1 = cover_1;  
42 - }  
43 -}  
  1 +package com.yoho.search.dal.model;
  2 +
  3 +
  4 +import lombok.Data;
  5 +
  6 +@Data
  7 +public class GoodsImageInfo {
  8 +
  9 + private Integer goodsId;
  10 + private String image_url;
  11 + private String cover_1;
  12 + private String cover_2;
  13 +
  14 + public GoodsImageInfo(Integer goodsId) {
  15 + this.goodsId = goodsId;
  16 + }
  17 +}
1 package com.yoho.search.consumer.service.logicService; 1 package com.yoho.search.consumer.service.logicService;
2 2
3 -import com.yoho.search.dal.model.GoodsCoverImage; 3 +import com.yoho.search.dal.model.GoodsImageInfo;
4 import com.yoho.search.dal.model.GoodsImages; 4 import com.yoho.search.dal.model.GoodsImages;
5 import org.apache.commons.lang3.StringUtils; 5 import org.apache.commons.lang3.StringUtils;
6 import org.springframework.stereotype.Component; 6 import org.springframework.stereotype.Component;
@@ -13,34 +13,42 @@ import java.util.stream.Collectors; @@ -13,34 +13,42 @@ import java.util.stream.Collectors;
13 @Component 13 @Component
14 public class GoodsRelatedImageLogicService { 14 public class GoodsRelatedImageLogicService {
15 15
16 - /**  
17 - * 构造DefaultImages  
18 - *  
19 - * @param goodsImages  
20 - * @return  
21 - */  
22 - public Map<Integer, String> buildProductDefaultImage(List<GoodsImages> goodsImages, Map<Integer, Integer> goodStorageMap) {  
23 - List<GoodsImages> validGoodsImages = goodsImages.stream().filter(a -> "Y".equalsIgnoreCase(a.getIsDefault()) && Integer.valueOf(1).equals(a.getStatus())).collect(Collectors.toList());  
24 - List<GoodsImages> storageGoodsImages = validGoodsImages.stream().filter(a -> goodStorageMap.containsKey(a.getGoodsId()) && goodStorageMap.get(a.getGoodsId()) > 0).collect(Collectors.toList());  
25 - Map<Integer, String> storageGoodsImagesMap = storageGoodsImages.stream().filter(a -> StringUtils.isNotBlank(a.getImageUrl())).collect(Collectors.toMap(GoodsImages::getProductId, GoodsImages::getImageUrl, (key1, key2) -> key1));  
26 - Map<Integer, String> validGoodsImagesMap = validGoodsImages.stream().filter(a -> StringUtils.isNotBlank(a.getImageUrl())).collect(Collectors.toMap(GoodsImages::getProductId, GoodsImages::getImageUrl, (key1, key2) -> key1));  
27 - validGoodsImagesMap.putAll(storageGoodsImagesMap);  
28 - return validGoodsImagesMap;  
29 - } 16 + // 获取Goods的图片信息
  17 + public Map<Integer, GoodsImageInfo> selectGoodsCoverImage(List<GoodsImages> goodsImages) {
  18 + Map<Integer, GoodsImageInfo> goodsCoverImagesMap = new HashMap<>();
  19 +
  20 + // 1、获取默认的有效的图
  21 + List<GoodsImages> defaultGoodsImages = goodsImages.stream().filter(a -> a.getStatus() == 1 && "Y".equalsIgnoreCase(a.getIsDefault())).collect(Collectors.toList());
  22 + for (GoodsImages goodsImage : defaultGoodsImages) {
  23 + GoodsImageInfo goodsImageInfo = goodsCoverImagesMap.computeIfAbsent(goodsImage.getGoodsId(), a -> new GoodsImageInfo(goodsImage.getGoodsId()));
  24 + String imageUrl = goodsImage.getImageUrl();
  25 + if (StringUtils.isNotBlank(imageUrl)) {
  26 + goodsImageInfo.setImage_url(imageUrl);
  27 + }
  28 + }
  29 +
  30 + // 2、随便取一个有效的图片替代
  31 + List<GoodsImages> validGoodsImages = goodsImages.stream().filter(a -> a.getStatus() == 1).collect(Collectors.toList());
  32 + for (GoodsImages goodsImage : validGoodsImages) {
  33 + GoodsImageInfo goodsImageInfo = goodsCoverImagesMap.computeIfAbsent(goodsImage.getGoodsId(), a -> new GoodsImageInfo(goodsImage.getGoodsId()));
  34 + String imageUrl = goodsImage.getImageUrl();
  35 + //如果没有图片,则随便取一个有效的图片替代
  36 + if (StringUtils.isBlank(goodsImageInfo.getImage_url()) && StringUtils.isNotBlank(imageUrl)) {
  37 + goodsImageInfo.setImage_url(imageUrl);
  38 + }
  39 + }
30 40
31 - public Map<Integer, GoodsCoverImage> selectGoodsCoverImage(List<GoodsImages> goodsImages) {  
32 - Map<Integer, GoodsCoverImage> goodsCoverImagesMap = new HashMap<>();  
33 - // 构建goodsCoverImagesMap  
34 - List<GoodsImages> validGoodsImages = goodsImages.stream().filter(a -> a.getGenderCover() != null && a.getGenderCover() > 0).collect(Collectors.toList());  
35 - for (GoodsImages coverImage : validGoodsImages) { 41 + //3、处理男封女封
  42 + List<GoodsImages> coverImages = goodsImages.stream().filter(a -> a.getStatus() == 1 && a.getGenderCover() != null && a.getGenderCover() > 0).collect(Collectors.toList());
  43 + for (GoodsImages coverImage : coverImages) {
36 String cover1 = coverImage.getGenderCover() == 1 ? coverImage.getImageUrl() : null; 44 String cover1 = coverImage.getGenderCover() == 1 ? coverImage.getImageUrl() : null;
37 String cover2 = coverImage.getGenderCover() == 2 ? coverImage.getImageUrl() : null; 45 String cover2 = coverImage.getGenderCover() == 2 ? coverImage.getImageUrl() : null;
38 - GoodsCoverImage goodsCoverImage = goodsCoverImagesMap.computeIfAbsent(coverImage.getGoodsId(), a -> new GoodsCoverImage(coverImage.getGoodsId()));  
39 - if (StringUtils.isBlank(goodsCoverImage.getCover_1()) && !StringUtils.isBlank(cover1)) {  
40 - goodsCoverImage.setCover_1(cover1); 46 + GoodsImageInfo goodsImageInfo = goodsCoverImagesMap.computeIfAbsent(coverImage.getGoodsId(), a -> new GoodsImageInfo(coverImage.getGoodsId()));
  47 + if (StringUtils.isBlank(goodsImageInfo.getCover_1()) && !StringUtils.isBlank(cover1)) {
  48 + goodsImageInfo.setCover_1(cover1);
41 } 49 }
42 - if (StringUtils.isBlank(goodsCoverImage.getCover_2()) && !StringUtils.isBlank((cover2))) {  
43 - goodsCoverImage.setCover_2(cover2); 50 + if (StringUtils.isBlank(goodsImageInfo.getCover_2()) && !StringUtils.isBlank((cover2))) {
  51 + goodsImageInfo.setCover_2(cover2);
44 } 52 }
45 } 53 }
46 return goodsCoverImagesMap; 54 return goodsCoverImagesMap;
@@ -37,7 +37,6 @@ public class ProductGoodsLogicService { @@ -37,7 +37,6 @@ public class ProductGoodsLogicService {
37 @Autowired 37 @Autowired
38 private StorageService storageService; 38 private StorageService storageService;
39 39
40 -  
41 /** 40 /**
42 * 全量增量都有调用 41 * 全量增量都有调用
43 */ 42 */
@@ -53,11 +52,10 @@ public class ProductGoodsLogicService { @@ -53,11 +52,10 @@ public class ProductGoodsLogicService {
53 52
54 //2、构建库存相关数据 53 //2、构建库存相关数据
55 Map<Integer, Integer> goodStorageNumMap = goodsRelatedStorageLogicService.buildGoodStorageNumMap(storageList); 54 Map<Integer, Integer> goodStorageNumMap = goodsRelatedStorageLogicService.buildGoodStorageNumMap(storageList);
56 - Map<Integer, List<Storage>> productStorageMap = goodsRelatedStorageLogicService.buildProductStorageListMap(goodsList,storageList); 55 + Map<Integer, List<Storage>> productStorageMap = goodsRelatedStorageLogicService.buildProductStorageListMap(goodsList, storageList);
57 56
58 //3、构建图片相关数据 57 //3、构建图片相关数据
59 - Map<Integer, String> defaultImageMap = goodsRelatedImageLogicService.buildProductDefaultImage(goodsImages, goodStorageNumMap);  
60 - Map<Integer, GoodsCoverImage> goodsCoverImagesMap = goodsRelatedImageLogicService.selectGoodsCoverImage(goodsImages); 58 + Map<Integer, GoodsImageInfo> goodsImageInfoMap = goodsRelatedImageLogicService.selectGoodsCoverImage(goodsImages);
61 59
62 //4、批量查询尺码信息 60 //4、批量查询尺码信息
63 Map<Integer, String> sizeId2NameMap = productSizesLogicService.buildSizeId2NameMap(storageList); 61 Map<Integer, String> sizeId2NameMap = productSizesLogicService.buildSizeId2NameMap(storageList);
@@ -65,19 +63,17 @@ public class ProductGoodsLogicService { @@ -65,19 +63,17 @@ public class ProductGoodsLogicService {
65 //5、构建product2GoodsMap 63 //5、构建product2GoodsMap
66 Map<Integer, List<ProductGoodInfo>> productGoodsMap = new HashMap<>(); 64 Map<Integer, List<ProductGoodInfo>> productGoodsMap = new HashMap<>();
67 for (Goods goods : goodsList) { 65 for (Goods goods : goodsList) {
68 - ProductGoodInfo goodInfo = buildProductGoodInfo(goods, goodsCoverImagesMap, goodStorageNumMap); 66 + ProductGoodInfo goodInfo = buildProductGoodInfo(goods, goodsImageInfoMap, goodStorageNumMap);
69 List<ProductGoodInfo> goodInfoList = productGoodsMap.computeIfAbsent(goods.getProductId(), a -> new ArrayList<>()); 67 List<ProductGoodInfo> goodInfoList = productGoodsMap.computeIfAbsent(goods.getProductId(), a -> new ArrayList<>());
70 goodInfoList.add(goodInfo); 68 goodInfoList.add(goodInfo);
71 } 69 }
72 70
73 //6、构建productGoodsBOs 71 //6、构建productGoodsBOs
74 -  
75 -  
76 List<ProductGoodsBO> productGoodsBOs = new ArrayList<>(); 72 List<ProductGoodsBO> productGoodsBOs = new ArrayList<>();
77 for (Map.Entry<Integer, List<ProductGoodInfo>> entry : productGoodsMap.entrySet()) { 73 for (Map.Entry<Integer, List<ProductGoodInfo>> entry : productGoodsMap.entrySet()) {
78 ProductGoodsBO productGoodsBO = new ProductGoodsBO(entry.getKey(), entry.getValue()); 74 ProductGoodsBO productGoodsBO = new ProductGoodsBO(entry.getKey(), entry.getValue());
79 //填充图片 75 //填充图片
80 - fillProductImage(productGoodsBO, defaultImageMap); 76 + fillProductImage(productGoodsBO);
81 //填充颜色 77 //填充颜色
82 fillColorInfo(productGoodsBO); 78 fillColorInfo(productGoodsBO);
83 //填充尺码 79 //填充尺码
@@ -91,35 +87,83 @@ public class ProductGoodsLogicService { @@ -91,35 +87,83 @@ public class ProductGoodsLogicService {
91 return new ArrayList<>(); 87 return new ArrayList<>();
92 } 88 }
93 89
94 - private void fillProductImage(ProductGoodsBO productGoodsBO, Map<Integer, String> defaultImageMap) {  
95 - String imagesUrl = ""; 90 + /**
  91 + * 转成good对象
  92 + */
  93 + private ProductGoodInfo buildProductGoodInfo(Goods goods, Map<Integer, GoodsImageInfo> goodsImagesInfoMap, Map<Integer, Integer> goodStorageMap) {
  94 + Map<Integer, ProductColor> productColorsMap = basicDataCacheService.getColor();
  95 + ProductGoodInfo productGoodInfo = new ProductGoodInfo();
  96 + // 来自Goods
  97 + productGoodInfo.setGoods_id(String.valueOf(goods.getId()));
  98 + productGoodInfo.setColor_name(StringUtils.isBlank(goods.getColorName()) ? "" : goods.getColorName());
  99 + productGoodInfo.setImages_url(StringUtils.isBlank(goods.getColorImage()) ? "" : goods.getColorImage());
  100 + productGoodInfo.setIs_default(StringUtils.isBlank(goods.getIsDefault()) ? "N" : goods.getIsDefault());
  101 + productGoodInfo.setColor_id(goods.getColorId() == null ? "" : goods.getColorId().toString());
  102 + productGoodInfo.setStatus(goods.getStatus() == null ? "0" : goods.getStatus().toString());
  103 + productGoodInfo.setProduct_skc(goods.getProductSkc() == null ? "" : goods.getProductSkc().toString());
  104 + productGoodInfo.setColor_value("");
  105 + // 来自productColorsMap
  106 + ProductColor productColor = productColorsMap.get(goods.getColorId());
  107 + if (productColor != null) {
  108 + String colorCode = productColor.getColorCode();
  109 + productGoodInfo.setColor_code(colorCode);
  110 + }
  111 + // 来自goodsCoverImagesMap
  112 + GoodsImageInfo goodsImageInfo = goodsImagesInfoMap.get(goods.getId());
  113 + String cover_1 = "";
  114 + String cover_2 = "";
  115 + if (goodsImageInfo != null) {
  116 + cover_1 = goodsImageInfo.getCover_1();
  117 + cover_2 = goodsImageInfo.getCover_2();
  118 + // Images_url兜底
  119 + if (StringUtils.isBlank(productGoodInfo.getImages_url())) {
  120 + productGoodInfo.setImages_url(goodsImageInfo.getImage_url());
  121 + }
  122 + }
  123 + productGoodInfo.setCover_1(StringUtils.isBlank(cover_1) ? "" : cover_1);
  124 + productGoodInfo.setCover_2(StringUtils.isBlank(cover_2) ? "" : cover_2);
  125 + // 来自storageMap
  126 + Integer storage_num = goodStorageMap.get(goods.getId());
  127 + productGoodInfo.setStorage_num(storage_num == null ? "0" : storage_num.toString());
  128 + return productGoodInfo;
  129 + }
  130 +
  131 + private void fillProductImage(ProductGoodsBO productGoodsBO) {
  132 + String defaultImage = "";
96 String cover1 = ""; 133 String cover1 = "";
97 String cover2 = ""; 134 String cover2 = "";
98 for (ProductGoodInfo goodInfo : productGoodsBO.getGoodsList()) { 135 for (ProductGoodInfo goodInfo : productGoodsBO.getGoodsList()) {
99 - // 如果此goods是is_default=Y的,用这个goods,否则不用 136 + // 如果此goods是is_default=Y的,并且有库存用这个goods的信息
100 if ("Y".equals(goodInfo.getIs_default()) && Integer.valueOf(goodInfo.getStorage_num()) > 0) { 137 if ("Y".equals(goodInfo.getIs_default()) && Integer.valueOf(goodInfo.getStorage_num()) > 0) {
101 - imagesUrl = goodInfo.getImages_url(); 138 + defaultImage = goodInfo.getImages_url();
102 cover1 = goodInfo.getCover_1(); 139 cover1 = goodInfo.getCover_1();
103 cover2 = goodInfo.getCover_2(); 140 cover2 = goodInfo.getCover_2();
104 - if (StringUtils.isNotBlank(imagesUrl)) { 141 + //找到了则退出循环
  142 + if (StringUtils.isNotBlank(defaultImage)) {
105 break; 143 break;
106 } 144 }
107 } 145 }
108 } 146 }
109 - cover1 = StringUtils.isNotBlank(cover1) ? cover1 : imagesUrl;  
110 - cover2 = StringUtils.isNotBlank(cover2) ? cover2 : imagesUrl;  
111 - productGoodsBO.setCover_1(cover1);  
112 - productGoodsBO.setCover_2(cover2);  
113 - String defaultImage = defaultImageMap.get(productGoodsBO.getProductId());  
114 //default_images灾备 147 //default_images灾备
115 if (StringUtils.isBlank(defaultImage)) { 148 if (StringUtils.isBlank(defaultImage)) {
116 - defaultImage = getImageNotNull(productGoodsBO.getGoodsList()); 149 + defaultImage = getImageNotNull(productGoodsBO.getGoodsList(), true);
  150 + if (StringUtils.isBlank(defaultImage)) {
  151 + defaultImage = getImageNotNull(productGoodsBO.getGoodsList(), false);
  152 + }
117 } 153 }
  154 + // cover1 cover2不存在则取defaultImage
  155 + cover1 = StringUtils.isNotBlank(cover1) ? cover1 : defaultImage;
  156 + cover2 = StringUtils.isNotBlank(cover2) ? cover2 : defaultImage;
  157 + productGoodsBO.setCover_1(cover1);
  158 + productGoodsBO.setCover_2(cover2);
118 productGoodsBO.setDefaultImage(defaultImage); 159 productGoodsBO.setDefaultImage(defaultImage);
119 } 160 }
120 161
121 - private String getImageNotNull(List<ProductGoodInfo> goodsList) { 162 + private String getImageNotNull(List<ProductGoodInfo> goodsList, boolean filterStorage) {
122 for (ProductGoodInfo goods : goodsList) { 163 for (ProductGoodInfo goods : goodsList) {
  164 + if (filterStorage && Integer.valueOf(goods.getStorage_num()) <= 0) {
  165 + continue;
  166 + }
123 String imagesUrl = goods.getImages_url(); 167 String imagesUrl = goods.getImages_url();
124 if (StringUtils.isNotBlank(imagesUrl)) { 168 if (StringUtils.isNotBlank(imagesUrl)) {
125 return imagesUrl; 169 return imagesUrl;
@@ -136,7 +180,6 @@ public class ProductGoodsLogicService { @@ -136,7 +180,6 @@ public class ProductGoodsLogicService {
136 return ""; 180 return "";
137 } 181 }
138 182
139 -  
140 /** 183 /**
141 * 获取有库存且状态正常的color 184 * 获取有库存且状态正常的color
142 */ 185 */
@@ -163,40 +206,6 @@ public class ProductGoodsLogicService { @@ -163,40 +206,6 @@ public class ProductGoodsLogicService {
163 productGoodsBO.setColorNames(colorNameSet); 206 productGoodsBO.setColorNames(colorNameSet);
164 } 207 }
165 208
166 - /**  
167 - * 转成good对象  
168 - */  
169 - private ProductGoodInfo buildProductGoodInfo(Goods goods, Map<Integer, GoodsCoverImage> goodsCoverImagesMap, Map<Integer, Integer> goodStorageMap) {  
170 - Map<Integer, ProductColor> productColorsMap = basicDataCacheService.getColor();  
171 - ProductGoodInfo productGoodInfo = new ProductGoodInfo();  
172 - // 来自Goods  
173 - productGoodInfo.setGoods_id(String.valueOf(goods.getId()));  
174 - productGoodInfo.setColor_name(StringUtils.isBlank(goods.getColorName()) ? "" : goods.getColorName());  
175 - productGoodInfo.setImages_url(StringUtils.isBlank(goods.getColorImage()) ? "" : goods.getColorImage());  
176 - productGoodInfo.setIs_default(StringUtils.isBlank(goods.getIsDefault()) ? "N" : goods.getIsDefault());  
177 - productGoodInfo.setColor_id(goods.getColorId() == null ? "" : goods.getColorId().toString());  
178 - productGoodInfo.setStatus(goods.getStatus() == null ? "0" : goods.getStatus().toString());  
179 - productGoodInfo.setProduct_skc(goods.getProductSkc() == null ? "" : goods.getProductSkc().toString());  
180 - productGoodInfo.setColor_value("");  
181 - // 来自productColorsMap  
182 - ProductColor productColor = productColorsMap.get(goods.getColorId());  
183 - if (productColor != null) {  
184 - String colorCode = productColor.getColorCode();  
185 - productGoodInfo.setColor_code(colorCode);  
186 - }  
187 - // 来自goodsCoverImagesMap  
188 - GoodsCoverImage goodsCoverImage = goodsCoverImagesMap.get(goods.getId());  
189 - String cover_1 = "";  
190 - String cover_2 = "";  
191 - if (goodsCoverImage != null) {  
192 - cover_1 = goodsCoverImage.getCover_1();  
193 - cover_2 = goodsCoverImage.getCover_2();  
194 - }  
195 - productGoodInfo.setCover_1(StringUtils.isBlank(cover_1) ? "" : cover_1);  
196 - productGoodInfo.setCover_2(StringUtils.isBlank(cover_2) ? "" : cover_2);  
197 - // 来自storageMap  
198 - Integer storage_num = goodStorageMap.get(goods.getId());  
199 - productGoodInfo.setStorage_num(storage_num == null ? "0" : storage_num.toString());  
200 - return productGoodInfo;  
201 - } 209 +
  210 +
202 } 211 }