当前位置: 首页 > news >正文

企业网站建设物美价廉交易链接

企业网站建设物美价廉,交易链接,iis做网站的流程,长沙 做网站人生在世如身处荆棘之中#xff0c;心不动#xff0c;人不妄动#xff0c;不动则不伤#xff1b;如心动则人妄动#xff0c;伤其身痛其骨#xff0c;于是体会到世间诸般痛苦。 1、购物车需求 1#xff09;、需求描述#xff1a; - 用户可以在登录状态下将商品添加到购… 人生在世如身处荆棘之中心不动人不妄动不动则不伤如心动则人妄动伤其身痛其骨于是体会到世间诸般痛苦。 1、购物车需求 1、需求描述 - 用户可以在登录状态下将商品添加到购物车【用户购物车/在线购物车】 - 放入数据库 - mongodb - 放入 redis采用 登录以后会将临时购物车的数据全部合并过来并清空临时购物车 - 用户可以在未登录状态下将商品添加到购物车【游客购物车/离线购物车/临时购物车】 - 放入 localstorage客户端存储后台不存 - cookie - WebSQL - 放入 redis采用 浏览器即使关闭下次进入临时购物车数据都在 - 用户可以使用购物车一起结算下单 - 给购物车添加商品 - 用户可以查询自己的购物车 - 用户可以在购物车中修改购买商品的数量。 - 用户可以在购物车中删除商品。 - 选中不选中商品 - 在购物车中展示商品优惠信息 - 提示购物车商品价格变化 2、数据结构  因此每一个购物项信息都是一个对象基本字段包括  另外购物车中不止一条数据因此最终会是对象的数组。即  Redis 有 5 种不同数据结构这里选择哪一种比较合适呢 - 首先不同用户应该有独立的购物车因此购物车应该以用户的作为 key 来存储Value 是 用户的所有购物车信息。这样看来基本的k-v结构就可以了。 - 但是我们对购物车中的商品进行增、删、改操作基本都需要根据商品 id 进行判断 为了方便后期处理我们的购物车也应该是k-v结构key 是商品 idvalue 才是这个商品的 购物车信息。 综上所述我们的购物车结构是一个双层 MapMastring,mapstring,string - 第一层 MapKey 是用户 id - 第二层 MapKey 是购物车中商品 id值是购物项数据 3、流程  参照京东 user-key 是随机生成的 id不管有没有登录都会有这个 cookie 信息。  两个功能新增商品到购物车、查询购物车。 新增商品判断是否登录 - 是则添加商品到后台 Redis 中把 user 的唯一标识符作为 key。 - 否则添加商品到后台 redis 中使用随机生成的 user-key 作为 key。 查询购物车列表判断是否登录  - 否直接根据 user-key 查询 redis 中数据并展示 - 是已登录则需要先根据 user-key 查询 redis 是否有数据。 - 有需要提交到后台添加到 redis合并数据而后查询。 - 否直接去后台查询 redis而后返回。 2、临时购物车  /*** 获取到我们要操作的购物车* return*/private BoundHashOperationsString, Object, Object getCartOps() {UserInfoTo userInfoTo CartInterceptor.threadLocal.get();//1.String cartKey ;if (userInfoTo.getUserId() ! null) {cartKey CART_PREFIX userInfoTo.getUserId();} else {cartKey CART_PREFIX userInfoTo.getUserKey();}BoundHashOperationsString, Object, Object operations redisTemplate.boundHashOps(cartKey);return operations;} 3、登录购物车  Overridepublic CartItem addToCart(Long skuId, Integer num) {BoundHashOperationsString, Object, Object cartOps getCartOps();String res (String) cartOps.get(skuId.toString());if(StringUtils.isEmpty(res)){CartItem cartItem new CartItem();// 1.运程查询当前要添加的商品信息CompletableFutureVoid getSkuInfoTask CompletableFuture.runAsync(() - {//2.商品添加到购物车(新商品)R skuInfo productFeignService.getSkuInfo(skuId);SkuInfoVo data skuInfo.getData(skuInfo, new TypeReferenceSkuInfoVo() {});cartItem.setCheck(true);cartItem.setCount(1);cartItem.setImage(data.getSkuDefaultImg());cartItem.setTitle(data.getSkuTitle());cartItem.setPrice(data.getPrice());cartItem.setSkuId(data.getSkuId());},executor);CompletableFutureVoid getSkuSaleAttr CompletableFuture.runAsync(() - {//运程查询sku的组合信息ListString values productFeignService.getSkuSaleAttrValues(skuId);cartItem.setSkuAttr(values);}, executor);CompletableFutureVoid allOf CompletableFuture.allOf(getSkuInfoTask, getSkuSaleAttr);try {allOf.get();} catch (InterruptedException e) {e.printStackTrace();} catch (ExecutionException e) {e.printStackTrace();}String s JSON.toJSONString(cartItem);cartOps.put(skuId.toString(),s);return cartItem;}else{//购物车有这个商品CartItem cartItem JSON.parseObject(res, CartItem.class);cartItem.setCount(cartItem.getCount()num);cartOps.put(skuId.toString(),JSON.toJSONString(cartItem));return cartItem;}}Overridepublic CartItem getCartItem(Long skuId) {BoundHashOperationsString, Object, Object cartOps getCartOps();String str (String) cartOps.get(skuId.toString());CartItem cartItem JSON.parseObject(str, CartItem.class);return cartItem;}Overridepublic Cart getCart() {UserInfoTo userInfoTo CartInterceptor.threadLocal.get();Cart cart new Cart();if(userInfoTo.getUserId()!null){//登录String cartKey CART_PREFIXuserInfoTo.getUserId();//如果临时购物车的数据还没有合并【合并购物车】String tempCartKey CART_PREFIX userInfoTo.getUserKey();ListCartItem tempCartItems getCartItems(tempCartKey);if(tempCartItems!null){//合并for (CartItem item : tempCartItems) {addToCart(item.getSkuId(),item.getCount());}}//3.获取登录后的数据ListCartItem cartItems getCartItems(cartKey);cart.setItems(cartItems);//清除临时购物车数据clearCart(tempCartKey);}else {//没登陆String cartKey CART_PREFIXuserInfoTo.getUserKey();//获取临时购物车的所有购物项ListCartItem cartItems getCartItems(cartKey);cart.setItems(cartItems);}return cart;} Overridepublic void checkItem(Long skuId, Integer check) {BoundHashOperationsString, Object, Object cartOps getCartOps();CartItem cartItem getCartItem(skuId);cartItem.setCheck(check1?true:false);String s JSON.toJSONString(cartItem);cartOps.put(skuId.toString(),s);}Overridepublic void changeItemCount(Long skuId, Integer num) {BoundHashOperationsString, Object, Object cartOps getCartOps();CartItem cartItem getCartItem(skuId);cartItem.setCount(num);String s JSON.toJSONString(cartItem);cartOps.put(skuId.toString(),s);}Overridepublic void deleteItem(Long skuId) {BoundHashOperationsString, Object, Object cartOps getCartOps();cartOps.delete(skuId.toString());} 人生在世如身处荆棘之中心不动人不妄动不动则不伤如心动则人妄动伤其身痛其骨于是体会到世间诸般痛苦。
http://www.dnsts.com.cn/news/2664.html

