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

常见网站颜色搭配胶南建网站

常见网站颜色搭配,胶南建网站,中国建设银行中国网站,渠道网络是什么意思人生在世如身处荆棘之中,心不动,人不妄动,不动则不伤;如心动则人妄动,伤其身痛其骨,于是体会到世间诸般痛苦。 1、购物车需求 1)、需求描述: - 用户可以在登录状态下将商品添加到购…

人生在世如身处荆棘之中,心不动,人不妄动,不动则不伤;如心动则人妄动,伤其身痛其骨,于是体会到世间诸般痛苦。

1、购物车需求

1)、需求描述:

- 用户可以在登录状态下将商品添加到购物车【用户购物车/在线购物车】

- 放入数据库

- mongodb

- 放入 redis(采用)

登录以后,会将临时购物车的数据全部合并过来,并清空临时购物车;

- 用户可以在未登录状态下将商品添加到购物车【游客购物车/离线购物车/临时购物车】

- 放入 localstorage(客户端存储,后台不存)

- cookie - WebSQL

- 放入 redis(采用)

浏览器即使关闭,下次进入,临时购物车数据都在

- 用户可以使用购物车一起结算下单

- 给购物车添加商品

- 用户可以查询自己的购物车

- 用户可以在购物车中修改购买商品的数量。

- 用户可以在购物车中删除商品。

- 选中不选中商品

- 在购物车中展示商品优惠信息

- 提示购物车商品价格变化

2)、数据结构 

因此每一个购物项信息,都是一个对象,基本字段包括: 

另外,购物车中不止一条数据,因此最终会是对象的数组。即: 

Redis 有 5 种不同数据结构,这里选择哪一种比较合适呢?

- 首先不同用户应该有独立的购物车,因此购物车应该以用户的作为 key 来存储,Value 是 用户的所有购物车信息。这样看来基本的`k-v`结构就可以了。

- 但是,我们对购物车中的商品进行增、删、改操作,基本都需要根据商品 id 进行判断, 为了方便后期处理,我们的购物车也应该是`k-v`结构,key 是商品 id,value 才是这个商品的 购物车信息。

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

- 第一层 Map,Key 是用户 id

- 第二层 Map,Key 是购物车中商品 id,值是购物项数据

3)、流程 

参照京东

user-key 是随机生成的 id,不管有没有登录都会有这个 cookie 信息。 

两个功能:新增商品到购物车、查询购物车。

新增商品:判断是否登录

- 是:则添加商品到后台 Redis 中,把 user 的唯一标识符作为 key。

- 否:则添加商品到后台 redis 中,使用随机生成的 user-key 作为 key。

查询购物车列表:判断是否登录 

- 否:直接根据 user-key 查询 redis 中数据并展示

- 是:已登录,则需要先根据 user-key 查询 redis 是否有数据。

- 有:需要提交到后台添加到 redis,合并数据,而后查询。

- 否:直接去后台查询 redis,而后返回。

2、临时购物车 

    /*** 获取到我们要操作的购物车* @return*/private BoundHashOperations<String, 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();}BoundHashOperations<String, Object, Object> operations = redisTemplate.boundHashOps(cartKey);return operations;}

