文章目录
- Spu列表检索接口。
- Sku列表检索接口。
- 仓库列表接口。
- 问题记录
这一篇包含如下内容:
- 92-商品服务-API-新增商品-商品保存其他问题处理
- 93-商品服务-API-商品管理-SPU检索
- 94-商品服务-API-商品管理-SKU检索
- 95-仓储服务-API-仓库管理-整合ware服务&获取仓库列表
- 96-仓储服务-API-仓库管理-查询库存&创建采购需求
1,优化商品保存,图片为空以及优惠信息不合理时,要对数据进行过滤,避免无意义的垃圾数据进入数据库。
2,开发SPU检索和SKU检索接口,这两个接口的关键在于后台使用MybatisPlus的QueryWrapper封装查询条件时的用法。
3,配置仓储服务的配置,指定注册中心,调整仓库模块自动生成的代码,为列表接口添加查询条件,主要是QueryWrapper的使用。
4,真实业务中的商品库存是通过采购环节,商品进入仓库后才有的。所以,先要有采购单。在创建采购单之前,要创建采购需求,通过审批合并后形成采购单。对采购单列表查询的接口,也做一些优化,主要是增加查询条件。
Spu列表检索接口。
@Override
public PageUtils queryPageByCondition(Map<String, Object> params) {
QueryWrapper<SpuInfoEntity> wrapper = new QueryWrapper<>();
String key = (String) params.get("key");
if(StrUtil.isNotEmpty(key)){
wrapper.and((w)->{
w.eq("id",key).or().like("spu_name",key);
});
}
// status=1 and (id=1 or spu_name like xxx)
String status = (String) params.get("status");
if(StrUtil.isNotEmpty(status)){
wrapper.eq("publish_status",status);
}
String brandId = (String) params.get("brandId");
if(StrUtil.isNotEmpty(brandId)&&!"0".equalsIgnoreCase(brandId)){
wrapper.eq("brand_id",brandId);
}
String catelogId = (String) params.get("catelogId");
if(StrUtil.isNotEmpty(catelogId)&&!"0".equalsIgnoreCase(catelogId)){
wrapper.eq("catalog_id",catelogId);
}
IPage<SpuInfoEntity> page = this.page(
new Query<SpuInfoEntity>().getPage(params),
wrapper
);
return new PageUtils(page);
}
Sku列表检索接口。
@Override
public PageUtils queryPageByCondition(Map<String, Object> params) {
QueryWrapper<SkuInfoEntity> queryWrapper = new QueryWrapper<>();
String key = (String) params.get("key");
if(StrUtil.isNotEmpty(key)){
queryWrapper.and((wrapper)->{
wrapper.eq("sku_id",key).or().like("sku_name",key);
});
}
String catelogId = (String) params.get("catelogId");
if(StrUtil.isNotEmpty(catelogId)&&!"0".equalsIgnoreCase(catelogId)){
queryWrapper.eq("catalog_id",catelogId);
}
String brandId = (String) params.get("brandId");
if(StrUtil.isNotEmpty(brandId)&&!"0".equalsIgnoreCase(catelogId)){
queryWrapper.eq("brand_id",brandId);
}
String min = (String) params.get("min");
if(StrUtil.isNotEmpty(min)){
queryWrapper.ge("price",min);
}
String max = (String) params.get("max");
if(StrUtil.isNotEmpty(max) ){
try{
BigDecimal bigDecimal = new BigDecimal(max);
if(bigDecimal.compareTo(new BigDecimal("0"))==1){
queryWrapper.le("price",max);
}
}catch (Exception e){
}
}
IPage<SkuInfoEntity> page = this.page(
new Query<SkuInfoEntity>().getPage(params),
queryWrapper
);
return new PageUtils(page);
}
仓库列表接口。
@Override
public PageUtils queryPage(Map<String, Object> params) {
QueryWrapper<WareInfoEntity> queryWrapper = new QueryWrapper<>();
QueryWrapper<WareInfoEntity> wareInfoEntityQueryWrapper = new QueryWrapper<>();
String key = (String) params.get("key");
if(StrUtil.isNotEmpty(key)){
wareInfoEntityQueryWrapper.eq("id",key).or()
.like("name",key)
.or().like("address",key)
.or().like("areacode",key);
}
IPage<WareInfoEntity> page = this.page(
new Query<WareInfoEntity>().getPage(params),
queryWrapper
);
return new PageUtils(page);
}
采购需求列表查询。
```clike
@Override
public PageUtils queryPage(Map<String, Object> params) {
QueryWrapper<PurchaseDetailEntity> queryWrapper = new QueryWrapper<PurchaseDetailEntity>();
String key = (String) params.get("key");
if(StrUtil.isNotEmpty(key)){
queryWrapper.and(w->{
w.eq("purchase_id",key).or().eq("sku_id",key);
});
}
String status = (String) params.get("status");
if(StrUtil.isNotEmpty(status)){
queryWrapper.eq("status",status);
}
String wareId = (String) params.get("wareId");
if(StrUtil.isNotEmpty(wareId)){
queryWrapper.eq("ware_id",wareId);
}
IPage<PurchaseDetailEntity> page = this.page(
new Query<PurchaseDetailEntity>().getPage(params),
new QueryWrapper<PurchaseDetailEntity>()
);
return new PageUtils(page);
}
问题记录
启动Product服务时,出现错误Consider defining a bean of type 'com.atguigu.gulimall.product.feign.CouponF
。
Consider defining a bean of type 'com.atguigu.gulimall.product.feign.CouponFeignService
原因是启动确实FeignClient注解。
在Spring Cloud中,@EnableFeignClients
用于启用Feign客户端。Feign是一个声明式的HTTP客户端,简化了编写服务客户端的过程。使用Feign可以轻松地定义接口并通过HTTP调用其他微服务。
下面是@EnableFeignClients
注解的一些关键特性:
-
启用Feign客户端:
- 当你在一个Spring Boot应用中添加了
spring-cloud-starter-openfeign
依赖后,可以通过添加@EnableFeignClients
到一个配置类上来启用Feign客户端的支持。
- 当你在一个Spring Boot应用中添加了
-
扫描客户端接口:
- 这个注解会告诉Spring框架去扫描指定的包(或默认扫描该注解所在的类的同级及子级包)寻找使用了
@FeignClient
注解的接口,并创建其实例。
- 这个注解会告诉Spring框架去扫描指定的包(或默认扫描该注解所在的类的同级及子级包)寻找使用了
-
配置选项:
- 你可以通过
@EnableFeignClients
注解中的属性来进一步定制Feign客户端的行为,比如: basePackages
或value
:指定要扫描的包名。defaultPackage
:指定默认的包名。clients
:显式列出需要启用的客户端类型。type
:指定Feign Client的类型,默认为FeignClient.class
。
- 你可以通过
例如,在Spring Boot中这样使用@EnableFeignClients
:
@SpringBootApplication
@EnableFeignClients(basePackages = "com.example.clients")
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
Spring Boot应用会扫描com.example.clients
包及其子包中的所有带有@FeignClient
注解的接口。
如果你想要全局配置Feign客户端,可以在配置文件(如application.yml
或application.properties
)中进行设置,或者通过@Bean
方法提供自定义的FeignClientFactory
、Contract
等组件来配置。