谷粒商城实战笔记-92~96-商品发布和查询


这一篇包含如下内容:

  • 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注解的一些关键特性:

  1. 启用Feign客户端

    • 当你在一个Spring Boot应用中添加了spring-cloud-starter-openfeign依赖后,可以通过添加@EnableFeignClients到一个配置类上来启用Feign客户端的支持。
  2. 扫描客户端接口

    • 这个注解会告诉Spring框架去扫描指定的包(或默认扫描该注解所在的类的同级及子级包)寻找使用了@FeignClient注解的接口,并创建其实例。
  3. 配置选项

    • 你可以通过@EnableFeignClients注解中的属性来进一步定制Feign客户端的行为,比如:
    • basePackagesvalue:指定要扫描的包名。
    • 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.ymlapplication.properties)中进行设置,或者通过@Bean方法提供自定义的FeignClientFactoryContract等组件来配置。

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小手追梦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值