【学习日记2023.5.23】 之 店铺营业状态模块完善

news2025/1/12 6:19:04

文章目录

  • 5. 店铺营业状态设置
    • 5.1 需求分析和设计
        • 产品原型
    • 5.2 代码开发
      • 5.2.1 设置营业状态
      • 5.2.2 管理端查询营业状态
      • 5.2.3 用户端查询营业状态
    • 5.3 功能测试
      • 5.3.1 接口文档测试
      • 5.3.2 接口分组展示
      • 5.3.3 前后端联调测试
      • 5.4 代码提交

5. 店铺营业状态设置

5.1 需求分析和设计

产品原型

进到苍穹外卖后台,显示餐厅的营业状态,营业状态分为营业中打烊中,若当前餐厅处于营业状态,自动接收任何订单,客户可在小程序进行下单操作;若当前餐厅处于打烊状态,不接受任何订单,客户便无法在小程序进行下单操作。
请添加图片描述

点击营业状态按钮时,弹出更改营业状态
请添加图片描述

选择营业,设置餐厅为营业中状态

选择打烊,设置餐厅为打烊中状态

状态说明:
请添加图片描述

接口设计:

根据上述原型图设计接口,共包含3个接口。

  • 设置营业状态
  • 管理端查询营业状态
  • 用户端查询营业状态

**注:**从技术层面分析,其实管理端和用户端查询营业状态时,可通过一个接口去实现即可。因为营业状态是一致的。但是,本项目约定:

  • 管理端发出的请求,统一使用/admin作为前缀。
  • 用户端发出的请求,统一使用/user作为前缀。

因为访问路径不一致,故分为两个接口实现。

1). 设置端营业状态
请添加图片描述

2). 获取管理端营业状态
请添加图片描述

3). 获取用户端营业状态
请添加图片描述

营业状态存储方式

虽然,可以通过一张表来存储营业状态数据,但整个表中只有一个字段,所以意义不大。

营业状态数据存储方式:基于Redis的字符串来进行存储
请添加图片描述

**约定:**1表示营业 0表示打烊

5.2 代码开发

5.2.1 设置营业状态

在sky-server模块中,创建ShopController.java

根据接口定义创建ShopController的setStatus设置营业状态方法:

package com.sky.controller.admin;

import com.sky.result.Result;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController("adminShopController")
@RequestMapping("/admin/shop")
@Api(tags = "店铺相关接口")
@Slf4j
public class ShopController {

public static final String KEY = "SHOP_STATUS";

@Autowired
private RedisTemplate redisTemplate;

/**
     * 设置店铺的营业状态
     * @param status
     * @return
     */
    @PutMapping("/{status}")
    @ApiOperation("设置店铺的营业状态")
    public Result setStatus(@PathVariable Integer status){
        log.info("设置店铺的营业状态为:{}",status == 1 ? "营业中" : "打烊中");
        redisTemplate.opsForValue().set(KEY,status);
        return Result.success();
    }
}

5.2.2 管理端查询营业状态

根据接口定义创建ShopController的getStatus查询营业状态方法:

	/**
     * 获取店铺的营业状态
     * @return
     */
    @GetMapping("/status")
    @ApiOperation("获取店铺的营业状态")
    public Result<Integer> getStatus(){
        Integer status = (Integer) redisTemplate.opsForValue().get(KEY);
        log.info("获取到店铺的营业状态为:{}",status == 1 ? "营业中" : "打烊中");
        return Result.success(status);
    }

5.2.3 用户端查询营业状态

创建com.sky.controller.user包,在该包下创建ShopController.java

根据接口定义创建ShopController的getStatus查询营业状态方法:

package com.sky.controller.user;

import com.sky.result.Result;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.*;

@RestController("userShopController")
@RequestMapping("/user/shop")
@Api(tags = "店铺相关接口")
@Slf4j
public class ShopController {

public static final String KEY = "SHOP_STATUS";

@Autowired
private RedisTemplate redisTemplate;

/**
     * 获取店铺的营业状态
     * @return
     */
    @GetMapping("/status")
    @ApiOperation("获取店铺的营业状态")
    public Result<Integer> getStatus(){
        Integer status = (Integer) redisTemplate.opsForValue().get(KEY);
        log.info("获取到店铺的营业状态为:{}",status == 1 ? "营业中" : "打烊中");
        return Result.success(status);
    }
}

5.3 功能测试

5.3.1 接口文档测试

**启动服务:**访问http://localhost:8080/doc.html,打开店铺相关接口

**注意:**使用admin用户登录重新获取token,防止token失效。

设置营业状态:
请添加图片描述

点击发送
请添加图片描述

