|
|
@@ -145,7 +145,7 @@
|
|
|
3. **假如** 骑手已有未送达的外卖或有效闪送任务,**当** 抢 1 对 1 急送订单,**那么** 系统拒绝接单。
|
|
|
4. **假如** 骑手已承接 1 对 1 急送且订单仍处于已接单或已取件,**当** 再抢外卖、普通闪送或另一笔急送,**那么** 系统拒绝接单。
|
|
|
5. **假如** 急送订单已送达、完成或取消,**当** 骑手再次抢单,**那么** 独占限制解除。
|
|
|
-6. **假如** 急送与其他任务并发抢单,**当** 请求针对同一骑手到达,**那么** 所有相关接单入口使用同一骑手行锁串行检查,不能绕过独占规则。
|
|
|
+6. **假如** 急送与其他任务并发抢单,**当** 请求针对同一骑手到达,**那么** 所有相关接单入口使用同一骑手级 Redis 分布式锁串行检查,不能绕过独占规则。
|
|
|
|
|
|
## 边界情况
|
|
|
|
|
|
@@ -233,7 +233,7 @@
|
|
|
- **FR-063**:用户订单列表新增 `role` 参数,只接受 `sender` 和 `receiver`,省略时兼容为 `sender`;筛选必须在数据库分页前完成。
|
|
|
- **FR-064**:订单创建人和已绑定收件人均可查询订单详情并确认签收;只有订单创建人可以主动取消订单。交付 PIN 对两类参与者可见。
|
|
|
- **FR-065**:`URGENT` 表示 1 对 1 独占配送。骑手已有未送达外卖、`ACCEPTED` 或 `PICKED_UP` 闪送时不得接急送;骑手存在 `ACCEPTED` 或 `PICKED_UP` 急送时不得再接任何外卖或闪送。
|
|
|
-- **FR-066**:所有有效骑手接单入口必须先锁定同一骑手用户行,再检查跨外卖和闪送订单的独占条件并执行接单,避免并发绕过。
|
|
|
+- **FR-066**:所有有效骑手接单入口必须使用同一 Redisson 锁键 `lock:delivery:rider:{riderId}`,在持锁期间检查跨外卖和闪送订单的独占条件并执行接单;锁必须在数据库事务完成后释放,获取超时或 Redis 异常时按失败关闭原则拒绝接单。
|
|
|
- **FR-067**:闪送继续保持非支付业务,创建成功直接进入 `WAITING_ACCEPTANCE`,不增加待支付状态、支付倒计时、支付接口或退款流程。
|
|
|
- **FR-068**:所有闪送金额继续使用整数 TWD;蓝湖稿中的小数金额仅为视觉占位,不改变接口和数据库金额类型。
|
|
|
- **FR-069**:用户端不得展示固定或伪造的附近骑手人数及预计接单分钟数,统一使用“发布后等待附近骑手接单”;本期不增加实时骑手数量或接单预测接口。
|