1. 程式人生 > >對添加購物車流程過程的分析淺解

對添加購物車流程過程的分析淺解

根據 購物 items 用戶 setpath dir 表示 失效 hash

在電商項目上都會涉及到對購物單車添加的功能,首先了解對購物車的流程;

市面上對最大的兩個電商平臺就是阿裏和京東,阿裏呢 是必須在登錄的狀態下才能添加購物車。京東呢 是可以在未登錄的狀態下添加購物車。

個人覺得相比較而言呢,京東的更人性化一點。所以在一下介紹呢就會以京東的模式作為介紹,

即分為 登錄狀態和 未登錄狀態 下添加購物車兩種方式。

未登錄狀態:

首先1.用戶添加當前商品到購物車。

  2.從request獲取cookies,

  3.遍歷cookies 從cookies中找尋購物車。

  4.沒有的話就創建購物車,

  5.添加當前商品到購物車,

  6,創建cookies再把購物車放到cookies中

    在這裏要設置cookies存活時間默認一個月30天cookie.setMaxAge(60*60*24*30)。

    設置多有項目可以訪問cookie.setPath("/") /表示都可以訪問。

7.回顯到瀏覽器(轉發、重定向內部轉發)

登錄狀態:

  首先:1、用戶添加當前商品到購物車

     2、從request中獲取cookies

     3、遍歷cookies查找購物車

     4 、如果沒有購物車 就創建購物車

     5、 添加當前商品到購物車。

     6、遍歷購物車的購物項 追加到redis中。

     7、清空cookies

      ( 創建cookie設置值為null.

       Cookie cookie = new Cookies(constants.BUYER_CART , null)

       立即失效Cookie.setMaxAge(0)

      都可以訪問cookie cookie.setPath("/")

      把這個cookie寫回到瀏覽器response.addCookie(cookie)  

)

    8、 轉發(重定向)

在這裏用到了redis 所以註入jedis

放到redis中去用的setBuyerChartToredis() 把數量和庫存表的id 和用戶名

跳轉到結算的頁面

未登錄;

  1、從request獲取cookies

  2、遍歷cookie 找購物車

  3、判斷是否有購物車,進行下面操作,無則不進行任何操作

  4、將購物車中裝滿

  5、回顯購物車(model)

  6、跳轉到購物車頁面。

登錄:

  1、從request獲取cookie

  2、遍歷cookie 找購物車

  3、判斷是否有購物車,有進行下面操作,無則不進行任何操作

  4、將購物車添加到redis中 清空cookie

  5、從redis中取出購物車

  6、將購物車中裝滿

  7、回顯購物車(model)

  8、跳轉到購物車頁面

出現的錯誤及修改

未登錄狀態下添加同款商品合並(兩次添加購物項到購物車顯示兩條數據)

  解決:

    在添加購物項方法裏做判斷

    代碼實現;

    重寫購物項對象BuyerItems的equals 和hashCode 的方法改動的是equals 把最後比較的對象改成比較id

    //添加購物項方法

    public void additems(BuyerItems items){

        //判斷購物項集合中是否有和傳入的購物項相同的對象

      if(this.items.contains(items)){

        for( Buyeritems item : this.items){

          if(item.getSku().getId().equals(it.getSku().getid())){

            Item.setAmount(item.getAmount() + items.getAmount());

          }else{

            this.items.add(items);

          }

        }

      }

    }

(java對象和json 互相轉換的時候使用了objectMapper對象,那麽這個對象轉換的pojo必須是標準的javabean,標準的javabean 必須有屬性,還有get/set方法否則會報錯)

解決json中有一個註解@jsonIgnore(作用忽略不標準的方法)

   商品總價格; 默認為0元, + = 遍歷購物項通過購物項數量乘以購物項金額的到總金額做累加。

   運費;默認60元以上免郵費收0元,小於收10元

   商品總數:

    總價格: 行頻的總價格加上運費

  去結算頁面(點擊去結算)(再去結算的過程中判斷是否登錄,如果登錄則跳轉到結算頁面(即支付頁面),如果未登錄則跳轉到登錄頁面進行登錄,登錄之後再跳轉到結算頁面)

  1、判斷用戶是否登錄:(SpringMvc攔截器)

    (實現HandlerInterceptor接口)編寫prehandler

    (獲取token (令牌)根據令牌查詢用戶的登錄名稱,做出判斷如果不為空,則已經登錄,放行return true。沒有登錄則跳轉到登錄頁面進行登錄,登陸後跳轉到購物車中(response.sendRedirect("路徑")))

    

  登錄:繼續判斷

    判斷購物車中是否為空()

    為空: 在購物車中進行提購物提示

    不為空:繼續判斷

        判斷購買的商品是否有貨:(從redis中取出購物車(username)再從redis中獲取登錄用戶的信息(token令牌))

        設置有貨標記默認true(有貨判斷)判斷購物車中的貨物是否有貨 無貨標準 有一件商品無貨就算無貨,庫存量為0,庫存量小購物數量(無貨)//設置無貨標記

對添加購物車流程過程的分析淺解