开发流程如下: 开发需求,就像在线接口文档如下https://easydoc.net/s/78237135/ZUqEdvA4/OXTgKobR
这里一样, 别人告诉你需要什么功能,需要返回什么样的数据,你就通过接口的形式把他们呢实现出来即可!
6.保存当前spu对应的所有sku信息
做完以上逻辑做完之后就可以开始对数据进行保存了,也就是
sku的基本信息
sku图片信息
sku的销售属性
sku的优惠满减信息(跨服务);
6.1sku的基本信息;pms_sku_info
这里主要添加vo中没有的信息
List<Skus> skus = vo.getSkus(); if (skus != null && skus.size() > 0) { skus.forEach(item -> { String defalutImg = ""; for (Images image : item.getImages()) { if (image.getDefaultImg() == 1) { defalutImg = image.getImgUrl(); } } SkuInfoEntity skuInfoEntity = new SkuInfoEntity(); BeanUtils.copyProperties(item, skuInfoEntity); //添加vo中没有的信息 skuInfoEntity.setBrandId(infoEntity.getBrandId()); skuInfoEntity.setCatalogId(infoEntity.getCatalogId()); skuInfoEntity.setSaleCount(0L); skuInfoEntity.setSpuId(infoEntity.getId()); skuInfoEntity.setSkuDefaultImg(defalutImg); skuInfoService.saveSkuInfo(skuInfoEntity);
6.2sku图片信息;pms_sku_images
对于图片呢,只需要保存它的url地址即可
当然对于没有图片路径的就无需进行保存了!
//没有图片路径的无需保存 Long skuId = skuInfoEntity.getSkuId(); List<SkuImagesEntity> imageEntities = item.getImages().stream().map(img -> { SkuImagesEntity skuImagesEntity = new SkuImagesEntity(); skuImagesEntity.setSkuId(skuId); skuImagesEntity.setImgUrl(img.getImgUrl()); skuImagesEntity.setDefaultImg(img.getDefaultImg()); return skuImagesEntity; }).filter(entity -> { return !StringUtils.isEmpty(entity.getImgUrl()); }).collect(Collectors.toList()); skuImagesService.saveBatch(imageEntities);
6.3sku的销售属性;pms_sku_sale_attr_value
sku的销售属性就很常规的操作,获得集合后,给集合中的每一项赋值
List<Attr> attr = item.getAttr(); List<SkuSaleAttrValueEntity> skuSaleAttrValueEntities = attr.stream().map(a -> { SkuSaleAttrValueEntity attrValueEntity = new SkuSaleAttrValueEntity(); BeanUtils.copyProperties(a, attrValueEntity); attrValueEntity.setSkuId(skuId); return attrValueEntity; }).collect(Collectors.toList()); skuSaleAttrValueService.saveBatch(skuSaleAttrValueEntities);
6.4sku的优惠满减信息(跨服务);
通过OpenFeign来远程调用另一个微服务,写feign接口的形式来实现接口的远程调用!
SkuReductionTo skuReductionTo = new SkuReductionTo(); BeanUtils.copyProperties(item, skuReductionTo); skuReductionTo.setSkuId(skuId); if (skuReductionTo.getFullCount() > 0 || skuReductionTo.getFullPrice().compareTo(new BigDecimal("0")) == 1) { R r1 = couponFeignService.saveSkuReduction(skuReductionTo); if (r1.getCode() != 0) { log.error("远程保存spu积分信息异常"); } } }); }
测试
查看数据库变化,如果又报错看控制台输出即可排错!
检索功能
也就是多条件分页查询,很常见的功能! 检索功能,一半就是多条件加上分页
套路都是一样的 都是这种形式...
先创建wrapper构建条件 QueryWrapper queryWrapper = new QueryWrapper<>();
获取这个条件 String key = (String) params.get("key");
判断有没有获取到 if (!StringUtils.isEmpty(key)) {
获取到了就加进条件 queryWrapper.and((w) -> {
这里是一个条件匹配两个字段 w.eq("id", key).or().like("spu_name", key); }); }
后面的都是类似
String status = (String) params.get("status"); if (!StringUtils.isEmpty(status)) { queryWrapper.eq("publish_status", status); }
String brandId = (String) params.get("brandId"); if (!StringUtils.isEmpty(brandId) && !"0".equalsIgnoreCase(brandId)) { queryWrapper.eq("brand_id", brandId); }
spu检索
controller
/** * 列表 */ @RequestMapping("/list") public R list(@RequestParam Map<String, Object> params){ PageUtils page = spuInfoService.queryPageByCondition(params); return R.ok().put("page", page); }
service
@Override public PageUtils queryPageByCondition(Map<String, Object> params) { QueryWrapper<SpuInfoEntity> queryWrapper = new QueryWrapper<>(); String key = (String) params.get("key"); if (!StringUtils.isEmpty(key)) { //等价sql: status=1 and (id=1 or spu_name like xxx) queryWrapper.and((w) -> { w.eq("id", key).or().like("spu_name", key); }); } String status = (String) params.get("status"); if (!StringUtils.isEmpty(status)) { queryWrapper.eq("publish_status", status); } String brandId = (String) params.get("brandId"); if (!StringUtils.isEmpty(brandId) && !"0".equalsIgnoreCase(brandId)) { queryWrapper.eq("brand_id", brandId); } String catelogId = (String) params.get("catelogId"); if (!StringUtils.isEmpty(catelogId) && !"0".equalsIgnoreCase(catelogId)) { queryWrapper.eq("catalog_id", catelogId); } IPage<SpuInfoEntity> page = this.page( new Query<SpuInfoEntity>().getPage(params), queryWrapper ); return new PageUtils(page); }