Files
wms-saas/docs/database/01-er-overview.md
T
2026-09-30 11:11:54 +08:00

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)。非法转换在领域层拒绝,不写日志。