瀏覽代碼

同步多店报价审核校验与测试库联调文档

qmj 3 天之前
父節點
當前提交
a304b024a3

+ 3 - 2
specs/036-multi-store-checkout/frontend-app-integration.md

@@ -2,7 +2,7 @@
 
 本文档供用户端 App 和骑手端 App 接入多店合并下单功能(036)使用,以当前后端实现为准。多店功能的全部业务规则均写在本文档内,接入不需要再查阅其他契约文件。文档只描述接口契约和业务规则,不包含 App 前端实现代码;本仓库不修改 App 源码。平台后台、商家端的 036 管理接口不在本文范围。
 
-> 更新时间:2026-10-20。036 数据库迁移尚未执行,平台多店开关和相关定时任务仍关闭:接口已通过本地测试,但测试/生产环境暂不可调用;联调前须先人工执行 036 SQL 并开启平台配置。
+> 更新时间:2026-10-20。036 数据库迁移已在测试库执行并核对表结构;生产库尚未执行。平台多店开关仍关闭、6个相关定时任务保持暂停:接口已通过本地测试,真实支付/退款与App端到端联调尚未验证。测试库无需重复迁移;后续按联调计划部署兼容版本并开启配置和相应任务,生产库须另行执行迁移。
 
 核心概念(先读这段):
 
@@ -232,7 +232,7 @@ POST /system/multiStoreCheckout/quote
 
 规则:
 
-- 店/商品/配送资格不合格、支付方式仅剩转账的店会进 `excludedStores` 并给 `reason`;全部店被排除时报价报错。
+- 店/商品/配送资格不合格、支付方式仅剩转账的店会进 `excludedStores` 并给 `reason`;被排除到参与店不足 2 家时报价报错,错误 msg 会点名被排除门店与原因(如"以下门店无法参与多店配送:快食到家(超出与首店的配送范围)。参与门店不足2家,请调整门店后重试")。
 - 报价短期有效,建批时服务端重算比对,商品/价格/规则变化会拒绝建批(msg="商品、规格或优惠信息已变化,请重新结算")。
 
 ### 5.2 创建批次
