发布时间:2026/8/21 18:27:58
【 苍穹外卖day1 | 项目准备 】 前言这是由本人二刷该项目结合老师笔记的个人总结本博客梳理项目核心内容助力大家学习苍穹外卖项目。全套资料位于文章末尾自取即可思维导图1. 苍穹外卖项目简介本项目苍穹外卖是专门为餐饮企业餐厅、饭店定制的一款软件产品包括系统管理后台和小程序端应用两部分。系统管理后台:主要提供给餐饮企业内部员工使用可以对餐厅的分类、菜品、套餐、订单、员工等进行管理维护对餐厅的各类数据进行统计同时也可进行来单语音播报功能。小程序端:主要提供给消费者使用可以在线浏览菜品、添加购物车、下单、支付、催单等。2. 苍穹外卖项目详细介绍2.1 项目介绍我们将从项目简介、产品原型、技术选型三个方面来了解苍穹外卖这个项目。接下来通过功能架构图来展示管理端和用户端的具体业务功能模块。1). 管理端功能员工登录/退出 , 员工信息管理 , 分类管理 , 菜品管理 , 套餐管理 , 菜品口味管理 , 订单管理 数据统计来单提醒。2). 用户端功能微信登录 , 收件人地址管理 , 用户历史订单查询 , 菜品规格查询 , 购物车功能 , 下单 , 支付、分类及菜品浏览。2.2 产品原型产品原型用于展示项目的业务功能一般由产品经理进行设计。注意事项产品原型主要用于展示项目的功能并不是最终的页面效果。以下是两份产品原型。管理端原型图用户端原型图1). 管理端餐饮企业内部员工使用。 主要功能有:模块描述登录/退出内部员工必须登录后,才可以访问系统管理后台员工管理管理员可以在系统后台对员工信息进行管理包含查询、新增、编辑、禁用等功能分类管理主要对当前餐厅经营的 菜品分类 或 套餐分类 进行管理维护 包含查询、新增、修改、删除等功能菜品管理主要维护各个分类下的菜品信息包含查询、新增、修改、删除、启售、停售等功能套餐管理主要维护当前餐厅中的套餐信息包含查询、新增、修改、删除、启售、停售等功能订单管理主要维护用户在移动端下的订单信息包含查询、取消、派送、完成以及订单报表下载等功能数据统计主要完成对餐厅的各类数据统计如营业额、用户数量、订单等2). 用户端移动端应用主要提供给消费者使用。主要功能有:模块描述登录/退出用户需要通过微信授权后登录使用小程序进行点餐点餐-菜单在点餐界面需要展示出菜品分类/套餐分类, 并根据当前选择的分类加载其中的菜品信息, 供用户查询选择点餐-购物车用户选中的菜品就会加入用户的购物车, 主要包含 查询购物车、加入购物车、删除购物车、清空购物车等功能订单支付用户选完菜品/套餐后, 可以对购物车菜品进行结算支付, 这时就需要进行订单的支付个人信息在个人中心页面中会展示当前用户的基本信息, 用户可以管理收货地址, 也可以查询历史订单数据2.3技术选型老师总结关于本项目的技术选型, 我们将会从 用户层、网关层、应用层、数据层 这几个方面进行介绍主要用于展示项目中使用到的技术框架和中间件等。1). 用户层本项目中在构建系统管理后台的前端页面我们会用到H5、Vue.js、ElementUI、apache echarts(展示图表)等技术。而在构建移动端应用时我们会使用到微信小程序。2). 网关层Nginx是一个服务器主要用来作为Http服务器部署静态资源访问性能高。在Nginx中还有两个比较重要的作用 反向代理和负载均衡 在进行项目部署时要实现Tomcat的负载均衡就可以通过Nginx来实现。3). 应用层技术 / 框架说明SpringBoot快速构建 Spring 项目简化 Spring 项目的开发。SpringMVCSpring 框架的一个模块与 Spring 无缝集成无需中间整合层。Spring Task由 Spring 提供的定时任务框架。httpclient主要实现对HTTP 请求的发送。Spring Cache由 Spring 提供的数据缓存框架。JWT用于对应用程序上的用户进行身份验证的标记。阿里云 OSS对象存储服务在项目中主要用于存储文件如图片等。Swagger可自动帮助开发人员生成接口文档并支持对接口进行测试。POI封装了对 Excel 表格的常用操作。WebSocket一种通信网络协议简化客户端和服务器之间的数据交换4). 数据层MySQL关系型数据库, 本项目的核心业务数据都会采用MySQL进行存储。Redis基于key-value格式存储的内存数据库, 访问速度快, 经常使用它做缓存。Mybatis本项目持久层将会使用Mybatis开发。pagehelper: 分页插件。spring data redis: 简化java代码操作Redis的API。5). 工具git:版本控制工具, 在团队协作中, 使用该工具对项目中的代码进行管理。maven:项目构建工具。junit单元测试工具开发人员功能实现完毕后需要通过junit对功能进行单元测试。postman: 接口测工具模拟用户发起的各类HTTP请求获取对应的响应结果。3. 开发环境搭建开发环境搭建主要包含前端环境和后端环境两部分。作为服务端开发工程师 我们课程学习的重心应该放在后端的业务代码上 前端的页面我们只需要导入资料中的nginx 前端页面的代码我们只需要能看懂即可。3.1 前端环境搭建1). 前端工程基于 nginx从资料中找到前端运行环境的nginx移动到非中文目录下。sky目录中存放了管理端的前端资源具体如下2). 启动nginx访问测试双击 nginx.exe 即可启动 nginx 服务访问端口号为 803.2 后端环境搭建3.2.1 熟悉项目结构1). 从当天资料中找到后端初始工程2). 用 IDEA 打开初始工程了解项目的整体结构对工程的每个模块作用说明序号名称说明1sky-take-outmaven父工程统一管理依赖版本聚合其他子模块2sky-common子模块存放公共类例如工具类、常量类、异常类等3sky-pojo子模块存放实体类、VO、DTO等4sky-server子模块后端服务存放配置文件、Controller、Service、Mapper等对项目整体结构了解后接下来我们详细分析上述的每个子模块sky-common:模块中存放的是一些公共类可以供其他模块使用分析sky-common模块的每个包的作用名称说明constant存放相关常量类context存放上下文类enumeration项目的枚举类存储exception存放自定义异常类json处理json转换的类properties存放SpringBoot相关的配置属性类result返回结果类的封装utils常用工具类sky-pojo:模块中存放的是一些entity、DTO、VO分析sky-pojo模块的每个包的作用名称说明Entity实体通常和数据库中的表对应DTO数据传输对象通常用于程序中各层之间传递数据VO视图对象为前端展示数据提供的对象POJO普通Java对象只有属性和对应的getter和settersky-server:模块中存放的是 配置文件、配置类、拦截器、controller、service、mapper、启动类分析sky-server模块的每个包的作用名称说明config存放配置类controller存放controller类interceptor存放拦截器类mapper存放mapper接口service存放service类SkyApplication启动类3.2.2 Git版本控制将本地文件推送到Git远程仓库Guo-chang16/sky-take-out1https://github.com/Guo-chang16/sky-take-out13.2.3 数据库环境搭建1.从资料中找到sky.sql2.执行sky.sql文件每张表的说明序号表名中文名1employee员工表2category分类表3dish菜品表4dish_flavor菜品口味表5setmeal套餐表6setmeal_dish套餐菜品关系表7user用户表8address_book地址表9shopping_cart购物车表10orders订单表11order_detail订单明细表3.2.4 前后端联调实现思路1.Controller层在sky-server模块中com.sky.controller.admin.EmployeeController//小知识点 //DTO中包含对应的前端传过来的json格式的数据 RequestBody EmployeeLoginDTO employeeLoginDTO/** * 登录 * * param employeeLoginDTO * return */ PostMapping(/login) public ResultEmployeeLoginVO login(RequestBody EmployeeLoginDTO employeeLoginDTO) { log.info(员工登录{}, employeeLoginDTO); //调用service方法查询数据库 Employee employee employeeService.login(employeeLoginDTO); //登录成功后生成jwt令牌 MapString, Object claims new HashMap(); claims.put(JwtClaimsConstant.EMP_ID, employee.getId()); String token JwtUtil.createJWT( jwtProperties.getAdminSecretKey(), jwtProperties.getAdminTtl(), claims); EmployeeLoginVO employeeLoginVO EmployeeLoginVO.builder() .id(employee.getId()) .userName(employee.getUsername()) .name(employee.getName()) .token(token) .build(); return Result.success(employeeLoginVO); }2.Service层在sky-server模块中com.sky.service.impl.EmployeeServiceImpl/** * 员工登录 * * param employeeLoginDTO * return */ public Employee login(EmployeeLoginDTO employeeLoginDTO) { String username employeeLoginDTO.getUsername(); String password employeeLoginDTO.getPassword(); //1、根据用户名查询数据库中的数据 Employee employee employeeMapper.getByUsername(username); //2、处理各种异常情况用户名不存在、密码不对、账号被锁定 if (employee null) { //账号不存在 throw new AccountNotFoundException(MessageConstant.ACCOUNT_NOT_FOUND); } //密码比对 if (!password.equals(employee.getPassword())) { //密码错误 throw new PasswordErrorException(MessageConstant.PASSWORD_ERROR); } if (employee.getStatus() StatusConstant.DISABLE) { //账号被锁定 throw new AccountLockedException(MessageConstant.ACCOUNT_LOCKED); } //3、返回实体对象 return employee; }3.Mapper层在sky-server模块中com.sky.mapper.EmployeeMapperpackage com.sky.mapper; import com.sky.entity.Employee; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Select; Mapper public interface EmployeeMapper { /** * 根据用户名查询员工 * param username * return */ Select(select * from employee where username #{username}) Employee getByUsername(String username); }3.3 完善登录功能解决思路将密码加密后存储提高安全性// TODO 后期需要进行md5加密然后再进行比对 password DigestUtils.md5DigestAsHex(password.getBytes());4. 导入接口文档4.1 前后端分离开发流程第一步定义接口确定接口的路径、请求方式、传入参数、返回参数。第二步前端开发人员和后端开发人员并行开发。第三步前后端人员进行连调测试。第四步提交给测试人员进行最终测试。5. Swagger5.1 介绍Swagger 是一个规范和完整的框架用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。它的主要作用是接口的文档在线自动生成功能测试5.2 使用步骤1.导入 knife4j 的maven坐标dependency groupIdcom.github.xiaoymin/groupId artifactIdknife4j-spring-boot-starter/artifactId /dependency2.在配置类中加入 knife4j 相关配置​ /** * 通过knife4j生成接口文档 * return */ Bean public Docket docket() { ApiInfo apiInfo new ApiInfoBuilder() .title(苍穹外卖项目接口文档) .version(2.0) .description(苍穹外卖项目接口文档) .build(); Docket docket new Docket(DocumentationType.SWAGGER_2) .apiInfo(apiInfo) .select() .apis(RequestHandlerSelectors.basePackage(com.sky.controller)) .paths(PathSelectors.any()) .build(); return docket; } ​3.设置静态资源映射否则接口文档页面无法访问/** * 设置静态资源映射 * param registry */ protected void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler(/doc.html).addResourceLocations(classpath:/META-INF/resources/); registry.addResourceHandler(/webjars/**).addResourceLocations(classpath:/META-INF/resources/webjars/); }4.访问测试思考通过 Swagger 就可以生成接口文档那么我们就不需要 Yapi 了1、Yapi 是设计阶段使用的工具管理和维护接口2、Swagger 在开发阶段使用的框架帮助后端开发人员做后端的接口测试5.3 常用注解通过注解可以控制生成的接口文档使接口文档拥有更好的可读性常用注解如下注解说明Api用在类上例如Controller表示对类的说明ApiModel用在类上例如entity、DTO、VOApiModelProperty用在属性上描述属性信息ApiOperation用在方法上例如Controller的方法说明方法的用途、作用启动服务访问http://localhost:8080/doc.html至此开启学习苍穹外卖的旅程《苍穹外卖》全套资料获取地方有需要的自取哈https://pan.baidu.com/s/13ROdNBym3t-I-TcrT8hisw提取码: wind

