SPU

1288 字
6 分钟
SPU

目录品牌管理#

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

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

添加商品类目品牌#

@PostMapping("admin/product/baseCategoryTrademark/save")
public Result save(@RequestBody CategoryTrademarkParam categoryTrademarkVo){
}
/**
* 保存分类与品牌关联
*/
void save(CategoryTrademarkParam categoryTrademarkParam);
@Data
public 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中的所有商品,具有相同的销售属性,但是具有不同的销售属性取值集合

![](/assets/firefly-docs/microservice/microservice-11-spu/spu data final.png)

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);
@Data
public 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;
}
@Data
public 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到数据库
*/

文章分享

如果这篇文章对你有帮助,欢迎分享给更多人!

SPU
https://firefly-mu-weld.vercel.app/posts/microservice-11-spu/
作者
Daisy
发布于
2026-06-14
许可协议
CC BY-NC-SA 4.0
Profile Image of the Author
Daisy
Hello, I'm Daisy.
公告
欢迎来到我的博客!这是一则示例公告。
分类
标签

文章目录