谷粒商城~商品上架

在这里插入图片描述

  1. controller
    在这里插入图片描述

2.to
在这里插入图片描述
3.Serviceimpl

    @Override
    public void up(Long spuId) {
        //1.查出当前spuid对应的所有sku信息、品牌的名字
        List<SkuInfoEntity> skus = skuInfoService.getSkusBySpuId(spuId);
        //组装需要的数据

        //查出当前sku的所有可以被用来检索的规格属性
        List<ProductAttrValueEntity> baseAttrs = productAttrValueService.baseAttrListforspu(spuId);
        List<Long> attrIds = baseAttrs.stream().map((attr) -> {
            return attr.getAttrId();
        }).collect(Collectors.toList());
        List<Long> searchAttrIds = attrService.selectSearchAttrIds(attrIds);//查出所有可以用来检索的属性id
        //从baseAttrs中过滤出属于searchAttrIds的内容
        //先把searchAttrIds转为set
        Set<Long> idSet = new HashSet<>(searchAttrIds);
        List<SkuEsModel.Attrs> collect = baseAttrs.stream().filter((baseAttr) -> {
            return idSet.contains(baseAttr.getAttrId());//然后过滤
        }).map((item) -> {
            SkuEsModel.Attrs attrs = new SkuEsModel.Attrs();//属性对拷
            BeanUtils.copyProperties(item, attrs);
            return attrs;
        }).collect(Collectors.toList());//收集成list 然后封装进skuEsModel



        List<Long> skuIdList = skus.stream().map(SkuInfoEntity::getSkuId).collect(Collectors.toList());
        //远程调用,从库存系统查询是否有库存
        Map<Long, Boolean> stockMap = null;
        try {//远程调用不稳定
            R r = wareFeignService.getSkusHasStock(skuIdList);
            TypeReference<List<SkuHasStockVo>> typeReference = new TypeReference<List<SkuHasStockVo>>() {
            };
            stockMap = r.getData(typeReference).stream().collect(Collectors.toMap(SkuHasStockVo::getSkuId, (item) -> {
                return item.getHasStock();
            }));
        }catch(Exception e){

        }


        //2.封装每个sku的信息
        Map<Long, Boolean> finalStockMap = stockMap;
        List<SkuEsModel> upProducts = skus.stream().map((sku)->{
            SkuEsModel skuEsModel = new SkuEsModel();
            BeanUtils.copyProperties(sku,skuEsModel);
            //属性名字不对应的一一设置
            skuEsModel.setSkuPrice(sku.getPrice());
            skuEsModel.setSkuImg(sku.getSkuDefaultImg());
            //设置品牌名和品牌图片
            BrandEntity brand = brandService.getById(sku.getBrandId());
            skuEsModel.setBrandName(brand.getName());
            skuEsModel.setBranImg(brand.getLogo());
            //设置检索属性
            CategoryEntity categoryEntity = categoryService.getById(sku.getCatalogId());
            skuEsModel.setCatelogName(categoryEntity.getName());
            skuEsModel.setAttrs(collect);
            //设置热度评分
            skuEsModel.setHotScore(0L);

            //远程调用,从库存系统查询是否有库存
            //在外面调用wareFeignService拿到结果集合
            if(finalStockMap == null){
                skuEsModel.setHasStock(true);
            }else{
                skuEsModel.setHasStock(finalStockMap.get(sku.getSkuId()));
            }


            return skuEsModel;
        }).collect(Collectors.toList());
        //发送给es
        R r = searchFeignService.productStatusUp(upProducts);
        if (r.getCode() == 0){
            baseMapper.updateSpuStatus(spuId, ProductConstant.StatusEnum.SPU_UP.getCode());
        }else{
            //TODO 接口幂等性?
        }

    }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值