添加商品到购物车 业务层是否有 bug

来源:1-1 电商项目整体介绍

W8132455

2022-11-10 21:51:36

List<CartVO> (Integer userIdInteger productIdInteger count) {
    validProduct(productIdcount)Cart cart = .selectCartByUserIdAndProductId(userIdproductId)(cart == ) {
        cart = Cart()cart.setProductId(productId)cart.setUserId(userId)cart.setQuantity(count)cart.setSelected(Constant.Cart.).insertSelective(cart)} {
        count = cart.getQuantity() + countCart cartNew = Cart()cartNew.setQuantity(count)cartNew.setId(cart.getId())cartNew.setProductId(cart.getProductId())cartNew.setUserId(cart.getUserId())Product productCount = Product()cartNew.setSelected(Constant.Cart.).updateByPrimaryKeySelective(cartNew)}
    .list(userId)}

这个在添加购物车时候,没有考虑到数据库的stock存货数量。  视频中所用的方法,业务实现合理吗? 不是应该在添加商品的时候,如果stock存货就只有十个,然后你一直添加都会可以进行添加到购物车,没有考虑数据库里的stock数量够不够。 虽然在更新购物车中,实现了对数据库中的stock判断剩余量。但是为啥在添加时候不设置这个业务需求呢?

写回答

2回答

Gavinf

2023-02-26

在postman测试【添加到购物车】时,也遇到这个问题,开始以为是我代码敲错,后来才发现问题,validProduct()方法,只对传入的数量count去和product表里的stock进行对比,所以更新购物车时,会提示库存不足,但是在添加到购物车时,就可以一直加。

可以在业务层的add()方法,先拿到产品的购物车数量+1,再传入validProduct()进行校验。

validProduct(productId, count + cartMapper.selectCartByUserIdAndProductId(userId, productId).getQuantity());
@Override
    public List<CartVO> add(Integer userId, Integer productId, Integer count) {
        validProduct(productId, count + cartMapper.selectCartByUserIdAndProductId(userId, productId).getQuantity());
        Cart cart = cartMapper.selectCartByUserIdAndProductId(userId, productId);
        if (cart == null) {
            //这个商品之前不在购物车里,需要新增一个记录
            cart = new Cart();
            cart.setProductId(productId);
            cart.setUserId(userId);
            cart.setQuantity(count);
            cart.setSelected(Constant.Cart.SELECTED);
            cartMapper.insertSelective(cart);
        } else {
            //这个商品已经在购物车里了,则数量相加
            count = cart.getQuantity() + count;
            Cart cartNew = new Cart();
            cartNew.setQuantity(count);
            cartNew.setId(cart.getId());
            cartNew.setProductId(cart.getProductId());
            cartNew.setUserId(cart.getUserId());
            cartNew.setSelected(Constant.Cart.SELECTED);
            cartMapper.updateByPrimaryKeySelective(cartNew);
        }
        return this.list(userId);
    }

但是这样可能会有另外一个问题,就是在去拿产品购物车数量时,有可能抛null异常。

0

好帮手慕小蓝

2022-11-11

同学你好,课程中的所有业务逻辑都只是演示性质的,只是大致演示这些业务处理的流程以及技术的使用方式,并没有将业务逻辑做得十分严谨。

因为如果过度的将业务逻辑严谨化,会淡化技术的使用方式,对于教学来说是本末倒置的,不利于同学们的学习。

同学可以看到逻辑的不严谨,是值得表扬的,同学可以在自己的项目中对这部分做优化,提高自己的业务处理能力。

祝学习愉快~

0

0 学习 · 9886 问题

查看课程