源码:链接:https://pan.baidu.com/s/13TgBu4iti56UEVNcfiAlSA?pwd=5zjz
提取码:5zjz
视频:https://www.bilibili.com/video/BV13a411q753?spm_id_from=333.999.0.0
资料:https://www.aliyundrive.com/s/DS2XMVojBjH
部署
本项目(瑞吉外卖)是专门为餐饮企业(餐厅、饭店)定制的一款软件产品,包括系统管理后台和移动端应用两部分。
其中系统管理后台主要提供给餐饮企业内部员工使用,可以对餐厅的分类、菜品、套餐、订单、员工等进行管理维护。
移动端应用主要提供给消费者使用,可以在线浏览菜品、添加购物车、下单等。
1).用户层
本项目中在构建系统管理后台的前端页面,会用到H5、Vue.js、ElementUI等技术。
构建移动端应用时,会使用到微信小程序。
2).网关层
Nginx是一个服务器,主要用来作为Http服务器,部署静态资源,访问性能高。
在Nginx中还有两个比较重要的作用: 反向代理和负载均衡。
在进行项目部署时,要实现Tomcat的负载均衡,就可以通过Nginx来实现。
3).应用层
SpringBoot: 快速构建Spring项目, 采用 “约定优于配置” 的思想, 简化Spring项目的配置开发。
Spring: 统一管理项目中的各种资源(bean), 在web开发的各层中都会用到。
SpringMVC:SpringMVC是spring框架的一个模块,springmvc和spring无需通过中间整合层进行整合,可以无缝集成。
SpringSession: 主要解决在集群环境下的Session共享问题。
lombok:能以简单的注解形式来简化java代码,提高开发人员的开发效率。
Swagger: 可以自动的帮助开发人员生成接口文档,并对接口进行测试。
4).数据层
MySQL: 关系型数据库, 本项目的核心业务数据都会采用MySQL进行存储。
MybatisPlus: 本项目持久层将会使用MybatisPlus来简化开发, 基本的单表增删改查直接调用框架提供的方法即可。
Redis: 基于key-value格式存储的内存数据库, 访问速度快, 经常使用它做缓存(降低数据库访问压力, 提供访问效率), 在性能优化中会使用。
5).工具
git: 版本控制工具, 在团队协作中, 使用该工具对项目中的代码进行管理。
maven: 项目构建工具。
junit:单元测试工具,开发人员功能实现完毕后,需要通过junit对功能进行单元测试。
移动端前台功能
手机号登录 , 微信登录 , 收件人地址管理 , 用户历史订单查询 , 菜品规格查询 , 购物车功能 , 下单 , 分类及菜品浏览。
系统管理后台功能
管理端
餐饮企业内部员工使用。 主要功能有:
用户端
移动端应用主要提供给消费者使用。主要功能有:
角色
第一部分:瑞吉外卖项目
1 环境搭建
①数据库搭建
②项目搭建
后端项目
前端静态页面(WebMvcConfig.class 静态资源映射)
2 后台系统登录/退出功能
登录页面存放目录 /resources/backend/page/login/login.html
登录逻辑:
登录添加一个过滤器或拦截器,判断用户是否已经完成登录,如果没有登录则返回提示信息,跳转到登录页面。
过滤器LoginCheckFilter处理逻辑如下:
退出逻辑:
3 员工管理 employee(员工表)
3.1 新增员工
3.2 员工信息分页查询
3.3 启用、禁用员工账号
3.4 编辑工具信息
4 公共字段自动填充
问题:
步骤:
问题:如何获取当前登录用户的id?
ThreadLocal
ThreadLocal常用方法:
问题:如何获取当前登录用户的id?
5 分类管理 category(分类表)
5.1 新增分类
5.2 分类信息分页查询
5.3 删除分类
5.4 修改分类
5.5 列表查询
6 菜品管理
6.1 文件上传下载
文件上传时,对页面的form表单有如下要求:
组件:
上传逻辑:
通过浏览器进行文件下载,通常有两种表现形式:
下载逻辑:
上传和下载逻辑优化:minio
6.2 新增菜品
新增菜品操作了两张表,那么为了保证数据的一致性,需要在方法上加上注解 @Transactional来控制事务。
6.3 菜品信息分页查询
6.4 修改菜品
6.5 删除菜品
6.6 菜品批量删除
6.7 菜品停售
6.8 菜品批量停售
6.9 列表查询
7 新增套餐
涉及的表格
7.1 新增套餐
7.2 分页查询套餐
7.3 修改套餐
7.4 删除套餐
7.5 菜品停售
7.6 根据条件查询套餐数据
8 移动端开发
8.1 阿里云短信服务介绍
步骤:
代码开发官方文档: https://help.aliyun.com/product/44282.html?spm=5176.12212571.help.dexternal.57a91cbewHHjKq
8.1 短信发送验证码
为了方便用户登录,移动端通常都会提供通过手机验证码登录的功能。手机验证码登录有如下优点:
8.2 手机验证码登录 user表
登录流程:
8.3 地址簿管理 address_book表
8.3.1 新增地址
8.3.2 地址列表查询
8.3.3 设置默认地址
8.3.4 编辑地址
8.3.5 删除地址
8.4 菜品展示
8.5 购物车 shopping_cart表
8.5.1 添加购物车
8.5.2 查询购物车
8.5.3 清空购物车
8.5.4 减少购物车数量
orders表和order_detail表
8.6 下单 orders表,order_detail表
8.6.1 下单
8.6.2 查看列表
8.6.3 修改状态
8.6.4 再来一单
8.7 退出
第二部分: 瑞吉外卖项目优化篇
问题:用户数据量大,系统访问量大,频繁访问数据库,系统性能下降,用户体验差
1 缓存优化
1.1环境搭建
导入相关坐标:
配置文件:
配置类:RedisConfig
模板:RedisUtil
1.2 缓存短信验证
1.3 缓存菜品数据
1.4 Spring Cache
1.5 Spring Cache
Spring Cache是一个框架,实现了基于注解的缓存功能
针对不同的缓存技术需要实现不同的CacheManager
注解
坐标:
application.yml
1.6 缓存套餐数据
2 读写分离
问题:读写所有压力都有一台数据库承担,压力大,数据库服务器磁盘损坏则数据丢失,单点故障
2.1 MySQL主从复制
MySQL主从复制是一个异步的复制过程,底层是数据库自带的二进制日志功能。
即一台或多台MySQL数据库从另一台MySQL数据库进行日志的复制,然后再解析日志并应用到自身,最终实现从库和主库的数据保持一致
过程:
资料:
master配置
slave配置
2.2 读写分离
Sharding-JDBC:客户端直连数据库,以jar包形式提供服务,无需额外部署和依赖
-
适用于任何基于JDBC的ORM框架,如JPA,Hibernate,Mybatis,JDBC,Spring JDBC Template
-
支持任何第三方的数据路连接池,如DBCP,C3P0,Druid
-
支持任意实现JDBC规范的数据库
使用:
2.3 Nginx
Nginx是一款轻量级web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器。
稳定版 1.20.1
下载地址:http://nginx.org/en/download.html
安装步骤:
Nginx目录结构:
常用命令:
nginx.conf
静态资源:
反向代理:
负载均衡: