# 2026-08-11 M09-D2 商品订单、支付与库存生命周期 - 版本:`2026081108_m09d2_product_order_payment_inventory`。 - 新增 7 张表:`qipai_product_orders`、`qipai_product_order_items`、`qipai_product_order_events`、`qipai_product_payments`、`qipai_product_refunds`、`qipai_product_payment_callbacks`、`qipai_product_refund_events`。 - 商品订单保存客户端请求指纹、库存业务号/请求号、履约方式、房间订单、金额/数量汇总、库存状态、各阶段时间和版本;数据库 CHECK 保证金额、数量、来源、指纹、版本和房间履约组合合法。 - 订单项保存商品/SKU 代码与名称、规格 JSON、单位、单价、数量、小计和备注快照;订单项行号和订单事件请求/版本均唯一,双触发器禁止更新或删除订单项与订单事件。 - 支付与商品订单分表;有效支付、支付业务号、客户端请求、provider paymentId 均唯一,退款同样约束有效单据、provider refundId 和返库请求。金额统一整数分。 - 支付回调以 provider/callbackId 唯一,保存 payload 指纹、验签结果、处理状态和脱敏 payload;订单/支付/退款/回调复合外键阻止跨租户、跨门店或跨单据串接。 - 退款保存 `RESTOCK/NO_RESTOCK` 决策和 `PENDING/SUCCEEDED/FAILED/NOT_REQUIRED` 库存状态;退款事件记录每次状态、库存结果和版本,双触发器禁止修改或删除历史。 - 新增 `goods.order.read`、`goods.order.manage` 并授予活动 STAFF、STORE_ADMIN、TENANT_ADMIN、PLATFORM_ADMIN;新租户通过登录和 RBAC 初始化路径取得相同权限,避免迁移后创建的租户缺少授权。 - down 先删除不可变触发器、角色权限,再按回调/退款/支付/事件/订单项/订单依赖逆序删除 7 张表和 marker;M09-D1 崩溃重试测试先执行本迁移 down,避免直接删除被 D2 外键引用的库存请求表。 - verify 校验 7 张表、列排序规则、22 个唯一/查询索引、18 个复合外键、34 个 CHECK、6 个不可变触发器、2 项权限、完整角色授权和迁移 checksum。 - MySQL 8.4.10 已完成 201 up、150 verify、187 down 的 `up → verify → down → up → verify`;并发支付单次扣减、取消/超时释放、退款返库、门店范围、事件不可变与跨阶段重试均通过。