## 1. 立项背景和目标
### 背景分析
随着移动互联网技术的普及和餐饮行业数字化转型的需求日益增长,传统点餐方式存在效率低下、人力成本高、顾客体验不佳等问题。尤其在高峰期,顾客点餐排队时间长、服务员工作压力大、订单出错率高等问题尤为突出。
### 项目目标
本项目旨在开发一套完整的扫码点餐系统,通过微信小程序为顾客提供便捷的自助点餐体验,同时为餐厅管理者提供高效的订单管理和数据统计工具。主要目标包括:
- 提升顾客点餐体验,减少等待时间
- 降低餐厅人力成本,提高服务效率
- 实现订单数字化管理,减少错误率
- 提供数据分析支持,辅助经营决策
## 2. 软件功能和核心模块介绍
### 系统架构
本系统采用前后端分离架构,包含微信小程序前端、Java Spring Boot后端和Vue管理后台三大部分。
### 核心功能模块
#### 微信小程序端
- **用户管理模块**:支持微信授权登录和账号密码登录
- **点餐模块**:分类浏览菜品、查看详情、加入购物车、下单
- **订单模块**:订单创建、支付、查看历史订单和订单详情
- **个人中心**:个人信息管理、订单记录查询
#### 管理后台
- **用户管理**:顾客信息查看和管理
- **员工管理**:员工账号管理、权限分配
- **菜品管理**:菜品信息维护、分类管理、价格设置
- **订单管理**:订单接单、完成、取消等状态管理
- **桌位管理**:桌位信息维护、二维码生成
- **店铺管理**:店铺信息设置、营业状态控制
#### 后端服务
- **用户服务**:处理用户登录、信息管理等业务逻辑
- **订单服务**:处理订单创建、支付、状态变更等核心业务
- **菜品服务**:提供菜品信息查询、分类管理等接口
- **店铺服务**:提供店铺信息查询、设置等接口
## 3. 业务流程和功能路径描述
### 顾客点餐流程
1. 顾客扫描桌面二维码,进入小程序点餐页面
2. 浏览菜品分类,选择所需菜品加入购物车
3. 确认购物车中的菜品,选择桌号并提交订单
4. 进行微信支付或选择餐后支付
5. 等待商家接单,查看订单状态和进度
6. 用餐完毕,可对服务进行评价
### 商家接单流程
1. 管理后台接收到新订单通知
2. 员工查看订单详情,确认接单
3. 后厨根据订单信息准备菜品
4. 菜品制作完成后,服务员送餐
5. 确认顾客用餐完毕,标记订单完成
6. 如有问题,可处理退款或售后需求
### 系统数据流向
1. 微信小程序用户操作产生数据请求
2. 前端发送请求至Java后端API接口
3. 后端处理业务逻辑,与数据库交互
4. 数据库存储订单、菜品、用户等核心信息
5. 后端返回处理结果至小程序前端
6. 管理后台通过WebSocket实时获取订单更新
## 1. 整体架构和设计思路
### 系统架构
本系统采用前后端分离的三层架构设计,具体包括:
- **前端层**:微信小程序客户端(Vue语法+原生组件) + Vue管理后台
- **后端层**:Spring Boot RESTful API + MyBatis-Plus ORM
- **数据层**:MySQL关系型数据库存储业务数据
### 技术栈选择
| 模块 | 技术选型 | 选型理由 |
|------|---------|----------|
| 小程序端 | 微信小程序原生技术 | 性能最优,用户无需下载安装,微信生态无缝集成 |
| 管理后台 | Vue2 + Element UI | 组件丰富,开发效率高,适合快速构建管理界面 |
| 后端API | Spring Boot 2.6.13 + JDK8 | 生态成熟,开发效率高,社区支持好 |
| 数据持久化 | MyBatis-Plus + MySQL | 简化CRUD操作,提供灵活的SQL控制 |
| 认证授权 | JWT + 微信开放平台 | 无状态认证,易于扩展,微信生态集成 |
### 核心设计思路
1. **接口统一响应格式**:定义统一返回结果类,前端统一处理异常和错误
2. **权限分离设计**:小程序端和管理端使用不同的控制器接口,通过/admin和/mini前缀区分
3. **状态机管理订单流程**:通过订单状态字段控制业务流转,确保数据一致性
4. **组件化UI开发**:小程序采用组件化思维,提取公共样式和主题变量
5. **响应式布局**:使用rpx单位确保不同屏幕尺寸下的UI适配
## 2. 项目难点和解决方案
### 难点1:微信支付集成
**问题**:微信支付签名验证复杂,回调处理容易出现异常。
**解决方案**:
- 封装微信支付工具类,统一处理签名生成和验证
- 使用异步通知+轮询查询双重机制确保支付状态同步
- 对支付异常进行统一捕获和用户友好的错误提示
### 难点2:小程序登录状态维持
**问题**:微信小程序session_key易过期,导致用户登录状态丢失。
**解决方案**:
- 采用access_token+refresh_token双token机制
- 客户端定期检测token有效性,实现静默刷新
- 后端实现登录状态缓存,提升验证效率
### 难点3:实时订单状态更新
**问题**:用户需要实时获取订单状态变化,传统轮询效率低。
**解决方案**:
- 管理后台使用WebSocket实现订单状态推送
- 小程序端采用轮询+事件触发相结合的混合模式
- 设置合理的轮询间隔,平衡实时性和服务器压力