商品服务

1.新增商品

1.1 品牌的关联

1.1.1 PubSub依赖缺失

打开新增商品页面的时候会出现的错误提示:

原因是缺少:PubSub相关依赖

解决办法

  • 使用npm添加依赖:npm install --save pubsub-js(失败的话使用此命令:cnpm install --save pubsub-js)
  • 在src下的main.js中引用:
    import PubSub from ‘pubsub-js’
    Vue.prototype.PubSub = PubSub
  • 在.eslintrc.js中添加一下配置

1.1.2 品牌关联

拷贝对应的前端页面文件

添加后端对应的服务

然后service中查询处理

最后的显示效果

1.1.3 会员等级

  首先我们需要启动会员模块,并且配置对应的网关路由信息

1.1.4 规格参数

  在新增商品的第二步我们就需要设置对应的规格参数,而这些规格参数是根据前面一步选择的三级分类来查询出来的。

  响应对应的数据,我们需要先创建对应的VO对象。

package com.msb.mall.product.vo;import com.baomidou.mybatisplus.annotation.TableId;
import com.msb.mall.product.entity.AttrEntity;
import lombok.Data;import java.util.List;@Data
public class AttrGroupWithAttrsVo {/*** 分组id*/@TableIdprivate Long attrGroupId;/*** 组名*/private String attrGroupName;/*** 排序*/private Integer sort;/*** 描述*/private String descript;/*** 组图标*/private String icon;/*** 所属分类id*/private Long catelogId;// 关联对应的属性信息private List<AttrEntity> attrs;
}

  然后创建对应的controller

  然后创建对应的service

1.2 发布商品

1.2.1 VO 接收数据

  前端页面提交的JSON数据非常复杂,我们需要在后端服务通过对应的VO对象来接收这些相关的数据。

然后通过在线的json格式处理工具生成对应的VO工具类

1.2.2 保存对应的数据

  需要保存的数据拆解为一下六个部分。

1.2.3 保存商品基本信息

1.2.4 保存商品描述

需要注意的地方:

1.2.4 保存图集信息

1.2.5 保存规格参数

1.2.6 SKU基本信息存储

1.2.7 SKU的图集

1.2.8 SKU的销售属性

1.3 远程服务调用

1.3.1 满减,折扣,会员价保存

在coupon服务中定义相关的接口及处理的service

然后我们在Product服务中来处理接口的调用

然后在商品的service中完成服务的调用

