Created: 2026-10-12
Feature Branch: 不创建新分支,沿用当前 test-202609v2;本轮不切换分支。
Status: Draft,供用户逐轮讨论;业务代码未开始。
Input: 用户提供《多店下单与骑手合并需求变更 (2).docx》,确认各店独立收款、在线批次全部子单付款完成后才开放履约,并要求纳入 OMG 正式退款、预约配送和到付;夜市自配送、自取沿用原流程。先给方案、确认细节后实现,可持续调整。
已确认:
原需求文档提出、需要落实并讨论边界:
用户把不同门店商品加入同一次结算,服务端计算哪些店可合并、折扣和各子单金额,再统一提交。
Independent Test: 三家均符合资格的店一次提交,形成一个结算父单及三条子单;任一参与门店关闭、未审核、商品不可售或坐标无效时,不留下部分可支付订单。A/B圈内、C圈外时,本次确认提交仅A/B,C无子单/金额/付款等待。
Acceptance Scenarios:
用户逐笔进入各店收银台,选择并完成线上支付或到付确认;就绪进度由服务端事实汇总,不需要创建时提前知道最终是否都是到付。
Independent Test: A/B为本次合并批次、C圈外未纳入:A付款后父批次仍未就绪;B也满足付款条件后仅生效一次,C未支付甚至未建单不阻断A/B。三家都参与的批次才等待三家条件全部满足。
Acceptance Scenarios:
未生效用户主动取消立即关闭整批;超时取消须区分15分钟支付发起/到付确认截止及最终确认截止。第15分钟停止用户新操作,既有线上尝试允许按默认5分钟可配置缓冲完成和核实;不能把结果未知当作未付款立即取消。最终确认截止仍未就绪关闭整批,已实收按对应商家原交易全额退款,到付只取消;确认交易已不可能满足全部就绪时可提前关闭,不把未收款全到付无限保留。
Independent Test: 三单中两单已付款,整批取消后两条退款分别进入各自渠道,一条未付款单取消;一个渠道退款失败不会影响另一笔退款完成,也不能把整批标为全部已退款。
Acceptance Scenarios:
批次生效且达到预约开放时间(即时单无时间等待)后,参与合并的子单形成一个不可拆抢的配送组,由同一骑手一次接下。
Independent Test: 两骑手并发抢组三单,只能一个骑手成功,三单全部归属该骑手;任一子单已变化则整体失败,不能只抢到一部分。
Acceptance Scenarios:
用户可以预约多店平台配送,也可以选择到付;到付不是在线付款成功,预约不是提交后立即抢单。
Independent Test: 预约批次在15分钟内发起各线上支付/确认到付,既有线上交易可在缓冲内完成和核实,全部就绪后仍等待原预约开放时间;即时全到付第三笔确认前不能被抢、全部确认后仅生效一次,缓冲不放宽到付确认期限,不造退款。
Acceptance Scenarios:
平台配置开关、范围、折扣阶梯、最大合并数量及支付完成/确认缓冲(分钟,默认5);支付发起/到付确认期限仍为15分钟,能看到付款/待确认进度与退款状态。
Independent Test: 配置调整影响下一次报价,不追溯改已提交批次的收费快照;售后退款金额与实际退回商品款/配送费分项一致。
Acceptance Scenarios:
FR-035 平台合并配置页面维护支付完成与服务端确认缓冲时长,单位分钟,默认5,保存只接受正整数;缺失/非法/读取异常按5分钟安全回退,不能回退为无限等待。创建快照后不因改配置改变旧批次最终截止。发起资格以服务端持久记录的原支付尝试、实际发起事实及时间为准,不能用前端点击/回跳或事后补写时间证明期限内发起;收款须核实渠道真实交易、金额、币种、商家及签名/查询事实。LINE认证/确认/扣款按实际分阶段流程处理,认证成功不算实收;不再要求证明用户认证/扣款均在第15分钟前完成,不以本地记账时间冒充渠道付款时间。
FR-036 新批次付款事实先落库,逐单成功/到付确认不直接发履约新单通知;全部合法就绪后生效并持久记录开放事件。满足预约条件且提交后发送,合并组按组、独立单按子单幂等,失败可重试,取消终态不复活。用户支付结果通知保持真实事实,后续取餐/送达逐子单沿原流程。
FR-037 补充普通平台配送外卖及新多店预约的持久开放扫描,沿原时间判断/sys_appointorder_handletime,不新增最迟接单或自动取消。创建先设预约信息再判显示;扫描校验原开放时点、未取消未分配和原付款/履约资格,新批次额外已生效,普通单不检查批次期限。重启数据库补扫,开放状态与通知意图原子幂等并支持重试;直接接单不可绕过。自取/夜市自配送不纳入,不批量改写历史已开放单。
FR-038 用户原订单列表与统一列表识别新批次:未选、部分付款、全部未就绪或缓冲核实中保留可见进度/继续结算信息,不因payType空值漏单或payStatus=1误标可履约。真实已付与到付确认分开,生效后逐子单普通进度不被覆盖;覆盖本批LINE、OMG信用卡/Apple Pay及到付,旧非多店分类不全局改写,App只交付接入文档。
FR-039 新多店预结算/创建服务端读取真实门店商品/规格价格、数量与优惠规则,计算餐费、原/折后运费及实付并固化。拒绝跨店商品/规格、非法数量和报价/金额不一致,不能直接保存客户端amount/freight/foodAmount或仅警告放行。明确金额单位与渠道转换,逐店HALF_UP及支付/退款/到付/账单同快照不变,原普通算价不改。
FR-040 新批次整批或合法子单取消释放/返还对应取消成员占用/核销的券,不返仍履约成员的券。保留原有效期,仍有效恢复可用、过期不续期;原券/原子单绑定及状态参加并发幂等,重复取消/退款/扫描不重复返券,旧取消不得释放已由新单使用的券。创建同一券不能并发重复使用,返券不是渠道退款成功;普通非多店券规则不改。
FR-041 新批次详情、付款进度、关联订单、支付/取消按token确定用户并校验父/子/组归属及关联,不能仅凭传入ID返回信息或操作;现有getParentOrderDetail涉及新批次不得原样复用无用户过滤查询。商家仅访问授权子单,骑手沿现有待抢/本人承接权限,不放宽其他商家或用户敏感信息。未授权无款项/状态/退款/返券副作用。
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-025 旧配置提前60分钟、预约18:00–18:30时17:00前不开放、17:00后原普通合法平台配送预约可开放;新批次未生效仍不开放,随后生效才开放。停机跨时点后补扫,重复扫描不重复开放/生成通知,取消/接单竞争不复活;普通单不套批次15分钟条件,自取/自配送不纳入,新语义/最迟接单/自动取消不视为已实现。
SC-026 新批次未选、A已付/B未付、混合到付、Apple Pay未付及缓冲核实中可查进度并恢复合法结算;批次未就绪时已付子单不能误标可履约,到付不标实收,生效后逐单普通进度不被组覆盖;旧非多店分类回归不变。
SC-027 篡改amount/freight/foodAmount、跨店商品/规格、非法数量不能改变收费;提交报价差异拒绝/重报价而非仅警告。服务端快照与渠道/退款/到付/账单一致,创建后改价仍按旧快照,原单店算价不改。
SC-028 未生效整批取消返对应券、生效取消C只返C券;重复取消/退款/扫描只返一次,仍有效可用、过期不续期。并发创建同一券不能重复核销,旧取消回调不释放新单所用券;返券不伪造退款成功,普通单券规则不改。
SC-029 用户A传B父单号/子单ID/组ID或伪造关联/标识,不能看B详情/进度或支付/取消,失败无状态/款项/返券副作用;本人合法查询正常,商家/骑手仅现有授权范围,不因关联组暴露其他敏感数据。
见 plan.md 的Q1~Q13确认表。范围、付款/15分钟支付发起及到付确认期限、既有线上交易可在默认5分钟可配置缓冲内完成和核实、直线围栏/可配置范围、费用、原字典按组计1单且不增子单上限、全局/初始折扣、逐店整数新台币舍入、不补差、取消/快照/非多店兼容均已确认;即时预约不混合、同组预约日期/起止一致、独立取餐/送达及骑手自行决定顺序亦已确认。其他普通优惠/履约/异常沿原有效流程,原能力缺口另反馈,不额外设计多店规则;预约时间算法延期,原任务字典不自动改写。支付尝试发起证据、真实收款核实、分阶段与并发适配仍须在data-model/contracts落实并验证,不能把业务参数确认描述成接口已实现;完整方案批准前不写执行tasks或业务代码。
2026-10-13最新补充:用户接受Q6口径放宽为15分钟内发起线上支付/确认到付,截止前已记录并实际发起的线上交易可在默认5分钟可配置缓冲内完成付款和服务端确认;取代严格要求第15分钟前完成付款/认证的旧建议。缓冲期禁止新发起、重试、方式切换及新的到付确认,既有渠道页面可能在第15分钟后完成付款,不再描述成仅后台响应缓冲。全部合法就绪立即生效,最终截止未就绪取消及实收退款;全到付不免期限,取消后不重开。已确认业务参数不重复询问,后续整理完整技术方案供审阅。