更新购物车,即修改购物车中的每个商品的参数,
####1、接口编写:
######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 iCartService.update(user.getId(),productId,count);
}
*Service
:
//更新商品到购物车
ServerResponse<CartVo> update(Integer userId,Integer productId,Integer count);
*ServiceImpl
:
// 更新商品到购物车
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.selectCatByUserIdProductId(userId, productId);
if (cart != null) {
cart.setQuantity(count);
}
cartMapper.updateByPrimaryKeySelective(cart);
return this.list(userId);
}
selectCatByUserIdProductId
方法:
*Mapper
:
//根据用户Id和产品Id去查购物车
Cart selectCatByUserIdProductId(@Param("userId") Integer userId, @Param("productId") Integer productId);
*Mappler.xml
:
<select id="selectCatByUserIdProductId" resultMap="BaseResultMap" parameterType="map">
select
<include refid="Base_Column_List"/>
from mmall_cart
where user_id=#{userId}
and product_id=#{productId}
select>
#####2、删除商品:
*Controller
:
// 移除购物车某个产品
@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);
}
*Service
:
//删除购物车中的商品
ServerResponse<CartVo> deleteProduct(Integer userId,String productIds);
*ServiceImpl
:
//删除购物车中的商品
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);
return this.list(userId);
}
deleteByUserIdProductIds
方法:
*Mapper
:
//删除购物车中的商品
int deleteByUserIdProductIds(@Param("userId") Integer userId,@Param("productIdList")List<String> productIdList);
*Mappler.xml
:
<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>
######其中上面的list
是我们封装的一个返回购物车列表信息的接口,,
*Controller
:
//查询购物车中商品
@RequestMapping("list.do")
@ResponseBody
public ServerResponse<CartVo> list(HttpSession session){
User user =(User) session.getAttribute(Const.CURRENT_USER);
if(user == null){
return ServerResponse.createByErrorCodeMessage(ResponseCode.NEED_LOGIN.getCode(),ResponseCode.NEED_LOGIN.getDesc());
}
return iCartService.list(user.getId());
}
*Service
:
//查询购物车中商品
ServerResponse<CartVo> list(Integer userId);
*ServiceImpl
:
//查询购物车中商品
public ServerResponse<CartVo> list(Integer userId) {
CartVo cartVo = this.getCartVoLimit(userId);
return ServerResponse.createBySuccess(cartVo);
}
重点看一下getCartVoLimit
这个方法:
//封装的一个根据用户Id来获取购物车信息的方法
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.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.setProductPrice(product.getPrice());
cartProductVo.setProductStock(product.getStock());
//判断库存
int buyLimitCount =0;
if (product.getStock()>=cartItem.getQuantity()) {
//库存充足的时候
buyLimitCount = cartItem.getQuantity();
cartProductVo.setLimitQuantity(Const.Cart.LIMIT_MUM_SUCCESS);
} else {
//库存的不足的时候
buyLimitCount = product.getStock();
cartProductVo.setLimitQuantity(Const.Cart.LIMIT_MUM_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) {
//如果已经勾选,增加到整个购物车总价中
if(cartProductVo.getProductTotalPrice() == null){
}
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;
}
上面封装的getAllCheckedStatus
方法:
//封装的购物车中商品的是否选中状态
private boolean getAllCheckedStatus(Integer userId) {
if (userId == null) {
return false;
}
return cartMapper.selectCartProductCheckedStatusByUserId(userId) == 0;
}
selectCartProductCheckedStatusByUserId
:
cartMapper
:
//根据用户Id查询商品是否被选中
int selectCartProductCheckedStatusByUserId(Integer userId);
cartMapper.xml
:
<select id="selectCartProductCheckedStatusByUserId" resultType="int" parameterType="int" >
select count(1) from mmall_cart where checked = 0 and user_id = #{userId}
select>
上面方法中使用的CartVo
:
package com.mmall.vo;
import java.math.BigDecimal;
import java.util.List;
public class CartVo {
private List<CartProductVo> cartProductVoList;
private BigDecimal cartTotalPrice;
private Boolean allChecked; //是否都勾选
private String imageHost;
public List<CartProductVo> getCartProductVoList() {
return cartProductVoList;
}
public void setCartProductVoList(List<CartProductVo> cartProductVoList) {
this.cartProductVoList = cartProductVoList;
}
public BigDecimal getCartTotalPrice() {
return cartTotalPrice;
}
public void setCartTotalPrice(BigDecimal cartTotalPrice) {
this.cartTotalPrice = cartTotalPrice;
}
public Boolean getAllChecked() {
return allChecked;
}
public void setAllChecked(Boolean allChecked) {
this.allChecked = allChecked;
}
public String getImageHost() {
return imageHost;
}
public void setImageHost(String imageHost) {
this.imageHost = imageHost;
}
}
ProductVo
:
package com.mmall.vo;
import java.math.BigDecimal;
public class CartProductVo {
//结合了产品和购物车的一个抽象对象
private Integer Id;
private Integer userId;
private Integer productId;
private Integer quantity;//购物车中该商品的数量
private String productName;
private String productSubtitle;
private String productMainImage;
private BigDecimal productPrice;
private Integer productStatus;
private BigDecimal productTotalPrice;
private Integer productStock;
private Integer productChecked; //该产品是否勾选
private String limitQuantity; //限制数量的一个返回结果
public Integer getId() {
return Id;
}
public void setId(Integer id) {
Id = id;
}
public Integer getUserId() {
return userId;
}
public void setUserId(Integer userId) {
this.userId = userId;
}
public Integer getProductId() {
return productId;
}
public void setProductId(Integer productId) {
this.productId = productId;
}
public Integer getQuantity() {
return quantity;
}
public void setQuantity(Integer quantity) {
this.quantity = quantity;
}
public String getProductName() {
return productName;
}
public void setProductName(String productName) {
this.productName = productName;
}
public String getProductSubtitle() {
return productSubtitle;
}
public void setProductSubtitle(String productSubtitle) {
this.productSubtitle = productSubtitle;
}
public String getProductMainImage() {
return productMainImage;
}
public void setProductMainImage(String productMainImage) {
this.productMainImage = productMainImage;
}
public BigDecimal getProductPrice() {
return productPrice;
}
public void setProductPrice(BigDecimal productPrice) {
this.productPrice = productPrice;
}
public Integer getProductStatus() {
return productStatus;
}
public void setProductStatus(Integer productStatus) {
this.productStatus = productStatus;
}
public BigDecimal getProductTotalPrice() {
return productTotalPrice;
}
public void setProductTotalPrice(BigDecimal productTotalPrice) {
this.productTotalPrice = productTotalPrice;
}
public Integer getProductStock() {
return productStock;
}
public void setProductStock(Integer productStock) {
this.productStock = productStock;
}
public Integer getProductChecked() {
return productChecked;
}
public void setProductChecked(Integer productChecked) {
this.productChecked = productChecked;
}
public String getLimitQuantity() {
return limitQuantity;
}
public void setLimitQuantity(String limitQuantity) {
this.limitQuantity = limitQuantity;
}
}
####2、接口测试:
#####1、用户购物车信息接口测试:
#####2、更新商品数量到购物车接口测试:
#####3、移除购物车某个产品接口测试:我们可以传入商品信息id单个或多个进行删除~