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

day08一、购物车业务简介 功能要求:要持久化,保存到数据库中。Mysql – cartInfo利用缓存提高性能。Redis未登录状态也可以存入购物车,一旦用户登录要进行合并操作。同步保存Redis,异步更新Mysql三、功能—添加入购物车3.1 功能解析:1、 商品详情页添加购物车2、 添加购物车,用户可以不需要登录,如果用户没有登录,则生成临时用户id,购物车商品与临时用户id关联,当用户登录后,将临时用户id的购物车商品与登录用户id的商品合并3、 商品详情添加购物车时,先
摘要由CSDN通过智能技术生成

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
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

明月常新

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

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

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

打赏作者

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

抵扣说明:

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

余额充值