购物车的实现思想

如图


为什么不能存在session中   ————>因为session生命周期太短,浏览器关闭数据就消失了,应该存在cookie中

应为在本地浏览器中不要求用户

把什么存到cookie中的问题-->这里使用商品的ID  

要把sku_id 和购买的数量  存到cookie中

例如:格式[{skuid:1001,quantity:3},{skuid:1002,quantity:1}]

购物车数据加一:先要判断库存,库存足够才能加一

购物车数据减一:如果当前数量是一直接删除,不是也要判断库存是否足够


代码的实现

创建模型类

EbCart.java

public class EbCart {
    
    private Long skuId;  //商品号
    private Integer quantity;//数量     使用的时候用以上俩   查询的时候全部查出
    private EbSku sku;    //规格

  get/set方法

}

EbSKu.java

模型类
private EbItem item;
get/set 方法

EbCartController.java

package com.rl.controller;

import java.io.PrintWriter;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;

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

import net.sf.json.JSONObject;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

import com.rl.model.EbCart;
import com.rl.model.EbShipAddr;
import com.rl.model.EbSku;
import com.rl.model.TsPtlUser;
import com.rl.service.EbCartService;
import com.rl.service.EbShipAddrService;
import com.rl.service.EbSkuService;

@Controller
@RequestMapping("/cart")
public class EbCartController {
    
    @Autowired
    EbCartService cartService;
    
    @Autowired
    EbSkuService skuService;
    
    @Autowired
    EbShipAddrService addrService;
    
    @RequestMapping("/listCart.do")
    public String listCart(HttpServletRequest request, HttpServletResponse response, Model model){
        List<EbCart> cartList = cartService.listCart(request, response);
        model.addAttribute("cartList", cartList);
        Integer itemNum = 0;
        BigDecimal bd = new BigDecimal(0);
        for(EbCart cart :cartList){
            itemNum = itemNum + cart.getQuantity();
            bd = bd.add(cart.getSku().getSkuPrice().multiply(new BigDecimal(cart.getQuantity())));
        }
        model.addAttribute("itemNum", itemNum);
        model.addAttribute("totalPrice", bd);
        return "shop/car";
    }
    
    @RequestMapping("/removeCart.do")
    public String removeCart(HttpServletRequest request, HttpServletResponse response, Long skuId){
        cartService.removeCart(request, response, skuId);
        return "redirect:listCart.do";
    }
    
    /**
     * 添加购物车
     */
    @RequestMapping("/addCart.do")
    public void addCart(Long skuId, Integer quantity, HttpServletRequest request, HttpServletResponse response, PrintWriter out){
        cartService.addCart(request, response, skuId, quantity);
        out.write("success");
    }
    
    /**
     * 验证库存
     */
    @RequestMapping("/validStockByQuantity.do")
    public void validStockByQuantity(Long skuId, Integer quantity, PrintWriter out){
        EbSku sku = skuService.selectSkuById(skuId);
        String flag = "yes";
        if(sku.getStockInventory() < quantity){
            flag = "no";
        }
        out.write(flag);
    }
    
    @RequestMapping("/validStockCart.do")
    public void validStockCart(HttpServletRequest request, HttpServletResponse response) throws Exception{
        String tip = cartService.validStockCart(request, response);
        JSONObject jo = new JSONObject();
        if(tip == null){
            jo.accumulate("isHave", "yes");
        }else{
            jo.accumulate("isHave", "no");
        }
        jo.accumulate("tip", tip);
        //{isHave:yes, tip:null}
        String result = jo.toString();
        response.setCharacterEncoding("UTF-8");
        response.setContentType("text/html;charset=UTF-8");
        response.getWriter().write(result);
    }
    
