前面的表:
(1)获取价格信息
继续编写接口:ManagerService
/**
* 获取sku价格
* @param skuId
* @return
*/
BigDecimal getSkuPrice(Long skuId);
实现类 ManagerServiceImpl
/**
* 获取sku价格
* @param skuId
* @return
*/
@Override
public BigDecimal getSkuPrice(Long skuId) {
SkuInfo skuInfo = skuInfoMapper.selectById(skuId);
if(null != skuInfo) {
return skuInfo.getPrice();
}
return new BigDecimal("0");
}
继续编写控制器:ProductApiController
查询的是sku_info里面的价格
/**
* 获取sku最新价格
* @param skuId
* @return
*/
@GetMapping("inner/getSkuPrice/{skuId}")
public BigDecimal getSkuPrice(@PathVariable Long skuId){
return manageService.getSkuPrice(skuId);
}
(2)获取销售信息
通过spuid和skuid查询 选中sku的销售属性
思路:
1、查出该商品的spu的所有销售属性和属性值
2、标识出本商品对应的销售属性
3、点击其他销售属性值的组合,跳转到另外的sku页面
销售属性跟销售属性值表,没有外键,他们之间不是通过外键关联的,他们是通过两个字段进行关联的
选中关系表:选中了sku,然后跟销售属性关联过滤
查询出sku对应spu的销售属性
第1、2条通过此sql实现:
SELECT sa.id ,sa.spu_id, sa.sale_attr_name,sa.base_sale_attr_id, sv.id sale_attr_value_id, sv.sale_attr_value_name, skv.sku_id, IF(skv.sku_id IS NULL,0,1) is_checked FROM spu_sale_attr sa INNER JOIN spu_sale_attr_value sv ON sa.spu_id=sv.spu_id AND sa.base_sale_attr_id=sv.base_sale_attr_id LEFT JOIN sku_sale_attr_value skv ON skv.sale_attr_value_id= sv.id AND skv.sku_id=#{skuId} WHERE sa.spu_id=#{spuId} ORDER BY sv.base_sale_attr_id,sv.id
此sql列出所有该spu的销售属性和属性值,并关联某skuid如果能关联上is_check设为1,否则设为0。
在对应的实体类中【SpuSaleAttrValue】添加属性字段
package com.atguigu.gmall.model.product;
import com.atguigu.gmall.model.base.BaseEntity;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
/**
* <p>
* SpuSaleAttr
* </p>
*
*/
@Data
@ApiModel(description = "销售属性")
@TableName("spu_sale_attr")
public class SpuSaleAttr extends BaseEntity {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "商品id")
@TableField("spu_id")
private Long spuId;
@ApiModelProperty(value = "销售属性id")
@TableField("base_sale_attr_id")
private Long baseSaleAttrId;
@ApiModelProperty(value = "销售属性名称(冗余)")
@TableField("sale_attr_name")
private String saleAttrName;
// 销售属性值对象集合
@TableField(exist = false)
List<SpuSaleAttrValue> spuSaleAttrValueList;
}
package com.atguigu.gmall.model.product;
import com.atguigu.gmall.model.base.BaseEntity;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* <p>
* SpuSaleAttrValue
* </p>
*
*/
@Data
@ApiModel(description = "销售属性值")
@TableName("spu_sale_attr_value")
public class SpuSaleAttrValue extends BaseEntity {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "商品id")
@TableField("spu_id")
private Long spuId;
@ApiModelProperty(value = "销售属性id")
@TableField("base_sale_attr_id")
private Long baseSaleAttrId;
@ApiModelProperty(value = "销售属性值名称")
@TableField("sale_attr_value_name")
private String saleAttrValueName;
@ApiModelProperty(value = "销售属性名称(冗余)")
@TableField("sale_attr_name")
private String saleAttrName;
// 是否是默认选中状态
// @TableField("sale_attr_name")
// String isChecked;
@TableField(exist = false)
String isChecked;
}
在SpuSaleAttrMapper 接口中添加的方法
// 根据spuId,skuId 查询销售属性集合
List<SpuSaleAttr> selectSpuSaleAttrListCheckBySku(@Param("skuId") Long skuId, @Param("spuId")Long spuId);
SpuSaleAttrMapper.xml:添加
<select id="selectSpuSaleAttrListCheckBySku" resultMap="spuSaleAttrMap">
SELECT sa.id ,sa.spu_id, sa.sale_attr_name,sa.base_sale_attr_id,
sv.id sale_attr_value_id,
sv.sale_attr_value_name,
skv.sku_id,
IF(skv.sku_id IS NULL,0,1) is_checked
FROM spu_sale_attr sa
INNER JOIN spu_sale_attr_value sv ON sa.spu_id=sv.spu_id AND sa.base_sale_attr_id=sv.base_sale_attr_id
LEFT JOIN sku_sale_attr_value skv ON skv.sale_attr_value_id= sv.id AND skv.sku_id=#{skuId}
WHERE sa.spu_id=#{spuId}
ORDER BY sv.base_sale_attr_id,sv.id
</select>
继续编写接口ManageService 接口
/**
* 根据spuId,skuId 查询销售属性集合
* @param skuId
* @param spuId
* @return
*/
List<SpuSaleAttr> getSpuSaleAttrListCheckBySku(Long skuId, Long spuId);
实现类ManageServiceImpl
@Override
public List<SpuSaleAttr> getSpuSaleAttrListCheckBySku(Long skuId, Long spuId) {
return spuSaleAttrMapper.selectSpuSaleAttrListCheckBySku(skuId, spuId);
}
编写控制器:ProductApiController
/**
* 根据spuId,skuId 查询销售属性集合
* @param skuId
* @param spuId
* @return
*/
@GetMapping("inner/getSpuSaleAttrListCheckBySku/{skuId}/{spuId}")
public List<SpuSaleAttr> getSpuSaleAttrListCheckBySku(@PathVariable("skuId") Long skuId,@PathVariable("spuId") Long spuId){
return manageService.getSpuSaleAttrListCheckBySku(skuId, spuId);
}