Search in sources :

Example 1 with SkuDTO

use of com.whoiszxl.dto.SkuDTO in project shopzz by whoiszxl.

the class CartServiceImpl method addProductToCart.

@Override
public boolean addProductToCart(CartAddQuery cartAddQuery) {
    Integer quantity = cartAddQuery.getQuantity();
    Long skuId = cartAddQuery.getSkuId();
    // 1. 通过会员ID和SKU ID查询购物车表中是否存在这条记录
    long memberId = StpUtil.getLoginIdAsLong();
    LambdaQueryWrapper<Cart> queryWrapper = new LambdaQueryWrapper<>();
    queryWrapper.eq(Cart::getMemberId, memberId);
    queryWrapper.eq(Cart::getSkuId, skuId);
    Cart cart = this.getOne(queryWrapper);
    boolean saveOrUpdateFlag = false;
    if (cart == null) {
        // 2. 购物车不存在,新增
        Cart addCart = new Cart();
        addCart.setMemberId(memberId);
        addCart.setSkuId(skuId);
        addCart.setQuantity(quantity);
        CompletableFuture<Void> future1 = CompletableFuture.runAsync(() -> {
            // 3. 查询SKU信息
            ResponseResult<SkuDTO> skuResult = productFeignClient.getSkuInfoBySkuId(skuId);
            SkuDTO sku = skuResult.getData();
            addCart.setProductId(sku.getProductId());
            addCart.setSkuName(sku.getSkuName());
            addCart.setSkuPic(sku.getImgUrl());
            addCart.setPrice(sku.getSalePrice());
            addCart.setChecked(CartCheckConstants.CHECKED);
            addCart.setStatus(StatusEnum.OPEN.getCode());
        }, executor);
        // TODO 查询销售属性
        addCart.setSaleAttr("todo");
        try {
            CompletableFuture.allOf(future1).get();
        } catch (Exception e) {
            log.error("新增购物车失败", e);
        }
        saveOrUpdateFlag = this.save(addCart);
    } else {
        // 3. 购物车存在,更新
        cart.setQuantity(cart.getQuantity() + cartAddQuery.getQuantity());
        saveOrUpdateFlag = this.updateById(cart);
    }
    return saveOrUpdateFlag;
}
Also used : SkuDTO(com.whoiszxl.dto.SkuDTO) ExecutionException(java.util.concurrent.ExecutionException) Cart(com.whoiszxl.entity.Cart) LambdaQueryWrapper(com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper)

Example 2 with SkuDTO

use of com.whoiszxl.dto.SkuDTO in project shopzz by whoiszxl.

the class CartServiceImpl method cartAdd.

@Override
public Boolean cartAdd(SaveCartRequest addCartQuery) {
    // 0. 对sku进行有效性校验
    ResponseResult<SkuDTO> skuInfoResponse = productFeignClient.getSkuInfoBySkuId(addCartQuery.getSkuId());
    SkuDTO sku = skuInfoResponse.getData();
    if (sku == null || sku.getIsDeleted() == 1) {
        ExceptionCatcher.catchValidateEx(ResponseResult.buildError("商品无效"));
    }
    // 1. 判断redis中是否存在当前的购物车信息
    BoundHashOperations<String, Object, Object> cartHashOps = redisUtils.getHashOps(RedisKeyPrefixConstants.MEMBER_CART_PREFIX + StpUtil.getLoginIdAsString());
    String cartItemJson = (String) cartHashOps.get(addCartQuery.getSkuId().toString());
    if (StringUtils.isBlank(cartItemJson)) {
        CartItemVO cartItemVO = new CartItemVO();
        cartItemVO.setChecked(StatusEnum.OPEN.getCode());
        cartItemVO.setQuantity(addCartQuery.getQuantity());
        cartItemVO.setSkuPic(sku.getImgUrl());
        cartItemVO.setPrice(sku.getPromotionPrice() == null ? sku.getSalePrice() : sku.getPromotionPrice());
        cartItemVO.setSkuId(sku.getId());
        cartItemVO.setSkuName(sku.getSkuName());
        cartItemVO.setProductId(sku.getProductId());
        String jsonValue = JsonUtil.toJson(cartItemVO);
        cartHashOps.put(addCartQuery.getSkuId().toString(), jsonValue);
    } else {
        // 在原有购物车商品里累加
        CartItemVO cartItemVO = JsonUtil.fromJson(cartItemJson, CartItemVO.class);
        cartItemVO.setQuantity(cartItemVO.getQuantity() + addCartQuery.getQuantity());
        cartItemVO.setSkuPic(sku.getImgUrl());
        cartItemVO.setPrice(sku.getPromotionPrice() == null ? sku.getSalePrice() : sku.getPromotionPrice());
        cartItemVO.setSkuName(sku.getSkuName());
        cartItemVO.setProductId(sku.getProductId());
        String jsonValue = JsonUtil.toJson(cartItemVO);
        cartHashOps.put(addCartQuery.getSkuId().toString(), jsonValue);
    }
    // TODO 发送MQ,落库
    return true;
}
Also used : SkuDTO(com.whoiszxl.dto.SkuDTO) CartItemVO(com.whoiszxl.entity.vo.CartItemVO)

Aggregations

SkuDTO (com.whoiszxl.dto.SkuDTO)2 LambdaQueryWrapper (com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper)1 Cart (com.whoiszxl.entity.Cart)1 CartItemVO (com.whoiszxl.entity.vo.CartItemVO)1 ExecutionException (java.util.concurrent.ExecutionException)1