完成满减折扣和会员价的service存储

    public void saveSkuReduction(SkuReductionDTO dto) {// 5.3 保存满减信息,折扣,会员价// mall_sms: sms_sku_ladder sms_full_reduction sms_member_price// 1.折扣SkuLadderEntity ladderEntity = new SkuLadderEntity();ladderEntity.setSkuId(dto.getSkuId());ladderEntity.setFullCount(dto.getFullCount());ladderEntity.setDiscount(dto.getDiscount());ladderEntity.setAddOther(dto.getCountStatus());if(ladderEntity.getFullCount() > 0){ladderService.save(ladderEntity);}// 2.满减SkuFullReductionEntity fullReductionEntity = new SkuFullReductionEntity();BeanUtils.copyProperties(dto,fullReductionEntity);if(fullReductionEntity.getFullPrice().compareTo(new BigDecimal(0)) == 1){this.save(fullReductionEntity);}// 3.会员价List<MemberPriceEntity> memberPriceEntities = dto.getMemberPrice().stream().map(item -> {MemberPriceEntity priceEntity = new MemberPriceEntity();priceEntity.setSkuId(dto.getSkuId());priceEntity.setMemberLevelId(item.getId());priceEntity.setMemberPrice(item.getPrice());priceEntity.setAddOther(1); // 是否可叠加return priceEntity;}).collect(Collectors.toList());memberPriceService.saveBatch(memberPriceEntities);}

1.3.2 会员积分存储

会员积分信息也是存储在Coupon服务中,我们同样需要通过Fegin来调用。

2.SPU管理

  提供不同条件的检索,分类,品牌,状态,关键字检索。

  后台我们需要在Service中完成对应的操作。

    /*** SPU信息检索* 分页查询* 分类 品牌 状态 关键字查询* @param params* @return*/@Overridepublic PageUtils queryPageByCondition(Map<String, Object> params) {QueryWrapper<SpuInfoEntity> wrapper = new QueryWrapper<>();// 设置对应的检索条件// 1. 关键字查询String key = (String) params.get("key");if(!StringUtils.isEmpty(key)){// 需要添加关键字查询wrapper.and((w)->{w.eq("id",key).or().like("spu_name",key).or().like("spu_description",key);});}// statusString status = (String) params.get("status");if(!StringUtils.isEmpty(status)){wrapper.eq("publish_status",status);}// catalogIdString catalogId = (String) params.get("catalogId");if(!StringUtils.isEmpty(catalogId) && !"0".equalsIgnoreCase(catalogId)){wrapper.eq("catalog_id",catalogId);}// brandIdString brandId = (String) params.get("brandId");if(!StringUtils.isEmpty(brandId) && !"0".equalsIgnoreCase(brandId)){wrapper.eq("brand_id",brandId);}IPage<SpuInfoEntity> page = this.page(new Query<SpuInfoEntity>().getPage(params),wrapper);return new PageUtils(page);}

  然后解决页面显示数据的问题,比如类别和品牌显示的编号,创建时间和更新时间显示格式问题。

重启服务

上面的是设置全局的格式化方式,如果我也特殊设置,这时我们可以在对应的entity对象的属性上通过@JsonFormat 来指定,此处指定的会覆盖掉全局的设置。

针对显示的分类和品牌显示id的问题,我们需要通过对应的vo对象来传输,同时我们需要在service中完成对应的逻辑

显示的效果

3.商品管理

  商品管理也就是我们讲的SKU管理。实现多条件的检索,比如 类别,品牌,价格区间。关键字等查询。

    /*** SKU 信息检索的方法* 类别* 品牌* 价格区间* 检索的关键字* 分页查询** @param params* @return*/@Overridepublic PageUtils queryPageByCondition(Map<String, Object> params) {QueryWrapper<SkuInfoEntity> wrapper = new QueryWrapper<>();// 检索关键字String key = (String) params.get("key");if(!StringUtils.isEmpty(key)){wrapper.and(w->{w.eq("sku_id",key).or().like("sku_name",key);});}// 分类String catalogId = (String)params.get("catalogId");if(!StringUtils.isEmpty(catalogId) && !"0".equalsIgnoreCase(catalogId)){wrapper.eq("catalog_id",catalogId);}// 品牌String brandId = (String)params.get("brandId");if(!StringUtils.isEmpty(brandId) && !"0".equalsIgnoreCase(brandId)){wrapper.eq("brand_id",brandId);}// 价格区间String min = (String) params.get("min");if(!StringUtils.isEmpty(min)){wrapper.ge("price",min);}String max = (String) params.get("max");if(!StringUtils.isEmpty(max)){try {// 如果max=0那么我们也不需要加这个条件BigDecimal bigDecimal = new BigDecimal(max);if(bigDecimal.compareTo(new BigDecimal(0)) == 1){// 说明 max > 0wrapper.le("price",max);}}catch (Exception e){e.printStackTrace();}}IPage<SkuInfoEntity> page = this.page(new Query<SkuInfoEntity>().getPage(params),wrapper);return new PageUtils(page);}

【第七篇】商城系统-商品发布-SKU和SPU管理相关推荐

  1. 多用户商城系统商品表设计

    多用户商城系统商品表用于存储商家上架的商品信息. 商品表(wst_goods)   字段名称 字段说明 字段描述 类型 长度 默认 必填 goodsId 自增ID   int 11   是 1 goo ...

  2. 畅购商城 04商品发布

    第4章 商品发布 1 SPU与SKU 1.1 SPU与SKU概念 SPU = Standard Product Unit (标准产品单位) 概念 : SPU 是商品信息聚合的最小单位,是一组可复用.易 ...

  3. 商城系统商品属性的数据库设计思路

    京东商城的数据库是如何搭建的,那么多商品,每种商品的参数各不相同,是怎样设计数据库的? 在提及这种设计思路前,首先得了解数据表可以分为两种结构: 1\横表,也就是我们经常用到的表结构, 2\纵表,这种 ...

  4. 商品的SKU与SPU

    spu 和 sku 都是属性值的集合, 举个栗子 >> 一部 6S, 它身上有很多的属性和值. 比如 : 毛重: 420.00 g 产地: 中国大陆 容量: 16G, 64G, 128G ...

  5. 记录谷粒商城P90 商品发布关于[500] during [POST](null空指针)的坑

    代码小白,记录自学制作谷粒商城遇到的坑 如有错误请轻喷 1.问题的出现:关于[500] during [POST]以及null空指针 在做到发布商品的时候突然报了一个post500的错误,这比较诡异啊 ...

  6. 电商系统中的商品的SKU和SPU是什么?

    SPU = Standard Product Unit (标准化产品单元) SPU是商品信息聚合的最小单位,是一组可复用.易检索的标准化信息的集合,该集合描述了一个产品的特性. SPU属性:不会影响到 ...

  7. (转)商城系统商品属性的数据库设计思路

    http://www.360doc.com/content/12/0513/18/1542811_210764350.shtml 最近看到一个题目,要求提出一套商品属性相关的数据库设计思路,要求是商品 ...

  8. B2B2C分销商城系统,带进货模块,二级分销商城Java系统源码

    B2B2C分销商城系统,带进货模块,二级分销商城Java系统源码 功能简介: 一.商家入驻体系 B2B2C商城系统可以招商入驻,用户在商城中注册后可以根据要求向平台运营商提供相应的 申请资料,选择商品 ...

  9. 中小型商城系统中的分类/产品属性/扩展属性的数据库设计

    声明:之所以定位在"中小型"商城系统,而非"大型"(指淘宝.拍拍这类巨无霸),理由很简单----我一直都呆在(创业型的)小公司,没见过这些大家伙是怎么设计的:) ...

最新文章

  1. JetsonTX2上安装tensorflow的心酸史
  2. 文件重命名批量处理(Matlab)
  3. BZOJ 3304: [Shoi2005]带限制的最长公共子序列( LCS )
  4. 数据结构-链表的删除和添加
  5. 法兰克机械手手动操作_谈谈多工位冲床机械手的操作方法
  6. YUV序列下采样以及彩色4:2:0与灰度4:0:0转换---基于matlab实现
  7. cookie与token对比(转)
  8. 如何有效地刷算法题?
  9. python之time:基于python语言利用time模块计算运行时间—计算机器学习模型训练前后的时间代码实现
  10. win7激活码失效 报错0xC004F057解决方法
  11. excel选择性粘贴为何是html,选择性粘贴,教您excel选择性粘贴怎么用
  12. 程序员的奋斗史(三十四)——人在囧途之应聘篇(四)
  13. adobe reader XI打开pdf崩溃修复2020.05
  14. CCF公布国家集训队50进15名单!5月确定IOI2019选手!
  15. Android性能优化系列篇(五):弱网优化
  16. protect 继承_c++三种继承方式public,protect,private
  17. 使用indexedDB(三)(翻译)
  18. 解决VMware16无法在Win7安装VMTools的问题,报Windows 无法验证此驱动程序软件的发布者
  19. 专接本数学第一章知识梳理(1)
  20. linux中文设置教程视频,为您linux输入法 【视频教程】 的设置技巧

热门文章

  1. 擦完键盘后电脑桌面变成黑色背景,word文档等也变成黑色背景
  2. java安卓布局与画布_Android 画布绘图
  3. 奇瑞背水一战,或止于“理想很丰满”
  4. AES的CFB模式加解密不一致的原因
  5. 日迹2022.3.22
  6. The POM for oracle:ojdbc6:jar:11.2.0.3 is missing, no dependency information available
  7. python post 登录_Python爬虫之模拟post登陆及get登陆
  8. “母亲节”谈竟争、讲创业_有人泪奔,有人笑
  9. (Java程序)Excel自动生成mysql表
  10. C语言中定义字符串的几种方法