SPU
1288 字
6 分钟
SPU

目录品牌管理
在实际生活中,我们知道品牌往往是和商品类目联系起来的,比如,手机品牌,电脑品牌,汽车品牌等等,不同的商品类目包含不同的品牌,所以用户在查询商品类目的时候,我们同时也应该展示,该类目下的商品品牌。

关于目录品牌管理,我们需要实现查询商品类目品牌,添加商品类目品牌,删除商品类目品牌的功能。

添加商品类目品牌
@PostMapping("admin/product/baseCategoryTrademark/save")public Result save(@RequestBody CategoryTrademarkParam categoryTrademarkVo){} /** * 保存分类与品牌关联 */ void save(CategoryTrademarkParam categoryTrademarkParam);@Datapublic class CategoryTrademarkParam {
private Long category3Id;
private List<Long> trademarkIdList;
}这里就是对category_trademark表的单表插入查询商品类目品牌
@GetMapping("admin/product/baseCategoryTrademark/findTrademarkList/{thirdLevelCategoryId}")public Result findTrademarkList(@PathVariable Long thirdLevelCategoryId){} /** * 根据三级分类获取品牌 */ List<TrademarkDTO> findTrademarkList(Long category3Id);- 先根据三级类目id,在类目品牌关联表category_trademark中,找到属于该类目的所有品牌的id即trademark_id集合
- 然后,在根据trademark_id集合,在trademark表中查询出每个品牌的详细信息
查询未关联商品类目的品牌
在给一个商品类目添加品牌的时候,添加的一定是没有关联到当前商品类目的品牌,所以需要先查出未关联到该类目的品牌,然后选择一个或多个品牌关联的类目。

@GetMapping("admin/product/baseCategoryTrademark/findCurrentTrademarkList/{thirdLevelCategoryId}") public Result findCurrentTrademarkList(@PathVariable Long thirdLevelCategoryId){ } /** * 获取当前未被三级分类关联的所有品牌 */ List<TrademarkDTO> findUnLinkedTrademarkList(Long thirdLevelCategoryId);这里的实现思路其实也并不困难:
- 首先查询出当前类目已经关联的品牌列表(在trademark_category中)
- 查询所有品牌的品牌列表,过滤掉已经关联到当前类目的品牌即可
删除目录品牌关联
@DeleteMapping("admin/product/baseCategoryTrademark/remove/{thirdLevelCategoryId}/{trademarkId}") public Result remove(@PathVariable Long thirdLevelCategoryId, @PathVariable Long trademarkId){
} /** * 删除关联 */ void remove(Long thirdLevelCategoryId, Long trademarkId);SPU
SPU数据
之前我们已经讲解过SPU,它表示具有相同特征和属性值的一组商品。如果要完整的描述一个SPU他应该包含那些数据呢?简单总结一下:
- 类目信息:一个SPU中所包含的商品,都应该是具有所属类目的
- 品牌信息: 一个SPU中所包含的商品,都应该是具有品牌的
- 图片信息: 一个SPU中所包含的每一个商品,都应该具有一组图片
- 海报信息: 一个SPU中的所有商品,具有统一的展示海报
- 销售属性:一个SPU中的所有商品,具有相同的销售属性,但是具有不同的销售属性取值集合

SPU操作
查询销售属性
所有的销售属性定义在sale_attr_info表中的,所以要给SPU选择销售属性,就必须查询出所有的销售属性。

@GetMapping("admin/product/baseSaleAttrList")public Result SaleAttrList(){} /* 查询所有的销售属性 */ List<SaleAttributeInfoDTO> getSaleAttrInfoList();本质还是一个单表查询,很简单。
SPU列表的查询

@GetMapping("admin/product/{page}/{size}") public Result getSpuInfoPage(@PathVariable Long page, @PathVariable Long size, Long category3Id){ } /* 根据分页参数查询spu分页数据 */ SpuInfoPageDTO getSpuInfoPage(Page<SpuInfo> pageParam, Long category3Id);这里要注意,我们查询的SPU列表,其实是某一个三级类目下的Spu列表,我们主要使用三级类目id,作为查询条件来查询。
SPU保存

从页面上来看,我们需要保存的数据比较多,主要分成了如下几个部分:
- SPU所属类目,名称,SPU的品牌,以及SPU的文字描述
- SPU中所包含的不同商品的图片集合
- SPU中所包含的多个属性和属性值集合
- SPU商品的海报集合
所以,接下来我们就需要实现以下接口方法,实现SPU的保存
@PostMapping("admin/product/saveSpuInfo") public Result saveSpuInfo(@RequestBody SpuInfoParam spuInfoParam){ } /* 保存完整的SPU信息 */ void saveSpuInfo(SpuInfoParam spuInfo);@Datapublic class SpuInfoParam {
private Long id;
private String spuName;
private String description;
/* 三级分类id */ private Long category3Id;
private Long tmId; /* 销售属性集合 */ private List<SpuSaleAttributeInfoParam> spuSaleAttrList; /* 商品的图片集合 */ private List<SpuImageParam> SpuImageList; /* 商品的海报图片集合 */ private List<SpuPosterParam> SpuPosterList;}@Datapublic class SpuSaleAttributeInfoParam {
private Long id;
private Long spuId; /* 销售属性id */ private Long baseSaleAttrId;
/* 销售属性名称 */ private String saleAttrName;
// 销售属性值对象集合 List<SpuSaleAttributeValueParam> spuSaleAttrValueList;}实现代码如下:
// 现将参数对象转化为PO对象 SpuInfo spuInfo = spuInfoParamConverter.spuInfoParam2Info(spuInfoParam); // 插入基本的spu信息 spuInfoMapper.insert(spuInfo);
// 获取到spuImage 集合数据 List<SpuImage> spuImageList = spuInfo.getSpuImageList();
/* 循环遍历spuImageList 1. 给spuImage的spuId属性赋值因为只有将spu基本信息插入数据库spuInfo的id才有值 2. 保存spuImge */
// 获取销售属性集合 List<SpuSaleAttributeInfo> spuSaleAttributeInfoList = spuInfo.getSpuSaleAttributeInfoList();
// 判断 if (!CollectionUtils.isEmpty(spuSaleAttributeInfoList)) { // 循环遍历 for (SpuSaleAttributeInfo spuSaleAttrInfo : spuSaleAttributeInfoList) { /* 给spuSaleAttrInfo的spuId赋值,并保存spuSaleAttrInfo到数据库 SpuSaleAttrInfoMapper */
// 再此获取销售属性值集合 List<SpuSaleAttributeValue> spuSaleAttributeValueList = spuSaleAttrInfo.getSpuSaleAttrValueList();
/* 遍历销售属性值集合spuSaleAttributeValueList 1. 给spuSaleAttrValue的spuId赋值 2. 给spuSaleAttrValue的spuSaleAttrId赋值 3. 保存spuSaleAttrValue到数据库 */ } }
// 获取到posterList 集合数据 List<SpuPoster> spuPosterList = spuInfo.getSpuPosterList(); /* 遍历销售属性值集合spuPosterList 1. 给spuPoster的spuId赋值 3. 保存spuPoster到数据库 */文章分享
如果这篇文章对你有帮助,欢迎分享给更多人!