package cn.lili.modules.order.cart.render.impl; import cn.lili.modules.order.cart.entity.dto.TradeDTO; import cn.lili.modules.order.cart.entity.enums.RenderStepEnums; import cn.lili.modules.order.cart.entity.vo.CartSkuVO; import cn.lili.modules.order.cart.entity.vo.CartVO; import cn.lili.modules.order.cart.render.CartRenderStep; import cn.lili.modules.order.order.entity.dto.PriceDetailDTO; import org.springframework.stereotype.Service; import java.util.List; import java.util.stream.Collectors; /** * 购物车渲染,将购物车中的各个商品,拆分到每个商家,形成购物车VO * * @author Chopper * @see CartVO */ @Service public class CartPriceRender implements CartRenderStep { @Override public RenderStepEnums step() { return RenderStepEnums.CART_PRICE; } @Override public void render(TradeDTO tradeDTO) { //价格过滤 在购物车商品失效时,需要对价格进行初始化操作 initPriceDTO(tradeDTO); //构造cartVO buildCartPrice(tradeDTO); buildTradePrice(tradeDTO); } /** * 特殊情况下对购物车金额进行护理 * * @param tradeDTO */ private void initPriceDTO(TradeDTO tradeDTO) { tradeDTO.getCartList().forEach(cartVO -> cartVO.setPriceDetailDTO(new PriceDetailDTO())); tradeDTO.setPriceDetailDTO(new PriceDetailDTO()); } /** * 购物车价格 * * @param tradeDTO 购物车展示信息 */ void buildCartPrice(TradeDTO tradeDTO) { //购物车列表 List cartVOS = tradeDTO.getCartList(); cartVOS.forEach(cartVO -> { cartVO.getPriceDetailDTO().accumulationPriceDTO( cartVO.getCheckedSkuList().stream().filter(CartSkuVO::getChecked) .map(CartSkuVO::getPriceDetailDTO).collect(Collectors.toList()) ); List skuNum = cartVO.getSkuList().stream().filter(CartSkuVO::getChecked) .map(CartSkuVO::getNum).collect(Collectors.toList()); for (Integer num : skuNum) { cartVO.addGoodsNum(num); } }); } /** * 初始化购物车 * * @param tradeDTO 购物车展示信息 */ void buildTradePrice(TradeDTO tradeDTO) { tradeDTO.getPriceDetailDTO().accumulationPriceDTO( tradeDTO.getCartList().stream().map(CartVO::getPriceDetailDTO).collect(Collectors.toList())); } }