@@ -580,6 +580,7 @@ msg 文案随 App 语言本地化,下表按简体中文文案识别(按语
 | 商品、规格或优惠信息已变化,请重新结算 | 建批时服务端重算与报价不一致 | 回到购物车重新报价 |
 | 当前配送费配置不可用,请稍后重试 | 运费配置缺失 | 稍后重试报价 |
 | 报价已过期,请重新获取 | quoteToken 超时 | 重新调 5.1 |
+| 以下门店无法参与多店配送:…(超出与首店的配送范围/暂无可用的支付方式) | 参与店被围栏或支付方式筛到不足 2 家 | 按点名门店调整选择或换店 |
 | 请通过多店批次流程取消订单 | 对 036 子单调了旧取消入口 | 改用 5.8/5.9 |
 | 多店配送组必须整组接单 | 对组成员调了旧单笔接单 API | 改用 6.4 |
 | 配送组状态已变化,请刷新后重试 | 接单 version 过期或已被他人接走 | 刷新列表/详情 |

+ 5 - 0
specs/036-multi-store-checkout/plan.md

@@ -414,3 +414,8 @@ OMG 实现按项目纪律将每个接口的代码、测试源码、规格与 SQL
 前端接入仅补充“配送距离和费用由服务端统一计算,前端展示报价结果,建批时仍复核”,参数和调用顺序不变。Google批量减少HTTP次数,并非按一次请求只收一次费用;新旧Google路线可能给出不同里程,真实开通、配额与抽样金额需部署联调,本轮不调用付费真实接口。
 
 参考:[Google矩阵接口](https://developers.google.com/maps/documentation/routes/compute_route_matrix)、[响应字段与默认值](https://developers.google.com/maps/documentation/routes/choose_fields)、[计费](https://developers.google.com/maps/documentation/routes/usage-and-billing)。
+
+
+## 2026-10-20 联调修复:商品审核状态
+
+T033仅修正MultiStoreCheckoutQuoteService的商品可售判断,与单店完整报价统一为to_examine=1且stacking_up=0;补充解释字段含义的注释。先用测试库只读数据复现203店9135/9136和168店9115/9078及规格43/15/7,再用回归测试覆盖审核通过、未通过及NULL。现有测试商品补齐真实审核状态,保留规格/促销金额核验。前端参数、国际化错误契约、数据库和已创建订单快照不变。

+ 1 - 1
specs/036-multi-store-checkout/spec.md

@@ -209,7 +209,7 @@
 - **FR-036** 新批次付款事实先落库,逐单成功/到付确认不直接发履约新单通知;全部合法就绪后生效并持久记录开放事件。满足预约条件且提交后发送,合并组按组、独立单按子单幂等,失败可重试,取消终态不复活。用户支付结果通知保持真实事实,后续取餐/送达逐子单沿原流程。
 - **FR-037** 补充普通平台配送外卖及新多店预约的持久开放扫描,沿原时间判断/sys_appointorder_handletime,不新增倒推最迟接单算法;现有无人接单规则的多店接入另按 FR-042。创建先设预约信息再判显示;扫描校验原开放时点、未取消未分配和原付款/履约资格,新批次额外已生效,普通单不检查批次期限。重启数据库补扫,开放状态与通知意图原子幂等并支持重试;直接接单不可绕过。自取/夜市自配送不纳入,不批量改写历史已开放单。
 - **FR-038** 用户原订单列表与统一列表识别新批次:未选、部分付款、全部未就绪或缓冲核实中保留可见进度/继续结算信息,不因payType空值漏单或payStatus=1误标可履约。真实已付与到付确认分开,生效后逐子单普通进度不被覆盖;覆盖本批LINE、OMG信用卡/Apple Pay及到付,旧非多店分类不全局改写,App只交付接入文档。
-- **FR-039** 新多店预结算/创建服务端读取真实门店商品/规格价格、数量与优惠规则,计算餐费、原/折后运费及实付并固化。拒绝跨店商品/规格、非法数量和报价/金额不一致,不能直接保存客户端amount/freight/foodAmount或仅警告放行。明确金额单位与渠道转换,逐店HALF_UP及支付/退款/到付/账单同快照不变,原普通算价不改。
+- **FR-039** 新多店预结算/创建服务端读取真实门店商品/规格价格、数量与优惠规则,计算餐费、原/折后运费及实付并固化。商品可售条件须与单店报价及菜单一致:`to_examine=1`为审核通过、`stacking_up=0`为上架;未通过或缺失审核状态必须拒绝。拒绝跨店商品/规格、非法数量和报价/金额不一致,不能直接保存客户端amount/freight/foodAmount或仅警告放行。明确金额单位与渠道转换,逐店HALF_UP及支付/退款/到付/账单同快照不变,原普通算价不改。
 - **FR-040** 新批次整批或合法子单取消释放/返还对应取消成员占用/核销的券,不返仍履约成员的券。保留原有效期,仍有效恢复可用、过期不续期;原券/原子单绑定及状态参加并发幂等,重复取消/退款/扫描不重复返券,旧取消不得释放已由新单使用的券。创建同一券不能并发重复使用,返券不是渠道退款成功;普通非多店券规则不改。
 - **FR-041** 新批次详情、付款进度、关联订单、支付/取消按token确定用户并校验父/子/组归属及关联,不能仅凭传入ID返回信息或操作;现有getParentOrderDetail涉及新批次不得原样复用无用户过滤查询。商家仅访问授权子单,骑手沿现有待抢/本人承接权限,不放宽其他商家或用户敏感信息。未授权无款项/状态/退款/返券副作用。
 

+ 7 - 0
specs/036-multi-store-checkout/tasks.md

@@ -122,3 +122,10 @@ T001→T002→T003→T005;T004 在 T005 前。T005→T006–T010→T011–T013
 - 本次提交范围扩大为当前全部多店后端功能、支付/取消/查询兼容、矩阵计价、相关测试、规格及SQL登记,沿用`codex/036-multi-store-checkout`,不创建分支。旧文档修改临时脚本`.claude-tmp-docs.py`保留本地。
 - 提交前重新执行JDK21 `mvn -pl ruoyi-admin -am verify`,1397项测试全部通过(失败/错误/跳过均0),模块打包成功;仅文档补记发生在此后。
 - 本次提交不代表完整上线验收:真实Google接口、MySQL查询、正式退款及App联调未验证;数据库迁移不执行,多店开关和暂停任务不因提交而开启。
+
+
+## 2026-10-20 联调缺陷修复
+
+- [x] T033 修正多店报价将审核通过商品误拒绝的问题;对齐单店to_examine=1且stacking_up=0,注释字段语义;补充本次4商品及3规格值请求回归,验证未通过/NULL不得进入促销算价,更新旧测试夹具;运行JDK21报价/建批回归与模块构建,保留既有未提交文档修改,不改SQL或前端参数。
+
+T033验证:测试库只读确认4商品均to_examine=1、stacking_up=0,规格43/15/7均启用且归属正确。红测复现审核通过商品误拒绝及未通过商品进入促销算价;修复后JDK21执行`mvn -pl ruoyi-admin -am verify -Dtest=MultiStoreCheckoutQuoteServiceTest,FoodDeliveryPromotionQuoteServiceTest,MultiStoreCheckoutBatchServiceTest -Dsurefire.failIfNoSpecifiedTests=false`,28项通过、失败/错误/跳过0,模块打包成功。`git diff --check`通过;未修改数据库,未部署远端、未使用用户token发起真实HTTP报价,未自动提交推送。