【瑞吉外卖 | day01】项目介绍+后台登录退出功能

在这里插入图片描述

文章目录

  • 瑞吉外卖 — day01
    • 1. 所需知识
    • 2. 软件开发整体介绍
      • 2.1 软件开发流程
      • 2.2 角色分工
      • 2.3 软件环境
    • 3. 瑞吉外卖项目介绍
      • 3.1 项目介绍
      • 3.2 产品原型展示
      • 3.3 技术选型
      • 3.4 功能架构
      • 3.5 角色
    • 4. 开发环境搭建
      • 4.1 数据库环境搭建
      • 4.2 Maven项目构建
    • 5. 后台系统登录功能
      • 5.1 创建需要的结构(包、类)
      • 5.2 通用返回结果类
      • 5.3 登录功能处理
      • 5.4 退出功能处理

瑞吉外卖 — day01

1. 所需知识

  • Java基础
  • Java Web
  • MySQL
  • Spring Boot
  • SSM(Spring、Spring MVC、MyBatis)
  • Maven

2. 软件开发整体介绍

2.1 软件开发流程

  • 需求分析

    • 产品原型:网页形式展现项目大体结构(页面设计及效果)
    • 需求规格说明书:word文档,展现项目的功能
  • 设计

    • 产品文档
    • UI界面设计:项目界面效果
    • 概要设计
    • 详细设计
    • 数据库设计:需要几个数据库,数据库中需要的表,表中的字段
  • 编码

    • 项目代码
    • 单元测试
  • 测试

    • 测试用例
    • 测试报告
  • 上线运维

    • 软件环境安装
    • 配置

2.2 角色分工

2.3 软件环境

  • 开发环境(development):开发人员在开发阶段使用的环境,一般外部用户无法访问
  • 测试环境(testing):测试人员使用的环境,用于测试项目, -般外部用户无法访问
  • 生产环境(production):线上环境,正式提供对外服务的环境

3. 瑞吉外卖项目介绍

3.1 项目介绍

  • 本项目(瑞吉外卖)是专门为餐饮企业(餐厅、饭店)定制的一款软件产 品,包括系统管理后台移动端应用两部分。其中系统管理后台主要提供给餐饮企业内部员工使用,可以对餐厅的菜品、套餐、订单等进行管理维护。移动端应用主要提供给消费者使用,可以在线浏览菜品、添加购物车、下单等。

  • 本项目共分为3期进行开发:

    第一期主要实现基本需求,其中移动端应用通过H5实现,用户可以通过手机浏览器访问。
    第二期主要针对移动端应用进行改进,使用微信小程序实现,用户使用起来更加方便。
    第三期主要针对系统进行优化升级,提高系统的访问性能。

3.2 产品原型展示

  • 产品原型,就是一款产品成型之前的一个简单的框架,就是将页面的排版布局展现出来,使产品的初步构思有一个可视化的展示。通过原型展示,可以更加直观的了解项目的需求和提供的功能。
  • 产品原型只是展现项目功能,并不是最终的效果

3.3 技术选型

用户层H5VUE.jsElementUI微信小程序
网关层Nginx
应用层Spring BootSpring MVCSpring Session
SpringSwaggerlombok
数据层MysqlMybatisMybatis PlusRedis
  • Spring Session:

    Spring Session 是 Spring 框架的一个项目,旨在提供会话管理的解决方案。它可以与各种后端存储(如内存、数据库、Redis 等)集成,以便将会话数据存储在可扩展的分布式环境中。Spring Session 不仅可以用于传统的 Web 应用程序,还可以用于微服务架构中的分布式系统。

  • Swagger:

    Swagger是一款RESTFUL接口的文档在线自动生成+功能测试功能软件。Swagger是一个规范和完整的框架,用于生成、描述、调用和可视化RESTfu风格的web服务。目标是使客户端和文件系统作为服务器一同样的速度来更新文件的方法,参数和模型紧密集成到服务器。这个解释简单点来讲就是说,swagger是一款可以根据restful风格生成的接口开发文档,并且支持做测试的一款中间软件。

  • Redis:

    Redis是一种开源的内存数据结构存储系统,是一个完全开源免费的高性能(NOSQL)的key-value数据库。它支持多种数据结构,如字符串、哈希、列表、集合、有序集合等。它可以用作数据库、缓存和消息中间件,并在性能、可扩展性和灵活性方面表现出色。

3.4 功能架构

移动端前台(H5、微信小程序)手机号登陆微信登陆地址管理历史订单
菜品规格购物车下单菜品浏览
系统后台管理分类管理菜品管理套餐管理菜品口味管理
员工登录员工退出员工管理订单管理

3.5 角色

  • 后台系统管理员:登录后台管理系统,拥有后台系统中的所有操作权限
  • 后台系统普通员工:登录后台管理系统,对菜品、套餐、订单等进行管理
  • C端用户:登录移动端应用,可以浏览菜品、添加购物车、设置地址、在线下单等

4. 开发环境搭建

