异步线程编排


//异步
@Override
public SkuItemVo item(Long skuId) throws ExecutionException, InterruptedException {
SkuItemVo skuItemVo = new SkuItemVo();
CompletableFuture infoFuture = CompletableFuture.supplyAsync(() -> {
//1.sku基本信息获取 pms_sku_info
SkuInfoEntity info = getById(skuId);
skuItemVo.setInfo(info);
return info;
}, executor);
CompletableFuture saleFuture = infoFuture.thenAcceptAsync((res) -> {
//spu的销售属性组合
List saleAttrsVos = skuSaleAttrValueService.getSaleAttrsBySpuId(res.getSpuId());
skuItemVo.setSaleAttr(saleAttrsVos);
}, executor);
CompletableFuture descFuture = infoFuture.thenAcceptAsync((res) -> {
//spu的详细介绍
SpuInfoDescEntity spuInfoDescEntity = spuInfoDescService.getById(res.getSpuId());
skuItemVo.setDesp(spuInfoDescEntity);
}, executor);
CompletableFuture baseFuture = infoFuture.thenAcceptAsync((res) -> {
//规格参数
List attrGroupVos = attrGroupService.getAttrGroupWithAttrsBySpuId(res.getSpuId(), res.getCatalogId());
skuItemVo.setGroupAttrs(attrGroupVos);
}, executor);
CompletableFuture imgFuture = CompletableFuture.runAsync(() -> {
//sku图片信息 pms_sku_images
List images = imagesService.getImagesBySkuId(skuId);
skuItemVo.setImagesEntites(images);
}, executor);
//查询当前商品是否是秒杀商品
CompletableFuture seckillFuture = CompletableFuture.runAsync(() -> {
R seckillInfo = seckillFeginService.getSkuSeckillInfo(skuId);
if (seckillInfo.getCode() == 0) {
SeckillInfoVo seckillInfoVo = seckillInfo.getData(new TypeReference() {
});
skuItemVo.setSeckillInfo(seckillInfoVo);
}
},executor);
//等待所有任务都完成
CompletableFuture.allOf(saleFuture,descFuture,baseFuture,imgFuture,seckillFuture).get();
return skuItemVo;
}