查看Idea控制台日志
请添加图片描述

查看Redis中数据
请添加图片描述

管理端查询营业状态:
请添加图片描述

用户端查询营业状态:
请添加图片描述

5.3.2 接口分组展示

在上述接口文档测试中,管理端和用户端的接口放在一起,不方便区分。
请添加图片描述

接下来,要实现管理端和用户端接口进行区分。

在WebMvcConfiguration.java中,分别扫描"com.sky.controller.admin"和"com.sky.controller.user"这两个包。

	@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;
}

重启服务器,再次访问接口文档,可进行选择用户端接口或者管理端接口
请添加图片描述

5.3.3 前后端联调测试

启动nginx,访问 http://localhost

进入后台,状态为营业中
请添加图片描述

点击营业状态设置,修改状态为打烊中
请添加图片描述

再次查看状态,状态已为打烊中
请添加图片描述

5.4 代码提交

点击提交:
请添加图片描述

提交过程中,出现提示:
请添加图片描述

继续push:
请添加图片描述

推送成功:
请添加图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/561212.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

chatgpt赋能Python-python_os_remove

Python os.remove(): 删除文件 什么是 Python os.remove()&#xff1f; Python os.remove() 函数是 Python 中用于删除文件的标准库函数之一。 它使用以下语法&#xff1a; os.remove(file)这里的 file 参数是要删除的文件的路径及文件名。 Python os.remove()的工作原理 …

Linux——SNAT与DNAT的应用

一、SNAT的介绍 1&#xff0c;SNAT概述 SNAT&#xff08;SNAT&#xff09;一般指源地址转换 源地址转换是内网地址向外访问时&#xff0c;发起访问的内网ip地址转换为指定的ip地址&#xff08;可指定具体的服务以及相应的端口或端口范围&#xff09;&#xff0c;这可以使内网中…

2024考研《数据结构》复习笔记总览(文末有彩蛋)

前言 数据结构是是计算机专业的必修课&#xff0c;也是计算机考研的必学书目。 随着科技的飞速发展&#xff0c;数据结构的基础性地位不仅没有动摇&#xff0c;反而由于近年来算法工程师的高薪火爆&#xff0c;使得数据结构的重视程序空前高涨。 索引目录 数据结构考研笔记第…

电动力学专题:天线阵简介

电动力学专题&#xff1a;天线阵天线阵是指由多个天线按一定方式组合而成的一个系统&#xff0c;用于接收或发射无线电信号。天线阵可用于雷达、通信、导航和定位等领域&#xff0c;能够大幅度提高系统的灵敏度和方向性&#xff0c;同时也能提高系统的抗干扰能力和分辨率。在实…

fastposter v2.15.0 从繁琐到简单,简洁好用的海报生成器

fastposter v2.15.0 从繁琐到简单&#xff0c;简洁好用的海报生成器 从繁琐到简单&#xff0c;简洁好用的海报生成器 我很高兴向大家推荐一款令人兴奋的工具——Fastposter海报生成器。作为一名开发者&#xff0c;我们深知在项目中创建专业级海报的重要性&#xff0c;但常常面…

MATLAB仿真建模:Simulink和Stateflow的应用和模型设计

第一章&#xff1a;引言 在当今的科学研究和工程领域中&#xff0c;仿真建模是一项非常重要的技术。通过仿真建模&#xff0c;我们可以在计算机上创建模拟真实系统行为的模型&#xff0c;并通过模型的分析和测试来优化系统设计。MATLAB是一种广泛应用于科学和工程领域的强大工…

FPGA——HLS入门-LED闪烁仿真

系列文章目录 文章目录 系列文章目录一、HLS介绍1、什么是HLS2、与VHDL/Verilog有什么关系?3、关键技术局限性 二、Vivado HLS - LED闪烁仿真1、项目配置2、C仿真3、联合仿真 三、总结 一、HLS介绍 1、什么是HLS HLS就是高综合&#xff08;High level Synthesis&#xff09;…

如何开发微信小程序,后端,前端,小程序端,如何部署到腾讯云托管

开发微信小程序是一项非常有趣的任务&#xff0c;它涉及到前端、后端和小程序端的开发。在本文中&#xff0c;我们将介绍如何开发微信小程序&#xff0c;并将其部署到腾讯云托管。 一、前端开发 前端开发是微信小程序开发的第一步。在这一步中&#xff0c;我们需要使用微信小程…

分享几个网内可用的免费的ChatGPT网页版

Chatgpt: 与AI聊天的新体验 随着数字生活的普及和人工智能技术的快速发展&#xff0c;越来越多人希望与机器进行真挚的交流&#xff0c;体验身临其境的感觉。基于这个想法&#xff0c;我们推出了Chatgpt&#xff0c;一款基于自然语言处理技术和深度学习算法的智能聊天机器人&a…