4.1 数据库环境搭建

  • 创建数据库 reggie
  • 运行项目 sql 文件: db_reggie.sql

4.2 Maven项目构建

  • 创建项目
  • 添加pom.xml文件中的依赖
  • appliation.yaml 文件
  • 设置启动类
  • 在配置类中,设置静态资源映射

5. 后台系统登录功能

5.1 创建需要的结构(包、类)

  • 读出前端页面中与后端相关的信息

  • pojo(实体类)

  • mapper

    要继承 BaseMapper<Employee>

  • service

    service接口要继承:IService<Employee>

    serviceImpl要继承和实现:extends ServiceImpl<EmployeeMapper, Employee> implements EmployeeService

  • controller

    添加注解:

    @Slf4j
    @RestController
    @RequestMapping(“employee”)

5.2 通用返回结果类

  • 导入到 utils 包下

  • 通用返回结果类,服务端响应数据最终会封装成此对象

5.3 登录功能处理

在这里插入图片描述

处理逻辑如下:
1、将页面提交的密码password进行md5加密处理
2、根据页面提交的用户名username查询数据库
3、如果没有查询到则返回登录失败结果
4、密码比对,如果不一致则返回登录失败结果
5、查看员工状态,如果为已禁用状态,则返回员工已禁用结果
6、登录成功,将员工id存入Session并返回登录成功结果

