3.6 KiB
3.6 KiB
ER 关系
Phase 1 锁定的核心模型。表结构见同目录各领域文件。退货、物流主数据、平台店铺、登录 / API 日志不在本图中,留到对应 Phase。
关联一律用业务编码,并始终带 tenant_code。
erDiagram
wms_tenant ||--o{ wms_user : tenant_code
wms_tenant ||--o{ wms_role : tenant_code
wms_role ||--o{ wms_user_role : role_code
wms_user ||--o{ wms_user_role : user_code
wms_role ||--o{ wms_role_permission : role_code
wms_permission ||--o{ wms_role_permission : permission_code
wms_warehouse ||--o{ wms_zone : warehouse_code
wms_zone ||--o{ wms_location : zone_code
wms_customer ||--o{ wms_product : customer_code
wms_product ||--o{ wms_sku : product_code
wms_sku ||--o{ wms_sku_barcode : sku_code
wms_sku ||--o{ wms_pack_spec : sku_code
wms_sku ||--o{ wms_inventory : sku_code
wms_location ||--o{ wms_inventory : location_code
wms_batch ||--o{ wms_inventory : batch_no
wms_inventory ||--o{ wms_stock_log : movement
wms_inbound ||--o{ wms_inbound_line : inbound_no
wms_inbound_line ||--o{ wms_inbound_receipt : line_no
wms_inbound_line ||--o{ wms_inbound_putaway : line_no
wms_order ||--o{ wms_order_line : order_no
wms_order ||--o{ wms_outbound : order_no
wms_outbound ||--o{ wms_outbound_line : outbound_no
wms_outbound_line ||--o{ wms_outbound_allocation : line_no
wms_wave ||--o{ wms_wave_outbound : wave_no
wms_outbound ||--o{ wms_wave_outbound : outbound_no
wms_outbound_allocation ||--o{ wms_pick_task : allocation_no
wms_outbound ||--o{ wms_package : outbound_no
wms_package ||--o{ wms_package_line : package_no
wms_outbound ||--o{ wms_shipment : outbound_no
库存落在哪一行
余额行的粒度:
tenant_code + customer_code + warehouse_code + location_code + sku_code + batch_no
货主(customer_code)必须在粒度里。租户是仓配公司,客户是 3PL 的货主,两家客户的库存不能混在一行。
在途、尚未落到库位时,location_code 为空字符串,表示虚拟在途位置。
数量怎么变
在手库存(不含在途):
available_qty + reserved_qty + picked_qty + hold_qty + damaged_qty
| 业务 | 数量桶 |
|---|---|
| 入库确认 | 在途 + |
| 收货到收货位 | 在途 -,收货位可用或残损 + |
| 上架 | 源库位可用 -,目标库位可用 + |
| 分配 | 可用 -,预占 + |
| 取消分配 | 预占 -,可用 + |
| 拣货 | 预占 -,已拣 + |
| 发货 | 已拣 -(离开仓库) |
| 冻结 / 解冻 | 可用与冻结对转 |
| 转残 / 转良 | 可用与残损对转 |
| 调整、盘点确认 | 对应桶按差额 +/- |
每一次桶的变化写一行 wms_stock_log。同一次业务动作的多行共用 movement_no。余额更新与流水插入在同一数据库事务中。
单据链
订单 wms_order
→ 出库单 wms_outbound
→ 分配 wms_outbound_allocation
→ 波次 wms_wave(可无,则按单拣货)
→ 拣货任务 wms_pick_task
→ 包裹 wms_package
→ 发货 wms_shipment
第一阶段业务上一单一张出库单。表结构允许多张出库单指向同一 order_no,后续拆单不用改表。
入库不经过订单:
入库单 → 明细 → 收货记录 → 上架记录 → 库存余额 + 流水
收货差异不单独建表,用明细上的 expected_qty - received_qty 得出。
状态日志
入库、出库、订单、波次、调整、盘点的状态变化写 wms_status_log(见 10-saas.md)。非法转换在领域层拒绝,不写日志。