在電商項目上都會涉及到對購物單車添加的功能,首先了解對購物車的流程;java
市面上對最大的兩個電商平臺就是阿里和京東,阿里呢 是必須在登陸的狀態下才能添加購物車。京東呢 是能夠在未登陸的狀態下添加購物車。redis
我的以爲相比較而言呢,京東的更人性化一點。因此在一下介紹呢就會以京東的模式做爲介紹,json
即分爲 登陸狀態和 未登陸狀態 下添加購物車兩種方式。瀏覽器
未登陸狀態:cookie
首先1.用戶添加當前商品到購物車。app
2.從request獲取cookies,this
3.遍歷cookies 從cookies中找尋購物車。對象
4.沒有的話就建立購物車,token
5.添加當前商品到購物車,接口
6,建立cookies再把購物車放到cookies中
在這裏要設置cookies存活時間默認一個月30天cookie.setMaxAge(60*60*24*30)。
設置多有項目能夠訪問cookie.setPath("/") /表示均可以訪問。
7.回顯到瀏覽器(轉發、重定向內部轉發)
登陸狀態:
首先:一、用戶添加當前商品到購物車
二、從request中獲取cookies
三、遍歷cookies查找購物車
4 、若是沒有購物車 就建立購物車
五、 添加當前商品到購物車。
六、遍歷購物車的購物項 追加到redis中。
七、清空cookies
( 建立cookie設置值爲null.
Cookie cookie = new Cookies(constants.BUYER_CART , null)
當即失效Cookie.setMaxAge(0)
均可以訪問cookie cookie.setPath("/")
把這個cookie寫回到瀏覽器response.addCookie(cookie)
)
八、 轉發(重定向)
在這裏用到了redis 因此注入jedis
放到redis中去用的setBuyerChartToredis() 把數量和庫存表的id 和用戶名
跳轉到結算的頁面
未登陸;
一、從request獲取cookies
二、遍歷cookie 找購物車
三、判斷是否有購物車,進行下面操做,無則不進行任何操做
四、將購物車中裝滿
五、回顯購物車(model)
六、跳轉到購物車頁面。
登陸:
一、從request獲取cookie
二、遍歷cookie 找購物車
三、判斷是否有購物車,有進行下面操做,無則不進行任何操做
四、將購物車添加到redis中 清空cookie
五、從redis中取出購物車
六、將購物車中裝滿
七、回顯購物車(model)
八、跳轉到購物車頁面
出現的錯誤及修改
未登陸狀態下添加同款商品合併(兩次添加購物項到購物車顯示兩條數據)
解決:
在添加購物項方法裏作判斷
代碼實現;
重寫購物項對象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元
商品總數:
總價格: 行頻的總價格加上運費
去結算頁面(點擊去結算)(再去結算的過程當中判斷是否登陸,若是登陸則跳轉到結算頁面(即支付頁面),若是未登陸則跳轉到登陸頁面進行登陸,登陸以後再跳轉到結算頁面)
一、判斷用戶是否登陸:(SpringMvc攔截器)
(實現HandlerInterceptor接口)編寫prehandler
(獲取token (令牌)根據令牌查詢用戶的登陸名稱,作出判斷若是不爲空,則已經登陸,放行return true。沒有登陸則跳轉到登陸頁面進行登陸,登錄後跳轉到購物車中(response.sendRedirect("路徑")))
登陸:繼續判斷
判斷購物車中是否爲空()
爲空: 在購物車中進行提購物提示
不爲空:繼續判斷
判斷購買的商品是否有貨:(從redis中取出購物車(username)再從redis中獲取登陸用戶的信息(token令牌))
設置有貨標記默認true(有貨判斷)判斷購物車中的貨物是否有貨 無貨標準 有一件商品無貨就算無貨,庫存量爲0,庫存量小購物數量(無貨)//設置無貨標記