谷粒商城P83-86
前言
本文继续记录B站谷粒商城项目视频 P83-86 的内容,做到知识点的梳理和总结的作用,接口文档地址:gulimall接口文档。
一、获取所有会员等级
1.需求描述
1.1.1 点击发布商品模块,前端发送获取所有会员等级请求,后台查询出所有会员等级的功能。
若前端没有发送请求,执行下面操作即可
1、npm install --save pubsub-js
2、在src下的main.js中引用:
import PubSub from 'pubsub-js'
Vue.prototype.PubSub = PubSub
2.代码实现
@RequestMapping("/list")
public R list(@RequestParam Map<String, Object> params){
PageUtils page = memberService.queryPage(params);
return R.ok().put("page", page);
}
将会员服务注册到Nacos注册中心
spring:
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
application:
name: gulimall-member
将会员服务配置到Nacos配置中心
#nacos服务配置中心
spring.application.name=gulimall-member
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
gateway网关配置会员服务的路由规则
spring:
cloud:
gateway:
routes:
- id: product_route
uri: lb://gulimall-product
predicates:
- Path=/api/product/**
filters:
- RewritePath=/api(?<segment>/?.*),/$\{segment}
- id: third_party_route
uri: lb://gulimall-third-party
predicates:
- Path=/api/thirdparty/**
filters:
- RewritePath=/api/thirdparty/(?<segment>.*),/$\{segment}
- id: member_route
uri: lb://gulimall-member
predicates:
- Path=/api/member/**
filters:
- RewritePath=/api/(?<segment>.*),/$\{segment}
配置上述信息后,重启会员服务,添加会员信息显示如下
二、获取分类下关联的品牌
1.需求描述
2.1.1 选择分类选中手机分类,前端能够根据手机分类id发送请求查询出对应分类下的品牌。
2.代码实现
2.2.1 Controller 层
/**
* 获取分类下关联的品牌
* 1、Controller:处理请求,接受和校验数据
* 2、Service接受controller传来的数据,进行业务处理
* 3、Controller接受Service处理完的数据,封装页面指定的vo
*/
@GetMapping("/brands/list")
public R relationBrandsList(@RequestParam(value = "catId",required = true)Long catId){
List<BrandEntity> vos = categoryBrandRelationService.getBrandsByCatId(catId);
List<BrandVo> collect = vos.stream().map(item -> {
BrandVo brandVo = new BrandVo();
brandVo.setBrandId(item.getBrandId());
brandVo.setBrandName(item.getName());
return brandVo;
}).collect(Collectors.toList());
return R.ok().put("data",collect);
}
2.2.2 Service 层
@Override
public List<BrandEntity> getBrandsByCatId(Long catId) {
//查询分类与品牌关联关系表 catelog_id 分类id等于前端传进来的catId
List<CategoryBrandRelationEntity> catelogId = relationDao.selectList(new QueryWrapper<CategoryBrandRelationEntity>().eq("catelog_id", catId));
List<BrandEntity> collect = catelogId.stream().map(item -> {
Long brandId = item.getBrandId();
BrandEntity byId = brandService.getById(brandId);
return byId;
}).collect(Collectors.toList());
return collect;
}
2.2.3 实现效果
三、获取分类下所有分组及属性
1.需求描述
3.1.1 填写商品的基本信息之后,点击下一步设置基本参数,F12打开控制台前端发送请求来获取分类下所有分组及属性。如下图所示
2.代码实现
3.2.1 Controller 层
/**
* 获取分类下所有分组关联属性
* @param catelogId
* @return
*/
@GetMapping("/{catelogId}/withattr")
public R getAttrGroupWithAttrs(@PathVariable("catelogId")Long catelogId){
//1、查出当前分类下的所有属性分组,
//2、查出每个属性分组的所有属性
List<AttrGroupWithAttrsVo> vos = attrGroupService.getAttrGroupWithAttrsByCatelogId(catelogId);
return R.ok().put("data",vos);
}
3.2.2 Service 层
/**
* 根据分类id查出所有的分组以及这些组里面的属性
* @param catelogId
* @return
*/
@Override
public List<AttrGroupWithAttrsVo> getAttrGroupWithAttrsByCatelogId(Long catelogId) {
//com.atguigu.gulimall.product.vo
//1、查询分组信息
List<AttrGroupEntity> attrGroupEntities = this.list(new QueryWrapper<AttrGroupEntity>().eq("catelog_id", catelogId));
//2、查询所有属性
List<AttrGroupWithAttrsVo> collect = attrGroupEntities.stream().map(group -> {
AttrGroupWithAttrsVo attrsVo = new AttrGroupWithAttrsVo();
BeanUtils.copyProperties(group,attrsVo);
List<AttrEntity> attrs = attrService.getRelationAttr(attrsVo.getAttrGroupId());
attrsVo.setAttrs(attrs);
return attrsVo;
}).collect(Collectors.toList());
return collect;
}
3.2.3 实现效果
四、商品新增VO抽取
1.实体类提取
4.1.1 点击发布商品模块,填写基本信息,规格参数及销售属性后点击下一步保存商品信息,控制台显示商品信息如下图所示。
4.1.2 复制上述商品信息,打开网页进行JSON格式化,将JSON数据转为实体类,解压导入项目即可。网址:https://www.sojson.com/json2entity.html
注意:价格,重量等数值使用 BigDecimal 修饰,避免精度丢失问题。