java8及map封装使用

    @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;

    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值