谷粒商城实战笔记-244~247-商城业务-购物车-获取合并购物车

news2024/11/16 13:32:17

文章目录

  • 一,244-商城业务-购物车-获取&合并购物车
    • 1,在线购物车和临时购物车的合并
  • 二,245-商城业务-购物车-选中购物项
  • 三,246-商城业务-购物车-改变购物项数量
  • 四,247-商城业务-购物车-删除购物项
  • 五,修改购物车数据的总结

这一节的主要内容:

  • 处理进入购物车,显示购物车中的商品清单
  • 这里需要注意的是,如果是登录后进入购物车,需要将临时购物车中的数据合并到在线购物车中,并清除临时购物车中的内容

一,244-商城业务-购物车-获取&合并购物车

1,在线购物车和临时购物车的合并

后台代码定义了一个名为 getCart 的方法,该方法的主要目的是从缓存中获取用户的购物车信息,并处理登录与未登录状态下的购物车数据合并。

public CartVo getCart() throws ExecutionException, InterruptedException {

        CartVo cartVo = new CartVo();
        UserInfoTo userInfoTo = CartInterceptor.toThreadLocal.get();
        if (userInfoTo.getUserId() != null) {
            //1、登录
            String cartKey = CART_PREFIX + userInfoTo.getUserId();
            //临时购物车的键
            String temptCartKey = CART_PREFIX + userInfoTo.getUserKey();

            //2、如果临时购物车的数据还未进行合并
            List<CartItemVo> tempCartItems = getCartItems(temptCartKey);
            if (tempCartItems != null) {
                //临时购物车有数据需要进行合并操作
                for (CartItemVo item : tempCartItems) {
                    addToCart(item.getSkuId(),item.getCount());
                }
                //清除临时购物车的数据
                clearCartInfo(temptCartKey);
            }

            //3、获取登录后的购物车数据【包含合并过来的临时购物车的数据和登录后购物车的数据】
            List<CartItemVo> cartItems = getCartItems(cartKey);
            cartVo.setItems(cartItems);

        } else {
            //没登录
            String cartKey = CART_PREFIX + userInfoTo.getUserKey();
            //获取临时购物车里面的所有购物项
            List<CartItemVo> cartItems = getCartItems(cartKey);
            cartVo.setItems(cartItems);
        }

        return cartVo;
    }
  1. 初始化:

    • 创建一个 CartVo 对象用于封装返回给调用者的购物车视图信息。
    • 通过线程本地变量 (ThreadLocal) 获取当前用户的信息 (UserInfoTo 对象),其中包含了用户 ID 和用户 Key。
  2. 处理已登录用户:

    • 如果用户已登录(即 userId 不为空):
      • 构造用户的购物车键 (cartKey) 和临时购物车键 (temptCartKey)。
      • 检查临时购物车是否存在数据:
        • 如果存在,则将临时购物车中的每一件商品添加到用户的正式购物车中。
        • 清空临时购物车。
      • 最终从用户的正式购物车 (cartKey) 中获取所有购物项并设置到 CartVoitems 属性中。
  3. 处理未登录用户:

    • 如果用户未登录(即 userId 为空):
      • 使用用户 Key 构造临时购物车键 (cartKey)。
      • 从临时购物车中获取所有购物项并设置到 CartVoitems 属性中。
  4. 返回结果:

    • 返回填充了购物车数据的 CartVo 对象。

注意,这里有一些假设:

  • 方法 getCartItems 用于从缓存中获取指定键的购物项列表。
  • 方法 addToCart 用于向用户的购物车中添加商品。
  • 方法 clearCartInfo 用于清空特定购物车键的购物车信息。
  • 常量 CART_PREFIX 是用来构建缓存键的前缀。

该方法确保无论是已登录还是未登录的用户都能正确地获取到其购物车信息,并且对于已登录用户还会合并之前临时购物车中的数据。

二,245-商城业务-购物车-选中购物项

这一节的主要内容是,在购物车中:

  • 但用户选中一些商品后,将选择的商品发送到后台,后台修改保存在缓存中的商品信息,主要是修改其中的选中与否属性,让后让页面重定向到购车清单界面,相当于刷新当前界面