相关新闻

2026/8/21 18:22:58

生产环境不掉线:deno-postgres 自动重连与指数退避机制详解

生产环境不掉线:deno-postgres 自动重连与指数退避机制详解 【免费下载链接】postgres PostgreSQL driver for Deno 项目地址: https://gitcode.com/gh_mirrors/postgr/postgres 数据库连接突然断掉,是生产环境最常见也最让人头疼的问题之一。网络…

2026/8/21 18:22:58

build2 工具链全景:b、bpkg、bdep 三剑客协同工作流揭秘

build2 工具链全景:b、bpkg、bdep 三剑客协同工作流揭秘 【免费下载链接】build2 build2 build system 项目地址: https://gitcode.com/gh_mirrors/bu/build2 build2 工具链是一套开源的、跨平台的 C/C 构建工具链,由构建系统 b、包管理器 bpkg、…

2026/8/21 21:03:08

如何免费把book118预览文档下载成PDF

如何免费把book118预览文档下载成PDF 【免费下载链接】book118-downloader 基于java的book118文档下载器 项目地址: https://gitcode.com/gh_mirrors/bo/book118-downloader 你想把 book118 上的资料存下来离线看,但网站只让一页页翻,导出按钮永远…

2026/8/21 21:03:08

ImageStrike:覆盖18种隐写方法的CTF图像隐写分析实战指南

