版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
电商第十二天;
合并购物车:
1. 看看未登录的时候,是否有购物车存在!
2. 如果未登录的情况下有购物车存在,则进行合并。
3. 合并之后,将未登录之后的购物车删除!
登录:
合并:未登录---登录
合并条件:商品Id 相同
联想(Lenovo)拯救者R720 2
华为小米手机一代 1
小米手机1205一代 1
合并之后:
联想(Lenovo)拯救者R720 2
华为小米手机一代 1
小米手机1205一代 2
plus 1
华为小米手机二代 4
未登录:
华为小米手机二代 4
1205一代 1
plus 1
判断购物车勾选状态
控制器:
http://cart.gmall.com/checkCart
功能分析:
1. user:1:cart 中的所有商品 循环遍历, 将用户选择的状态赋值给isChecked、 th:checked="${cartInfo.isChecked}==1
2. 将被选中的商品,在缓存中从新存储一份:user:1:checked
2.1 给结算下订单的时候使用!user:1:checked 。
点击去结算
功能–合并购物车
由于加入购物车时,用户可能存在登录和未登录两种情况,登录前在cookie中保存了一部分购物车信息,如果用户登录了,那么对应的要把cookie中的购物车合并到数据库中,并且刷新缓存。
思路:用数据库中的购物车列表与传递过来的cookie里的购物车列表循环匹配。
能匹配上的数量相加
匹配不上的插入到数据库中。
最后重新加载缓存
增加判断如果用户是登录状态的,但是cookie里却还有购物车,说明需要把cookie中的购物车合并进来,同时把cookie中的清空。
选中状态的变更
用户每次勾选购物车的多选框,都要把当前状态保存起来。由于可能会涉及更频繁的操作,所以这个勾选状态不必存储到数据库中。保留在缓存状态即可。
同样这里要区分,用户登录和未登录状态。
如果登录,修改缓存中的数据,如果未登录,修改cookie中的数据。
把对应skuId的购物车的信息从redis中取出来,反序列化,修改isChecked标志。
再保存回redis中。
同时保存另一个redis的key 专门用来存储用户选中的商品,方便结算页面使用。
点击结算要做的收尾工作
要解决用户在未登录且购物车中有商品的情况下,直接点击结算。
所以不能直接跳到结算页面,要让用户强制登录后,检查cookie并进行合并后再重定向到结算页面
合并购物车的时候,勾选状态可能会丢掉,因为DB中没有存储!