关于购物车的选中逻辑,总结如下:

  • 购物车选择与否作为一个属性,保存在购物车项对象中
    在这里插入图片描述

  • 加购后默认是选中的

  • 用户取消或者选中购物车中的商品,都会发出请求

  • 后台接受到请求后,修改保存在redis中的商品的check属性

  • 重定向到购物车清单界面,后台根据是否选中重新计算总价

  • 每次点击选中或取消选中都会向后台发出请求,这样是不是会刷新界面,用户体验不好

  • 向后台发出请求,是有必要的,因为总价的计算,涉及优惠信息,而优惠是和用户选中的商品有关的,前端处理不了

三,246-商城业务-购物车-改变购物项数量

这一节的主要内容是处理前端在购物车界面增减数量的功能,这是第4个修改购物车数据的功能。

四,247-商城业务-购物车-删除购物项

这一节的主要内容是处理前端在购物车界面删除商品的功能,这是第5个修改购物车数据的功能。

五,修改购物车数据的总结

有以下几个涉及修改购物车数据的逻辑点:

  • ① 加购
  • ② 用户登录后,在线购物车合并临时购物车数据
  • ③ 删除购物车数据
  • ④ 选中或者取消选中购物车中的商品
  • ⑤ 购物车中的商品的数量增减

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2067335.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

揭秘电子版招生简章的制作方法!

随着科技的不断发展&#xff0c;越来越多的学校和企业开始采用电子版招生简章来代替传统的纸质版招生简章。电子版招生简章不仅能够节省印刷成本&#xff0c;还可以通过互联网进行快速传播&#xff0c;提高宣传效果。那么&#xff0c;如何制作一份精美的电子版招生简章呢&#…

USART串口通讯函数实现 (基于寄存器)

环境 芯片:STM32F103ZET6 库&#xff1a;来自HAL的STM32F1XX.H 原理图 如图可知TX和RX两条线接到了PA9和PA10 Driver_USART1.h #ifndef __DRIVER_USART1_H #define __DRIVER_USART1_H#include "stm32f1xx.h"/*** 初始化USART1 完成相关配置 能够调用下面收发数据…

基于Java的汽车在线销售系统

你好呀&#xff0c;我是计算机学姐码农小野&#xff01;如果有相关需求&#xff0c;可以私信联系我。 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;Java技术 MySQL数据库 B/S结构 SSM框架 工具&#xff1a;IDEA/Eclipse、Navicat、Maven 系统展…

学院党员管理系统

TOC ssm002学院党员管理系统jsp 第1章 绪论 1.1 课题背景 互联网发展至今&#xff0c;无论是其理论还是技术都已经成熟&#xff0c;而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播&#xff0c;搭配信息管理工具可以很好地为人们提供服务。所以各行业&#…

从零开始学习深度学习库-6:集成新的自动微分模块和MNIST数字分类器

在上一篇文章中&#xff0c;我们完成了自动微分模块的代码。深度学习库依赖于自动微分模块来处理模型训练期间的反向传播过程。然而&#xff0c;我们的库目前还是“手工”计算权重导数。现在我们拥有了自己的自动微分模块&#xff0c;接下来让我们的库使用它来执行反向传播吧&a…

【深度分析】从《黑神话:悟空》看国产游戏的出海之路

8月20日&#xff0c;中国3A游戏《黑神话&#xff1a;悟空》正式上线并全球发行。正式发布后不到一小时&#xff0c;《黑神话&#xff1a;悟空》就超越《CS2》成为Steam&#xff08;全球最大的综合性数字发行平台之一&#xff09;最受欢迎游戏排行榜冠军&#xff0c;同时在线玩家…

进阶-3.SQL优化

SQL优化 1. 插入数据2.主键优化3.order by 优化4.group by 优化5.limit优化6.count优化7.update优化8.总结 1. 插入数据 insert优化 批量插入 insert into user values(1,tom),(2,Cat),(3,Hello);手动事务提交 start transaction; insert into user values(1,tom),(2,Cat),…

区块链浪潮:Web3时代的数字经济新格局

随着科技的迅猛发展&#xff0c;全球经济正迎来一场前所未有的变革&#xff0c;区块链技术正在其中扮演着关键角色。Web3作为下一代互联网的核心&#xff0c;正在通过区块链技术重塑数字经济的格局&#xff0c;为全球市场带来新的机遇和挑战。这场以去中心化为特征的技术革命&a…

『功能项目』鼠标双击人物跟随【03】