3、登录购物车 

 @Overridepublic CartItem addToCart(Long skuId, Integer num) {BoundHashOperations<String, Object, Object> cartOps = getCartOps();String res = (String) cartOps.get(skuId.toString());if(StringUtils.isEmpty(res)){CartItem cartItem = new CartItem();// 1.运程查询当前要添加的商品信息CompletableFuture<Void> getSkuInfoTask = CompletableFuture.runAsync(() -> {//2.商品添加到购物车(新商品)R skuInfo = productFeignService.getSkuInfo(skuId);SkuInfoVo data = skuInfo.getData("skuInfo", new TypeReference<SkuInfoVo>() {});cartItem.setCheck(true);cartItem.setCount(1);cartItem.setImage(data.getSkuDefaultImg());cartItem.setTitle(data.getSkuTitle());cartItem.setPrice(data.getPrice());cartItem.setSkuId(data.getSkuId());},executor);CompletableFuture<Void> getSkuSaleAttr = CompletableFuture.runAsync(() -> {//运程查询sku的组合信息List<String> values = productFeignService.getSkuSaleAttrValues(skuId);cartItem.setSkuAttr(values);}, executor);CompletableFuture<Void> 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) {BoundHashOperations<String, 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_PREFIX+userInfoTo.getUserId();//如果临时购物车的数据还没有合并【合并购物车】String tempCartKey= CART_PREFIX + userInfoTo.getUserKey();List<CartItem> tempCartItems = getCartItems(tempCartKey);if(tempCartItems!=null){//合并for (CartItem item : tempCartItems) {addToCart(item.getSkuId(),item.getCount());}}//3.获取登录后的数据List<CartItem> cartItems = getCartItems(cartKey);cart.setItems(cartItems);//清除临时购物车数据clearCart(tempCartKey);}else {//没登陆String cartKey = CART_PREFIX+userInfoTo.getUserKey();//获取临时购物车的所有购物项List<CartItem> cartItems = getCartItems(cartKey);cart.setItems(cartItems);}return cart;}
@Overridepublic void checkItem(Long skuId, Integer check) {BoundHashOperations<String, Object, Object> cartOps = getCartOps();CartItem cartItem = getCartItem(skuId);cartItem.setCheck(check==1?true:false);String s = JSON.toJSONString(cartItem);cartOps.put(skuId.toString(),s);}@Overridepublic void changeItemCount(Long skuId, Integer num) {BoundHashOperations<String, 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) {BoundHashOperations<String, Object, Object> cartOps = getCartOps();cartOps.delete(skuId.toString());}

人生在世如身处荆棘之中,心不动,人不妄动,不动则不伤;如心动则人妄动,伤其身痛其骨,于是体会到世间诸般痛苦。 

 

http://www.yayakq.cn/news/164272/

相关文章:

  • 专业上海网站建设公司谈谈对电子商务网站建设与管理
  • python开源代码网站wordpress做的网站效果6
  • 江苏南京建设厅网站关键词排名提高方法
  • 单位网站建设内容网站备案号什么情况下被注销
  • 个人网站 建设wordpress 媒体目录
  • 网站建设的基本步骤有哪些营销型网站建设培训
  • 怎么做网站更新和维护专业客户管理系统
  • 网页设计个人主页优秀seo平台
  • 亿唐网不做网站做品牌原因做网站时怎么取消鼠标悬停
  • 软件外包公司如何找客户家庭优化大师免费下载
  • 专业做家电的网站资阳seo
  • 音乐网站要怎么做数据中台建设
  • 手机版自网站三维家是在网站上做还是在app上
  • 免费视频网站建设湖南邵阳网
  • 金融直播室网站建设开平小学学生做平网站
  • 做网站的客户需求网站制作公司优势
  • 网站建设需要注意的关键细节长沙网站建站推广
  • 会泽住房和城乡建设局网站网上卖东西怎么找货源
  • p2p网站开发 源代码linux目录不可写 wordpress
  • 厦门网站设计公司找哪家淘客网站建设收费吗
  • 如何做网站网页表白免费网站搭建系统
  • 佛山网站制作流程淘宝网页html模板代码
  • 高端企业网站设计公司cms在线
  • 傻瓜做网站软件大连建立网页
  • 微信营销网站模板温州建设局网站首页
  • 视频网站开发视频教程成都房屋装修设计公司
  • 企查查免费下载安装seo是付费还是免费推广
  • 公司网站开发策划书应该选用
  • ftp怎么重新上传网站中企动力科技是干嘛的
  • 苏州智信建设职业培训网站seo赚钱培训