目录:
(1)实现商品切换
(2)获取海报信息
(3)Sku对应的平台属性
(1)实现商品切换(查询属性切换)
sku_sale_attr_value表:
排序字段跟跟前面写的获取销售信息的排序字段一样
实现思路:
1 、从页面中获得得所有选中的销售属性进行组合比如:
“属性值1|属性值2” 用这个字符串匹配一个对照表,来获得skuId。并进行跳转,或者告知无货。
2、后台要生成一个“属性值1|属性值2:skuId”的一个json串以提供页面进行匹配。如
3、需要从后台数据库查询出该spu下的所有skuId和属性值关联关系。然后加工成如上的Json串,用该json串,跟前台匹配。
在SkuSaleAttrValueMapper中添加接口
数据有多行,用List《Map》 接收
// 根据spuId 查询map 集合数据
List<Map> selectSaleAttrValuesBySpu(Long spuId);
创建SkuSaleAttrValueMapper.xml
<!--定义Map的resultMap-->
<resultMap id="spuValueIdsMap" type="java.util.Map" autoMapping="true">
</resultMap>
<select id="selectSaleAttrValuesBySpu" resultMap="spuValueIdsMap">
SELECT sku_id , GROUP_CONCAT(sale_attr_value_id ORDER BY sp.base_sale_attr_id ASC SEPARATOR '|') value_ids
FROM `sku_sale_attr_value` sv
INNER JOIN `spu_sale_attr_value` sp on sp.id = sv.sale_attr_value_id
WHERE sv.spu_id=#{spuId}
GROUP BY sku_id
</select>
继续添加ManageService接口
/**
* 根据spuId 查询map 集合属性
* @param spuId
* @return
*/
Map getSkuValueIdsMap(Long spuId);
实现类
@Override
public Map getSkuValueIdsMap(Long spuId) {
Map<Object, Object> map = new HashMap<>();
// key = 125|123 ,value = 37
List<Map> mapList = skuSaleAttrValueMapper.selectSaleAttrValuesBySpu(spuId);
if (mapList != null && mapList.size() > 0) {
// 循环遍历
for (Map skuMap : mapList) {
// key = 125|123 ,value = 37
map.put(skuMap.get("value_ids"), skuMap.get("sku_id"));
}
}
return map;
}
把list集合里面的多个map整合成一个map对象:前一个做key 后一个value
继续编写控制器ProductApiController:
/**
* 根据spuId 查询map 集合属性
* @param spuId
* @return
*/
@GetMapping("inner/getSkuValueIdsMap/{spuId}")
public Map getSkuValueIdsMap(@PathVariable("spuId") Long spuId){
return manageService.getSkuValueIdsMap(spuId);
}
(2)获取海报信息
继续在ManagerService编写接口
/**
* 根据spuid获取商品海报
* @param spuId
* @return
*/
List<SpuPoster> findSpuPosterBySpuId(Long spuId);
实现类ManagerServiceImpl
@Override
public List<SpuPoster> findSpuPosterBySpuId(Long spuId) {
QueryWrapper<SpuPoster> spuInfoQueryWrapper = new QueryWrapper<>();
spuInfoQueryWrapper.eq("spu_id",spuId);
List<SpuPoster> spuPosterList = spuPosterMapper.selectList(spuInfoQueryWrapper);
return spuPosterList;
}
编写控制器
// 根据spuId 获取海报数据
@GetMapping("inner/findSpuPosterBySpuId/{spuId}")
public List<SpuPoster> findSpuPosterBySpuId(@PathVariable Long spuId){
return manageService.findSpuPosterBySpuId(spuId);
}
(3)Sku对应的平台属性
显示在商品详情规格处
编写接口ManageService
/**
* 通过skuId 集合来查询数据
* @param skuId
* @return
*/
List<BaseAttrInfo> getAttrList(Long skuId);
与实现类
@Override
public List<BaseAttrInfo> getAttrList(Long skuId) {
return baseAttrInfoMapper.selectBaseAttrInfoListBySkuId(skuId);
}
BaseAttrInfoMapper 添加方法
/**
*
* @param skuId
*/
List<BaseAttrInfo> selectBaseAttrInfoListBySkuId(@Param("skuId")Long skuId);
BaseAttrInfoMapper.xml添加
<select id="selectBaseAttrInfoListBySkuId" resultMap="baseAttrInfoMap">
SELECT
bai.id,
bai.attr_name,
bai.category_id,
bai.category_level,
bav.id attr_value_id,
bav.value_name,
bav.attr_id
FROM
base_attr_info bai
INNER JOIN base_attr_value bav ON bai.id = bav.attr_id
INNER JOIN sku_attr_value sav ON sav.value_id = bav.id
WHERE
sav.sku_id = #{skuId}
</select>
编写控制器ProductApiController
/**
* 通过skuId 集合来查询数据
* @param skuId
* @return
*/
@GetMapping("inner/getAttrList/{skuId}")
public List<BaseAttrInfo> getAttrList(@PathVariable("skuId") Long skuId){
return manageService.getAttrList(skuId);
}
说明:目前我们在service-product里面把数据模型已经封装好了,接下封装feign client api接口,提供给service-item微服务调用汇总数据模型