商城业务笔记
1、商品详情分析
1.1).商品详情需求
1.2).商品详情分析
第1、2步:直接在sku数据库查询
第3步:需要远程调用促销项目coupon
第4步:需要sku、属性
第5步:需要属性表,(第1步)
第6步:需要第一步的skuId(从sku表根据skuId获取spuId,再在spu表查询)
2、商品详情配置
2.1).修改nginx域名跳转
2.1.1)修改hosts主机(SwitchHosts.exe)
2.1.2)修改nginx配置文件 gulimall.conf
2.1.3)修改网关
2.1.4)导入详情页的html 到product的templates下
2.1.5)导入详情页的静态资源到nginx的static/item 下
2.1.6)修改详情页的item.html的资源路径
2.1.7)写controller—product的web下
//商品详情
@Controller
public class ItemController {
/**
* 展示当前sku详情
* */
@GetMapping("/{skuId}.html")
public String item(@PathVariable(“skuId”) Long skuId) {
System.out.println("查询sku "+skuId+“的详情”);
return “item”;
}
}
2.1.8)修改list.html,点击商品跳跃到商品详情页item.html
th:href="|http://item.gulimall.com/${product.skuId}.html|"
2、查询详情
1).写实体类
1.1).SkuItemVo --sku商品信息(总实体类)
@Data
@ToString
public class SkuItemVo {
//1.sku基本信息,pms_spu_info
SkuInfoEntity info;
//2.sku图片信息,pms_sku_images
List<SkuImagesEntity> images;
//3.spu销售属性组合
List<SkuItemSaleAttrVo> saleAttr;
//4.spu的介绍,pms_spu_info_desc
SpuInfoDescEntity desp;
//5.spu规格参数
List<SpuItemAttrGroupVo> groupsAttr;
}
1.2).spu基本属性–(分实体类)
//spu基本属性
@Data
@ToString
public class SpuBaseAttrVo {
private Long attrId;
private String attrName;
private String attrValue;
}
1.3).SkuItemSaleAttrVo --spu销售属性组合(分实体类)
//sku销售属性
@Data
@ToString
public class SkuItemSaleAttrVo {
private Long attrId;
private String attrName;
private String attrValues;
}
1.4).SpuItemAttrGroupVo–spu商品分组属性(分实体类)
//spu商品分组属性
@Data
@ToString
public class SpuItemAttrGroupVo {
private String groupName;
// private List<Attr> attrs;
private List<SpuBaseAttrVo> attrs;
}
3、业务区分
3.0).controller
//商品详情
@Controller
public class ItemController {
@Autowired
SkuInfoService skuInfoService;
/**
* 展示当前sku商品详情
* */
@GetMapping("/{skuId}.html")
public String item(@PathVariable("skuId") Long skuId, Model model) {
SkuItemVo skuItemVo =skuInfoService.item(skuId);
model.addAttribute("item",skuItemVo);
return "item";
}
}
3.1).sku基本信息,pms_spu_info
SkuInfoEntity info = getById(skuId);
3.2).sku图片信息,pms_sku_images
List images= skuImagesService.getImagesBySkuId(skuId);
3.3).spu销售属性组合(**)
List saleAttrVos =skuSaleAttrValueService.getSkuSaleAttrsBySpuId(spuId);
需要service、impl、dao
**SQL语句**
SELECT pav.spu_id,
ag.attr_group_id,ag.attr_group_name,
aar.attr_id,
attr.attr_name,
pav.attr_value
FROM pms_attr_group ag
LEFT JOIN pms_attr_attrgroup_relation aar ON aar.attr_group_id = ag.attr_group_id
LEFT JOIN pms_attr attr ON attr.attr_id = aar.attr_id
LEFT JOIN pms_product_attr_value pav ON pav.attr_id= attr.attr_id
WHERE ag.catelog_id=225 and pav.spu_id=11
3.4).spu的介绍,pms_spu_info_desc
SpuInfoDescEntity spuInfoDesc= spuInfoDescService.getById(spuId);
3.5).spu规格参数(**)
List attrGroups = attrGroupService.getAttrGroupWithAttrsBySpuId(spuId,catalogId);
**SQL语句**
select ssav.attr_id attr_id,
ssav.attr_name attr_name,
GROUP_CONCAT(DISTINCT ssav.attr_value) attr_values
from pms_sku_info info
LEFT JOIN pms_sku_sale_attr_value ssav on ssav.sku_id = info.sku_id
where info.spu_id =11
GROUP BY ssav.attr_id ,ssav.attr_name
mapper.xml
<resultMap id="spuAttrGroup" type="com.atguigu.gulimall.product.vo.itemvo.SpuItemAttrGroupVo">
<result property="groupName" column="attr_group_name"/>
<collection property="attrs" ofType="com.atguigu.gulimall.product.vo.itemvo.SpuBaseAttrVo">
<result property="attrId" column="attr_id"></result>
<result property="attrName" column="attr_name"></result>
<result property="attrValue" column="attr_value"></result>
</collection>
</resultMap>
<select id="getAttrGroupWithAttrsBySpuId" resultMap="spuAttrGroup">
SELECT pav.spu_id,
ag.attr_group_id,ag.attr_group_name,
aar.attr_id,
attr.attr_name,
pav.attr_value
FROM pms_attr_group ag
LEFT JOIN pms_attr_attrgroup_relation aar ON aar.attr_group_id = ag.attr_group_id
LEFT JOIN pms_attr attr ON attr.attr_id = aar.attr_id
LEFT JOIN pms_product_attr_value pav ON pav.attr_id= attr.attr_id
WHERE ag.catelog_id=#{catalogId} and pav.spu_id=#{spuId}
</select>
代码:商品详情的实现类(3.0的item方法的实现类)
//展示当前sku商品详情
@Override
public SkuItemVo item(Long skuId) {
SkuItemVo skuItemVo = new SkuItemVo();
//1.sku基本信息,pms_spu_info
SkuInfoEntity info = getById(skuId);
Long spuId = info.getSpuId();
Long catalogId = info.getCatalogId();
skuItemVo.setInfo(info);
//2.sku图片信息,pms_sku_images
List<SkuImagesEntity> images= skuImagesService.getImagesBySkuId(skuId);
skuItemVo.setImages(images);
//3.spu销售属性组合,
List<SkuItemSaleAttrVo> saleAttrVos =skuSaleAttrValueService.getSkuSaleAttrsBySpuId(spuId);
skuItemVo.setSaleAttr(saleAttrVos);
//4.spu的介绍,pms_spu_info_desc
SpuInfoDescEntity spuInfoDesc= spuInfoDescService.getById(spuId);
skuItemVo.setDesp(spuInfoDesc);
//5.spu规格参数,
List<SpuItemAttrGroupVo> attrGroups = attrGroupService.getAttrGroupWithAttrsBySpuId(spuId,catalogId);
skuItemVo.setGroupsAttr(attrGroups);
return skuItemVo;
}