派车提交
This commit is contained in:
@@ -495,6 +495,44 @@ CREATE TABLE IF NOT EXISTS ll_inbound_pallet_merge (
|
||||
KEY idx_ll_inbound_merge_task (tenant_id, task_id), KEY idx_ll_inbound_merge_group (merge_group_no)
|
||||
) ENGINE=InnoDB;
|
||||
|
||||
SET @ddl = (SELECT IF(EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema=DATABASE() AND table_name='ll_inbound_plan_line' AND column_name='fba_warehouse_code'), 'SELECT 1', 'ALTER TABLE ll_inbound_plan_line ADD COLUMN fba_warehouse_code VARCHAR(128) NULL AFTER inbound_code'));
|
||||
PREPARE inbound_schema_stmt FROM @ddl; EXECUTE inbound_schema_stmt; DEALLOCATE PREPARE inbound_schema_stmt;
|
||||
UPDATE ll_inbound_plan_line l JOIN ll_order o ON o.id=l.order_id
|
||||
SET l.fba_warehouse_code=o.fba_warehouse_code
|
||||
WHERE l.fba_warehouse_code IS NULL AND o.fba_warehouse_code IS NOT NULL;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS ll_inbound_fba_appointment (
|
||||
id BIGINT NOT NULL COMMENT 'Snowflake ID',
|
||||
tenant_id VARCHAR(128) NOT NULL,
|
||||
appointment_no VARCHAR(64) NOT NULL,
|
||||
appointment_at DATETIME(3) NOT NULL,
|
||||
appointment_status VARCHAR(32) NOT NULL DEFAULT 'PENDING',
|
||||
appointment_remark VARCHAR(1000) NULL,
|
||||
fba_warehouse_code VARCHAR(128) NOT NULL,
|
||||
selected_count INT NOT NULL DEFAULT 0,
|
||||
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_fba_appointment_no (tenant_id, appointment_no),
|
||||
KEY idx_ll_fba_appointment_list (tenant_id, appointment_status, fba_warehouse_code, created_at)
|
||||
) ENGINE=InnoDB COMMENT='Batch FBA appointment';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS ll_inbound_fba_appointment_item (
|
||||
id BIGINT NOT NULL COMMENT 'Snowflake ID',
|
||||
appointment_id BIGINT NOT NULL,
|
||||
plan_id BIGINT NOT NULL,
|
||||
line_id BIGINT NOT NULL,
|
||||
order_id BIGINT NOT NULL,
|
||||
inbound_code VARCHAR(128) NOT NULL,
|
||||
fba_warehouse_code VARCHAR(128) NOT NULL,
|
||||
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||||
PRIMARY KEY (id),
|
||||
UNIQUE KEY uk_ll_fba_appointment_item_line (appointment_id, line_id),
|
||||
KEY idx_ll_fba_appointment_item_plan (plan_id),
|
||||
KEY idx_ll_fba_appointment_item_order (order_id)
|
||||
) ENGINE=InnoDB COMMENT='FBA appointment line snapshot';
|
||||
|
||||
ALTER TABLE ll_loading_order_status_history
|
||||
MODIFY COLUMN id BIGINT NOT NULL AUTO_INCREMENT COMMENT '状态历史主键',
|
||||
MODIFY COLUMN order_id BIGINT NOT NULL COMMENT '尾程订单 ID',
|
||||
@@ -503,3 +541,198 @@ ALTER TABLE ll_loading_order_status_history
|
||||
MODIFY COLUMN event_id VARCHAR(128) NULL COMMENT '触发事件 ID',
|
||||
MODIFY COLUMN remark VARCHAR(500) NULL COMMENT '状态变更备注',
|
||||
MODIFY COLUMN created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '记录时间';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS ll_inventory_balance (
|
||||
id BIGINT NOT NULL COMMENT 'Snowflake ID',
|
||||
tenant_id VARCHAR(128) NOT NULL COMMENT 'Customer tenant', customer_name VARCHAR(255) NULL COMMENT 'Customer name snapshot',
|
||||
overseas_warehouse_id VARCHAR(128) NOT NULL COMMENT 'Actual overseas warehouse ID',
|
||||
overseas_warehouse_code VARCHAR(128) NULL COMMENT 'Actual overseas warehouse code snapshot',
|
||||
overseas_warehouse_name VARCHAR(255) NULL COMMENT 'Actual overseas warehouse name snapshot',
|
||||
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',
|
||||
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),
|
||||
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';
|
||||
|
||||
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,
|
||||
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,
|
||||
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';
|
||||
|
||||
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,
|
||||
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,
|
||||
inbound_order_no VARCHAR(128) NULL, outbound_order_no VARCHAR(128) NULL,
|
||||
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_business (tenant_id,business_type,business_order_no)
|
||||
) ENGINE=InnoDB COMMENT='Immutable inventory package and quantity ledger';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS ll_inventory_operation (
|
||||
id BIGINT NOT NULL COMMENT 'Snowflake ID', tenant_id VARCHAR(128) NOT NULL,
|
||||
idempotency_key VARCHAR(255) NOT NULL, operation_type VARCHAR(32) NOT NULL,
|
||||
request_hash VARCHAR(128) NOT NULL, status VARCHAR(32) NOT NULL DEFAULT 'PROCESSING',
|
||||
result_json LONGTEXT NULL, last_error VARCHAR(2000) 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_inventory_operation_key (tenant_id,idempotency_key),
|
||||
KEY idx_ll_inventory_operation_status (tenant_id,status,updated_at)
|
||||
) ENGINE=InnoDB COMMENT='Inventory command idempotency record';
|
||||
|
||||
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,
|
||||
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),
|
||||
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';
|
||||
|
||||
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',
|
||||
vehicle_plate VARCHAR(64) NULL COMMENT 'Editable vehicle plate; required before PDA picking',
|
||||
driver_name VARCHAR(128) NULL,
|
||||
driver_phone VARCHAR(64) NULL,
|
||||
carrier_name VARCHAR(255) NULL,
|
||||
route VARCHAR(255) NULL,
|
||||
depart_at DATETIME(3) NULL,
|
||||
fba_appointment_no VARCHAR(64) NULL,
|
||||
fba_appointment_status VARCHAR(32) NOT NULL DEFAULT 'PENDING',
|
||||
vehicle_appointment_status VARCHAR(32) NOT NULL DEFAULT 'PENDING',
|
||||
estimated_arrival_at DATETIME(3) NULL,
|
||||
status VARCHAR(32) NOT NULL DEFAULT 'PENDING_DEPARTURE',
|
||||
item_count INT NOT NULL DEFAULT 0,
|
||||
pallet_count INT NOT NULL DEFAULT 0,
|
||||
package_count INT NOT NULL DEFAULT 0,
|
||||
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_dispatch_order_no (tenant_id,dispatch_no),
|
||||
KEY idx_ll_dispatch_order_list (tenant_id,status,depart_at),
|
||||
KEY idx_ll_dispatch_order_vehicle (tenant_id,vehicle_plate)
|
||||
) ENGINE=InnoDB COMMENT='Last-leg pre-dispatch order';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS ll_dispatch_item (
|
||||
id BIGINT NOT NULL COMMENT 'Snowflake ID',
|
||||
dispatch_order_id BIGINT NOT NULL,
|
||||
tenant_id VARCHAR(128) NOT NULL,
|
||||
plan_id BIGINT NULL,
|
||||
plan_pallet_id BIGINT NULL,
|
||||
warehouse_pallet_id BIGINT NULL,
|
||||
order_id BIGINT NULL,
|
||||
order_no VARCHAR(64) NULL,
|
||||
order_refs VARCHAR(2000) NULL,
|
||||
inbound_code VARCHAR(128) 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,
|
||||
fba_warehouse_code VARCHAR(128) NULL,
|
||||
package_count INT NOT NULL DEFAULT 0,
|
||||
volume_cbm DECIMAL(18,4) NOT NULL DEFAULT 0,
|
||||
source_stage VARCHAR(32) NOT NULL COMMENT 'PLAN or RECEIVED',
|
||||
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||||
PRIMARY KEY (id),
|
||||
UNIQUE KEY uk_ll_dispatch_item_source (dispatch_order_id,plan_pallet_id,warehouse_pallet_id),
|
||||
KEY idx_ll_dispatch_item_order (tenant_id,order_id),
|
||||
KEY idx_ll_dispatch_item_inbound (tenant_id,inbound_code),
|
||||
KEY idx_ll_dispatch_item_pallet (tenant_id,plan_pallet_id,warehouse_pallet_id)
|
||||
) ENGINE=InnoDB COMMENT='Frozen pallet and cargo snapshot for a dispatch order';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS ll_dispatch_pallet_lock (
|
||||
id BIGINT NOT NULL COMMENT 'Snowflake ID',
|
||||
tenant_id VARCHAR(128) NOT NULL,
|
||||
source_pallet_key VARCHAR(160) NOT NULL COMMENT 'PLAN:{planPalletId} or RECEIVED:{warehousePalletId}',
|
||||
active_key VARCHAR(160) NULL COMMENT 'Equals source key only while lock is active',
|
||||
plan_id BIGINT NULL,
|
||||
plan_pallet_id BIGINT NULL,
|
||||
warehouse_pallet_id BIGINT NULL,
|
||||
dispatch_order_id BIGINT NOT NULL,
|
||||
status VARCHAR(32) NOT NULL DEFAULT 'ACTIVE',
|
||||
locked_at DATETIME(3) NOT NULL,
|
||||
released_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),
|
||||
PRIMARY KEY (id),
|
||||
UNIQUE KEY uk_ll_dispatch_active_pallet (tenant_id,active_key),
|
||||
KEY idx_ll_dispatch_pallet_lock_order (tenant_id,dispatch_order_id,status),
|
||||
KEY idx_ll_dispatch_pallet_lock_source (tenant_id,source_pallet_key,status)
|
||||
) ENGINE=InnoDB COMMENT='Active dispatch pallet exclusion lock';
|
||||
|
||||
SET @ddl = (SELECT IF(EXISTS (SELECT 1 FROM information_schema.columns WHERE table_schema=DATABASE() AND table_name='ll_dispatch_item' AND column_name='order_refs'), 'SELECT 1', 'ALTER TABLE ll_dispatch_item ADD COLUMN order_refs VARCHAR(2000) NULL AFTER order_no'));
|
||||
PREPARE dispatch_schema_stmt FROM @ddl; EXECUTE dispatch_schema_stmt; DEALLOCATE PREPARE dispatch_schema_stmt;
|
||||
|
||||
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,
|
||||
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),
|
||||
PRIMARY KEY (id), UNIQUE KEY uk_ll_dispatch_pda_task_dispatch (tenant_id,dispatch_order_id),
|
||||
UNIQUE KEY uk_ll_dispatch_pda_task_no (tenant_id,task_no)
|
||||
) ENGINE=InnoDB COMMENT='PDA task for a pre-arranged dispatch';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS ll_dispatch_pda_pick (
|
||||
id BIGINT NOT NULL, tenant_id VARCHAR(128) NOT NULL, task_id BIGINT NOT NULL,
|
||||
dispatch_item_id BIGINT NOT NULL, inventory_position_id BIGINT NOT NULL,
|
||||
packages BIGINT NOT NULL, product_quantity BIGINT NOT NULL DEFAULT 0, idempotency_key VARCHAR(255) NOT NULL,
|
||||
picked_at DATETIME(3) NOT NULL, created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
||||
PRIMARY KEY (id), UNIQUE KEY uk_ll_dispatch_pda_pick_key (tenant_id,idempotency_key),
|
||||
KEY idx_ll_dispatch_pda_pick_item (tenant_id,task_id,dispatch_item_id)
|
||||
) ENGINE=InnoDB COMMENT='Immutable dispatch PDA pallet package picks';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS ll_dispatch_pda_operation (
|
||||
id BIGINT NOT NULL, tenant_id VARCHAR(128) NOT NULL, task_id BIGINT NULL,
|
||||
operation_type VARCHAR(32) NOT NULL, idempotency_key VARCHAR(255) NOT NULL, request_hash CHAR(64) NOT NULL,
|
||||
result_json LONGTEXT NULL, status VARCHAR(32) NOT 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_dispatch_pda_operation_key (tenant_id,idempotency_key)
|
||||
) ENGINE=InnoDB COMMENT='Idempotent dispatch PDA operations';
|
||||
|
||||
Reference in New Issue
Block a user