谷粒商城—商城业务—商品详情(203~210)(完)"/>
谷粒商城—商城业务—商品详情(203~210)(完)
一.商品查询 模型抽取:
1.SkuItemVo 类: (总 VO)
/*** @Author zhangsan* @Date 2021/4/9 9:15 上午* @Version 1.0*/
@Data
@ToString
public class SkuItemVo {//1。查询 sku 基本信息SkuInfoEntity skuInfoEntity;//2。查询 sku 图片信息List<SkuImagesEntity> skuImagesEntityList;//是否有货boolean hasStock;//3。spu 销售属性组合信息List<SkuItemSaleAttrVo> skuItemSaleAttrVoList;//4。spu 介绍SpuInfoDescEntity spuInfoDescEntity;//5。spu 规格参数信息List<SpuItemAttrGroupVo> spuItemAttrGroupVoList;}
2.SkuItemSaleAttrVo 类:(销售属性 VO)
/*** 销售属性 vo** @Author zhangsan* @Date 2021/4/9 10:49 上午* @Version 1.0*/
@ToString
@Data
public class SkuItemSaleAttrVo {private Long attrId;private String attrName;private String attrValues;private String sku_id;}
3.SpuItemAttrGroupVo 类:(规格参数信息 VO)
/*** @Author zhangsan* @Date 2021/4/9 10:47 上午* @Version 1.0*/
@ToString
@Data
public class SpuItemAttrGroupVo {private String groupName;private List<SpuBaseAttrVo> spuBaseAttrVos;}
4.SpuBaseAttrVo 类:(规格参数信息 详情 VO)
/*** @Author zhangsan* @Date 2021/4/9 10:48 上午* @Version 1.0*/
@ToString
@Data
public class SpuBaseAttrVo {private String attrName;private String attrValue;
}
二.Controller:
@Autowiredprivate SkuInfoService skuInfoService;@RequestMapping(value = "/{skuId}.html")public R skuItem(@PathVariable(value = "skuId") Long skuId) {System.out.println("准备查询 sku:" + skuId);SkuItemVo skuItemVo = skuInfoService.skuItem(skuId);return R.ok().put("data", skuItemVo);}
三.Service:
1.总 Service:
@Autowiredprivate SkuInfoDao skuInfoDao;@Autowiredprivate SkuImagesService skuImagesService;@Autowiredprivate SkuInfoService skuInfoService;@Autowiredprivate AttrGroupService attrGroupService;@Autowiredprivate SkuSaleAttrValueService skuSaleAttrValueService;@Overridepublic SkuItemVo skuItem(Long skuId) {SkuItemVo skuItemVo = new SkuItemVo();//1。查询 sku 基本信息SkuInfoEntity skuInfoEntity = skuInfoDao.selectById(skuId);skuItemVo.setSkuInfoEntity(skuInfoEntity);//2。查询 sku 图片信息List<SkuImagesEntity> skuImagesEntityList = skuImagesService.selectListById(skuId);skuItemVo.setSkuImagesEntityList(skuImagesEntityList);//3。spu 销售属性组合信息List<SkuItemSaleAttrVo> skuItemSaleAttrVoList = skuSaleAttrValueService.getSaleAttrsById(skuInfoEntity.getSpuId());skuItemVo.setSkuItemSaleAttrVoList(skuItemSaleAttrVoList);//4。spu 介绍Long spuId = skuInfoEntity.getSpuId();SkuInfoEntity byId = skuInfoService.getById(spuId);skuItemVo.setSkuInfoEntity(byId);//5。spu 规格参数信息List<SpuItemAttrGroupVo> spuItemAttrGroupVoList = attrGroupService.getAttrGroupWithAttrsBySpuId(spuId, skuInfoEntity.getCatalogId());skuItemVo.setSpuItemAttrGroupVoList(spuItemAttrGroupVoList);return skuItemVo;}
2. //3。spu 销售属性组合信息:
1)Dao 接口:
@Overridepublic List<SkuItemSaleAttrVo> getSaleAttrsById(Long spuId) {SkuSaleAttrValueDao skuSaleAttrValueDao = this.baseMapper;List<SkuItemSaleAttrVo> skuItemSaleAttrVoList = skuSaleAttrValueDao.getSaleAttrsById(spuId);return skuItemSaleAttrVoList;}
2)Mappper :
<resultMap id="getSaleAttrsByIdResultMap" type="com.guigu.gulimail.product.vo.SkuItemSaleAttrVo"><id property="attrId" column="attr_id"></id><result property="attrName" column="attr_name"></result><result property="attrValues" column="attr_values"/><result property="sku_id" column="sku_id"></result></resultMap><!--使用 别名 或者 result ,都可以 将 sql 结果,封装到 vo--><select id="getSaleAttrsById" resultMap="getSaleAttrsByIdResultMap">SELECT pssav.attr_id attr_id,pssav.attr_name attr_name,pssav.attr_value attr_values,GROUP_CONCAT(DISTINCT psi.sku_id) sku_idfrom pms_sku_info psileft join pms_sku_sale_attr_value pssav onpsi.sku_id = pssav.sku_idWHERE psi.spu_id = #{spuId}GROUP by attr_id,attr_name,attr_value</select>
3. //5。spu 规格参数信息
1)Dao 接口:
@Overridepublic List<SpuItemAttrGroupVo> getAttrGroupWithAttrsBySpuId(Long spuId, Long catelogId) {//查询出 当前 spu 对应的 所有属性分组信息,以及当前分组下的所有属性对应的值。AttrGroupDao attrGroupDao = this.baseMapper;List<SpuItemAttrGroupVo> spuItemAttrGroupVoList= attrGroupDao.getAttrGroupWithAttrsBySpuId(spuId, catelogId);return spuItemAttrGroupVoList;}
2)Mapper 实现:
List<SpuItemAttrGroupVo> getAttrGroupWithAttrsBySpuId(@Param(value = "spuId") Long spuId,@Param(value = "catelogId") Long catelogId);
<resultMap id="myResultMap" type="com.guigu.gulimail.product.vo.SpuItemAttrGroupVo"><result property="groupName" column="attr_group_name"/><collection property="spuBaseAttrVos" ofType="com.guigu.gulimail.product.vo.SpuBaseAttrVo"><result property="attrName" column="attr_name"/><result property="attrValue" column="attr_value"/></collection></resultMap><select id="getAttrGroupWithAttrsBySpuId" resultMap="myResultMap">SELECT ag.attr_group_name,ag.attr_group_id,aar.attr_id,pa.attr_name,ppav.attr_valuefrom pms_attr_group agLEFT JOIN pms_attr_attrgroup_relation aar onag.attr_group_id = aar.attr_group_idLEFT JOIN pms_attr pa onpa.attr_id = aar.attr_idLEFT JOIN pms_product_attr_value ppav onpa.attr_id = ppav.attr_idwhere ag.catelog_id = #{catelogId}and ppav.spu_id = #{spuId}</select>
四.使用 线程池 异步编排 Service:
@Service
public class SkuInfoServiceImpl extends ServiceImpl<SkuInfoDao, SkuInfoEntity> implements SkuInfoService {@Autowiredprivate ThreadPoolExecutor executor;@Overridepublic SkuItemVo skuItem(Long skuId) throws ExecutionException, InterruptedException {SkuItemVo skuItemVo = new SkuItemVo();//CompletableFuture--1CompletableFuture<SkuInfoEntity> voidCompletableFuture1 = CompletableFuture.supplyAsync(() -> {//1。查询 sku 基本信息SkuInfoEntity skuInfoEntity = skuInfoDao.selectById(skuId);skuItemVo.setSkuInfoEntity(skuInfoEntity);return skuInfoEntity;}, executor);//CompletableFuture--2CompletableFuture<Void> voidCompletableFuture3 = voidCompletableFuture1.thenAcceptAsync((skuInfoEntity) -> {//3。spu 销售属性组合信息List<SkuItemSaleAttrVo> skuItemSaleAttrVoList = skuSaleAttrValueService.getSaleAttrsById(skuInfoEntity.getSpuId());skuItemVo.setSkuItemSaleAttrVoList(skuItemSaleAttrVoList);});//CompletableFuture--2CompletableFuture<Void> voidCompletableFuture4 = voidCompletableFuture1.thenAcceptAsync((skuInfoEntity) -> {//4。spu 介绍Long spuId = skuInfoEntity.getSpuId();SkuInfoEntity byId = skuInfoService.getById(spuId);skuItemVo.setSkuInfoEntity(byId);});//CompletableFuture--2CompletableFuture<Void> voidCompletableFuture5 = voidCompletableFuture1.thenAcceptAsync((skuInfoEntity) -> {//5。spu 规格参数信息List<SpuItemAttrGroupVo> spuItemAttrGroupVoList = attrGroupService.getAttrGroupWithAttrsBySpuId(skuInfoEntity.getSpuId(), skuInfoEntity.getCatalogId());skuItemVo.setSpuItemAttrGroupVoList(spuItemAttrGroupVoList);});//CompletableFuture--3CompletableFuture<Void> voidCompletableFuture2 = CompletableFuture.runAsync(() -> {//2。查询 sku 图片信息List<SkuImagesEntity> skuImagesEntityList = skuImagesService.selectListById(skuId);skuItemVo.setSkuImagesEntityList(skuImagesEntityList);}, executor);//等 所有都执行完,才返回CompletableFuture.allOf(voidCompletableFuture1,voidCompletableFuture2,voidCompletableFuture3,voidCompletableFuture4,voidCompletableFuture5).get();return skuItemVo;}}
更多推荐
谷粒商城—商城业务—商品详情(203~210)(完)
发布评论