1.需要实现哪些功能+实现采用技术
购物车分为离线与在线购物车,未登录时可以将商品添加到购物车中,此时登录后,离线购物车中的商品会自动被添加到用户购物车中,当然只针对同一浏览器
采用的是redis进行存储,因为考虑到购物车中的数据,增删改查可能都很频繁,所以不放到 持久数据库中,具体需要实现的功能如下
2.数据模型分析+VO编写
先打开京东,看看京东的购物车中都有些啥东西,分析就不用多说了,基本就那些属性:图片,单价,总价,属性,数量等等
具体包含哪些属性直接看下面vo吧
创建包跟类 购物车类 与 购物项类
因为总价都是通过单价*数量 得到的,所以这里get方法需要自定义,所以不使用@Data注解
购物车实体类
package com.atguigu.gulimall.cart.vo;
/**
* @author rengang
* @version 1.0
* @date 2021/5/6 15:22
*/
import java.math.BigDecimal;
import java.util.List;
/**
* 整个购物车
* 需要计算的属性,必须重写他的get方法,保证每次获取属性都会进行计算
*/
public class Cart {
List<CartItem> items;
private Integer countNum;//商品数量
private Integer countType;//商品类型数量
private BigDecimal totalAmount;//商品总价
private BigDecimal reduce = new BigDecimal("0.00");//减免价格
public List<CartItem> getItems() {
return items;
}
public void setItems(List<CartItem> items) {
this.items = items;
}
public Integer getCountNum() {
int count = 0;
if(items != null && items.size() > 0){
for(CartItem item : items){
count += item.getCount();
}
}
return count;
}
public Integer getCountType() {
int count = 0;
if(items != null && items.size() > 0){
for(CartItem item : items){
count += 1;
}
}
return count;
}
public BigDecimal getTotalAmount() {
BigDecimal amount = new BigDecimal("0");
// 1、计算购物项总价
if(items != null && items.size() > 0){
for(CartItem item : items){
BigDecimal totalPrice = item.getTotalPrice();
amount = amount.add(totalPrice);
}
}
//2、减去优惠总价
BigDecimal subtract = amount.subtract(getReduce());
return subtract;
}
public BigDecimal getReduce() {
return reduce;
}
public void setReduce(BigDecimal reduce) {
this.reduce = reduce;
}
}
购物项实体类
package com.atguigu.gulimall.cart.vo;
/**
* @author rengang
* @version 1.0
* @date 2021/5/6 15:22
*/
import java.math.BigDecimal;
import java.util.List;
/**
* 购物项内容
*/
public class CartItem {
private Long skuId;
private Boolean check = true;
private String title;
private String image;
private List<String> skuAttr;
private BigDecimal price;
private Integer count;
private BigDecimal totalPrice;
public Long getSkuId() {
return skuId;
}
public void setSkuId(Long skuId) {
this.skuId = skuId;
}
public Boolean getCheck() {
return check;
}
public void setCheck(Boolean check) {
this.check = check;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getImage() {
return image;
}
public void setImage(String image) {
this.image = image;
}
public List<String> getSkuAttr() {
return skuAttr;
}
public void setSkuAttr(List<String> skuAttr) {
this.skuAttr = skuAttr;
}
public BigDecimal getPrice() {
return price;
}
public void setPrice(BigDecimal price) {
this.price = price;
}
public Integer getCount() {
return count;
}
public void setCount(Integer count) {
this.count = count;
}
/**
* 计算当前项的总价
* @return
*/
public BigDecimal getTotalPrice() {
return this.price.multiply(new BigDecimal("" + this.count));
}
public void setTotalPrice(BigDecimal totalPrice) {
this.totalPrice = totalPrice;
}
}