商城电商day12一、购物车业务简介

本文介绍了电商购物车业务的实现,包括添加购物车功能的解析与开发,使用Redis进行缓存优化,以及合并购物车的重点。在添加购物车时,会检查用户是否登录,若未登录则创建临时用户ID。同时,文章提到了展示购物车列表、选中状态的变更及其异步操作策略,确保性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

day08一、购物车业务简介

 功能要求:
  1. 要持久化,保存到数据库中。Mysql – cartInfo
  2. 利用缓存提高性能。Redis
  3. 未登录状态也可以存入购物车,一旦用户登录要进行合并操作。
  4. 同步保存Redis,异步更新Mysql

三、功能—添加入购物车

3.1 功能解析:

1、 商品详情页添加购物车
2、 添加购物车,用户可以不需要登录,如果用户没有登录,则生成临时用户id,购物车商品与临时用户id关联,当用户登录后,将临时用户id的购物车商品与登录用户id的商品合并
3、 商品详情添加购物车时,先判断用户是否登录,如果没登录,再判断是否存在临时用户,如果cookie中也没有临时用户,则生成临时用户

分析用到那几张表
cart_info(购物车表) user_id sku_id
SQL语句

控制层

业务层Dao层
无返回值 参数 Long skuId, String userId, Integer skuNum

难点
添加购物车的逻辑
/*
1. 添加商品之前,先看一下购物车中是否有该商品
true:
商品数量相加
false:
直接加入购物车
2. 将数据同步到redis!

     */

// 1 获取到购物车key
// 2购物车的key 在缓存中不存在!
// 3 加载数据库中的数据到缓存!
//// 4缓存中有商品 数量相加
// 5赋值商品的实时价格
// 6从新设置修改时间
// 7再次选中
// 8执行更新语句
/// 8缓存中没有商品 插入
//9先远程调用getSkuInfo 得到SkuInfo
//10购物车设置的属性由SkuInfo.get获取
// 11 执行数据库操作
// 放入缓存

思路:既然userId是从服务网关统一传递过来的,那么临时用户id我们也可以从网关传递过来,改造网关
网关中获取临时用户id
在server-gateway 项目中添加

网关中获取临时用户id
在server-gateway 项目中添加

/**
 * 获取当前用户临时用户id
 * @param request
 * @return
 */
private String getUserTempId(ServerHttpRequest request) {
   
   
    String userTempId = "";
    List<String> tokenList = request.getHeaders().get("userTempId");
    if(null  != tokenList) {
   
   
        userTempId = tokenList.get(0);
    } else {
   
   
        MultiValueMap<String, HttpCookie> cookieMultiValueMap =  request.getCookies();
        HttpCookie cookie = cookieMultiValueMap.getFirst("userTempId");
        if(cookie != null){
   
   
            userTempId = URLDecoder.decode(cookie.getValue());
        }
    }
    return userTempId;
}


将userTempId 添加header请求头

//设置网关请求头
String userTempId = this.getUserTempId(request);
if(!StringUtils.isEmpty(userId) || !StringUtils.isEmpty(userTempId)) {
   
   
    if(!StringUtils.isEmpty(userId)) {
   
   
        request.mutate().header("userId", userId).build();
    }
    if(!StringUtils.isEmpty(userTempId)) {
   
   
        request.mutate().header("userTempId", userTempId).build();
    }
    //将现在的request 变成 exchange对象
    return chain.filter(exchange.mutate</
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

明月常新

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值