文章目录
- 一,244-商城业务-购物车-获取&合并购物车
- 1,在线购物车和临时购物车的合并
- 二,245-商城业务-购物车-选中购物项
- 三,246-商城业务-购物车-改变购物项数量
- 四,247-商城业务-购物车-删除购物项
- 五,修改购物车数据的总结
这一节的主要内容:
- 处理进入购物车,显示购物车中的商品清单
- 这里需要注意的是,如果是登录后进入购物车,需要将临时购物车中的数据合并到在线购物车中,并清除临时购物车中的内容
一,244-商城业务-购物车-获取&合并购物车
1,在线购物车和临时购物车的合并
后台代码定义了一个名为 getCart
的方法,该方法的主要目的是从缓存中获取用户的购物车信息,并处理登录与未登录状态下的购物车数据合并。
public CartVo getCart() throws ExecutionException, InterruptedException {
CartVo cartVo = new CartVo();
UserInfoTo userInfoTo = CartInterceptor.toThreadLocal.get();
if (userInfoTo.getUserId() != null) {
//1、登录
String cartKey = CART_PREFIX + userInfoTo.getUserId();
//临时购物车的键
String temptCartKey = CART_PREFIX + userInfoTo.getUserKey();
//2、如果临时购物车的数据还未进行合并
List<CartItemVo> tempCartItems = getCartItems(temptCartKey);
if (tempCartItems != null) {
//临时购物车有数据需要进行合并操作
for (CartItemVo item : tempCartItems) {
addToCart(item.getSkuId(),item.getCount());
}
//清除临时购物车的数据
clearCartInfo(temptCartKey);
}
//3、获取登录后的购物车数据【包含合并过来的临时购物车的数据和登录后购物车的数据】
List<CartItemVo> cartItems = getCartItems(cartKey);
cartVo.setItems(cartItems);
} else {
//没登录
String cartKey = CART_PREFIX + userInfoTo.getUserKey();
//获取临时购物车里面的所有购物项
List<CartItemVo> cartItems = getCartItems(cartKey);
cartVo.setItems(cartItems);
}
return cartVo;
}
-
初始化:
- 创建一个
CartVo
对象用于封装返回给调用者的购物车视图信息。 - 通过线程本地变量 (
ThreadLocal
) 获取当前用户的信息 (UserInfoTo
对象),其中包含了用户 ID 和用户 Key。
- 创建一个
-
处理已登录用户:
- 如果用户已登录(即
userId
不为空):- 构造用户的购物车键 (
cartKey
) 和临时购物车键 (temptCartKey
)。 - 检查临时购物车是否存在数据:
- 如果存在,则将临时购物车中的每一件商品添加到用户的正式购物车中。
- 清空临时购物车。
- 最终从用户的正式购物车 (
cartKey
) 中获取所有购物项并设置到CartVo
的items
属性中。
- 构造用户的购物车键 (
- 如果用户已登录(即
-
处理未登录用户:
- 如果用户未登录(即
userId
为空):- 使用用户 Key 构造临时购物车键 (
cartKey
)。 - 从临时购物车中获取所有购物项并设置到
CartVo
的items
属性中。
- 使用用户 Key 构造临时购物车键 (
- 如果用户未登录(即
-
返回结果:
- 返回填充了购物车数据的
CartVo
对象。
- 返回填充了购物车数据的
注意,这里有一些假设:
- 方法
getCartItems
用于从缓存中获取指定键的购物项列表。 - 方法
addToCart
用于向用户的购物车中添加商品。 - 方法
clearCartInfo
用于清空特定购物车键的购物车信息。 - 常量
CART_PREFIX
是用来构建缓存键的前缀。
该方法确保无论是已登录还是未登录的用户都能正确地获取到其购物车信息,并且对于已登录用户还会合并之前临时购物车中的数据。
二,245-商城业务-购物车-选中购物项
这一节的主要内容是,在购物车中:
- 但用户选中一些商品后,将选择的商品发送到后台,后台修改保存在缓存中的商品信息,主要是修改其中的选中与否属性,让后让页面重定向到购车清单界面,相当于刷新当前界面
关于购物车的选中逻辑,总结如下:
-
购物车选择与否作为一个属性,保存在购物车项对象中
-
加购后默认是选中的
-
用户取消或者选中购物车中的商品,都会发出请求
-
后台接受到请求后,修改保存在redis中的商品的check属性
-
重定向到购物车清单界面,后台根据是否选中重新计算总价
-
每次点击选中或取消选中都会向后台发出请求,这样是不是会刷新界面,用户体验不好
-
向后台发出请求,是有必要的,因为总价的计算,涉及优惠信息,而优惠是和用户选中的商品有关的,前端处理不了
三,246-商城业务-购物车-改变购物项数量
这一节的主要内容是处理前端在购物车界面增减数量的功能,这是第4个修改购物车数据的功能。
四,247-商城业务-购物车-删除购物项
这一节的主要内容是处理前端在购物车界面删除商品的功能,这是第5个修改购物车数据的功能。
五,修改购物车数据的总结
有以下几个涉及修改购物车数据的逻辑点:
- ① 加购
- ② 用户登录后,在线购物车合并临时购物车数据
- ③ 删除购物车数据
- ④ 选中或者取消选中购物车中的商品
- ⑤ 购物车中的商品的数量增减