发布商品功能-获取分类下所有分组&关联属性
本章来到发布商品功能的下一步,添加商品的规格参数:
对应的API文档:
17、获取分类下所有分组&关联属性
GET
/product/attrgroup/{catelogId}/withattr
响应数据
{
"msg": "success",
"code": 0,
"data": [{
"attrGroupId": 1,
"attrGroupName": "主体",
"sort": 0,
"descript": "主体",
"icon": "dd",
"catelogId": 225,
"attrs": [{
"attrId": 7,
"attrName": "入网型号",
"searchType": 1,
"valueType": 0,
"icon": "xxx",
"valueSelect": "aaa;bb",
"attrType": 1,
"enable": 1,
"catelogId": 225,
"showDesc": 1,
"attrGroupId": null
}, {
"attrId": 8,
"attrName": "上市年份",
"searchType": 0,
"valueType": 0,
"icon": "xxx",
"valueSelect": "2018;2019",
"attrType": 1,
"enable": 1,
"catelogId": 225,
"showDesc": 0,
"attrGroupId": null
}]
},
{
"attrGroupId": 2,
"attrGroupName": "基本信息",
"sort": 0,
"descript": "基本信息",
"icon": "xx",
"catelogId": 225,
"attrs": [{
"attrId": 11,
"attrName": "机身颜色",
"searchType": 0,
"valueType": 0,
"icon": "xxx",
"valueSelect": "黑色;白色",
"attrType": 1,
"enable": 1,
"catelogId": 225,
"showDesc": 1,
"attrGroupId": null
}]
}]
}
首先根据返回信息,创建一个对应的VO来保存所有信息,避免信息的遗漏:
package com.lastingwar.mall.product.vo;
import com.lastingwar.mall.product.entity.AttrEntity;
import lombok.Data;
import java.util.List;
@Data
public class AttrGroupWithAttrsVo {
/**
* 分组id
*/
private Long attrGroupId;
/**
* 组名
*/
private String attrGroupName;
/**
* 排序
*/
private Integer sort;
/**
* 描述
*/
private String descript;
/**
* 组图标
*/
private String icon;
/**
* 所属分类id
*/
private Long catelogId;
private List<AttrEntity> attrs;
}
之后根据接口信息,来到对应的控制层:/product/attrgroup/{catelogId}/withattr:
/**
* 对应响应 product/attrgroup/{catelogId}/withattr
* 获取分类下所有分组&关联属性
* @param catelogId 分类ID
* @return 分类下的分组和属性
*/
@GetMapping("/{catelogId}/withattr")
public R getAttrGroupWithAttrs(@PathVariable("catelogId")Long catelogId){
//1、查出当前分类下的所有属性分组,
//2、查出每个属性分组的所有属性
List<AttrGroupWithAttrsVo> vos = attrGroupService.getAttrGroupWithAttrsByCatelogId(catelogId);
return R.ok().put("data",vos);
}
之后实现方法getAttrGroupWithAttrsByCatelogId(catelogId),来完成根据分类ID,查找所以属性分组和属性:
/**
* 根据分类id查出所有的分组以及这些组里面的属性
* @param catelogId 分类ID
* @return 当前分类的所有属性分组下的所有属性
*/
@Override
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;
}
之后重启服务来到前端测试:注意这里的前端代码有遍历的操作,如果属性分组中没有属性会报空指针异常