Files
light/README.md

147 lines
4.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Light Delivery 后端项目
## 项目概述
Light Delivery 是一个为小程序配送服务设计的后端系统,提供了用户管理、订单管理、配送员管理、位置同步等核心功能。
## 技术栈
- Java 17
- Spring Boot 3.1.4
- Spring Data JPA
- Spring WebSocket
- MySQL
- Redis
- 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. 位置历史记录功能已被移除,如有需要可使用第三方服务进行位置追踪