|
|
@@ -227,3 +227,44 @@
|
|
|
|
|
|
- `GET /system/flashDelivery/rider/orders` 摘要新增 `userNote`:骑手本人任务页签(`toPickup/delivering/completed/cancelled`)返回订单备注,无需进详情;`newTask` 待抢单卡片按接单前脱敏规则固定为 `null`,与详情接口的备注可见性一致。
|
|
|
|
|
|
+
|
|
|
+## 2026-10-14:多点取送 v2 创建契约(新增;旧接口过渡期保留,确认待实施)
|
|
|
+
|
|
|
+### v2 报价与创建
|
|
|
+
|
|
|
+| 方法 | 路径 | 说明 |
|
|
|
+| --- | --- | --- |
|
|
|
+| POST | `/system/flashDelivery/v2/quote` | 统一结构报价:订单级物品 + `pickups[]`(1..N) + `deliveries[]`(1..M) |
|
|
|
+| POST | `/system/flashDelivery/v2/orders` | 按 v2 报价创建订单,服务端复算费用与路线 |
|
|
|
+
|
|
|
+请求结构(要点):取货点与收货点放在同一个 `stops[]` 数组,顺序即用户添加顺序、也是骑手路线顺序,元素以 `type`(`PICKUP`/`DELIVERY`)区分:
|
|
|
+
|
|
|
+```json
|
|
|
+{
|
|
|
+ "stops": [
|
|
|
+ {"type":"PICKUP","name":"李先生","phone":"17788889999","address":"台北市大安區信義路三段56號","addressDetail":"10樓","latitude":25.0330,"longitude":121.5654,"remark":"取 4 盒月餅"},
|
|
|
+ {"type":"PICKUP","name":"王小姐","phone":"17788880000","address":"台北市信義區松高路11號","addressDetail":"1樓門市","latitude":25.0410,"longitude":121.5670,"remark":"取 2 箱牛奶"},
|
|
|
+ {"type":"DELIVERY","name":"陳先生","phone":"17788881111","address":"台北市松山區南京東路五段123巷4弄5號","addressDetail":"3樓","latitude":25.0520,"longitude":121.5760,"remark":"整份交給管理室代收"}
|
|
|
+ ],
|
|
|
+ "packageType":"食品雜貨","quantity":8,"weightRange":"4","specification":null,
|
|
|
+ "deliveryMode":"NOW","payType":"CASH","tipAmount":0
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+地址模型与 Lalamove 一致:站点只存 `address` 完整地址文本(台湾地址为连续文字,不做城市/区结构化拆分)、可选 `addressDetail`(樓層/室)与必填经纬度;路线与计价以经纬度为准,地址文本用于展示和骑手导航。物品主体 `packageType,quantity,weightRange?,specification?` 只出现一次;`remark` 选填、不超过 200 字;预约时间、支付方式、小费等订单级字段沿用现有契约。服务端校验:至少 1 个 `PICKUP` 与 1 个 `DELIVERY`、取货站必须全部位于收货站之前(先取完再送,交错取送属后续增量),并按 `flash_pickup_stop_limit`/`flash_delivery_stop_limit` 与对应多点开关限制数量;v2 运费计算使用独立的新计价方法,报价路线经点为全部站点,整线 40 公里上限不变。旧单点订单的市/区结构化字段仅随旧接口与旧订单继续存在。
|
|
|
+
|
|
|
+响应要点:报价返回整线距离、时长与费用明细(结构同现有报价);创建返回订单详情,站点数组含每站 `stopId`、状态与备注;收货站按联系人电话固化 `receiverUserId`(可空)。启用收货码时每个收货站返回独立 `deliveryPinCode`,仅订单参与方可见。
|
|
|
+
|
|
|
+### 骑手逐站送达
|
|
|
+
|
|
|
+| 方法 | 路径 | 说明 |
|
|
|
+| --- | --- | --- |
|
|
|
+| POST | `/system/flashDelivery/rider/orders/{id}/stops/{stopId}/deliver` | `{"imageUrls":[...]}` 至少一张;幂等重试返回已确认结果 |
|
|
|
+
|
|
|
+全部收货站确认送达后才推进主状态 DELIVERED 并生成骑手收入账单;任一收货站已送达后订单进入禁止取消状态(用户与平台同口径)。
|
|
|
+
|
|
|
+### 废弃与退役计划
|
|
|
+
|
|
|
+- 自 v2 上线起,`POST /system/flashDelivery/quote`、`POST /system/flashDelivery/orders`(含旧单点 `pickup`、逐站物品 `pickups`、混传校验)及旧送达接口标注废弃:代码 `@Deprecated` + 本契约标注"过渡期保留";行为冻结,不接收新功能,既有线上 App 不受影响。
|
|
|
+- 退役删除为独立收尾批次,前置条件:用户/骑手 App 两端全部切换 v2 并通过真实环境联调;删除范围含旧结构 DTO 与互斥校验、对应测试、本契约废弃段落及 `pickupStopLimit`/`showMultiPickup` 等被 v2 字段取代的首页配置。
|
|
|
+- 数据无迁移:v2 订单与旧订单共用站点表;`remark`、按站收件人与按站收货码仅 v2 新订单写入。
|