1, 需求

2,加入购物车的思路图

3,加入购物车的接口

4,配置公钥,加载公钥

5,获取token,用户信息

6,后台购物车——数据结构设计

当用户登录时,我们需要把购物车数据保存到后台,可以选择保存在数据库。但是购物车是一个读写频率很高的数据。因此我在这里选择读写效率比较高的Redis作为购物车存储。
Redis有5种不同数据结构,这里选择哪一种比较合适呢?

  • 首先不同用户应该有独立的购物车,因此购物车应该以用户的作为key来存储,Value是用户的所有购物车信息。这样看来基本的k-v结构就可以了。
  • 但是,我们对购物车中的商品进行增、删、改操作,基本都需要根据商品id进行判断,为了方便后期处理,我们的购物车也应该是k-v结构,key是商品id,value才是这个商品的购物车信息。

综上所述,我们的购物车结构是一个双层Map:Map<String,Map<String,String>>

  • 第一层Map,Key是用户id
  • 第二层Map,Key是购物车中商品id,值是购物车数据

7,添加购物车

@Service
public class CartService {@Autowiredprivate RedisTemplate<String, String> redisTemplate;@Autowiredprivate SkuClient skuClient;@Autowiredprivate JwtProperties jwtProperties;/*** 用户登录的时候,可以一个一个添加商品进购物车** @param cartRequest* @param req*/public void addCart(Cart cartRequest, HttpServletRequest req) {//1,获取tokenString token = req.getHeader("authorization");// 2,公钥解密UserInfo userInfo = null;//3,默认解析成功boolean flag = true;try {// 拿着这个头的信息进行公钥解密userInfo = JwtUtils.getInfoFromToken(token, jwtProperties.getPublicKey());} catch (Exception e) {e.printStackTrace();//解析失败flag = false;}// 解析失败,就无需继续执行下去if (!flag) {return;}//4,根据UserID去购物车中取数据String shop = redisTemplate.opsForValue().get(userInfo.getId().toString());//5,判断Redis中是否有购物车的数据if (shop != null && StringUtils.isNoneBlank(shop)) {// 6,解析shop,把shop转成Cart集合List<Cart> carts = JSON.parseArray(shop, Cart.class);// 7,遍历当前购物车集合,判断商品是否已经存在Cart cart = null;for (Cart c : carts) {// 8,判断Redis里面的sku,是否跟前台传过来的sku一样if (c.getSkuid().equals(cartRequest.getSkuid())) {//把redis里面的数据给购物车。cart = c;break;}}if (cart != null) {// 9,如果存在,改变数量//取出cart对象修改,由于是对象,是引用数据类型,在外面改了,List集合中的数据也会自动改变cart.setCount(cart.getCount() + cartRequest.getCount());} else {//10,如果不存在,则追加carts.add(cartRequest);}// 11,存入redis,JSON.toJSONString转成JSonredisTemplate.opsForValue().set(userInfo.getId().toString(), JSON.toJSONString(carts));} else {//12,shop没有值ArrayList<Cart> carts = new ArrayList<>();carts.add(cartRequest);redisTemplate.opsForValue().set(userInfo.getId().toString(), JSON.toJSONString(carts));}}
}

8,接收请求

测试

前后端分离电商B2C模式之_后台_购物车相关推荐

  1. 前后端分离电商B2C模式之_后端_商品评论功能

    需求 总之这个需求就是把数据查出来就行了. 1. 业务分析 功能一:计算好评数.中评数和差评数 功能二:查找买家印象 功能三:获取评论 2,数据库 3,接口文档 4,这里实体类就不写了. 5,根据接口 ...

  2. 前后端分离-电商项目

