前言

本次实践旨在提高自己在以下方面的动手能力:

  • 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字段,专设范围查询

在员工的操作权限授予部分,我遇到了一个疑难点,那就是:如何使用正则表达式来为SpringMVC的拦截器设置拦截URI,关于这部分内容,可以参看我的另一篇博客

然后,在实现客户端功能上,由于黑马程序员提供的代码是h5,而我们也不想再去微信小程序里调试,所以继续坚持利用h5来实现

那么为了项目的完整性,有两个外部功能需要额外的技术支持:

  • h5支付
  • 扫二维码访问网站

这两个是独立于当前客户端项目的,所以我们先实现基本的客户端功能,再来考虑这两个外部功能的支持

客户端基本需求已完成,收获的知识点如下,读者可自行阅读:

  • 为什么仅通过模糊匹配就可以完成绝大多数条件查询了?来看看Mysql的新特性
  • java8新特性,stream()流的巧妙使用
  • javaDebug记录11-20条
  • Spring上传与下载文件工具类,自动注入即可使用

在进一步完善付款与回执功能前,我们首先要解决之前遗留的一个问题:

  • 问题:客户端与服务端用户登录校验的区分
  • 解决思路:将存在localStorage中的用户信息做区分,客户端叫做userInfo,服务端叫做employeeInfo。此时,两者在发起各自的ajax请求时,会从不同的info中读取token(如果未登录则对应info不存在,无法获取token),从而避免了共用token的问题

下一步工作:

  • 增设功能:前端要区分用户是外送还是堂食(不需要额外的API,只需要多增加一种订单状态:堂食)
  • 在沙箱支付宝环境下,完成整体功能的开发
  • 构造API文档,要求完整匹配美其乐小程序的需求

瑞吉外卖项目实践(个人精简升级版)相关推荐

  1. 瑞吉外卖项目(一)软件开发流程设计及环境搭建

    第一章 软件开发整体介绍 软件开发流程 软件开发流程 需求分析:产品原型.需求规格说明书 设计:产品文档,ui界面设计,概要设计,详细设计,数据库设计 编码:项目代码,单元测试 测试:测试用例,测试报 ...

  2. 瑞吉外卖项目剩余功能补充

    目录 菜品启售和停售 菜品批量启售和批量停售 菜品的批量删除 菜品删除逻辑优化 套餐管理的启售,停售 套餐管理的修改 后台按条件查看和展示客户订单 手机端减少购物车中的菜品或者套餐数量(前端展示有一点 ...

  3. 黑马瑞吉外卖项目开发笔记

    目录 软件开发整体介绍 开发流程 角色分工 软件环境 瑞吉外卖项目介绍 项目介绍 产品原型展示 技术选型 功能架构 角色 开发环境搭建 数据库环境搭建 Maven环境搭建 1.直接创建maven项目( ...

  4. 瑞吉外卖项目 基于spring Boot+mybatis-plus开发 超详细笔记,有源码链接

    本项目是基于自学b站中 黑马程序员 的瑞吉外卖项目:视频链接: 黑马程序员Java项目实战<瑞吉外卖>,轻松掌握springboot + mybatis plus开发核心技术的真java实 ...

  5. 瑞吉外卖项目day01

    一.软件开发整体介绍 1.1 软件开发流程 需求分析:产品原型.需求规格说明书 设计:产品文档.UI界面设计.概要设计.详细设计.数据库设计 编码:项目代码,是单元测试 上线运维:软件环境安装.配置 ...

  6. 瑞吉外卖项目重难点及易错点知识点总结

    本文是对b站黑马程序员瑞吉外卖项目的总结,实现流程以及简单部分不做详解,重点归纳难点以及易错点.(前面是对项目的介绍,可以直接略过 看第四点总结) 视频链接:https://www.bilibili. ...

  7. 瑞吉外卖项目学习笔记:P1-项目介绍

    瑞吉外卖项目介绍 1.项目介绍 1.1开发步骤 1.2产品原型 1.3技术选型 1.4项目功能架构 1.5角色 1.项目介绍 1.1开发步骤 实现基本要求,移动端应用通过H5实现,用户可通过浏览器访问 ...

  8. 云服务器部署SpringBoot工程-瑞吉外卖项目

    Linux部署SpringBoot工程-瑞吉外卖项目 云平台:阿里云 终端软件:Tabby Terminal 部署项目项目: SpringBoot-瑞吉外卖 自己第一次从本地web项目搭建到云端部署发 ...

  9. 瑞吉外卖项目——瑞吉外卖

    软件开发整体介绍 软件开发流程 需求分析:产品原型.需求规格说明书 设计:产品文档.UI界面设计.概要设计.详细设计.数据库设计 编码:项目代码.单元测试 测试:测试用例.测试报告 上线运维:软件环境 ...

最新文章

  1. python函数模块概念_python中模块和包的概念
  2. 【Java】 剑指offer(40) 最小的k个数
  3. ubuntu下安装Firefox中国版解决Ubuntu与Windows下Firefox账号同步问题(已解决)
  4. ReentrantLock实现原理深入探究
  5. vuejs实现本地数据的筛选分页
  6. Python 网络爬虫笔记9 -- Scrapy爬虫框架
  7. html5 浏览器退回事件,html5的pushstate以及监听浏览器返回事件的实现
  8. 动感灯箱制作流程培训_从事广告行业20年老师傅,揭秘广告牌类型和制作工艺流程 !...
  9. spring 使用XML配置开发Spring AOP
  10. 用 Mac 制作手写签名,没打印机也能搞事
  11. CF1228——记一次和紫名失之交臂的CF
  12. matlab学习路线
  13. R语言怎么导入表格画图_立创EDA画图不求人18 | 视频教程 | 原理图横向纵向切换...
  14. BFD和NQA技术原理
  15. 自控原理学习笔记---控制系统稳定性分析
  16. 使用this.$refs.XXX修改某个元素样式并添加点击事件
  17. OpenXML:C#操作PPT文档
  18. 开源公告|微信云端深度学习推理框架WeChat TFCC开源啦!
  19. at指令 meid_【技术分享】使用AT调制解调器命令解锁LG Android屏幕
  20. 【uni-app】uni-app 封装 uni.request 携带请求头

热门文章

  1. Android软件开发用什么语言?
  2. 几何画板常见问题解决方案
  3. win10 无法访问samba文件,提示SMB1是不安全协议解决方案
  4. 浏览器快速打开一个可编辑的文本输入域
  5. 央视就《新闻联播》“火炬手空手捐款”致歉
  6. 医学院交换去计算机学院,2017年北京协和医学院阜外心血管病医院823计算机原理考研强化模拟题...
  7. 如何制作实时库存报表
  8. 3万行代码硬撸一个一键发布文章工具,简直不要太好用,从此写文章,发文章,太简单了好伐
  9. 今日简报 每日精选12条新闻简报 每天一分钟 知晓天下事 4月13日
  10. C#理论 —— 文件操作、委托和事件