ImageStrike:覆盖18种隐写方法的CTF图像隐写分析实战指南 【免费下载链接】ImageStrike ImageStrike是一款用于CTF中图片隐写的综合利用工具 项目地址: https://gitcode.com/gh_mirrors/im/ImageStrike 拿到的PNG图片宽高一长一短,比例明显不对&a…

2026/8/21 21:03:08

从零到万星:开源项目的工程化细节与社区运营实战指南

这类分享“如何做出高星开源项目”的文章,最容易写成空洞的“成功学”或“心灵鸡汤”。我不想谈那些虚的,比如“要有热情”、“要解决痛点”之类的泛泛之谈。我更想从一个真实开发者的角度,拆解一个项目从零到获得数万 Star 背后,…

2026/8/21 21:03:08

2023年后端招聘市场趋势与技术栈转型分析

1. 当前后端招聘市场的结构性变化 2023年的"金三银四"招聘季已经呈现出与往年截然不同的景象。作为一名经历过多次招聘季的技术面试官,我深刻感受到这次市场调整的力度之大。与2021年的疯狂抢人、2022年的谨慎观望相比,今年的后端招聘市场正在…

2026/8/21 20:58:08

Java技术面试全攻略:Spring Boot与微服务架构实战

1. 项目概述:互联网大厂Java技术栈面试全景 去年我经历了国内多家头部互联网企业的Java技术面试,从初面到技术终面完整走完了全部流程。这场持续三个月的"面试马拉松"让我系统梳理了Java工程师岗位的核心考察点,特别是Spring Boot和…

