用户登录状态下的购物车(直接实现于controller)

购物车功能实现

代码实现

@Controller
public class Cart_action {
@Autowired
private TbItemService itemService;
@Autowired
private CartNoManInterface cartNoManInterface;
@Autowired
private JedisClient jedisClient;

@RequestMapping("/cart/add/{itemId}")
public String cartAdd(@PathVariable Long itemId,@RequestParam(defaultValue="1")int num,HttpServletRequest request,HttpServletResponse response){
    //这里通过拦截器中设置的request 来判断用户的登陆状态(登陆/未登录)
    TbUser user = (TbUser)request.getAttribute("user");
    //登陆状态:
    if (user!=null){
        //声明一个 标识
        boolean isNotItemFlag = true;


        // 1. 从redis中获取购物车列表
        String cartList = jedisClient.get("Cart_UserId_"+user.getId());
        List<TbItem> redisList = cartNoManInterface.getCartListFromCookie(cartList);
        for(TbItem item : redisList){
            if(item.getId()==itemId.longValue()){
                item.setNum(item.getNum()+num);
                isNotItemFlag = false;
                break;
            }
        }
        // 2. 从cookie中取购物车列表
        //声明一个标识
        boolean flag = true;
        String json = CookieUtils.getCookieValue(request, "cart",true);
        List<TbItem> list = cartNoManInterface.getCartListFromCookie(json);
        for (int i =0;i<list.size();i++){
            CookieUtils.deleteCookie(request,response,"cart");
            for (int j = 0;j<redisList.size()-i-1;j++){
                if (list.get(i).getId()==redisList.get(j).getId()){
                    flag = false;
                }
            }
            if (flag){
                if (list.get(i).getId()==itemId.longValue()){
                    list.get(i).setNum(list.get(i).getNum()+num);
                    isNotItemFlag = false;
                    break;
                }
                redisList.add(list.get(i));
                flag = true;
            }
        }
        //如果没有添加过则需要我们给出这个商品
        if (isNotItemFlag) {
            TbItem item = itemService.getItemById(itemId);
            item.setId(itemId);
            item.setNum(num);
            redisList.add(item);
        }

        //将用户信息和对应的购物车信息添加到redis中
        jedisClient.set("Cart_UserId_"+user.getId(),JsonUtils.objectToJson(redisList));
        return "cartSuccess";

    }
    //未登录状态:添加购物车功能(所有针对item的操作只是购物车而已(Cookie),并不会对数据库中的item表进行任何处理)
    //从cookie中取购物车列表
    String json = CookieUtils.getCookieValue(request, "cart",true);
    List<TbItem> list = cartNoManInterface.getCartListFromCookie(json);
    //遍历购物车列表,看购物车列表中是否有相同商品,如果有数量相加
    boolean flag = false;
    for(TbItem item : list){
        if(item.getId()==itemId.longValue()){
            item.setNum(item.getNum()+num);
            flag=true;
            break;
        }
    }
    //如果没有相同的商品,则新增商品
    if(!flag){//falg=false
        //TbItem item = new TbItem();
        TbItem item=itemService.getItemById(itemId);
        item.setId(itemId);
        item.setNum(num);
        list.add(item);
    }
    CookieUtils.setCookie(request,response,"cart",JsonUtils.objectToJson(list),true);
    return "cartSuccess";
}

//购物车结算页面
@RequestMapping("/cart/cart")
public String showCartList(HttpServletRequest request){
    //这里通过拦截器中设置的request 来判断用户的登陆状态(登陆/未登录)
    TbUser user = (TbUser)request.getAttribute("user");
    //登陆状态:
    if (user!=null){
        String cartList = jedisClient.get("Cart_UserId_"+user.getId());
        List<TbItem> list = cartNoManInterface.getCartListFromCookie(cartList);
        request.setAttribute("cartList", list);
        return "cart";
    }
    String json = CookieUtils.getCookieValue(request, "cart",true);
    List<TbItem> list = cartNoManInterface.getCartListFromCookie(json);
    for(TbItem tbItem : list){
        Long price = tbItem.getPrice();
        System.out.println(price);
    }
    request.setAttribute("cartList", list);
    return "cart";
}

//删除购物车
@RequestMapping("/cart/delete/{cartId}")
public String deleteCartId(@PathVariable Long cartId,HttpServletRequest request,HttpServletResponse response){
    //这里通过拦截器中设置的request 来判断用户的登陆状态(登陆/未登录)
    TbUser user = (TbUser)request.getAttribute("user");
    //登陆状态:
    if (user!=null){
        String cartList = jedisClient.get("Cart_UserId_"+user.getId());
        List<TbItem> list = cartNoManInterface.getCartListFromCookie(cartList);
        Iterator<TbItem> iterator = list.iterator();
        while (iterator.hasNext()) {
            TbItem tbItem = iterator.next();
            if(tbItem.getId()==cartId.longValue()){
                iterator.remove();
            }
        }
        //删除完成同步到redis数据库中
        jedisClient.set("Cart_UserId_"+user.getId(),JsonUtils.objectToJson(list));
        request.setAttribute("cartList", list);
        return "cart";
    }
    String json = CookieUtils.getCookieValue(request, "cart",true);
    List<TbItem> list = cartNoManInterface.getCartListFromCookie(json);
    Iterator<TbItem> iterator = list.iterator();
    while (iterator.hasNext()) {
        TbItem tbItem = iterator.next();
        if(tbItem.getId()==cartId.longValue()){
            iterator.remove();
        }
    }
    request.setAttribute("cartList", list);
    CookieUtils.setCookie(request, response, "cart", JsonUtils.objectToJson(list),true);
    return "cart";
}
//购物车 商品数量修改同步金额
@RequestMapping("/cart/update/num/{itemId}/{itemNum}")
@ResponseBody
public List<TbItem> updateCartNum(@PathVariable Long itemId,@PathVariable int  itemNum,HttpServletRequest request,HttpServletResponse response){
    //这里通过拦截器中设置的request 来判断用户的登陆状态(登陆/未登录)
    TbUser user = (TbUser)request.getAttribute("user");
    //登陆状态:
    if (user!=null){
        String cartList = jedisClient.get("Cart_UserId_"+user.getId());
        List<TbItem> list = cartNoManInterface.getCartListFromCookie(cartList);
        Iterator<TbItem> iterator = list.iterator();
        while (iterator.hasNext()) {
            TbItem tbItem = iterator.next();
            if(tbItem.getId()==itemId.longValue()){
                tbItem.setNum(itemNum);
                break;
            }
        }
        //修改完成同步到redis数据库中
        jedisClient.set("Cart_UserId_"+user.getId(),JsonUtils.objectToJson(list));
        return list;
    }
    String json = CookieUtils.getCookieValue(request, "cart",true);
    List<TbItem> list = cartNoManInterface.getCartListFromCookie(json);
    Iterator<TbItem> iterator = list.iterator();
    while (iterator.hasNext()) {
        TbItem tbItem = iterator.next();
        if(tbItem.getId()==itemId.longValue()){
            tbItem.setNum(itemNum);
            break;
        }
    }
    CookieUtils.setCookie(request, response, "cart", JsonUtils.objectToJson(list),true);
    return list;
}

}

在此记录一下方便以后进行功能拆分

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值