数据模型分析
一:
购物车Vo
购物项Vo
商品集合信息Vo
二:
用户To
三:
写一个拦截器判断用户是否登录
四:
若当前用户为已经注册登录过的用户而不是临时用户,需要合并临时购物车的数据。
新建一个拦截器并注册
新建threadLocal来共享线程数据,在preHandle拦截方法执行完,在threadLocal共享用户To信息。 首先,在preHandle方法中,如果用户已经登录,从session中获取用户信息id,设置进用户To信息
public static ThreadLocal<UserInfoTo> toThreadLocal = new ThreadLocal<>();
然后无论是否登录,如果成功获取到了cookie中的临时用户的唯一标识,设置进用户To信息。
否则给一个uuid来作为用户唯一标识设置进用户To,这时候是临时用户。
在业务执行结束之后,若当前用户是临时用户或者已登录但临时用户标识为false,在postHandle方法设置他的唯一标识信息。
添加商品到购物车
首先在购物车方法中获取要操作的购物车信息
通过ThreadLocal获取用户信息,若是成功获取用户信息id,说明是注册登录的用户,购物车标识为用户id,否则说明这个用户是临时用户,购物车标识为UserKey
若是Redis中已经存在这种商品,根据新增的数量修改商品数量即可
若是Redis中不存在这种商品,开启两个异步任务,分别调用远程接口去查询商品信息和商品的销售属性
远程调用接口查询相关信息
购物车表单重复提交问题解决
重定向到添加成功页面
其他功能
对购物车数据项的删改查及选中