6.5 KiB
入库
约定见 00-conventions.md。库存变化见 40-inventory.md。Phase 1 锁定,Phase 9 写迁移。
收货差异不建表,由明细的 expected_qty - received_qty 得出。质检结果记在收货记录上。
wms_inbound 入库单
用途:入库单据头。
| 字段 | 类型 | 可空 | 默认 | 说明 |
|---|---|---|---|---|
| id | BIGINT UNSIGNED | N | AUTO_INCREMENT | 内部主键 |
| tenant_code | VARCHAR(32) | N | 租户编码 | |
| inbound_no | VARCHAR(64) | N | 入库单号 | |
| warehouse_code | VARCHAR(32) | N | 仓库 | |
| customer_code | VARCHAR(64) | N | 货主 | |
| inbound_type | VARCHAR(32) | N | 类型 | |
| supplier_code | VARCHAR(64) | Y | 供应商 | |
| status | VARCHAR(32) | N | draft | 状态 |
| qc_required | TINYINT UNSIGNED | N | 0 | 1 表示收货后需质检 |
| expected_at | TIMESTAMP | Y | 预计到货 | |
| remark | VARCHAR(500) | Y | ||
| version | INT UNSIGNED | N | 0 | 乐观锁 |
| created_at | TIMESTAMP | Y | ||
| updated_at | TIMESTAMP | Y |
索引:
| 名称 | 类型 | 字段 | 支撑的查询 |
|---|---|---|---|
| uk_tenant_inbound_no | UNIQUE | (tenant_code, inbound_no) | 按单号查找 |
| idx_tenant_status_created | INDEX | (tenant_code, status, created_at) | 列表 |
| idx_tenant_wh_customer | INDEX | (tenant_code, warehouse_code, customer_code, status) | 仓库 / 货主筛选 |
inbound_type:purchase 采购、return 退货入库、transfer 调拨、other 其他。退货业务单据表在后续 Phase 再设计,这里只保留类型值。
状态与合法转换:
draft → confirmed → receiving → received → putting_away → completed
draft → cancelled
confirmed → cancelled
receiving → cancelled (仅当全部明细 received_qty = 0)
completed、cancelled 为终态。禁止跳步。每次成功转换写 wms_status_log,biz_type = inbound。
关联:明细、收货、上架。不软删除,取消用状态。
并发 / 审计:更新状态时带 version。确认时按预计数量增加在途(location_code = '',biz_type = inbound_confirm)。取消已确认且未收货的单据时冲回在途。
wms_inbound_line 入库明细
用途:入库单的 SKU 行。
| 字段 | 类型 | 可空 | 默认 | 说明 |
|---|---|---|---|---|
| id | BIGINT UNSIGNED | N | AUTO_INCREMENT | 内部主键 |
| tenant_code | VARCHAR(32) | N | 租户编码 | |
| inbound_no | VARCHAR(64) | N | 入库单号 | |
| line_no | INT UNSIGNED | N | 行号,单内从 1 递增 | |
| sku_code | VARCHAR(64) | N | SKU | |
| batch_no | VARCHAR(64) | N | '' | 指定批次;收货时才知道则为空,记到收货记录 |
| expected_qty | DECIMAL(16,4) | N | 预计数量,大于 0 | |
| received_qty | DECIMAL(16,4) | N | 0 | 已收,由收货记录累计 |
| putaway_qty | DECIMAL(16,4) | N | 0 | 已上架,由上架记录累计 |
| created_at | TIMESTAMP | Y | ||
| updated_at | TIMESTAMP | Y |
索引:
| 名称 | 类型 | 字段 | 支撑的查询 |
|---|---|---|---|
| uk_tenant_inbound_line | UNIQUE | (tenant_code, inbound_no, line_no) | 定位明细 |
| idx_tenant_inbound_sku | INDEX | (tenant_code, inbound_no, sku_code) | 按 SKU 找行 |
关联:头表 wms_inbound。received_qty、putaway_qty 只由收货、上架事务回写,不单独做接口改数。
约束:putaway_qty <= received_qty <= expected_qty 不强制等于预计。短收允许进入 received。超收拒绝。
wms_inbound_receipt 收货记录
用途:一次收货的事实。只追加。质检结论写在本行。
| 字段 | 类型 | 可空 | 默认 | 说明 |
|---|---|---|---|---|
| id | BIGINT UNSIGNED | N | AUTO_INCREMENT | 内部主键 |
| tenant_code | VARCHAR(32) | N | 租户编码 | |
| receipt_no | VARCHAR(64) | N | 收货记录号,可用 movement 同源取号或与 movement_no 相同 | |
| inbound_no | VARCHAR(64) | N | 入库单号 | |
| line_no | INT UNSIGNED | N | 明细行号 | |
| sku_code | VARCHAR(64) | N | SKU | |
| batch_no | VARCHAR(64) | N | '' | 实收批次 |
| location_code | VARCHAR(64) | N | 收到的库位,通常是收货位 | |
| qty | DECIMAL(16,4) | N | 数量,大于 0 | |
| qc_result | VARCHAR(32) | N | skipped | 质检结果 |
| operator_user_code | VARCHAR(64) | Y | 操作人 | |
| created_at | TIMESTAMP | Y | ||
| updated_at | TIMESTAMP | Y | 行创建后不更新 |
索引:
| 名称 | 类型 | 字段 | 支撑的查询 |
|---|---|---|---|
| uk_tenant_receipt_no | UNIQUE | (tenant_code, receipt_no) | 按收货号查找 |
| idx_tenant_inbound_line | INDEX | (tenant_code, inbound_no, line_no) | 某行的收货历史 |
qc_result:skipped 无需质检,passed 合格,failed 不合格。
同一事务:
- 在途减少
qty。 passed或skipped:收货位available_qty增加。failed:收货位damaged_qty增加。- 流水
biz_type = inbound_receive,biz_no = inbound_no。 - 明细
received_qty增加。
不需要质检时 qc_result 直接为 skipped。需要质检时,本阶段仍在收货事务内给出结论,不另建质检单。
wms_inbound_putaway 上架记录
用途:从收货位移到存储位的事实。只追加。
| 字段 | 类型 | 可空 | 默认 | 说明 |
|---|---|---|---|---|
| id | BIGINT UNSIGNED | N | AUTO_INCREMENT | 内部主键 |
| tenant_code | VARCHAR(32) | N | 租户编码 | |
| putaway_no | VARCHAR(64) | N | 上架记录号 | |
| inbound_no | VARCHAR(64) | N | 入库单号 | |
| line_no | INT UNSIGNED | N | 明细行号 | |
| sku_code | VARCHAR(64) | N | SKU | |
| batch_no | VARCHAR(64) | N | '' | 批次 |
| from_location_code | VARCHAR(64) | N | 源库位 | |
| to_location_code | VARCHAR(64) | N | 目标库位 | |
| qty | DECIMAL(16,4) | N | 数量,大于 0 | |
| operator_user_code | VARCHAR(64) | Y | 操作人 | |
| created_at | TIMESTAMP | Y | ||
| updated_at | TIMESTAMP | Y | 行创建后不更新 |
索引:
| 名称 | 类型 | 字段 | 支撑的查询 |
|---|---|---|---|
| uk_tenant_putaway_no | UNIQUE | (tenant_code, putaway_no) | 按上架号查找 |
| idx_tenant_inbound_line | INDEX | (tenant_code, inbound_no, line_no) | 某行的上架历史 |
同一事务:源库位可用减少、目标库位可用增加,流水 biz_type = inbound_putaway。目标库位须为 active,并满足混放与容量。残损数量不上架到存储位,留在收货 / 残品位。明细 putaway_qty 增加。
全部明细 putaway_qty = received_qty 且状态为 putting_away 时,才允许转到 completed。