一、前置工作

1.1. 将gulimall-member注册到nacos

spring:cloud:nacos:discovery:server-addr: 127.0.0.1:8848application:name: gulimall-member

1.2. @EnableDiscoveryClient开启服务注册功能

1.3. 网关配置路由关系

二、完善接口

2.1. 获取分类关联的品牌

2.2. 开发顺序

  • Controller:处理请求,接受和校验数据
  • Service接受controller传来的数据,进行业务处理
  • Controller接受Service处理完的数据,封装页面指定的vo

2.3. 获取分类下所有分组&关联属性

2.4. 商品新增

2.4.1. 逆向生成vo

将添加的数据在https://www.json.cn/json/json2java.html可以生成对应JavaBean,放到vo文件夹中,最为数据传递承载。

注意:生成的数据中,涉及小数的数据double类型改为BigDecimal

2.4.2. 保存spu基本信息

对应数据表:pms_spu_info

SpuInfoEntity infoEntity = new SpuInfoEntity();
BeanUtils.copyProperties(vo, infoEntity);
infoEntity.setCreateTime(new Date());
infoEntity.setUpdateTime(new Date());
this.saveBaseSpuInfo(infoEntity);

2.4.3. 保存Spu的描述图片

对应数据表:pms_spu_info_desc

List<String> decript = vo.getDecript();
SpuInfoDescEntity descEntity = new SpuInfoDescEntity();
descEntity.setSpuId(infoEntity.getId());
descEntity.setDecript(String.join(",", decript));
spuInfoDescService.saveSpuInfoDesc(descEntity);

2.4.4. 保存spu的图片集

对应数据表:pms_spu_images

List<String> images = vo.getImages();
imagesService.saveImages(infoEntity.getId(), images);

2.4.5. 保存spu的规格参数

对应数据表:pms_product_attr_value

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);

2.4.6. 保存spu的积分信息

对应数据表:gulimall_sms->sms_spu_bounds

Bounds bounds = vo.getBounds();
SpuBoundTo spuBoundTo = new SpuBoundTo();
BeanUtils.copyProperties(bounds, spuBoundTo);
spuBoundTo.setSpuId(infoEntity.getId());
R r = couponFeignService.saveSpuBounds(spuBoundTo);
if (r.getCode() != 0) {log.error("远程保存spu积分信息失败");
}

2.4.7. 保存当前spu对应的所有sku信息

2.4.7.1. sku的基本信息

对应数据表:pms_sku_info

2.4.7.2. sku的图片信息

对应数据表:pms_sku_image

2.4.7.3. sku的销售属性信息

对应数据表:pms_sku_sale_attr_value

2.4.7.4. sku的优惠、满减等信息

对应数据表:gulimall_sms->sms_sku_ladder\sms_sku_full_reduction\sms_member_price

