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>