第二十三章第二节:解决保存商品信息时的问题

1、保存spu的产品介绍图片异常


解决:
修改SpuInfoDescEntity实体类的spuId为非自增长
com.applesnt.onlinemall.product.entity.SpuInfoDescEntity

	/**
	 * 商品id
	 * type= IdType.INPUT:不是自增长
	 */
	@TableId(type= IdType.INPUT)
	private Long spuId;

2、远程调用onlinemall-coupon的服务超时

异常信息:Read timed out executing POST http://onlinemall-coupon/coupon/spubounds/save,异常类型是:class feign.RetryableException

解决:
修改配置文件,配置超时时间
onlinemall-product\src\main\resources\application.yml

#ribbon的超时时间
ribbon:
  ReadTimeout: 30000
  ConnectTimeout: 30000

3、sku保存时,没有选中的图片也保存了,导致数据库img_url为空,保存时需要过滤掉这些数据


解决:
com.applesnt.onlinemall.product.service.impl.SpuInfoServiceImpl

    //6.2、保存sku的图片信息 pms_sku_images
    List<SkuImagesEntity> collect1 = item.getImages().stream().map(img -> {
        SkuImagesEntity skuImagesEntity = new SkuImagesEntity();
        skuImagesEntity.setSkuId(skuId);
        skuImagesEntity.setImgUrl(img.getImgUrl());
        skuImagesEntity.setDefaultImg(img.getDefaultImg());
        return skuImagesEntity;
    }).filter(entity->{
        /*过滤,只有imgurl有值 返回true进行封装,返回false过滤掉*/
        return !StringUtils.isEmpty(entity.getImgUrl());
    }).collect(Collectors.toList());

4、sku保存时,过滤掉无效的满减和打折信息


解决:
com.applesnt.onlinemall.product.service.impl.SpuInfoServiceImpl

      //6.4、保存sku的优惠满减信息(远程调用服务)mall_sms-》sms_sku_ladder/sms_sku_full_reduction/sms_member_price
      /*
      *1:在common中创建TO SkuReductionTo、MemberPrice
      *2:编写远程调用的接口saveSkuReduction
      * 3:编写被调用的saveInfo 满减信息保存业务方法
      * */
      SkuReductionTo skuReductionTo = new SkuReductionTo();
      //数据对拷
      BeanUtils.copyProperties(item,skuReductionTo);
      //设置skuId
      skuReductionTo.setSkuId(skuId);
      /*
      * 如果sku的满减信息为空,咋不远程调用满减的保存服务
      * skuReductionTo.getFullPrice().compareTo(new BigDecimal("0"))==1 :BigDecimal类型的对比
      * -1:表示当前值比0小,0:表示当前值等于0,1:表示当前值比0大
      * */
      if(skuReductionTo.getFullCount()>0 || skuReductionTo.getFullPrice().compareTo(new BigDecimal("0"))==1){
          R r2= couponFeignService.saveSkuReduction(skuReductionTo);
          System.out.println("sku的优惠满减信息:"+r2);
      }

com.applesnt.onlinemall.coupon.service.impl.SkuFullReductionServiceImpl


@Override
    public void saveSkuReduction(SkuReductionTo skuReductionTo) {
        //保存sku的优惠满减信息mall_sms-》sms_sku_ladder/sms_sku_full_reduction/sms_member_price
        //保存sms_sku_ladder信息
        SkuLadderEntity skuLadderEntity = new SkuLadderEntity();
        BeanUtils.copyProperties(skuReductionTo,skuLadderEntity);
        /*判断满几件打几折的信息不为空时 才保存*/
        if(skuReductionTo.getFullCount()>0){
            skuLadderService.save(skuLadderEntity);
        }

        //保存sms_sku_full_reduction信息
        SkuFullReductionEntity skuFullReductionEntity = new SkuFullReductionEntity();
        BeanUtils.copyProperties(skuReductionTo,skuFullReductionEntity);
        /*判断满多少钱减多少钱的信息不为空时,才保存*/
        if(skuReductionTo.getFullPrice().compareTo(new BigDecimal("0"))==1){
            this.save(skuFullReductionEntity);
        }

        //保存sms_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 才会返回true进行封装 否则过滤掉*/
            return item.getMemberPrice().compareTo(new BigDecimal("0"))==1;
        }).collect(Collectors.toList());

        memberPriceService.saveBatch(collect);
    }
posted @ 2021-07-10 20:53  努力的校长  阅读(176)  评论(0)    收藏  举报