@Override
public Map<String, DistributionGoodsPriceDTO> mapPriceDTO(List<MarketingActivityGoods> activityGoodsList) {
if (CollectionUtils.isEmpty(activityGoodsList)) {
return Collections.emptyMap();
}
List<String> goodsIds = activityGoodsList.stream().map(MarketingActivityGoods::getGoodsId).distinct().collect(Collectors.toList());
List<GoodsSimpleInfoDTO> simpleInfoDTOS = shopGoodsQueryService.listSimpleInfoByIds(goodsIds).getData();
Map<String, GoodsSimpleInfoDTO> simpleInfoDTOMap = simpleInfoDTOS.stream().collect(Collectors.toMap(GoodsSimpleInfoDTO::getId, p -> p));
List<String> skuCodeList = activityGoodsList.stream().filter(goods -> Strings.isNotBlank(goods.getGoodsSkuCode())).map(MarketingActivityGoods::getGoodsSkuCode).distinct().collect(Collectors.toList());
Map<String, ShopGoodsSkuDTO> skuDTOMap = new HashMap<>();
if (!org.springframework.util.CollectionUtils.isEmpty(skuCodeList)) {
List<ShopGoodsSkuDTO> skuDTOS = shopGoodsSkuService.listBySkuCodeList(skuCodeList).getData();
skuDTOMap = skuDTOS.stream().collect(Collectors.toMap(ShopGoodsSkuDTO::getSkuCode, p -> p));
}
Map<String, List<MarketingActivityGoods>> goodsMap = activityGoodsList.stream().collect(Collectors.groupingBy(MarketingActivityGoods::getGoodsId));
Map<String, DistributionGoodsPriceDTO> map = new HashMap<>();
for (Map.Entry<String, List<MarketingActivityGoods>> entry : goodsMap.entrySet()) {
String key = entry.getKey();
List<MarketingActivityGoods> value = entry.getValue();
boolean isSoldOut = true;
int totalGoodsSaleStock = 0;
int totalGoodsOriginSaleStock = 0;
BigDecimal minNewUserPrice = BigDecimal.ZERO;
BigDecimal minDistributePrice = BigDecimal.ZERO;
String minNewUserPriceGoodsSkuCode = null;
String minDistributePriceGoodsSkuCode = null;
for (MarketingActivityGoods goods : value) {
if (isSoldOut) {
isSoldOut = goods.getGoodsOriginStock() - goods.getGoodsSaleStock() <= 0;
}
totalGoodsSaleStock += goods.getGoodsSaleStock();
totalGoodsOriginSaleStock += goods.getGoodsOriginSaleStock();
if (goods.getNewBuyerPrice() != null && goods.getNewBuyerPrice().compareTo(BigDecimal.ZERO) != 0) {
if (minNewUserPrice.compareTo(BigDecimal.ZERO) == 0 || minNewUserPrice.compareTo(goods.getNewBuyerPrice()) > 0) {
minNewUserPrice = goods.getNewBuyerPrice();
minNewUserPriceGoodsSkuCode = goods.getGoodsSkuCode();
}
}
if (minDistributePrice.compareTo(BigDecimal.ZERO) == 0 || minDistributePrice.compareTo(goods.getActivityPrice()) > 0) {
minDistributePrice = goods.getActivityPrice();
minDistributePriceGoodsSkuCode = goods.getGoodsSkuCode();
}
}
DistributionGoodsPriceDTO priceDTO = new DistributionGoodsPriceDTO();
priceDTO.setGoodsId(key);
priceDTO.setIsSoldOut(isSoldOut);
priceDTO.setMinDistributePrice(minDistributePrice);
priceDTO.setMinNewUserPrice(minNewUserPrice);
priceDTO.setTotalGoodsSaleStock(totalGoodsSaleStock);
priceDTO.setTotalGoodsOriginSaleStock(totalGoodsOriginSaleStock);
if (simpleInfoDTOMap.containsKey(key)) {
GoodsSimpleInfoDTO goodsSimpleInfoDTO = simpleInfoDTOMap.get(key);
priceDTO.setDesc(goodsSimpleInfoDTO.getDesc());
priceDTO.setCover(goodsSimpleInfoDTO.getCover());
priceDTO.setGoodsName(goodsSimpleInfoDTO.getName());
priceDTO.setCrossedPrice(goodsSimpleInfoDTO.getOriginalPrice());
if (priceDTO.getCrossedPrice() == null || priceDTO.getCrossedPrice().compareTo(BigDecimal.ZERO) == 0) {
priceDTO.setCrossedPrice(goodsSimpleInfoDTO.getPrice());
}
}
priceDTO.setMinNewUserPriceCrossedPrice(priceDTO.getCrossedPrice());
priceDTO.setMinDistributePriceCrossedPrice(priceDTO.getCrossedPrice());
if (Strings.isNotBlank(minNewUserPriceGoodsSkuCode) && skuDTOMap.containsKey(minNewUserPriceGoodsSkuCode)) {
ShopGoodsSkuDTO shopGoodsSkuDTO = skuDTOMap.get(minNewUserPriceGoodsSkuCode);
priceDTO.setMinNewUserPriceCrossedPrice(shopGoodsSkuDTO.getSkuOriginalPrice());
if (priceDTO.getMinNewUserPriceCrossedPrice() == null || priceDTO.getMinNewUserPriceCrossedPrice().compareTo(BigDecimal.ZERO) == 0) {
priceDTO.setMinNewUserPriceCrossedPrice(shopGoodsSkuDTO.getSkuPrice());
}
}
if (Strings.isNotBlank(minDistributePriceGoodsSkuCode) && skuDTOMap.containsKey(minDistributePriceGoodsSkuCode)) {
ShopGoodsSkuDTO shopGoodsSkuDTO = skuDTOMap.get(minDistributePriceGoodsSkuCode);
priceDTO.setMinDistributePriceCrossedPrice(shopGoodsSkuDTO.getSkuOriginalPrice());
if (priceDTO.getMinDistributePriceCrossedPrice() == null || priceDTO.getMinDistributePriceCrossedPrice().compareTo(BigDecimal.ZERO) == 0) {
priceDTO.setMinDistributePriceCrossedPrice(shopGoodsSkuDTO.getSkuPrice());
}
}
map.put(key, priceDTO);
}
return map;
}
java8及map封装使用
最新推荐文章于 2023-03-12 10:17:41 发布