package com.lee.gmall.cart.controller;
import com.alibaba.dubbo.config.annotation.Reference;
import com.alibaba.fastjson.JSON;
import com.lee.gmall.annotation.LoginRequire;
import com.lee.gmall.bean.CartInfo;
import com.lee.gmall.bean.SkuInfo;
import com.lee.gmall.service.CartService;
import com.lee.gmall.service.SkuService;
import com.lee.gmall.util.CookieUtil;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
@Controller
public class CartController {
@Reference
SkuService skuService;
@Reference
CartService cartService;
@LoginRequire(ifNeedSuccess = false)
@RequestMapping("checkCart")
public String checkCart(HttpServletRequest request, HttpServletResponse response, CartInfo cartInfo, ModelMap map) {
String userId = (String) request.getAttribute("userId");
List<CartInfo> cartInfos = new ArrayList<>();
//修改购物车选中状态
if (StringUtils.isNotBlank(userId)) {
//更新数据库
cartInfo.setUserId(userId);
cartService.updateCartChecked(cartInfo);
} else {
//更新cookie
String cartListCookie = CookieUtil.getCookieValue(request, "cartListCookie", true);
if (StringUtils.isNotBlank(cartListCookie)) {
cartInfos = JSON.parseArray(cartListCookie, CartInfo.class);
for (CartInfo info : cartInfos) {
if (info.getSkuId().equals(cartInfo.getSkuId())) {
info.setIsChecked(cartInfo.getIsChecked());
}
}
}
CookieUtil.setCookie(request, response, "cartListCookie", JSON.toJSONString(cartInfos), 60 * 60 * 24 * 7, true);
}
//更新数据后将最新数据查询出来
if (StringUtils.isBlank(userId)) {
//取cookie中的数据
String cartListCookie = CookieUtil.getCookieValue(request, "cartListCookie", true);
if (StringUtils.isNotBlank(cartListCookie)) {
cartInfos = JSON.parseArray(cartListCookie, CartInfo.class);
}
} else {
//取缓存中的数据
cartInfos = cartService.getCartCache(userId);
}
map.put("cartList", cartInfos);
return "cartListInner";
}
@LoginRequire(ifNeedSuccess = false)
@RequestMapping("cartList")
public String cartList(HttpServletRequest request, ModelMap map) {
String userId = (String) request.getAttribute("userId");
List<CartInfo> cartInfos = new ArrayList<>();
if (StringUtils.isBlank(userId)) {
//取cookie中的数据
String cartListCookie = CookieUtil.getCookieValue(request, "cartListCookie", true);
if (StringUtils.isNotBlank(cartListCookie)) {
cartInfos = JSON.parseArray(cartListCookie, CartInfo.class);
}
} else {
//取缓存中的数据
cartInfos = cartService.getCartCache(userId);
}
map.put("cartList", cartInfos);
map.put("totalPrice", getTotalPrice(cartInfos));
return "cartList";
}
private BigDecimal getTotalPrice(List<CartInfo> cartInfos) {
BigDecimal totalPrice = new BigDecimal("0");
for (CartInfo cartInfo : cartInfos) {
totalPrice = totalPrice.add(cartInfo.getCartPrice());
}
return totalPrice;
}
@LoginRequire(ifNeedSuccess = false)
@RequestMapping("addToCart")
public String addToCart(HttpServletRequest request, HttpServletResponse response, CartInfo cartInfo) {
//根据前台传入的skuId封装cartInfo
SkuInfo sku = skuService.getSkuById(cartInfo.getSkuId());
cartInfo.setSkuPrice(sku.getPrice());
cartInfo.setSkuName(sku.getSkuName());
cartInfo.setCartPrice(sku.getPrice().multiply(new BigDecimal(cartInfo.getSkuNum())));
cartInfo.setImgUrl(sku.getSkuDefaultImg());
cartInfo.setIsChecked("1");
String userId = (String) request.getAttribute("userId");
List<CartInfo> cartInfos = new ArrayList<>();
if (StringUtils.isBlank(userId)) {
//用户未登录,添加到cookie
String cartListCookieStr = CookieUtil.getCookieValue(request, "cartListCookie", true);
if (StringUtils.isBlank(cartListCookieStr)) {
//存在购物车列表cookie
cartInfos.add(cartInfo);
} else {
//不存在购物车列表cookie
cartInfos = JSON.parseArray(cartListCookieStr, CartInfo.class);
//判断是否为重复的sku
boolean isNewCart = isNewCart(cartInfos, cartInfo);
if (isNewCart) {
cartInfos.add(cartInfo);
} else {
for (CartInfo info : cartInfos) {
String skuId = info.getSkuId();
String skuId1 = cartInfo.getSkuId();
if (skuId.equals(skuId1)) {
info.setSkuNum(info.getSkuNum() + cartInfo.getSkuNum());
info.setCartPrice(info.getSkuPrice().multiply(new BigDecimal(info.getSkuNum())));
}
}
}
}
//操作完成后覆盖cookie
CookieUtil.setCookie(request, response, "cartListCookie", JSON.toJSONString(cartInfos), 60 * 60 * 24 * 7, true);
} else {
//用户已登录,添加到数据库
cartInfo.setUserId(userId);
String skuId = cartInfo.getSkuId();
//判断数据库中对应的cartInfo是否存在
CartInfo cartInfoDb = cartService.ifCartExist(cartInfo);
if (cartInfoDb != null) {
//更新数据库
cartInfoDb.setSkuNum(cartInfoDb.getSkuNum() + cartInfo.getSkuNum());
cartInfoDb.setCartPrice(cartInfoDb.getSkuPrice().multiply(new BigDecimal(cartInfoDb.getSkuNum())));
cartService.updateCart(cartInfoDb);
} else {
//插入数据库
cartService.insertCart(cartInfo);
}
//同步缓存
cartService.syncCache(userId);
}
return "redirect:/cartSuccess?skuId=" + sku.getId();
}
private boolean isNewCart(List<CartInfo> cartInfos, CartInfo cartInfo) {
boolean isNewCart = true;
String skuId = cartInfo.getSkuId();
for (CartInfo info : cartInfos) {
skuId.equals(info.getSkuId());
isNewCart = false;
}
return isNewCart;
}
@LoginRequire(ifNeedSuccess = false)
@RequestMapping("cartSuccess")
public String cartSuccess(ModelMap map, String skuId) {
SkuInfo sku = skuService.getSkuById(skuId);
map.put("skuInfo", sku);
return "success";
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
基于springboot+dubbo的练手级电商项目.zip
共2000个文件
png:462个
jpg:396个
webp:331个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 98 浏览量
2024-05-18
16:52:55
上传
评论
收藏 31.34MB ZIP 举报
温馨提示
基于springboot的java毕业&课程设计
资源推荐
资源详情
资源评论
收起资源包目录
基于springboot+dubbo的练手级电商项目.zip (2000个子文件)
gm1.css.bak 7KB
tracker.conf 128B
GL.css 624KB
bootstrap.css 144KB
bootstrap.css 142KB
bootstrap.min.css 120KB
bootstrap.min.css 118KB
easyui.css 71KB
easyui.css 70KB
easyui.css 70KB
easyui.css 70KB
easyui.css 70KB
easyui.css 68KB
easyui.css 67KB
success.css 62KB
index.css 58KB
header.css 40KB
font-awesome(1).css 37KB
shop.css 31KB
font-awesome.min.css 30KB
list.css 22KB
One_bdyStyle.css 18KB
swiper.min.css 17KB
swiper-3.4.2.min.css 17KB
JD2.css 16KB
react.css 10KB
angular.css 10KB
vue.css 10KB
tabs.css 9KB
tabs.css 9KB
tabs.css 9KB
tabs.css 9KB
tabs.css 7KB
tabs.css 7KB
tabs.css 7KB
gm1.css 7KB
mobile.css 6KB
demo(1).css 6KB
color.css 6KB
datagrid.css 6KB
datagrid.css 6KB
datagrid.css 6KB
datagrid.css 6KB
SHOUhou.css 6KB
panel.css 6KB
panel.css 6KB
panel.css 6KB
panel.css 6KB
datagrid.css 5KB
datagrid.css 5KB
datagrid.css 5KB
panel.css 5KB
panel.css 5KB
panel.css 5KB
One_mainFoot.css 5KB
iconfont.css 5KB
style.css 4KB
main.css 4KB
linkbutton.css 4KB
linkbutton.css 4KB
linkbutton.css 4KB
linkbutton.css 4KB
linkbutton.css 4KB
window.css 4KB
window.css 4KB
window.css 4KB
window.css 4KB
calendar.css 4KB
calendar.css 4KB
calendar.css 4KB
calendar.css 4KB
calendar.css 4KB
calendar.css 4KB
calendar.css 4KB
window.css 4KB
window.css 4KB
window.css 4KB
index.css 4KB
linkbutton.css 3KB
linkbutton.css 3KB
tree.css 3KB
tree.css 3KB
tree.css 3KB
tree.css 3KB
tree.css 3KB
tree.css 3KB
tree.css 3KB
index.css 3KB
layout.css 3KB
layout.css 3KB
layout.css 3KB
layout.css 3KB
layout.css 3KB
layout.css 3KB
layout.css 3KB
textbox.css 3KB
textbox.css 3KB
textbox.css 3KB
textbox.css 3KB
textbox.css 3KB
共 2000 条
- 1
- 2
- 3
- 4
- 5
- 6
- 20
资源评论
Nowl
- 粉丝: 1w+
- 资源: 3894
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功