电商平台中部分购物车逻辑代码

电商平台的购物车代码逻辑

本文详细阐述了当时写购物车代码的逻辑,主要包括了以下部分:

  • 添加商品到购物车
  • 删除单个商品到购物车
  • 清空购物车

其中,在思考添加商品到购物车的逻辑最为麻烦,主要考虑到在未登录的情况下,同样应该可以使用购物车功能。


1、封装根据用户id从数据库中获取购物车cart对象的方法,引用此方法得到cart对象

     * 封装根据用户id从数据库中获取购物车cart对象的方法,引用此方法得到cart对象
     */
    public Cart getCartBuyUid(String uid) throws SQLException {
        List<CartSession> list = cartService.queryCartByUid(uid);
        System.out.println("list-->"+list);
        Cart cart2 = new Cart();
        Map<String, CartItem> map = cart2.getCartitems();
        if (list!=null) {
            for (CartSession cartSession : list) {
                map.put(cartSession.getProdid(), new CartItem(productService.queryProductByPid(cartSession.getProdid()), cartSession.getBuynum(), cartSession.getTotal()));
            }
        }
        cart2.setCartitems(map);
        cart2.setTotal(cartService.queryCartTotalCountByUid(uid));
        return cart2;
    }

2、封装方法根据uid 获取数据库中的cart数据,并传递到cart.jsp

     * 根据uid 获取数据库中的cart数据,并传递到cart.jsp
     */
    public void getCart(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException, SQLException {
        HttpSession session = request.getSession();
        User user  = (User) session.getAttribute("user");
        System.out.println("getcart:"+user);
        if (user==null) {//未登录
            Cart cart = (Cart) session.getAttribute("cart");
            if (cart!=null) {
                session.setAttribute("cart", cart);
                response.sendRedirect("cart.jsp");
            }response.sendRedirect("cart.jsp");

        }else {//登陆过,判断session中是否有数据,有的话保存到数据库
            Cart cartSession = (Cart) session.getAttribute("cart");
            if (cartSession!=null) {
                //删除session中的cart
                session.removeAttribute("cart");

                Map<String, CartItem> maps = cartSession.getCartitems();
                for (Entry<String, CartItem> entry : maps.entrySet()) {
                    double submoney = entry.getValue().getProduct().getProdprice()*entry.getValue().getBuyNum();
                    int result = cartService.findCart(entry.getKey(), user.getuId());
                    System.out.println("result:"+result);

                    if (result==0) {//此商品数据库中没有,插入数据
                        cartService.saveCart(UUIDUtil.getUUID(), user.getuId(),submoney, entry.getKey(), entry.getValue().getBuyNum());

                    }else {//此商品数据库中有,更新数量,更新小计金额
                        int newBuyNum = entry.getValue().getBuyNum()+result;
                        double newSubTotal = new ProductServiceImpl().queryProductByPid(entry.getKey()).getProdprice()*newBuyNum;
                        cartService.updateCart(user.getuId(), newSubTotal, entry.getKey(), newBuyNum);
                    }
                }
            }
            String uid = user.getuId();
            System.out.println("uid:"+uid);
            Cart cart = getCartBuyUid(uid);
            System.out.println("getCart==>cart==>"+cart);
            request.setAttribute("cart", cart);
            request.getRequestDispatcher("cart.jsp").forward(request, response);
        }
    }

3、实现添加购物车功能,包括登录和未登录

  • 登录后:数据保存在数据库,实现登录前保存在session的购物车信息与登录后保存在数据库的购物车数据合并,页面数据为重新从数据库中查询的数据
  • 未登录:数据库保存在session中,页面显示数据为session中的数据
     * 实现添加购物车功能,包括登录和未登录
     * 登录后:数据保存在数据库,实现登录前保存在session的购物车信息与登录后保存在数据库的购物车数据合并,页面数据为重新从数据库中查询的数据
     * 未登录:数据库保存在session中,页面显示数据为session中的数据
     */
    public void addCart(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException, SQLException {
        HttpSession session = request.getSession();
        String pid = request.getParameter("pid");
        String buyNum = request.getParameter("buyNum");
        User user = (User) session.getAttribute("user");
        int number = 0;
        try {
            number = Integer.parseInt(buyNum);
        } catch (NumberFormatException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        if (number<=0) {
            return;
        }
        if (user==null) {
            //未登录,购物车保存在session中
            Product product = productService.queryProductByPid(pid);
            CartItem cartItem = new CartItem(product,number,product.getProdprice()*number);
            Cart cart = (Cart) session.getAttribute("cart");
            if (cart==null) {
                cart = new Cart();
            }
            Map<String, CartItem> cartitems = cart.getCartitems();
            if (cartitems.containsKey(pid)) {
                CartItem it = cartitems.get(pid);
                it.setBuyNum(number+it.getBuyNum());
                it.setSubTotal(it.getSubTotal()+cartItem.getSubTotal());
            }else {
                cartitems.put(pid, cartItem);
            }
            cart.setTotal(cart.getTotal()+number*product.getProdprice());
            session.setAttribute("cart", cart);
            System.out.println("cart:"+cart);
            request.getRequestDispatcher("cart.jsp").forward(request, response);
        }else {//登录了账号
            //判断session中是否存在cart,若存在,与本地合并,
            Cart cart = (Cart) session.getAttribute("cart");
            String uid = user.getuId();
            if (cart!=null) {   //session中存在session
                session.removeAttribute("cart");
                String cartid = UUIDUtil.getUUID();
                Map<String, CartItem> map = cart.getCartitems();
                for(Entry<String, CartItem> entry : map.entrySet()) {
                    double submoney = entry.getValue().getProduct().getProdprice()*entry.getValue().getBuyNum();
                    int result = cartService.findCart(entry.getKey(), uid);
                    System.out.println("result:"+result);
                    if (result==0) {//此商品数据库中没有,插入数据
                        cartService.saveCart(UUIDUtil.getUUID(), uid,submoney, entry.getKey(), entry.getValue().getBuyNum());
                    }else {//此商品数据库中有,更新数量,更新小计金额
                        int newBuyNum = entry.getValue().getBuyNum()+result;
                        double newSubTotal = new ProductServiceImpl().queryProductByPid(entry.getKey()).getProdprice()*newBuyNum;
                        cartService.updateCart(uid, newSubTotal, pid, newBuyNum);
                    }
                }   
            }else {//登录前没有添加商品到购物车,商品判断 1.数据库没有,直接存储在数据库        2.数据库中,更新数量 ,更新小计金额
                int result = cartService.findCart(pid, uid);
                if (result==0) {//此商品数据库中没有,插入数据
                    cartService.saveCart(UUIDUtil.getUUID(), uid,productService.queryProductByPid(pid).getProdprice()*number, pid,number );

                }else {//此商品数据库中有,更新数量,更新小计金额
                    int newBuyNum = number+result;
                    double newSubTotal = new ProductServiceImpl().queryProductByPid(pid).getProdprice()*newBuyNum;
                    cartService.updateCart(uid, newSubTotal, pid, newBuyNum);
                }
            }
            //从数据库中取数据,封装cart对象,使用request转发cart对象到cart.jsp
            Cart cart2 = getCartBuyUid(uid);
            request.setAttribute("cart", cart2);
            request.getRequestDispatcher("cart.jsp").forward(request, response);
        }
    }

4、删除购物车中单个商品信息

/*
     * 删除购物车中单个信息
     */
    public void removeCart(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException, SQLException {
        HttpSession session = request.getSession();
        String pid = request.getParameter("pid");
        User user = (User) session.getAttribute("user");
        if (user==null) {//未登录
            Cart cart = (Cart) session.getAttribute("cart");
            if (cart!=null) {
                Map<String, CartItem> cartitems = cart.getCartitems();
                if (cartitems.containsKey(pid)) {
                    System.out.println("222");
                    cart.setTotal(cart.getTotal()-cartitems.get(pid).getSubTotal());
                    cartitems.remove(pid);
                }
            }
            session.setAttribute("cart", cart);
            response.sendRedirect("cart.jsp");
        }else {//登陆了账号,要从数据库中删除数据
            cartService.removeCartByPidAndUid(pid,user.getuId());
            Cart cart = getCartBuyUid(user.getuId());
            request.setAttribute("cart", cart);
            request.getRequestDispatcher("cart.jsp").forward(request, response);
        }
    }

5、清空购物车

     * 清空购物车 ,未登录:清空session中的数据  登录后:清空数据库中的数据
     */
    public void emptyCart(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException, SQLException{
        HttpSession session = request.getSession();
        User user = (User) session.getAttribute("user");

        if (user==null) {//未登录
            session.removeAttribute("cart");
            response.sendRedirect("cart?method=getCart");
        }else { //已登录,清空数据库中购物车的数据
            cartService.emptyCartBuyUid(user.getuId());
            response.sendRedirect("cart?method=getCart");
        }

    }

6、总结

上述代码中,包含不同登陆状态下对添加商品,删除单个商品,清空整个购物车等功能的逻辑实现,纯属个人分析,不严谨的地方希望大家指出,共同学习,谢谢!

猜你喜欢

转载自blog.csdn.net/qq_33322716/article/details/82531954