http://api.yourdomain.com跨城改派功能升级,司机可改派的范围从"仅同批次同时间司机"扩大为:
1. 同批次同时间司机(无需确认,直接改派)
2. 其他同公司司机(需要确认,Socket推送,60秒超时)
司机A发起改派 → 选择同批次司机B → 支付 → 直接改派成功 ✅
司机A发起改派 → 选择其他司机C → 支付 →
Socket推送给司机C(60秒倒计时)→
司机C点击同意/拒绝 →
同意:创建临时排班,改派成功 ✅
拒绝:通知司机A被拒绝 ❌
超时:通知司机A超时 ❌
接口: GET /queryOtherDriverShiftListWithShiftId
变更内容:
- 新增参数: orderId(改派场景必传)
- 响应变更: 新增 needConfirm 字段
- needConfirm=1: 不需要确认(同批次),可直接改派
- needConfirm=2: 需要确认(其他司机),需Socket推送
接口: POST /api/orderCrossCity/reassignOrderCrossCityReassign
说明: 接口名称和参数保持不变,后端会自动判断是否需要确认
接口: POST /api/orderCrossCity/respondReassign
用途: 司机收到改派推送后,点击"同意"或"拒绝"
接口: POST /api/orderCrossCity/queryPendingReassigns
用途: 查询当前司机待确认的改派申请列表
REASSIGN_CONFIRM_REQUEST - 改派确认请求REASSIGN_SUCCESS - 改派成功通知REASSIGN_REJECTED - 改派被拒绝通知REASSIGN_TIMEOUT - 改派超时通知GET /queryOtherDriverShiftListWithShiftIdorderId 参数(改派场景必传)needConfirm 字段| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| driverShiftId | Long | 是 | 司机排班记录ID |
| orderIds | String | 改派场景必传 | 订单ID(⭐新增,多个以逗号分隔,如"123,456") |
GET /queryOtherDriverShiftListWithShiftId?driverShiftId=123456&orderIds=789,790
| 参数名 | 类型 | 说明 |
|---|---|---|
| code | Integer | 状态码,200=成功 |
| msg | String | 提示信息 |
| data | Array | 司机列表 |
| ├─ lineShiftDriverId | Integer | 司机排班ID |
| ├─ driverId | Integer | 司机ID |
| ├─ driverName | String | 司机姓名 |
| ├─ headImgUrl | String | 司机头像 |
| ├─ carLicensePlate | String | 车牌号 |
| ├─ carColor | String | 车辆颜色 |
| ├─ carModel | String | 车辆品牌型号 |
| ├─ totalSeat | Integer | 总座位数 |
| ├─ laveSeat | Integer | 剩余座位数 |
| ├─ score | Double | 司机评分 |
| ├─ startTime | String | 班次时间(如"08:00-09:00") |
| ├─ needConfirm | Integer | ⭐ 是否需要确认(1=不需要,2=需要) |
{
"code": 200,
"msg": "success",
"data": [
{
"lineShiftDriverId": 1001,
"driverId": 5001,
"driverName": "李师傅",
"headImgUrl": "http://example.com/avatar/5001.jpg",
"carLicensePlate": "京A12345",
"carColor": "白色",
"carModel": "大众帕萨特",
"totalSeat": 5,
"laveSeat": 3,
"score": 4.8,
"startTime": "08:00-09:00",
"needConfirm": 1 // ⭐ 不需要确认,同批次司机
},
{
"lineShiftDriverId": null,
"driverId": 5002,
"driverName": "王师傅",
"headImgUrl": "http://example.com/avatar/5002.jpg",
"carLicensePlate": "京B67890",
"carColor": "黑色",
"carModel": "本田雅阁",
"totalSeat": 5,
"laveSeat": 5,
"score": 4.9,
"startTime": "08:00-09:00",
"needConfirm": 2 // ⭐ 需要确认,其他司机
}
]
}
// 原有调用(不传orderIds,仍然兼容)
api.queryOtherDriverShiftListWithShiftId(driverShiftId)
// 新调用(改派场景,必须传orderIds)
// 单个订单
api.queryOtherDriverShiftListWithShiftId(driverShiftId, "789")
// 多个订单(逗号分隔)
api.queryOtherDriverShiftListWithShiftId(driverShiftId, "789,790,791")
orderIds,返回同批次司机,needConfirm 默认为 1orderIds,返回同批次+其他司机,needConfirm 根据实际情况返回 1 或 2POST /api/orderCrossCity/reassignOrderCrossCityReassign| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| orderIds | String | 是 | 订单ID(多个以逗号分隔) |
| payType | Integer | 否 | 改派支付方式(1=微信,2=支付宝,3=余额) |
| reason | String | 是 | 改派原因 |
| remark | String | 否 | 备注 |
| nowDriverId | Integer | 否 | 指定的新司机ID(⚠️注意:这里传的是 lineShiftDriverId,不是 driverId) |
{
"orderIds": "123456",
"payType": 3,
"reason": "临时有事",
"remark": "",
"nowDriverId": 1001 // 从司机列表中选择的 lineShiftDriverId
}
needConfirm=1:直接改派needConfirm=2:发送Socket推送,等待确认POST /api/orderCrossCity/respondReassignAuthorization: Bearer {token}
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| reassignId | Integer | 是 | 改派申请ID |
| responseType | Integer | 是 | 响应类型:1=同意,2=拒绝 |
{
"reassignId": 12345,
"responseType": 1 // 1=同意,2=拒绝
}
| 参数名 | 类型 | 说明 |
|---|---|---|
| code | Integer | 状态码,200=成功 |
| msg | String | 提示信息 |
| data | Object | 空 |
成功(同意):json { "code": 200, "msg": "改派成功", "data": null }
成功(拒绝):json { "code": 200, "msg": "已拒绝改派", "data": null }
失败(已被其他司机接受):json { "code": 500, "msg": "该改派申请已被其他司机接受或已过期", "data": null }
失败(已超时):json { "code": 500, "msg": "该改派申请已超时", "data": null }
| 错误信息 | 说明 |
|---|---|
| 改派申请不存在 | reassignId 无效 |
| 无权操作 | 当前司机不是目标司机 |
| 该改派申请已被接受 | 已经被处理(重复点击) |
| 该改派申请已被拒绝 | 已经被处理 |
| 该改派申请已超时 | 超过60秒未响应 |
| 该改派申请已被其他司机接受或已过期 | 并发场景,被其他司机抢先接受 |
| 订单不存在 | 订单已取消或删除 |
| 订单状态已变更,无法改派 | 订单已完成或取消 |
POST /api/orderCrossCity/queryPendingReassignsAuthorization: Bearer {token}
无(从token中获取司机ID)
| 参数名 | 类型 | 说明 |
|---|---|---|
| code | Integer | 状态码,200=成功 |
| msg | String | 提示信息 |
| data | Array | 待确认改派列表 |
| ├─ reassignId | Integer | 改派申请ID |
| ├─ orderId | Integer | 订单ID |
| ├─ orderType | Integer | 订单类型(3=跨城) |
| ├─ startAddress | String | 起点地址 |
| ├─ endAddress | String | 终点地址 |
| ├─ peopleNumber | Integer | 乘客人数 |
| ├─ travelTime | String | 出行时间 |
| ├─ orderMoney | Double | 订单金额 |
| ├─ expireTime | String | 超时时间 |
| ├─ reason | String | 改派原因 |
| ├─ insertTime | String | 申请时间 |
| ├─ originalDriverName | String | 原司机姓名 |
| ├─ originalDriverPhone | String | 原司机手机号(脱敏) |
{
"code": 200,
"msg": "success",
"data": [
{
"reassignId": 12345,
"orderId": 456789,
"orderType": 3,
"startAddress": "北京站",
"endAddress": "天津站",
"peopleNumber": 3,
"travelTime": "2026-06-25 08:00:00",
"orderMoney": 150.00,
"expireTime": "2026-06-25 07:31:00",
"reason": "临时有事",
"insertTime": "2026-06-25 07:30:00",
"originalDriverName": "张师傅",
"originalDriverPhone": "138****1234"
}
]
}
ws://api.yourdomain.com/socket当其他司机发起改派,选择你作为目标司机时
{
"type": "REASSIGN_CONFIRM_REQUEST",
"reassignId": 12345,
"orderId": 456789,
"startAddress": "北京站",
"endAddress": "天津站",
"peopleNumber": 3,
"travelTime": "2026-06-25 08:00:00",
"expireTime": "2026-06-25 07:31:00",
"money": 150.00
}
when (message.type) {
"REASSIGN_CONFIRM_REQUEST" -> {
// 弹出全屏确认对话框
showReassignConfirmDialog(message)
// 开始60秒倒计时
startCountdown(message.expireTime)
// 播放提示音 + 震动
playNotification()
}
}
你发起的改派请求被对方同意时
{
"type": "REASSIGN_SUCCESS",
"reassignId": 12345,
"orderId": 456789
}
你发起的改派请求被对方拒绝时
{
"type": "REASSIGN_REJECTED",
"reassignId": 12345,
"orderId": 456789
}
你发起的改派请求超过60秒未响应时
{
"type": "REASSIGN_TIMEOUT",
"reassignId": 12345,
"orderId": 456789
}
// 原有代码
api.queryOtherDriverShiftListWithShiftId(driverShiftId)
// ⭐ 改为(改派场景)
api.queryOtherDriverShiftListWithShiftId(driverShiftId, orderId)
data class OtherDriverShiftWarpper(
val driverId: Int,
val driverName: String,
// ...
val needConfirm: Int // ⭐ 新增字段
)
// UI展示
when (driver.needConfirm) {
1 -> showBadge("同批次") // 不需要确认
2 -> showBadge("需确认") // 需要确认
}
// ⭐ 新增4种消息处理
when (message.type) {
"REASSIGN_CONFIRM_REQUEST" -> showConfirmDialog()
"REASSIGN_SUCCESS" -> showSuccessToast()
"REASSIGN_REJECTED" -> showRejectedDialog()
"REASSIGN_TIMEOUT" -> showTimeoutDialog()
}
@POST("/api/orderCrossCity/respondReassign")
fun respondReassign(
@Field("reassignId") reassignId: Int,
@Field("responseType") responseType: Int // 1=同意, 2=拒绝
): Call<BaseResponse>
@POST("/api/orderCrossCity/queryPendingReassigns")
fun queryPendingReassigns(): Call<BaseResponse<List<PendingReassign>>>
如有疑问,请联系后端开发团队。
文档版本: v2.0(最终版)
最后更新: 2026-06-25
适用版本: 司机端 v2.0+