购物车逻辑实现 思路

时间:2022-04-10 04:42:07
购物车列表数据的存储
  • 判断当前用户是否登陆 (通过用户名字去判断)

    • 登陆

      • 从redis中获取购物车列表 , 从cookie中获取购物车列表,两种购物车列表合并
      • 通过商品ID , 商品数量,添加到购物车中
    • 未登录

      • 从cookie中获取购物车列表
      • 将商品添加到购物车中
商品信息添加到购物车中
    1. 通过购物车页面 封装pojo实体
  • private String sellerId;//商家ID
    private String sellerName;//商家名称
    private List<TbOrderItem> orderItemList;//购物车明细列表   
    
    1. 遍历购物车列表对象

      • 判断该购物车列表商家中是否有 该商品商家

          • 遍历购物车商品列表 是否 有该商品

            • 有 商品数量相加
            • 无 添加该商品到 购物车商品列表中
          • 创建购物车对象,将商品信息 添加到购物车商品列表中

Cookie工具类的

package util;

import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.net.URLEncoder;

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


/**
 * 
 * Cookie 工具类
 *
 */
public final class CookieUtil {

/**
 * 得到Cookie的值, 不编码
 * 
 * @param request
 * @param cookieName
 * @return
 */
public static String getCookieValue(HttpServletRequest request, String cookieName) {
    return getCookieValue(request, cookieName, false);
}

/**
 * 得到Cookie的值,
 * 
 * @param request
 * @param cookieName
 * @return
 */
public static String getCookieValue(HttpServletRequest request, String cookieName, boolean isDecoder) {
    Cookie[] cookieList = request.getCookies();
    if (cookieList == null || cookieName == null) {
        return null;
    }
    String retValue = null;
    try {
        for (int i = 0; i < cookieList.length; i++) {
            if (cookieList[i].getName().equals(cookieName)) {
                if (isDecoder) {
                    retValue = URLDecoder.decode(cookieList[i].getValue(), "UTF-8");
                } else {
                    retValue = cookieList[i].getValue();
                }
                break;
            }
        }
    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    }
    return retValue;
}

/**
 * 得到Cookie的值,
 * 
 * @param request
 * @param cookieName
 * @return
 */
public static String getCookieValue(HttpServletRequest request, String cookieName, String encodeString) {
    Cookie[] cookieList = request.getCookies();
    if (cookieList == null || cookieName == null) {
        return null;
    }
    String retValue = null;
    try {
        for (int i = 0; i < cookieList.length; i++) {
            if (cookieList[i].getName().equals(cookieName)) {
                retValue = URLDecoder.decode(cookieList[i].getValue(), encodeString);
                break;
            }
        }
    } catch (UnsupportedEncodingException e) {
         e.printStackTrace();
    }
    return retValue;
}

/**
 * 设置Cookie的值 不设置生效时间默认浏览器关闭即失效,也不编码
 */
public static void setCookie(HttpServletRequest request, HttpServletResponse response, String cookieName,
        String cookieValue) {
    setCookie(request, response, cookieName, cookieValue, -1);
}

/**
 * 设置Cookie的值 在指定时间内生效,但不编码
 */
public static void setCookie(HttpServletRequest request, HttpServletResponse response, String cookieName,
        String cookieValue, int cookieMaxage) {
    setCookie(request, response, cookieName, cookieValue, cookieMaxage, false);
}

/**
 * 设置Cookie的值 不设置生效时间,但编码
 */
public static void setCookie(HttpServletRequest request, HttpServletResponse response, String cookieName,
        String cookieValue, boolean isEncode) {
    setCookie(request, response, cookieName, cookieValue, -1, isEncode);
}

/**
 * 设置Cookie的值 在指定时间内生效, 编码参数
 */
public static void setCookie(HttpServletRequest request, HttpServletResponse response, String cookieName,
        String cookieValue, int cookieMaxage, boolean isEncode) {
    doSetCookie(request, response, cookieName, cookieValue, cookieMaxage, isEncode);
}

/**
 * 设置Cookie的值 在指定时间内生效, 编码参数(指定编码)
 */
public static void setCookie(HttpServletRequest request, HttpServletResponse response, String cookieName,
        String cookieValue, int cookieMaxage, String encodeString) {
    doSetCookie(request, response, cookieName, cookieValue, cookieMaxage, encodeString);
}

/**
 * 删除Cookie带cookie域名
 */
public static void deleteCookie(HttpServletRequest request, HttpServletResponse response,
        String cookieName) {
    doSetCookie(request, response, cookieName, "", -1, false);
}

/**
 * 设置Cookie的值,并使其在指定时间内生效
 * 
 * @param cookieMaxage cookie生效的最大秒数
 */
private static final void doSetCookie(HttpServletRequest request, HttpServletResponse response,
        String cookieName, String cookieValue, int cookieMaxage, boolean isEncode) {
    try {
        if (cookieValue == null) {
            cookieValue = "";
        } else if (isEncode) {
            cookieValue = URLEncoder.encode(cookieValue, "utf-8");
        }
        Cookie cookie = new Cookie(cookieName, cookieValue);
        if (cookieMaxage > 0)
            cookie.setMaxAge(cookieMaxage);
        if (null != request) {// 设置域名的cookie
            String domainName = getDomainName(request);
            System.out.println(domainName);
            if (!"localhost".equals(domainName)) {
                cookie.setDomain(domainName);
            }
        }
        cookie.setPath("/");
        response.addCookie(cookie);
    } catch (Exception e) {
         e.printStackTrace();
    }
}

/**
 * 设置Cookie的值,并使其在指定时间内生效
 * 
 * @param cookieMaxage cookie生效的最大秒数
 */
private static final void doSetCookie(HttpServletRequest request, HttpServletResponse response,
        String cookieName, String cookieValue, int cookieMaxage, String encodeString) {
    try {
        if (cookieValue == null) {
            cookieValue = "";
        } else {
            cookieValue = URLEncoder.encode(cookieValue, encodeString);
        }
        Cookie cookie = new Cookie(cookieName, cookieValue);
        if (cookieMaxage > 0)
            cookie.setMaxAge(cookieMaxage);
        if (null != request) {// 设置域名的cookie
            String domainName = getDomainName(request);
            System.out.println(domainName);
            if (!"localhost".equals(domainName)) {
                cookie.setDomain(domainName);
            }
        }
        cookie.setPath("/");
        response.addCookie(cookie);
    } catch (Exception e) {
         e.printStackTrace();
    }
}

/**
 * 得到cookie的域名
 */
private static final String getDomainName(HttpServletRequest request) {
    String domainName = null;

    String serverName = request.getRequestURL().toString();
    if (serverName == null || serverName.equals("")) {
        domainName = "";
    } else {
        serverName = serverName.toLowerCase();
        serverName = serverName.substring(7);
        final int end = serverName.indexOf("/");
        serverName = serverName.substring(0, end);
        final String[] domains = serverName.split("\\.");
        int len = domains.length;
        if (len > 3) {
            // www.xxx.com.cn
            domainName = "." + domains[len - 3] + "." + domains[len - 2] + "." + domains[len - 1];
        } else if (len <= 3 && len > 1) {
            // xxx.com or xxx.cn
            domainName = "." + domains[len - 2] + "." + domains[len - 1];
        } else {
            domainName = serverName;
        }
    }

    if (domainName != null && domainName.indexOf(":") > 0) {
        String[] ary = domainName.split("\:");
        domainName = ary[0];
    }
    return domainName;
}

}