购物车 Vo设计 需要计算属性
- 用户可以在登录状态下将商品添加到购物车【用户购物车/在线购物车】
- 用户可以在未登录状态下将商品添加到购物车【游客购物车/高线购物车/临时购物车】
购物车服务搭建
server.port=2009
spring.application.name=gulimall-cart
spring.cloud.nacos.server-addr=127.0.0.1:8848
//getway
- id: gulimall_cart_route //id
uri: lb://gulimall-cart //路由过去的名字
predicates:
- Host=cart.gulimall.com //所有cart 过来的 服务都转给cart
@EnableFeignClients
@EnableDiscoveryClient //开启nacos 注册发现
@SpringBootApplication(exclude = DataSourceAutoConfiguration.class) //排除启动mysql
/*
* 去购物车页面的请求
* 浏览器有一个cookie:user-key 标识用户的身份,一个月过期
* 如果第一次使用jd的购物车功能,都会给一个临时的用户身份:
* 浏览器以后保存,每次访问都会带上这个cookie;
*
* 登录:session有
* 没登录:按照cookie里面带来user-key来做
* 第一次,如果没有临时用户,自动创建一个临时用户
*
* @return
*/
redis 存储方式用Map<String K1, Map<String k2,CartitemInfo>>
k1:标识每一个用户的购物车
k2:购物项的商品id
- 整个购物车存放的商品信息 需要计算的属性需要重写get方法,保证每次获取属性都会进行计算
设计vo
设计商品总价 时候
private BigDecimal totalPrice;
/**
* 计算当前购物项总价
* @return
*/
public BigDecimal getTotalPrice() {
// 等于单价 *数量
return this.price.multiply(new BigDecimal("" + this.count));
}
public void setTotalPrice(BigDecimal totalPrice) {
this.totalPrice = totalPrice;
}
///购物车实体类
/**
* 购物车子项信息
*/
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");
// 计算购物项总价
if (!CollectionUtils.isEmpty(items)) {
for (CartItemVo cartItem : items) {
if (cartItem.getCheck()) {
amount = amount.add(cartItem.getTotalPrice());
}
}
}
// 计算优惠后的价格
return amount.subtract(getReduce());
}
public BigDecimal getReduce() {
return reduce;
}
public void setReduce(BigDecimal reduce) {
this.reduce = reduce;
}