10.商品服务-新增商品
1.配置会员模块网关信息
网关配置
spring: cloud: gateway: routes: #商品的路由 #localhost:88/api/product/category/list/tree--->localhost:10000/product.... #优先级比下面的哪个路由要高所以要放在上面,不然会被截断 - id: product_route uri: lb://gulimall-product predicates: - Path=/api/product/** filters: - RewritePath=/api/(?<segment>.*),/$\{segment} #第三方路由配置 - id: third_party_route uri: lb://gulimall-third-party predicates: - Path=/api/thirdparty/** filters: - RewritePath=/api/thirdparty/(?<segment>.*),/$\{segment} #会员服务的路由 - id: member_route uri: lb://gulimall-member predicates: - Path=/api/member/** filters: #api前缀去掉剩下的全体保留 - RewritePath=/api/(?<segment>.*),/$\{segment} - id: admin_route #lb表示负载均衡 uri: lb://renren-fast #规定前端项目必须带有一个api前缀 #原来验证码的uri ...localhost:88/api/captcha.jpg #应该改成的uri ...localhost:88/renrenfast/captcha.jpg predicates: - Path=/api/** filters: - RewritePath=/api/(?<segment>.*),/renren-fast/$\{segment}
2.商品维护-发布商品-选择分类之后-显示选择品牌的内容
对应接口
@GetMapping("/brands/list") public R relationBrandList(@RequestParam(value="catId",required = true)Long catId){ List<BrandEntity> list=categoryBrandRelationService.getBrandsByCatId(catId);//提高方法的复用性 List<BrandVo> collect = list.stream().map((item) -> { BrandVo brandVo = new BrandVo(); // BeanUtils.copyProperties(item, brandVo);由于字段名不一样不可用 brandVo.setBrandId(item.getBrandId()); brandVo.setBrandName(item.getName()); return brandVo; }).collect(Collectors.toList()); return R.ok().put("data",collect); }
@Override public List<BrandEntity> getBrandsByCatId(Long catId) { List<CategoryBrandRelationEntity> relationEntities = this.list(new QueryWrapper<CategoryBrandRelationEntity>().eq("catelog_id", catId)); //前端这一块不需要判断为空,因为是直接点出来的 List<Long> collect = relationEntities.stream().map((item) -> { return item.getBrandId(); }).collect(Collectors.toList()); List<BrandEntity> list = brandDao.selectList(new QueryWrapper<BrandEntity>().in("brand_id", collect)); return list; }
3.显示发布商品中的规格参数内容+抽取vo
接口:
相应数据是分类下所有属性的分组+分组下所有的属性
创建product下的vo
public class AttrGroupWithAttrsVo { private static final long serialVersionUID = 1L; /** * 分组id */ @TableId private Long attrGroupId; /** * 组名 */ private String attrGroupName; /** * 排序 */ private Integer sort; /** * 描述 */ private String descript; /** * 组图标 */ private String icon; /** * 所属分类id */ private Long catelogId; //分组含有的所有属性 private List<AttrEntity> attrs; }
@GetMapping("/{catelogId}/withattr") public R getAttrGroupWithAttr(@PathVariable("catelogId") Long catelogId){ //1.查出当前分类下所有的属性分组 //2.查出每个分组的所有属性 List<AttrGroupWithAttrsVo> list=attrGroupService.getAttrGroupWithAttrsByCatlogId(catelogId); return R.ok().put("data",list); }
@Autowired AttrService attrService; @Override public List<AttrGroupWithAttrsVo> getAttrGroupWithAttrsByCatlogId(Long catelogId) { //根据分类id查询分组信息 List<AttrGroupEntity> attrGroupEntities = this.list(new QueryWrapper<AttrGroupEntity>().eq("catelog_id", catelogId)); //查询所有属性 List<AttrGroupWithAttrsVo> collect = attrGroupEntities.stream().map((group) -> { AttrGroupWithAttrsVo attrGroupWithAttrsVo = new AttrGroupWithAttrsVo(); BeanUtils.copyProperties(group, attrGroupWithAttrsVo); return attrGroupWithAttrsVo; }).peek((vo)->{ List<AttrEntity> relationAttrs = attrService.getRelationAttr(vo.getAttrGroupId());//运用之前写过的方法 vo.setAttrs(relationAttrs); }).collect(Collectors.toList()); return collect; }
抽取vo
4.保存所有的spu信息
@RequestMapping("/save") //@RequiresPermissions("product:spuinfo:save") public R save(@RequestBody SpuSaveVo vo){ spuInfoService.saveSpuInfoVo(vo); return R.ok(); }
4.1)保存基本信息(无远程调用)
@Transactional @Override public void saveSpuInfoVo(SpuSaveVo vo) { //1.保存spu基本的信息 spu_info SpuInfoEntity spuInfoEntity = new SpuInfoEntity(); BeanUtils.copyProperties(vo,spuInfoEntity); //设置一下两个名字不一样的值 spuInfoEntity.setCreateTime(new Date()); spuInfoEntity.setUpdateTime(new Date()); this.saveBaseSpuInfo(spuInfoEntity); //2.保存spu的描述 spu_info_desc List<String> description=vo.getDecript(); SpuInfoDescEntity spuInfoDescEntity = new SpuInfoDescEntity(); spuInfoDescEntity.setSpuId(spuInfoEntity.getId()); spuInfoDescEntity.setDecript(String.join(",",description));//集合转字符串 spuInfoDescService.saveSpuInfoDesc(spuInfoDescEntity); //3.保存spu的图片集 spu_images List<String> images=vo.getImages(); spuImagesService.saveImages(spuInfoEntity.getId(),images); //4.保存spu规格参数 product_attr_value List<BaseAttrs> baseAttrs = vo.getBaseAttrs(); List<ProductAttrValueEntity> collect = baseAttrs.stream().map(item -> { ProductAttrValueEntity productAttrValueEntity = new ProductAttrValueEntity(); productAttrValueEntity.setAttrId(item.getAttrId()); AttrEntity attrEntity = attrService.getById(item.getAttrId()); productAttrValueEntity.setAttrName(attrEntity.getAttrName()); productAttrValueEntity.setAttrValue(item.getAttrValues()); productAttrValueEntity.setQuickShow(item.getShowDesc()); productAttrValueEntity.setSpuId(spuInfoEntity.getId()); return productAttrValueEntity; }).collect(Collectors.toList()); productAttrValueService.saveProductAttr(collect); //以下是远程保存 //5.保存spu对应的所有sku信息 //5.1 sku的基本信息 sku_info List<Skus> skus= vo.getSkus(); if(skus!=null&&skus.size()>0){ skus.forEach(item->{ SkuInfoEntity skuInfoEntity = new SkuInfoEntity(); BeanUtils.copyProperties(item,skuInfoEntity); skuInfoEntity.setBrandId(spuInfoEntity.getBrandId()); skuInfoEntity.setCatalogId(spuInfoEntity.getCatalogId()); skuInfoEntity.setSaleCount(0L); skuInfoEntity.setSpuId(spuInfoEntity.getId()); //保存默认的图片 String defaultImg=""; for(Images images1:item.getImages()){ if(images1.getDefaultImg()==1){ defaultImg=images1.getImgUrl(); } } skuInfoEntity.setSkuDefaultImg(defaultImg); skuInfoService.saveSkuInfo(skuInfoEntity); //5.2 sku的图片信息 sku_image //处理图片集 List<SkuImagesEntity> imagesList = item.getImages().stream().map(img -> { SkuImagesEntity skuImagesEntity = new SkuImagesEntity(); skuImagesEntity.setSkuId(skuInfoEntity.getSkuId()); skuImagesEntity.setImgUrl(img.getImgUrl()); skuImagesEntity.setDefaultImg(img.getDefaultImg()); return skuImagesEntity; }).collect(Collectors.toList()); skuImagesService.saveBatch(imagesList);//其实早就可以用自己的方法进行保存了... //5.3 sku的销售属性值 sku_sale_attr_value List<Attr> attr = item.getAttr(); List<SkuSaleAttrValueEntity> skuSaleAttrValueEntityList = attr.stream().map(a -> { SkuSaleAttrValueEntity skuSaleAttrValueEntity = new SkuSaleAttrValueEntity(); BeanUtils.copyProperties(a, skuSaleAttrValueEntity); skuSaleAttrValueEntity.setSkuId(skuInfoEntity.getSkuId()); return skuSaleAttrValueEntity; }).collect(Collectors.toList()); skuSaleAttrValueService.saveBatch(skuSaleAttrValueEntityList); //以下的服务需要调用远程服务 //5.4 sku的满减优惠信息 gulimall_sms //6 保存spu的积分信息 sms_spu_bounds }); } }
里面调用了很多自定义的方法都没有必要,可以用现有的接口,给出一个稍有区别的
@Override public void saveImages(Long id, List<String> images) { if(images!=null&&images.size()!=0){ List<SpuImagesEntity> collect = images.stream().map(img -> { SpuImagesEntity spuImagesEntity = new SpuImagesEntity(); spuImagesEntity.setSpuId(id); spuImagesEntity.setImgUrl(img); return spuImagesEntity; }).collect(Collectors.toList()); this.saveBatch(collect); } }
4.2)调用远程服务
1.被调用的远程服务必须在注册中心上线
2.被调用的远程服务一定要开启服务的注册与发现功能
3.调用者声明一个远程服务
步骤:
由于有一些数据是需要a服务传给b服务,两个服务都要使用,所以我们把这些数据封装在gulimall-common的to包下,to名为数据传输对象
@Data public class SpuBoundTo { private Long spuId; private BigDecimal buyBounds; private BigDecimal growBounds;
开启Product远程服务调用
创建feign包下的接口
@FeignClient("gulimall-coupon") public interface CouponFeignService { /** * 1.@RequestBody将对象转为json * 2.找到coupon服务,给/coupon/spubounds/save发送请求,将上一步转的json对象放在请求体的位置发送请求 * 3.对方服务收到请求,收到的是请求体里的json数据,对方服务将json转成自己的对象,只要两者对象的属性名一一对应就可以封装 * 综上所属传递to接受为entity的行为也是可取的 */ @PostMapping("/coupon/spubounds/save") public R saveSpuBounds(@RequestBody SpuBoundTo spuBoundTo); }
与feign包接口对应的coupon的服务
/** * 保存 */ @PostMapping("/save") public R save(@RequestBody SpuBoundsEntity spuBounds){ spuBoundsService.save(spuBounds); return R.ok(); }
同样的我们创建满减信息的To,复制product服务里vo的skus里相关属性并且加上skuid,这个to需要memberprice我们同样从vo里复制过来
@Data public class SkuReductionTo { private Long skuId; private int fullCount; private BigDecimal discount; private int countStatus; /** * 满减价格 */ private BigDecimal fullPrice; private BigDecimal reducePrice; private int priceStatus; private List<MemberPrice> memberPrice; }
给出远程接口类代码:
@FeignClient("gulimall-coupon") public interface CouponFeignService { /** * 1.@RequestBody将对象转为json * 2.找到coupon服务,给/coupon/spubounds/save发送请求,将上一步转的json对象放在请求体的位置发送请求 * 3.对方服务收到请求,收到的是请求体里的json数据,对方服务将json转成自己的对象,只要两者对象的属性名一一对应就可以封装 * 综上所属传递to接受为entity的行为也是可取的 */ @PostMapping("/coupon/spubounds/save") public R saveSpuBounds(@RequestBody SpuBoundTo spuBoundTo); @PostMapping("coupon/skufullreduction/saveinfo") R saveSkuReduction(@RequestBody SkuReductionTo skuReductionTo); }
对于第二个方法,coupon里没有所以要我们自己去写
/** * 保存详情远程接口 */ @PostMapping("/saveinfo") //@RequiresPermissions("coupon:skufullreduction:list") public R saveInfo(@RequestBody SkuReductionTo skuReductionTo){ skuFullReductionService.saveSkuReduction(skuReductionTo); return R.ok(); }
在R里添加getCode方法来判断是否有异常
public Integer getCode(){ return Integer.parseInt((String) this.get("code")); }
@Override public void saveSkuReduction(SkuReductionTo skuReductionTo) { //1.保存优惠,会员价 SkuLadderEntity skuLadderEntity = new SkuLadderEntity(); skuLadderEntity.setSkuId(skuReductionTo.getSkuId()); skuLadderEntity.setFullCount(skuReductionTo.getFullCount()); skuLadderEntity.setDiscount(skuReductionTo.getDiscount()); skuLadderEntity.setAddOther(skuReductionTo.getCountStatus()); skuLadderService.save(skuLadderEntity); //2.sms_sku_full满减 SkuFullReductionEntity skuFullReductionEntity = new SkuFullReductionEntity(); BeanUtils.copyProperties(skuReductionTo,skuFullReductionEntity); this.save(skuFullReductionEntity); //3.member_price List<MemberPrice> memberPrice = skuReductionTo.getMemberPrice(); List<MemberPriceEntity> collect = memberPrice.stream().map(item -> { MemberPriceEntity memberPriceEntity = new MemberPriceEntity(); memberPriceEntity.setSkuId(skuReductionTo.getSkuId()); memberPriceEntity.setMemberLevelId(item.getId()); memberPriceEntity.setMemberLevelName(item.getName()); memberPriceEntity.setMemberPrice(item.getPrice()); memberPriceEntity.setAddOther(1); return memberPriceEntity; }).collect(Collectors.toList()); memberPriceService.saveBatch(collect); }
保存方法完整代码
@Transactional @Override public void saveSpuInfoVo(SpuSaveVo vo) { //1.保存spu基本的信息 spu_info SpuInfoEntity spuInfoEntity = new SpuInfoEntity(); BeanUtils.copyProperties(vo,spuInfoEntity); //设置一下两个名字不一样的值 spuInfoEntity.setCreateTime(new Date()); spuInfoEntity.setUpdateTime(new Date()); this.saveBaseSpuInfo(spuInfoEntity); //2.保存spu的描述 spu_info_desc List<String> description=vo.getDecript(); SpuInfoDescEntity spuInfoDescEntity = new SpuInfoDescEntity(); spuInfoDescEntity.setSpuId(spuInfoEntity.getId()); spuInfoDescEntity.setDecript(String.join(",",description));//集合转字符串 spuInfoDescService.saveSpuInfoDesc(spuInfoDescEntity); //3.保存spu的图片集 spu_images List<String> images=vo.getImages(); spuImagesService.saveImages(spuInfoEntity.getId(),images); //4.保存spu规格参数 product_attr_value List<BaseAttrs> baseAttrs = vo.getBaseAttrs(); List<ProductAttrValueEntity> collect = baseAttrs.stream().map(item -> { ProductAttrValueEntity productAttrValueEntity = new ProductAttrValueEntity(); productAttrValueEntity.setAttrId(item.getAttrId()); AttrEntity attrEntity = attrService.getById(item.getAttrId()); productAttrValueEntity.setAttrName(attrEntity.getAttrName()); productAttrValueEntity.setAttrValue(item.getAttrValues()); productAttrValueEntity.setQuickShow(item.getShowDesc()); productAttrValueEntity.setSpuId(spuInfoEntity.getId()); return productAttrValueEntity; }).collect(Collectors.toList()); productAttrValueService.saveProductAttr(collect); //以下是远程保存 //5.保存spu对应的所有sku信息 //5.1 sku的基本信息 sku_info List<Skus> skus= vo.getSkus(); if(skus!=null&&skus.size()>0){ skus.forEach(item->{ SkuInfoEntity skuInfoEntity = new SkuInfoEntity(); BeanUtils.copyProperties(item,skuInfoEntity); skuInfoEntity.setBrandId(spuInfoEntity.getBrandId()); skuInfoEntity.setCatalogId(spuInfoEntity.getCatalogId()); skuInfoEntity.setSaleCount(0L); skuInfoEntity.setSpuId(spuInfoEntity.getId()); //保存默认的图片 String defaultImg=""; for(Images images1:item.getImages()){ if(images1.getDefaultImg()==1){ defaultImg=images1.getImgUrl(); } } skuInfoEntity.setSkuDefaultImg(defaultImg); skuInfoService.saveSkuInfo(skuInfoEntity); //5.2 sku的图片信息 sku_image //处理图片集 List<SkuImagesEntity> imagesList = item.getImages().stream().map(img -> { SkuImagesEntity skuImagesEntity = new SkuImagesEntity(); skuImagesEntity.setSkuId(skuInfoEntity.getSkuId()); skuImagesEntity.setImgUrl(img.getImgUrl()); skuImagesEntity.setDefaultImg(img.getDefaultImg()); return skuImagesEntity; }).collect(Collectors.toList()); skuImagesService.saveBatch(imagesList);//其实早就可以用自己的方法进行保存了... //5.3 sku的销售属性值 sku_sale_attr_value List<Attr> attr = item.getAttr(); List<SkuSaleAttrValueEntity> skuSaleAttrValueEntityList = attr.stream().map(a -> { SkuSaleAttrValueEntity skuSaleAttrValueEntity = new SkuSaleAttrValueEntity(); BeanUtils.copyProperties(a, skuSaleAttrValueEntity); skuSaleAttrValueEntity.setSkuId(skuInfoEntity.getSkuId()); return skuSaleAttrValueEntity; }).collect(Collectors.toList()); skuSaleAttrValueService.saveBatch(skuSaleAttrValueEntityList); //以下的服务需要调用远程服务 //5.4 sku的满减优惠信息 gulimall_sms-》sms_spu_bounds SkuReductionTo skuReductionTo=new SkuReductionTo(); BeanUtils.copyProperties(item,skuReductionTo); skuReductionTo.setSkuId(skuInfoEntity.getSkuId()); R r1 = couponFeignService.saveSkuReduction(skuReductionTo); //判断异常 if(r1.getCode()!=0){ log.error("远程保存spu优惠信息失败"); } //6 保存spu的积分信息 sms_spu_bounds Bounds bounds = vo.getBounds(); SpuBoundTo spuBoundTo = new SpuBoundTo(); BeanUtils.copyProperties(bounds,spuBoundTo); spuBoundTo.setSpuId(skuInfoEntity.getSkuId()); R r = couponFeignService.saveSpuBounds(spuBoundTo); //判断异常 if(r.getCode()!=0){ log.error("远程保存spu积分信息失败"); } }); } }
4.3)测试阶段:
右上角服务,Edit Configurations-》+ -》compound可以便捷整理一组服务的重启
设置内存最大占用
因为我们设置了事务,所以不能逐步查看数据库的信息了,我们修改一下数据库的行为
查看第一个数据库是否正确读入
spu_info没有出问题
继续走发现抛出了异常
我们直接放行完代码
异常抛出的原因是因为,我们在建立pms_spu_info_desc这张表的时候,虽然指定了主键是spu_id,但是我们没有指定他自增,但是mybatis默认当成是自增的
重启product项目使用debug模式发现spu_info_desc保存成功了
继续走图片集也保存成功
可以看到后续product_attr_value也保存成功
然后在这里又抛了一个异常
修改common里的代码如下
public Integer getCode(){ return (Integer) this.get("code"); }
5.商品保存的细节优化
代码:
@Override public void saveSkuReduction(SkuReductionTo skuReductionTo) { //1.保存优惠,会员价 SkuLadderEntity skuLadderEntity = new SkuLadderEntity(); skuLadderEntity.setSkuId(skuReductionTo.getSkuId()); skuLadderEntity.setFullCount(skuReductionTo.getFullCount()); skuLadderEntity.setDiscount(skuReductionTo.getDiscount()); skuLadderEntity.setAddOther(skuReductionTo.getCountStatus()); if(skuReductionTo.getFullCount()>0){ skuLadderService.save(skuLadderEntity); } //2.sms_sku_full满减 SkuFullReductionEntity skuFullReductionEntity = new SkuFullReductionEntity(); BeanUtils.copyProperties(skuReductionTo,skuFullReductionEntity); if(skuReductionTo.getFullPrice().compareTo(new BigDecimal("0"))==1){ this.save(skuFullReductionEntity); } //3.member_price List<MemberPrice> memberPrice = skuReductionTo.getMemberPrice(); List<MemberPriceEntity> collect = memberPrice.stream().map(item -> { MemberPriceEntity memberPriceEntity = new MemberPriceEntity(); memberPriceEntity.setSkuId(skuReductionTo.getSkuId()); memberPriceEntity.setMemberLevelId(item.getId()); memberPriceEntity.setMemberLevelName(item.getName()); memberPriceEntity.setMemberPrice(item.getPrice()); memberPriceEntity.setAddOther(1); return memberPriceEntity; }).filter(item->{ //接受大于0的值才去保存 return item.getMemberPrice().compareTo(new BigDecimal("0"))==1; }).collect(Collectors.toList()); memberPriceService.saveBatch(collect); }
@Transactional @Override public void saveSpuInfoVo(SpuSaveVo vo) { //1.保存spu基本的信息 spu_info SpuInfoEntity spuInfoEntity = new SpuInfoEntity(); BeanUtils.copyProperties(vo,spuInfoEntity); //设置一下两个名字不一样的值 spuInfoEntity.setCreateTime(new Date()); spuInfoEntity.setUpdateTime(new Date()); this.saveBaseSpuInfo(spuInfoEntity); //2.保存spu的描述 spu_info_desc List<String> description=vo.getDecript(); SpuInfoDescEntity spuInfoDescEntity = new SpuInfoDescEntity(); spuInfoDescEntity.setSpuId(spuInfoEntity.getId()); spuInfoDescEntity.setDecript(String.join(",",description));//集合转字符串 spuInfoDescService.saveSpuInfoDesc(spuInfoDescEntity); //3.保存spu的图片集 spu_images List<String> images=vo.getImages(); spuImagesService.saveImages(spuInfoEntity.getId(),images); //4.保存spu规格参数 product_attr_value List<BaseAttrs> baseAttrs = vo.getBaseAttrs(); List<ProductAttrValueEntity> collect = baseAttrs.stream().map(item -> { ProductAttrValueEntity productAttrValueEntity = new ProductAttrValueEntity(); productAttrValueEntity.setAttrId(item.getAttrId()); AttrEntity attrEntity = attrService.getById(item.getAttrId()); productAttrValueEntity.setAttrName(attrEntity.getAttrName()); productAttrValueEntity.setAttrValue(item.getAttrValues()); productAttrValueEntity.setQuickShow(item.getShowDesc()); productAttrValueEntity.setSpuId(spuInfoEntity.getId()); return productAttrValueEntity; }).collect(Collectors.toList()); productAttrValueService.saveProductAttr(collect); //以下是远程保存 //5.保存spu对应的所有sku信息 //5.1 sku的基本信息 sku_info List<Skus> skus= vo.getSkus(); if(skus!=null&&skus.size()>0){ skus.forEach(item->{ SkuInfoEntity skuInfoEntity = new SkuInfoEntity(); BeanUtils.copyProperties(item,skuInfoEntity); skuInfoEntity.setBrandId(spuInfoEntity.getBrandId()); skuInfoEntity.setCatalogId(spuInfoEntity.getCatalogId()); skuInfoEntity.setSaleCount(0L); skuInfoEntity.setSpuId(spuInfoEntity.getId()); //保存默认的图片 String defaultImg=""; for(Images images1:item.getImages()){ if(images1.getDefaultImg()==1){ defaultImg=images1.getImgUrl(); } } skuInfoEntity.setSkuDefaultImg(defaultImg); skuInfoService.saveSkuInfo(skuInfoEntity); //5.2 sku的图片信息 sku_image //处理图片集 List<SkuImagesEntity> imagesList = item.getImages().stream().map(img -> { SkuImagesEntity skuImagesEntity = new SkuImagesEntity(); skuImagesEntity.setSkuId(skuInfoEntity.getSkuId()); skuImagesEntity.setImgUrl(img.getImgUrl()); skuImagesEntity.setDefaultImg(img.getDefaultImg()); return skuImagesEntity; //没有图片的路径不需要保存 }).filter(entity->{ //返回true就是需要,false就是剔除 return !StringUtils.isEmpty(entity.getImgUrl()); }).collect(Collectors.toList()); skuImagesService.saveBatch(imagesList);//其实早就可以用自己的方法进行保存了... //5.3 sku的销售属性值 sku_sale_attr_value List<Attr> attr = item.getAttr(); List<SkuSaleAttrValueEntity> skuSaleAttrValueEntityList = attr.stream().map(a -> { SkuSaleAttrValueEntity skuSaleAttrValueEntity = new SkuSaleAttrValueEntity(); BeanUtils.copyProperties(a, skuSaleAttrValueEntity); skuSaleAttrValueEntity.setSkuId(skuInfoEntity.getSkuId()); return skuSaleAttrValueEntity; }).collect(Collectors.toList()); skuSaleAttrValueService.saveBatch(skuSaleAttrValueEntityList); //以下的服务需要调用远程服务 //5.4 sku的满减优惠信息 gulimall_sms-》sms_spu_bounds SkuReductionTo skuReductionTo=new SkuReductionTo(); BeanUtils.copyProperties(item,skuReductionTo); skuReductionTo.setSkuId(skuInfoEntity.getSkuId()); //满0减0并且同时没有优惠是没有意义的所以直接剔除 bigDecimal比较大小 比0大就返回1 相等返回0 否则是-1 if(skuReductionTo.getFullCount()>0||skuReductionTo.getFullPrice().compareTo(new BigDecimal("0"))==1){ R r1 = couponFeignService.saveSkuReduction(skuReductionTo); //判断异常 if(r1.getCode()!=0){ log.error("远程保存spu优惠信息失败"); } } //6 保存spu的积分信息 sms_spu_bounds Bounds bounds = vo.getBounds(); SpuBoundTo spuBoundTo = new SpuBoundTo(); BeanUtils.copyProperties(bounds,spuBoundTo); spuBoundTo.setSpuId(skuInfoEntity.getSkuId()); R r = couponFeignService.saveSpuBounds(spuBoundTo); //判断异常 if(r.getCode()!=0){ log.error("远程保存spu积分信息失败"); } }); } }