电商项目之购物车理解(重*点)

1、购物车业务逻辑的核心方法(*重*点*)

private CartVo getCartVoLimit(Integer userId){
        CartVo cartVo=new CartVo();
        List<Cart> cartList=cartMapper.selectCartByUserId(userId);
        List<CartProductVo> cartProductVoList= Lists.newArrayList();
        BigDecimal cartTotalPrice=new BigDecimal("0");

        if(CollectionUtils.isNotEmpty(cartList)){
            for(Cart cartItem:cartList){
                //进行组装
                CartProductVo cartProductVo=new CartProductVo();
                cartProductVo.setId(cartItem.getId());
                cartProductVo.setUserId(userId);
                cartProductVo.setProductId(cartItem.getProductId());

                Product product=productMapper.selectByPrimaryKey(cartItem.getProductId());
                if(product!=null){
                    cartProductVo.setProductMainImage(product.getMainImage());
                    cartProductVo.setProductName(product.getName());
                    cartProductVo.setProductSubtitle(product.getSubtitle());
                    cartProductVo.setProductStatus(product.getStatus());
                    cartProductVo.setProductPricec(product.getPrice());
                    cartProductVo.setProductStock(product.getStock());
                    //判断库存
                    int buyLimitCount=0;
                    if(product.getStock()>=cartItem.getQuantity()){
                        //库存充足的时候
                        buyLimitCount=cartItem.getQuantity();
                        cartProductVo.setLimitQuantity(Const.Cart.LIMIT_NUM_SUCCESS);
                    }else{
                        buyLimitCount=product.getStock();
                        cartProductVo.setLimitQuantity(Const.Cart.LIMIT_NUM_FAIL);
                        //购物车中更新有效库存
                        Cart cartForQuantity=new Cart();
                        cartForQuantity.setId(cartItem.getId());
                        cartForQuantity.setQuantity(buyLimitCount);
                        cartMapper.updateByPrimaryKeySelective(cartForQuantity);
                    }
                    cartProductVo.setQuantity(buyLimitCount);
                    //计算总价,单个商品的总价
                    cartProductVo.setProductTotalPrice(BigDecimalUtil.mul(product.getPrice().doubleValue(),cartProductVo.getQuantity()));
                    cartProductVo.setProductChecked(cartItem.getChecked());//是否勾选
                }
                //整个购物车的总价
                if(cartItem.getChecked()==Const.Cart.CHECKED){
                    //如果已经勾选,增加到整个购物车总价中
                    cartTotalPrice=BigDecimalUtil.add(cartTotalPrice.doubleValue(),cartProductVo.getProductTotalPrice().doubleValue());
                }
                cartProductVoList.add(cartProductVo);
            }

        }
        cartVo.setCartTotalPrice(cartTotalPrice);
        cartVo.setCartProductVoList(cartProductVoList);
        cartVo.setAllChecked(this.getAllCheckedStatus(userId));//是否全选状态
        cartVo.setImageHost(PropertiesUtil.getProperty("ftp.server.http.prefix"));
        return  cartVo;

    }

 

 

2、购物车增加商品(请求参数:HttpSession session,Integer count,Integer productId)

a、从session获取当前登陆用户

b、判断数量和产品id是否为空

c、如数量和产品id不为空,通过用户id和产品id查询购物车

d、如查询的购物车对象为null,就新增一个产品记录到这个购物车里

e、如查询的购物车对象有,表示该产品已经存在,则进行数量相加

f、执行购物车的核心方法

3、查询购物车商品列表(请求参数:HttpSession session)

a、从session获取当前登陆用户

b、执行购物车的核心方法,得到cartVo对象

4、购物车商品更新(请求参数:HttpSession session,Integer count,Integer productId)

a、从session获取当前登陆用户

b、判断数量和产品id是否为空

c、如数量和产品id不为空,通过用户id和产品id查询购物车

d、如cart不为空,增加数量

e、更新购物车的数据库

f、执行购物车的核心方法,得到cartVo对象

5、购物车商品删除(HttpSession session,String productIds)

a、从session中获取当前登陆用户

b、将productIds用逗号(,)进行分隔

List<String> productList= Splitter.on(",").splitToList(productIds);

c、判断分好的集合是否为空

CollectionUtils.isEmpty(productList)

d、通过用户id和商品id集合进行删除(sql对集合进行删除的写法)

<delete id="deleteByUserIdProductIds" parameterType="map">
   delete from mmall_cart
    where user_id =#{userId}
    <if test="productIdList!=null" >
      and product_id in
      <foreach collection="productIdList" item="item" index="index" open="(" separator="," close=")">
        #{item}
      </foreach>
    </if>
  </delete>

e、执行购物车的核心方法,得到cartVo对象

----------------------------------------------------------------------------------

-----------------------------------------------------------------------------------

6、购物车进行选择(全选和全反选、单独选和单独反选)

a、从session获取当前登陆用户

b、通过用户id和商品id和全部勾选(将商品进行勾选,把数据库的勾选项进行设置为勾选)

<update id="checkOrUncheckedProduct" parameterType="map">
    update mmall_cart
    set checked=#{checked}
    update_time=now()
    where user_id=#{userId}
    <if test="productId!=null">
      and product_id=#{productId}
    </if>
  </update>

7、查询购物车的商品数量

a、从session获取当前登陆用户

b、通过用户ID查询购物车的商品数量(如查出来为null,就赋值为0)

<select id="selectCartProductCount" parameterType="int" resultType="int">
    select IFNULL(sum(quantity),0)
    as count from mmall_cart where user_id=#{user_id}
  </select>

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值