电商--购物车模块(四)(更新、删除商品)

电商–购物车模块(四)(更新、删除产品)

1,更新产品数量:

就是在购物车中,我用加减号来更新购物车中产品的数量

先在controller中进行逻辑的设置:

@RequestMapping("update.do")
    @ResponseBody
    public ServerResponse<CartVo> update(HttpSession session, Integer count, Integer productId){
        User user = (User)session.getAttribute(Const.CURRENT_USER);
        if(user ==null){
            return ServerResponse.createByErrorCodeMessage(ResponseCode.NEED_LOGIN.getCode(),ResponseCode.NEED_LOGIN.getDesc());
        }
        return ......//返回这个要在service中进行设置
        //也就是要调用service层中写的update方法
    }

在service层中:
CartServiceImpl:

 public ServerResponse<CartVo> update(Integer userId,Integer productId,Integer count){
        if(productId == null || count == null){
            return ServerResponse.createByErrorCodeMessage(ResponseCode.ILLEGAL_ARGUMENT.getCode(),ResponseCode.ILLEGAL_ARGUMENT.getDesc());
        }
        Cart cart = cartMapper.selectCartByUserIdProductId(userId,productId);
        if(cart != null){//我们就更新其数量,更新购物车中这个产品的数量
            cart.setQuantity(count);
        }
        cartMapper.updateByPrimaryKey(cart);//这个表示更新数据库也要更新了
        CartVo cartVo = this.getCartVoLimit();
        return ServerResponse.createBySuccess(cartVo);
    }

然后将其这个update方法声明到接口中:

ServerResponse<CartVo> update(Integer userId,Integer productId,Integer count);

然后,在controller中就可以调用了:
也就是return iCartService.update(user.getId(),productId,count);

@RequestMapping("update.do")
    @ResponseBody
    public ServerResponse<CartVo> update(HttpSession session, Integer count, Integer productId){
        User user = (User)session.getAttribute(Const.CURRENT_USER);
        if(user ==null){
            return ServerResponse.createByErrorCodeMessage(ResponseCode.NEED_LOGIN.getCode(),ResponseCode.NEED_LOGIN.getDesc());
        }
        return iCartService.update(user.getId(),productId,count);
    }

这个更新购物车中数量的方法就写完了。(这个主要得以于在add方法中写的那个可以共用的方法:getCartVoLimit。则在以后的更新,删除,全选,反全选等逻辑中都是可以调用这个共用的方法的。也就达到了简化代码和重用代码的作用)

2,删除产品:

有了前面写的add方法,则这个delete方法也是比较简单了:
只不过删除操作,是不需要数量这个参数了。并且可能一次性删除多个,或者全部删除,(所以这里面需要进行设置一个字符串,然后用逗号来分割其id。因为可能删除多个id(多个商品)
String productIds这里出入的参数是productIds,这个productIds可能包括多个productId

@RequestMapping("delete_product.do")
    @ResponseBody
    public ServerResponse<CartVo> deleteProduct(HttpSession session,String productIds){
        User user = (User)session.getAttribute(Const.CURRENT_USER);
        if(user ==null){
            return ServerResponse.createByErrorCodeMessage(ResponseCode.NEED_LOGIN.getCode(),ResponseCode.NEED_LOGIN.getDesc());
        }
        return ....//这个返回的要在service中进行设置
    }

下面回到service层:

CartServiceImpl:

我们这里用的split方法:(这样呢,就可以把这个productIds分成多个productId,来进行操作。如果不这样的话,我们就需要把productIds转成数组,然后再遍历数组添加到集合当中)
List productList = Splitter.on(",").splitToList(productIds);

public ServerResponse<CartVo> deleteProduct(Integer userId,String productIds){
        List<String> productList = Splitter.on(",").splitToList(productIds);//用,分割,并且把结果转成集合的形式
        if(CollectionUtils.isEmpty(productList)){//如果是空的话,就返回参数错误
        
            return ServerResponse.createByErrorCodeMessage(ResponseCode.ILLEGAL_ARGUMENT.getCode(),ResponseCode.ILLEGAL_ARGUMENT.getDesc());
        }
        //否则,就是可以删除购物车中产品的数量了
        cartMapper.......//这个也就是一个删除操作,用sql语句,那么需要去mapper和xml中去设置
    }

下面到mapper中去设置:

int deleteByUserIdProductIds(@Param("userId") Integer userId,@Param("productIdList")List<String> productIdList);

然后去xml中写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>

写好sql以后,我们就可以回到service中进行调用了:
CartServiceImpl:

cartMapper.deleteByUserIdProductIds(userId,productList);

也就是:

 public ServerResponse<CartVo> deleteProduct(Integer userId,String productIds){
        List<String> productList = Splitter.on(",").splitToList(productIds);
        if(CollectionUtils.isEmpty(productList)){
            return ServerResponse.createByErrorCodeMessage(ResponseCode.ILLEGAL_ARGUMENT.getCode(),ResponseCode.ILLEGAL_ARGUMENT.getDesc());
        }
        cartMapper.deleteByUserIdProductIds(userId,productList);
        CartVo cartVo = this.getCartVoLimit();
        return ServerResponse.createBySuccess(cartVo);
        
    }

然后把这个方法声明到接口中,以备调用:

ServerResponse<CartVo> deleteProduct(Integer userId,String productIds);

然后就可以在controller中进行调用了:
也就是:
return iCartService.deleteProduct(user.getId(),productIds);

@RequestMapping("delete_product.do")
    @ResponseBody
    public ServerResponse<CartVo> deleteProduct(HttpSession session,String productIds){
        User user = (User)session.getAttribute(Const.CURRENT_USER);
        if(user ==null){
            return ServerResponse.createByErrorCodeMessage(ResponseCode.NEED_LOGIN.getCode(),ResponseCode.NEED_LOGIN.getDesc());
        }
        return iCartService.deleteProduct(user.getId(),productIds);
    }

这样呢,在购物车中删除商品的操作就写完了。

(写的比较乱,以后有时间了在进行整理)

你可能感兴趣的:(电商)