192 lines
14 KiB
SQL
192 lines
14 KiB
SQL
-- This script is run through warehouse-overseas-service's datasource only.
|
||
-- The datasource guard requires the selected schema to be baiyue_lastlag_warehouse;
|
||
-- database creation and USE are intentionally forbidden here so a miswired
|
||
-- service account cannot create or switch schemas during startup.
|
||
|
||
SET NAMES utf8mb4;
|
||
|
||
CREATE TABLE IF NOT EXISTS wh_location (
|
||
id BIGINT UNSIGNED NOT NULL COMMENT '库位ID(雪花ID)',
|
||
customer_id BIGINT UNSIGNED NOT NULL COMMENT '数据所属租户ID',
|
||
warehouse_id BIGINT UNSIGNED NOT NULL COMMENT '所属仓库ID',
|
||
zone_code VARCHAR(50) NOT NULL COMMENT '仓库分区编码',
|
||
location_code VARCHAR(64) NOT NULL COMMENT '仓库内唯一库位编码',
|
||
location_type VARCHAR(32) NOT NULL COMMENT '库位类型',
|
||
max_load_kg DECIMAL(18,3) NOT NULL COMMENT '最大承重(千克)',
|
||
status VARCHAR(20) NOT NULL DEFAULT 'ACTIVE' COMMENT '库位状态:ACTIVE启用、INACTIVE停用',
|
||
remark VARCHAR(500) DEFAULT NULL COMMENT '备注',
|
||
created_by BIGINT UNSIGNED DEFAULT NULL COMMENT '创建人ID',
|
||
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间',
|
||
updated_by BIGINT UNSIGNED DEFAULT NULL COMMENT '最后修改人ID',
|
||
updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '更新时间',
|
||
deleted TINYINT(1) NOT NULL DEFAULT 0 COMMENT '逻辑删除标记',
|
||
version INT NOT NULL DEFAULT 0 COMMENT '乐观锁版本号',
|
||
PRIMARY KEY (id),
|
||
UNIQUE KEY uk_location_code (customer_id, warehouse_id, location_code, deleted),
|
||
KEY idx_location_query (customer_id, warehouse_id, zone_code, status, deleted)
|
||
) ENGINE=InnoDB COMMENT='仓库库位表:按租户和仓库维护库位及承重信息';
|
||
|
||
CREATE TABLE IF NOT EXISTS wh_pallet (
|
||
id BIGINT UNSIGNED NOT NULL COMMENT '托盘ID(雪花ID)',
|
||
customer_id BIGINT UNSIGNED NOT NULL COMMENT '数据所属租户ID',
|
||
warehouse_id BIGINT UNSIGNED NOT NULL COMMENT '所属仓库ID',
|
||
location_id BIGINT UNSIGNED DEFAULT NULL COMMENT '同仓库内绑定的库位ID,可为空',
|
||
pallet_code VARCHAR(128) NOT NULL COMMENT '仓库内唯一托盘编码',
|
||
pallet_type VARCHAR(32) NOT NULL COMMENT '托盘类型',
|
||
capacity_cbm DECIMAL(18,4) NOT NULL DEFAULT 2.0000 COMMENT '托盘容量(立方米)',
|
||
unit_price DECIMAL(18,2) NOT NULL DEFAULT 0.00 COMMENT '托盘单价',
|
||
status VARCHAR(20) NOT NULL DEFAULT 'IDLE' COMMENT '托盘状态:IDLE闲置、OCCUPIED占用、SCRAPPED废弃',
|
||
remark VARCHAR(500) DEFAULT NULL COMMENT '备注',
|
||
fba_warehouse_code VARCHAR(128) DEFAULT NULL COMMENT '所属FBA仓编码',
|
||
created_by BIGINT UNSIGNED DEFAULT NULL COMMENT '创建人ID',
|
||
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间',
|
||
updated_by BIGINT UNSIGNED DEFAULT NULL COMMENT '最后修改人ID',
|
||
updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '更新时间',
|
||
deleted TINYINT(1) NOT NULL DEFAULT 0 COMMENT '逻辑删除标记',
|
||
version INT NOT NULL DEFAULT 0 COMMENT '乐观锁版本号',
|
||
PRIMARY KEY (id),
|
||
UNIQUE KEY uk_pallet_code (customer_id, warehouse_id, pallet_code, deleted),
|
||
KEY idx_pallet_query (customer_id, warehouse_id, status, deleted),
|
||
KEY idx_pallet_location (customer_id, warehouse_id, location_id, deleted)
|
||
) ENGINE=InnoDB COMMENT='仓库托盘表:按租户和仓库维护托盘、容量、单价及状态';
|
||
|
||
SET @ddl = (SELECT IF(EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema=DATABASE()
|
||
AND table_name='wh_pallet' AND column_name='fba_warehouse_code'),
|
||
'SELECT 1',
|
||
'ALTER TABLE wh_pallet ADD COLUMN fba_warehouse_code VARCHAR(128) NULL COMMENT ''所属FBA仓编码'' AFTER remark'));
|
||
PREPARE pallet_fba_warehouse_stmt FROM @ddl;
|
||
EXECUTE pallet_fba_warehouse_stmt;
|
||
DEALLOCATE PREPARE pallet_fba_warehouse_stmt;
|
||
|
||
CREATE TABLE IF NOT EXISTS wh_resource_lock (
|
||
id BIGINT UNSIGNED NOT NULL COMMENT '主键ID',
|
||
customer_id BIGINT UNSIGNED NOT NULL COMMENT '客户租户ID',
|
||
warehouse_id BIGINT UNSIGNED NOT NULL COMMENT '仓库ID',
|
||
pallet_id BIGINT UNSIGNED NOT NULL COMMENT '托盘ID',
|
||
location_id BIGINT UNSIGNED NOT NULL COMMENT '库位ID',
|
||
business_type VARCHAR(50) NOT NULL COMMENT '业务类型',
|
||
business_id VARCHAR(100) NOT NULL COMMENT '业务记录ID',
|
||
reservation_key VARCHAR(160) NOT NULL COMMENT '资源预留幂等键',
|
||
status VARCHAR(20) NOT NULL DEFAULT 'ACTIVE' COMMENT '资源锁状态',
|
||
locked_at DATETIME(3) NOT NULL COMMENT '锁定时间',
|
||
released_at DATETIME(3) DEFAULT NULL COMMENT '释放时间',
|
||
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间',
|
||
updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '更新时间',
|
||
PRIMARY KEY (id),
|
||
UNIQUE KEY uk_resource_lock_reservation (customer_id, reservation_key),
|
||
KEY idx_resource_lock_pallet (customer_id, warehouse_id, pallet_id, status),
|
||
KEY idx_resource_lock_location (customer_id, warehouse_id, location_id, status),
|
||
KEY idx_resource_lock_business (customer_id, business_type, business_id)
|
||
) ENGINE=InnoDB COMMENT='仓储资源锁定记录';
|
||
|
||
-- warehouse_id references the domestic warehouse-service authority. This overseas database does
|
||
-- not duplicate warehouse master, address or capability tables and has no cross-database FK.
|
||
|
||
-- 修复既有数据库中因历史脚本编码错误或英文初始化产生的表与字段注释。
|
||
ALTER TABLE wh_location COMMENT='仓库库位表:按租户和仓库维护库位及承重信息';
|
||
ALTER TABLE wh_location
|
||
MODIFY COLUMN id BIGINT UNSIGNED NOT NULL COMMENT '库位ID(雪花ID)',
|
||
MODIFY COLUMN customer_id BIGINT UNSIGNED NOT NULL COMMENT '数据所属租户ID',
|
||
MODIFY COLUMN warehouse_id BIGINT UNSIGNED NOT NULL COMMENT '所属仓库ID',
|
||
MODIFY COLUMN zone_code VARCHAR(50) NOT NULL COMMENT '仓库分区编码',
|
||
MODIFY COLUMN location_code VARCHAR(64) NOT NULL COMMENT '仓库内唯一库位编码',
|
||
MODIFY COLUMN location_type VARCHAR(32) NOT NULL COMMENT '库位类型',
|
||
MODIFY COLUMN max_load_kg DECIMAL(18,3) NOT NULL COMMENT '最大承重(千克)',
|
||
MODIFY COLUMN status VARCHAR(20) NOT NULL DEFAULT 'ACTIVE' COMMENT '库位状态:ACTIVE启用、INACTIVE停用',
|
||
MODIFY COLUMN remark VARCHAR(500) NULL COMMENT '备注',
|
||
MODIFY COLUMN created_by BIGINT UNSIGNED NULL COMMENT '创建人ID',
|
||
MODIFY COLUMN created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间',
|
||
MODIFY COLUMN updated_by BIGINT UNSIGNED NULL COMMENT '最后修改人ID',
|
||
MODIFY COLUMN updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '更新时间',
|
||
MODIFY COLUMN deleted TINYINT(1) NOT NULL DEFAULT 0 COMMENT '逻辑删除标记',
|
||
MODIFY COLUMN version INT NOT NULL DEFAULT 0 COMMENT '乐观锁版本号';
|
||
|
||
CREATE TABLE IF NOT EXISTS wh_pallet_business_binding (
|
||
id BIGINT NOT NULL COMMENT '主键ID', customer_id BIGINT NOT NULL COMMENT '客户租户ID', warehouse_id BIGINT NOT NULL COMMENT '仓库ID',
|
||
business_type VARCHAR(32) NOT NULL COMMENT '业务类型', business_id VARCHAR(128) NOT NULL COMMENT '绑定业务记录ID',
|
||
pallet_id BIGINT NOT NULL COMMENT '托盘ID', created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间',
|
||
PRIMARY KEY (id), UNIQUE KEY uk_wh_pallet_binding (customer_id,warehouse_id,business_type,business_id),
|
||
UNIQUE KEY uk_wh_pallet_binding_pallet (pallet_id)
|
||
) ENGINE=InnoDB COMMENT='托盘业务绑定关系';
|
||
|
||
CREATE TABLE IF NOT EXISTS wh_pallet_operation (
|
||
id BIGINT NOT NULL COMMENT '托盘状态操作ID', operation_key VARCHAR(128) NOT NULL COMMENT '跨服务幂等操作键',
|
||
request_hash VARCHAR(128) NOT NULL COMMENT '状态变更请求摘要', warehouse_id BIGINT NOT NULL COMMENT '实际海外仓ID',
|
||
pallet_id BIGINT NOT NULL COMMENT '实物托盘ID', pallet_code VARCHAR(128) NOT NULL COMMENT '实物托盘码快照',
|
||
before_status VARCHAR(20) NOT NULL COMMENT '变更前托盘状态', after_status VARCHAR(20) NOT NULL COMMENT '变更后托盘状态',
|
||
before_location_id BIGINT NULL COMMENT '变更前库位ID,无库位托盘为空', after_location_id BIGINT NULL COMMENT '变更后库位ID,无库位托盘为空',
|
||
before_version INT NOT NULL COMMENT '变更前托盘版本', after_version INT NOT NULL COMMENT '变更后托盘版本',
|
||
operation_status VARCHAR(32) NOT NULL COMMENT '操作状态:APPLIED已应用、COMPENSATED已补偿',
|
||
reason VARCHAR(500) NULL COMMENT '操作原因', created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间',
|
||
updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '更新时间',
|
||
PRIMARY KEY (id), UNIQUE KEY uk_wh_pallet_operation_key (operation_key),
|
||
KEY idx_wh_pallet_operation_pallet (warehouse_id,pallet_id,created_at)
|
||
) ENGINE=InnoDB COMMENT='实物托盘状态幂等变更与补偿记录';
|
||
|
||
ALTER TABLE wh_pallet_operation
|
||
MODIFY COLUMN before_location_id BIGINT NULL COMMENT '变更前库位ID,无库位托盘为空',
|
||
MODIFY COLUMN after_location_id BIGINT NULL COMMENT '变更后库位ID,无库位托盘为空';
|
||
|
||
CREATE TABLE IF NOT EXISTS wh_pallet_batch (
|
||
id BIGINT NOT NULL COMMENT '批量托盘预留ID',
|
||
warehouse_id BIGINT NOT NULL COMMENT '实际海外仓ID',
|
||
batch_key VARCHAR(160) NOT NULL COMMENT '柜级入库计划批次稳定业务键',
|
||
request_hash CHAR(64) NOT NULL COMMENT '规范化批量请求SHA-256摘要',
|
||
status VARCHAR(32) NOT NULL COMMENT '批次状态:RESERVED、CONFIRMED、COMPENSATED',
|
||
attempt_no INT NOT NULL DEFAULT 1 COMMENT '同批次重新预留尝试次数',
|
||
confirm_command_key VARCHAR(160) NULL COMMENT '确认命令幂等键',
|
||
confirm_command_hash CHAR(64) NULL COMMENT '确认命令规范化SHA-256摘要',
|
||
compensate_command_key VARCHAR(160) NULL COMMENT '补偿命令幂等键',
|
||
compensate_command_hash CHAR(64) NULL COMMENT '补偿命令规范化SHA-256摘要',
|
||
compensate_reason VARCHAR(500) NULL COMMENT '补偿原因',
|
||
confirmed_at DATETIME(3) NULL COMMENT '确认绑定时间',
|
||
compensated_at DATETIME(3) NULL COMMENT '补偿释放时间',
|
||
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间',
|
||
updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '更新时间',
|
||
PRIMARY KEY (id),
|
||
UNIQUE KEY uk_wh_pallet_batch_key (warehouse_id,batch_key),
|
||
KEY idx_wh_pallet_batch_status (warehouse_id,status,updated_at)
|
||
) ENGINE=InnoDB COMMENT='柜级入库计划批量托盘预留与确认记录';
|
||
|
||
CREATE TABLE IF NOT EXISTS wh_pallet_batch_item (
|
||
id BIGINT NOT NULL COMMENT '批量托盘明细ID',
|
||
batch_id BIGINT NOT NULL COMMENT '所属批量托盘预留ID',
|
||
customer_id BIGINT NOT NULL COMMENT '实际占用客户ID',
|
||
warehouse_id BIGINT NOT NULL COMMENT '实际海外仓ID',
|
||
business_key VARCHAR(100) NOT NULL COMMENT '柜号入库计划序号组成的稳定业务键',
|
||
inbound_plan_no VARCHAR(128) NOT NULL COMMENT '入库计划号快照',
|
||
sequence_no INT NOT NULL COMMENT '计划内托盘序号',
|
||
pallet_id BIGINT NOT NULL COMMENT '公共实物托盘ID',
|
||
pallet_code VARCHAR(64) NOT NULL COMMENT '资源服务生成的规范托盘码快照',
|
||
location_id BIGINT NOT NULL COMMENT '公共托盘当前预留库位ID',
|
||
resource_lock_id BIGINT NOT NULL COMMENT '按客户隔离的资源锁ID',
|
||
status VARCHAR(32) NOT NULL COMMENT '明细状态:RESERVED、CONFIRMED、RELEASED',
|
||
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间',
|
||
updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '更新时间',
|
||
PRIMARY KEY (id),
|
||
UNIQUE KEY uk_wh_pallet_batch_item_business (customer_id,warehouse_id,business_key),
|
||
UNIQUE KEY uk_wh_pallet_batch_item_sequence (batch_id,sequence_no),
|
||
UNIQUE KEY uk_wh_pallet_batch_item_pallet (pallet_id),
|
||
KEY idx_wh_pallet_batch_item_batch (batch_id,status)
|
||
) ENGINE=InnoDB COMMENT='柜级入库计划批量托盘明细与资源锁关联';
|
||
|
||
ALTER TABLE wh_pallet COMMENT='仓库托盘表:按租户和仓库维护托盘、容量、单价及状态';
|
||
ALTER TABLE wh_pallet
|
||
MODIFY COLUMN id BIGINT UNSIGNED NOT NULL COMMENT '托盘ID(雪花ID)',
|
||
MODIFY COLUMN customer_id BIGINT UNSIGNED NOT NULL COMMENT '数据所属租户ID',
|
||
MODIFY COLUMN warehouse_id BIGINT UNSIGNED NOT NULL COMMENT '所属仓库ID',
|
||
MODIFY COLUMN location_id BIGINT UNSIGNED NULL COMMENT '同仓库内绑定的库位ID,可为空',
|
||
MODIFY COLUMN pallet_code VARCHAR(128) NOT NULL COMMENT '仓库内唯一托盘编码',
|
||
MODIFY COLUMN pallet_type VARCHAR(32) NOT NULL COMMENT '托盘类型',
|
||
MODIFY COLUMN capacity_cbm DECIMAL(18,4) NOT NULL DEFAULT 2.0000 COMMENT '托盘容量(立方米)',
|
||
MODIFY COLUMN unit_price DECIMAL(18,2) NOT NULL DEFAULT 0.00 COMMENT '托盘单价',
|
||
MODIFY COLUMN status VARCHAR(20) NOT NULL DEFAULT 'IDLE' COMMENT '托盘状态:IDLE闲置、OCCUPIED占用、SCRAPPED废弃',
|
||
MODIFY COLUMN remark VARCHAR(500) NULL COMMENT '备注',
|
||
MODIFY COLUMN fba_warehouse_code VARCHAR(128) NULL COMMENT '所属FBA仓编码',
|
||
MODIFY COLUMN created_by BIGINT UNSIGNED NULL COMMENT '创建人ID',
|
||
MODIFY COLUMN created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '创建时间',
|
||
MODIFY COLUMN updated_by BIGINT UNSIGNED NULL COMMENT '最后修改人ID',
|
||
MODIFY COLUMN updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '更新时间',
|
||
MODIFY COLUMN deleted TINYINT(1) NOT NULL DEFAULT 0 COMMENT '逻辑删除标记',
|
||
MODIFY COLUMN version INT NOT NULL DEFAULT 0 COMMENT '乐观锁版本号';
|