电商项目购物车及订单系统实现

概述

购物车和订单是电商项目的核心,本文将简单介绍一下两者的实现。

一、购物车功能实现

1.功能说明

1、商品加入购物车时,不是必须要求登录。

2、计算购物车中商品的总价。当商品数量发生变化时需要重新计算。

3、用户可以删除购物车中的商品。

4、用户下单后,删除购物车的功能。

2.功能分析

1、在用户不登陆的清空下也可以使用购物车,那么就需要把购物车信息放入cookie中。

2、可以把商品信息,存放到pojo中,然后序列化成json存入cookie中。

3、取商品信息可以从cookie中把json数据取出来,然后转换成java对象即可。

4、此功能只需要操作cookie不需要数据库的支持,所以只需要在taotao-portal中实现即可。

5、购物车分有四种动作

a) 添加商品

b) 修改商品数量

c) 删除购物车中的商品

d) 展示购物车商品列表

缺点:换一台电脑后购物车的商品不能同步。

实现的工程:taotao-protal中实现购物车功能。只需要调用商品信息的服务,除此之外不需要和其他系统交互。

3.添加购物车商品

3.1流程分析

在商品详情页面点击“加入购物车”按钮提交一个请求吧商品id传递给Controller,Controller接收id,Controller调用Service根据商品id查询商品基本信息。把商品写入cookie中,加入cookie之前先从cookie中把购物车的商品取出来判断当前购物车商品列表中是否有此商品,如果有数量加一,如果没有添加一个商品,数量为1。展示给用户购物车列表。

创建购物车商品POJO:

public class CartItem {
   

	private long id;
	private String title;
	private Integer num;
	private long price;
	private String image;
}

3.2Service层

功能:接收一个商品id,数量(默认为1),根据商品id查询商品信息。调用taotao-rest的服务。把商品添加到购物车,先把购物车商品列表取出来,判断列表中是否有此商品,如果有就增加数量就可以了。如果没有把此商品添加到商品列表。返回添加成功Taotaoresult。

//添加购物车商品
@Override
public TaotaoResult addCartItem(long itemId, int num, HttpServletRequest request, HttpServletResponse response) {
   
    CartItem cartItem =null;
    //取购物车商品列表
    List<CartItem> list = getCartItemList(request);
    //判断购物车商品列表中是否存在此商品
    for (CartItem cItem : list) {
   
        //如果存在此商品
        if(cItem.getId()==itemId) {
   
            //增加商品数量
            cItem.setNum(cItem.getNum()+num);
            cartItem=cItem;
            break;
        }
    }
    //没找到
    if(cartItem==null) {
   
        cartItem = new CartItem();
        //根据商品id查询商品基本信息。
        String json = HttpClientUtil.doGet(REST_BASE_URL + ITEM_INFO_URL + itemId);
        //把json转换成java对象
        TaotaoResult taotaoResult = TaotaoResult.formatToPojo(json, TbItem.class);
        if(taotaoResult.getStatus()==200) {
   
            TbItem item = (TbItem) taotaoResult.getData();
            cartItem.setId(item.getId());
            cartItem.setTitle(item.getTitle());
            cartItem.setImage(item.getImage() == null ? "":item.getImage().split(",")[0]);
            cartItem.setNum(num);
            cartItem.setPrice(item.getPrice());
        }
        //添加到购物车列表
        list.add(cartItem);
    }
    //把购物车列表写入cookie
    CookieUtils.setCookie(request, response, "TT_CART", JsonUtils.objectToJson(list),true);
    return TaotaoResult.ok();
}

//从cookie中取商品列表
private List<CartItem> getCartItemList(HttpServletRequest request){
   
    String cartJson = CookieUtils.getCookieValue(request, "TT_CART", true);
    if(cartJson==null)return new ArrayList<>();
    //把json转换成商品列表
    try {
   
        List<CartItem> list = JsonUtils.jsonToList(cartJson, CartItem.class);
        return list;
    } catch (Exception e) {
   
        e.printStackTrace();
    }
    return new ArrayList<>();
}

3.3Controller层

接收商品的id和商品的数量,商品数量如果为空默认为1.调用Service向购物车添加商品。展示添加成功页面。

请求的url:http://localhost:8082/cart/add/144141542125084.html

@Controller
@RequestMapping("/cart")
public class CartController {
   

	@Autowired
	private CartService cartService;
	
	@RequestMapping("/add/{itemId}")
	public String addCartItem(@PathVariable Long itemId, 
			@RequestParam(defaultValue="1")Integer num
  • 7
    点赞
  • 114
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值