gulimail集成 elasticsearch 并进行商品上架与查询

gulimail集成 elasticsearch 并进行商品上架与查询
摘要由CSDN通过智能技术生成

注: 没怎么仔细测试bug,可能代码有很多问题(大体没啥问题)

gulimail 连接  Java项目《谷粒商城》Java架构师 | 微服务 | 大型电商项目_哔哩哔哩_bilibili

上架:

controller 层

    @PostMapping("/{spuId}/up")
    /*@RequiresPermissions("product:spuinfodesc:list")*/
    public R spuUp(@PathVariable("spuId")Long spuId){
        spuInfoService.up(spuId);

        return R.ok();
    }

注:spu类似于 华为手机;sku类似于一个具体型号  pro 蓝色4+36的

entity层


@Data
public class SkuEsModel {

    private Long skuId;

    private Long spuId;

    private String skuTitle; //商品标题

    private BigDecimal skuPrice;//商品价格

    private String skuImg;   //商品图片

    private Long saleCount;// 销量

    private Boolean hasStock;  //是否上架。首页只需要知道是否有没有货就行。不需要知道还有多少

    private Long hotScore;  //热度评分

    private Long brandId;  //商品品牌id



    private String brandName;//商品品牌名

    private String brandImg;
    private Long catalogId;  // 商品所属分类id

    private String catalogName;// 商品所属分类名

    private List<Attrs> attrs;


    @Data
    public static class Attrs{

        private Long attrId;
        private String attrName; ;//属性名 类似于颜色,内存等
        private String attrValue;// 属性值
    }

}

service 层(接口实现类)

 

    @Override
    public void up(Long spuId) {
        List<SkuInfoEntity> skuInfoEntities=
               skuInfoService.getSkusBySpuId(spuId);
        List<Long> collect = skuInfoEntities.stream().map(SkuInfoEntity::getSkuId).collect(Collectors.toList());
        //TODO 查询允许被检索的属性 (spu)
        //获取spu属性值
        List<ProductAttrValueEntity> productAttrValueEntities = attrValueService.list(new QueryWrapper<ProductAttrValueEntity>().eq("spu_id", spuId));
        // 得到  spu 属性id 集合
        List<Long> attrIds = productAttrValueEntities.stream().map(attr -> {
            return attr.getAttrId();
        }).collect(Collectors.toList());
        //根据 spu 属性id 集合  查询    允许被es检索的属性
        List<Long> searchIds=attrService.selectSearchAttrIds(attrIds);
        // 根据被查出   允许被检索到的属性id  查出属性值值并赋值 给 SkuEsModel.Attrs
        Set<Long> set=new HashSet(searchIds);
        List<SkuEsModel.Attrs> attrs = productAttrValueEntities.stream().filter(attr -> {
            return set.contains(attr.getAttrId());
        }).map(item -> {
            SkuEsModel.Attrs attr = new SkuEsModel.Attrs();
            BeanUtils.copyProperties(item, attr);
            return attr;
        }).collect(Collectors.toList());
        List<SkuEsModel.Attrs> a =new ArrayList<>();
        Map<Long, Boolean> mp =null;
        try {
            //远程查询库存
            R skuHasStockMe = wareFeignService.getSkuHasStockMe(collect);
            TypeReference<Map<Long,Boolean>> typeReference=new TypeReference<Map<Long,Boolean>>(){};
            mp =  skuHasStockMe.getData(typeReference);
        }catch (Exception e){
            log.error("库存服务调用异常:   ",e);
        }
        //2、封装每个sku的信息
        Map<Long, Boolean> finalStockMap = mp;
        List<SkuEsModel> skuEsModels = skuInfoEntities.stream().map(sku -> {
            // TODO 查询允许被检索的属性 (sku)
            SkuEsModel skuEsModel = new SkuEsModel();
            BeanUtils.copyProperties(sku, skuEsModel);
            skuEsModel.setSkuPrice(sku.getPrice());
            skuEsModel.setSkuImg(sku.getSkuDefaultImg());
            //TODO 2、热度评分。0
            skuEsModel.setHotScore(0L);
            //TODO 3、查询品牌和分类的名字信息
            BrandEntity brandEntity = brandService.getById(sku.getBrandId());
            skuEsModel.setBrandName(brandEntity.getName());
            skuEsModel.setBrandImg(brandEntity.getLogo());
            CategoryEntity categoryEntity = categoryService.getById(sku.getCatalogId());
            skuEsModel.setCatalogName(categoryEntity.getName());
            //设置可搜索属性  List<Attrs>
            skuEsModel.setAttrs(attrs);
            skuEsModel.setHasStock(finalStockMap==null?false:finalStockMap.get(sku.getSkuId()));
            return skuEsModel;
        }).collect(Collectors.toList());
        // 将查询到的属性赋值给es
        R r = esFeignService.productStatusUp(skuEsModels);
        //获取是否调用成功
        Integer code =(Integer) r.get("code");
        if(code!=null && code==0){
          //TODO 远程调用成功
            // 修改上架状态
            baseMapper.updateSpuStatus(spuId, ProductConstant.StatusEnum.SPU_UP.getCode());
        }else {
             // TODO 远程调用方失败
        }

    }

商品上架至es

使用spirng cloud feign调用es 模块进行上传(这里不细说)

controller 层

    @PostMapping("/product")
     public R productStatusUp(@RequestBody  List<SkuEsModel> skuEsModelS){
        try {
            productSaveService.productStatusUp(skuEsModelS);
        } catch (IOException e) {
            e.printStackTrace();
            log.error("商品上架错误",e);
            return  R.error( BizCodeEnume.PRODUCT_UP_EXCEPTION.getCode(),BizCodeEnume.PRODUCT_UP_EXCEPTION.getMsg());
        }
        return  R.ok();
     }

servcie层(实现类)

    @Autowired
    RestHighLevelClient restHighLevelClient;
    @Value("${es.product.i
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值