93、商城业务---购物车---获取&合并购物车
当我们点击我的购物车按钮时,会显示所有的购物车。如果还没有登录,就显示临时购物车的内容。如果已经登录,就将临时购物车的内容合并到登录购物车,并清空临时购物车,然后显示登录购物车。
1、controller层

2、serviceImpl层
/**
* 获取整个购物车
* @return
*/
@Override
public Cart getCart() throws ExecutionException, InterruptedException {
Cart cart = new Cart();
//1、先判断有没有登录
UserInfoTo userInfoTo = CartInterceptor.threadLocal.get();
if (userInfoTo.getUserId()!=null){ //已登录
String cartKey = CART_PREFIX + userInfoTo.getUserId();
//如果临时购物车的数据还没有合并,要先进行合并,然后清空临时购物车
List<CartItem> tempCartItems = this.getCartItems(CART_PREFIX + userInfoTo.getUserKey());
if (tempCartItems!=null){
//添加到登录购物车
for (CartItem tempCartItem : tempCartItems) {
this.addToCart(tempCartItem.getSkuId(), tempCartItem.getCount());
}
//清空购物车
this.deleteCart(CART_PREFIX + userInfoTo.getUserKey());
}
//获取登陆后的购物车【包含合并的临时购物车的数据】
List<CartItem> cartItems = getCartItems(CART_PREFIX + userInfoTo.getUserId());
cart.setItems(cartItems);
}else { //未登录
List<CartItem> items = this.getCartItems(CART_PREFIX + userInfoTo.getUserKey());//获取临时购物车的所有购物项
cart.setItems(items);
}
return cart;
}
/**
* 清空购物车
* @param cartKey
*/
@Override
public void deleteCart(String cartKey) {
redisTemplate.delete(cartKey);
}
/**
* 获取到我们要操作的购物车
* @return
*/
private BoundHashOperations<String, Object, Object> getCartOps() {
//先得到当前用户信息
UserInfoTo userInfoTo = CartInterceptor.threadLocal.get();
String cartKey = "";
if (userInfoTo.getUserId() != null) { //已登录
//gulimall:cart:1
cartKey = CART_PREFIX + userInfoTo.getUserId();
} else {
cartKey = CART_PREFIX + userInfoTo.getUserKey();
}
//绑定指定的key操作Redis
BoundHashOperations<String, Object, Object> operations = redisTemplate.boundHashOps(cartKey);
return operations;
}
/**
* 获取购物车里面的所有购物项
*/
private List<CartItem> getCartItems(String cartKey){
BoundHashOperations<String, Object, Object> hashOps = redisTemplate.boundHashOps(cartKey); //获取redis的hash
List<Object> values = hashOps.values();
List<CartItem> items = null;
if (values!=null && values.size()>0){ //购物车有数据
items = values.stream().map((value) -> {
String s = (String) value;
CartItem cartItem = JSON.parseObject(s, CartItem.class);
return cartItem;
}).collect(Collectors.toList());
}
return items;
}

浙公网安备 33010602011771号