    @RequestMapping("/toSubmitOrder.do")
    public String toSubmitOrder( HttpServletRequest request, HttpServletResponse response,HttpSession session, Model model){
        TsPtlUser user = (TsPtlUser) session.getAttribute("user");
        List<EbShipAddr> addrList = new ArrayList<EbShipAddr>();
        if(user != null){
            addrList = addrService.selectAddrByUserId(user.getPtlUserId());
        }else{
            return "redirect:/user/toLogin.do";
        }
        model.addAttribute("addrList", addrList);
        
        
        List<EbCart> cartList = cartService.listCart(request, response);
        model.addAttribute("cartList", cartList);
        Integer itemNum = 0;
        BigDecimal bd = new BigDecimal(0);
        for(EbCart cart :cartList){
            itemNum = itemNum + cart.getQuantity();
            bd = bd.add(cart.getSku().getSkuPrice().multiply(new BigDecimal(cart.getQuantity())));
        }
        model.addAttribute("itemNum", itemNum);
        model.addAttribute("totalPrice", bd);
        return "shop/confirmProductCase";
    }
   }

EbCartService.java

package com.rl.service;

import java.util.List;

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

import com.rl.model.EbCart;

public interface EbCartService {

    public void addCart(HttpServletRequest request, HttpServletResponse response,Long skuId, Integer quantity);
    
    public void removeCart(HttpServletRequest request, HttpServletResponse response,Long skuId);
    /**
     * 购物车数量加一
     * @param request
     * @param response
     * @param skuId
     */
    public void addNum(HttpServletRequest request, HttpServletResponse response,Long skuId);
    /**
     * 购物车数量减一
     * @param request
     * @param response
     * @param skuId
     */
    public void reduceNum(HttpServletRequest request, HttpServletResponse response,Long skuId);
    /**
     * 查询购物车数据
     * @param request
     * @param response
     * @return
     */
    public List<EbCart> listCart(HttpServletRequest request, HttpServletResponse response);


    /**
     * 清空购物车
     * @param request
     * @param response
     */
    public void clearCart(HttpServletRequest request, HttpServletResponse response);
    
    /**
     * 验证购物车的库存
     * @param request
     * @param response
     */
    public String validStockCart(HttpServletRequest request, HttpServletResponse response);
   
}

EbCartServiceImpl.java    实现类

package com.rl.service.impl;

import java.net.URLDecoder;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.List;

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

import net.sf.json.JSONArray;
import net.sf.json.JSONSerializer;
import net.sf.json.JsonConfig;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.rl.dao.EbSkuDao;
import com.rl.model.EbCart;
import com.rl.model.EbSku;
import com.rl.service.EbCartService;
import com.rl.util.Constants;
@Service
public class EbCartServiceImpl implements EbCartService {
	
	@Autowired
	private EbSkuDao skuDao;

	/**
	 * 第一种:购物车没有当前要添加的数据,直接添加即可
	 * 第二种:购物车已经存在要添加的数据,数量做累加
	 * 
	 */
	public void addCart(HttpServletRequest request,
			HttpServletResponse response, Long skuId, Integer quantity) {
		//创建JSON的配置对象
		JsonConfig jc = new JsonConfig();
		jc.setRootClass(EbCart.class);
		//设置不操作的属性
		String [] excludes = {"sku"};
		jc.setExcludes(excludes);
		
		List<EbCart> cartList = new ArrayList<EbCart>();
		//获得到本地的所有cookie
		Cookie[] cookies = request.getCookies();
		if(cookies != null && cookies.length > 0){
			for(Cookie cookie : cookies){
				//获得cookie的名字
				String cookieName = cookie.getName();
				if(Constants.ecps_cookie.equals(cookieName)){
					//获得cookie数据
					String cookieValue = cookie.getValue();
					//解码[{skuId:1001, quantity:3},{skuId:1003,quantity:2},...]
					cookieValue = URLDecoder.decode(cookieValue);
					//把JSON字符串转换成JSON的数组
					JSONArray ja = JSONArray.fromObject(cookieValue);
					
					//把JSON对象转换成java对象
					cartList = (List<EbCart>) JSONSerializer.toJava(ja, jc);
					//设置一个标志,用来查看在原有的cookie是否存在当前添加的sku
					boolean isHave = false;
					for(EbCart cart : cartList){
						if(cart.getSkuId().longValue() == skuId.longValue()){
							cart.setQuantity(cart.getQuantity()+quantity);
							isHave = true;
							break;
						}
					}
					if(!isHave){
						EbCart cart = new EbCart();
						cart.setSkuId(skuId);
						cart.setQuantity(quantity);
						cartList.add(cart);
					}
					
				}
			}
		}
		
		if(cartList.size() == 0){
			EbCart cart = new EbCart();
			cart.setSkuId(skuId);
			cart.setQuantity(quantity);
			cartList.add(cart);
		}
		//把cartList转换成JSON的数组对象
		JSONArray ja = JSONArray.fromObject(cartList, jc);
		//把JSON数组转换成字符串
		String cookieValue = ja.toString();
		//把字符串编码
		cookieValue = URLEncoder.encode(cookieValue);
		//创建cookie对象
		Cookie cookie = new Cookie(Constants.ecps_cookie, cookieValue);
		cookie.setMaxAge(Integer.MAX_VALUE);
		cookie.setPath("/");
		response.addCookie(cookie);
	}

