|
|
|
@ -13,93 +13,128 @@ import java.util.Map;
|
|
|
|
|
* 购物车对象
|
|
|
|
|
*/
|
|
|
|
|
public class Cart {
|
|
|
|
|
// 注释掉的代码表示之前可能考虑过直接存储总数和总价,但在此实现中,选择动态计算这些值
|
|
|
|
|
//private Integer totalCount;
|
|
|
|
|
//private BigDecimal totalPrice;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 获取购物车中所有商品的总数量
|
|
|
|
|
*/
|
|
|
|
|
public Integer getTotalCount() {
|
|
|
|
|
Integer totalCount = 0;
|
|
|
|
|
// 初始化总数量为0
|
|
|
|
|
for (Map.Entry<Integer,CartItem>entry : items.entrySet()) {
|
|
|
|
|
// 遍历购物车中的每一项
|
|
|
|
|
totalCount += entry.getValue().getCount();
|
|
|
|
|
// 累加每一项的数量
|
|
|
|
|
}
|
|
|
|
|
return totalCount;
|
|
|
|
|
// 返回总数量
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 获取购物车中所有商品的总价格
|
|
|
|
|
*/
|
|
|
|
|
public BigDecimal getTotalPrice() {
|
|
|
|
|
BigDecimal totalPrice = new BigDecimal(0);
|
|
|
|
|
// 初始化总价格为0
|
|
|
|
|
for (Map.Entry<Integer,CartItem>entry : items.entrySet()) {
|
|
|
|
|
// 遍历购物车中的每一项
|
|
|
|
|
totalPrice = totalPrice.add(entry.getValue().getTotalPrice());
|
|
|
|
|
// 累加每一项的总价格
|
|
|
|
|
}
|
|
|
|
|
return totalPrice;
|
|
|
|
|
// 返回总价格
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 获取购物车中的所有商品项
|
|
|
|
|
*/
|
|
|
|
|
public Map<Integer, CartItem> getItems() {
|
|
|
|
|
return items;
|
|
|
|
|
// 返回购物车中的商品项
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 设置购物车中的所有商品项
|
|
|
|
|
*/
|
|
|
|
|
public void setItems(Map<Integer, CartItem> items) {
|
|
|
|
|
this.items = items;
|
|
|
|
|
// 设置购物车中的商品项
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* key是商品编号,value是商品信息
|
|
|
|
|
* 商品项存储的Map,key是商品编号,value是商品信息,使用LinkedHashMap保持插入顺序
|
|
|
|
|
*/
|
|
|
|
|
private Map<Integer,CartItem> items = new LinkedHashMap<Integer, CartItem>();
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 重写toString方法,用于打印购物车信息
|
|
|
|
|
*/
|
|
|
|
|
@Override
|
|
|
|
|
public String toString() {
|
|
|
|
|
return "Cart{" +
|
|
|
|
|
"totalCount=" + getTotalCount() +
|
|
|
|
|
// 总数量
|
|
|
|
|
", totalPrice=" + getTotalPrice() +
|
|
|
|
|
// 总价格
|
|
|
|
|
", items=" + items +
|
|
|
|
|
// 商品项
|
|
|
|
|
'}';
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 添加商品项
|
|
|
|
|
* @param cartItem
|
|
|
|
|
* 添加商品项到购物车
|
|
|
|
|
* @param cartItem 要添加的商品项
|
|
|
|
|
*/
|
|
|
|
|
public void addItem(CartItem cartItem) {
|
|
|
|
|
//先查看购物车中是否包含次商品,如果有的话,数量更新,总金额更新;如果没有,直接放到集合中即可
|
|
|
|
|
// 先查看购物车中是否包含此商品
|
|
|
|
|
CartItem item = items.get(cartItem.getId());
|
|
|
|
|
|
|
|
|
|
if(item == null) {
|
|
|
|
|
//之前没有添加过此商品
|
|
|
|
|
// 之前没有添加过此商品,直接添加到购物车中
|
|
|
|
|
items.put(cartItem.getId(),cartItem);
|
|
|
|
|
} else {
|
|
|
|
|
item.setCount(item.getCount() + 1);//数量累计
|
|
|
|
|
item.setTotalPrice(item.getPrice().multiply(new BigDecimal(item.getCount())));//更新总金额
|
|
|
|
|
// 购物车中已有此商品,数量加1,并更新总金额
|
|
|
|
|
item.setCount(item.getCount() + 1);
|
|
|
|
|
// 数量累计
|
|
|
|
|
item.setTotalPrice(item.getPrice().multiply(new BigDecimal(item.getCount())));
|
|
|
|
|
// 更新总金额
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 删除商品项
|
|
|
|
|
* @param id
|
|
|
|
|
* 从购物车中删除指定编号的商品项
|
|
|
|
|
* @param id 要删除的商品项的编号
|
|
|
|
|
*/
|
|
|
|
|
public void deleteItem(Integer id) {
|
|
|
|
|
items.remove(id);
|
|
|
|
|
// 从购物车中删除指定编号的商品项
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 清空购物车
|
|
|
|
|
* 清空购物车中的所有商品项
|
|
|
|
|
*/
|
|
|
|
|
public void clear() {
|
|
|
|
|
items.clear();
|
|
|
|
|
// 清空购物车
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 修改商品数量
|
|
|
|
|
* @param id
|
|
|
|
|
* @param count
|
|
|
|
|
* 修改购物车中指定编号的商品项的数量
|
|
|
|
|
* @param id 商品项的编号
|
|
|
|
|
* @param count 新的数量
|
|
|
|
|
*/
|
|
|
|
|
public void updateCount(Integer id,Integer count) {
|
|
|
|
|
//先查看购物车中是否包含次商品,如果有的话,数量更新,总金额更新;
|
|
|
|
|
// 先查看购物车中是否包含此商品项
|
|
|
|
|
CartItem cartItem = items.get(id);
|
|
|
|
|
|
|
|
|
|
if(cartItem != null) {
|
|
|
|
|
cartItem.setCount(count);
|
|
|
|
|
cartItem.setTotalPrice(cartItem.getPrice().multiply(new BigDecimal(cartItem.getCount())));
|
|
|
|
|
if(cartItem != null) {
|
|
|
|
|
// 购物车中已有此商品项,修改数量并更新总金额
|
|
|
|
|
cartItem.setCount(count);
|
|
|
|
|
// 修改数量
|
|
|
|
|
cartItem.setTotalPrice(cartItem.getPrice().multiply(new BigDecimal(cartItem.getCount())));
|
|
|
|
|
// 更新总金额
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|