對添加購物車流程過程的分析淺解
在電商項目上都會涉及到對購物單車添加的功能,首先了解對購物車的流程;
市面上對最大的兩個電商平臺就是阿裏和京東,阿裏呢 是必須在登錄的狀態下才能添加購物車。京東呢 是可以在未登錄的狀態下添加購物車。
個人覺得相比較而言呢,京東的更人性化一點。所以在一下介紹呢就會以京東的模式作為介紹,
即分為 登錄狀態和 未登錄狀態 下添加購物車兩種方式。
未登錄狀態:
首先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,庫存量小購物數量(無貨)//設置無貨標記
對添加購物車流程過程的分析淺解