Shopping cart management
Features:
Added goods; updating the number of items; query the number of items; removal of goods; radio / canceled; Select All / Cancel; cart list
interface
Portal: cart list list; cart add products; update cart quantity of a product; remove the cart a product; cart Select a product; deselect a product; the number of queries Shopping Cart; cart full election; cart Uncheck All
Note
guava interception string:
productIds = "zhangshang, lisi" // string of a plurality of user id List <String> productList = Splitter.on ( ",") splitToList (productIds).;
Calculated quantity of a hidden danger: when the query to the number of empty, null can not be assigned to int. Solution: IFNULL (sum (quantity), 0) Mysql built-in function, if the sum (quantity) is empty, then assigned 0
//mapper.java int selectCartProductCount(@Param(value = "userId") Integer userId); //mapper.xml <select id="selectCartProductCount" parameterType="int" resultType="int"> select IFNULL(sum(quantity),0) as count from eshop_cart where user_id=#{userId} </select>
learning target:
A cart module design: a method of encapsulating a core of the shopping cart; shopping cart every time after operation, invokes the method, which will be assembled and CartVo number check, and returns a CartVo
2 packages a cart core method
/ ** * limitation cart, which determines whether the number of correct * @param the userId * @return * / Private CartVo getCartVoLimit (Integer the userId) { CartVo cartVo new new CartVo = (); // get the user's shopping cart List List < the cart> cartList = cartMapper.selectCartByUserId (userId); // create a CarProductVoList List <CartProductVo> cartProductVoList = Lists.newArrayList (); BigDecimal cartTotalPrice = new new BigDecimal ( "0"); // determine whether the shopping cart is empty if (CollectionUtils .isNotEmpty (cartList)) { // the items fitted to Cart CarProductVo, then add to CarProductVoList for (Cart CartItem: cartList) { CartProductVo cartProductVo new 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()); //判断库存 buyLimitCount = 0 int; IF (product.getStock ()> = cartItem.getQuantity ()) { // when sufficient stock buyLimitCount cartItem.getQuantity = (); cartProductVo.setLimitQuantity (Const.Cart.LIMIT_NUM_SUCCESS); } the else { buyLimitCount product.getStock = (); cartProductVo.setLimitQuantity (Const.Cart.LIMIT_NUM_FAIL); // update cart effective inventory the cart = new new cartForQuantity the 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; } /** * 判断购物车是否全选 * @param userId * @return */ private boolean getAllCheckedStatus(Integer userId){ if(userId==null){ return false; } return cartMapper.selectCartProductCheckedStatusByUserId(userId)==0; }
cartProductVo:
com.eshop.vo Package Penalty for; Import java.math.BigDecimal; / ** An abstract objects * combines product and cart * / public class CartProductVo { Private Integer the above mentioned id; // cart the above mentioned id Private Integer userId; Private productId Integer; Private Integer the quantity; // number of products purchased Private String productName; Private String productSubtitle; Private String productMainImage; Private BigDecimal productPrice; Private Integer productStatus; Private BigDecimal productTotalPrice; // product total private Integer productStock; // number of products inventory Integer productChecked Private; Private String limitQuantity; // limit the number of items returned results public Integer getId() { return id; } public void setId(Integer id) { this.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; } }
CartVo:
package com.eshop.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; } }
3 to solve business calculation precision floating-point loss: Use BigDecimal, attention must use the constructor BigDecimal (String str) string
public static BigDecimal add(double v1,double v2){ BigDecimal b1=new BigDecimal(Double.toString(v1)); BigDecimal b2=new BigDecimal(Double.toString(v2)); return b1.add(b2); }
this method:
package com.eshop.util; import java.math.BigDecimal; import java.math.RoundingMode; public class BigDecimalUtil { private BigDecimalUtil(){ //私有构造器防止被实例化 } public static BigDecimal add(double v1,double v2){ BigDecimal b1=new BigDecimal(Double.toString(v1)); BigDecimal b2=new BigDecimal(Double.toString(v2)); return b1.add(b2); } public static BigDecimal sub(double v1,double v2){ BigDecimal b1=new BigDecimal(Double.toString(v1)); BigDecimal b2=new BigDecimal(Double.toString(v2)); return b1.subtract(b2); } public static BigDecimal mul(double v1,double v2){ BigDecimal b1=new BigDecimal(Double.toString(v1)); BigDecimal b2=new BigDecimal(Double.toString(v2)); return b1.multiply(b2); } public static BigDecimal div(double v1,double v2){ BigDecimal b1=new BigDecimal(Double.toString(v1)); BigDecimal b2=new BigDecimal(Double.toString(v2)); return b1.divide(b2,2, RoundingMode.HALF_UP); //除不尽的情况:取两位小数,四舍五入 } }