乐于分享
好东西不私藏

源码专题-java0157-基于 Spring Boot外卖点餐系统

源码专题-java0157-基于 Spring Boot外卖点餐系统

外卖点餐系统 · 项目说明文档

> **项目名称:** waimai(外卖 / 奶茶点餐系统)
> **项目定位:** 面向单店餐饮场景的全栈外卖点餐解决方案

一、项目简介

本项目是一套功能完整的**单店外卖 / 奶茶点餐系统**,覆盖从用户浏览菜单、选规格加购、下单支付,到商家后台处理订单、运营数据分析的完整业务链路。
系统采用**前后端三端分离**设计:Java 双后端 API、Vue 管理后台、uni-app 用户端(H5 + 微信小程序),适合作为 Java 全栈学习项目、毕业设计或二次开发基础。

二、技术栈一览

后端服务

| 分类 | 技术 | 版本 |
| 语言 / 框架 | Java + Spring Boot | 1.8 / 2.1.1.RELEASE |
| ORM | MyBatis-Plus | 3.3.1 |
| 数据库 | MySQL | 8.0.39 |
| 连接池 | Druid | 1.1.22 |
| 缓存 | Redis(Spring Data Redis) | — |
| 认证 | JWT(auth0 java-jwt) | 3.4.1 |
| API 文档 | Swagger(Springfox) | 2.9.2 |
| 工具库 | Hutool / Fastjson / Lombok | 4.3.1 / 1.2.7 / 1.18.4 |
| 支付 | PayJS + 微信支付 SDK | weixin-java-pay 3.3.0 |
| 构建 | Maven | — |
**服务部署:**
| 服务 | 端口 | API 前缀 |
| 用户端 API(waimai_app) | 8101 | `/waimai-api` |
| 管理端 API(waimai_system) | 9101 | `/waimai-admin-api` |

用户端(waimai_uniapp)

| 分类 | 技术 | 版本 |
| 跨端框架 | uni-app | 3.0.0 |
| 前端框架 | Vue | 3.5.13 |
| 状态管理 | Pinia | 2.3.1 |
| 构建工具 | Vite | 5.2.8 |
| 样式 | Sass | 1.77.8 |
| 包管理 | pnpm | — |
**支持平台:** H5 网页 · 微信小程序

管理端(waimai_admin_ui)

| 分类 | 技术 | 版本 |
| 前端框架 | Vue | 2.6.10 |
| UI 组件库 | Element UI | 2.12.0 |
| 路由 / 状态 | Vue Router / Vuex | 3.0.1 / 3.1.0 |
| HTTP 请求 | Axios | 0.18.0 |
| 数据可视化 | ECharts | 4.2.1 |
| 动画组件 | vue-count-to | 1.0.13 |
| 构建工具 | Webpack | 3.6.0 |

基础设施

| 组件 | 说明 |
| MySQL | 数据库 `db_waimai`,10 张核心业务表 |
| Redis | Session 管理、菜单缓存、分布式锁、订单消息推送 |
| 阿里云 / 腾讯云短信 | 配置预留,支持验证码登录扩展

三、角色与核心功能

系统包含 **两类用户体系**,分别面向 C 端顾客与 B 端运营人员。

👤 C 端用户(小程序 / H5 顾客)

**身份标识:** 微信 OpenID
**认证方式:** JWT Token + Redis Session
**状态管理:** 已登录 / 未登录 / 账号禁用

登录方式

  • 微信授权登录
  • OpenID 直接登录
  • 开发测试登录(后台可配置开关,便于调试)

核心功能

| 功能模块 | 说明 |
| **浏览菜单** | 查看店铺配置、商品分类、商品详情及规格选项 |
| **选规格加购** | 支持大小、温度、甜度、口味、加料五维规格,价格实时联动计算 |
| **购物车** | 增减商品数量、金额统计,Pinia 本地持久化缓存 |
| **确认下单** | 选择到店自取或外卖配送,起送价校验,填写备注 |
| **在线支付** | 演示模式模拟支付,真实环境可切换 PayJS 微信支付 |
| **订单管理** | 查看进行中 / 历史订单,订单详情,取消未付款订单,确认收货 |
| **个人中心** | 编辑昵称、手机号、默认收货地址,真机调试时可配置后端地址 |

订单状态(用户视角)