相关文章:

  • 做网站备案的公司seo入门版
  • 做国际物流需要自己的网站吗网页设计代做
  • 动态网站转静态网站网站关键词优化公司哪家好
  • asp网站下载优化深圳seo
  • 淘宝客怎么做的网站推广学网络运营在哪里学比较好
  • 绍兴市网站建设公司网站seo视频教程
  • 站长工具seo优化建议杭州网站关键词排名优化
  • 成都专业网站建设网络游戏推广公司
  • 在家做网站设计seo怎么做优化工作
  • 手机无法安装wordpress搜索引擎优化的流程是什么
  • 做网站怎么不被找到深圳网站营销seo电话
  • 购物网站开发和运行环境百度开户多少钱
  • 嘉兴制作网站企业沈阳百度推广排名优化
  • 中国建设银行网站查询密码是什么seo网站推广的主要目的是什么
  • wordpress会员制订阅王通seo赚钱培训
  • 电子商务网站设计岗位主要是?上海seo推广
  • pdf做电子书下载网站seo研究中心怎么了
  • php做p2p网站源码网络公司排名
  • 一个网站做多访问量哈尔滨最新消息
  • 站设计网站官网免费自动推广手机软件
  • 网站建设要求如何做网络推广推广
  • 定制网站建设报价单手机管家一键优化
  • 手机商城网站开发建站seo是什么
  • 秦皇岛做网站公司有哪些seo关键词怎么选择
  • 用asp.net做的 购物网站视频狼雨的seo教程
  • 图片模板网站2345浏览器主页网址
  • 嘉兴 网站制作ip切换工具
  • 设计网站的三个要素沪指重上3000点
  • 中国风网站模板html站外seo是什么
  • 中国扬州政府门户网站建设方案电商平台网站