購物車實現(xiàn)

public class CartInterceptor implements HandlerInterceptor {

//    ThreadLocal 同一線程共享數(shù)據(jù)
    public static ThreadLocal<UserInfoTo> threadLocal = new ThreadLocal<>();
TEMP_USER_COOKIE_NAME="ebao-user-key";
 
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
//UserInfoTo()對象 有userId,userKey,isTemp。
//從session獲取用戶信息
User user=session.getUser();

        if (user!= null) {
            // 用戶登錄了
            userInfoTo.setUserId(memberRespVo.getId());
        }

        //  判斷當前瀏覽器中的cookie中是否存在臨時用戶的標識的cookie
        Cookie[] cookies = request.getCookies();
        if (cookies != null && cookies.length > 0) {
            for (Cookie cookie : cookies) {
                String name = cookie.getName();
                if (name.equals(CartConstant.TEMP_USER_COOKIE_NAME)) {
            //有臨時用戶把cookie里的uuid給他,并標識為臨時用戶
                UserInfoTo.userKey(cookie.getValue());
                    UserInfoTo.isTemp(true); // 設置辨別是否有臨時用戶的boolean字段
                }
            }
        }

        // 如果沒有臨時用戶,則系統(tǒng)自動分配一個
        if (StringUtils.isEmpty(UserInfoTo.userKey)) {
            String uuid = UUID.randomUUID().toString();
            userInfoTo.userKey(uuid);
        }
        // 把封裝的用戶信息放到ThreadLocal
        threadLocal.set(userInfoTo);
        return true;
    }

    /**
     * 目標方法執(zhí)行之后 - 把分配的臨時用戶添加到cookie
     * @param request
     * @param response
     * @param handler
     * @param modelAndView
     */
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) {

        // TODO cookie過期修改TempUser狀態(tài)
        UserInfoTo userInfoTo = threadLocal.get();
        if (!userInfoTo.isTempUser()) { // 如果沒有臨時用戶才需要添加cookie
            Cookie cookie = new Cookie(CartConstant.TEMP_USER_COOKIE_NAME, UserInfoTo.userKey());
            cookie.setDomain("ebao.com");
            cookie.setMaxAge(1個月);
            response.addCookie(cookie);
        }

    }
}
購物車Redis數(shù)據(jù)結構Hash
cart:1{"sku1":{"name":商品1,"price":200}}

  // 判斷用戶是否登陸了
     
        if (userInfoTo.getUserId() != null) {
            // 登錄了,獲取登錄用戶的購物車和臨時購物車進行合并
    
            // 1、判斷臨時購物車是否有數(shù)據(jù)
          
                // 臨時購物車有數(shù)據(jù),進行合并
              
                // 合并完成 清除臨時購物車數(shù)據(jù)
                clearCart(tempCartKey);
            }
            // 2、合并后,再獲取登錄后用戶的購物車
            List<CartItem> cartItems = getCartItems(cartKey);
            cart.setItems(cartItems);

        } else {
            // 未登錄 獲取臨時購物車所有購物項
         
        }
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容