携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第23天,点击查看活动详情
开发流程如下: 开发需求,就像在线接口文档如下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);
}