--- description: WMS 领域规则:业务编码、状态机、统一订单模型、第三方平台 Connector globs: backend/app/Domain/**,backend/app/Application/**,backend/app/Infrastructure/**,backend/app/Models/** alwaysApply: false --- # WMS 领域规则 详见 `docs/04-domain-model.md`。 ## 业务编码 - 业务关联优先使用 `tenant_code`、`warehouse_code`、`location_code`、`customer_code`、`sku_code`、`order_no`、`inbound_no`、`outbound_no`、`picking_no`、`shipment_no`、`package_no`。 - 单号生成集中在一个编号服务中(租户内唯一、并发安全),不要各模块各自拼接。 ## 状态机 - 状态定义为 Enum,合法转换集中声明,非法转换抛异常;状态变更写日志。 - 出库:`draft → allocated → picking → picked → packing → packed → shipped → completed` ```php // ❌ if ($outbound->status == 'packed') { $outbound->status = 'shipped'; } // ✅ $outbound->transitionTo(OutboundStatus::Shipped); // 内部校验 canTransitionTo,失败抛 InvalidStatusTransition ``` ## 统一订单模型 - `order` / `order_item` / `order_source` / `order_channel` / `order_external_no` / `order_status`。 - 核心订单表、Domain、Application 中**不得出现** Amazon / Shopify / TikTok 等平台特有字段与分支判断。 ## 第三方平台 - 实现 `MarketplaceConnector` 接口,放 `app/Infrastructure/Platforms/{Platform}/`。 - Connector 负责平台数据 ↔ 统一模型(订单、SKU、库存、物流、状态)的映射。 - 新增平台只新增 Connector 与配置,不修改核心 WMS 代码。 - 平台调用走 Queue,不在用户 HTTP 请求中同步等待。