|
@@ -17,16 +17,16 @@
|
|
|
已确认:
|
|
已确认:
|
|
|
|
|
|
|
|
- 一次多店结算按店生成独立子订单,款项分别付给对应商家,不改为平台代收。
|
|
- 一次多店结算按店生成独立子订单,款项分别付给对应商家,不改为平台代收。
|
|
|
-- 新批次创建时各子单待收银确认,不预先认定付款方式;线上须服务端确认支付成功,到付须用户选择并由服务端校验确认。全部成员就绪前,商家/骑手不能提前履约。
|
|
|
|
|
|
|
+- 新批次创建时须按参与门店逐店提交付款方式:线上子单待真实付款,到付子单由本次明确选择当场确认;服务端不默认到付。全部成员就绪前,商家/骑手不能提前履约。
|
|
|
- 首版纳入即时配送、预约配送和到付;夜市自配送、自取沿用原流程,不加入本次多店批次规则。
|
|
- 首版纳入即时配送、预约配送和到付;夜市自配送、自取沿用原流程,不加入本次多店批次规则。
|
|
|
- 新预约时间语义与倒推最迟接单算法仍留后续;2026-10-16 已确认本轮接入 037 现有无人接单超时规则,不再将这项接入延期。普通平台配送外卖和新多店预约沿原有效开放时点持久扫描,支持重启补扫、幂等开放与通知重试;新批次额外要求已生效,普通预约不套用多店期限。夜市自配送、自取不纳入。
|
|
- 新预约时间语义与倒推最迟接单算法仍留后续;2026-10-16 已确认本轮接入 037 现有无人接单超时规则,不再将这项接入延期。普通平台配送外卖和新多店预约沿原有效开放时点持久扫描,支持重启补扫、幂等开放与通知重试;新批次额外要求已生效,普通预约不套用多店期限。夜市自配送、自取不纳入。
|
|
|
- 各商家可独立设置支付方式,多店不要求共同渠道;本功能仅开放各店已可用的LINE Pay、OMG和到付,不擅自改变商家设置。
|
|
- 各商家可独立设置支付方式,多店不要求共同渠道;本功能仅开放各店已可用的LINE Pay、OMG和到付,不擅自改变商家设置。
|
|
|
-- 同批可按店混用LINE Pay、OMG和到付,逐笔收银时选择;即使最终全部到付,也须逐单完成到付确认,不能创建即生效或因旧payStatus=1默认就绪。
|
|
|
|
|
-- 全部新批次共用创建起15分钟支付发起/到付确认期限,支付下一店、重试/回页面不延长;支付完成与服务端确认缓冲默认5分钟、平台可配置,创建时固化时长和最终确认截止。第15分钟停止新的支付发起、重试、切换方式及到付确认;截止前服务端已记录并实际发起的线上支付尝试,允许在缓冲期继续完成用户认证、渠道付款和服务端确认。此口径经用户确认,取代严格要求第15分钟前完成付款的旧口径;并非第15分钟后仍可发起新交易。全部真实成员经服务端确认合法就绪立即生效,无需等满缓冲;最终确认截止仍未就绪整批取消,真实实收全退含运费、未收款到付只取消。已取消后迟到实收退款、不重开。
|
|
|
|
|
|
|
+- 同批可按店混用LINE Pay、OMG和到付,建批时逐店选择并保存;全到付在建批时全部确认,可创建即生效,但须另满足即时/预约开放条件才能让骑手抢单。旧`payStatus=1`不能代替用户本次明确选择。
|
|
|
|
|
+- 全部新批次共用创建起15分钟线上支付发起/方式改选期限,支付下一店、重试/回页面不延长;支付完成与服务端确认缓冲默认5分钟、平台可配置,创建时固化时长和最终确认截止。第15分钟停止新的支付发起、重试及方式改选;截止前服务端已记录并实际发起的线上支付尝试,允许在缓冲期继续完成用户认证、渠道付款和服务端确认。此口径取代严格要求第15分钟前完成付款的旧口径;并非第15分钟后仍可发起新交易。全部真实成员经服务端确认合法就绪立即生效,无需等满缓冲;最终确认截止仍未就绪整批取消,真实实收全退含运费、未收款到付只取消。已取消后迟到实收退款、不重开。
|
|
|
- 新多店批次不支持线下转账(payType=6),无论是否选择同骑手;原单店转账订单、入口和商家配置保持不变。本轮不新增转账核款/人工退款流程,不关闭全系统转账。
|
|
- 新多店批次不支持线下转账(payType=6),无论是否选择同骑手;原单店转账订单、入口和商家配置保持不变。本轮不新增转账核款/人工退款流程,不关闭全系统转账。
|
|
|
- 同骑手资格以用户选择的第一家店为圆心,按门店坐标计算首店到后续各店的直线距离,不按道路路线距离;范围默认1公里、在平台合并配置中可调整,不能在代码写死1公里。圈外店不进入本次合并结算父单/配送组,不创建其子单、不等待其支付、不计入合并折扣或本批次金额;A/B合并不受圈外C付款影响。
|
|
- 同骑手资格以用户选择的第一家店为圆心,按门店坐标计算首店到后续各店的直线距离,不按道路路线距离;范围默认1公里、在平台合并配置中可调整,不能在代码写死1公里。圈外店不进入本次合并结算父单/配送组,不创建其子单、不等待其支付、不计入合并折扣或本批次金额;A/B合并不受圈外C付款影响。
|
|
|
- 即时单与预约单不能进入同一合并配送组;预约单仅预约日期、开始时间和结束时间完全一致时才能同组,不因同用户/地址/围栏而放宽,仅时段重叠也不能合并。不同日期的同一钟点亦不合并;仍支持符合原有效规则的同一预约时段多店,预约时间处理改造仍按既定范围延期。
|
|
- 即时单与预约单不能进入同一合并配送组;预约单仅预约日期、开始时间和结束时间完全一致时才能同组,不因同用户/地址/围栏而放宽,仅时段重叠也不能合并。不同日期的同一钟点亦不合并;仍支持符合原有效规则的同一预约时段多店,预约时间处理改造仍按既定范围延期。
|
|
|
-- 新多店批次创建时完整校验门店、商品、配送资格及金额,成功后固化商品/价格/折后运费快照;付款不因普通改价、上下架或停止接新单/营业时间变化重新算价、自动取消批次,仍可在15分钟内发起支付/确认到付,既有线上交易可在缓冲内完成。付款继续检查归属、订单/批次未取消未过期、方式及凭证可用;快照不是库存保证,实际不能出餐按此前确认的子单规则处理,不新增库存预占体系。
|
|
|
|
|
|
|
+- 新多店批次创建时完整校验门店、商品、配送资格、逐店付款方式及金额,成功后固化商品/价格/折后运费快照;付款不因普通改价、上下架或停止接新单/营业时间变化重新算价、自动取消批次,仍可在15分钟内发起线上支付或在合法条件下改选方式,既有线上交易可在缓冲内完成。付款继续检查归属、订单/批次未取消未过期、方式及凭证可用;快照不是库存保证,实际不能出餐按此前确认的子单规则处理,不新增库存预占体系。
|
|
|
- 新批次准入/期限、权威算价快照及取消返券仅用于服务端明确标识的新多店批次,不全局改变普通单/历史单的付款、取消、优惠促销及发票规则。本次明确批准普通平台配送预约按原时点补充后续开放扫描,不引入新预约语义或批次15分钟限制,普通单保持037现有无人接单规则。夜市自配送、自取及其他旧流程不变,新标识缺失不能误判为未生效批次,共享入口不能全局移除原校验。
|
|
- 新批次准入/期限、权威算价快照及取消返券仅用于服务端明确标识的新多店批次,不全局改变普通单/历史单的付款、取消、优惠促销及发票规则。本次明确批准普通平台配送预约按原时点补充后续开放扫描,不引入新预约语义或批次15分钟限制,普通单保持037现有无人接单规则。夜市自配送、自取及其他旧流程不变,新标识缺失不能误判为未生效批次,共享入口不能全局移除原校验。
|
|
|
- 圈外店处理建议:预结算明确列出未纳入店及原因,用户确认本次参与集合后再提交;C保留购物车供另行结算,不自动另建订单、不静默丢掉购物车商品。购物车保留方案属于接入建议,App由前端人员实现。
|
|
- 圈外店处理建议:预结算明确列出未纳入店及原因,用户确认本次参与集合后再提交;C保留购物车供另行结算,不自动另建订单、不静默丢掉购物车商品。购物车保留方案属于接入建议,App由前端人员实现。
|
|
|
- 骑手接单数量沿用现有外卖/闪送/总接单数字典:普通独立外卖单算1单,合并配送组整体算1单,不新增骑手实际子单总量上限、相关字典或配置项。同父单的独立配送订单不能合计为1单;闪送原计数与加急独占不变。此前双层容量/子单上限方案已撤回。
|
|
- 骑手接单数量沿用现有外卖/闪送/总接单数字典:普通独立外卖单算1单,合并配送组整体算1单,不新增骑手实际子单总量上限、相关字典或配置项。同父单的独立配送订单不能合计为1单;闪送原计数与加急独占不变。此前双层容量/子单上限方案已撤回。
|
|
@@ -71,10 +71,10 @@
|
|
|
2. 重复门店不增加合并店数,也不能制造阶梯优惠;同店商品汇总为一条子单。
|
|
2. 重复门店不增加合并店数,也不能制造阶梯优惠;同店商品汇总为一条子单。
|
|
|
3. 用户不选同骑手时,各店按原运费计费;选同骑手时,仅参与配送组的店铺享合并优惠。
|
|
3. 用户不选同骑手时,各店按原运费计费;选同骑手时,仅参与配送组的店铺享合并优惠。
|
|
|
4. 服务端重新校验报价、商品/门店归属、地址归属和金额,不信任客户端传入的运费/折扣/合并资格。
|
|
4. 服务端重新校验报价、商品/门店归属、地址归属和金额,不信任客户端传入的运费/折扣/合并资格。
|
|
|
-5. 相同用户、相同请求号的网络重试返回原批次,不重复建单或重复占用优惠券/库存。
|
|
|
|
|
-6. 创建前校验每个参与店至少有一种本批次支持且就绪的方式,不要求用户已选定。逐单收银选择时重验具体方式;到付只要求该店允许到付,不要求具备线上凭证;创建阶段不得默认选择到付。
|
|
|
|
|
|
|
+5. 相同用户、相同请求号且报价、参与店及逐店付款方式相同的网络重试返回原批次;同键改动载荷拒绝,不重复建单或重复占用优惠券/库存。
|
|
|
|
|
+6. 创建前校验每个参与店至少有一种本批次支持且就绪的方式;建批请求须对每家参与店明确选择一种报价可用方式,缺漏、重复、夹带非参与店或不可用方式均拒绝。到付只要求该店允许到付,不要求具备线上凭证;服务端不得默认选择到付。
|
|
|
7. 预约配送校验所有参与门店在所选时段可营业、可配送;即时与预约不能同组,预约日期和起止时间不同也不能同组。预结算明确不兼容、创建拒绝混合,不静默改时间或自动拆组;同一日期/时段的合法预约多店仍支持。
|
|
7. 预约配送校验所有参与门店在所选时段可营业、可配送;即时与预约不能同组,预约日期和起止时间不同也不能同组。预结算明确不兼容、创建拒绝混合,不静默改时间或自动拆组;同一日期/时段的合法预约多店仍支持。
|
|
|
-8. 按每店查询平台开关、商家选择和凭证就绪的可用方式,不取跨店交集;子单在逐笔收银确认时保存独立payType,创建时保留待确认语义,不能由父单唯一方式覆盖。
|
|
|
|
|
|
|
+8. 按每店查询平台开关、商家选择和凭证就绪的可用方式,不取跨店交集;建批时逐店保存独立payType,线上待真实付款、到付当场确认,不能由父单唯一方式覆盖。
|
|
|
9. 新批次可选方式为各店当前真实可用方式与本功能支持的LINE/OMG/到付的交集。仅支持转账或没有本功能就绪方式的店明确提示不能参加多店结算,用户可另走原单店流程;预结算和提交前均校验,不静默移除门店、不自动拆单、不擅自改成到付,不在已付部分后才发现无法支付。
|
|
9. 新批次可选方式为各店当前真实可用方式与本功能支持的LINE/OMG/到付的交集。仅支持转账或没有本功能就绪方式的店明确提示不能参加多店结算,用户可另走原单店流程;预结算和提交前均校验,不静默移除门店、不自动拆单、不擅自改成到付,不在已付部分后才发现无法支付。
|
|
|
10. 预结算区分购物车候选集合、本次合并参与集合和不符合店铺清单。首店A/B圈内、C圈外时,仅A/B参与本批;创建接口若夹带C或成员与确认报价不一致,明确拒绝,不在提交事务里静默删C或自动另建C单。
|
|
10. 预结算区分购物车候选集合、本次合并参与集合和不符合店铺清单。首店A/B圈内、C圈外时,仅A/B参与本批;创建接口若夹带C或成员与确认报价不一致,明确拒绝,不在提交事务里静默删C或自动另建C单。
|
|
|
11. 删除首店或改变参与店、地址等会重算围栏资格和报价,重新确认成员;圈内可参与店不足2家时不形成多店同骑手组。
|
|
11. 删除首店或改变参与店、地址等会重算围栏资格和报价,重新确认成员;圈内可参与店不足2家时不形成多店同骑手组。
|
|
@@ -82,7 +82,7 @@
|
|
|
|
|
|
|
|
### US2 各店独立支付与批次统一生效(P1)
|
|
### US2 各店独立支付与批次统一生效(P1)
|
|
|
|
|
|
|
|
-用户逐笔进入各店收银台,选择并完成线上支付或到付确认;就绪进度由服务端事实汇总,不需要创建时提前知道最终是否都是到付。
|
|
|
|
|
|
|
+用户建批时逐店选择付款方式;线上子单再逐笔进入对应渠道完成支付,到付子单已在建批时确认。就绪进度由服务端事实汇总;建批后在批次待生效、未过操作截止时允许安全改选:该店没有任何网关尝试,或既有在途尝试已逐笔向渠道核实确定未付(口径同 661 换到付);核实发现已收款或结果未知拒绝,核实通过后的迟到实收由重复实收退款兜底。
|
|
|
|
|
|
|
|
**Independent Test**: A/B为本次合并批次、C圈外未纳入:A付款后父批次仍未就绪;B也满足付款条件后仅生效一次,C未支付甚至未建单不阻断A/B。三家都参与的批次才等待三家条件全部满足。
|
|
**Independent Test**: A/B为本次合并批次、C圈外未纳入:A付款后父批次仍未就绪;B也满足付款条件后仅生效一次,C未支付甚至未建单不阻断A/B。三家都参与的批次才等待三家条件全部满足。
|
|
|
|
|
|
|
@@ -94,8 +94,8 @@
|
|
|
4. 父批次生效与取消互斥;重复回调、查询补单、服务重启不重复生效或重复通知。
|
|
4. 父批次生效与取消互斥;重复回调、查询补单、服务重启不重复生效或重复通知。
|
|
|
5. 支付发起截止后、最终确认截止前,仍未取消的批次允许截止前服务端已记录并实际发起的线上尝试继续完成和核实,全部合法成员就绪才生效;不得在该缓冲内新发起支付、重试、切换方式或确认到付。批次已关闭或最终确认截止后发现实收,只记录收款事实并退款,不重新开放履约。
|
|
5. 支付发起截止后、最终确认截止前,仍未取消的批次允许截止前服务端已记录并实际发起的线上尝试继续完成和核实,全部合法成员就绪才生效;不得在该缓冲内新发起支付、重试、切换方式或确认到付。批次已关闭或最终确认截止后发现实收,只记录收款事实并退款,不重新开放履约。
|
|
|
6. 未付齐时,用户仍可看到订单并继续支付,不能把订单从用户待付款列表隐藏。
|
|
6. 未付齐时,用户仍可看到订单并继续支付,不能把订单从用户待付款列表隐藏。
|
|
|
-7. 每子单就绪条件为:已选择线上且可信付款成功,或已选择到付且服务端确认该选择合法;未选、支付失败/结果未知、仅客户端回跳均不就绪。到付确认不是实收,已付款数量和已就绪数量分别表达。
|
|
|
|
|
-8. 三单依次确认到付时,前两单就绪后仍不开放,第三单确认后才生效;用户离开而未确认最后一单,15分钟到期整批取消且无网关退款。创建时不自动生效。
|
|
|
|
|
|
|
+7. 每子单就绪条件为:已选择线上且可信付款成功,或建批/合法改选时明确选择到付且服务端确认该选择合法;支付失败/结果未知、仅客户端回跳均不就绪。历史未选状态不作为新建批次正常初态。到付确认不是实收,已付款数量和已就绪数量分别表达。
|
|
|
|
|
+8. 三单在建批时均明确选择到付,则全部成员当场就绪、批次可立即生效;即使批次已`ACTIVE`,预约未到开放时点或开放事件尚未成功处理时,组仍不可抢且不推新任务。混合方式须等线上子单真实付款后生效。
|
|
|
|
|
|
|
|
### US3 未付齐时整批取消与真实退款(P1)
|
|
### US3 未付齐时整批取消与真实退款(P1)
|
|
|
|
|
|
|
@@ -108,7 +108,7 @@
|
|
|
1. 未生效批次不支持单独删掉已提交子单后继续付其余单;修改购物车需先取消原批次。
|
|
1. 未生效批次不支持单独删掉已提交子单后继续付其余单;修改购物车需先取消原批次。
|
|
|
2. 取消与退款是两个事实:订单可以已取消而退款处理中;仅真实渠道证据允许标记已退款。
|
|
2. 取消与退款是两个事实:订单可以已取消而退款处理中;仅真实渠道证据允许标记已退款。
|
|
|
3. 退款请求持久化,事务提交后由后台处理;退款超时、响应丢失先查询核实,不盲目重复退款。
|
|
3. 退款请求持久化,事务提交后由后台处理;退款超时、响应丢失先查询核实,不盲目重复退款。
|
|
|
-4. 持久扫描全部未生效批次的支付发起/到付确认截止及最终确认截止,包含尚未选择/待确认到付及支付待核实,重启/Redis事件丢失仍补处理。第15分钟只截止新操作,保留已记录并实际发起的线上尝试继续完成和核实;最终截止未就绪才取消并继续追踪迟到实收退款,不依赖App倒计时。
|
|
|
|
|
|
|
+4. 持久扫描全部未生效批次的线上支付发起/方式改选截止及最终确认截止,包含线上未付及支付待核实;兼容历史未选记录,重启/Redis事件丢失仍补处理。第15分钟只截止新操作,保留已记录并实际发起的线上尝试继续完成和核实;最终截止未就绪才取消并继续追踪迟到实收退款,不依赖App倒计时。
|
|
|
5. 取消时逐子单对账;迟到付款、迟到回调、旧支付尝试仍有明确补偿,不把本地未支付当成绝不会扣款。
|
|
5. 取消时逐子单对账;迟到付款、迟到回调、旧支付尝试仍有明确补偿,不把本地未支付当成绝不会扣款。
|
|
|
6. LINE Pay 与 OMG 正式退款均纳入;OMG 测试环境明确返回不能执行,不伪造退款事实、不外呼正式 API。
|
|
6. LINE Pay 与 OMG 正式退款均纳入;OMG 测试环境明确返回不能执行,不伪造退款事实、不外呼正式 API。
|
|
|
|
|
|
|
@@ -182,7 +182,7 @@
|
|
|
- **FR-010** 用户主动取消在未接单阶段按真实交易全额退款含运费,已接单不走用户取消退款;不以旧稿“商品款退、运费保留”默认要求部分退款扩展。异常售后如需部分退款须另确认,任何退款累计不得超实收、部分退款不得标成全额退款。
|
|
- **FR-010** 用户主动取消在未接单阶段按真实交易全额退款含运费,已接单不走用户取消退款;不以旧稿“商品款退、运费保留”默认要求部分退款扩展。异常售后如需部分退款须另确认,任何退款累计不得超实收、部分退款不得标成全额退款。
|
|
|
- **FR-011** 非适用单店/历史订单及夜市自配送、自取保持原流程;新多店到付和预约属于本功能,标识明确区分适用范围。唯一相关补齐为本次批准的普通平台配送预约按旧时点补扫,不套新批次期限。
|
|
- **FR-011** 非适用单店/历史订单及夜市自配送、自取保持原流程;新多店到付和预约属于本功能,标识明确区分适用范围。唯一相关补齐为本次批准的普通平台配送预约按旧时点补扫,不套新批次期限。
|
|
|
- **FR-012** 按项目规范补注释、四语言、SQL 登记、测试和 App 接入文档;按实施任务交付,规格确认不代表代码已实现。
|
|
- **FR-012** 按项目规范补注释、四语言、SQL 登记、测试和 App 接入文档;按实施任务交付,规格确认不代表代码已实现。
|
|
|
-- **FR-013** 创建、选择方式、子单就绪、真实实收、批次生效和预约开放分别表达;到付确认参加结算期限但不算线上实收,未收款取消不产生虚构退款。旧单店到付创建约定不直接应用新批次。
|
|
|
|
|
|
|
+- **FR-013** 建批时逐店选择方式、子单就绪、真实实收、批次生效和实际开放分别表达;明确选择到付即确认但不算线上实收,未收款取消不产生虚构退款。不能依赖旧单店到付默认状态替代本次选择。
|
|
|
- **FR-014(后续独立事项)** 新预约送达时段语义与倒推开放/最迟接单算法留后续;本轮基本开放扫描按 FR-037、多店接入 037 已有无人接单规则按 FR-042,不再延期。激活前预约失效检查按 FR-043,不改原预约语义,不复用废弃 TestTask。
|
|
- **FR-014(后续独立事项)** 新预约送达时段语义与倒推开放/最迟接单算法留后续;本轮基本开放扫描按 FR-037、多店接入 037 已有无人接单规则按 FR-042,不再延期。激活前预约失效检查按 FR-043,不改原预约语义,不复用废弃 TestTask。
|
|
|
- **FR-015** 每店独立查询、选择、校验并保存支付方式;批次不要求共同渠道,允许LINE/OMG/到付按店混用,受当前平台/商家/凭证闸门共同约束。只在新批次上下文过滤转账,不改现有单店支付方式查询和商家设置。
|
|
- **FR-015** 每店独立查询、选择、校验并保存支付方式;批次不要求共同渠道,允许LINE/OMG/到付按店混用,受当前平台/商家/凭证闸门共同约束。只在新批次上下文过滤转账,不改现有单店支付方式查询和商家设置。
|
|
|
- **FR-016** 新多店预结算、创建及后续换方式拒绝payType=6,原单店和历史转账仍走原流程;本轮不新增核款时限、待核款提醒、人工转账退款或补偿入口。仅转账门店提交前明确拒绝其参与本批,不擅自转到付/自动拆单/静默移除,也不关闭平台全局转账开关。
|
|
- **FR-016** 新多店预结算、创建及后续换方式拒绝payType=6,原单店和历史转账仍走原流程;本轮不新增核款时限、待核款提醒、人工转账退款或补偿入口。仅转账门店提交前明确拒绝其参与本批,不擅自转到付/自动拆单/静默移除,也不关闭平台全局转账开关。
|
|
@@ -196,7 +196,7 @@
|
|
|
- **FR-024** 已生效批次骑手尚未接单时允许取消单个子单,完整实收金额含折后运费按原交易退款;未实收到付不虚构退款。剩余成员继续履约且不补差,取消同步组成员/版本、待抢可用性与待收汇总;全组取消结束任务。取消与接组串行/CAS校验实际分配状态,不能以过期列表当作未接单证据。
|
|
- **FR-024** 已生效批次骑手尚未接单时允许取消单个子单,完整实收金额含折后运费按原交易退款;未实收到付不虚构退款。剩余成员继续履约且不补差,取消同步组成员/版本、待抢可用性与待收汇总;全组取消结束任务。取消与接组串行/CAS校验实际分配状态,不能以过期列表当作未接单证据。
|
|
|
- **FR-025** 本功能用户取消按服务端骑手承接事实校验,已接组或其子单拒绝用户主动取消单店/整组,不因尚未取餐或商家尚未接单而放行,不新增申请取消或商家审核流程。现有UserOrderController.cancelOrder不能仅以state=0判定可取消;新批次须同时检查配送组分配事实、子单qsId和deliveryStatus,任一已有承接证据即拒绝。组/子单未承接条件必须参加事务内更新/CAS校验,不能只在读取后判断,避免检查后骑手接单仍被取消。拒绝请求无订单/组/容量/退款副作用;商家/平台异常处置不是此用户入口的绕过方式,其权限、原因和退款另行确认。当前仅确认和记录方案,不提前修改普通非多店订单行为。
|
|
- **FR-025** 本功能用户取消按服务端骑手承接事实校验,已接组或其子单拒绝用户主动取消单店/整组,不因尚未取餐或商家尚未接单而放行,不新增申请取消或商家审核流程。现有UserOrderController.cancelOrder不能仅以state=0判定可取消;新批次须同时检查配送组分配事实、子单qsId和deliveryStatus,任一已有承接证据即拒绝。组/子单未承接条件必须参加事务内更新/CAS校验,不能只在读取后判断,避免检查后骑手接单仍被取消。拒绝请求无订单/组/容量/退款副作用;商家/平台异常处置不是此用户入口的绕过方式,其权限、原因和退款另行确认。当前仅确认和记录方案,不提前修改普通非多店订单行为。
|
|
|
- **FR-026** 骑手已接且该店未取餐时,有权限商家因无法供餐可取消本店子单,线上原交易全额退实收含运费;到付不能供餐时尚无当面垫款,仅移除待收,不新增返款分支。其他单继续不补差,取消同步组成员/站点、待收/容量及骑手通知;与取餐串行/CAS校验,已取不得走此路径。空跑是否补偿另定,不默认追加支付。
|
|
- **FR-026** 骑手已接且该店未取餐时,有权限商家因无法供餐可取消本店子单,线上原交易全额退实收含运费;到付不能供餐时尚无当面垫款,仅移除待收,不新增返款分支。其他单继续不补差,取消同步组成员/站点、待收/容量及骑手通知;与取餐串行/CAS校验,已取不得走此路径。空跑是否补偿另定,不默认追加支付。
|
|
|
-- **FR-027** 新批次创建只确认参与集合/报价和各店至少有一种就绪可用方式,不强制携带已选payType;逐单收银入口以用户、子单、所选方式及服务端闸门确认,不接受客户端已支付/已就绪标志。具体字段在data-model/contracts定义,保留旧单店接口兼容。
|
|
|
|
|
|
|
+- **FR-027** 新批次创建除确认参与集合/报价外,必须提交与参与店一一对应的`paymentMethods`,逐店选择报价可用方式;缺漏、重复、非参与店或不可用方式拒绝。服务端固化选择与到付确认,不接受客户端已支付/已就绪标志;后续仅在合法条件下通过专用入口改选。旧单店接口保持兼容。
|
|
|
- **FR-028** 创建时固化支付发起/到付确认截止=创建起15分钟、缓冲时长及最终确认截止=前者+缓冲,配置改动/重试/逐店付款不延长既有批次。第15分钟停止新的支付发起/重试/换方式/到付确认,但允许合法既有线上尝试继续完成付款和核实,默认缓冲到第20分钟;最后合法成员就绪可立即生效。最终截止仍未就绪取消整批,未知支付继续对账/补偿,实收全退且取消后不可重开。核销、补单、生效和取消采用同一父批次并发规则。
|
|
- **FR-028** 创建时固化支付发起/到付确认截止=创建起15分钟、缓冲时长及最终确认截止=前者+缓冲,配置改动/重试/逐店付款不延长既有批次。第15分钟停止新的支付发起/重试/换方式/到付确认,但允许合法既有线上尝试继续完成付款和核实,默认缓冲到第20分钟;最后合法成员就绪可立即生效。最终截止仍未就绪取消整批,未知支付继续对账/补偿,实收全退且取消后不可重开。核销、补单、生效和取消采用同一父批次并发规则。
|
|
|
- **FR-029** 平台动态维护最少店数与折扣阶梯,服务端按实际合并去重店数选择满足条件的最高门槛档,各店原配送费分别按该折扣计算,舍入按FR-031。门槛为不小于2的整数且不重复,折扣系数须大于0且不大于1;缺失/非法配置沿US5保守关闭合并报价。规则及命中档位随创建固化,配置修改或允许的部分取消不追溯重算。
|
|
- **FR-029** 平台动态维护最少店数与折扣阶梯,服务端按实际合并去重店数选择满足条件的最高门槛档,各店原配送费分别按该折扣计算,舍入按FR-031。门槛为不小于2的整数且不重复,折扣系数须大于0且不大于1;缺失/非法配置沿US5保守关闭合并报价。规则及命中档位随创建固化,配置修改或允许的部分取消不追溯重算。
|
|
|
- **FR-030** 首版规则使用全局配置,最大合并门店数默认5家且可配置,初始折扣档为最少2家0.9、最少3家0.8,不默认启用4家七折,不新增城市/区域覆盖规则。预结算、创建及接组检查有效店数上限,接单同时满足现有任务字典,不新增子单容量。不自动拆组或放宽缺失/非法配置;调整上限不直接取消已承接任务,待接组按FR-019处理。
|
|
- **FR-030** 首版规则使用全局配置,最大合并门店数默认5家且可配置,初始折扣档为最少2家0.9、最少3家0.8,不默认启用4家七折,不新增城市/区域覆盖规则。预结算、创建及接组检查有效店数上限,接单同时满足现有任务字典,不新增子单容量。不自动拆组或放宽缺失/非法配置;调整上限不直接取消已承接任务,待接组按FR-019处理。
|
|
@@ -206,9 +206,9 @@
|
|
|
- **FR-034** 新多店创建全量校验并固化商品/价格/运费等快照,后续付款不因普通菜单/营业变化重算或自动整批取消,仍校验所有必要付款条件、15分钟发起/到付确认截止及最终确认截止;不新增库存预占。必须以服务端新批次标识限定适用范围,现有非多店订单和其他非适用旧流程行为不变;共享支付/回调/查询/通知/取消扫描/履约入口只定向处理新批次,不全局放开多店支付或强加新期限/就绪条件。具体标识字段在data-model确定,未标识订单按原流程。
|
|
- **FR-034** 新多店创建全量校验并固化商品/价格/运费等快照,后续付款不因普通菜单/营业变化重算或自动整批取消,仍校验所有必要付款条件、15分钟发起/到付确认截止及最终确认截止;不新增库存预占。必须以服务端新批次标识限定适用范围,现有非多店订单和其他非适用旧流程行为不变;共享支付/回调/查询/通知/取消扫描/履约入口只定向处理新批次,不全局放开多店支付或强加新期限/就绪条件。具体标识字段在data-model确定,未标识订单按原流程。
|
|
|
- **FR-035** 平台合并配置页面维护支付完成与服务端确认缓冲时长,单位分钟,默认5,保存只接受正整数;缺失/非法/读取异常按5分钟安全回退,不能回退为无限等待。创建快照后不因改配置改变旧批次最终截止。发起资格以服务端持久记录的原支付尝试、实际发起事实及时间为准,不能用前端点击/回跳或事后补写时间证明期限内发起;收款须核实渠道真实交易、金额、币种、商家及签名/查询事实。LINE认证/确认/扣款按实际分阶段流程处理,认证成功不算实收;不再要求证明用户认证/扣款均在第15分钟前完成,不以本地记账时间冒充渠道付款时间。
|
|
- **FR-035** 平台合并配置页面维护支付完成与服务端确认缓冲时长,单位分钟,默认5,保存只接受正整数;缺失/非法/读取异常按5分钟安全回退,不能回退为无限等待。创建快照后不因改配置改变旧批次最终截止。发起资格以服务端持久记录的原支付尝试、实际发起事实及时间为准,不能用前端点击/回跳或事后补写时间证明期限内发起;收款须核实渠道真实交易、金额、币种、商家及签名/查询事实。LINE认证/确认/扣款按实际分阶段流程处理,认证成功不算实收;不再要求证明用户认证/扣款均在第15分钟前完成,不以本地记账时间冒充渠道付款时间。
|
|
|
|
|
|
|
|
-- **FR-036** 新批次付款事实先落库,逐单成功/到付确认不直接发履约新单通知;全部合法就绪后生效并持久记录开放事件。满足预约条件且提交后发送,合并组按组、独立单按子单幂等,失败可重试,取消终态不复活。用户支付结果通知保持真实事实,后续取餐/送达逐子单沿原流程。
|
|
|
|
|
|
|
+- **FR-036** 新批次付款事实先落库,逐单成功/到付确认不直接发履约新单通知;全部合法就绪后生效并持久记录开放事件。事务提交后立即独立尝试开放即时/已到预约开放时点的批次,未到时点由原分钟任务处理,失败/重启亦由该任务补偿;开放原子写子单显示、组`opened_at`及事件`OPENED`。独立通知消费者随后按组/子单幂等推送,失败可重试,取消终态不复活;开放不等于设备已收到推送。用户支付结果通知与后续逐子单取餐/送达通知保持原职责。
|
|
|
- **FR-037** 补充普通平台配送外卖及新多店预约的持久开放扫描,沿原时间判断/sys_appointorder_handletime,不新增倒推最迟接单算法;现有无人接单规则的多店接入另按 FR-042。创建先设预约信息再判显示;扫描校验原开放时点、未取消未分配和原付款/履约资格,新批次额外已生效,普通单不检查批次期限。重启数据库补扫,开放状态与通知意图原子幂等并支持重试;直接接单不可绕过。自取/夜市自配送不纳入,不批量改写历史已开放单。
|
|
- **FR-037** 补充普通平台配送外卖及新多店预约的持久开放扫描,沿原时间判断/sys_appointorder_handletime,不新增倒推最迟接单算法;现有无人接单规则的多店接入另按 FR-042。创建先设预约信息再判显示;扫描校验原开放时点、未取消未分配和原付款/履约资格,新批次额外已生效,普通单不检查批次期限。重启数据库补扫,开放状态与通知意图原子幂等并支持重试;直接接单不可绕过。自取/夜市自配送不纳入,不批量改写历史已开放单。
|
|
|
-- **FR-038** 用户原订单列表与统一列表识别新批次:未选、部分付款、全部未就绪或缓冲核实中保留可见进度/继续结算信息,不因payType空值漏单或payStatus=1误标可履约。真实已付与到付确认分开,生效后逐子单普通进度不被覆盖;覆盖本批LINE、OMG信用卡/Apple Pay及到付,旧非多店分类不全局改写,App只交付接入文档。
|
|
|
|
|
|
|
+- **FR-038** 用户原订单列表与统一列表识别新批次:线上未付、部分付款或缓冲核实中保留可见进度/继续结算信息;新建成员均已选方式,历史未选记录也不能漏单,不因payStatus=1误标可履约。真实已付与到付确认分开,生效后逐子单普通进度不被覆盖;覆盖本批LINE、OMG信用卡/Apple Pay及到付,旧非多店分类不全局改写,App只交付接入文档。
|
|
|
- **FR-039** 新多店预结算/创建服务端读取真实门店商品/规格价格、数量与优惠规则,计算餐费、原/折后运费及实付并固化。商品可售条件须与单店报价及菜单一致:`to_examine=1`为审核通过、`stacking_up=0`为上架;未通过或缺失审核状态必须拒绝。拒绝跨店商品/规格、非法数量和报价/金额不一致,不能直接保存客户端amount/freight/foodAmount或仅警告放行。明确金额单位与渠道转换,逐店HALF_UP及支付/退款/到付/账单同快照不变,原普通算价不改。
|
|
- **FR-039** 新多店预结算/创建服务端读取真实门店商品/规格价格、数量与优惠规则,计算餐费、原/折后运费及实付并固化。商品可售条件须与单店报价及菜单一致:`to_examine=1`为审核通过、`stacking_up=0`为上架;未通过或缺失审核状态必须拒绝。拒绝跨店商品/规格、非法数量和报价/金额不一致,不能直接保存客户端amount/freight/foodAmount或仅警告放行。明确金额单位与渠道转换,逐店HALF_UP及支付/退款/到付/账单同快照不变,原普通算价不改。
|
|
|
- **FR-040** 新批次整批或合法子单取消释放/返还对应取消成员占用/核销的券,不返仍履约成员的券。保留原有效期,仍有效恢复可用、过期不续期;原券/原子单绑定及状态参加并发幂等,重复取消/退款/扫描不重复返券,旧取消不得释放已由新单使用的券。创建同一券不能并发重复使用,返券不是渠道退款成功;普通非多店券规则不改。
|
|
- **FR-040** 新批次整批或合法子单取消释放/返还对应取消成员占用/核销的券,不返仍履约成员的券。保留原有效期,仍有效恢复可用、过期不续期;原券/原子单绑定及状态参加并发幂等,重复取消/退款/扫描不重复返券,旧取消不得释放已由新单使用的券。创建同一券不能并发重复使用,返券不是渠道退款成功;普通非多店券规则不改。
|
|
|
- **FR-041** 新批次详情、付款进度、关联订单、支付/取消按token确定用户并校验父/子/组归属及关联,不能仅凭传入ID返回信息或操作;现有getParentOrderDetail涉及新批次不得原样复用无用户过滤查询。商家仅访问授权子单,骑手沿现有待抢/本人承接权限,不放宽其他商家或用户敏感信息。未授权无款项/状态/退款/返券副作用。
|
|
- **FR-041** 新批次详情、付款进度、关联订单、支付/取消按token确定用户并校验父/子/组归属及关联,不能仅凭传入ID返回信息或操作;现有getParentOrderDetail涉及新批次不得原样复用无用户过滤查询。商家仅访问授权子单,骑手沿现有待抢/本人承接权限,不放宽其他商家或用户敏感信息。未授权无款项/状态/退款/返券副作用。
|
|
@@ -224,7 +224,7 @@
|
|
|
## Key Entities
|
|
## Key Entities
|
|
|
|
|
|
|
|
- 结算批次:复用OrderParent;成员、创建起15分钟用户操作截止、确认缓冲时长快照/最终确认截止、逐单已就绪/实收及待核实进度、预约信息、收费快照及生效/取消状态。新批次均有用户截止,不设全到付例外;缓冲到期不是已生效预约任务取消时间。
|
|
- 结算批次:复用OrderParent;成员、创建起15分钟用户操作截止、确认缓冲时长快照/最终确认截止、逐单已就绪/实收及待核实进度、预约信息、收费快照及生效/取消状态。新批次均有用户截止,不设全到付例外;缓冲到期不是已生效预约任务取消时间。
|
|
|
-- 门店子单:复用PosOrder;门店、待选/逐单所选payType、收银就绪事实、商品/运费快照、实际交易与独立履约状态。就绪的到付仍不是实收。
|
|
|
|
|
|
|
+- 门店子单:复用PosOrder;门店、建批时逐店所选payType、收银就绪事实、商品/运费快照、实际交易与独立履约状态。新建批次不产生待选成员;就绪的到付仍不是实收。
|
|
|
- 配送组:参与同骑手配送的子单集合;不是收款账户或跨商家支付交易。
|
|
- 配送组:参与同骑手配送的子单集合;不是收款账户或跨商家支付交易。
|
|
|
- 骑手接单容量:任务按配送组/独立外卖单及闪送任务统计,沿用现有三个接单字典,异常回退1;合并门店数独立校验。不新增骑手子单上限字典、字段或容量实体。
|
|
- 骑手接单容量:任务按配送组/独立外卖单及闪送任务统计,沿用现有三个接单字典,异常回退1;合并门店数独立校验。不新增骑手子单上限字典、字段或容量实体。
|
|
|
- 支付与退款事实:各子单自己的门店凭证/交易/退款金额及状态;复用或扩展当前有效 LINE、OMG 机制,不启用废弃支付代码。
|
|
- 支付与退款事实:各子单自己的门店凭证/交易/退款金额及状态;复用或扩展当前有效 LINE、OMG 机制,不启用废弃支付代码。
|
|
@@ -264,9 +264,9 @@
|
|
|
- **SC-022** 验证新批次创建后改价/上下架/停止接新单/普通营业时间变化时,期限内支付仍取原商品及金额快照,已付其他店不被自动取消;归属不符、取消、超时、支付方式/凭证不可用仍拦截。旧非多店订单的价格、支付、取消等规则保持不变;普通平台配送预约仅按SC-025补齐旧时点开放扫描,不能因同样挂父单而套用新批次规则;旧支付限制不被统一删除,只有合法新批次成员可定向放行。
|
|
- **SC-022** 验证新批次创建后改价/上下架/停止接新单/普通营业时间变化时,期限内支付仍取原商品及金额快照,已付其他店不被自动取消;归属不符、取消、超时、支付方式/凭证不可用仍拦截。旧非多店订单的价格、支付、取消等规则保持不变;普通平台配送预约仅按SC-025补齐旧时点开放扫描,不能因同样挂父单而套用新批次规则;旧支付限制不被统一删除,只有合法新批次成员可定向放行。
|
|
|
- **SC-023** 14:00创建、默认发起/到付确认截止14:15及最终确认截止14:20;14:14由服务端记录并实际发起、14:17真实付款并核实且其余成员合法就绪可生效。14:16新发起/重试/切换方式/确认到付拒绝;仅前端声称14:14已发起、伪造时间、只有请求或认证成功均不能当作实收就绪。最终截止仍未知则取消并持续核查迟到实收退款。验证缓冲配置5改8只影响新批次、非法回退5、回调/查询/扫描竞争、重复核销、LINE分阶段及非多店无新增期限。
|
|
- **SC-023** 14:00创建、默认发起/到付确认截止14:15及最终确认截止14:20;14:14由服务端记录并实际发起、14:17真实付款并核实且其余成员合法就绪可生效。14:16新发起/重试/切换方式/确认到付拒绝;仅前端声称14:14已发起、伪造时间、只有请求或认证成功均不能当作实收就绪。最终截止仍未知则取消并持续核查迟到实收退款。验证缓冲配置5改8只影响新批次、非法回退5、回调/查询/扫描竞争、重复核销、LINE分阶段及非多店无新增期限。
|
|
|
|
|
|
|
|
-- **SC-024** A已付/B未付或未选不推履约新单且不可抢,全部合法就绪即时开放一次、预约未到不推。重复回调/查询/到付不重复事件,事务回滚不发送;失败可重试、取消后不复活,单笔送达通知不等其他单。
|
|
|
|
|
|
|
+- **SC-024** A已付/B线上未付时不推履约新单且不可抢,全部合法就绪并提交后即时尝试开放一次,预约未到不开放、不推送。开放事件失败由分钟任务补偿,推送由独立通知任务处理;重复回调/查询/到付不重复事件,事务回滚不发送,取消后不复活,单笔送达通知不等其他单。
|
|
|
- **SC-025** 旧配置提前60分钟、预约18:00–18:30时17:00前不开放、17:00后原普通合法平台配送预约可开放;新批次未生效仍不开放,随后生效才开放。停机跨时点后补扫,重复扫描不重复开放/生成通知,取消/接单竞争不复活;普通单不套批次15分钟条件,自取/自配送不纳入;新预约语义/倒推最迟接单不纳入本轮,037接入按SC-030验证。
|
|
- **SC-025** 旧配置提前60分钟、预约18:00–18:30时17:00前不开放、17:00后原普通合法平台配送预约可开放;新批次未生效仍不开放,随后生效才开放。停机跨时点后补扫,重复扫描不重复开放/生成通知,取消/接单竞争不复活;普通单不套批次15分钟条件,自取/自配送不纳入;新预约语义/倒推最迟接单不纳入本轮,037接入按SC-030验证。
|
|
|
-- **SC-026** 新批次未选、A已付/B未付、混合到付、Apple Pay未付及缓冲核实中可查进度并恢复合法结算;批次未就绪时已付子单不能误标可履约,到付不标实收,生效后逐单普通进度不被组覆盖;旧非多店分类回归不变。
|
|
|
|
|
|
|
+- **SC-026** 新批次均已选方式,A已付/B线上未付、混合到付、Apple Pay未付及缓冲核实中可查进度并恢复合法结算;历史未选记录也须可见。批次未就绪时已付子单不能误标可履约,到付不标实收,生效后逐单普通进度不被组覆盖;旧非多店分类回归不变。
|
|
|
- **SC-027** 篡改amount/freight/foodAmount、跨店商品/规格、非法数量不能改变收费;提交报价差异拒绝/重报价而非仅警告。服务端快照与渠道/退款/到付/账单一致,创建后改价仍按旧快照,原单店算价不改。
|
|
- **SC-027** 篡改amount/freight/foodAmount、跨店商品/规格、非法数量不能改变收费;提交报价差异拒绝/重报价而非仅警告。服务端快照与渠道/退款/到付/账单一致,创建后改价仍按旧快照,原单店算价不改。
|
|
|
- **SC-028** 未生效整批取消返对应券、生效取消C只返C券;重复取消/退款/扫描只返一次,仍有效可用、过期不续期。并发创建同一券不能重复核销,旧取消回调不释放新单所用券;返券不伪造退款成功,普通单券规则不改。
|
|
- **SC-028** 未生效整批取消返对应券、生效取消C只返C券;重复取消/退款/扫描只返一次,仍有效可用、过期不续期。并发创建同一券不能重复核销,旧取消回调不释放新单所用券;返券不伪造退款成功,普通单券规则不改。
|
|
|
- **SC-029** 用户A传B父单号/子单ID/组ID或伪造关联/标识,不能看B详情/进度或支付/取消,失败无状态/款项/返券副作用;本人合法查询正常,商家/骑手仅现有授权范围,不因关联组暴露其他敏感数据。
|
|
- **SC-029** 用户A传B父单号/子单ID/组ID或伪造关联/标识,不能看B详情/进度或支付/取消,失败无状态/款项/返券副作用;本人合法查询正常,商家/骑手仅现有授权范围,不因关联组暴露其他敏感数据。
|