2026/8/21 13:13:49

工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

第四篇:反射——高频能量撞墙之后会发生什么? —— 你以为信号已经过去了,其实它正在回来打你 老Q的现场笔记 第五季,我们正式进入工业神经系统层。这里不再是单个设备的战斗,而是整个工厂“经脉”层面的秩序之战。从这一篇开始,你将第一次看清:看似简单的信号传播,背…

2026/8/21 20:14:07

工业传感器与变送器详解:序章 从物理世界到工业数据

序章 从物理世界到工业数据 ——重新认识工业传感器与变送器 工业自动化系统正变得日益复杂。今天的工业现场早已不是简单的控制回路,而是由多层技术共同构成的立体体系:PLC、DCS、SCADA、MES、工业互联网、边缘计算与人工智能。控制系统可以执行复杂算法,工业网络可以实现…

2026/8/21 0:03:13

Linux命令-uucico(UUCP传输程序)

Linux命令-uucico(UUCP传输程序) 🔰简介UUCP 体系简介 📖语法⚙️选项配置文件 💡示例示例 1:基本传输操作示例 2:主模式与从模式示例 3:调试与故障排查示例 4:UUCP 配置…

2026/8/21 0:03:13

Linux命令-uupick(UUCP文件接收工具)

Linux命令-uupick(UUCP文件接收工具)🔰简介uupick 在 UUCP 传输链中的位置📖语法⚙️选项交互命令💡示例示例 1:基本接收操作示例 2:仅处理来自特定系统的文件示例 3:完整 UUCP 文件…

2026/8/21 15:40:01

实测才敢推 AI论文网站 2026最新测评与推荐

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。一、综…

2026/8/21 15:40:01

2026必备!AI论文网站测评:最新推荐与深度对比

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

2026/8/21 0:31:27

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…