购物车实现方式比较:cookie+session、数据库与缓存+数据库的优缺点分析
获取购物车的数量并将其添加到购物车中如何实施购物车
1: +,简单,不安全,不能跨平台
2:数据库,跨平台。慢速
三:缓存 +数据库,跨平台,快速速度。
购物车过程:
JD:
未登录:存储和显示购物车信息
登录:购物车信息和(缓存 +数据库)购物车信息
合并和显示,购物车信息将与用户信息相关联并存储在(缓存 +数据库)中
TB:登录:将购物车信息存储在(缓存 +数据库)中,并将其与用户信息相关联
在这里,我们没有登录。单击以添加购物车以让他登录。像一样,将购物车信息存储到数据库中,并将购物车信息与用户信息相关联。 redis ---键(admin)值((产品ID,))
购物车问题:
问题1:多家商人的产品是否属于同一购物车?根据商人在产品显示之间的区别,一个分区是一个
问题2:购物车的价格是否与当前价格不一致?最新价格将占上风。每个操作必须检查最新价格
问题3:在添加到购物车中后,您会减少商品清单吗?不,订单分为预订和最终订单。只有在进行最终订单进行时,项目库存才会减少。
现在,我们需要将用户信息与购物车相关联。有用户信息和购物车,他们需要使用redis缓存和数据库。
然后,我们可以让redis的键为用户信息,redis的值是哈希类型,并且redis的哈希通常用于存储对象。
哈希的数据结构是一个,可以管理的关键,该地图的值是产品ID,以及该购物车对象的值。
此地图中有多个购物车对象。计算总和时,您需要计算每个元素的项目数,然后添加它们。
检查前端页面,发现有一个显示购物车的数量。如果您登录,请将购物车和用户信息的数量关联,请查询Redis以获取购物车对象,并检查总数,否则,它将始终为0。
RPC服务的操作
由于添加购物车和查看购物车产品总量的操作在订单系统和前台系统中可用,因此我们提取了此操作并将其包装到服务中,并将其放置在RPC中。
检查购物车的数量
检查前端页面,发现有一个显示购物车的数量。如果您已登录,请将用户信息与购物车哈希相关联,查询Redis以获取购物车地图,并检查产品总数,否则,它将始终为0。
首先,通过获得管理员,我们确定管理员是否为空以及是否存在。如果存在,它将获取购物车地图,将地图中的每个项目获取以获取每个项目的数量,然后总和地图中的产品对象数量。
获取哈希存储的对象
(键)是Redis提供的一种方法,以获取哈希表中指定键的所有键值对。它返回包含与哈希表中键相对应的所有字段和字段值的地图对象。
具体而言,它是通过REDIS中的命令实现的,该命令可以返回哈希表中指定键的所有字段和值。在此命令的返回结果中,所有字段和相应的值都存储在地图中,密钥是字段名称,值是字段的值。因此,在返回的映射对象(键)中,密钥是哈希表中所有字段的名称,值是相应字段的值。它们是对应于Redis中的键值对的一对一。
在上面的代码中,。(键)返回一个地图对象,其中包含Redis Hash表中指定键的所有字段和相应值。在此地图对象上,
在这里,您可以使用新的JDK8功能。
地图本身是一个集合,但是没有地图。()方法。您必须返回地图中所有值的集合()视图(),然后将视图转换为对象。使用()。()方法取出对象的产品数量,最后使用sum()方法来总和。
()是Java 8中的API中的一种方法。它可以映射一个元素以键入int并返回对象
方法说明:
该图层调用管理方法,前景通过管理方法传递,该方法确定了admin在方法中是否为空,并且如果该方法为空,则返回0。否则,(ID)会根据用户信息从REDIS数据库查询,然后确定此值是否为空。()。如果我们不遍历此地图,则可以使用MAP。()返回地图值的视图,然后调用单列集合的()方法。然后,因为我们要计算总和,所以我们需要取出地图中的产品数,然后找到总和。因此,我们使用()将流映射到int值,然后将sum()映射到总和。
<p><pre> <code class="prism language-cpp"><span class="token comment">/**
* 查询购物车数量
* @param admin
* @return
*/</span>
@Override
<span class="token keyword">public</span> Integer <span class="token function">getCartNum</span><span class="token punctuation">(</span>Admin admin<span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token comment">//如果用户信息不存在,直接返回</span>
<span class="token keyword">if</span> <span class="token punctuation">(</span>null<span class="token operator">==</span>admin<span class="token operator">||</span>null<span class="token operator">==</span>admin<span class="token punctuation">.</span><span class="token function">getAdminId</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">{</span>
<span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token comment">//初始化购物车数量</span>
Integer result <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span>
hashOperations <span class="token operator">=</span> redisTemplate<span class="token punctuation">.</span><span class="token function">opsForHash</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
Map<span class="token operator"><</span>String<span class="token punctuation">,</span> String<span class="token operator">></span> cartMap <span class="token operator">=</span> hashOperations<span class="token punctuation">.</span><span class="token function">entries</span><span class="token punctuation">(</span>userCart <span class="token operator">+</span> <span class="token string">":"</span> <span class="token operator">+</span> admin<span class="token punctuation">.</span><span class="token function">getAdminId</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token comment">//如果购物车信息不为空,累加购物车数量</span>
<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token operator">!</span>CollectionUtils<span class="token punctuation">.</span><span class="token function">isEmpty</span><span class="token punctuation">(</span>cartMap<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">{</span>
result <span class="token operator">=</span> cartMap<span class="token punctuation">.</span><span class="token function">values</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">stream</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">mapToInt</span><span class="token punctuation">(</span>e <span class="token operator">-></span> <span class="token punctuation">{</span>
CartVo cartVo <span class="token operator">=</span> JsonUtil<span class="token punctuation">.</span><span class="token function">jsonStr2Object</span><span class="token punctuation">(</span>e<span class="token punctuation">,</span> CartVo<span class="token punctuation">.</span><span class="token keyword">class</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">return</span> cartVo<span class="token punctuation">.</span><span class="token function">getGoodsNum</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">sum</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token keyword">return</span> result<span class="token punctuation">;</span>
<span class="token punctuation">}</span>
</code></pre></p>
这是AJAX,前端通过管理员,并且已知管理员是内部的,因此您可以通过获取管理员并调用该方法来获得购物车的数量,返回前端并渲染页面
<p><pre> <code class="prism language-cpp"> @<span class="token function">RequestMapping</span><span class="token punctuation">(</span><span class="token string">"/getCartNum"</span><span class="token punctuation">)</span>
@ResponseBody
<span class="token keyword">public</span> Integer <span class="token function">getCartNum</span><span class="token punctuation">(</span>HttpServletRequest request<span class="token punctuation">)</span><span class="token punctuation">{</span>
Admin admin <span class="token operator">=</span> <span class="token punctuation">(</span>Admin<span class="token punctuation">)</span> request<span class="token punctuation">.</span><span class="token function">getSession</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">getAttribute</span><span class="token punctuation">(</span><span class="token string">"user"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">return</span> cartService<span class="token punctuation">.</span><span class="token function">getCartNum</span><span class="token punctuation">(</span>admin<span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
</code></pre></p>
添加到购物车
单击“添加到购物车”按钮时,将发送并发送。
首先,我们需要确定管理员是否存在,然后我们需要确定REDIS中的值是否存在。如果不存在,我们需要创建一个地图集来存储我们的购物车信息。如果购物车存在,请根据传递的产品ID查询REDIS中的字符串,然后将字符串转换为购物车对象。如果不存在,请将项目添加到购物车中。请注意更新地图收集和Redis !!!
然后返回以成功或失败。
请注意,这里的产品价格是从前端传输的产品价格,但没关系。当我们检查产品列表或付款时,我们需要查询实时搜索数据库。
<p><pre> <code class="prism language-cpp"><span class="token comment">/**
* 加入购物车
* @param cartVo
* @param admin
* @return
*/</span>
@Override
https://img0.baidu.com/it/u=1270185863,1362236205&fm=253&fmt=JPEG&app=138&f=JPEG?w=774&h=500
<span class="token keyword">public</span> BaseResult <span class="token function">addCart</span><span class="token punctuation">(</span>CartVo cartVo<span class="token punctuation">,</span> Admin admin<span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token comment">//如果用户信息不存在,直接返回</span>
<span class="token keyword">if</span> <span class="token punctuation">(</span>null<span class="token operator">==</span>admin<span class="token operator">||</span>null<span class="token operator">==</span>admin<span class="token punctuation">.</span><span class="token function">getAdminId</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">{</span>
<span class="token keyword">return</span> BaseResult<span class="token punctuation">.</span><span class="token function">error</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
Short userId <span class="token operator">=</span> admin<span class="token punctuation">.</span><span class="token function">getAdminId</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token comment">//查询当前用户的购物车信息</span>
hashOperations <span class="token operator">=</span> redisTemplate<span class="token punctuation">.</span><span class="token function">opsForHash</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
Map<span class="token operator"><</span>String<span class="token punctuation">,</span> String<span class="token operator">></span> cartMap <span class="token operator">=</span> hashOperations<span class="token punctuation">.</span><span class="token function">entries</span><span class="token punctuation">(</span>userCart <span class="token operator">+</span> <span class="token string">":"</span> <span class="token operator">+</span> userId<span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token comment">//判断购物车是否为空,不为空判断这个商品是否存在于购物车中,为空则新建一个map,来存放购物车中的商品信息</span>
<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token operator">!</span>CollectionUtils<span class="token punctuation">.</span><span class="token function">isEmpty</span><span class="token punctuation">(</span>cartMap<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">{</span>
<span class="token comment">//购物车存在,根据传过来的商品id,查询redis中的字符串,然后将字符串转换为购物车对象。</span>
String cartStr <span class="token operator">=</span> cartMap<span class="token punctuation">.</span><span class="token function">get</span><span class="token punctuation">(</span>String<span class="token punctuation">.</span><span class="token function">valueOf</span><span class="token punctuation">(</span>cartVo<span class="token punctuation">.</span><span class="token function">getGoodsId</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">if</span><span class="token punctuation">(</span><span class="token operator">!</span>StringUtils<span class="token punctuation">.</span><span class="token function">isEmpty</span><span class="token punctuation">(</span>cartStr<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">{</span>
<span class="token comment">//商品存在,修改商品数量和价格</span>
CartVo vo <span class="token operator">=</span> JsonUtil<span class="token punctuation">.</span><span class="token function">jsonStr2Object</span><span class="token punctuation">(</span>cartStr<span class="token punctuation">,</span> CartVo<span class="token punctuation">.</span><span class="token keyword">class</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token comment">//修改商品数量</span>
vo<span class="token punctuation">.</span><span class="token function">setGoodsNum</span><span class="token punctuation">(</span>vo<span class="token punctuation">.</span><span class="token function">getGoodsNum</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token operator">+</span>cartVo<span class="token punctuation">.</span><span class="token function">getGoodsNum</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token comment">//修改商品最新的价格</span>
vo<span class="token punctuation">.</span><span class="token function">setMarketPrice</span><span class="token punctuation">(</span>cartVo<span class="token punctuation">.</span><span class="token function">getMarketPrice</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token comment">//更新map</span>
cartMap<span class="token punctuation">.</span><span class="token function">put</span><span class="token punctuation">(</span>String<span class="token punctuation">.</span><span class="token function">valueOf</span><span class="token punctuation">(</span>vo<span class="token punctuation">.</span><span class="token function">getGoodsId</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">,</span>JsonUtil<span class="token punctuation">.</span><span class="token function">object2JsonStr</span><span class="token punctuation">(</span>vo<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span><span class="token keyword">else</span> <span class="token punctuation">{</span>
<span class="token comment">//如果商品不存在,向map集合中添加商品</span>
cartMap<span class="token punctuation">.</span><span class="token function">put</span><span class="token punctuation">(</span>String<span class="token punctuation">.</span><span class="token function">valueOf</span><span class="token punctuation">(</span>cartVo<span class="token punctuation">.</span><span class="token function">getGoodsId</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">,</span>JsonUtil<span class="token punctuation">.</span><span class="token function">object2JsonStr</span><span class="token punctuation">(</span>cartVo<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token punctuation">}</span><span class="token keyword">else</span> <span class="token punctuation">{</span>
<span class="token comment">//如果购物车信息为空,创建购物车对象,加入商品</span>
cartMap <span class="token operator">=</span> <span class="token keyword">new</span> HashMap<span class="token operator"><</span><span class="token operator">></span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
cartMap<span class="token punctuation">.</span><span class="token function">put</span><span class="token punctuation">(</span>String<span class="token punctuation">.</span><span class="token function">valueOf</span><span class="token punctuation">(</span>cartVo<span class="token punctuation">.</span><span class="token function">getGoodsId</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">,</span>JsonUtil<span class="token punctuation">.</span><span class="token function">object2JsonStr</span><span class="token punctuation">(</span>cartVo<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token comment">//更新redis</span>
hashOperations<span class="token punctuation">.</span><span class="token function">putAll</span><span class="token punctuation">(</span>userCart<span class="token operator">+</span><span class="token string">":"</span><span class="token operator">+</span>userId<span class="token punctuation">,</span>cartMap<span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">return</span> BaseResult<span class="token punctuation">.</span><span class="token function">success</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
</code></pre></p>
这是一个AJAX请求,并传递了管理员,回报是成功添加到购物车中,因此返回是(状态代码,信息),并调用呼叫方法以获得对前台的直接响应
<p><pre> <code class="prism language-cpp"> @<span class="token function">RequestMapping</span><span class="token punctuation">(</span><span class="token string">"/addCart"</span><span class="token punctuation">)</span>
@ResponseBody
<span class="token keyword">public</span> BaseResult <span class="token function">addCart</span><span class="token punctuation">(</span>HttpServletRequest request<span class="token punctuation">,</span>CartVo vo<span class="token punctuation">)</span><span class="token punctuation">{</span>
Admin user <span class="token operator">=</span> <span class="token punctuation">(</span>Admin<span class="token punctuation">)</span> request<span class="token punctuation">.</span><span class="token function">getSession</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">getAttribute</span><span class="token punctuation">(</span><span class="token string">"user"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">return</span> cartService<span class="token punctuation">.</span><span class="token function">addCart</span><span class="token punctuation">(</span>vo<span class="token punctuation">,</span> user<span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
</code></pre></p>
展示购物车清单
想法:输入列表页面,从前端传递的是一个管理员,该页面用于获取REDIS中的数据。返回前端的一个应该是列表和总金额。
首先,购物车列表的总价格需要获取购物车中每种产品的商品数量和市场价格,将商品数量和商品的市场价格乘以上述运营,然后进行上述操作并将其概括以最终获得总价。
那么,我们可以使用浮点并以这个实际价格执行计算?
不能。无论是浮点数还是浮点数,计算机都是二进制的,浮点数将失去一定程度的准确性。
注意:根本原因是十进制值通常没有完全相同的二进制表示。十进制数字的二进制表示可能是不准确的。只有无限接近该值
但是,在项目中,我们不能让这种情况发生,尤其是在金融项目中,因为所涉及数量的计算必须非常准确。考虑一下,如果您的支付帐户余额显示193.,那会是什么样的经验?
在实际应用中,需要计算和处理较大或较小的数字。我们使用Java在Java中提供的API类。MATH软件包对具有16多个重要位的数字进行精确操作。
()创建一个对象,其值由字符串中指定的参数表示。 //建议使用
<p><pre> <code class="prism language-cpp"><span class="token function">add</span><span class="token punctuation">(</span>BigDecimal<span class="token punctuation">)</span> BigDecimal对象中的值相加,然后返回这个对象。
<span class="token function">subtract</span><span class="token punctuation">(</span>BigDecimal<span class="token punctuation">)</span> BigDecimal对象中的值相减,然后返回这个对象。
<span class="token function">multiply</span><span class="token punctuation">(</span>BigDecimal<span class="token punctuation">)</span>BigDecimal对象中的值相乘,然后返回这个对象。
<span class="token function">divide</span><span class="token punctuation">(</span>BigDecimal<span class="token punctuation">)</span> BigDecimal对象中的值相除,然后返回这个对象。
<span class="token function">toString</span><span class="token punctuation">(</span><span class="token punctuation">)</span> 将BigDecimal对象的数值转换成字符串。
<span class="token function">doubleValue</span><span class="token punctuation">(</span><span class="token punctuation">)</span> 将BigDecimal对象中的值以双精度数返回。
<span class="token function">floatValue</span><span class="token punctuation">(</span><span class="token punctuation">)</span> 将BigDecimal对象中的值以单精度数返回。
<span class="token function">longValue</span><span class="token punctuation">(</span><span class="token punctuation">)</span> 将BigDecimal对象中的值以长整数返回。
<span class="token function">intValue</span><span class="token punctuation">(</span><span class="token punctuation">)</span> 将BigDecimal对象中的值以整数返回。
</code></pre></p>
舍入模式
需要截断和舍入可用方法
<p><pre> <code class="prism language-cpp">ROUND_CEILING 向正无穷方向舍入
ROUND_DOWN 向零方向舍入
ROUND_FLOOR 向负无穷方向舍入
ROUND_HALF_DOWN向(距离)最近的一边舍入,除非两边(的距离)是相等<span class="token punctuation">,</span>如果是这样,向下舍入<span class="token punctuation">,</span> 例如<span class="token number">1.55</span> 保留一位小数结果为<span class="token number">1.5</span>
ROUND_HALF_EVEN 向(距离)最近的一边舍入,除非两边(的距离)是相等<span class="token punctuation">,</span>如果是这样,如果保留位数是奇数,使用ROUND_HALF_UP,如果是偶数,使用ROUND_HALF_DOWN
ROUND_HALF_UP 向(距离)最近的一边舍入,除非两边(的距离)是相等<span class="token punctuation">,</span>如果是这样,向上舍入<span class="token punctuation">,</span> <span class="token number">1.55</span>保留一位小数结果为<span class="token number">1.6</span><span class="token punctuation">,</span>也就是我们常说的“四舍五入”
ROUND_UNNECESSARY 计算结果是精确的,不需要舍入模式
ROUND_UP 向远离<span class="token number">0</span>的方向舍入
</code></pre></p>
sum()和。()可用于总和。他们的差异是sum()方法是()方法的特殊形式。它只能汇总数值类型,并且可以对其元素进行任意减少操作,以充当累加器。
实施表格:
https://img1.baidu.com/it/u=1571300774,2267784769&fm=253&fmt=JPEG&app=138&f=JPEG?w=688&h=500
<p><pre> <code class="prism language-cpp">T <span class="token function">reduce</span><span class="token punctuation">(</span>T identity<span class="token punctuation">,</span> BinaryOperator<span class="token operator"><</span>T<span class="token operator">></span> accumulator<span class="token punctuation">)</span>
</code></pre></p>
此表格指定累加器的初始值,以及一个函数,以累积当前累积结果和获得新的累积结果的下一个元素。
First, take thecart out of the redisandit into a list , thenover thein the , map theof each* the price of thee -> e.().(new (.(e.())))) to sum it with (.ZERO, ::add) andone.然后将其围成。(2,。);然后返回,这是购物车列表和总金额。
添加购物车实施代码:
<p><pre> <code class="prism language-cpp">
<span class="token comment">/**
* 获取购物车列表
* @param admin
* @return
*/</span>
@Override
<span class="token keyword">public</span> CartResult <span class="token function">getCartList</span><span class="token punctuation">(</span>Admin admin<span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token comment">//判断用户是否存在</span>
<span class="token keyword">if</span> <span class="token punctuation">(</span>null<span class="token operator">==</span>admin<span class="token operator">||</span>null<span class="token operator">==</span>admin<span class="token punctuation">.</span><span class="token function">getAdminId</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">{</span>
<span class="token keyword">return</span> null<span class="token punctuation">;</span>
<span class="token punctuation">}</span>
CartResult cartResult <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token function">CartResult</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
cartResult <span class="token operator">=</span> null<span class="token punctuation">;</span>
Map<span class="token operator"><</span>String<span class="token punctuation">,</span> String<span class="token operator">></span> map <span class="token operator">=</span> hashOperations<span class="token punctuation">.</span><span class="token function">entries</span><span class="token punctuation">(</span>userCart <span class="token operator">+</span> <span class="token string">":"</span> <span class="token operator">+</span> admin<span class="token punctuation">.</span><span class="token function">getAdminId</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">if</span><span class="token punctuation">(</span><span class="token operator">!</span>CollectionUtils<span class="token punctuation">.</span><span class="token function">isEmpty</span><span class="token punctuation">(</span>map<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">{</span>
<span class="token comment">//获取CartVo列表</span>
List<span class="token operator"><</span>CartVo<span class="token operator">></span> cartVos <span class="token operator">=</span> map<span class="token punctuation">.</span><span class="token function">values</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">stream</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">map</span><span class="token punctuation">(</span>e <span class="token operator">-></span> JsonUtil<span class="token punctuation">.</span><span class="token function">jsonStr2Object</span><span class="token punctuation">(</span>e<span class="token punctuation">,</span> CartVo<span class="token punctuation">.</span><span class="token keyword">class</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">collect</span><span class="token punctuation">(</span>Collectors<span class="token punctuation">.</span><span class="token function">toList</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token comment">//精确计算总金额</span>
BigDecimal totalPrice <span class="token operator">=</span> cartVos<span class="token punctuation">.</span><span class="token function">stream</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">map</span><span class="token punctuation">(</span>e <span class="token operator">-></span> e<span class="token punctuation">.</span><span class="token function">getMarketPrice</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">multiply</span><span class="token punctuation">(</span><span class="token keyword">new</span> <span class="token function">BigDecimal</span><span class="token punctuation">(</span>String<span class="token punctuation">.</span><span class="token function">valueOf</span><span class="token punctuation">(</span>e<span class="token punctuation">.</span><span class="token function">getGoodsNum</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">reduce</span><span class="token punctuation">(</span>BigDecimal<span class="token punctuation">.</span>ZERO<span class="token punctuation">,</span> BigDecimal<span class="token operator">::</span>add<span class="token punctuation">)</span><span class="token punctuation">;</span>
cartResult<span class="token punctuation">.</span><span class="token function">setCartList</span><span class="token punctuation">(</span>cartVos<span class="token punctuation">)</span><span class="token punctuation">;</span>
totalPrice<span class="token punctuation">.</span><span class="token function">setScale</span><span class="token punctuation">(</span><span class="token number">2</span><span class="token punctuation">,</span> BigDecimal<span class="token punctuation">.</span>ROUND_HALF_UP<span class="token punctuation">)</span><span class="token punctuation">;</span>
cartResult<span class="token punctuation">.</span><span class="token function">setTotalPrice</span><span class="token punctuation">(</span>totalPrice<span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token keyword">return</span> cartResult<span class="token punctuation">;</span>
<span class="token punctuation">}</span>
</code></pre></p>
<p><pre> <code class="prism language-css"><span class="token atrule"><span class="token rule">@RequestMapping</span><span class="token punctuation">(</span><span class="token string">"/getCartList"</span><span class="token punctuation">)</span>
public String <span class="token function">getCartList</span><span class="token punctuation">(</span>HttpServletRequest request<span class="token punctuation">,</span> Model model<span class="token punctuation">)</span></span><span class="token punctuation">{</span>
Admin admin = <span class="token punctuation">(</span>Admin<span class="token punctuation">)</span> request.<span class="token function">getSession</span><span class="token punctuation">(</span><span class="token punctuation">)</span>.<span class="token function">getAttribute</span><span class="token punctuation">(</span><span class="token string">"user"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
CartResult cartResult = cartService.<span class="token function">getCartList</span><span class="token punctuation">(</span>admin<span class="token punctuation">)</span><span class="token punctuation">;</span>
model.<span class="token function">addAttribute</span><span class="token punctuation">(</span><span class="token string">"cartResult"</span><span class="token punctuation">,</span>null==cartResult?new <span class="token function">CartResult</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">:</span>cartResult<span class="token punctuation">)</span><span class="token punctuation">;</span>
return <span class="token string">"cart/list"</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
</code></pre></p>
清除购物车
只有在用户存在并存在购物车地图时才能清除购物车。
<p><pre> <code class="prism language-cpp"> <span class="token comment">/**
* 清除购物车
* @param admin
* @return
*/</span>
@Override
<span class="token keyword">public</span> BaseResult <span class="token function">clearCart</span><span class="token punctuation">(</span>Admin admin<span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token comment">//判断用户是否存在</span>
<span class="token keyword">if</span> <span class="token punctuation">(</span>null<span class="token operator">==</span>admin<span class="token operator">||</span>null<span class="token operator">==</span>admin<span class="token punctuation">.</span><span class="token function">getAdminId</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">{</span>
<span class="token keyword">return</span> null<span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token comment">//获取购物车信息</span>
hashOperations <span class="token operator">=</span> redisTemplate<span class="token punctuation">.</span><span class="token function">opsForHash</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
Map<span class="token operator"><</span>String<span class="token punctuation">,</span> String<span class="token operator">></span> cartMap <span class="token operator">=</span> hashOperations<span class="token punctuation">.</span><span class="token function">entries</span><span class="token punctuation">(</span>userCart <span class="token operator">+</span> <span class="token string">":"</span> <span class="token operator">+</span> admin<span class="token punctuation">.</span><span class="token function">getAdminId</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">if</span> <span class="token punctuation">(</span>CollectionUtils<span class="token punctuation">.</span><span class="token function">isEmpty</span><span class="token punctuation">(</span>cartMap<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">{</span>
<span class="token keyword">return</span> BaseResult<span class="token punctuation">.</span><span class="token function">error</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
redisTemplate<span class="token punctuation">.</span><span class="token keyword">delete</span><span class="token punctuation">(</span>userCart<span class="token operator">+</span><span class="token string">":"</span><span class="token operator">+</span>admin<span class="token punctuation">.</span><span class="token function">getAdminId</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">return</span> BaseResult<span class="token punctuation">.</span><span class="token function">success</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
</code></pre></p>
添加到购物车,数据同步问题
问题?当我们添加购物车时,产品数据为1008。半小时后,我们再次添加了产品。目前,产品的价格变为1288。目前,当将两个相同的产品添加到购物车中时,数据是不一致的,我们添加到购物车中的数据由前台确定,这导致数据问题不同步。
问题?当我们输入购物车列表时,产品数据被售罄时为999。一小时后,Flash销售结束并将原始价格恢复到1299。但是,列表没有刷新,并且页面上仍显示的页面仍然是999。然后,当我们单击检查以检查时,产品数据应为1299,而不是999,因此在结算期间也需要实时搜索。
问题?传递到背景的数据包括,,,,,,,,但这可能是一个更改。我们实际使用的可能是,我们只能找到产品。那么我们如何获得此实时数据?
解决方案:我们应该使用NOSQL数据库获取实时数据,因为我们的数据始终是打开的,并且可以获取实时数据并将其放入其中,例如,一分钟更新数据,因此我们只需要根据从前台发送的VO搜索和获取实时数据,然后将其添加到购物车中,然后将其添加到购物车中,以便数据可以同步。请注意,输入购物车列表的数据也应该是实时的。
因此,NOSQL数据库将在两个地方使用。
1。在添加购物车时,这是一个实时搜索,并根据实时搜索获取并将其添加到购物车中。
2。单击购物车列表时,还需要实时搜索产品的价格,并实时显示最新数据。
3。单击定居时,需要实时搜索以防止产品的价格长时间停留在购物车列表中,但是产品的价格是根据原始价格定价的。
当解决方案,预订和某些保险措施时,但是当我们提交订单时,无法更改订单数据。解决方案是根据我们每次获取最新数据。
页:
[1]