我们打开上一篇02的射线点击项目&#xff0c; 本章要做的事情是在PlayerRayNavgation脚本中添加一个双击跟随函数&#xff0c;实现人物在场景中鼠标双击后主角跟随鼠标移动功能。 添加代码后保存代码运行项目&#xff0c;鼠标双击后主角即可实现跟随鼠标移动效果。 本篇只实现了…

PHP之 in_array判断出来的结果错误

示例 <?php $a "[232087,232468,234691,235390,235513,235550,235573,235611,235636,235637,235652,235672,235674,235695,235697,235711,235721,235733,235739,235754,235764,235795,235808,235833,235834,235836,235857,235861,235870,235883,235887,235888,23591…

STM32————SPI硬件外设实现读写

首先是理论知识&#xff1a; 常用8位数据帧、高位先行 SPI的时钟由PCLK内部时钟分频得来&#xff0c;最大可到36MHz 精简为半双工就是去掉一根数据线后&#xff0c;用剩下的一根作为发送/接收数据&#xff1b;单工就是去掉接收线&#xff0c;只用发送线进行发送数据&#xf…

python绘制爱心代码

效果展示 完整代码 Python中绘制爱心的代码可以通过多种方式实现&#xff0c;高级的爱心代码通常指的是使用较复杂的算法或者图形库来生成更加精致的爱心图形。下面是一个使用Python的Turtle模块来绘制爱心的示例代码&#xff1a; import turtledef draw_love():turtle.speed…

python-货物种类(赛氪OJ)

[题目描述] 某电商平台有 n 个仓库&#xff0c;编号从 1 到 n 。当购进某种货物的时候&#xff0c;商家会把货物分散的放在编号相邻的几个仓库中。我们暂时不考虑售出&#xff0c;你是否能知道&#xff0c;当所有货物购买完毕&#xff0c;存放货物种类最多的仓库编号为多少&…

数字身份革命:探索Web3对个人隐私的保护

在数字化时代&#xff0c;个人隐私和数据保护成为越来越重要的话题。随着Web3的兴起&#xff0c;这一领域正在经历一场深刻的变革。Web3不仅仅是技术的演进&#xff0c;更是对个人隐私保护的一次革命性革新。本文将探讨Web3如何通过去中心化技术重新定义数字身份&#xff0c;并…

Moodle集成ONLYOFFICE文档:提高师生协作效率的最佳解决方案

引言 通过一些教育机构和老师朋友的推荐&#xff0c;我最近了解到了一款非常实用的办公软件组合——Moodle与ONLYOFFICE。作为一名教师&#xff0c;日常教学中的文档编辑、课程管理和学生协作是不可避免的任务。虽然市场上有很多办公软件&#xff0c;但Moodle与ONLYOFFICE的结…

稚晖君智元机器人远程机器人系列发布:引领具身智能新高度

在最近的发布会上&#xff0c;前华为“天才少年”稚晖君及其团队亮相了他们的最新作品——智元机器人的第二代远程机器人系列。这次发布会不仅展示了丰富的产品线&#xff0c;还揭示了其未来的发展路线以及开源计划。本文将详细解析本次发布会的亮点和技术背后的创新。 一、发…

企业数字化转型是什么?有什么用?

什么是数字化转型&#xff1f;为什么要数字化转型&#xff1f;对企业有何价值&#xff1f;一文给你讲透&#xff01; 先来给大家简单易懂的方式介绍一下&#xff0c;就很明白什么是数字化&#xff1f;企业为什么要数字化转型了。 “信息化”可理解为&#xff1a;是用电脑或者手…

BAT 实现五子棋人机对战

&#x1f680;欢迎互三&#x1f449;&#xff1a;程序猿方梓燚 &#x1f48e;&#x1f48e; &#x1f680;关注博主&#xff0c;后期持续更新系列文章 &#x1f680;如果有错误感谢请大家批评指出&#xff0c;及时修改 &#x1f680;感谢大家点赞&#x1f44d;收藏⭐评论✍ 引言…

【python】Python中小巧的异步web框架Sanic快速上手实战

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

Java 3.1 - 计算机网络

目录 OSI 七层协议是什么&#xff1f;每一层的作用是什么&#xff1f; TCP / IP 四层模型是什么&#xff1f;每一层的作用是什么&#xff1f; 应用层&#xff08;Application Layer&#xff09; 传输层&#xff08;Transport Layer&#xff09; 网络层&#xff08;Network …