电商高复用购物车业务分析和代码实现
来源:互联网 发布:js控制标签显示隐藏 编辑:程序博客网 时间:2024/06/02 01:10
购物车在一般的业务中是作为一张表在数据库中存储的,如图:
对应java中的实体类,如下:
package com.mmall.pojo;import org.apache.ibatis.type.TypeHandler;import java.util.Date;public class Cart{ private Integer id; private Integer userId; private Integer productId; private Integer quantity; private Integer checked; private Date createTime; private Date updateTime; public Cart(Integer id, Integer userId, Integer productId, Integer quantity, Integer checked, Date createTime, Date updateTime) { this.id = id; this.userId = userId; this.productId = productId; this.quantity = quantity; this.checked = checked; this.createTime = createTime; this.updateTime = updateTime; } public Cart() { super(); } 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 Integer getChecked() { return checked; } public void setChecked(Integer checked) { this.checked = checked; } public Date getCreateTime() { return createTime; } public void setCreateTime(Date createTime) { this.createTime = createTime; } public Date getUpdateTime() { return updateTime; } public void setUpdateTime(Date updateTime) { this.updateTime = updateTime; }}对应购物车中的VO对象productCartVo
package com.mmall.vo;import java.math.BigDecimal;/** * Created by Administrator on 2017/10/19. */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 status;// private BigDecimal productTotalPrice;//这个产品的总价 private Integer productStock;//产品的库存 private Integer productChecked;//是否被选中 private String limitQuantity;//限制数量的一个返回结果 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 getStatus() { return status; } public void setStatus(Integer status) { this.status = status; } 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; }}那么整个购物车应该是由一条条productCartVo对象组成的集合,并解决求总价,单个商品数量,超过库存情况的处理:
private CartVo getCartVoLimit(Integer userId){ CartVo cartVo = new CartVo(); List<Cart> cartList = cartMapper.selectCartByUserId(userId); //将数据库购物车表里的信息转化成前台Vo信息 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.setProductId(cartItem.getProductId()); cartProductVo.setUserId(userId); Product product = productMapper.selectByPrimaryKey(cartItem.getProductId()); if (product!=null){ cartProductVo.setProductMainImage(product.getMainImage()); cartProductVo.setProductSubtitle(product.getSubtitle()); cartProductVo.setProductName(product.getName()); cartProductVo.setStatus(product.getStatus()); cartProductVo.setProductPrice(product.getPrice()); cartProductVo.setProductStock(product.getStock());//库存 //判断库存 int byLimitCount = 0; //当产品的库存大于购物车的数量时 if (product.getStock()>=cartItem.getQuantity()){ //库存充足的时候 byLimitCount=cartItem.getQuantity(); cartProductVo.setLimitQuantity(Const.Cart.LIMIT_NUM_SUCCESS); }else { //超出库存 byLimitCount = product.getStock(); cartProductVo.setLimitQuantity(Const.Cart.LIMIT_NUM_FAIL); //购物车中更新有效库存 Cart cartForQuantity = new Cart(); cartForQuantity.setId(cartItem.getId()); cartForQuantity.setUserId(userId); cartForQuantity.setQuantity(byLimitCount); cartMapper.updateByPrimaryKeySelective(cartForQuantity); } //不仅要把VO设置成最大库存,也要把PO设置成最大库存 cartProductVo.setQuantity(byLimitCount); //计算购物车单行总价 cartProductVo.setProductTotalPrice(BigDecimalUntil.mul(product.getPrice().doubleValue(),cartProductVo.getQuantity())); //获取数据库中购物车选中状态 cartProductVo.setProductChecked(cartItem.getChecked()); } if (cartItem.getChecked() == Const.Cart.CHECKED){ //如果已经勾选,增加到整个购物车的总价中 cartTotalPrice = BigDecimalUntil.add(cartTotalPrice.doubleValue(),cartProductVo.getProductTotalPrice().doubleValue()); } cartProductVoList.add(cartProductVo); } } cartVo.setCartTotalPrice(cartTotalPrice); cartVo.setCartProductVos(cartProductVoList); //是否全选,前端有全选反选这样一个字段,设置一个私有方法 cartVo.setAllChecked(this.getAllCheckedStatus(userId)); cartVo.setImageHost(PropertiesUtil.getProperty("ftp.server.http.prefix")); return cartVo; } private boolean getAllCheckedStatus(Integer userId){ if (userId==null){ return false; } //查购物车产品未被选中的个数,若==0,说明全选 return cartMapper.selectCartProductCheckedStatusByUserId(userId)==0; }在增删改查中的调用:
PS:验证全选反选的java实现:
查询未被选中的个数==0?全选:反选
<select id="selectCartProductCheckedStatusByUserId" resultType="int" parameterType="int"> select count(1) from mmall_cart where user_id = #{userId} and checked = 0 </select>
阅读全文
0 0
- 电商高复用购物车业务分析和代码实现
- 购物车代码分析
- 购物车实现代码
- 购物车业务层
- 实现购物车的代码
- Php实现购物车分析
- 简易购物车业务逻辑类的实现
- 商城购物车业务逻辑
- 商城购物车业务逻辑
- asp.net 实现购物车详细代码
- asp.net 实现购物车详细代码
- asp.net 实现购物车详细代码
- 购物车的 java 代码实现方法
- asp.net 实现购物车详细代码
- php购物车实现代码一例
- javascript购物车实现详细代码讲解
- 实现购物车动态效果代码
- Angular实现简单购物车效果(代码)
- Struts2深入详解--- 认识Struts2
- Switchhosts软件的使用
- 解决从mysql表中多列导出数据到csv合并成一列的问题
- TrickGCD HDU
- 【论文阅读】Illuminating Pedestrians via Simultaneous Detection & Segmentation
- 电商高复用购物车业务分析和代码实现
- Binary Search:162. Find Peak Element
- 【nginx】nginx与apache详细性能对比
- 获取从服务器传来的key-value对
- ajax+post+json+@requestBody走天下
- javascript各种设计模式
- 第二次自考总结
- JS跳出循环的三种方法(break, return, continue)
- 2017-2018 ACM-ICPC, NEERC, Southern Subregional Contest (Online Mirror, ACM-ICPC Rules, Teams Prefer