0
点赞
收藏
分享

微信扫一扫

Vo设计 需要计算属性

购物车 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

image.png

  • 整个购物车存放的商品信息 需要计算的属性需要重写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;
}
举报

相关推荐

0 条评论