|
@@ -4,7 +4,7 @@
|
|
|
|
|
|
|
|
**创建日期**:2026-08-31
|
|
**创建日期**:2026-08-31
|
|
|
|
|
|
|
|
-**状态**:平台前端与外卖同规则时段运价调整已实现并通过约定验证
|
|
|
|
|
|
|
+**状态**:平台前端与外卖同规则时段运价调整已验证;App 列表精简设计已确认、待实现
|
|
|
|
|
|
|
|
**输入**:基于蓝湖“闪送”分组 7 个设计页面及 2026-08-24 用户端/骑手端补充原型,实现帮送、帮取、加急送的完整非支付业务闭环,包括共享地址簿、路线报价、包裹信息、立即/预约配送、可选 PIN 交付、创建订单、骑手主动抢单、取件、送达、用户签收、平台配置与介入。
|
|
**输入**:基于蓝湖“闪送”分组 7 个设计页面及 2026-08-24 用户端/骑手端补充原型,实现帮送、帮取、加急送的完整非支付业务闭环,包括共享地址簿、路线报价、包裹信息、立即/预约配送、可选 PIN 交付、创建订单、骑手主动抢单、取件、送达、用户签收、平台配置与介入。
|
|
|
|
|
|
|
@@ -33,15 +33,15 @@
|
|
|
|
|
|
|
|
### 用户故事 2:骑手从闪送列表主动抢单并完成配送(优先级:P1)
|
|
### 用户故事 2:骑手从闪送列表主动抢单并完成配送(优先级:P1)
|
|
|
|
|
|
|
|
-骑手在闪送待接单列表中查看可抢订单,主动抢单后依次上传取件和送达图片,完成实际配送。
|
|
|
|
|
|
|
+骑手通过与骑手外卖订单一致的单一分页列表和页签参数查看新任务、待取件、配送中、已完成及已取消任务,主动抢单后依次上传取件和送达图片,完成实际配送。
|
|
|
|
|
|
|
|
**优先级原因**:第一版明确采用骑手主动抢单,不实现自动派单;抢单与配送状态流转是业务闭环的核心。
|
|
**优先级原因**:第一版明确采用骑手主动抢单,不实现自动派单;抢单与配送状态流转是业务闭环的核心。
|
|
|
|
|
|
|
|
-**独立测试**:创建一笔待接单订单,由两个骑手并发抢单,验证只有一个骑手成功;成功骑手上传取件和送达图片后,订单依次进入已取件和已送达状态。
|
|
|
|
|
|
|
+**独立测试**:使用 `page、size、tab、longitude、latitude` 查询骑手闪送列表,验证五个页签的状态映射、本人订单边界、附近任务距离和接单前字段;再由两个骑手并发抢同一订单,验证只有一个骑手成功,成功骑手上传取件和送达图片后订单依次进入已取件和已送达状态。
|
|
|
|
|
|
|
|
**验收场景**:
|
|
**验收场景**:
|
|
|
|
|
|
|
|
-1. **假如** 同时存在普通和加急待接订单,**当** 骑手查询闪送列表,**那么** 加急订单优先展示,其余订单按发布时间排序。
|
|
|
|
|
|
|
+1. **假如** 骑手传入 `tab=newTask` 和当前位置,**当** 查询闪送列表,**那么** 系统只返回当前可抢任务,并按与骑手外卖新任务列表一致的附近范围和距离规则处理。
|
|
|
2. **假如** 两名骑手同时抢同一订单,**当** 两个请求并发到达,**那么** 只有一名骑手成功,另一名收到订单已被接走的业务结果。
|
|
2. **假如** 两名骑手同时抢同一订单,**当** 两个请求并发到达,**那么** 只有一名骑手成功,另一名收到订单已被接走的业务结果。
|
|
|
3. **假如** 骑手尚未抢到订单,**当** 其尝试确认取件或送达,**那么** 系统拒绝操作且不泄露完整联系方式。
|
|
3. **假如** 骑手尚未抢到订单,**当** 其尝试确认取件或送达,**那么** 系统拒绝操作且不泄露完整联系方式。
|
|
|
4. **假如** 已接单骑手未提交取件图片,**当** 其确认取件,**那么** 系统拒绝状态变更。
|
|
4. **假如** 已接单骑手未提交取件图片,**当** 其确认取件,**那么** 系统拒绝状态变更。
|
|
@@ -49,7 +49,9 @@
|
|
|
6. **假如** 图片要求已满足,**当** 订单骑手按顺序确认取件和送达,**那么** 系统保存凭证、操作人和时间并完成对应状态变更。
|
|
6. **假如** 图片要求已满足,**当** 订单骑手按顺序确认取件和送达,**那么** 系统保存凭证、操作人和时间并完成对应状态变更。
|
|
|
7. **假如** 订单启用 PIN 交付,**当** 骑手提交错误 PIN,**那么** 系统拒绝送达且不保存送达图片或改变状态。
|
|
7. **假如** 订单启用 PIN 交付,**当** 骑手提交错误 PIN,**那么** 系统拒绝送达且不保存送达图片或改变状态。
|
|
|
8. **假如** 订单启用 PIN 交付,**当** 骑手提交正确 PIN 和送达图片,**那么** 系统验证 PIN 后进入已送达状态。
|
|
8. **假如** 订单启用 PIN 交付,**当** 骑手提交正确 PIN 和送达图片,**那么** 系统验证 PIN 后进入已送达状态。
|
|
|
-9. **假如** 骑手尚未接单,**当** 查看列表或详情,**那么** 仅返回包裹、时段、路线区域和报价等安全摘要,不返回完整门牌、联系人、电话、PIN 或内部字段。
|
|
|
|
|
|
|
+9. **假如** 骑手尚未接单,**当** 查看列表或详情,**那么** 系统按原型返回完整取送文字地址、包裹、时段、路线、金额和是否需要 PIN 等接单判断信息,但不返回联系人、电话、实际 PIN、精确坐标或内部字段。
|
|
|
|
|
+10. **假如** 骑手切换 `toPickup`、`delivering`、`completed` 或 `cancelled` 页签,**当** 查询列表,**那么** 系统只返回当前骑手本人且符合页签状态映射的任务。
|
|
|
|
|
+11. **假如** 骑手查看列表顶部摘要,**当** 当前页签为 `newTask`,**那么** 系统返回附近任务总数和最高订单金额,不返回尖峰倍率或骑手收入字段。
|
|
|
|
|
|
|
|
---
|
|
---
|
|
|
|
|
|
|
@@ -72,7 +74,7 @@
|
|
|
|
|
|
|
|
### 用户故事 4:用户跟踪、取消和签收自己的订单(优先级:P1)
|
|
### 用户故事 4:用户跟踪、取消和签收自己的订单(优先级:P1)
|
|
|
|
|
|
|
|
-用户查看自己的闪送订单与状态日志,可以在允许阶段取消订单,并在骑手送达后确认签收。
|
|
|
|
|
|
|
+用户查看自己的闪送订单与履约进度,可以在允许阶段取消订单,并在骑手送达后确认签收。
|
|
|
|
|
|
|
|
**优先级原因**:用户需要了解履约进度,并对尚未实际取件的订单保留取消能力。
|
|
**优先级原因**:用户需要了解履约进度,并对尚未实际取件的订单保留取消能力。
|
|
|
|
|
|
|
@@ -85,6 +87,7 @@
|
|
|
3. **假如** 骑手已确认送达,**当** 订单用户确认签收,**那么** 订单进入已完成状态。
|
|
3. **假如** 骑手已确认送达,**当** 订单用户确认签收,**那么** 订单进入已完成状态。
|
|
|
4. **假如** 骑手送达后用户 24 小时未确认,**当** 自动完成任务执行,**那么** 订单进入已完成状态并记录自动操作日志。
|
|
4. **假如** 骑手送达后用户 24 小时未确认,**当** 自动完成任务执行,**那么** 订单进入已完成状态并记录自动操作日志。
|
|
|
5. **假如** 用户访问其他用户的订单,**当** 其查询详情、取消或签收,**那么** 系统拒绝访问。
|
|
5. **假如** 用户访问其他用户的订单,**当** 其查询详情、取消或签收,**那么** 系统拒绝访问。
|
|
|
|
|
+6. **假如** 用户查询订单列表,**当** 仅提交 `page` 和 `size`,**那么** 系统按创建时间倒序返回本人各状态订单的轻量摘要,不要求客户端提交 `scene`、`status` 或 `serviceType`。
|
|
|
|
|
|
|
|
---
|
|
---
|
|
|
|
|
|
|
@@ -132,7 +135,7 @@
|
|
|
- 地图路线结果缺少有效距离时按路线失败处理并降级为直线距离。
|
|
- 地图路线结果缺少有效距离时按路线失败处理并降级为直线距离。
|
|
|
- 创建订单时当前配置与先前报价时不同,以创建时服务端重新计算结果为准。
|
|
- 创建订单时当前配置与先前报价时不同,以创建时服务端重新计算结果为准。
|
|
|
- 待接单列表仅返回待接单订单;已取消或已被抢走的订单不得继续出现在新查询结果中。
|
|
- 待接单列表仅返回待接单订单;已取消或已被抢走的订单不得继续出现在新查询结果中。
|
|
|
-- 待抢订单列表隐藏完整电话和门牌信息;骑手抢单成功后才能读取配送所需的完整快照。
|
|
|
|
|
|
|
+- 待抢订单列表按原型显示完整取送文字地址,但隐藏联系人、电话、实际 PIN、精确坐标和内部字段;抢单成功后订单骑手才能读取履约所需的完整联系方式与坐标。
|
|
|
- 骑手第一版不能自行放弃已抢订单,需要平台介入处理。
|
|
- 骑手第一版不能自行放弃已抢订单,需要平台介入处理。
|
|
|
- 已完成和已取消为终态,不允许再次变更。
|
|
- 已完成和已取消为终态,不允许再次变更。
|
|
|
- 自动完成任务与用户确认、平台完成并发时,只允许一个状态变更成功且不得重复写入完成副作用。
|
|
- 自动完成任务与用户确认、平台完成并发时,只允许一个状态变更成功且不得重复写入完成副作用。
|
|
@@ -157,8 +160,8 @@
|
|
|
- **FR-011**:闪送订单不得复用餐饮订单或打车订单数据模型。
|
|
- **FR-011**:闪送订单不得复用餐饮订单或打车订单数据模型。
|
|
|
- **FR-012**:订单必须保存包裹类别和机车可载重量档,重量档为 `SMALL`(不超过 5kg)、`MEDIUM`(不超过 12kg)或 `LARGE`(不超过 20kg);不保存精确重量或件数。
|
|
- **FR-012**:订单必须保存包裹类别和机车可载重量档,重量档为 `SMALL`(不超过 5kg)、`MEDIUM`(不超过 12kg)或 `LARGE`(不超过 20kg);不保存精确重量或件数。
|
|
|
- **FR-013**:订单必须支持用户备注,但备注不参与计价。
|
|
- **FR-013**:订单必须支持用户备注,但备注不参与计价。
|
|
|
-- **FR-014**:骑手必须通过独立闪送待接单列表主动抢单,第一阶段不实现自动派单。
|
|
|
|
|
-- **FR-015**:待接单列表必须按加急优先、创建时间次优先的顺序返回。
|
|
|
|
|
|
|
+- **FR-014**:骑手必须通过统一闪送订单列表的 `newTask` 页签主动抢单,第一阶段不实现自动派单。
|
|
|
|
|
+- **FR-015**:骑手闪送列表必须复用骑手外卖订单列表的查询参数名称和分页习惯:`page`、`size`、`tab`、`longitude`、`latitude`;不得再拆分为 `available`、`mine` 或叠加 `scene`、`status`、`serviceType` 筛选。
|
|
|
- **FR-016**:骑手抢单必须使用原子条件更新,确保同一订单最多由一名骑手抢到。
|
|
- **FR-016**:骑手抢单必须使用原子条件更新,确保同一订单最多由一名骑手抢到。
|
|
|
- **FR-017**:订单状态必须包括待接单、已接单、已取件、已送达、已完成和已取消。
|
|
- **FR-017**:订单状态必须包括待接单、已接单、已取件、已送达、已完成和已取消。
|
|
|
- **FR-018**:只有抢到订单的骑手能够确认取件和送达。
|
|
- **FR-018**:只有抢到订单的骑手能够确认取件和送达。
|
|
@@ -172,7 +175,7 @@
|
|
|
- **FR-026**:每次有效状态变更必须记录变更前状态、变更后状态、操作人类型、操作人 ID、原因和时间。
|
|
- **FR-026**:每次有效状态变更必须记录变更前状态、变更后状态、操作人类型、操作人 ID、原因和时间。
|
|
|
- **FR-027**:所有状态变更必须校验当前状态、业务归属和操作角色,并防止并发覆盖。
|
|
- **FR-027**:所有状态变更必须校验当前状态、业务归属和操作角色,并防止并发覆盖。
|
|
|
- **FR-028**:用户只能查询、取消和签收自己的闪送订单。
|
|
- **FR-028**:用户只能查询、取消和签收自己的闪送订单。
|
|
|
-- **FR-029**:骑手在抢单前只能看到履约判断所需的脱敏信息,抢单成功后才能查看完整联系方式和门牌信息。
|
|
|
|
|
|
|
+- **FR-029**:骑手在抢单前可查看完整取送文字地址及履约判断所需的订单摘要,但不得获得联系人、电话、实际 PIN、精确坐标或内部字段;抢单成功后才能查看完整联系方式和坐标。
|
|
|
- **FR-030**:闪送必须与现有收货场景共用 `info_address` 地址数据。
|
|
- **FR-030**:闪送必须与现有收货场景共用 `info_address` 地址数据。
|
|
|
- **FR-031**:统一地址接口必须要求登录身份,并对详情、修改、删除和置顶执行地址所有权校验。
|
|
- **FR-031**:统一地址接口必须要求登录身份,并对详情、修改、删除和置顶执行地址所有权校验。
|
|
|
- **FR-032**:地址列表必须支持按当前用户的姓名、电话和地址关键词搜索,并支持置顶排序。
|
|
- **FR-032**:地址列表必须支持按当前用户的姓名、电话和地址关键词搜索,并支持置顶排序。
|
|
@@ -188,8 +191,8 @@
|
|
|
- **FR-042**:用户可选择是否启用 4 位数字交付 PIN;启用后骑手必须同时提交正确 PIN 和至少一张送达图片。
|
|
- **FR-042**:用户可选择是否启用 4 位数字交付 PIN;启用后骑手必须同时提交正确 PIN 和至少一张送达图片。
|
|
|
- **FR-043**:PIN 只对订单用户和有权限的平台管理员可见,不得返回给待接单或已接单骑手,也不得写入业务日志。
|
|
- **FR-043**:PIN 只对订单用户和有权限的平台管理员可见,不得返回给待接单或已接单骑手,也不得写入业务日志。
|
|
|
- **FR-044**:创建订单可提交 1 至 9 张可选寄件图片;凭证类型扩展为 `SENDER`、`PICKUP`、`DELIVERY` 并记录操作人类型。
|
|
- **FR-044**:创建订单可提交 1 至 9 张可选寄件图片;凭证类型扩展为 `SENDER`、`PICKUP`、`DELIVERY` 并记录操作人类型。
|
|
|
-- **FR-045**:用户和骑手列表必须支持页面状态分组并在服务端完成分页,禁止先分页后由客户端过滤多个底层状态。
|
|
|
|
|
-- **FR-046**:用户和骑手详情必须使用角色专用响应视图,不得直接序列化订单实体、客户端幂等号、内部用户 ID 或计价审计字段。
|
|
|
|
|
|
|
+- **FR-045**:用户订单列表必须只接收 `page` 和 `size`,按创建时间倒序返回本人全部状态的轻量摘要;骑手订单列表必须按 `tab` 在服务端映射底层状态并完成分页,禁止先分页后由客户端过滤。
|
|
|
|
|
+- **FR-046**:用户列表、骑手列表和角色详情必须分别使用专用响应视图。App 详情响应的 `data` 必须直接是订单详情,不得再套 `order`、`images` 或 `logs`;照片使用 `senderImageUrls`、`pickupImageUrls`、`deliveryImageUrls` 等明确字段,原始状态日志只允许平台审计详情返回。
|
|
|
- **FR-047**:骑手接单后,用户可读取骑手昵称、头像和评分等公开摘要;实时位置只在配送进行状态向订单用户返回。
|
|
- **FR-047**:骑手接单后,用户可读取骑手昵称、头像和评分等公开摘要;实时位置只在配送进行状态向订单用户返回。
|
|
|
- **FR-048**:路线距离不得超过 40 公里;超过限制时报价和创建均拒绝。
|
|
- **FR-048**:路线距离不得超过 40 公里;超过限制时报价和创建均拒绝。
|
|
|
- **FR-049**:平台管理前端必须提供“闪送管理”父菜单,并提供“价格配置”和“闪送订单”两个子页面。
|
|
- **FR-049**:平台管理前端必须提供“闪送管理”父菜单,并提供“价格配置”和“闪送订单”两个子页面。
|
|
@@ -201,6 +204,9 @@
|
|
|
- **FR-055**:平台取消必须要求非空原因和二次确认;平台完成必须二次确认。操作成功后刷新服务端数据,操作失败时保留当前页面并显示后端错误。
|
|
- **FR-055**:平台取消必须要求非空原因和二次确认;平台完成必须二次确认。操作成功后刷新服务端数据,操作失败时保留当前页面并显示后端错误。
|
|
|
- **FR-056**:平台前端新增的全部用户可见文本必须通过 Vue i18n 提供简体中文、繁体中文、英文和越南文,不得硬编码单一语言文本。
|
|
- **FR-056**:平台前端新增的全部用户可见文本必须通过 Vue i18n 提供简体中文、繁体中文、英文和越南文,不得硬编码单一语言文本。
|
|
|
- **FR-057**:平台前端必须沿用现有 Vue 2、Element UI、若依请求封装、动态菜单和 `v-hasPermi` 体系,不新增重复的状态管理或 UI 框架。
|
|
- **FR-057**:平台前端必须沿用现有 Vue 2、Element UI、若依请求封装、动态菜单和 `v-hasPermi` 体系,不新增重复的状态管理或 UI 框架。
|
|
|
|
|
+- **FR-058**:骑手列表 `tab` 只接受 `newTask`、`toPickup`、`delivering`、`completed` 和 `cancelled`,分别映射待接单、已接单、已取件、已送达/已完成和已取消;闪送不提供外卖退款页签。
|
|
|
|
|
+- **FR-059**:骑手 `newTask` 列表必须返回取件点距离、路线距离、预计时长、订单金额、包裹类别、重量档、配送方式、预约时段、完整取送文字地址和是否需要 PIN,并返回附近任务总数与最高订单金额;不得返回已移除的尖峰倍率或尚未实现的骑手收入。
|
|
|
|
|
+- **FR-060**:用户创建订单、用户详情、骑手详情和骑手接单成功响应必须使用直接且稳定的 App 订单详情结构;权限差异只影响敏感字段是否返回,不得改变 `data` 的顶层形状,也不得要求 App 通过 `data.order` 是否存在判断响应类型。
|
|
|
|
|
|
|
|
### 关键实体
|
|
### 关键实体
|
|
|
|
|
|