Day_2

发布于:2024-05-08 ⋅ 阅读:(23) ⋅ 点赞:(0)

1. 菜品管理

新增菜品

接口设计

1. 根据类型查询分类(分类管理已完成)

查看接口文档即可

2. 文件上传

创建Bucket

采用的是阿里云的OSS对象存储服务

 新增AccessKey

3. 菜品的新增逻辑

代码开发

1. 文件上传接口开发

为了提高代码的解耦性,在配置文件采用的是分离式的。

 这个文件的数据在 sky-common 里的 properties 里的 AliOssProperties 类里进行了配置

 在 sky-common 里的 utils 里配置了上传文件的工具,那么就需要将这个对象注入到 IOC

 在 sky-service 里进行注入该工具类 

 开发文件上传接口:

 2. 新增菜品接口开发

controller 层

serverImpl 层

Mapper 层 

通过下图的方式,将得到的自增的主键值,再赋值给原对象

 其他都属于比较常规的操作

菜品分页查询

常规的操作

删除菜品

规则:

起售中的菜品不能删除

套餐关联的菜品不能删除

删除菜品后,关联的口味数据也需要删除掉

常规方法解决 

修改菜品

接口设计

根据id查询菜品

根据类型查询分类(已完成)

文件上传 (已完成)

修改菜品

代码开发

1. 查询菜品及其相关联的口味信息,比较简单;

2. 修改菜品接口

对于菜品修改是普通的 update 方法

对于关联的口味信息,采用的是先删除原有相关联的所有信息,然后添加来自前端的信息

菜品起售停售

注:如果执行停售操作,则包含此菜品的套餐也需要停售。

controller 层

ServerImpl


2. 套餐管理

新增套餐

业务规则

  • 套餐名称唯一

  • 套餐必须属于某个分类

  • 套餐必须包含菜品

  • 名称、分类、价格、图片为必填项

  • 添加菜品窗口需要根据分类类型来展示菜品

  • 新增的套餐默认为停售状态

接口设计

  • 根据类型查询分类(已完成)

  • 根据分类id查询菜品

  • 图片上传(已完成)

  • 新增套餐

代码开发

常规开发

注意点:新增套餐,同时需要保存套餐和菜品的关联关系

套餐分页查询 

因为要返回对应的 种类名称,在表 setmeal 里记录的是对应的 种类id

所有需要去表 category 里根据 id 查询对应的 categoryName

删除套餐 

业务规则

  • 可以一次删除一个套餐,也可以批量删除套餐

  • 起售中的套餐不能删除

代码开发

注:删除套餐表中的数据的时候,也需要删除套餐菜品关系表中的数据

属于常规开发

修改套餐

接口设计

代码开发

查询回显数据常规方案

修改套餐对应的菜品关联关系

采用的方案与 菜品与对应的口味 方案相同

先删除之前有的所有关联,然后新增套餐与菜品对应的关系

  • 根据id查询套餐,用于修改页面回显数据

  • 修改套餐

起售停售套餐

业务规则

  • 可以对状态为起售的套餐进行停售操作,可以对状态为停售的套餐进行起售操作

  • 起售的套餐可以展示在用户端,停售的套餐不能展示在用户端

  • 起售套餐时,如果套餐内包含停售的菜品,则不能起售

代码开发

具体查看源码


3.  Redis

在项目中使用 redis,本项目使用的是 Spring Data Redis

操作步骤

1. 导入Spring Data Redis

2. 配置Redis数据源

3.  写配置类,创建RedisTemplate对象

导入 IOC 容器里

4. 通过 RedisTemplate 对象操作 Redis 

  1. ValueOperations:string数据操作
  2. SetOperations:set类型数据操作
  3. ZSetOperations:zset类型数据操作
  4. HashOperations:hash类型的数据操作
  5. ListOperations:list类型的数据操作

4. 店铺营业状态设置

管理端,用户端使用的 Controller 类的名称是一样的,所以要对 Controller 进行命名

管理端

查询店铺营业状态

设置店铺营业状态

这里要注意

如果在 redis 的配置文件里的配置  redis.conf 

stop-writes-on-bgsave-error yes

这样是强制把 redis 快照关闭了,导致不能持久化,无法对 redis 的数据进行修改

设置为:  stop-writes-on-bgsave-error no  即可

用户端

与管理端的获取方式一致


5. Swagger 修改

修改docker,使用户端的接口与管理端的接口分离

@Bean
public Docket docket1(){
    log.info("准备生成接口文档...");
    ApiInfo apiInfo = new ApiInfoBuilder()
            .title("苍穹外卖项目接口文档")
            .version("2.0")
            .description("苍穹外卖项目接口文档")
            .build();

    Docket docket = new Docket(DocumentationType.SWAGGER_2)
            .groupName("管理端接口")
            .apiInfo(apiInfo)
            .select()
            //指定生成接口需要扫描的包
            .apis(RequestHandlerSelectors.basePackage("com.sky.controller.admin"))
            .paths(PathSelectors.any())
            .build();

    return docket;
}
@Bean
public Docket docket2(){
    log.info("准备生成接口文档...");
    ApiInfo apiInfo = new ApiInfoBuilder()
            .title("苍穹外卖项目接口文档")
            .version("2.0")
            .description("苍穹外卖项目接口文档")
            .build();

    Docket docket = new Docket(DocumentationType.SWAGGER_2)
            .groupName("用户端接口")
            .apiInfo(apiInfo)
            .select()
            //指定生成接口需要扫描的包
            .apis(RequestHandlerSelectors.basePackage("com.sky.controller.user"))
            .paths(PathSelectors.any())
            .build();

    return docket;
}

这样就完成了接口的分组