Files
2026-09-30 11:11:54 +08:00

112 lines
4.5 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 仓库、库区、库位
约定见 [00-conventions.md](./00-conventions.md)。Phase 1 锁定,Phase 5 写迁移。
库位策略不单独建规则表。容量与混放开关放在库位上。策略引擎等到有明确规则后再加表。
一个租户的客户默认可使用该租户的全部仓库。仓库与客户的授权表等到需要限制时再加。
## wms_warehouse 仓库
用途:租户下的仓库。
| 字段 | 类型 | 可空 | 默认 | 说明 |
| --- | --- | --- | --- | --- |
| id | BIGINT UNSIGNED | N | AUTO_INCREMENT | 内部主键 |
| tenant_code | VARCHAR(32) | N | | 租户编码 |
| warehouse_code | VARCHAR(32) | N | | 仓库编码 |
| warehouse_name | VARCHAR(128) | N | | 仓库名称 |
| warehouse_status | VARCHAR(32) | N | active | 状态 |
| timezone | VARCHAR(64) | N | UTC | IANA 时区 |
| country_code | CHAR(2) | Y | | ISO 国家码 |
| postal_code | VARCHAR(32) | Y | | |
| province | VARCHAR(64) | Y | | |
| city | VARCHAR(64) | Y | | |
| address_line | VARCHAR(255) | Y | | |
| created_at | TIMESTAMP | Y | | |
| updated_at | TIMESTAMP | Y | | |
| deleted_at | TIMESTAMP | Y | | 软删除 |
索引:
| 名称 | 类型 | 字段 | 支撑的查询 |
| --- | --- | --- | --- |
| uk_tenant_warehouse_code | UNIQUE | (tenant_code, warehouse_code) | 按仓库编码查找 |
| idx_tenant_status | INDEX | (tenant_code, status) | 列表筛选 |
状态:`active`、`disabled`。
关联:库区、库位、库存、入库、出库、订单都带 `warehouse_code`。
并发 / 审计:有库存或未完成单据时不能软删,只能停用。变更写 `wms_operation_log`。
## wms_zone 库区
用途:仓库内的区域。
| 字段 | 类型 | 可空 | 默认 | 说明 |
| --- | --- | --- | --- | --- |
| id | BIGINT UNSIGNED | N | AUTO_INCREMENT | 内部主键 |
| tenant_code | VARCHAR(32) | N | | 租户编码 |
| warehouse_code | VARCHAR(32) | N | | 仓库编码 |
| zone_code | VARCHAR(32) | N | | 库区编码,仓库内唯一 |
| name | VARCHAR(128) | N | | 名称 |
| zone_type | VARCHAR(32) | N | | 类型 |
| status | VARCHAR(32) | N | active | 状态 |
| created_at | TIMESTAMP | Y | | |
| updated_at | TIMESTAMP | Y | | |
| deleted_at | TIMESTAMP | Y | | 软删除 |
索引:
| 名称 | 类型 | 字段 | 支撑的查询 |
| --- | --- | --- | --- |
| uk_tenant_wh_zone | UNIQUE | (tenant_code, warehouse_code, zone_code) | 按库区查找 |
| idx_tenant_wh_status | INDEX | (tenant_code, warehouse_code, status) | 仓库下的库区列表 |
`zone_type`:`storage` 存储、`receiving` 收货、`shipping` 发货、`qc` 质检、`damaged` 残品、`staging` 暂存。
状态:`active`、`disabled`。
关联:`wms_location.zone_code`,同时带 `warehouse_code`。
并发 / 审计:下属库位仍存在时不能软删。
## wms_location 库位
用途:库存存放位置。在途库存不使用本表,余额行的 `location_code` 为空字符串。
| 字段 | 类型 | 可空 | 默认 | 说明 |
| --- | --- | --- | --- | --- |
| id | BIGINT UNSIGNED | N | AUTO_INCREMENT | 内部主键 |
| tenant_code | VARCHAR(32) | N | | 租户编码 |
| warehouse_code | VARCHAR(32) | N | | 仓库编码 |
| zone_code | VARCHAR(32) | N | | 库区编码 |
| location_code | VARCHAR(64) | N | | 库位编码,仓库内唯一 |
| location_type | VARCHAR(32) | N | bin | 类型 |
| status | VARCHAR(32) | N | active | 状态 |
| allow_mix_sku | TINYINT UNSIGNED | N | 1 | 1 允许混放 SKU |
| allow_mix_batch | TINYINT UNSIGNED | N | 1 | 1 允许混放批次 |
| max_sku_count | INT UNSIGNED | Y | | 最大 SKU 数,空为不限制 |
| max_qty | DECIMAL(16,4) | Y | | 最大数量 |
| max_volume_mm3 | DECIMAL(20,2) | Y | | 最大体积,立方毫米 |
| max_weight_g | DECIMAL(16,4) | Y | | 最大重量,克 |
| created_at | TIMESTAMP | Y | | |
| updated_at | TIMESTAMP | Y | | |
| deleted_at | TIMESTAMP | Y | | 软删除 |
索引:
| 名称 | 类型 | 字段 | 支撑的查询 |
| --- | --- | --- | --- |
| uk_tenant_wh_location | UNIQUE | (tenant_code, warehouse_code, location_code) | 扫描 / 上架定位 |
| idx_tenant_wh_zone | INDEX | (tenant_code, warehouse_code, zone_code) | 库区下的库位 |
`location_type`:`bin` 货位、`pallet` 托盘、`floor` 地堆、`virtual` 虚拟位(系统收货位、发货位)。
状态:`active`、`disabled`、`locked`(锁定后禁止上架与分配)。
关联:`wms_inventory.location_code`。
并发 / 审计:仍有非零库存时不能软删、不能停用。容量在上架时由应用校验,不靠数据库约束。