开发流程如下: 开发需求,就像在线接口文档如下https://easydoc.net/s/78237135/ZUqEdvA4/OXTgKobR
这里一样, 别人告诉你需要什么功能,需要返回什么样的数据,你就通过接口的形式把他们呢实现出来即可!
商品新增vo抽取
设置完属性,点击保存之后取消保存,复制控制台输出
[在线JSON字符串转Java实体类(JavaBean、Entity)-BeJSON.com](https://www.bejson.com/json2javapojo/new/)
直接解析json数据封装成实体类
这里我简单截取一个主要的Vo
此Vo包括每个步骤所携带的数据,有的是单个字段有的是一个集合
逻辑不难,难点是要理清逻辑,注意细节!
@Data public class SpuSaveVo { @NotEmpty(groups = {AddGroup.class}) private String spuName; private String spuDescription; @NotEmpty(groups = {AddGroup.class}) private Long catalogId; @NotEmpty(groups = {AddGroup.class}) private Long brandId; private double weight; private int publishStatus; private List<String> decript; private List<String> images; private Bounds bounds; @NotEmpty(groups = {AddGroup.class}) private List<BaseAttrs> baseAttrs; @NotEmpty(groups = {AddGroup.class}) private List<Skus> skus; }
商品新增业务流程分析
逻辑很简单那,就是把
数据
保存到多张表
中因为这个
Vo
收集的数据很多,包括每个步骤你所选择的数据这个业务逻辑并不复杂,写这个逻辑之前我们一定要对每张表都非常熟悉,并且我们还要对它们之间的关系很清楚,因为下面的业务都是把数据保存到多张表中!
1.保存spu基本信息 pms_spu_info
因为所有传来的信息都在vo里,所以我们把信息拷贝到对应的实体类中,如果vo没有的那就可以自己赋值
表结构如下:
这里的infoEntity.setCreateTime(new Date());infoEntity.setUpdateTime(new Date());是因为前端传入的是没有这两个字段的,我们自己赋值即可
SpuInfoEntity infoEntity = new SpuInfoEntity(); BeanUtils.copyProperties(vo, infoEntity); infoEntity.setCreateTime(new Date()); infoEntity.setUpdateTime(new Date()); this.saveBaseInfo(infoEntity);
2.保存spu的描述图片 pms_spu_info_desc
保存哪个数据到哪个表,就注入那个service
String.join()的作用是把集合中的元素通过","分割形成一个一个的字符串
List<String> decript = vo.getDecript(); SpuInfoDescEntity descEntity = new SpuInfoDescEntity(); descEntity.setSpuId(infoEntity.getId()); descEntity.setDecript(String.join(",", decript)); spuInfoDescService.saveSpuInfoDesc(descEntity);
3.保存spu的图片集 pms_spu_images
从vo中获取所有图片集合 调用图片service进行保存,保存只需要两个点 图片id和url地址,传入对象即可
List<String> images = vo.getImages(); imagesService.saveImages(infoEntity.getId(), images);
4.保存spu的规格参数 pms_product_attr_value
从vo中获取所有规格参数集合 对规格参数集合进行遍历,设置每项的属性
List<BaseAttrs> baseAttrs = vo.getBaseAttrs(); List<ProductAttrValueEntity> collect = baseAttrs.stream().map((attr) -> { ProductAttrValueEntity valueEntity = new ProductAttrValueEntity(); valueEntity.setAttrId(attr.getAttrId()); AttrEntity id = attrService.getById(attr.getAttrId()); valueEntity.setAttrName(id.getAttrName()); valueEntity.setAttrValue(attr.getAttrValues()); valueEntity.setQuickShow(attr.getShowDesc()); valueEntity.setSpuId(infoEntity.getId()); return valueEntity; }).collect(Collectors.toList()); attrValueService.saveProductAttr(collect);
5.保存spu的积分信息 mall_sms -> sms_spu_bounds
保存积分信息,这里用到了另外一个微服务 其实就是调用另一个微服务的保存积分方法...
Bounds bounds = vo.getBounds(); SpuBoundTo spuBoundTo = new SpuBoundTo(); BeanUtils.copyProperties(bounds, spuBoundTo); spuBoundTo.setSpuId(infoEntity.getId()); R r0 = couponFeignService.saveSpuBounds(spuBoundTo); if (r0.getCode() != 0) { log.error("远程保存spu积分信息异常"); } couponFeignService.saveSpuBounds(spuBoundTo);