List<Skus> skus = vo.getSkus();
if (skus != null && skus.size() > 0) {skus.forEach(item -> {String defaultImg = "";for (Images image : item.getImages()) {if (image.getDefaultImg() == 1) {defaultImg = image.getImgUrl();}}SkuInfoEntity skuInfoEntity = new SkuInfoEntity();BeanUtils.copyProperties(item, skuInfoEntity);skuInfoEntity.setBrandId(infoEntity.getBrandId());skuInfoEntity.setCatalogId(infoEntity.getCatalogId());skuInfoEntity.setSaleCount(0L);skuInfoEntity.setSpuId(infoEntity.getId());skuInfoEntity.setSkuDefaultImg(defaultImg);//7.1)、sku的基本信息;pms_sku_infoskuInfoService.saveSkuInfo(skuInfoEntity);Long skuId = skuInfoEntity.getSkuId();List<SkuImagesEntity> imagesEntities = item.getImages().stream().map(img -> {SkuImagesEntity skuImagesEntity = new SkuImagesEntity();skuImagesEntity.setSkuId(skuId);skuImagesEntity.setImgUrl(img.getImgUrl());skuImagesEntity.setDefaultImg(img.getDefaultImg());return skuImagesEntity;}).filter(entity -> {//返回true就是需要,false就是剔除return !StringUtils.isEmpty(entity.getImgUrl());}).collect(Collectors.toList());//7.2)、sku的图片信息;pms_sku_imageskuImagesService.saveBatch(imagesEntities);//TODO 没有图片路径的无需保存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());//7.3)、sku的销售属性信息:pms_sku_sale_attr_valueskuSaleAttrValueService.saveBatch(skuSaleAttrValueEntities);//7.4)、sku的优惠、满减等信息;gulimall_sms->sms_sku_ladder\sms_sku_full_reduction\sms_member_priceSkuReductionTo 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("远程保存sku优惠信息失败");}}});
}

2.4.8. 调用远程服务

注意:

  1. 远程服务必须上线,放到注册中心在
  2. 远程服务必须要开启服务发现和服务注册功能
  3. 调用者只要在注册中心中,调用正确接口即可

2.4.8.1. 将所有需要远程调用的接口放在feign包中

2.4.8.2. 使用@FeignClient声明调用远程服务名称

@FeignClient("gulimall-coupon")

2.4.8.3. 调用者使用@EnableFeignClients确定远程调用包位置

@EnableFeignClients(basePackages = "com.atguigu.gulimall.product.feign")

2.4.8.4. 注入远程调用Service

@Autowired
CouponFeignService couponFeignService;

2.4.8.5. 使用PostMapping指定远程调用地址

/*** 1、CouponFeignService.saveSpuBounds(spuBoundTo);* 1)、@RequestBody将这个对象转为json。* 2)、找到gulimall-coupon服务,给/coupon/spubounds/save发送请求。* 将上一步转的json放在请求体位置,发送请求;* 3)、对方服务收到请求。请求体里有json数据。* (@RequestBody SpuBoundsEntity spuBounds);将请求体的json转为SpuBoundsEntity;* 只要json数据模型是兼容的。双方服务无需使用同一个to** @param spuBoundTo* @return*/
@PostMapping("/coupon/spubounds/save")
R saveSpuBounds(@RequestBody SpuBoundTo spuBoundTo);

2.4.8.6. 使用@RequestBody注解将参数作为请求体传递

@PostMapping("/coupon/skufullreduction/saveinfo")
R saveSkuReduction(@RequestBody SkuReductionTo skuReductionTo);

2.4.9. 注意

  1. @TableId

    如果数据库字段设成user_id
    在初始生成后,在代码中会变成userId,不会设置成主键
    使用**@TableId(value=“user_id”,type = IdType.AUTO)**注解

    “value”:设置数据库字段值
    “type”:设置主键类型、如果数据库主键设置了自增建议使用“AUTO”

    type有六种类型类型,最下面三个只有插入主键为空时,才会自动填充

    类型 解释
    AUTO 数据库自增ID
    NONE 数据库未设置主键类型(将会跟随全局)
    INPUT 用户输入ID(该类型可以通过自己注册自动填充插件进行填充)
    ID_WORKER 全局唯一ID (idWorker)
    UUID 全局唯一ID(UUID)
    ID_WORKER_STR 字符串全局唯一ID(idWorker 的字符串表示)

2.4.10. SPU检索

2.4.11. SKU检索

2.5. 项目时间格式化

application.yml中配置jacksondate-format

spring:jackson:date-format: yyyy-MM-dd HH:mm:ss

谷粒商城:11.商品服务 — 新增商品相关推荐

  1. 谷粒商城P85问题记录—发布商品时规格参数不显示-2022/4/8

    谷粒商城P85问题记录-发布商品时规格参数不显示 这一p有2个问题,折腾了很久 问题1 :数据库表中不存在 valueType这个键 但是接口文档里是需要提供这个键(而且是不能为null) 所以需要: ...

  2. 谷粒商城九商品服务之商品属性及仓储服务todo

    之前的文章我都是把整篇的代码直接复制到文章中,这样容易抓不住重点, 但是一段代码都贴出来,又显得繁琐, 从这篇开始,我会把重点步骤写出来,代码还是贴完整的 从这篇开始的mybatis-plus分页插件 ...

  3. 【谷粒商城之订单服务-支付】

    本笔记内容为尚硅谷谷粒商城订单服务支付部分 目录 一.支付宝沙箱 沙箱环境 二.公钥.私钥.加密.加签.验签 1.公钥私钥 2.加密和数字签名 3.对称加密和非对称加密 三.内网穿透 四.整合支付 1 ...

  4. 谷粒商城 高级篇 (十四) ---------- 商品详情

    目录 一.详情数据 二.查询详情 三.sku 组合切换 四.关键 SQL 一.详情数据 封装成 vo 如下: SkuItemVo: @Data public class SkuItemVo {//1. ...

  5. 谷粒商城11——认证服务、短信验证、Gitee-OAuth 社交登录、分布式session

    文章目录 九.认证服务 1.短信验证码功能 2.短信验证模仿 3.验证码生成远程调用发送短信 4.验证码防刷检验 4.1 验证码的校验 4.2.4.3 验证码防刷 5.注册功能 5.1 封装表单vo ...

  6. 实战 - 谷粒商城项目:基础篇First

    文章目录 SpringCloud商城- 基础篇 1. 环境搭建 1.1 centos7安装docker 1.2 docker安装MySQL5.7 1.3 docker安装Redis 1.4 环境安装配 ...

  7. 【谷粒商城高级篇】商品服务 商品上架

    谷粒商城笔记合集 分布式基础篇 分布式高级篇 高可用集群篇 ===简介&环境搭建=== ===Elasticsearch=== 项目简介与分布式概念(第一.二章) Elasticsearch: ...

  8. 【谷粒商城高级篇】商城业务:商品检索

    谷粒商城笔记合集 分布式基础篇 分布式高级篇 高可用集群篇 ===简介&环境搭建=== ===Elasticsearch=== 项目简介与分布式概念(第一.二章) Elasticsearch: ...

  9. 谷粒商城分布式基础篇1-个人版

    基础篇 1 项目简介 1.1 项目背景 1.2 电商模式 市面上有5种常见的电商模式 B2B.B2C.C2B.C2C.O2O 1.2.1 B2B 模式 B2B(Business to Business ...

  10. 分布式项目-谷粒商城。

    分布式项目 一,分布图 二,环境搭建 1.安装linux 2.安装docker 1 卸载系统之前的docker sudo yum remove docker \docker-client \docke ...

最新文章

  1. 聊聊Tomcat的架构设计
  2. php 图片路径混淆,爬虫遇到了字符图片混淆。pytesseract识别图片字符
  3. 2016年光伏电站交易和融资的十大猜想
  4. Nicholas谈UE4对手游平台的优化和支持
  5. Spring AOP介绍
  6. JavaScript jQuery bootstrap css ajax
  7. mysqli.class.php,PHP MySQLi类
  8. python 网页转pdf
  9. html标签的英文全拼,HTML标签全称对照
  10. 阿里巴巴矢量图标库在线链接使用图标
  11. html5制作当当图书榜页面,当当图书.html
  12. linux simg2img,simg2img工具
  13. ROS专题----导航功能包navigation基础汇总
  14. NTP服务器的相关配置
  15. 你为什么那么努力还是不开心!
  16. 金山毒霸推新产品金山卫士 正面狙击奇虎360
  17. 个人关于PAT的认识心得和体会
  18. android——databinding中字符串的拼接处理、TextView显示的值随activity的属性值改变同时改变--LiveData、双向绑定过滤器、监听某个值的改变
  19. 如何去除word中的空行
  20. 第二证券|钠电池三种技术路线谁更将率先取代锂电池?

热门文章

  1. 13.docker exec
  2. 1.Chrome开发者工具不完全指南(一、基础功能篇)
  3. 6. Magento2 --- 创建主题
  4. 测试人员该学习哪些Linux知识
  5. 自动化测试selenium(四)check,选中复选框,操作一组元素
  6. @Autowired与@Resource
  7. javascript循环事件只响应最后一次的问题处理
  8. C++构造函数异常(二)
  9. Eclipse(PHP、JAVA)的快捷键大全
  10. [原]gimp的python控制台以及python的PIL图像处理库