概述
购物车和订单是电商项目的核心,本文将简单介绍一下两者的实现。
一、购物车功能实现
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