瑞吉外卖项目实践(个人精简升级版)
前言
本次实践旨在提高自己在以下方面的动手能力:
- Spring,SpringMVC,SpringBoot
- Mybatis,MybatisPlus
- IO,并发式编程
因此,在原有项目需求上,会有以下方面的额外考量:
- 参照Spring,SpringBoot的面试难题,为项目设计“炫技点”
- 综合运用XML,注解以及MybatisPlus三种方式,实现数据库读取
- 引入对IO的操作以及并发式编程
如果读者也有类似的想法,不妨继续读下去
正文
项目共分为两期:
- 一期:根据H5设计的前端实现客户端服务器功能,根据管理页面实现管理端服务器功能
- 二期:移植H5前端至微信小程序,将登陆验证由手机号+验证码改为微信验证
一期工程中,客户端服务器的主要功能有:
- 登录功能
- 用户发起验证码请求
- 请求数据:手机号
- 响应数据:6位验证码
- PS1:验证码存于Redis中,TTL为60s,key为手机号,value为验证码
- 用户发起登录请求
- 请求数据:手机号+验证码
- 响应数据:token
- PS1:token存于Redis中,TTL为30min,key为token,value为手机号
- PS2:token的存入位于数据库操作(读取用户信息,不存在则创建)后,两者进行事务管理保证一致性
- 用户发起验证码请求
- 菜品浏览
- 获取分类信息
- 请求数据:无
- 响应数据:Result. <List>分类条目
- 获取购物车信息
- 请求数据:无
- 响应数据:Result. <List>购物车条目
- 获取菜品信息
- 请求数据:{分类ID, Status}
- 响应数据:Result. <DishList>菜品条目
- 获取套餐信息
- 请求数据:{分类ID, Status}
- 响应数据:Result. <DishList>套餐条目
- 获取分类信息
- 购物车
- 添加点餐条目
- 请求数据:<DishParams>购物车条目
- 响应数据:Result. 无特殊Data
- 修改点餐条目
- 请求数据:<DishParams>购物车条目
- 响应数据:Result. 无特殊Data
- 删除点餐条目
- 请求数据:<DishDeleteParams>购物车条目
- 响应数据:Result. 无特殊Data
- PS1:购物车条目信息存于Redis,TTL为30min
- 添加点餐条目
- 下单
- 提交订单
- 请求数据:<OrderParams>订单条目
- 响应数据:Result. 无特殊Data
- 提交订单
- 拦截功能
- 登录状态拦截
- 请求数据:token
- 响应数据 :对应请求或拦截
- 登录状态拦截
- 省略部分
- 地址
- 历史订单
// DishParams
let params = {amount:item.price/100,//金额dishFlavor:item.dishFlavor,//口味 如果没有传undefineddishId:undefined,//菜品idsetmealId:undefined,//套餐idname:item.name,image:item.image}
// DishDeleteParams
let params = {dishId:item.dishId,setmealId:item.setmealId,}
// OrderParams
const params = {remark:this.note,payMethod:1,addressBookId:this.address.id}
管理端服务器的主要功能有:
- 登录功能
- 用户发起登录请求
- 请求数据:用户名+密码
- 响应数据:token
- PS1:token存于Redis中,TTL为30min,key为token,value为用户名
- 用户发起登录请求
- 数据库对应表格的增删改查基本功能
- 分类管理(省略详细描述)
- 对应表格:category
- 菜品管理(省略详细描述)
- 菜品本身对应表格:dish
- 菜品口味对应表格:dish_flavor
- 套餐管理(省略详细描述)
- 对应表格:setmeal
- 员工管理(省略详细描述)
- 对应表格:employee
- 分类管理(省略详细描述)
- 根据登录成员,授予不同的操作权限
- 登陆成功后,授予token
- 再次访问时,服务器根据token判断用户的权限等级,返回可显示的类别:menuList
- 前端接收返回数据,更正menuList
管理端服务器的率先实现
之所以先实现管理端,有两个原因
- 通过管理端可制造相关的数据信息,存入Mysql中,方便客户端的查询
- 管理端是一个比较简单的数据库调用,实现较为简单。而且使用不涉及兵法式编程,不需要过多考虑性能调优
前期准备:
- 安装Redis服务
- 初始化数据库表
- 利用templete,生成所有表格的entity, mapper, service模板文件(非常方便,建议都这么来做)[1]
- 前端代码分离,resources下的静态资源不再由tomcat管理,而是交给nginx服务器
这里需要着重介绍一下nginx服务器进行前后端分离的相关工作,它涉及nginx两个精妙的设计:
- nginx既可以配置静态资源的本地映射信息,也可以配置动态资源的反向代理
- 如果配有多个location,越精确的匹配范式,其匹配的优先级越高
因此,一个简洁的前后端分离思路是:
- 配置一个精确的静态资源映射,凡是符合的静态资源均优先由nginx完成匹配,并从本地路径中获取
- 配置一个模糊或者有别于静态路径的动态资源反向代理,凡是未被静态资源匹配的访问,由nginx代理至对应路径
location / {proxy_pass http://localhost:8080/;# 模糊的动态资源反向代理,优先级低于静态资源访问
}location /www {root [classpath]:/resources; # 此处配置要映射的静态资源的本地绝对路径index index.html index.htm;# 上述配置在浏览器访问[nginx-server-ip]:[port]/www时,便会自动去nginx服务器的[classpath]:/resources/www寻找/www之后的请求文件
}
登录功能的实现并没有太多的细节想要分享,也没有做出创新的内容,略过
在使用自己开发的CURD模板生成了员工,分类,菜品和套餐的基础增删改查操作后,接下来剩下的工作为:
- 员工管理
- 操作权限授予
- 菜品管理
- 嵌入根据菜品分类id的查询
- 套餐管理
- 嵌入根据套餐分类id的查询
- 模板修正
- 对新增和修改业务,在数据库未对username或name开启
unique_key
的情况下,提供可选功能:如果存在name或username(后者优先级高于前者)字段,为该字段设定重复检测功能 - 增设批量删除条目,批量修改状态字段功能
- 优化分页查询的条件单,允许模糊查询 + 对于begenTime和endTime字段,专设范围查询
- 对新增和修改业务,在数据库未对username或name开启
在员工的操作权限授予部分,我遇到了一个疑难点,那就是:如何使用正则表达式来为SpringMVC的拦截器设置拦截URI,关于这部分内容,可以参看我的另一篇博客
然后,在实现客户端功能上,由于黑马程序员提供的代码是h5,而我们也不想再去微信小程序里调试,所以继续坚持利用h5来实现
那么为了项目的完整性,有两个外部功能需要额外的技术支持:
- h5支付
- 扫二维码访问网站
这两个是独立于当前客户端项目的,所以我们先实现基本的客户端功能,再来考虑这两个外部功能的支持
客户端基本需求已完成,收获的知识点如下,读者可自行阅读:
- 为什么仅通过模糊匹配就可以完成绝大多数条件查询了?来看看Mysql的新特性
- java8新特性,stream()流的巧妙使用
- javaDebug记录11-20条
- Spring上传与下载文件工具类,自动注入即可使用
在进一步完善付款与回执功能前,我们首先要解决之前遗留的一个问题:
- 问题:客户端与服务端用户登录校验的区分
- 解决思路:将存在localStorage中的用户信息做区分,客户端叫做userInfo,服务端叫做employeeInfo。此时,两者在发起各自的ajax请求时,会从不同的info中读取token(如果未登录则对应info不存在,无法获取token),从而避免了共用token的问题
下一步工作:
- 增设功能:前端要区分用户是外送还是堂食(不需要额外的API,只需要多增加一种订单状态:堂食)
- 在沙箱支付宝环境下,完成整体功能的开发
- 构造API文档,要求完整匹配美其乐小程序的需求
瑞吉外卖项目实践(个人精简升级版)相关推荐
- 瑞吉外卖项目(一)软件开发流程设计及环境搭建
第一章 软件开发整体介绍 软件开发流程 软件开发流程 需求分析:产品原型.需求规格说明书 设计:产品文档,ui界面设计,概要设计,详细设计,数据库设计 编码:项目代码,单元测试 测试:测试用例,测试报 ...
- 瑞吉外卖项目剩余功能补充
目录 菜品启售和停售 菜品批量启售和批量停售 菜品的批量删除 菜品删除逻辑优化 套餐管理的启售,停售 套餐管理的修改 后台按条件查看和展示客户订单 手机端减少购物车中的菜品或者套餐数量(前端展示有一点 ...
- 黑马瑞吉外卖项目开发笔记
目录 软件开发整体介绍 开发流程 角色分工 软件环境 瑞吉外卖项目介绍 项目介绍 产品原型展示 技术选型 功能架构 角色 开发环境搭建 数据库环境搭建 Maven环境搭建 1.直接创建maven项目( ...
- 瑞吉外卖项目 基于spring Boot+mybatis-plus开发 超详细笔记,有源码链接
本项目是基于自学b站中 黑马程序员 的瑞吉外卖项目:视频链接: 黑马程序员Java项目实战<瑞吉外卖>,轻松掌握springboot + mybatis plus开发核心技术的真java实 ...
- 瑞吉外卖项目day01
一.软件开发整体介绍 1.1 软件开发流程 需求分析:产品原型.需求规格说明书 设计:产品文档.UI界面设计.概要设计.详细设计.数据库设计 编码:项目代码,是单元测试 上线运维:软件环境安装.配置 ...
- 瑞吉外卖项目重难点及易错点知识点总结
本文是对b站黑马程序员瑞吉外卖项目的总结,实现流程以及简单部分不做详解,重点归纳难点以及易错点.(前面是对项目的介绍,可以直接略过 看第四点总结) 视频链接:https://www.bilibili. ...
- 瑞吉外卖项目学习笔记:P1-项目介绍
瑞吉外卖项目介绍 1.项目介绍 1.1开发步骤 1.2产品原型 1.3技术选型 1.4项目功能架构 1.5角色 1.项目介绍 1.1开发步骤 实现基本要求,移动端应用通过H5实现,用户可通过浏览器访问 ...
- 云服务器部署SpringBoot工程-瑞吉外卖项目
Linux部署SpringBoot工程-瑞吉外卖项目 云平台:阿里云 终端软件:Tabby Terminal 部署项目项目: SpringBoot-瑞吉外卖 自己第一次从本地web项目搭建到云端部署发 ...
- 瑞吉外卖项目——瑞吉外卖
软件开发整体介绍 软件开发流程 需求分析:产品原型.需求规格说明书 设计:产品文档.UI界面设计.概要设计.详细设计.数据库设计 编码:项目代码.单元测试 测试:测试用例.测试报告 上线运维:软件环境 ...
最新文章
- python函数模块概念_python中模块和包的概念
- 【Java】 剑指offer(40) 最小的k个数
- ubuntu下安装Firefox中国版解决Ubuntu与Windows下Firefox账号同步问题(已解决)
- ReentrantLock实现原理深入探究
- vuejs实现本地数据的筛选分页
- Python 网络爬虫笔记9 -- Scrapy爬虫框架
- html5 浏览器退回事件,html5的pushstate以及监听浏览器返回事件的实现
- 动感灯箱制作流程培训_从事广告行业20年老师傅,揭秘广告牌类型和制作工艺流程 !...
- spring 使用XML配置开发Spring AOP
- 用 Mac 制作手写签名,没打印机也能搞事
- CF1228——记一次和紫名失之交臂的CF
- matlab学习路线
- R语言怎么导入表格画图_立创EDA画图不求人18 | 视频教程 | 原理图横向纵向切换...
- BFD和NQA技术原理
- 自控原理学习笔记---控制系统稳定性分析
- 使用this.$refs.XXX修改某个元素样式并添加点击事件
- OpenXML:C#操作PPT文档
- 开源公告|微信云端深度学习推理框架WeChat TFCC开源啦!
- at指令 meid_【技术分享】使用AT调制解调器命令解锁LG Android屏幕
- 【uni-app】uni-app 封装 uni.request 携带请求头
热门文章
- Android软件开发用什么语言?
- 几何画板常见问题解决方案
- win10 无法访问samba文件,提示SMB1是不安全协议解决方案
- 浏览器快速打开一个可编辑的文本输入域
- 央视就《新闻联播》“火炬手空手捐款”致歉
- 医学院交换去计算机学院,2017年北京协和医学院阜外心血管病医院823计算机原理考研强化模拟题...
- 如何制作实时库存报表
- 3万行代码硬撸一个一键发布文章工具,简直不要太好用,从此写文章,发文章,太简单了好伐
- 今日简报 每日精选12条新闻简报 每天一分钟 知晓天下事 4月13日
- C#理论 —— 文件操作、委托和事件