This commit is contained in:
2026-08-17 19:04:58 +08:00
parent 3082167411
commit ac6c0d0395
76 changed files with 2770 additions and 433 deletions
+135 -19
View File
@@ -41,6 +41,8 @@ CREATE TABLE IF NOT EXISTS ll_order (
detained TINYINT NOT NULL DEFAULT 0 COMMENT '是否暂扣:0否1是',
pallet_count INT NOT NULL DEFAULT 0 COMMENT '托数',
package_count INT NOT NULL DEFAULT 0 COMMENT '箱数',
picked_package_count INT NOT NULL DEFAULT 0 COMMENT '累计已拣箱数',
shipped_package_count INT NOT NULL DEFAULT 0 COMMENT '累计已出库箱数',
volume_cbm DECIMAL(18,4) COMMENT '体积(立方米)',
product_quantity INT COMMENT '货物数量',
volume_weight_kg DECIMAL(18,4) COMMENT '体积重量(千克)',
@@ -551,45 +553,43 @@ CREATE TABLE IF NOT EXISTS ll_inventory_balance (
destination_warehouse_id VARCHAR(128) NULL COMMENT 'Customer destination warehouse ID snapshot',
destination_warehouse_code VARCHAR(128) NOT NULL DEFAULT '' COMMENT 'Customer destination warehouse code snapshot',
destination_warehouse_name VARCHAR(255) NULL COMMENT 'Customer destination warehouse name snapshot',
sku_code VARCHAR(128) NOT NULL COMMENT 'SKU code', sku_name_zh VARCHAR(255) NULL COMMENT 'Chinese product name',
inbound_order_id BIGINT NOT NULL COMMENT 'Inbound order ID',
inbound_order_no VARCHAR(128) NULL COMMENT 'Inbound order number snapshot',
inbound_code VARCHAR(128) NOT NULL COMMENT 'Inbound code snapshot',
available_packages BIGINT NOT NULL DEFAULT 0, hold_packages BIGINT NOT NULL DEFAULT 0,
allocated_packages BIGINT NOT NULL DEFAULT 0, picked_packages BIGINT NOT NULL DEFAULT 0,
in_transit_packages BIGINT NOT NULL DEFAULT 0, receiving_packages BIGINT NOT NULL DEFAULT 0,
procurement_packages BIGINT NOT NULL DEFAULT 0,
available_quantity BIGINT NOT NULL DEFAULT 0, hold_quantity BIGINT NOT NULL DEFAULT 0,
allocated_quantity BIGINT NOT NULL DEFAULT 0, picked_quantity BIGINT NOT NULL DEFAULT 0,
in_transit_quantity BIGINT NOT NULL DEFAULT 0, receiving_quantity BIGINT NOT NULL DEFAULT 0,
procurement_quantity BIGINT NOT NULL DEFAULT 0,
version BIGINT NOT NULL DEFAULT 0 COMMENT 'Optimistic lock version',
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
PRIMARY KEY (id),
UNIQUE KEY uk_ll_inventory_dimension (tenant_id,overseas_warehouse_id,destination_warehouse_code,sku_code),
UNIQUE KEY uk_ll_inventory_dimension (tenant_id,overseas_warehouse_id,destination_warehouse_code,inbound_order_id,inbound_code),
KEY idx_ll_inventory_list (tenant_id,overseas_warehouse_id,updated_at),
KEY idx_ll_inventory_sku (tenant_id,sku_code)
) ENGINE=InnoDB COMMENT='Real-time SKU package inventory balance';
KEY idx_ll_inventory_inbound (tenant_id,inbound_code)
) ENGINE=InnoDB COMMENT='Real-time inbound-order package inventory balance';
CREATE TABLE IF NOT EXISTS ll_inventory_position (
id BIGINT NOT NULL COMMENT 'Snowflake ID', tenant_id VARCHAR(128) NOT NULL, balance_id BIGINT NOT NULL,
overseas_warehouse_id VARCHAR(128) NOT NULL, destination_warehouse_code VARCHAR(128) NOT NULL DEFAULT '',
sku_code VARCHAR(128) NOT NULL, pallet_id BIGINT NOT NULL, pallet_no VARCHAR(64) NOT NULL,
pallet_id BIGINT NOT NULL, pallet_no VARCHAR(64) NOT NULL,
batch_no VARCHAR(128) NOT NULL DEFAULT '', warehouse_location_id BIGINT NULL,
warehouse_location_code VARCHAR(128) NOT NULL COMMENT 'Informational default location code',
available_packages BIGINT NOT NULL DEFAULT 0, hold_packages BIGINT NOT NULL DEFAULT 0,
allocated_packages BIGINT NOT NULL DEFAULT 0, picked_packages BIGINT NOT NULL DEFAULT 0,
receiving_packages BIGINT NOT NULL DEFAULT 0, product_quantity BIGINT NOT NULL DEFAULT 0,
receiving_packages BIGINT NOT NULL DEFAULT 0,
status VARCHAR(32) NOT NULL DEFAULT 'ACTIVE', version BIGINT NOT NULL DEFAULT 0,
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
PRIMARY KEY (id), UNIQUE KEY uk_ll_inventory_position (balance_id,pallet_id,batch_no),
KEY idx_ll_inventory_position_pallet (tenant_id,pallet_id),
KEY idx_ll_inventory_position_location (tenant_id,overseas_warehouse_id,warehouse_location_code)
) ENGINE=InnoDB COMMENT='SKU package stock by pallet, default location and batch';
) ENGINE=InnoDB COMMENT='Inbound-order package stock by pallet, default location and batch';
CREATE TABLE IF NOT EXISTS ll_inventory_ledger (
id BIGINT NOT NULL COMMENT 'Snowflake ID', tenant_id VARCHAR(128) NOT NULL,
balance_id BIGINT NOT NULL, position_id BIGINT NULL, overseas_warehouse_id VARCHAR(128) NOT NULL,
destination_warehouse_code VARCHAR(128) NOT NULL DEFAULT '', sku_code VARCHAR(128) NOT NULL,
destination_warehouse_code VARCHAR(128) NOT NULL DEFAULT '', inbound_order_id BIGINT NOT NULL,
pallet_id BIGINT NULL, pallet_no VARCHAR(64) NULL, batch_no VARCHAR(128) NULL,
warehouse_location_code VARCHAR(128) NULL, business_type VARCHAR(32) NOT NULL,
business_order_id BIGINT NULL, business_order_no VARCHAR(128) NULL, inbound_code VARCHAR(128) NULL,
@@ -597,14 +597,13 @@ CREATE TABLE IF NOT EXISTS ll_inventory_ledger (
source_event_id VARCHAR(128) NULL, idempotency_key VARCHAR(255) NOT NULL,
status_from VARCHAR(32) NULL, status_to VARCHAR(32) NULL,
before_packages BIGINT NOT NULL, delta_packages BIGINT NOT NULL, after_packages BIGINT NOT NULL,
before_quantity BIGINT NOT NULL, delta_quantity BIGINT NOT NULL, after_quantity BIGINT NOT NULL,
operator_id VARCHAR(128) NULL, remark VARCHAR(1000) NULL,
occurred_at DATETIME(3) NOT NULL, created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
PRIMARY KEY (id), UNIQUE KEY uk_ll_inventory_ledger_idempotency (tenant_id,idempotency_key),
KEY idx_ll_inventory_ledger_query (tenant_id,overseas_warehouse_id,occurred_at),
KEY idx_ll_inventory_ledger_sku (tenant_id,sku_code,occurred_at),
KEY idx_ll_inventory_ledger_inbound (tenant_id,inbound_code,occurred_at),
KEY idx_ll_inventory_ledger_business (tenant_id,business_type,business_order_no)
) ENGINE=InnoDB COMMENT='Immutable inventory package and quantity ledger';
) ENGINE=InnoDB COMMENT='Immutable inbound-order package inventory ledger';
CREATE TABLE IF NOT EXISTS ll_inventory_operation (
id BIGINT NOT NULL COMMENT 'Snowflake ID', tenant_id VARCHAR(128) NOT NULL,
@@ -621,21 +620,22 @@ CREATE TABLE IF NOT EXISTS ll_inbound_stock_receipt (
id BIGINT NOT NULL COMMENT 'Snowflake ID', tenant_id VARCHAR(128) NOT NULL,
plan_id BIGINT NOT NULL, task_id BIGINT NOT NULL, allocation_id BIGINT NOT NULL,
line_id BIGINT NOT NULL, order_id BIGINT NOT NULL, inbound_code VARCHAR(128) NOT NULL,
sku_code VARCHAR(128) NOT NULL, sku_name_zh VARCHAR(255) NULL, source_detail_ids VARCHAR(2000) NULL,
warehouse_pallet_id BIGINT NOT NULL, pallet_no VARCHAR(64) NOT NULL,
warehouse_location_id BIGINT NULL, warehouse_location_code VARCHAR(128) NULL,
batch_no VARCHAR(128) NOT NULL, received_packages BIGINT NOT NULL, received_quantity BIGINT NOT NULL,
batch_no VARCHAR(128) NOT NULL, received_packages BIGINT NOT NULL,
inventory_balance_id BIGINT NOT NULL, inventory_position_id BIGINT NOT NULL,
inventory_operation_key VARCHAR(255) NOT NULL, received_at DATETIME(3) NOT NULL,
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
PRIMARY KEY (id), UNIQUE KEY uk_ll_stock_receipt_task_allocation_sku (tenant_id,task_id,allocation_id,sku_code),
PRIMARY KEY (id), UNIQUE KEY uk_ll_stock_receipt_task_allocation (tenant_id,task_id,allocation_id),
KEY idx_ll_stock_receipt_plan (tenant_id,plan_id,line_id), KEY idx_ll_stock_receipt_inventory (inventory_balance_id,inventory_position_id)
) ENGINE=InnoDB COMMENT='Immutable SKU-pallet PDA stock-in receipt snapshot';
) ENGINE=InnoDB COMMENT='Immutable inbound-order pallet package receipt snapshot';
CREATE TABLE IF NOT EXISTS ll_dispatch_order (
id BIGINT NOT NULL COMMENT 'Snowflake ID',
tenant_id VARCHAR(128) NOT NULL,
dispatch_no VARCHAR(64) NOT NULL COMMENT 'Dispatch order number',
overseas_warehouse_id VARCHAR(128) NULL COMMENT 'Overseas warehouse scope for PDA operations',
overseas_warehouse_name VARCHAR(255) NULL,
vehicle_plate VARCHAR(64) NULL COMMENT 'Editable vehicle plate; required before PDA picking',
driver_name VARCHAR(128) NULL,
driver_phone VARCHAR(64) NULL,
@@ -650,6 +650,9 @@ CREATE TABLE IF NOT EXISTS ll_dispatch_order (
item_count INT NOT NULL DEFAULT 0,
pallet_count INT NOT NULL DEFAULT 0,
package_count INT NOT NULL DEFAULT 0,
picked_package_count INT NOT NULL DEFAULT 0 COMMENT 'PDA累计已拣箱数',
shipped_package_count INT NOT NULL DEFAULT 0 COMMENT '累计已出库箱数',
partial_completion_reason VARCHAR(1000) NULL COMMENT '部分完成原因',
created_by VARCHAR(128) NULL,
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
@@ -671,6 +674,8 @@ CREATE TABLE IF NOT EXISTS ll_dispatch_item (
order_refs VARCHAR(2000) NULL,
inbound_code VARCHAR(128) NULL,
pallet_no VARCHAR(128) NOT NULL,
overseas_warehouse_id VARCHAR(128) NULL,
overseas_warehouse_name VARCHAR(255) NULL,
destination_warehouse_id VARCHAR(128) NULL,
destination_warehouse_code VARCHAR(128) NULL,
destination_warehouse_name VARCHAR(255) NULL,
@@ -712,6 +717,7 @@ PREPARE dispatch_schema_stmt FROM @ddl; EXECUTE dispatch_schema_stmt; DEALLOCATE
CREATE TABLE IF NOT EXISTS ll_dispatch_pda_task (
id BIGINT NOT NULL, tenant_id VARCHAR(128) NOT NULL, dispatch_order_id BIGINT NOT NULL,
task_no VARCHAR(64) NOT NULL, status VARCHAR(32) NOT NULL, operator_id VARCHAR(128) NULL,
warehouse_id VARCHAR(128) NULL COMMENT 'Selected overseas warehouse for PDA operation',
operator_name VARCHAR(128) NULL, pushed_at DATETIME(3) NOT NULL, completed_at DATETIME(3) NULL,
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
@@ -736,3 +742,113 @@ CREATE TABLE IF NOT EXISTS ll_dispatch_pda_operation (
updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
PRIMARY KEY (id), UNIQUE KEY uk_ll_dispatch_pda_operation_key (tenant_id,idempotency_key)
) ENGINE=InnoDB COMMENT='Idempotent dispatch PDA operations';
CREATE TABLE IF NOT EXISTS ll_dispatch_pda_pick_order (
id BIGINT NOT NULL, tenant_id VARCHAR(128) NOT NULL, pick_id BIGINT NOT NULL,
receipt_id BIGINT NOT NULL, order_id BIGINT NOT NULL, packages BIGINT NOT NULL,
product_quantity BIGINT NOT NULL DEFAULT 0, created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
PRIMARY KEY (id), KEY idx_ll_dispatch_pick_order_pick (tenant_id,pick_id),
KEY idx_ll_dispatch_pick_order_receipt (tenant_id,receipt_id)
) ENGINE=InnoDB COMMENT='PDA pick attribution to frozen inbound receipt and tail order';
-- Transfer a dispatch to delivery: one outbound header, many pallet rows, one delivery header.
CREATE TABLE IF NOT EXISTS ll_outbound_order (
id BIGINT NOT NULL COMMENT 'Snowflake ID', tenant_id VARCHAR(128) NOT NULL,
outbound_no VARCHAR(64) NOT NULL, dispatch_order_id BIGINT NOT NULL, dispatch_no VARCHAR(64) NOT NULL,
overseas_warehouse_id VARCHAR(128) NULL, status VARCHAR(32) NOT NULL DEFAULT 'WAIT_OUTBOUND',
package_count INT NOT NULL DEFAULT 0, pallet_count INT NOT NULL DEFAULT 0,
idempotency_key VARCHAR(255) NOT NULL, created_by VARCHAR(128) NULL,
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
PRIMARY KEY (id), UNIQUE KEY uk_ll_outbound_no (tenant_id,outbound_no),
UNIQUE KEY uk_ll_outbound_idempotency (tenant_id,idempotency_key), UNIQUE KEY uk_ll_outbound_dispatch (tenant_id,dispatch_order_id),
KEY idx_ll_outbound_list (tenant_id,status,created_at)
) ENGINE=InnoDB COMMENT='Outbound document generated from a dispatch';
CREATE TABLE IF NOT EXISTS ll_outbound_pallet_item (
id BIGINT NOT NULL COMMENT 'Snowflake ID', tenant_id VARCHAR(128) NOT NULL, outbound_order_id BIGINT NOT NULL,
warehouse_pallet_id BIGINT NOT NULL, pallet_no VARCHAR(128) NOT NULL,
destination_warehouse_id VARCHAR(128) NULL, destination_warehouse_code VARCHAR(128) NULL, destination_warehouse_name VARCHAR(255) NULL,
package_count INT NOT NULL DEFAULT 0, order_refs VARCHAR(2000) NULL, inbound_code VARCHAR(128) NULL,
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), PRIMARY KEY (id),
UNIQUE KEY uk_ll_outbound_pallet (tenant_id,outbound_order_id,warehouse_pallet_id),
KEY idx_ll_outbound_pallet_list (tenant_id,outbound_order_id), KEY idx_ll_outbound_pallet_destination (tenant_id,destination_warehouse_code)
) ENGINE=InnoDB COMMENT='Pallet detail snapshot for an outbound document';
CREATE TABLE IF NOT EXISTS ll_delivery_order (
id BIGINT NOT NULL COMMENT 'Snowflake ID', tenant_id VARCHAR(128) NOT NULL,
delivery_no VARCHAR(64) NOT NULL, outbound_order_id BIGINT NOT NULL, outbound_no VARCHAR(64) NOT NULL,
dispatch_order_id BIGINT NOT NULL, dispatch_no VARCHAR(64) NOT NULL, overseas_warehouse_id VARCHAR(128) NULL,
status VARCHAR(32) NOT NULL DEFAULT 'WAIT_DELIVERY', package_count INT NOT NULL DEFAULT 0, pallet_count INT NOT NULL DEFAULT 0,
idempotency_key VARCHAR(255) NOT NULL, created_by VARCHAR(128) NULL,
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
PRIMARY KEY (id), UNIQUE KEY uk_ll_delivery_no (tenant_id,delivery_no),
UNIQUE KEY uk_ll_delivery_idempotency (tenant_id,idempotency_key), UNIQUE KEY uk_ll_delivery_outbound (tenant_id,outbound_order_id),
KEY idx_ll_delivery_list (tenant_id,status,created_at)
) ENGINE=InnoDB COMMENT='Delivery document linked to an outbound document';
-- Customer relabel application: header, item snapshots, and immutable process history.
CREATE TABLE IF NOT EXISTS ll_relabel_application (
id BIGINT NOT NULL COMMENT 'Snowflake ID',
tenant_id VARCHAR(128) NOT NULL,
relabel_no VARCHAR(64) NOT NULL,
lastleg_order_id BIGINT NOT NULL,
customer_order_no VARCHAR(128) NOT NULL,
overseas_warehouse_id VARCHAR(128) NOT NULL,
label_deadline DATETIME(3) NOT NULL,
contact_name VARCHAR(128) NOT NULL,
contact_phone VARCHAR(64) NOT NULL,
remark VARCHAR(1000) NULL,
status VARCHAR(32) NOT NULL DEFAULT 'PENDING_PROCESSING',
item_count INT NOT NULL DEFAULT 0,
total_package_count INT NOT NULL DEFAULT 0,
notified_package_count INT NOT NULL DEFAULT 0,
idempotency_key VARCHAR(255) NOT NULL,
request_hash CHAR(64) NOT NULL,
created_by VARCHAR(128) NULL,
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
PRIMARY KEY (id),
UNIQUE KEY uk_ll_relabel_application_no (tenant_id,relabel_no),
UNIQUE KEY uk_ll_relabel_application_idempotency (tenant_id,idempotency_key),
UNIQUE KEY uk_ll_relabel_application_order (lastleg_order_id),
KEY idx_ll_relabel_application_list (tenant_id,status,created_at),
KEY idx_ll_relabel_application_customer (tenant_id,customer_order_no),
KEY idx_ll_relabel_application_warehouse (tenant_id,overseas_warehouse_id)
) ENGINE=InnoDB COMMENT='Customer relabel application header';
CREATE TABLE IF NOT EXISTS ll_relabel_item (
id BIGINT NOT NULL COMMENT 'Snowflake ID',
application_id BIGINT NOT NULL,
tenant_id VARCHAR(128) NOT NULL,
sku_code VARCHAR(128) NOT NULL,
product_image_file_id VARCHAR(128) NULL,
product_image_file_name VARCHAR(255) NULL,
product_image_url VARCHAR(1000) NULL,
product_name_zh VARCHAR(255) NOT NULL,
total_package_count INT NOT NULL,
notified_package_count INT NOT NULL,
shipment_no VARCHAR(128) NOT NULL,
tracking_code VARCHAR(255) NULL,
new_sku_code VARCHAR(128) NOT NULL,
label_requirement VARCHAR(1000) NULL,
relabel_file_id VARCHAR(128) NULL,
relabel_file_name VARCHAR(255) NULL,
relabel_file_url VARCHAR(1000) NULL,
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
PRIMARY KEY (id),
KEY idx_ll_relabel_item_application (tenant_id,application_id),
KEY idx_ll_relabel_item_sku (tenant_id,sku_code)
) ENGINE=InnoDB COMMENT='Frozen customer relabel cargo items';
CREATE TABLE IF NOT EXISTS ll_relabel_status_history (
id BIGINT NOT NULL COMMENT 'Snowflake ID',
tenant_id VARCHAR(128) NOT NULL,
application_id BIGINT NOT NULL,
from_status VARCHAR(32) NULL,
to_status VARCHAR(32) NOT NULL,
operator_id VARCHAR(128) NULL,
remark VARCHAR(1000) NULL,
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
PRIMARY KEY (id),
KEY idx_ll_relabel_status_history_application (tenant_id,application_id,created_at)
) ENGINE=InnoDB COMMENT='Immutable customer relabel process history';