表現層
/**
* 更新購物車
*/
public E3Result updateCartNum(long userId, long itemId, int num) {
//根據用戶id查詢用戶列表
String json = jedisClient.hget(REDIS_CART_PRE+":"+userId, itemId+"");
//更新商品數量
TbItem item = JsonUtils.jsonToPojo(json, TbItem.class);
item.setNum(num);
//寫入Redis
jedisClient.hset(REDIS_CART_PRE+":"+userId, itemId+"",JsonUtils.objectToJson(item));
return E3Result.ok();
}
/**
* 刪除購物車
*/
public E3Result deleteCartItem(long userId, long itemId) {
//根據用戶id查詢用戶列表
jedisClient.hdel(REDIS_CART_PRE+":"+userId, itemId+"");
return E3Result.ok();
}
表現層的實現
/**
* 更新購物車商品的數量
*/
@RequestMapping("/cart/update/num/{itemId}/{num}")
@ResponseBody
public E3Result updateCatNum(@PathVariable Long itemId,@PathVariable Integer num,
HttpServletRequest request,HttpServletResponse response){
//判斷用戶是否登錄
TbUser user = (TbUser) request.getAttribute("user");
if(user !=null){
cartService.updateCartNum(user.getId(), itemId, num);
return E3Result.ok();
}
//1.取出購物車的列表
List<TbItem> itemList = getCartListFromCookie(request);
//2.遍歷列表,找到對應的商品
for(TbItem item :itemList){
if(item.getId().longValue() == itemId){
//3.更新數量
item.setNum(num);
break;
}
}
//4.把購物車列表寫回Cookie
CookieUtils.setCookie(request, response,"cart",JsonUtils.objectToJson(itemList),COOKIE_CART_EXPIRE,true);
//5.返回成功
return E3Result.ok();
}
/**
* 刪除購物車商品
*/
@RequestMapping("/cart/delete/{itemId}")
public String deleteCartItem(@PathVariable Long itemId, HttpServletRequest request,
HttpServletResponse response) {
//判斷用戶是否為登錄狀態(tài)
TbUser user = (TbUser) request.getAttribute("user");
//如果是登錄狀態(tài),把購物車寫入Redis
if (user != null) {
//保存到服務器
cartService.deleteCartItem(user.getId(), itemId);
//返回邏輯視圖
return "redirect:/cart/cart.html";
}
//從cookie中取購物車列表
List<TbItem> cartList = getCartListFromCookie(request);
//遍歷列表椎瘟,找到要刪除的商品
for (TbItem tbItem : cartList) {
if (tbItem.getId().longValue() == itemId) {
//刪除商品
cartList.remove(tbItem);
//跳出循環(huán)
break;
}
}
//把購物車列表寫入cookie
CookieUtils.setCookie(request, response, "cart", JsonUtils.objectToJson(cartList), COOKIE_CART_EXPIRE, true);
//返回邏輯視圖,跳轉到下面的頁面
return "redirect:/cart/cart.html";
}
觀察結果
圖片.png
圖片.png