关于电商项目的购物车总结和购物车实现

关于电商项目的购物车总结和购物车实现

本文中简述的购物车模仿京东的模式,用户没有登录,也可进行购物车的操作,如果用户登录了,则在数据库中操作购物车。我们基于存放在cookies里面。

先看添加到购物车的按钮

在这里插入图片描述

看这个界面是因为,如果放代码,因为代码中很多的数据是与其他相互关联的,所以只要理解了购物车的模式和方法,实现起来就没有那么复杂了,这里放一下,加入购物车需要哪些参数

    <form id="cart_form" action="add_cart.do" method="post">
        <input type="hidden" name="sku_mch" value="${obj_sku.sku_mch}"/>//商品的描述
        <input type="hidden" name="sku_jg" value="${obj_sku.jg}"/>//商品的价格
        <input type="hidden" name="tjshl" value="1"/>//添加数量
        <input type="hidden" name="hj" value="${obj_sku.jg}"/>//合计
        <input type="hidden" name="shp_id" value="${obj_sku.shp_id}"/>//商品的ID
        <input type="hidden" name="sku_id" value="${obj_sku.id}"/>//sku的ID
        <input type="hidden" name="shp_tp" value="${obj_sku.spu.shp_tp}"/>//商品的图片
        <input type="hidden" name="shfxz" value="1"/>//是否选中
        <input type="hidden" name="kcdz" value="${obj_sku.kcdz}"/>//库存地址
        <c:if test="${not empty user}">
            <input type="hidden" name="yh_id" value="${user.id}"/>//是否用户登录
        </c:if>
        <img src="images/shop.jpg" οnclick="cart_submit()" alt="" style="cursor:pointer;">
    </form>

这些信息可根据实际的业务需求来添加和减少,根据购物车的字段进行传参。这里其实还要对商品的库存进行查询,判断商品的库存是否大于等于用户加入购物车商品的数量,也要检查当前游览器是否支持cookies,

后台java代码

购物车bean

public class T_MALL_SHOPPINGCAR {
	private int id;
	private String sku_mch;
	private double sku_jg;
	private int tjshl;
	private double hj;
	private int yh_id;
	private int shp_id;
	private Date chjshj;
	private int sku_id;
	private String shp_tp;
	private String shfxz;
	private String kcdz;
    //setter 与 getter 方法省。。。。
}
@RequestMapping("add_cart")
public String add_cart(HttpSession session, HttpServletResponse response,
                           @CookieValue(value = "list_cart_cookie", required = false) String list_cart_cookie,T_MALL_SHOPPINGCAR cart, ModelMap map) {
        List<T_MALL_SHOPPINGCAR> list_cart = new ArrayList<T_MALL_SHOPPINGCAR>();
        int yh_id = cart.getYh_id();
        // 添加购物车操作
        if (yh_id == 0) {
            // 用户未登陆,操作cookie
            if (StringUtils.isBlank(list_cart_cookie)) {
                list_cart.add(cart);
            } else {
                list_cart = MyJsonUtil.json_to_list(list_cart_cookie, T_MALL_SHOPPINGCAR.class);
                // 判断是否重复
                boolean b = if_new_cart(list_cart, cart);
                if (b) {
                    // 新车,添加
                    list_cart.add(cart);
                } else {
                    // 老车,更新
                    for (int i = 0; i < list_cart.size(); i++) {
                        if (list_cart.get(i).getSku_id() == cart.getSku_id()) {
                            /*遍历循环,要有相同的商品,则把购物车的商品 数量加一*/
                            list_cart.get(i).setTjshl(list_cart.get(i).getTjshl() + cart.getTjshl());
                            /*计算该商品的合计,该商品的数目 * 该商品的价格*/
                            list_cart.get(i).setHj(list_cart.get(i).getTjshl() * list_cart.get(i).getSku_jg());
                        }}
                }}
            // 覆盖cookie
            Cookie cookie = new Cookie("list_cart_cookie", MyJsonUtil.list_to_json(list_cart));
            cookie.setMaxAge(60 * 60 * 24);
            response.addCookie(cookie);
        } else {
            list_cart = (List<T_MALL_SHOPPINGCAR>) session.getAttribute("list_cart_session");// 数据库
            // 用户已登陆,操作db

            /*判断该商品是否存在*/
            boolean b = cartService.if_cart_exists(cart);

            if (!b) {
                cartService.add_cart(cart);
                if (list_cart == null || list_cart.isEmpty()) {
                    list_cart = new ArrayList<T_MALL_SHOPPINGCAR>();
                    list_cart.add(cart);
                    session.setAttribute("list_cart_session", list_cart);
                } else {
                    list_cart.add(cart);
                }
            } else {
                for (int i = 0; i < list_cart.size(); i++) {
                    if (list_cart.get(i).getSku_id() == cart.getSku_id()) {
                        list_cart.get(i).setTjshl(list_cart.get(i).getTjshl() + cart.getTjshl());
                        list_cart.get(i).setHj(list_cart.get(i).getTjshl() * list_cart.get(i).getSku_jg());
                        // 老车,更新
                        cartService.update_cart(list_cart.get(i));
                    }
                }
            }
        }
        return "redirect:/cart_success.do";
    }

    private boolean if_new_cart(List<T_MALL_SHOPPINGCAR> list_cart, T_MALL_SHOPPINGCAR cart) {
        boolean b = true;
        for (int i = 0; i < list_cart.size(); i++) {
            if (list_cart.get(i).getSku_id() == cart.getSku_id()) {
                b = false;
            }
        }
        return b;
    }

这里我把实现的业务放到了controller来方便查看,这里我们可以看到这个@CookieValue(value = “list_cart_cookie”, required = false) String list_cart_cookie,可以获得cookies得值,如没有则是空,而这个不是必须的,首先根据页面是否传来ID来判断用户是否登录,如果用户没有登录,则进行cookies的操作,先判断获得的list_cart_cookie是否为空,如果为空,说明用户还未加商品,直接将商品加入到购物车集合就行了,如果cookies有购物车,先将购物车转为对象,因为cookies获得的值为String类型,判断用户添加的商品与购物车已经存在的商品是否有重复的,遍历商品,看在购物车里面是否存在即可,如不存在,则直接添加,存在,将商品的数量和购物车商品的数量相加,计算商品的总价格,更新购物车,覆盖cookies,如果用户已经登录了,则将购物车从session中获取(用户在登录的时候,已经将购物车与session同步),接下来的步骤与未登录的步骤是一样的,看代码即明白了。

最后使用 return “redirect:/cart_success.do”;防止用户多次提交表单。使用redirect的母的就是防止用户刷新表单,数据再一次提交。下面来看购物车的列表

在这里插入图片描述

这里可以对购物车进行改删和进行数量的修改。这些功能不是很难,这里就不给代码了,以及点击图片可以查看商品的详情。大概购物车的功能差不多了,日后想到在补充。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值