目录:
(1)获取价格信息
(2)获取销售信息
前面的表:
(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_checkedFROM spu_sale_attr saINNER JOIN spu_sale_attr_value sv ON sa.spu_id=sv.spu_id AND sa.base_sale_attr_id=sv.base_sale_attr_idLEFT 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_checkedFROM spu_sale_attr saINNER JOIN spu_sale_attr_value sv ON sa.spu_id=sv.spu_id AND sa.base_sale_attr_id=sv.base_sale_attr_idLEFT 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);
}