	public void removeCart(HttpServletRequest request,
			HttpServletResponse response, Long skuId) {
		//创建JSON的配置对象
				JsonConfig jc = new JsonConfig();
				jc.setRootClass(EbCart.class);
				//设置不操作的属性
				String [] excludes = {"sku"};
				jc.setExcludes(excludes);
				
				List<EbCart> cartList = new ArrayList<EbCart>();
				//获得到本地的所有cookie
				Cookie[] cookies = request.getCookies();
				if(cookies != null && cookies.length > 0){
					for(Cookie cookie : cookies){
						//获得cookie的名字
						String cookieName = cookie.getName();
						if(Constants.ecps_cookie.equals(cookieName)){
							//获得cookie数据
							String cookieValue = cookie.getValue();
							//解码[{skuId:1001, quantity:3},{skuId:1003,quantity:2},...]
							cookieValue = URLDecoder.decode(cookieValue);
							//把JSON字符串转换成JSON的数组
							JSONArray ja = JSONArray.fromObject(cookieValue);
							
							//把JSON对象转换成java对象
							cartList = (List<EbCart>) JSONSerializer.toJava(ja, jc);
							//设置一个标志,用来查看在原有的cookie是否存在当前添加的sku
							boolean isHave = false;
							for(EbCart cart : cartList){
								if(cart.getSkuId().longValue() == skuId.longValue()){
									cartList.remove(cart);
									break;
								}
							}
							
						}
					}
				}
				
				
				//把cartList转换成JSON的数组对象
				JSONArray ja = JSONArray.fromObject(cartList, jc);
				//把JSON数组转换成字符串
				String cookieValue = ja.toString();
				//把字符串编码
				cookieValue = URLEncoder.encode(cookieValue);
				//创建cookie对象
				Cookie cookie = new Cookie(Constants.ecps_cookie, cookieValue);
				cookie.setMaxAge(Integer.MAX_VALUE);
				cookie.setPath("/");
				response.addCookie(cookie);
	}

	public void addNum(HttpServletRequest request,
			HttpServletResponse response, Long skuId) {
		// TODO Auto-generated method stub
		
	}

	public void reduceNum(HttpServletRequest request,
			HttpServletResponse response, Long skuId) {
		// TODO Auto-generated method stub
		
	}

	public List<EbCart> listCart(HttpServletRequest request,
			HttpServletResponse response) {
		//创建JSON的配置对象
				JsonConfig jc = new JsonConfig();
				jc.setRootClass(EbCart.class);
				//设置不操作的属性
				String [] excludes = {"sku"};
				jc.setExcludes(excludes);
				
				List<EbCart> cartList = new ArrayList<EbCart>();
				//获得到本地的所有cookie
				Cookie[] cookies = request.getCookies();
				if(cookies != null && cookies.length > 0){
					for(Cookie cookie : cookies){
						//获得cookie的名字
						String cookieName = cookie.getName();
						if(Constants.ecps_cookie.equals(cookieName)){
							//获得cookie数据
							String cookieValue = cookie.getValue();
							//解码[{skuId:1001, quantity:3},{skuId:1003,quantity:2},...]
							cookieValue = URLDecoder.decode(cookieValue);
							//把JSON字符串转换成JSON的数组
							JSONArray ja = JSONArray.fromObject(cookieValue);
							
							//把JSON对象转换成java对象
							cartList = (List<EbCart>) JSONSerializer.toJava(ja, jc);
							for(EbCart cart : cartList){
								EbSku sku = skuDao.selectSkuAndItemById(cart.getSkuId());
								cart.setSku(sku);
							}
						}
					}
				}
		
		return cartList;
	}