Spark基础学习笔记----RDD检查点与共享变量

零、本讲学习目标 了解RDD容错机制理解RDD检查点机制的特点与用处理解共享变量的类别、特点与使用 一、RDD容错机制 当Spark集群中的某一个节点由于宕机导致数据丢失&#xff0c;则可以通过Spark中的RDD进行容错恢复已经丢失的数据。RDD提供了两种故障恢复的方式&#xff0c…

Linux防火墙之firewalld基础

一、firewalld概述 firewalld防火墙是Centos7系统默认的防火墙管理工具&#xff0c;取代了之前的iptables防火墙&#xff0c;也是工作在网络层&#xff0c;属于包过滤防火墙。 firewalld和iptables都是用来管理防火墙的工具&#xff08;属于用户态&#xff09;来定义防火墙的…

数据结构 之 二叉搜索树 结构

二叉树搜索树的基本属性&#xff1a; 如图所示&#xff1a;二叉搜索树有四个最基本的属性&#xff1a;指向节点的根&#xff08;root&#xff09;&#xff0c;节点中的键&#xff08;key&#xff09;、左指针&#xff08;right&#xff09;、右指针&#xff08;right&#xff…

DELL PowerVault MD3600f存储维修 控制器更换 电池更换

MD3600f 系列存储阵列介绍 MD3600f 系列是采用 2U 机架固定的外部独立磁盘冗余阵列 (RAID) 存储阵列&#xff0c;可容纳多达 12 个 3.5 英寸或 24 个 2.5 英寸的 6.0-Gbps 串行连接SCSI (SAS) 磁盘。 MD3600f 系列存储阵列可以使用 MD1200 系列扩展机柜以菊花链式连接&#xff…

解决:在 Router 中父级未引入单文件组件而且 children 中的单文件组件不能在页面展示的问题

1、问题展示&#xff1a; 其一、问题描述&#xff1a; 在 router 中父级未引入单文件组件&#xff0c;而只是写了其它配置&#xff0c;但在其 children 中写了配置且引入了单文件组件而未能在页面中展示&#xff1b; 其二、代码&#xff1a; // 某一块的静态路由管理 {path…

2021下半年

2021下半年 a d a c b 阶码是纯整数&#xff0c;尾数是纯小数 对于阶码&#xff1a; 对于尾数&#xff1a; 选b c c a c b c b 归属于受委托方 a b c a 前向传播 反向传播&#xff0c;求关键路径 b b 关键路径上的活动松弛时间为0 c 中缀式&#xff1a;需…

chatgpt赋能Python-python_namedtuple

Python中的namedtuple 在Python中&#xff0c;namedtuple是一个方便且易于使用的数据结构&#xff0c;可以有效地处理元组数据。 它是Python标准库collections中一个实用的类&#xff0c;可以创建一个具有命名属性的元组&#xff0c;类似于一个简单的类对象。namedtuple的属性…

Linux防火墙iptables(下)

一、通用匹配 1&#xff0c;协议匹配 2&#xff0c;地址匹配 3&#xff0c;接口匹配 二、隐含匹配 1.端口匹配 2&#xff0c;TCP标志位匹配 3&#xff0c;ICMP类型匹配 ICMP类型可以是字符串、数字代码 ICMP类型含义Echo-Request &#xff08;代码为8&#xff09;表示请求…

设计模式之规约模式

设计模式之规约模式 引言规约模式案例改造 参考 引言 规约模式的英文是Specification Pattern&#xff0c;Specification直译过来是要求、技术说明、明确的意思。光看名字估计大家都是一脸懵逼&#xff0c;根本不知道这个设计模式大概会是一个什么样子。这也是设计模式的一个通…

33.Mybatis-Plus

一、Mybatis-Plus。 &#xff08;1&#xff09;简介。 &#xff08;2&#xff09;快速开始_准备工作。 对于Mybatis整合MP有常常有三种用法&#xff0c;分别是MybatisMP、SpringMybatisMP、Spring BootMybatisMP。 &#xff08;2.1&#xff09;创建数据库以及表。 1.创建数…

chatgpt赋能Python-python_lanbda函数

Python Lambda函数&#xff1a;快速、灵活的编程利器 Python是当前最流行的编程语言之一&#xff0c;而在Python中&#xff0c;Lambda函数是一项十分强大的功能&#xff0c;它可以帮助开发者在编写代码时更快地完成任务&#xff0c;提高代码的灵活性和可读性。本文将介绍Pytho…