依据:spec.md、plan.md、data-model.md、contracts/api.md。分支:codex/036-multi-store-checkout(后端与平台 PC)。每个生产行为先写可失败的定向测试;业务代码注释说明批次和旧单兼容边界;SQL 只登记不执行。
ruoyi-admin/src/test/java/com/ruoyi/app/order/ 增加配置、首店围栏、阶梯命中、逐店折后运费舍入及非法配置测试,并确认先失败。order_checkout_config,不接 sys_config。updatesql/sql.md 登记 036 配置、批次、成员、支付尝试、配送组、通知与退款意图表及索引;不执行迁移。paymentMethods,原子写父子单与快照及两个截止;不创建圈外店订单、不默认选择到付,不在创建事务内推送履约。全到付按T035进入激活/开放流程;普通/createOrder不走新规则。frontend-app-integration.md 接入,不在本仓库修改 App 源码。已将 frontend-display-plan.md 与 API 契约、App 接入说明 对齐,用户确认首店距离与两端升级门禁;本轮仅完成文档,不代表列表接口或 App 页面已实现。
GET /user/cards、GET /rider/tasks 及对应角标的服务端按批次/组聚合后分页和计数;验证普通单混排、跨页不拆组、骑手 A 已取/B 待取和部分取消时单页签归类、双进度及组计数;不得依赖 App 对分页子单临时合并。system:order:list,不复用 App 用户 token 权限;普通单原列表与详情不变。COD_CONFIRMED,最后一店确认时原子写 activated_at 与出站事件。LINE/OMG 原交易核实、取消竞争、扫描和出站事件消费者尚待接入,任务未勾选。delryTime 的 yyyy-MM-dd HH:mm-HH:mm,避免新批次使用 ISO T 分隔而无法进入既有预约解析/开放扫描。MultiStoreCheckoutBatchServiceTest、MultiStoreCheckoutQuoteServiceTest、MultiStoreCheckoutConfigServiceTest、MultiStoreCheckoutRulesTest、MultiStoreCheckoutCodServiceTest 已运行通过。当前多店功能整体仍为实现中,配置保持关闭;普通 /createOrder 未接入 036 专用服务。sys_job 登记已写,尚未启用;预约结束提前取消及旧单笔取消防绕过已补,专用取消 API、返券和完整退款结果仍未完成,因此不能开放配置。BRIDGED 说成“已退款”。CHECKOUT_ACTIVATED 持久事件已能按旧预约提前量扫描、在事务内同时写组 opened_at 和各有效子单首次显示/生效时间;定时任务 SQL 登记为暂停,整体联调前不能启用。POST /system/multiStoreCheckout/groups/accept 已把 token 骑手身份传入整组服务;同一骑手网络重试只在全部有效子单仍归其持有时幂等返回,不重复占容量。定向测试已运行通过;旧 App 版本门禁、组合列表仍待完成。OPENED 事件现可通过独立消费者 CAS 认领并重试,把单条组任务推送与逐店商家新单接入既有通道;通知载荷带 groupId/eventId。暂停的恢复任务已登记 SQL;SENT 只代表成功提交到项目现有异步通道,不保证设备送达,重试场景由新 App 按 eventId 去重。定向测试已通过,真实推送/取消竞态仍需联调,整体任务不勾选。orderList/orderCount 已按父单号排除 036 子单,避免一组按多个普通单展示或计数;普通单父单号等于自身、存量空值仍可见。组任务聚合列表/角标及详情还未实现,故 T021 不勾选、多店开关保持关闭。POST /batches、POST /batches/cancel 与 POST /batches/members/cancel。未生效只整批取消;已生效单店取消仅在组仍待接时于批次/组锁内执行,递增组版本,余店不补差,最后一店取消则关闭组/父单;仅为已实收子单登记退款意图,不把意图当到账。组合详情、退款状态投影、商家异常取消及客户端版本门禁未完成,任务仍不勾选。ONLINE_PENDING,真实网关创建与回调仍走原 LINE/OMG 入口;上述写入口和旧 LINE/OMG 创建、OMG 重试对 036 子单使用能力头 X-Multi-Store-Capability: batch-cards-v1,旧普通单不要求。legacyOrder 快照。待抢组使用服务端最近骑手位置按首店算距离;接组仍在锁内重验,列表不授予接单权。BRIDGED 不算到账,只有原渠道 REFUNDED 计入已退款金额。检查迁移时发现历史 OMG 重做遗漏当前退款队列表及环境字段的 SQL 登记,已补到 updatesql/sql.md;执行前须按目标库实际结构核对,未在本轮执行。system:order:list 权限及原渠道状态,不提供手工置已退款写入口;平台 PC 页面接入另需验收。getParentOrderDetail 未用 token 过滤归属;现对真实 036 父单返回 UPGRADE_REQUIRED,强制使用带用户归属校验的新批次详情。普通父单不查 036 表,保持原路径;详情单测与 036 MyBatis XML 解析测试通过。骑手组终态详情补 completed/cancelled 主阶段,与列表一致。/system/order/getorderlist 在数据库分页前排除真实 036 成员,避免旧版 App 把一组拆成多张普通子单卡;普通非批次订单仍按旧筛选和分页,定向查询测试通过。新组合卡统一列表独立承担批次展示。mvn -pl ruoyi-admin -am test -q 共 1378 项,失败/错误/跳过均为 0;mvn -pl ruoyi-admin -am -DskipTests package -q 通过。平台 node --test tests 33 项全通过,npm run build:stage 完成,保留仓库既有的备份 .vue~ 解析与包体积警告。两仓 git diff --check 通过。T001→T002→T003→T005;T004 在 T005 前。T005→T006–T010→T011–T013→T014–T016→T017–T019。未完成持久状态、支付事实、取消/退款和接组防护前不得把配置开关视为可上线;测试数据库迁移由开发者手动执行。最终状态仅按真实验证报告,不把文档或局部代码称作整功能完成。
展示增量依赖:T020 先收口展示与兼容契约,T021 随 T014–T018 实现,结果纳入 T019 验证。新增任务编号不表示可以跳过前面的批次、支付和接组防护。
审查增量依赖:T023 随 T005–T015 的生效/开放/退款和接组边界实施,T024–T025 随 T005/T008–T009,T026 随 T002/T005/T015;四项结果均纳入 T019 统一验收,普通 037 行为保持回归覆盖。
order/route/RouteDistanceMatrixProvider与Google实现,验证N×1方向、一次HTTP、乱序索引归位、protobuf默认0、缺失/重复/越界/非法距离/元素失败/HTTP失败/密钥缺失,保留有限超时与资源关闭;关键代码注释说明计费方向和失败语义。codex/036-multi-store-checkout;未创建或切换分支,未自动提交推送。mvn -pl ruoyi-admin -am test -Dtest=GoogleRouteDistanceMatrixProviderTest -Dsurefire.failIfNoSpecifiedTests=false通过;最终mvn -pl ruoyi-admin -am verify通过,ruoyi-system 166项、ruoyi-admin 1231项,共1397项,失败/错误/跳过均0,模块打包成功。其中矩阵提供器、两个报价服务及建批服务44项全部通过。git diff --check通过。原有036工作区改动保留,不据此勾选整个036功能或开启配置。codex/036-multi-store-checkout,不创建分支。旧文档修改临时脚本.claude-tmp-docs.py保留本地。mvn -pl ruoyi-admin -am verify,1397项测试全部通过(失败/错误/跳过均0),模块打包成功;仅文档补记发生在此后。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报价,未自动提交推送。
T034验证与交付(2026-10-20):
mvn -pl ruoyi-admin -am verify通过:ruoyi-system 166项、ruoyi-admin 1248项,共1414项,失败/错误/跳过均0,所有模块构建成功。git diff --check通过。test-202609v2提交推送,不创建分支。部署需先具备036关联表(包括功能关闭时的普通订单识别查询),测试库此前已迁移。pos_order.dd_id为30字符、最短关联字段为20字符,报错requestKey无已提交批次。未修改数据库,未调用真实支付/退款/地图或远端建批HTTP;本地无Redis实例,原子Lua与SET NX按mock契约验证,真实Redis集成和部署后建批仍需联调。paymentMethods:[{storeId,payType}],校验与参与店和报价一致,固化成员/子单支付方式;全到付创建即激活,幂等摘要包含所选方式。T035–T037验证:2026-10-21 10:44 使用 JDK21 执行mvn -pl ruoyi-admin -am verify -q成功(当时1420项、失败/错误/跳过均0),git diff --check通过;未执行真实支付网关联调或部署,也未改 App 源码、普通订单入口和数据库结构。随后同一工作区出现其他并行改动及新的测试,以上全量通过结论不覆盖后续并行改动。
T038–T039验证:2026-10-21 使用 JDK21 执行 mvn -q -pl ruoyi-admin -am verify 成功,Surefire 报告合计1429项、失败/错误/跳过均0;失败重试及路由等定向31项通过。git diff --check 通过。未连接真实数据库、未启用暂停的 Quartz 任务、未调用真实支付或推送渠道。
T040验证:2026-10-21 定向 23 项(核实器/两服务/选择入口)及 MultiStoreCheckout、PayMethodSwitch 全量回归 0 失败;未连接真实数据库与真实支付渠道。
ask 和 specValueIds,补有加价及零加价规格测试;历史订单不回写。pos_order.jvli 公里,组详情 members[] 返回 juli/jvli/legacyOrder;补报价、建批及详情红绿测试,更新 App 接入契约。stores[].remarks 随快照固化到对应子单 pos_order.remarks(父单不另存),商家/骑手沿现有子单字段展示;补建批备注落库测试,更新 spec/契约/接入文档。