修改签到和更新逻辑
All checks were successful
构建并部署 Spring Boot 应用 / build-and-deploy (push) Successful in 8m53s

This commit is contained in:
2025-10-19 05:41:24 +08:00
parent 74c0908b58
commit c33cbd799d
9 changed files with 564 additions and 570 deletions

View File

@@ -91,7 +91,7 @@ src
系统通过WebSocket实现实时位置同步端点为`/ws/location`
##### 连接建立
客户端通过WebSocket连接到`/ws/location`端点建立连接
客户端通过WebSocket连接到`/ws/location?userId={userId}`端点建立连接需要在查询参数中提供用户ID
##### 消息格式
所有消息都使用JSON格式。
@@ -127,33 +127,40 @@ src
{
"userId": 123,
"name": "张三",
"role": "DELIVERY_PERSON"
},
{
"userId": 456,
"name": "李四",
"role": "ADMIN"
"role": "DELIVERY_PERSON",
"userStatus": true,
"lastUpdateTime": 1634567890000,
"locationData": {
"latitude": 25.0342,
"longitude": 102.7057,
"timestamp": 1634567890000
}
}
]
}
```
3. **updateLocation(位置更新)** - 服务器向所有已签到用户广播位置更新
3. **userLocationList用户位置列表** - 服务器每30秒发送所有在线用户的位置列表
```json
{
"type": "updateLocation",
"userId": 123,
"userRole": "DELIVERY_PERSON",
"latitude": 25.0342,
"longitude": 102.7057,
"timestamp": 1634567890000
"type": "userLocationList",
"users": [
{
"userId": 123,
"locationData": {
"latitude": 25.0342,
"longitude": 102.7057,
"timestamp": 1634567890000
}
}
]
}
```
##### 交互流程
```
用户签到] --> B{签到成功?}
[用户签到] --> B{签到成功?}
B -->|是| C[建立WebSocket连接]
B -->|否| D[签到失败]
C --> E[自动订阅位置更新]
@@ -161,8 +168,7 @@ src
F --> G[接收在线用户列表]
G --> H[开始位置更新循环]
H --> I[发送位置更新]
I --> J[接收位置广播]
J --> H
I --> J[每30秒接收一次位置列表]
K[用户签退] --> L{签退成功?}
L -->|是| M[自动取消订阅并关闭WebSocket连接]
L -->|否| N[签退失败]
@@ -331,6 +337,7 @@ deploy.bat
- `GET /user/info` - 获取用户信息
- `POST /user/logout` - 用户登出
- `POST /user/signin` - 用户签到
- `POST /user/signout` - 用户签退
- `POST /user/register` - 注册为配送员
### 订单相关
@@ -341,7 +348,7 @@ deploy.bat
### 配送员相关
- `GET /delivery-persons` - 获取配送员列表
- `GET /delivery-persons/{id}` - 获取配送员详情
- `PUT /delivery-persons/{id}/location` - 更新配送员位置
- `GET /delivery-persons/{id}/orders` - 获取配送员订单
### 员工管理相关(仅限管理员访问)
- `GET /employees` - 获取员工列表
@@ -388,26 +395,33 @@ deploy.bat
{
"userId": 123,
"name": "张三",
"role": "DELIVERY_PERSON"
},
{
"userId": 456,
"name": "李四",
"role": "ADMIN"
"role": "DELIVERY_PERSON",
"userStatus": true,
"lastUpdateTime": 1634567890000,
"locationData": {
"latitude": 25.0342,
"longitude": 102.7057,
"timestamp": 1634567890000
}
}
]
}
```
3. **updateLocation(位置更新)** - 服务器向所有已签到用户广播位置更新
3. **userLocationList用户位置列表** - 服务器每30秒发送所有在线用户的位置列表
```json
{
"type": "updateLocation",
"userId": 123,
"userRole": "DELIVERY_PERSON",
"latitude": 25.0342,
"longitude": 102.7057,
"timestamp": 1634567890000
"type": "userLocationList",
"users": [
{
"userId": 123,
"locationData": {
"latitude": 25.0342,
"longitude": 102.7057,
"timestamp": 1634567890000
}
}
]
}
```
@@ -420,6 +434,7 @@ deploy.bat
- 用户需要先通过REST API签到然后才能建立WebSocket连接并接收位置更新
- 用户签退时服务器会自动取消订阅并关闭WebSocket连接
- 客户端不再需要发送subscribe/unsubscribe消息这些操作由服务器自动处理
- 服务器现在每30秒批量发送一次所有在线用户的位置信息而不是实时发送单个用户位置更新
### WebSocket位置同步增强新增
为了支持管理员和配送员都能接收位置更新信息我们对WebSocket位置同步功能进行了增强