/*** 后台员工登录* @param request* @param employee* @return*/@PostMapping("login")public R<Employee> login(HttpServletRequest request, @RequestBody Employee employee){//1、将页面提交的密码password进行md5加密处理String password = employee.getPassword();password = DigestUtils.md5DigestAsHex(password.getBytes());//2、根据页面提交的用户名username查询数据库LambdaQueryWrapper<Employee> lambdaQueryWrapper = new LambdaQueryWrapper<>();lambdaQueryWrapper.eq(Employee::getUsername,employee.getUsername());Employee emp = employeeService.getOne(lambdaQueryWrapper);//3、如果没有查询到则返回登录失败结果if(emp == null){return R.error("用户不存在");}//4、密码比对,如果不一致则返回登录失败结果if(!emp.getPassword().equals(password)){return R.error("密码不一致");}//5、查看员工状态,如果为已禁用状态,则返回员工已禁用结果if(emp.getStatus() == 0){return R.error("账号已禁用");}//6、登录成功,将员工id存入Session并返回登录成功结果request.getSession().setAttribute("employee",emp.getId());return R.success(emp);}

5.4 退出功能处理

/*** 后台员工退出* @param request* @return*/@PostMapping("logout")public R<String> logout(HttpServletRequest request){// 请理 session中保存的当前用户idrequest.getSession().removeAttribute("employee");return R.success("退出成功");}

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Python】已解决:SyntaxError: positional argument follows keyword argument

文章目录 一、分析问题背景二、可能出错的原因三、错误代码示例四、正确代码示例五、注意事项 已解决&#xff1a;SyntaxError: positional argument follows keyword argument 一、分析问题背景 在Python编程中&#xff0c;当我们在调用函数时混合使用位置参数&#xff08;p…

golang使用RSA加密和解密

目录 前提 生成RSA公钥和密钥 读取文件 加密 解密 前提 本文章我们是先读取的RSA文件&#xff0c;所以需要先生成RSA&#xff0c;并且保存在文件中&#xff0c;再进行加密 生成RSA公钥和密钥 如果没有公钥和密钥&#xff0c;可以先看看我上一篇文章 生成RSA公钥和密钥h…

基于Java微信小程序同城家政服务系统设计和实现(源码+LW+调试文档+讲解等)

&#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN作者、博客专家、全栈领域优质创作者&#xff0c;博客之星、平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌&#x1f497; &#x1f31f;文末获取源码数据库&#x1f31f;感兴趣的可以先收藏起来&#xff0c;还…

3ds Max导出fbx贴图问题简单记录

1.前言 工作中发现3ds Max导出的fbx在其它软件&#xff08;Autodesk viewer&#xff0c;blender&#xff0c;navisworks&#xff0c;FBXReview等&#xff09;中丢失了部分贴图&#xff0c;但导出的fbx用3ds Max打开却正常显示。 fbx格式使用范围较广&#xff0c;很多常见的三…

【深度学习】卷积神经网络CNN

李宏毅深度学习笔记 图像分类 图像可以描述为三维张量&#xff08;张量可以想成维度大于 2 的矩阵&#xff09;。一张图像是一个三维的张量&#xff0c;其中一维代表图像的宽&#xff0c;另外一维代表图像的高&#xff0c;还有一维代表图像的通道&#xff08;channel&#xff…

华为手机怎么打印文件?

关于华为手机打印的问题&#xff0c;如果您有打印机&#xff0c;并且已经成功和华为手机相连&#xff0c;在解决上就要容易很多。 具体操作如下&#xff1a; 选择文件 文件来源&#xff1a;华为手机上的文件可以来自多个应用&#xff0c;如图库、备忘录、文件管理等&#xf…

C语言之线程的学习

线程属于某一个进程 共同点&#xff1a;都能并发 线程共享变量&#xff0c;进程不共享。 多线程任务中&#xff0c;其中某一个线程调用了exit了&#xff0c;其他线程会跟着一起退出 如果是特定的线程就调用pthread_exit 失败返回的是错误号 下面也是

解码未来城市:探秘数字孪生的奥秘

在科技日新月异的今天&#xff0c;"数字孪生"&#xff08;Digital Twin&#xff09;这一概念如同一颗璀璨的新星&#xff0c;照亮了智慧城市、智能制造等多个领域的前行之路。本文将深入浅出地解析数字孪生的定义、技术原理、应用场景及未来发展&#xff0c;带您一窥…

【介绍下Pwn,什么是Pwn?】

&#x1f308;个人主页: 程序员不想敲代码啊 &#x1f3c6;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f44d;点赞⭐评论⭐收藏 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共…

2021强网杯

一、环境 网上自己找 二、步骤 2.1抛出引题 在这个代码中我们反序列&#xff0c;再序列化 <?php$raw O:1:"A":1:{s:1:"a";s:1:"b";};echo serialize(unserialize($raw));//O:1:"A":1:{s:1:"a";s:1:"b";…

[leetcode]文件组合

. - 力扣&#xff08;LeetCode&#xff09; class Solution { public:vector<vector<int>> fileCombination(int target) {vector<vector<int>> vec;vector<int> res;int sum 0, limit (target - 1) / 2; // (target - 1) / 2 等效于 target /…

代码随想录Day69(图论Part05)

并查集 // 1.初始化 int fa[MAXN]; void init(int n) {for (int i1;i<n;i)fa[i]i; }// 2.查询 找到的祖先直接返回&#xff0c;未进行路径压缩 int.find(int i){if(fa[i] i)return i;// 递归出口&#xff0c;当到达了祖先位置&#xff0c;就返回祖先elsereturn find(fa[i])…

构造,析构,拷贝【类和对象(中)】

P. S.&#xff1a;以下代码均在VS2019环境下测试&#xff0c;不代表所有编译器均可通过。 P. S.&#xff1a;测试代码均未展示头文件stdio.h的声明&#xff0c;使用时请自行添加。 博主主页&#xff1a;LiUEEEEE                        …

yolov8obb角度预测原理解析

预测头 ultralytics/nn/modules/head.py class OBB(Detect):"""YOLOv8 OBB detection head for detection with rotation models."""def __init__(self, nc80, ne1, ch()):"""Initialize OBB with number of classes nc and la…

1.k8s:架构,组件,基础概念

目录 一、k8s了解 1.什么是k8s 2.为什么要k8s &#xff08;1&#xff09;部署方式演变 &#xff08;2&#xff09;k8s作用 &#xff08;3&#xff09;Mesos&#xff0c;Swarm&#xff0c;K8S三大平台对比 二、k8s架构、组件 1.k8s架构 2.k8s基础组件 3.k8s附加组件 …

深入理解ThreadLocal原理

以下内容首发于我的个人网站&#xff0c;来这里看更舒适&#xff1a;https://riun.xyz/work/9898775 ThreadLocal是一种用于实现线程局部变量的机制&#xff0c;它允许每个线程有自己独立的变量&#xff0c;从而达到了线程数据隔离的目的。 基于JDK8 使用 通常在项目中是这样…

JAVA连接FastGPT实现流式请求SSE效果

FastGPT 是一个基于 LLM 大语言模型的知识库问答系统&#xff0c;提供开箱即用的数据处理、模型调用等能力。同时可以通过 Flow 可视化进行工作流编排&#xff0c;从而实现复杂的问答场景&#xff01; 一、先看效果 真正实流式请求&#xff0c;SSE效果&#xff0c;SSE解释&am…

全球首款商用,AI为视频自动配音配乐产品上线

近日&#xff0c;海外推出了一款名为Resona V2A的产品&#xff0c;这是全球首款商用视频转音频 (V2A) 技术产品。这项突破性技术利用AI&#xff0c;仅凭视频数据即可自动生成高质量、与上下文相关的音频&#xff0c;包括声音设计、音效、拟音和环境音&#xff0c;为电影制作人、…

Ubuntu20.04安装Prometheus监控系统

环境准备&#xff1a; 服务器名称内网IP公网IPPrometheus服务器192.168.0.23047.119.21.167Grafana服务器192.168.0.23147.119.22.8被监控服务器192.168.0.23247.119.22.82 更改主机名方便辨认 hostnamectl set-hostname prometheus hostnamectl set-hostname grafana hostn…

Springboot下使用Redis管道(pipeline)进行批量操作

之前有业务场景需要批量插入数据到Redis中&#xff0c;做的过程中也有一些感悟&#xff0c;因此记录下来&#xff0c;以防忘记。下面的内容会涉及到 分别使用for、管道处理批量操作&#xff0c;比较其所花费时间。 分别使用RedisCallback、SessionCallback进行Redis pipeline …