目录
1、项目介绍
2、功能介绍
3、技术选型
4、项目环境
5、项目拆解⭐
5.1、技术要点
5.2、微信支付
5.3、内网穿透
5.4、部署上云
6、心得体会
作者介绍:双非本科大三网络工程专业在读,阿里云专家博主,专注于Java领域学习,擅长web应用开发、数据结构和算法,初步涉猎Python人工智能开发和前端开发。
主页:@逐梦苍穹所属专栏:项目
⭐Gitee地址:Java服务端完整代码(个人手敲)
您的一键三连,是我创作的最大动力
黑马程序员的苍穹外卖项目是为餐饮企业(餐厅、饭店)定制的一款软件产品,包括"系统管理后台"和"小程序端应用"两部分。
其中系统管理后台主要提供给餐饮企业内部员工使用,可以对餐厅的分类、菜品、套餐、订单、员工等进行管理维护,对餐厅的各类数据进行统计,同时也可进行来单语音播报功能。
小程序端主要提供给消费者使用,可以在线浏览菜品、添加购物车、下单、支付、催单等。
接下来,通过功能架构图来展示管理端和用户端的具体业务功能模块。
1). 管理端功能
员工登录/退出、员工信息管理、分类管理、菜品管理、套餐管理、菜品口味管理、订单管理、数据统计、来单提醒。
模块 |
描述 |
登录/退出 |
内部员工必须登录后,才可以访问系统管理后台 |
员工管理 |
管理员可以在系统后台对员工信息进行管理,包含查询、新增、编辑、禁用等功能 |
分类管理 |
主要对当前餐厅经营的 菜品分类 或 套餐分类 进行管理维护, 包含查询、新增、修改、删除等功能 |
菜品管理 |
主要维护各个分类下的菜品信息,包含查询、新增、修改、删除、启售、停售等功能 |
套餐管理 |
主要维护当前餐厅中的套餐信息,包含查询、新增、修改、删除、启售、停售等功能 |
订单管理 |
主要维护用户在移动端下的订单信息, 包含查询、取消、派送、完成,以及订单报表下载等功能 |
数据统计 |
主要完成对餐厅的各类数据统计,如营业额、用户数量、订单等 |
2). 用户端功能
微信登录、收件人地址管理、用户历史订单查询、菜品规格查询、购物车功能、下单、支付、分类、菜品浏览。
模块 |
描述 |
登录/退出 |
用户需要通过微信授权后登录使用小程序进行点餐 |
点餐-菜单 |
在点餐界面需要展示出菜品分类/套餐分类, 并根据当前选择的分类加载其中的菜品信息, 供用户查询选择 |
点餐-购物车 |
用户选中的菜品就会加入用户的购物车, 主要包含 查询购物车、加入购物车、删除购物车、清空购物车等功能 |
订单支付 |
用户选完菜品/套餐后, 可以对购物车菜品进行结算支付, 这时就需要进行订单的支付 |
个人信息 |
在个人中心页面中会展示当前用户的基本信息, 用户可以管理收货地址, 也可以查询历史订单数据 |
关于本项目的技术选型,将会从"用户层、网关层、应用层、数据层"这几个方面进行介绍,主要用于展示项目中使用到的技术框架和中间件等。
用户层
本项目中在构建系统管理后台的前端页面,会用到H5、Vue.js、ElementUI、apache echarts(展示图表)等技术。
而在构建移动端应用时,我们会使用到微信小程序。
网关层
Nginx是一个服务器,主要用来作为Http服务器,部署静态资源,访问性能高。
在Nginx中还有两个比较重要的作用: 反向代理和负载均衡。
在进行项目部署时,要实现Tomcat的负载均衡,就可以通过Nginx来实现。
应用层
技术 |
描述 |
Spring Boot |
快速构建Spring项目,采用 "约定优于配置" 的思想,简化Spring项目的配置开发。 |
Spring MVC |
SpringMVC是spring框架的一个模块,springmvc和spring无需通过中间整合层进行整合。 |
Spring Task |
由Spring提供的定时任务框架。 |
HttpClient |
主要实现了对HTTP请求的发送。 |
Spring Cache |
由Spring提供的数据缓存框架。 |
JWT |
用于对应用程序上的用户进行身份验证的标记。 |
阿里云 OSS |
对象存储服务,在项目中主要存储文件,如图片等。 |
Swagger |
可以自动帮助开发人员生成接口文档,并对接口进行测试。 |
POI |
封装了对Excel表格的常用操作。 |
WebSocket |
一种通信网络协议,使客户端和服务器之间的数据交换更加简单。用于来单、催单功能。 |
数据层
技术 |
描述 |
MySQL |
关系型数据库, 本项目的核心业务数据都会采用MySQL进行存储。 |
Redis |
基于key-value格式存储的内存数据库, 访问速度快, 经常使用它做缓存。 |
Mybatis |
本项目持久层将会使用Mybatis开发。 |
pagehelper |
分页插件。 |
spring data redis |
简化java代码操作Redis的API。 |
工具
工具 |
描述 |
git |
版本控制工具,在团队协作中,使用该工具对项目中的代码进行管理。 |
maven |
项目构建工具。 |
junit |
单元测试工具,开发人员功能实现完毕后,需要通过junit对功能进行单元测试。 |
postman |
接口测试工具,模拟用户发起的各类HTTP请求,获取对应的响应结果。 |
前端使用的是打包好的前端工程,用nginx服务器启动。
后端是基于SpringBoot2.X版本的Java工程,使用的Java版本是17。
关系型数据库使用的是 MySQL。
非关系型数据库使用的是redis。
后端接口文档是Swagger。
重点是放在Java后端(详见后续分析),前端都是使用原有的代码进行运行。
Java后端使用的是maven分模块开发,分为common、pojo和server模块。
MySQL数据库共计有11个表单
截至目前,项目的git提交记录如下:
我把这个项目的详细内容,拆解成了16篇博客文章,我会如数列出来。
由于内容实在太多,这里不进行详细论述。
下面附上相应的文章详解链接,这都是我个人独立编写的项目技术文章。
原创不易,烦请一键三连支持一下收藏起来慢慢看
技术要点名称 |
对应的文章链接 |
数据库设计 |
软件开发项目的数据库设计 | 如何从零到一完成对相关表单的设计 |
层级结构⭐ |
[毕设项目-苍穹外卖]详解项目的代码层级结构 |
md5加密 |
Java实现md5加密 |
JWT令牌⭐ |
JWT令牌 | 一个区别于cookie/session的更安全的校验技术 |
接口文档 |
利用Knife4j注解实现Java生成接口文档 |
分页查询 |
PageHelper分页插件-以三层架构模型开发为例 |
公共字段填充 |
利用Spring AOP实现数据库表单公共字段填充 | JoinPoint的应用 |
对象存储服务 |
Java利用阿里云OSS/本地存储实现文件上传功能 |
redis |
redis常用命令及其Java操作 |
HttpClient |
HttpClient | 支持 HTTP 协议的客户端编程工具包 |
微信登录 |
微信小程序登录流程 |
百度地图 |
百度地图接口 | 实现校验收货地址是否超出配送范围 |
SpringTask |
Spring Task定时任务 |
WebSocket |
WebSocket | 基于TCP的全双工通信网络协议 |
可视化图表库⭐ |
Apache ECharts | 一个数据可视化图表库 |
绘制图表 |
使用Apache ECharts同时绘制多个统计图表 |
Apache POI |
Apache POI | Java操作Excel文件 |
上面的链接中,还有一个未提到的,那就是:微信支付。
要实现微信支付就需要注册微信支付的一个商户号,这个商户号是必须要有一家企业并且有正规的营业执照。
只有具备了这些资质之后,才可以去注册商户号,才能开通支付权限。
个人并不具备这种资质
微信支付这里简单介绍一下,了解了解流程就可以了。
这个项目选择的是小程序支付。
官网提供的资料参考:产品中心 - 微信支付商户平台
小程序支付资料参考:产品介绍-小程序支付 | 微信支付商户平台文档中心
微信支付产品:
微信支付接入流程:
内网穿透的详细介绍分析,以及进行内网穿透所使用的免费工具,烦请移步看我的这篇博客文章:
链接:https://blog.csdn.net/qq_60735796/article/details/136107877 | 两个免费的内网穿透工具
下面在这里做简要介绍。
内网穿透是用于没有云服务器、但是又希望别人能访问到我们本地的项目的情况,这种情况下,通过内网穿透来获得一个临时的可访问的域名,不失为一个不错的选择。
前面提到没有云服务器,但是想让别人访问本地项目的情况下,使用的是内网穿透;
那么这一部分就是分析如何在云服务器上面,完整部署项目所需要的各项服务(以阿里云为例)。
具体需要的
下面做一下简要介绍。
对于一个Java项目,想要部署到云服务器上面,需要的服务与我们在本地运行的服务是一致的。
mysql、redis、jdk、tomcat、nginx等都是必须的。
具体如何部署,涉及到的内容很多,这里也不详细赘述,烦请移步看我这篇博客文章:
链接:https://blog.csdn.net/qq_60735796/article/details/135885241 | Java项目从0到1部署到云服务器
由于平时要上课和完成学业任务,这个Java项目也是断断续续的做了几个月,在期末的时候做完了;
但是由于是第一个综合项目,所以里面有一些东西,在当时也只是过了一遍;
趁着寒假的时间,陆陆续续整理了一下整套流程及思路,把相关的技术要点重新梳理一遍,目前就算是对整个项目的流程以及技术要点都比较熟悉,具体怎么配合工作也算比较清楚了。
这个项目的完整度算是比较不错的,自己在完成了Java后端的同时,也对前端vue工程有了一些了解,还自己学习了解了Linux服务器部署Java项目的整套流程。
做完了这个项目,我了解到了:
①在前后端分离的开发模式中,是如何协调的,如何测试的;
②前后端交互中的数据格式也是遵循一定规范的,这相较于传统的JSP不分离开发模式,显得更为规范,也降低了项目前后端代码的耦合度,使得前后端分工更加明确;
③了解到了一些新的技术,比如对象存储,百度地图接口调用,微信登录详细流程等等;
④同时也对整套的JavaSE和JavaWeb有了更为深刻的认识。
⑤深刻理解了实体类pojo当中的entity、dto和vo的区别,以及这三者在项目当中充当什么样的角色和作用。
总而言之,三言两语暂时说不完,有些只可意会不可言传。
那么对于这第一个综合项目,就算是告一段落了。
下一阶段的内容就是,以学习微服务为主线,然后陆续刷LeetCode算法题,最后抽时间继续补充人工智能的基础知识。
大家可以移步指点一下相关专栏
JavaEE:https://blog.csdn.net/qq_60735796/category_12340900.html
数据结构与算法:https://blog.csdn.net/qq_60735796/category_12222712.html
人工智能:https://blog.csdn.net/qq_60735796/category_12365436.html
大家共同监督,共同进步