3.5 KiB
3.5 KiB
2026-08-11 M09-D2 商品订单与库存生命周期
工程结果
- 工程状态:已由
1a3ea7bdf0bc55f85a87ef3c251fc7bbeb7d1620以feat(M09-D2): 完成商品订单与库存占用生命周期中文标题提交并推送,且HEAD == origin/main校验通过。 - 新增独立的商品订单、订单项快照、订单事件、支付、退款、支付回调和退款事件领域;商品订单不复用房间订单或支付单状态,订单项固化商品/SKU 名称、规格、单价、数量、小计和备注。
- 顾客创建订单时由服务端读取有效门店上架、售价、销售开关和跨日营业时段并复算金额;
DELIVERY必须绑定本人当前有效房间订单,SELF_SERVICE明确禁止伪造房间绑定。 - 下单按稳定订单业务号批量锁定库存;支付成功回调在同一事务扣减并推进
PAID,取消和待支付超时释放,退款按履约状态选择RESTOCK或NO_RESTOCK。重复请求、重复回调和指纹冲突分别重放或明确拒绝。 - 支付回调统一事务边界对 MySQL 死锁和锁等待超时最多重试 3 次;真实并发回调验证只有一个扣减副作用,另一请求按已落库 callback 幂等返回。
- 顾客 API 支持创建、本人列表/详情、取消;管理 API 同时提供后台和管理员小程序前缀,支持门店列表/详情、接单、配送、自助待取、完成、取消和退款。服务端重复校验
goods.order.read/manage、租户和授权门店范围。 - 测试支付与退款适配器只在显式非生产开关开启时注册;生产支付/退款回调通过领域服务输入对接后续真实微信适配器,禁止暴露测试完成接口。
数据库结果
2026081108_m09d2_product_order_payment_inventory 新增 7 张表:
qipai_product_ordersqipai_product_order_itemsqipai_product_order_eventsqipai_product_paymentsqipai_product_refundsqipai_product_payment_callbacksqipai_product_refund_events
订单项、订单事件和退款事件均由数据库双触发器拒绝 UPDATE/DELETE;订单/支付/退款业务号、客户端请求、有效单据、回调和事件版本使用唯一键防重。复合外键保持租户、门店、订单、支付、退款和库存请求归属一致。
验证证据
node scripts/check-m09-d2-product-orders.mjs:PASS,静态门禁确认迁移、路由、服务、RBAC、回归入口及 Windows/WSL 门禁均已接线。- 后端
npm run build、后端全量npm test:PASS;新增服务与路由测试覆盖服务端快照、状态转换、本人边界、门店范围和测试适配器生产隔离。 - WSL 原生临时副本 + MySQL 8.4.10:完成
up → verify → down → up → verify,201 条 up、150 条 verify、187 条 down;M09-D1 interrupted up/down 重试会先按依赖撤销 D2,恢复后 D2 权限和表完整重建。 - 真实 MySQL 业务用例覆盖下单重放/指纹冲突、无效房间配送拒绝、并发支付单次扣减、配送和自助状态机、已完成订单退款不返库、未履约订单退款返库、待支付取消释放、超时批量回收、跨门店拒绝及不可变事件触发器。
- Windows 汇总门禁在全部 M09-D2 与伴随文档显式暂存后执行最终复跑;提交前唯一失败为完整性门禁按设计拒绝未跟踪的新交付文件,不是功能失败。
阶段结论
M09-D2=DONE。唯一执行游标进入 M09-D3,下一阶段建立寄存单、分次取出、哈希领取凭证、并发防超领和通知 outbox。