This commit is contained in:
Yangxt
2026-09-30 11:11:54 +08:00
parent cb9b7a4bd4
commit 2fb57ec490
160 changed files with 14764 additions and 53 deletions
+111
View File
@@ -0,0 +1,111 @@
# 仓库、库区、库位
约定见 [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`。
并发 / 审计:仍有非零库存时不能软删、不能停用。容量在上架时由应用校验,不靠数据库约束。