购物车系统
增、删、改、查
添加购物车业务逻辑:
在购物车系统创建一个拦截器,来判断当前用户有没有登录,不管登录不登录,都要能够使用购物车。这里的拦截并不是用来拦截请求,而是判断用户有没有登录,并把登录用户信息存入request中。
拦截器:
1. 从Cookie中取token
2. 如果没有取到token,未登录状态,直接放行
3. 如果取到token,需要调用sso系统的服务,根据token查用户信息
① 如果查不到,说明登录已过期,直接放行
② 如果查到,说明用户已登录,把用户信息放到request中,放行。
Controller:
1. 判断用户是否登录(通过判断request中是否有user对象)
2. 如果是登录状态,将添加到购物车中的商品信息存入redis(以hash数据类型:userId,itemId,item对象的json格式)
① 判断商品是否存在(根据userId和itemId去查redis)
② 如果存在,商品数量相加
③ 如果不存在,根据商品id从数据库取商品信息,并将之以hash类型存入redis中
④ 返回添加购物车成功页面
3. 如果是未登录状态,将添加到购物车中的商品信息存入Cookie中
① 从Cookie中取出商品列表
② 遍历商品列表,如果找到对应商品,数量加1
③ 如果找不到对应商品,说明Cookie中该商品不存在,根据商品id查询商品信息,得到一个商品对象,添加到商品列表中,写入Cookie
④ 返回添加购物车成功页面
查询购物车业务逻辑:
拦截器:
1. 从Cookie中取token
2. 如果没有取到token,未登录状态,直接放行
3. 如果取到token,需要调用sso系统的服务,根据token查用户信息
① 如果查不到,说明登录已过期,直接放行
② 如果查到,说明用户已登录,把用户信息放到request中,放行。
Controller:
1. 判断用户是否登录(通过判断request中是否有user对象)
2. 如果是登录状态
① 从Cookie中取购物车列表
② 如果不为空,把cookie中的购物车商品和服务端的购物车商品合并,并把cookie中的购物车数据删除
③ 从服务端取出商品列表,把商品列表传给页面
3. 如果是未登录状态
① 从Cookie中取出购物车列表
② 把商品列表传给页面
修改购物车中商品数量业务逻辑:
拦截器:
1. 从Cookie中取token
2. 如果没有取到token,未登录状态,直接放行
3. 如果取到token,需要调用sso系统的服务,根据token查用户信息
① 如果查不到,说明登录已过期,直接放行
② 如果查到,说明用户已登录,把用户信息放到request中,放行。
Controller:
1. 判断用户是否登录(通过判断request中是否有user对象)
2. 如果是登录状态
① 根据userId和itemId从redis中取出商品信息
② 更新商品数量
③ 写人redis
3. 如果是未登录状态
① 从Cookie中取出商品列表
② 遍历商品列表找到对应商品
③ 更新商品数量
④ 将商品列表写入cookie
删除购物车商品的业务逻辑:
拦截器:
1. 从Cookie中取token
2. 如果没有取到token,未登录状态,直接放行
3. 如果取到token,需要调用sso系统的服务,根据token查用户信息
① 如果查不到,说明登录已过期,直接放行
② 如果查到,说明用户已登录,把用户信息放到request中,放行。
Controller:
1. 判断用户是否登录(通过判断request中是否有user对象)
2. 如果是登录状态
① 根据userId和itemId将redis中存的数据删除掉
② 跳转到删除购物车成功页面
3. 如果是未登录状态
① 从Cookie中取出商品列表
② 遍历商品列表,找到对应商品
③ 删除商品
④ 再将商品列表写入Cookie
⑤ 跳转到删除购物车成功页面