|
|
@@ -16,7 +16,7 @@
|
|
|
|
|
|
- **维度**两个,独立开关、可交叉:**商家餐饮单维度**(用户向商家付款的订单)、**骑手闪送维度**(用户直接付骑手的闪送订单)。例如"线下转账"可以商家侧关、骑手侧开。
|
|
|
- **资金流不变**:闪送款项用户直接付骑手(现金 / LINE Pay 好友转账 / 银行转账),平台不经手。
|
|
|
-- 支付方式取值域(与现有系统一致):1=到付、2=信用卡(OMG)、3=LINE Pay、4=现金(仅商家建单场景)、5=Apple Pay(OMG)、6=线下转账。
|
|
|
+- 支付方式取值域(与现有系统一致):1=到付、2=信用卡(OMG)、3=LINE Pay、4=现金(商家建单场景 + 用户自取/堂食下单,受商家勾选管控但无平台开关,见 FR-006)、5=Apple Pay(OMG)、6=线下转账。
|
|
|
|
|
|
## User Scenarios & Testing *(mandatory)*
|
|
|
|
|
|
@@ -51,6 +51,7 @@
|
|
|
2. **Given** 商家只勾选"到付、现金",**When** 用户下单,**Then** 结算页仅展示到付、现金(仍受平台开关约束)。
|
|
|
3. **Given** 连锁商家主账号修改支付方式选择,**When** 任意门店视角查看,**Then** 配置一致(主账号级共享)。
|
|
|
4. **Given** 平台后续关闭了商家已勾选的某方式,**When** 用户下单,**Then** 该方式仍不可见(平台开关优先)。
|
|
|
+5. **Given** 商家勾选了「现金」,**When** 用户创建自取/堂食订单,**Then** 结算页出现现金选项(2026-09-20 变更,见 US7);商家取消勾选后自取/堂食不再出现现金,外送订单始终不受勾选影响(现金本就不可用于外送)。
|
|
|
|
|
|
---
|
|
|
|
|
|
@@ -119,13 +120,31 @@
|
|
|
|
|
|
---
|
|
|
|
|
|
+### User Story 7 - 自取/堂食订单支持现金支付 (Priority: P1)(2026-09-20 新增)
|
|
|
+
|
|
|
+用户创建自取(type=1)或堂食(type=2)订单时,可选择现金支付;到店后线下付款,订单不经过在线支付环节。现金可用性 = **商家勾选**(含未设置默认接受),**无平台开关、无就绪度**(现金无需凭证)。外送订单(type=0)不可选现金——绕过界面直传被后端拒绝并返回国际化提示;商家建单与闪送缺省现金保持现状(均不套用本管控)。现金自取/堂食订单创建后不进入「待付款」,与到付同理直接进入「进行中」,由商家线下收款后按既有流程履约。
|
|
|
+
|
|
|
+**Why this priority**: 用户明确提出的新需求;复用 031 已有的商家勾选与闸门骨架,增量小。
|
|
|
+
|
|
|
+**Independent Test**: 商家勾选现金后,用户自取下单选择现金成功且订单直接进入进行中;外送单直传现金被拒;商家取消勾选后自取/堂食不再出现现金。
|
|
|
+
|
|
|
+**Acceptance Scenarios**:
|
|
|
+
|
|
|
+1. **Given** 商家勾选「现金」(或从未设置),**When** 用户创建自取/堂食订单并选现金,**Then** 下单成功,订单不进入待付款页签、直接可见于进行中。
|
|
|
+2. **Given** 商家取消勾选「现金」,**When** 用户在其自取/堂食结算页查询可用支付方式,**Then** 不返回现金项;绕过界面直传现金下单被拒绝并返回所用语言提示。
|
|
|
+3. **Given** 用户创建外送订单(type=0),**When** 直传现金支付方式,**Then** 后端拒绝并返回国际化提示(老客户端兜底,不静默失败)。
|
|
|
+4. **Given** 现金自取/堂食订单存在,**When** 用户取消或商家按既有流程处理,**Then** 与到付订单行为一致,无在线退款环节。
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
### Edge Cases
|
|
|
|
|
|
- 平台关闭某方式时,已存在但未支付的旧订单如何处理?→ 下单校验(US3)在创建时点生效;已创建订单不追溯改动。
|
|
|
- 商家清空全部支付方式勾选?→ 视同未设置,回落为"全部启用"(与 NULL 语义一致,防止商家把自己锁死)。
|
|
|
- 骑手维度关闭平台某方式后,历史闪送订单的支付方式字段?→ 记录的是下单时点值,不追溯。
|
|
|
- 信用卡与 Apple Pay:作为同一组(OMG 渠道)一个开关,开关与商家勾选均同开同关。
|
|
|
-- 现金(4)特殊:不纳入商家勾选管控(仅商家建单场景使用),平台开关也不覆盖它。
|
|
|
+- 现金(4)特殊:无平台开关、无就绪度(无需凭证);纳入商家勾选管控(2026-09-20 变更)。可用场景 = 商家建单(现状不变)+ 用户自取/堂食下单且商家接受(未设置默认接受);用户外送单一律拒绝。
|
|
|
+- 现金自取/堂食订单的到店收款为线下行为,平台不追踪现金到账,不阻塞履约(同到付语义)。
|
|
|
- 到付(1)纳入管控且默认开。
|
|
|
- 老客户端(不感知新字段/新逻辑):一律由后端校验拒绝并返回国际化提示;银行信息查询接口保持原结构兼容。
|
|
|
|
|
|
@@ -134,11 +153,11 @@
|
|
|
### Functional Requirements
|
|
|
|
|
|
- **FR-001**: 系统 MUST 提供平台级支付方式开关,按"支付方式 × 维度(商家餐饮单 / 骑手闪送)"独立控制,默认全部开启。
|
|
|
-- **FR-002**: 某支付方式对一笔订单可用 MUST 满足三层闸门:平台开关开启 ∩ 收款方接受 ∩ 就绪度满足(线上渠道有凭证、线下转账有启用银行卡)。
|
|
|
+- **FR-002**: 某支付方式对一笔订单可用 MUST 满足三层闸门:平台开关开启 ∩ 收款方接受 ∩ 就绪度满足(线上渠道有凭证、线下转账有启用银行卡)。**例外**:现金(4)仅适用收款方接受层(无平台开关、无就绪度),且仅限商家建单与用户自取/堂食场景(FR-006)。
|
|
|
- **FR-003**: 商家 MUST 能在商家端选择接受的支付方式,选择在主账号级生效(连锁共享);未设置或清空时 MUST 等同接受全部(存量行为零变化)。
|
|
|
- **FR-004**: 系统 MUST 在创建订单时校验支付方式满足闸门,不满足时以用户所用语言返回明确错误提示(兼容老 App,不静默失败)。该校验 MUST 封装为单一独立方法,作为唯一校验入口;所有下单路径(用户餐饮下单、商家建单、闪送下单)MUST 在下单时统一调用该方法,MUST NOT 在各入口重复实现校验逻辑。
|
|
|
- **FR-005**: 信用卡与 Apple Pay MUST 作为同一组方式展示与控制(同开同关)。
|
|
|
-- **FR-006**: 到付(1)MUST 纳入平台开关管控且默认开;现金(4)MUST 不纳入本管控(仅商家建单场景)。
|
|
|
+- **FR-006**: 到付(1)MUST 纳入平台开关管控且默认开;现金(4)MUST NOT 纳入平台开关与就绪度管控,MUST 纳入商家勾选(MERCHANT 维度收款方选择,未设置默认接受)。现金可用场景 = 商家建单(现状)+ 用户自取/堂食下单且商家接受;用户外送订单传现金 MUST 被拒绝并返回国际化提示。
|
|
|
- **FR-007**: 用户闪送下单时 MUST 选择支付方式且被订单记录;可选项 = 闪送维度平台开关 ∩ 就绪度。
|
|
|
- **FR-008**: 骑手 MUST 能设置接受的闪送收款方式;未设置时 MUST 默认接受平台开放的全部方式。
|
|
|
- **FR-009**: 骑手抢单列表 MUST 只展示支付方式为其接受的闪送订单。
|
|
|
@@ -153,7 +172,7 @@
|
|
|
|
|
|
### Key Entities *(include if feature involves data)*
|
|
|
|
|
|
-- **支付方式**: 业务枚举(到付、信用卡、Apple Pay、LINE Pay、现金、线下转账),信用卡与 Apple Pay 同组。
|
|
|
+- **支付方式**: 业务枚举(到付、信用卡、Apple Pay、LINE Pay、现金、线下转账),信用卡与 Apple Pay 同组;现金为商家勾选组(CASH,无平台开关行)。
|
|
|
- **平台支付方式开关**: 方式 × 维度(商家餐饮单/骑手闪送)× 启停状态。
|
|
|
- **商家支付方式选择**: 商家主账号 → 接受的方式集合;空=全部。
|
|
|
- **骑手闪送收款方式选择**: 骑手 → 接受的方式集合;空=平台开放全部。
|
|
|
@@ -170,6 +189,7 @@
|
|
|
- **SC-004**: 027 迁移完成后,全部存量有银行信息的商家线下转账展示不回退(迁移覆盖率 100%)。
|
|
|
- **SC-005**: 闪送抢单列表中不再出现骑手不接受支付方式的订单(过滤准确率 100%)。
|
|
|
- **SC-006**: 平台设置页与商家端设置页全部文案覆盖四语言(vi/zh/tw/en),无硬编码。
|
|
|
+- **SC-007**(2026-09-20 新增): 用户外送订单直传现金 100% 被拒绝并返回所用语言提示;勾选现金的商家,其自取/堂食结算页 100% 出现现金项且订单直接进入进行中(不经待付款)。
|
|
|
|
|
|
## Assumptions
|
|
|
|