# 仓库、库区、库位 约定见 [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`。 并发 / 审计:仍有非零库存时不能软删、不能停用。容量在上架时由应用校验,不靠数据库约束。