    电商 定义 指在互联网(Internet).内部网(Intranet)和增值网(VAN,Value Added Network)上以电子交易方式进行交易活动和相关服务活动 电商的分类 B2B(Busi ...

  3. 商城前后端prd文档/经销商门户/瓶箱回收系统/组织管理平台/系统管理后台/商城文档/司机管理移动端原型/电商前后端原型/电商前后端需求文档//运输公司管理/产品库管理/资金管理/移动端电商原型文档

    商城前后端prd文档/经销商门户/瓶箱回收系统/组织管理平台/系统管理后台/商城文档/司机管理移动端原型/电商前后端原型/电商前后端prd文档/后台管理系统原型/运输公司管理/产品库管理/资金管理/移 ...

  4. 基于VUE+DJANGO开发的前后端分离的官方网站系统带管理后台

    前言 每个企业都有开发一个官方网站的需求,用于展示企业的产品和服务,企业的文化宗旨和品牌形象等,并要求网站有比较强的自由定制的功能.为此,我开发了这款官方网站系统,自带轻便的管理后台,在后台简单修改下 ...

  5. Hybris平台Web架构模式演变:前后端分离

    "前后端分离"显然已不是什么新鲜的话题,表面上看是一场架构模式的变革,但实质上是为了解决以往传统的服务端MVC设计模式的一些诟病和痛点.前后端分离带来的全新的前后端协作方式能够让专 ...

  6. Node — 第六天(前后端分离)及(身份验证)

    综合应用服务端知识点搭建项目 下载安装所需的第三方模块 npm init -y npm i express cors mysql # express 用于搭建服务器 # cors 用于解决跨域 # m ...

  7. 9.1 电商B2C商铺新用户复购预测

    电商B2C商铺新用户复购预测 1. 电商B2C模式介绍 1.1 电商主要业务模式 B2B C2C B2C 1.2 B2C主要业务功能 平台盈利模式 1.3 商家数据分析师日常 1.3.1 日报周报(数 ...

  8. 移动端开发者眼中的前端开发流程变迁与前后端分离

    写在最开始 这是一篇面向移动端开发者的科普性文章,从前端开发的最初流程开始,结合示范代码,讨论开发流程的演变过程,希望能覆盖一部分前端开发技术栈,从而对前端开发的相关概念形成初步的认识. 本文会提供一 ...

  9. springboot jwt token前后端分离_为什么要 前后端分离 ?

    作 者:互扯程序 来 源:互扯程序 广而告之:由于此订阅号换了个皮肤,系统自动取消了读者的公众号置顶.导致用户接受文章不及时.您可以打开订阅号,选择置顶(星标)公众号,重磅干货,第一时间送达! 本文知 ...

最新文章

  1. 数组中查找並返回数组_用Python查找数组中出现奇数次的那个数字
  2. Linux之DNS服务器搭建及常见DNS***和防御
  3. Java GregorianCalendar getActualMaximum()方法与示例
  4. STM32F407之资源
  5. 笨办法学 Python · 续 练习 47:`bc`
  6. MySQL时间段查询,无数据补0
  7. SpringBoot Field aFeign in xxxx required a bean of type 'xxx' that could not be found.
  8. Oracle SQL计算周
  9. 最适合游戏的显卡排行榜,显卡天梯图
  10. 如何用CSS动画特效让图片旋转起来
  11. 小项目2——(未登录)指定微博账号基本公开信息的搜集
  12. 怎么求最大公因数和最小公倍数
  13. 黑马头条项目-Vue-day9-文章详情模块、关注与取消关注,点赞和喜欢功能
  14. 苹果和老降噪芯片合作商分手: iPhone 5 Siri 有变?
  15. 开心消消乐java下载_开心消消乐下载_开心消消乐下载最新iPhone版-太平洋下载中心...
  16. 司创电梯发卡软件_防复制电梯IC卡系统上位机管理软件设计
  17. 画中画怎么制作?教你如何录制画中画视频,图文教学
  18. 天勤排序算法汇总(数据结构)
  19. elasticsearch 中文API river
  20. RiPro主题二级菜单添加小圆点图标

热门文章

  1. 【Mybatis】Mybatis将String类型的0存到数据库中的number类型字段中,变成了空;
  2. Vmware安装OpenWrt
  3. 键盘·由于其配置信息(注册表中的)不完整或已损坏,Windows 无法启动这个硬件设备。 (代码19)
  4. gcc / -Wl,-Bsymbolic
  5. 集群节点启动报错 BEA-000386
  6. x.norm(p=2,dim=1,keepdim=True)
  7. 数学_矩阵求逆/伪逆计算
  8. 用latex排版LNCS模板的论文
  9. CentOS 6.4下安装和配置Samba - 行知小筑 - 51CTO技术博客
  10. 月薪3w算法工程师日均7行代码被开除 / AI歌手入学上海音乐学院 / 天文照片被植入恶意代码...