版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_44580977/article/details/102840308
这里给大家分析一下乐优商城是如何进行商品的表设计以及后端插入的流程 如有错误,欢迎指正
1.tb_spu表是存储共同属性的商品集 有外键 brand_id ,category_id (3级别)
2.tb_sku表是存储每个tb_spu表对应商品的几种不同类型,外键是spu_id
3.tb_spec_group表为spu的从表,不同caregory_id有不同的共有属性,外键是category_id
4.tb_spec_params表为tb_spec_group表的从表,通过group_id查找每个主体里面的属性,外键是group_id
5.tb_spu_detail表为tb_spu表内商品对应公共参数值和一些特殊参数值(手机红的,白的)
brand和category 就没必要说了
ps:箭头请勿理会,本表关系,围绕spu商品展开,其余之间关系未标注
savegoods 要做的事情
1.插入spu,其内容包括,标题,副标题,三级cid,品牌id,是否上架默认不上架,是否有效,默认有效,添加时间,修改时间
2.插入sup_detail,其内容包括,商品描述(富文本),商品通用规格参数对象,商品特有规格参数集合对象(自定义的颜色内存等),包装清单,售后服务
3.插入sku,具体商品,其内容包括,spu_id,商品标题,商品图片,售价,特有属性的值(便于发给前端),自定义规格(颜色,内容)具体的值(这里对应一个具体的商品),是否有效,添加时间,修改时间
4.插入stock,其内容包括可秒杀库存,秒杀总数量(前两个这暂时用不到),sku_id,库存数量
service 层代码
/**
* 新增商品
* @param spuBo
*/
@Transactional
public void saveGoods(SpuBo spuBo) {
System.out.println(spuBo);
// 新增spu
// 设置默认字段
spuBo.setId(null);
spuBo.setSaleable(true);
spuBo.setValid(true);
spuBo.setCreateTime(new Date());
spuBo.setLastUpdateTime(spuBo.getCreateTime());
this.goodsMapper.insertSelective(spuBo);
// 新增spuDetail
SpuDetail spuDetail = spuBo.getSpuDetail();
spuDetail.setSpuId(spuBo.getId());
spuDetailMapper.insertSelective(spuDetail);
saveSkuAndStock(spuBo);
}
/**
* Goods增加 增加sku特有属性对应的实际商品和库存
* @param spuBo
*/
private void saveSkuAndStock(SpuBo spuBo) {
spuBo.getSkus().forEach(sku -> {
// 新增sku
sku.setSpuId(spuBo.getId());
sku.setCreateTime(new Date());
sku.setLastUpdateTime(sku.getCreateTime());
skuMapper.insertSelective(sku);
// 新增库存
Stock stock = new Stock();
stock.setSkuId(sku.getId());
stock.setStock(sku.getStock());
stockMapper.insertSelective(stock);
System.out.println("请看下面 sku 和 stock");
System.out.println(sku);
System.out.println(stock);
});
}