# light-speed-express
**Repository Path**: xgyharmony/light-speed-express
## Basic Information
- **Project Name**: light-speed-express
- **Description**: 正在开发中......
- **Primary Language**: Unknown
- **License**: MulanPSL-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2025-08-29
- **Last Updated**: 2026-03-30
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# 光速外卖 (Light Speed Express)
[](https://spring.io/projects/spring-boot)
[](https://mybatis.org/mybatis-3/)
[](LICENSE)
**基于 Spring Boot + MyBatis 的餐饮外卖管理系统**
[主要特性](#主要特性) • [技术栈](#技术栈) • [项目结构](#项目结构) • [快速开始](#快速开始) • [API 文档](#API文档) • [系统架构](#系统架构)
---
## 📖 项目简介
光速外卖是一个现代化的餐饮外卖管理系统,采用前后端分离架构,提供完整的订单管理、菜品管理、套餐管理、员工管理等功能。系统分为**管理端**和**用户端**双端接口,支持 JWT 认证、微信支付、阿里云 OSS 文件存储等企业级功能。
### 核心业务
- 🍽️ **菜品管理**:菜品分类、菜品维护、口味配置
- 📦 **套餐管理**:套餐组合、状态控制
- 🛒 **订单管理**:下单、支付、接单、派单、完成全流程
- 👥 **员工管理**:员工信息、权限控制、账号状态
- 📊 **数据报表**:营业额统计、订单统计、销量排行
- 🏪 **店铺管理**:营业状态、店铺信息
---
## 🚀 主要特性
### 核心功能
- ✅ **双端接口设计**:管理端 (`/admin/**`) 和用户端 (`/user/**`) 完全分离
- 🔐 **JWT 身份认证**:管理员和用户独立的 Token 认证机制
- 💳 **微信支付集成**:完整的支付流程,包括预支付、回调通知
- ☁️ **阿里云 OSS**:图片上传存储,支持菜品图片管理
- 📝 **AOP 自动填充**:基于切面的公共字段自动填充(创建时间、更新时间等)
- 🎯 **全局异常处理**:统一的异常捕获和友好的错误响应
- 🔄 **事务管理**:基于注解的声明式事务控制
- ⏰ **定时任务**:订单超时自动取消、派送等定时处理
- 📡 **WebSocket 支持**:实时消息推送(催单提醒等)
- 📄 **Knife4j 接口文档**:美观的 API 文档界面
### 技术亮点
- 🏷️ **分层架构**:Controller → Service → Mapper → DB,职责清晰
- 📦 **多模块 Maven**:light-common、light-pojo、light-server 模块化设计
- 🗂️ **数据模型分离**:DTO、Entity、VO 各司其职
- 🔧 **MyBatis XML 映射**:灵活的 SQL 管理与优化
- 📊 **Druid 连接池**:高性能数据库连接池,带监控功能
- 📑 **PageHelper 分页**:简洁高效的物理分页
- 🎨 **Lombok 简化代码**:减少样板代码,提升开发效率
---
## 🛠️ 技术栈
### 后端框架
| 技术 | 版本 | 说明 |
|------|------|------|
| **Spring Boot** | 2.7.3 | 核心开发框架 |
| **MyBatis** | 2.2.0 | 数据持久层框架 |
| **MyBatis PageHelper** | 1.3.0 | 分页插件 |
| **Druid** | 1.2.1 | 数据库连接池 |
### 认证与安全
| 技术 | 版本 | 说明 |
|------|------|------|
| **JWT (jjwt)** | 0.9.1 | Token 认证 |
| **拦截器** | - | JWT 令牌校验拦截 |
### 第三方服务
| 技术 | 版本 | 说明 |
|------|------|------|
| **微信支付** | 0.4.8 | 微信 SDK |
| **阿里云 OSS** | 3.10.2 | 对象存储 |
| **Redis** | - | 缓存中间件 |
### 工具与组件
| 技术 | 版本 | 说明 |
|------|------|------|
| **Knife4j** | 3.0.2 | Swagger 增强,API 文档 |
| **Lombok** | 1.18.20 | 简化代码 |
| **FastJSON** | 1.2.76 | JSON 处理 |
| **Apache POI** | 3.16 | Excel 导入导出 |
| **AspectJ** | 1.9.4 | AOP 切面编程 |
| **Jackson** | - | JSON 序列化 |
### 开发环境
- **JDK**: 1.8+
- **Maven**: 3.6+
- **MySQL**: 5.7+ / 8.0+
- **Redis**: 5.0+
---
## 📁 项目结构
```
light-speed-express/
├── light-common/ # 公共模块
│ └── src/main/java/com/light/
│ ├── constant/ # 常量类
│ │ ├── AutoFillConstant.java # 自动填充常量
│ │ ├── JwtClaimsConstant.java # JWT Claims 常量
│ │ ├── MessageConstant.java # 消息常量
│ │ ├── PasswordConstant.java # 密码常量
│ │ └── StatusConstant.java # 状态常量
│ ├── context/ # 上下文
│ │ └── BaseContext.java # 线程上下文(存储当前用户 ID)
│ ├── enumeration/ # 枚举
│ │ └── OperationType.java # 操作类型枚举
│ ├── exception/ # 自定义异常
│ │ ├── AccountLockedException.java # 账号锁定异常
│ │ ├── AccountNotFoundException.java # 账号不存在异常
│ │ ├── AddressBookBusinessException.java # 地址簿业务异常
│ │ ├── BaseException.java # 基础异常
│ │ ├── DeletionNotAllowedException.java # 不允许删除异常
│ │ ├── LoginFailedException.java # 登录失败异常
│ │ ├── OrderBusinessException.java # 订单业务异常
│ │ ├── PasswordEditFailedException.java # 修改密码失败异常
│ │ ├── PasswordErrorException.java # 密码错误异常
│ │ ├── SetmealEnableFailedException.java # 套餐启用失败异常
│ │ ├── ShoppingCartBusinessException.java # 购物车业务异常
│ │ └── UserNotLoginException.java # 用户未登录异常
│ ├── json/ # JSON 处理
│ │ └── JacksonObjectMapper.java # Jackson 对象映射器
│ ├── properties/ # 配置属性类
│ │ ├── AliOssProperties.java # 阿里云 OSS 配置
│ │ ├── JwtProperties.java # JWT 配置
│ │ └── WeChatProperties.java # 微信配置
│ ├── result/ # 统一返回结果
│ │ ├── PageResult.java # 分页结果
│ │ └── Result.java # 统一响应结果
│ ├── utils/ # 工具类
│ │ ├── AliOssUtil.java # 阿里云 OSS 工具
│ │ ├── HttpClientUtil.java # HTTP 客户端工具
│ │ ├── JwtUtil.java # JWT 工具
│ │ └── WeChatPayUtil.java # 微信支付工具
│ └── pom.xml
│
├── light-pojo/ # 数据模型模块
│ └── src/main/java/com/light/
│ ├── dto/ # 数据传输对象(接收参数)
│ │ ├── CategoryDTO.java
│ │ ├── CategoryPageQueryDTO.java
│ │ ├── DishDTO.java
│ │ ├── DishPageQueryDTO.java
│ │ ├── EmployeeDTO.java
│ │ ├── EmployeeLoginDTO.java
│ │ ├── OrdersCancelDTO.java
│ │ ├── OrdersConfirmDTO.java
│ │ ├── OrdersDTO.java
│ │ ├── OrdersPaymentDTO.java
│ │ ├── OrdersSubmitDTO.java
│ │ ├── SetmealDTO.java
│ │ └── ... (其他 DTO)
│ ├── entity/ # 实体类(对应数据库表)
│ │ ├── AddressBook.java
│ │ ├── Category.java
│ │ ├── Dish.java
│ │ ├── DishFlavor.java
│ │ ├── Employee.java
│ │ ├── OrderDetail.java
│ │ ├── Orders.java
│ │ ├── Setmeal.java
│ │ ├── SetmealDish.java
│ │ ├── ShoppingCart.java
│ │ └── User.java
│ └── vo/ # 视图对象(返回给前端)
│ ├── BusinessDataVO.java
│ ├── DishOverViewVO.java
│ ├── DishVO.java
│ ├── EmployeeLoginVO.java
│ ├── OrderOverViewVO.java
│ ├── OrderPaymentVO.java
│ ├── OrderReportVO.java
│ ├── OrderSubmitVO.java
│ ├── OrderVO.java
│ ├── SalesTop10ReportVO.java
│ ├── SetmealOverViewVO.java
│ ├── SetmealVO.java
│ ├── TurnoverReportVO.java
│ ├── UserLoginVO.java
│ └── ... (其他 VO)
│ └── pom.xml
│
└── light-server/ # 服务端模块(主启动模块)
└── src/main/
├── java/com/light/
│ ├── annotation/ # 自定义注解
│ │ └── AutoFill.java # 自动填充注解
│ ├── aspect/ # 切面
│ │ └── AutoFillAspect.java # 自动填充切面
│ ├── config/ # 配置类
│ │ ├── OssConfiguration.java # OSS 配置
│ │ ├── RedisConfiguration.java # Redis 配置
│ │ ├── WebMvcConfiguration.java # Web MVC 配置(拦截器、Swagger)
│ │ └── WebSocketConfiguration.java# WebSocket 配置
│ ├── controller/ # 控制器层
│ │ ├── admin/ # 管理端接口
│ │ │ ├── CategoryController.java
│ │ │ ├── CommonController.java
│ │ │ ├── DishController.java
│ │ │ ├── EmployeeController.java
│ │ │ ├── OrderController.java
│ │ │ ├── ReportController.java
│ │ │ ├── SetmealController.java
│ │ │ ├── ShopController.java
│ │ │ └── WorkSpaceController.java
│ │ ├── notify/ # 通知接口
│ │ │ └── PayNotifyController.java # 支付回调通知
│ │ └── user/ # 用户端接口
│ │ ├── AddressBookController.java
│ │ ├── CategoryController.java
│ │ ├── DishController.java
│ │ ├── OrderController.java
│ │ ├── SetmealController.java
│ │ ├── ShopController.java
│ │ ├── ShoppingCartController.java
│ │ └── UserController.java
│ ├── handler/ # 处理器
│ │ └── GlobalExceptionHandler.java # 全局异常处理器
│ ├── interceptor/ # 拦截器
│ │ ├── JwtTokenAdminInterceptor.java # 管理员 JWT 拦截器
│ │ └── JwtTokenUserInterceptor.java # 用户 JWT 拦截器
│ ├── mapper/ # 数据访问层
│ │ ├── AddressBookMapper.java
│ │ ├── CategoryMapper.java
│ │ ├── DishFlavorMapper.java
│ │ ├── DishMapper.java
│ │ ├── EmployeeMapper.java
│ │ ├── OrderDetailMapper.java
│ │ ├── OrderMapper.java
│ │ ├── SetmealDishMapper.java
│ │ ├── SetmealMapper.java
│ │ ├── ShoppingCartMapper.java
│ │ └── UserMapper.java
│ ├── service/ # 业务逻辑层
│ │ ├── impl/ # 实现类
│ │ │ ├── AddressBookServiceImpl.java
│ │ │ ├── CategoryServiceImpl.java
│ │ │ ├── DishServiceImpl.java
│ │ │ ├── EmployeeServiceImpl.java
│ │ │ ├── OrderServiceImpl.java
│ │ │ ├── ReportServiceImpl.java
│ │ │ ├── SetmealServiceImpl.java
│ │ │ ├── ShoppingCartServiceImpl.java
│ │ │ ├── UserServiceImpl.java
│ │ │ └── WorkSpaceServiceImpl.java
│ │ ├── AddressBookService.java
│ │ ├── CategoryService.java
│ │ ├── DishService.java
│ │ ├── EmployeeService.java
│ │ ├── OrderService.java
│ │ ├── ReportService.java
│ │ ├── SetmealService.java
│ │ ├── ShoppingCartService.java
│ │ ├── UserService.java
│ │ └── WorkSpaceService.java
│ ├── task/ # 定时任务
│ │ └── OrderTask.java # 订单定时任务
│ ├── websocket/ # WebSocket
│ │ └── WebSocketServer.java # WebSocket 服务端
│ └── LightApplication.java # 启动类
│
└── resources/
├── mapper/ # MyBatis XML 映射文件
│ ├── AddressBookMapper.xml
│ ├── CategoryMapper.xml
│ ├── DishFlavorMapper.xml
│ ├── DishMapper.xml
│ ├── EmployeeMapper.xml
│ ├── OrderDetailMapper.xml
│ ├── OrderMapper.xml
│ ├── SetmealDishMapper.xml
│ ├── SetmealMapper.xml
│ ├── ShoppingCartMapper.xml
│ └── UserMapper.xml
├── application.yml # 主配置文件
└── application-dev.yml # 开发环境配置
└── pom.xml
```
---
## 🏗️ 系统架构
### 整体架构图
```
┌─────────────────────────────────────────────────────────┐
│ 前端应用 │
│ (管理后台 / 用户小程序 / H5) │
└────────────────────┬────────────────────────────────────┘
│ HTTP/HTTPS
┌────────────────────▼────────────────────────────────────┐
│ Nginx (反向代理) │
└────────────────────┬────────────────────────────────────┘
│
┌────────────────────▼────────────────────────────────────┐
│ Spring Boot 应用服务器 │
├─────────────────────────────────────────────────────────┤
│ Controller 层 (REST API) │
│ ├─ admin/ 管理端接口 │
│ └─ user/ 用户端接口 │
├─────────────────────────────────────────────────────────┤
│ Interceptor 层 (JWT 认证拦截) │
│ ├─ JwtTokenAdminInterceptor │
│ └─ JwtTokenUserInterceptor │
├─────────────────────────────────────────────────────────┤
│ Service 层 (业务逻辑) │
│ ├─ 事务管理 @EnableTransactionManagement │
│ └─ 缓存支持 @EnableCaching │
├─────────────────────────────────────────────────────────┤
│ Mapper 层 (数据访问) │
│ └─ MyBatis XML 映射 │
└────────────────────┬────────────────────────────────────┘
│
┌────────────┼────────────┐
▼ ▼ ▼
┌──────┐ ┌──────┐ ┌──────┐
│ MySQL│ │Redis │ │ OSS │
└──────┘ └──────┘ └──────┘
```
### 核心技术流程
#### 1. JWT 认证流程
```
请求 → 拦截器 → 解析 Token → 验证有效性 → 提取用户 ID → 存入 ThreadLocal → 放行
↓
验证失败 → 返回 401
```
#### 2. 订单处理流程
```
用户下单 → 生成订单 → 微信支付 → 支付回调
↓
商家接单 → 派送 → 完成
↓
拒单/取消 → 退款
```
#### 3. AOP 自动填充
```
@AutoFill(OperationType.INSERT/UPDATE)
↓
AutoFillAspect 切面拦截
↓
反射设置公共字段 (createTime, updateTime, createId, updateId)
```
---
## 🚀 快速开始
### 环境准备
确保已安装以下软件:
- JDK 1.8+
- Maven 3.6+
- MySQL 5.7+
- Redis 5.0+
### 安装步骤
#### 1. 克隆项目
```bash
git clone
cd light-speed-express
```
#### 2. 配置数据库
创建数据库并导入 SQL 脚本:
```sql
CREATE DATABASE light_speed_express DEFAULT CHARACTER SET utf8mb4;
USE light_speed_express;
-- 导入提供的 SQL 脚本
```
#### 3. 配置文件修改
编辑 `light-server/src/main/resources/application-dev.yml`:
```yaml
light:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
host: localhost
port: 3306
database: light_speed_express
username: root
password: your_password
redis:
host: localhost
port: 6379
password:
database: 0
alioss:
endpoint: oss-cn-beijing.aliyuncs.com
access-key-id: your_access_key_id
access-key-secret: your_access_key_secret
bucket-name: your_bucket_name
wechat:
appid: wx_appid
secret: your_secret
mch-id: merchant_id
# ... 其他微信配置
```
#### 4. 编译打包
```bash
mvn clean package -DskipTests
```
#### 5. 启动项目
```bash
# 方式一:使用 Maven 启动
mvn spring-boot:run -pl light-server
# 方式二:运行 JAR 包
java -jar light-server/target/light-server-1.0-SNAPSHOT.jar
```
#### 6. 访问应用
- **服务端口**: http://localhost:8080
- **接口文档**: http://localhost:8080/doc.html
- **管理端 API**: http://localhost:8080/admin/**
- **用户端 API**: http://localhost:8080/user/**
---
## 📚 API 文档
### 接口文档访问
项目集成了 Knife4j 接口文档,启动后访问:
```
http://localhost:8080/doc.html
```
### 接口分组
- **管理端接口组**: `/admin/**`
- 员工管理
- 菜品管理
- 套餐管理
- 订单管理
- 数据报表
- 店铺管理
- **用户端接口组**: `/user/**`
- 用户登录
- 菜品浏览
- 套餐浏览
- 购物车
- 订单提交
- 地址簿
### 接口规范
#### 统一响应格式
所有接口返回统一的 JSON 格式:
**成功响应:**
```json
{
"code": 1,
"msg": null,
"data": {
// 业务数据
}
}
```
**失败响应:**
```json
{
"code": 0,
"msg": "错误信息",
"data": null
}
```
#### 分页查询格式
```json
{
"code": 1,
"msg": null,
"data": {
"total": 100,
"records": [
// 数据列表
]
}
}
```
---
## 🔧 配置说明
### 核心配置项
#### application.yml
```yaml
server:
port: 8080
spring:
profiles:
active: dev # 环境配置
light:
jwt:
# 管理员 JWT 配置
admin-secret-key: xgy
admin-ttl: 7200000 # 2 小时
admin-token-name: token
# 用户 JWT 配置
user-secret-key: user-xgy
user-ttl: 7200000
user-token-name: authentication
alioss: # 阿里云 OSS 配置
wechat: # 微信支付配置
tencent: # 腾讯地图配置
shop: # 店铺配置
```
### 环境变量
敏感配置建议使用环境变量或配置中心:
```yaml
light:
datasource:
host: ${DB_HOST:localhost}
password: ${DB_PASSWORD}
```
---
## 📊 数据库设计
### 核心数据表
| 表名 | 说明 | 主要字段 |
|------|------|----------|
| `employee` | 员工表 | id, username, name, password, status |
| `category` | 分类表 | id, name, type, sort, status |
| `dish` | 菜品表 | id, name, category_id, price, status |
| `dish_flavor` | 菜品口味表 | id, dish_id, name, value |
| `setmeal` | 套餐表 | id, name, category_id, price, status |
| `setmeal_dish` | 套餐菜品关系表 | id, setmeal_id, dish_id |
| `orders` | 订单表 | id, order_number, user_id, status, amount |
| `order_detail` | 订单明细表 | id, order_id, name, number, amount |
| `address_book` | 地址表 | id, user_id, consignee, phone, address |
| `shopping_cart` | 购物车表 | id, user_id, dish_id/setmeal_id, number |
| `user` | 用户表 | id, openid, name, phone |
---
## 🎯 核心功能详解
### 1. 员工管理
- **登录认证**: 用户名 + 密码,生成 JWT Token
- **员工 CRUD**: 新增、修改、查询、删除
- **账号管理**: 启用/禁用账号
- **分页查询**: 支持姓名、状态筛选
**接口示例:**
```
POST /admin/employee/login # 登录
POST /admin/employee # 新增员工
GET /admin/employee/page # 分页查询
PUT /admin/employee # 修改员工
POST /admin/employee/status/{status} # 启用/禁用
```
### 2. 菜品管理
- **分类管理**: 菜品分类的增删改查
- **菜品维护**: 菜品信息、价格、图片
- **口味配置**: 支持多种口味选项
- **状态控制**: 起售/停售
**接口示例:**
```
POST /admin/dish # 新增菜品
GET /admin/dish/page # 分页查询
PUT /admin/dish # 修改菜品
POST /admin/dish/status/{status} # 起售/停售
DELETE /admin/dish?id=xxx # 删除菜品
```
### 3. 订单管理
- **订单提交**: 用户下单,生成订单
- **支付流程**: 微信支付预支付
- **订单状态机**: 待付款→待接单→已接单→派送中→已完成
- **订单操作**: 接单、拒单、取消、派送、完成
**订单状态流转:**
```
待付款 (1) → 待接单 (2) → 已接单 (3) → 派送中 (4) → 已完成 (5)
↓ ↓
已取消 (6) 已拒单 (7)
```
### 4. 数据统计
- **营业额统计**: 按日期统计营业额
- **订单统计**: 订单数量、完成率
- **销量排行**: Top10 菜品销量
- **数据概览**: 核心经营数据展示
---
## 🔐 安全机制
### JWT 认证
系统采用双重 JWT 认证机制:
| 角色 | Token 名称 | 秘钥 | 过期时间 |
|------|-----------|------|---------|
| 管理员 | `token` | `admin-secret-key` | 2 小时 |
| 用户 | `authentication` | `user-secret-key` | 2 小时 |
**认证流程:**
1. 登录成功后生成 JWT Token
2. 前端在请求头携带 Token
3. 拦截器校验 Token 有效性
4. 解析出用户 ID 存入 ThreadLocal
5. 业务层通过 `BaseContext.getCurrentId()` 获取
### 拦截器配置
```java
// 管理端拦截
.addPathPatterns("/admin/**")
.excludePathPatterns("/admin/employee/login"); // 登录接口放行
// 用户端拦截
.addPathPatterns("/user/**")
.excludePathPatterns("/user/user/login"); // 登录接口放行
```
---
## ⚙️ 高级特性
### 1. AOP 自动填充
通过自定义注解 `@AutoFill` 和切面,自动填充公共字段:
**支持的字段:**
- `createTime` (INSERT)
- `updateTime` (INSERT/UPDATE)
- `createId` (INSERT)
- `updateId` (INSERT/UPDATE)
**使用示例:**
```java
@AutoFill(OperationType.INSERT)
public void save(DishDTO dishDTO) {
// 自动填充 createTime, createId
}
@AutoFill(OperationType.UPDATE)
public void update(DishDTO dishDTO) {
// 自动填充 updateTime, updateId
}
```
### 2. 全局异常处理
`GlobalExceptionHandler` 统一处理各类异常:
```java
@ExceptionHandler(Exception.class)
public Result exceptionHandler(Exception ex) {
if (ex instanceof BaseException) {
return Result.error(ex.getMessage());
}
return Result.error("系统繁忙,请稍后再试");
}
```
### 3. 定时任务
订单定时任务 `OrderTask`:
```java
@Scheduled(cron = "0 * * * * ?") // 每分钟执行
public void processTimeoutOrder() {
// 处理超时未支付的订单(自动取消)
}
@Scheduled(cron = "0 0 1 * * ?") // 每天凌晨 1 点
public void processDeliveryOrder() {
// 处理已派送超时的订单(自动完成)
}
```
### 4. WebSocket 实时推送
用于催单提醒:
```java
@GetMapping("/reminder/{id}")
public Result reminder(@PathVariable Long id) {
// 通过 WebSocket 向商家端推送消息
webSocketServer.sendToAllClient("订单" + id + "催单");
}
```
---
## 📝 开发指南
### 新增功能模块
#### 1. 创建 Entity
```java
@Data
@TableName("your_table")
public class YourEntity {
private Long id;
private String name;
// ...
}
```
#### 2. 创建 Mapper接口
```java
@Mapper
public interface YourMapper {
void insert(YourEntity entity);
YourEntity getById(Long id);
// ...
}
```
#### 3. 创建 Mapper XML
```xml
INSERT INTO your_table (name, ...)
VALUES (#{name}, ...)
```
#### 4. 创建 Service
```java
public interface YourService {
void save(YourDTO dto);
YourVO getById(Long id);
}
@Service
public class YourServiceImpl implements YourService {
@Autowired
private YourMapper yourMapper;
@Override
public void save(YourDTO dto) {
YourEntity entity = new YourEntity();
BeanUtils.copyProperties(dto, entity);
yourMapper.insert(entity);
}
}
```
#### 5. 创建 Controller
```java
@RestController
@RequestMapping("/admin/your")
@Api(tags = "你的接口")
public class YourController {
@Autowired
private YourService yourService;
@PostMapping
@ApiOperation("保存")
public Result save(@RequestBody YourDTO dto) {
yourService.save(dto);
return Result.success();
}
}
```
---
## 🐛 常见问题
### 1. 启动报错
**问题**: `Cannot load driver class: com.mysql.cj.jdbc.Driver`
**解决**: 检查 MySQL 依赖和版本号,确保驱动类正确
### 2. JWT 认证失败
**问题**: 请求返回 401
**解决**:
- 检查请求头是否包含正确的 Token
- 确认 Token 未过期
- 验证秘钥配置一致
### 3. 文件上传失败
**问题**: OSS 上传报错
**解决**:
- 检查阿里云 AccessKey 配置
- 确认 Bucket 名称正确
- 验证网络连通性
### 4. 微信支付回调失败
**问题**: 收不到回调通知
**解决**:
- 检查 `notify-url` 配置是否为外网可访问地址
- 验证证书配置是否正确
- 查看日志确认签名验证
---
## 📄 许可证
Apache License 2.0
---
## 👥 贡献指南
欢迎提交 Issue 和 Pull Request!
1. Fork 本仓库
2. 创建特性分支 (`git checkout -b feature/AmazingFeature`)
3. 提交更改 (`git commit -m 'Add some AmazingFeature'`)
4. 推送到分支 (`git push origin feature/AmazingFeature`)
5. 开启 Pull Request
---
## 📞 联系方式
如有问题,请通过以下方式联系:
- Email: 3791158284@qq.com
- Issues: GitHub Issues
---
**感谢使用光速外卖系统!** 🚀
如果这个项目对你有帮助,请给一个 ⭐️ Star 支持!