1 立项背景与目标
随着移动互联网的深入发展和人们生活节奏的加快,线上外卖服务已成为餐饮消费的重要渠道。传统的餐饮行业在数字化转型过程中,常常面临订单管理效率低、配送路径优化不足、多端信息同步延迟以及数据分析能力薄弱等核心痛点。苍穹外卖项目正是在这样的背景下应运而生,旨在通过构建一个一体化智能外卖平台,帮助餐饮商家提升运营效率、优化用户体验,并适应线上线下一体化的新零售趋势。
项目的核心目标是打造一个集管理后台、用户端小程序于一体的外卖平台,实现餐饮企业菜品管理、订单处理、数据分析等功能,同时为消费者提供便捷的点餐、支付、配送跟踪等服务。项目聚焦于高频、实时、高并发的餐饮外卖场景,致力于覆盖商户管理、订单调度、骑手配送及用户服务全链路业务。
2 系统架构与核心模块
苍穹外卖系统采用前后端分离的开发模式,主要分为管理端和用户端两大部分。
2.1 管理端(供餐饮企业内部员工使用)
管理端是餐饮企业内部员工使用的系统,主要功能包括:
功能模块 描述
员工管理 管理员可以在系统后台对员工信息进行管理,包含查询、新增、编辑、禁用等功能
分类管理 主要对当前餐厅经营的菜品分类或套餐分类进行管理维护,包含查询、新增、修改、删除等功能
菜品管理 主要维护各个分类下的菜品信息,包含查询、新增、修改、删除、启售、停售等功能
套餐管理 主要维护当前餐厅中的套餐信息,包含查询、新增、修改、删除、启售、停售等功能
订单管理 主要维护用户在移动端下的订单信息,包含查询、取消、派送、完成,以及订单报表下载等功能
数据统计 主要完成对餐厅的各类数据统计,如营业额、用户数量、订单等
2.2 用户端(供消费者使用)
用户端是以微信小程序形式提供的移动端应用,主要功能包括:
功能模块 描述
微信登录 用户需要通过微信授权后登录使用小程序进行点餐
菜品/套餐浏览 在点餐界面展示出菜品分类/套餐分类,并根据当前选择的分类加载其中的菜品信息,供用户查询选择
购物车管理 用户选中的菜品就会加入用户的购物车,主要包含查询购物车、加入购物车、删除购物车、清空购物车等功能
订单支付 用户选完菜品/套餐后,可以对购物车菜品进行结算支付,这时就需要进行订单的支付
个人信息管理 在个人中心页面中会展示当前用户的基本信息,用户可以管理收货地址,也可以查询历史订单数据
3 业务流程
苍穹外卖的核心业务流程涵盖了从用户下单到订单完成的整个闭环,以下是一些关键的业务流程:
用户下单流程:
用户通过微信小程序浏览菜品/套餐,将选中的商品加入购物车。
用户进入购物车页面,确认订单信息(包括配送地址、备注等)。
用户选择支付方式并完成支付。
系统生成订单,并将订单信息推送给商家。
订单处理流程(商家侧):
商家在管理端收到新订单通知(可能伴有语音播报)。
商家确认订单详情(包括菜品、数量、配送地址等)。
1 整体技术架构
项目的整体技术栈可以划分为以下几个层次:
层级 采用技术 说明
用户层 Vue.js, ElementUI, 微信小程序 构建管理后台前端页面和移动端小程序界面。
网关层 Nginx 作为HTTP服务器,部署静态资源,并提供反向代理和负载均衡功能。
应用层 Spring Boot, Spring MVC, Spring Task, HttpClient, JWT, Spring Cache, Swagger, POI, WebSocket, 阿里云OSS 负责核心业务逻辑处理、定时任务(如检查订单状态)、HTTP请求发送、身份认证、缓存、接口文档生成、Excel操作、实时通信(如来单提醒)和文件存储等。
数据层 MySQL, Redis, MyBatis, PageHelper, Spring Data Redis MySQL存储核心业务数据,Redis作为缓存和临时数据存储(如营业状态、用户浏览信息),MyBatis作为ORM框架,PageHelper处理分页。
工具 Git, Maven, Junit, Postman 用于版本控制、项目构建、单元测试和接口测试。
4.2 关键实现细节
前后端分离与交互:项目采用前后端分离架构,前端(Vue.js构建的管理后台和微信小程序)通过HTTP API与后端(Spring Boot应用)进行数据交互。交互格式通常为JSON。
认证与授权:使用 JWT(JSON Web Token) 进行用户身份验证和授权,保障接口的安全性。
数据库设计:数据库共设计了11张表,包括员工表(employee)、分类表(category)、菜品表(dish)、菜品口味表(dish_flavor)、套餐表(setmeal)、套餐菜品关系表(setmeal_dish)、用户表(user)、地址表(address_book)、购物车表(shopping_cart)、订单表(orders)、订单明细表(order_detail)等,以支持复杂的业务逻辑。
缓存优化:引入 Redis 作为缓存层,用于缓存热点数据(如菜品信息、购物车内容)、管理营业状态等,有效减轻数据库压力,提升系统响应速度。
异步处理与消息队列:在订单和配送等流程中,可能会使用消息队列(如RabbitMQ)进行异步解耦,提高系统吞吐量和可靠性。
定时任务:使用 Spring Task 执行定时任务,例如定期检查并处理超时未支付的订单。
分布式事务:对于分布式系统,尤其是在订单和配送调度中,会采用机制(如分布式锁)来保障数据一致性。
文件存储:使用 阿里云OSS 存储菜品图片等静态资源。
接口管理与测试:使用 SwaggeKnife4j)自动生成接口文档并进行在线测试。
反向代理与负载均衡:通过 Nginx 实现反向代理