SSM框架写的购物车的功能和业务逻辑

时间:2022-05-15 16:37:00
购物车功能的业务逻辑
将商品放到redis中,每一个用户都有自己的购物车,所以redis中的key是用户的id,value是list<string>。第一次加入购物车时,需要先new一个集合,将商品的id和数量加入到集合里面;第二次往购物车中添加商品时 ,需要判断是否已经存在该商品,如果存在该商品就修改之前加入购物车中商品的数量,如果购物车中没有要添加的商品可以通过list.add将商品添加进购物车中。


2、具体实现步骤
     1>、redis中的key的获取:先获取用户的id,根据cookie的一个工具类CookieUtils中取出UUID (代码:cookieUtils.getCookieValue(request,""),在通过redis得到UUID,返回一个string类型的json,把json字符串转换成user对象,然后通过user对象得到用户的信息,得到key;
代码:// 1. 组成key
// 1.1 取出uuid
String uuid = CookieUtils.getCookieValue(request, "TT_TOKEN");
// 1.2 根据uuid取出用户信息json字符串
String json = jedisClusterDao.get(uuid);
// 1.3 把json字符串转换成TbUser
TbUser tbUser = JsonUtils.jsonToPojo(json, TbUser.class);
// 1.4 拼接key
String key = "cart:" + tbUser.getUsername();
     2>、redis中的value的获取:通过判断是否存在key来判断是否是第一次将物品添加到购物车,如果存在key说明购物车中有商品,循环遍历购物车中的商品,判断从用户端传过来的商品id是否等于购物车中某个商品的id,如果相等,那么就可以将该商品的数量进行修改,如果从客户端传过来的商品的id和购物陈中某个商品的id不相等是,就直接将商品的数量进行赋值,最后将修改了的数据存放到redis中(返回值为string类型的redis)。如果是第一次将商品加入到购物车中时,需要先new一个list,然后将商品的信息添加到list中,最后将商品放到redis中。
代码:// 2. value
if (jedisClusterDao.exist(key)) {
String cartJson = jedisClusterDao.get(key);
if (cartJson != null && !cartJson.equals("")) {
// 购物车中有商品信息
List<TbItem> list = JsonUtils.jsonToList(cartJson, TbItem.class);
TbItem item = null;
// 购物车中是否有这个商品信息
for (TbItem tbItem : list) {


// 两个Long类型不能使用==比较值
if ((long) tbItem.getId() == (long) id) {
item = tbItem;
}
}
// 没有商品信息
if (item == null) {
item = tbItemDubboService.selById(id);
item.setNum(num);
list.add(item);
} else {
item.setNum(item.getNum() + num);
}
// 放入到redis中
String result = jedisClusterDao.set(key, JsonUtils.objectToJson(list));
return result;
}
}
// 第一次访问购物车
List<TbItem> list = new ArrayList<>();
TbItem item = tbItemDubboService.selById(id);
item.setNum(num);
list.add(item);
String result = jedisClusterDao.set(key, JsonUtils.objectToJson(list));
return result;