	public void clearCart(HttpServletRequest request,
			HttpServletResponse response) {
		//创建JSON的配置对象
		JsonConfig jc = new JsonConfig();
		jc.setRootClass(EbCart.class);
		//设置不操作的属性
		String [] excludes = {"sku"};
		jc.setExcludes(excludes);
		
		List<EbCart> cartList = new ArrayList<EbCart>();
		//获得到本地的所有cookie
		Cookie[] cookies = request.getCookies();
		if(cookies != null && cookies.length > 0){
			for(Cookie cookie : cookies){
				//获得cookie的名字
				String cookieName = cookie.getName();
				if(Constants.ecps_cookie.equals(cookieName)){
					//获得cookie数据
					String cookieValue = cookie.getValue();
					//解码[{skuId:1001, quantity:3},{skuId:1003,quantity:2},...]
					cookieValue = URLDecoder.decode(cookieValue);
					//把JSON字符串转换成JSON的数组
					JSONArray ja = JSONArray.fromObject(cookieValue);
					
					//把JSON对象转换成java对象
					cartList = (List<EbCart>) JSONSerializer.toJava(ja, jc);
					cartList.clear();
					
				}
			}
		}
		
		
		//把cartList转换成JSON的数组对象
		JSONArray ja = JSONArray.fromObject(cartList, jc);
		//把JSON数组转换成字符串
		String cookieValue = ja.toString();
		//把字符串编码
		cookieValue = URLEncoder.encode(cookieValue);
		//创建cookie对象
		Cookie cookie = new Cookie(Constants.ecps_cookie, cookieValue);
		cookie.setMaxAge(Integer.MAX_VALUE);
		cookie.setPath("/");
		response.addCookie(cookie);
		
		
	}

	public String validStockCart(HttpServletRequest request,
			HttpServletResponse response) {
		String tip = null;
		//创建JSON的配置对象
		JsonConfig jc = new JsonConfig();
		jc.setRootClass(EbCart.class);
		//设置不操作的属性
		String [] excludes = {"sku"};
		jc.setExcludes(excludes);
		
		List<EbCart> cartList = new ArrayList<EbCart>();
		//获得到本地的所有cookie
		Cookie[] cookies = request.getCookies();
		if(cookies != null && cookies.length > 0){
			for(Cookie cookie : cookies){
				//获得cookie的名字
				String cookieName = cookie.getName();
				if(Constants.ecps_cookie.equals(cookieName)){
					//获得cookie数据
					String cookieValue = cookie.getValue();
					//解码[{skuId:1001, quantity:3},{skuId:1003,quantity:2},...]
					cookieValue = URLDecoder.decode(cookieValue);
					//把JSON字符串转换成JSON的数组
					JSONArray ja = JSONArray.fromObject(cookieValue);
					
					//把JSON对象转换成java对象
					cartList = (List<EbCart>) JSONSerializer.toJava(ja, jc);
					for(EbCart cart : cartList){
						EbSku sku = skuDao.selectSkuAndItemById(cart.getSkuId());
						if(sku != null && sku.getStockInventory().intValue() < cart.getQuantity().intValue()){
							tip = sku.getItem().getItemName()+"库存不足";
							break;
						}
						
					}
				}
			}
		}
		return tip;
	}
}

定义一个工具类

Constants.java

package com.rl.util;

public interface Constants {
	
	/**
	 * 图片服务器的主机路径
	 */
	public static final String image_path = "http://localhost:8088/ecps-image/";
	
	public static final String ws_pass = "12345";
	
	/**
	 * 商城cookie的名字
	 */
	public static final String ecps_cookie = "ecps_cookie";

}






  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值