fix: 商家修改商品价格后,购物车的商品价格不变动不提示问题。购物车sku集合引用地址修改无效导致。

This commit is contained in:
Chopper711 2023-03-29 16:04:53 +08:00
parent 25f8b103bf
commit fad7c4a39d
2 changed files with 27 additions and 16 deletions

View File

@ -1,5 +1,6 @@
package cn.lili.modules.order.cart.entity.vo; package cn.lili.modules.order.cart.entity.vo;
import cn.lili.common.utils.CurrencyUtil;
import cn.lili.modules.distribution.entity.dos.DistributionGoods; import cn.lili.modules.distribution.entity.dos.DistributionGoods;
import cn.lili.modules.goods.entity.dos.GoodsSku; import cn.lili.modules.goods.entity.dos.GoodsSku;
import cn.lili.modules.order.cart.entity.enums.CartTypeEnum; import cn.lili.modules.order.cart.entity.enums.CartTypeEnum;
@ -123,6 +124,18 @@ public class CartSkuVO extends CartBase implements Serializable {
} }
} }
public void rebuildBySku(GoodsSku goodsSku) {
this.goodsSku = goodsSku;
this.purchasePrice = goodsSku.getPromotionFlag() != null && goodsSku.getPromotionFlag() ? goodsSku.getPromotionPrice() : goodsSku.getPrice();
this.utilPrice = goodsSku.getPromotionFlag() != null && goodsSku.getPromotionFlag() ? goodsSku.getPromotionPrice() : goodsSku.getPrice();
//计算购物车小计
this.subTotal = CurrencyUtil.mul(this.getPurchasePrice(), this.getNum());
this.setStoreId(goodsSku.getStoreId());
this.setStoreName(goodsSku.getStoreName());
}
public Map<String, Object> getPromotionMap() { public Map<String, Object> getPromotionMap() {
return PromotionTools.filterInvalidPromotionsMap(this.promotionMap); return PromotionTools.filterInvalidPromotionsMap(this.promotionMap);
} }

View File

@ -36,7 +36,10 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.*; import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
@ -74,13 +77,17 @@ public class CheckDataRender implements CartRenderStep {
@Override @Override
public void render(TradeDTO tradeDTO) { public void render(TradeDTO tradeDTO) {
//预校验
preCalibration(tradeDTO);
//校验商品有效性 //校验商品有效性
checkData(tradeDTO); checkData(tradeDTO);
//预校验
preCalibration(tradeDTO);
//批量销售预处理
preSaleModel(tradeDTO); preSaleModel(tradeDTO);
//店铺分组数据初始化 //店铺分组数据初始化
groupStore(tradeDTO); groupStore(tradeDTO);
@ -106,15 +113,12 @@ public class CheckDataRender implements CartRenderStep {
//缓存中的商品信息 //缓存中的商品信息
GoodsSku dataSku = goodsSkuService.getGoodsSkuByIdFromCache(cartSkuVO.getGoodsSku().getId()); GoodsSku dataSku = goodsSkuService.getGoodsSkuByIdFromCache(cartSkuVO.getGoodsSku().getId());
//商品上架状态判定 sku为空sku非上架状态sku审核不通过
//商品上架状态判定
boolean checkGoodsStatus = dataSku == null || !GoodsAuthEnum.PASS.name().equals(dataSku.getAuthFlag()) || !GoodsStatusEnum.UPPER.name().equals(dataSku.getMarketEnable()); boolean checkGoodsStatus = dataSku == null || !GoodsAuthEnum.PASS.name().equals(dataSku.getAuthFlag()) || !GoodsStatusEnum.UPPER.name().equals(dataSku.getMarketEnable());
//商品有效性判定 //商品有效性判定 sku不为空且sku的更新时间不为空且sku的更新时间在购物车sku的更新时间之后
boolean checkGoodsValid = dataSku != null && dataSku.getUpdateTime() != null && dataSku.getUpdateTime().after(cartSkuVO.getGoodsSku().getUpdateTime()); boolean checkGoodsValid = dataSku != null && dataSku.getUpdateTime() != null && dataSku.getUpdateTime().after(cartSkuVO.getGoodsSku().getUpdateTime());
Map<String, Object> promotionMap = dataSku != null ? promotionGoodsService.getCurrentGoodsPromotion(dataSku, tradeDTO.getCartTypeEnum().name()) : null;
log.info("dataSku: {}, goodsSku: {}", dataSku, cartSkuVO.getGoodsSku());
if (checkGoodsStatus || checkGoodsValid) { if (checkGoodsStatus || checkGoodsValid) {
if (checkGoodsStatus) { if (checkGoodsStatus) {
//设置购物车未选中 //设置购物车未选中
@ -125,14 +129,8 @@ public class CheckDataRender implements CartRenderStep {
cartSkuVO.setErrorMessage("商品已下架"); cartSkuVO.setErrorMessage("商品已下架");
} }
if (checkGoodsValid) { if (checkGoodsValid) {
CartSkuVO newCartSkuVO = new CartSkuVO(dataSku,promotionMap); cartSkuVO.rebuildBySku(dataSku);
newCartSkuVO.setCartType(tradeDTO.getCartTypeEnum());
newCartSkuVO.setNum(cartSkuVO.getNum());
newCartSkuVO.setSubTotal(CurrencyUtil.mul(newCartSkuVO.getPurchasePrice(), cartSkuVO.getNum()));
cartSkuVO = newCartSkuVO;
log.info("商品信息已更新,更新后的商品信息为:{}", cartSkuVO);
} }
continue;
} }
//商品库存判定 //商品库存判定
@ -164,7 +162,7 @@ public class CheckDataRender implements CartRenderStep {
private void groupStore(TradeDTO tradeDTO) { private void groupStore(TradeDTO tradeDTO) {
//渲染的购物车 //渲染的购物车
List<CartVO> cartList = new ArrayList<>(); List<CartVO> cartList = new ArrayList<>();
if(tradeDTO.getCartList() == null || tradeDTO.getCartList().size() == 0){ if (tradeDTO.getCartList() == null || tradeDTO.getCartList().size() == 0) {
//根据店铺分组 //根据店铺分组
Map<String, List<CartSkuVO>> storeCollect = tradeDTO.getSkuList().stream().collect(Collectors.groupingBy(CartSkuVO::getStoreId)); Map<String, List<CartSkuVO>> storeCollect = tradeDTO.getSkuList().stream().collect(Collectors.groupingBy(CartSkuVO::getStoreId));
for (Map.Entry<String, List<CartSkuVO>> storeCart : storeCollect.entrySet()) { for (Map.Entry<String, List<CartSkuVO>> storeCart : storeCollect.entrySet()) {