一,85-商品服务-API-新增商品-获取分类下所有分组以及属性
在商品发布中,基本信息填写完成后,进入规格参数的填写,此时需要查出所选分类下所有分组及每个分组下的所有属性。
AttrGroupController中增加接口。
@GetMapping("/{catelogId}/withattr")
public R getAttrGroupWithAttrs(@PathVariable("catelogId")Long catelogId){
//1、查出当前分类下的所有属性分组,
//2、查出每个属性分组的所有属性
List<AttrGroupWithAttrsVo> vos = attrGroupService.getAttrGroupWithAttrsByCatelogId(catelogId);
return R.ok().put("data",vos);
}
对应的Service实现。
public List<AttrGroupWithAttrsVo> getAttrGroupWithAttrsByCatelogId(Long catelogId) {
//com.atguigu.gulimall.product.vo
//1、查询分组信息
List<AttrGroupEntity> attrGroupEntities = this.list(new QueryWrapper<AttrGroupEntity>().eq("catelog_id", catelogId));
//2、查询所有属性
List<AttrGroupWithAttrsVo> collect = attrGroupEntities.stream().map(group -> {
AttrGroupWithAttrsVo attrsVo = new AttrGroupWithAttrsVo();
BeanUtils.copyProperties(group,attrsVo);
List<AttrEntity> attrs = attrService.getRelationAttr(attrsVo.getAttrGroupId());
attrsVo.setAttrs(attrs);
return attrsVo;
}).collect(Collectors.toList());
return collect;
}
二,86-商品服务-API-新增商品-商品新增vo抽取
这一节的内容主要是演示发布商品的前端操作,和前端生成的JSON参数,并根据JSON参数生成后端的VO用来接收前端的参数。
三,87-商品服务-API-新增商品-商品新增业务流程分析
这一节的内容也非常关键,一定要理解。
主要讲述了商品信息保存流程中的数据处理和数据库交互细节,特别是针对商品的基本信息、图片信息、规格参数、SKU信息以及积分信息的保存过程。
涉及的表比较多,逻辑相对比较复杂。
-
数据类型调整:
- 所有的价格字段和小数字段使用
BigDecimal
而不是Double
,以避免精度损失。 - 积分字段也使用
BigDecimal
,因为积分可能包含小数值。 - 数据库中的ID字段使用
Long
类型。 - VO(Value Object)类中的get/set方法被调整以匹配上述数据类型的变化。
- 所有的价格字段和小数字段使用
-
保存流程概述
*****
:-
基本信息保存:在
pms_spu_info
表中保存商品的基本信息。 -
描述图片保存:在
pms_spu_info_desc
表中保存商品描述及其图片。 -
图片集保存:在
pms_spu_images
表中保存商品的所有图片集。 -
规格参数保存:在
pms_product_attr_value
表中保存商品的规格参数。 -
spu的积分信息:
gulimall_sms->sms_spu_bounds
-
SKU信息保存:分为下面几个步骤进行保存。
- SKU基本信息:在
pms_sku_info
表中保存每个SKU的基本信息。 - SKU图片信息:在
pms_sku_image
表中保存每个SKU的图片信息。 - SKU销售 属性信息:在
pms_sku_sale_attr_value
表中保存每个SKU的销售属性信息。 - SKU优惠信息:跨数据库操作,在
SMS
数据库中保存优惠信息,包括打折表、满减表和会员价格表。gulimall_sms->sms_sku_ladder\sms_sku_full_reduction\sms_member_price
- SKU基本信息:在
-
-
事务管理:
- 为了保证数据的一致性,保存操作需要在一个事务中完成。