商品详情页
实体类分析
首先在商品详情页要获取的数据有如下被框住的部分:
首先是商品详情 分为商品商品名称 商品价格 默认图片
其次是商品图片
在然后是商品规格属性如颜色和版本
最后还有商品是否有货
还有商品介绍图以及规格
最后的实体类如下所示
public class ItemVO {
// 商品信息
private PmsSkuInfo skuInfo;
// 商品图片
private List skuImages;
// 商品介绍图
private PmsSpuInfoDesc spuInfoDesc;
// 销售属性
private List saleAttr;
// 商品规格
private List spuItemAttrs;
private Boolean hasStock = true;
public Boolean getHasStock() {
return hasStock;
}
public void setHasStock(Boolean hasStock) {
this.hasStock = hasStock;
}
public static class SpuItemAttrVO {
// 属性组名称 如主体
private String groupName;
// 组下的不同属性 如品牌 型号等
private List spuItemBaseAttrs;
public String getGroupName() {
return groupName;
}
public void setGroupName(String groupName) {
this.groupName = groupName;
}
public List getSpuItemBaseAttrs() {
return spuItemBaseAttrs;
}
public void setSpuItemBaseAttrs(List spuItemBaseAttrs) {
this.spuItemBaseAttrs = spuItemBaseAttrs;
}
}
public static class SpuItemBaseAttr {
// 属性名称
private String attrName;
// 属性值
private String attrValue;
public String getAttrName() {
return attrName;
}
public void setAttrName(String attrName) {
this.attrName = attrName;
}
public String getAttrValue() {
return attrValue;
}
public void setAttrValue(String attrValue) {
this.attrValue = attrValue;
}
}
public static class skuItemSaleAttrVO {
//销售属性id
private Long attrId;
// 销售属性名称
private String attrName;
// 销售属性值 因为销售属性是一对多的 比如一个颜色分类下有多个不同的颜色, 比如销售版本有128GB 64GB
private List attrValue;
public Long getAttrId() {
return attrId;
}
public void setAttrId(Long attrId) {
this.attrId = attrId;
}
public String getAttrName() {
return attrName;
}
public void setAttrName(String attrName) {
this.attrName = attrName;
}
public List getAttrValue() {
return attrValue;
}
public void setAttrValue(List attrValue) {
this.attrValue = attrValue;
}
}
public PmsSkuInfo getSkuInfo() {
return skuInfo;
}
public void setSkuInfo(PmsSkuInfo skuInfo) {
this.skuInfo = skuInfo;
}
public List getSkuImages() {
return skuImages;
}
public void setSkuImages(List skuImages) {
this.skuImages = skuImages;
}
public PmsSpuInfoDesc getSpuInfoDesc() {
return spuInfoDesc;
}
public void setSpuInfoDesc(PmsSpuInfoDesc spuInfoDesc) {
this.spuInfoDesc = spuInfoDesc;
}
public List getSaleAttr() {
return saleAttr;
}
public void setSaleAttr(List saleAttr) {
this.saleAttr = saleAttr;
}
public List getSpuItemAttrs() {
return spuItemAttrs;
}
public void setSpuItemAttrs(List spuItemAttrs) {
this.spuItemAttrs = spuItemAttrs;
}
}
业务实现
实现思路: 首先根源skuId查询sku信息 这样就可以将sku价格和sku标题 副标题 以及默认图片查询出来
之后在表pms_sku_images中根据sku将sku图片查询出来, 这样以来商品图片也查询到了
在sku信息中有封装spuId所以根据spuId查询商品详情图
之后两步就有些复杂了
获取销售属性
首先销售属性信息保存在三张表中 分别是pms_sku_info sku信表
pms_sku_sale_attr_value sku中存储商品的skuId和与之对应的attr_id 属性id, 属性名称 属性值
首先根据spuId查询到spu信息 然后做连接pms_sku_sale_attr_value根据sku_id查询销售属性
group_concat()函数可以将分组属性中的多种值显示出来
根据
商品属性
首先根据三级分类id查到该分类信息 然后左连接根据组查询查询该三级分类下的所有组, 然后根据上一步查到的属性id 左连接查询属性,
然后根据属性id查询属性下的值, 最后关联spuId查询
public ItemVO item(Long skuId) {
ItemVO itemVO = new ItemVO();
PmsSkuInfo pmsSkuInfo = skuInfoMapper.selectById(skuId);
itemVO.setSkuInfo(pmsSkuInfo);
List skuImages = skuImagesService.getSkuImagesBySkuId(skuId);
itemVO.setSkuImages(skuImages);
Long spuId = pmsSkuInfo.getSpuId();
PmsSpuInfoDesc spuInfoDesc = spuInfoDescService.getDesc(spuId);
itemVO.setSpuInfoDesc(spuInfoDesc);
List spuItemAttrVOS = attrGroupService.getAttrGroupWithAttrsBySpuId(spuId, pmsSkuInfo.getCatalogId());
itemVO.setSpuItemAttrs(spuItemAttrVOS);
List skuItemSaleAttrVOS = skuSaleAttrValueService.getSaleAttrsBySpuId(spuId);
itemVO.setSaleAttr(skuItemSaleAttrVOS);
return itemVO;
}