Files
light/README.md

146 lines
4.6 KiB
Markdown
Raw Normal View History

# Light Delivery 后端项目
## 项目概述
Light Delivery 是一个为小程序配送服务设计的后端系统,提供了用户管理、订单管理、配送员管理、位置同步等核心功能。
## 技术栈
- Java 17
- Spring Boot 3.1.4
- Spring Data JPA
- Spring WebSocket
- MySQL
- Maven
## 主要功能模块
### 1. 用户管理
- 微信小程序登录
- 用户角色管理(管理员、配送员、游客)
- 用户签到功能
### 2. 订单管理
- 订单创建与查询
- 订单状态跟踪
- 订单指派给配送员
### 3. 配送员管理
- 配送员注册
- 配送员位置实时同步
- 配送员状态管理
### 4. 位置同步
- 基于WebSocket的实时位置同步
- REST API位置查询接口
- 位置过期处理机制
## 项目结构
```
src
├── main
│ ├── java
│ │ └── com
│ │ └── light
│ │ └── delivery
│ │ ├── config # 配置类
│ │ ├── controller # 控制器层
│ │ ├── dto # 数据传输对象
│ │ ├── exception # 异常处理
│ │ ├── model # 实体模型
│ │ ├── repository # 数据访问层
│ │ ├── service # 业务逻辑层
│ │ │ └── impl # 业务逻辑实现
│ │ └── util # 工具类
│ └── resources
│ ├── application.properties # 配置文件
│ └── db # 数据库脚本
└── test # 测试代码
```
## 核心设计
### 认证授权机制
系统采用基于JWT的无状态认证机制
1. 用户通过微信登录获取code
2. 后端通过code换取用户openid
3. 根据openid查找或创建用户
4. 生成JWT Token返回给前端
5. 前端在后续请求中通过Authorization头携带Token
6. 后端通过拦截器验证Token有效性
### 实时位置同步
位置同步采用双通道设计:
1. WebSocket实时推送建立长连接服务器主动推送位置更新
2. REST API查询提供HTTP接口查询当前位置信息
位置信息现在存储在服务器内存缓存中,而不是持久化到数据库,以提高访问速度和减少数据库负载。
### 数据模型
主要实体包括:
- User用户基础信息实体所有用户通用
- Employee员工信息实体后台配置数据用于验证用户身份
- DeliveryPerson配送员扩展信息实体
- Order订单实体
用户系统架构说明:
- 所有用户首先以游客身份静默登录创建User记录
- 用户签到或注册时系统根据手机号在Employee表中查找匹配记录
- 如果匹配成功将用户的openid写入Employee表表示该员工已成为系统用户
- 根据Employee中的角色信息更新User的角色
- 对于配送员还会创建或更新DeliveryPerson记录
## 部署说明
1. 确保安装了Java 17和Maven
2. 配置MySQL数据库
3. 修改`application.properties`中的数据库连接信息
4. 运行`mvn spring-boot:run`启动项目
## API接口
主要API接口包括
### 用户相关
- `POST /user/wxlogin` - 微信登录
- `GET /user/info` - 获取用户信息
- `POST /user/logout` - 用户登出
- `POST /user/signin` - 用户签到
- `POST /user/register` - 注册为配送员
### 订单相关
- `GET /orders` - 获取订单列表
- `GET /orders/{id}` - 获取订单详情
- `POST /orders/{id}/assign` - 指派订单
### 配送员相关
- `GET /delivery-persons` - 获取配送员列表
- `GET /delivery-persons/{id}` - 获取配送员详情
- `PUT /delivery-persons/{id}/location` - 更新配送员位置
### 位置同步相关
- `GET /location-sync/delivery-persons/locations` - 获取所有配送员位置
## 最近更新
### 位置历史记录功能移除
为了简化系统架构并提高性能,我们移除了位置历史记录功能。具体变更包括:
- 删除了`LocationHistory`实体类
- 删除了`LocationHistoryRepository`数据访问接口
- 删除了`LocationService`服务接口及其实现类`LocationServiceImpl`
- 删除了`LocationController`控制器及相关API端点
位置信息现在完全基于实时同步机制,存储在服务器内存中,不再持久化到数据库。
## 注意事项
1. 系统仅支持微信登录,不再支持用户名密码登录
2. 所有敏感接口都需要通过JWT Token认证
3. 配送员位置信息具有时效性默认5分钟内有效
4. 位置历史记录功能已被移除,如有需要可使用第三方服务进行位置追踪