【 苍穹外卖day1 | 项目准备 】

发布时间:2026/8/21 18:27:53
【 苍穹外卖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