```
未付款 → 制作中 → 配送中 / 请取餐 → 已送达 → 已完成
↘ 已取消 / 退款中 → 已退款

🔐 超级管理员(admin)

**预置账号:** `admin` / `123456`
**权限范围:** 系统全部管理权限

核心功能

| 功能模块 | 说明 |
| **数据看板** | 今日订单 / 营收 / 用户 KPI,7 日趋势图,订单状态分布,热销商品排行 |
| **系统配置** | 店铺名称、营业状态与时间、配送费 / 打包费 / 起送价、公告、测试登录开关 |
| **定时任务** | 手动刷新商品菜单缓存、重置商品默认属性与基准价格 |
| **管理员管理** | 增删改查后台账号、重置密码、冻结 / 解冻、分配角色 |
| **角色管理** | 角色 CRUD、权限树细粒度授权(30+ 权限点) |
| **用户管理** | 查看 / 修改 / **新增** C 端用户 |
| **商品管理** | 商品增删改查、上下架、图片上传 |
| **商品分类** | 分类增删改、显示顺序、展示 / 隐藏控制 |
| **商品属性** | 规格选项管理(大小 / 温度 / 甜度 / 口味 / 加料)、设置默认项、重置价格 |
| **订单管理** | 分页查询、状态筛选、订单状态推进、查支付状态、取消 / 退款处理 |
| **订单通知** | 新订单 Redis 消息推送,管理端实时轮询提醒 

👨‍💼 运营管理员(operator)

**预置账号:** `operator` / `123456`
**权限范围:** 应用运营管理,**不含系统管理权限**

核心功能

| 功能模块 | 说明 |
| **数据看板** | 同超级管理员,实时掌握经营数据 |
| **用户管理** | 查看 / 分页 / 修改 C 端用户(不可新增) |
| **商品管理** | 商品增删改查、上下架、图片上传 |
| **商品分类** | 分类增删改、显示 / 隐藏 |
| **商品属性** | 规格选项管理、默认项设置、价格重置 |
| **订单管理** | 分页查询、按状态 Tab 分栏处理订单 |
| **订单处理** | 状态推进(制作中 → 配送 / 取餐 → 送达 → 完成)、取消未付款、退款 |

与超级管理员的权限差异

| 能力 | 超级管理员 | 运营管理员 |
| 系统配置 | ✅ | ❌ |
| 定时任务 | ✅ | ❌ |
| 管理员 / 角色管理 | ✅ | ❌ |
| 新增 C 端用户 | ✅ | ❌ |
| 商品 / 订单 / 看板 | ✅ | ✅

四、项目亮点

✨ 1. 饮品行业深度适配

专为奶茶 / 饮品店场景设计,内置**五维商品规格体系**:
> **大小 · 温度 · 甜度 · 口味 · 加料**
  • 大小属性可重置商品基准价
  • 加料属性支持附加加价
  • 预置完整示例菜单(珍珠奶茶、杨枝甘露、咖啡、小食等 10 款商品)

✨ 2. 双取餐模式灵活切换

  • 到店自取:生成取单号(手机号尾号),便于叫号取餐
  • 外卖配送:起送价校验、配送费 / 打包费自动计算
  • 营业时间、店铺开关、费用规则均可在后台灵活配置

✨ 3. 完善的 RBAC 权限体系

  • 数据库级细粒度权限(30+ 权限标识,如system:app:goods:add
  • 前端权限树 + 后端@NeedPermission 拦截器双重校验
  • 超级管理员与运营管理员角色分离,适合多人协作运营

✨ 4. 实时订单通知

  • 新订单写入 Redis Hash 消息队列
  • 管理端轮询获取最新订单,支持确认已读
  • 减少漏单风险,提升出餐响应速度

✨ 5. 性能与稳定性保障

  • 商品菜单Redis 缓存 + 本地二级缓存,高并发下快速响应
  • 下单Redis 分布式锁,防止重复提交
  • 接口AccessLimiter 限流保护,抵御恶意请求

✨ 6. 数据可视化运营看板

  • ECharts 图表:7 日订单 / 营收趋势折线图、订单状态分布饼图
  • vue-count-to 数字滚动动画,待处理订单、上架率等 KPI 一目了然
  • 热销商品排行,辅助经营决策

✨ 7. 跨端一套代码

  • uni-app 一套代码同时输出H5 网页 与微信小程序
  • Pinia 状态管理,购物车本地持久化
  • 开发环境测试登录,降低真机调试门槛

✨ 8. 支付能力完整预留

  • 集成 PayJS 微信支付(Native / JSAPI / 收银台 / 退款 / 查单)
  • 当前演示模式使用模拟支付,配置真实商户后可无缝切换
  • 微信 OpenID 登录、PayJS 回调通知接口均已就绪

✨ 9. 可扩展能力预留

  • 秒杀商品表(miaosha_goods)已建,实体类就绪,随时可接入
  • 短信验证码(阿里云 / 腾讯云)配置已预留
  • 公众号取餐通知接口注释预留
  • Swagger API 文档(/swagger-ui.html)开箱即用

五、快速启动

| 步骤 | 操作 |
| 1 | 启动 MySQL,导入 `waimai/db/db_waimai.sql` |
| 2 | 启动 Redis(默认 localhost:6379) |
| 3 | 启动用户端 API:`waimai_app`(端口 8101) |
| 4 | 启动管理端 API:`waimai_system`(端口 9101) |
| 5 | 启动用户端:`waimai_uniapp` → `pnpm dev:h5` 或 `pnpm dev:mp-weixin` |
| 6 | 启动管理端:`waimai_admin_ui` → `npm run dev` |

软件定制及其他业务

文章有帮助的话,在看,转发吧。

谢谢支持哟 (*^__^*)