feat(wcs): coordinate and persist traffic decisions
This commit is contained in:
297
sql/wcs/V002__wcs_topology_and_traffic.sql
Normal file
297
sql/wcs/V002__wcs_topology_and_traffic.sql
Normal file
@@ -0,0 +1,297 @@
|
||||
SET XACT_ABORT ON;
|
||||
BEGIN TRANSACTION;
|
||||
|
||||
IF OBJECT_ID('dbo.wcs_warehouse', 'U') IS NULL
|
||||
BEGIN
|
||||
CREATE TABLE dbo.wcs_warehouse (
|
||||
warehouse_code varchar(64) NOT NULL PRIMARY KEY,
|
||||
warehouse_name nvarchar(128) NOT NULL,
|
||||
active_configuration_version bigint NULL,
|
||||
state_version bigint NOT NULL CONSTRAINT df_wcs_warehouse_state_version DEFAULT (0)
|
||||
);
|
||||
END;
|
||||
|
||||
IF OBJECT_ID('dbo.wcs_floor', 'U') IS NULL
|
||||
BEGIN
|
||||
CREATE TABLE dbo.wcs_floor (
|
||||
floor_id varchar(64) NOT NULL PRIMARY KEY,
|
||||
warehouse_code varchar(64) NOT NULL,
|
||||
floor_code varchar(64) NOT NULL,
|
||||
floor_level int NOT NULL,
|
||||
CONSTRAINT fk_wcs_floor_warehouse FOREIGN KEY (warehouse_code)
|
||||
REFERENCES dbo.wcs_warehouse(warehouse_code),
|
||||
CONSTRAINT uk_wcs_floor_code UNIQUE (warehouse_code, floor_code),
|
||||
CONSTRAINT uk_wcs_floor_level UNIQUE (warehouse_code, floor_level)
|
||||
);
|
||||
END;
|
||||
|
||||
IF OBJECT_ID('dbo.wcs_topology_version', 'U') IS NULL
|
||||
BEGIN
|
||||
CREATE TABLE dbo.wcs_topology_version (
|
||||
warehouse_code varchar(64) NOT NULL,
|
||||
topology_version bigint NOT NULL,
|
||||
publication_state varchar(32) NOT NULL,
|
||||
published_time datetime2(3) NULL,
|
||||
snapshot_version bigint NOT NULL
|
||||
CONSTRAINT df_wcs_topology_snapshot_version DEFAULT (0),
|
||||
CONSTRAINT pk_wcs_topology_version PRIMARY KEY (
|
||||
warehouse_code, topology_version),
|
||||
CONSTRAINT fk_wcs_topology_version_warehouse FOREIGN KEY (warehouse_code)
|
||||
REFERENCES dbo.wcs_warehouse(warehouse_code)
|
||||
);
|
||||
END;
|
||||
|
||||
IF OBJECT_ID('dbo.wcs_topology_node', 'U') IS NULL
|
||||
BEGIN
|
||||
CREATE TABLE dbo.wcs_topology_node (
|
||||
warehouse_code varchar(64) NOT NULL,
|
||||
topology_version bigint NOT NULL,
|
||||
node_id varchar(128) NOT NULL,
|
||||
floor_id varchar(64) NOT NULL,
|
||||
coordinate_x int NOT NULL,
|
||||
coordinate_y int NOT NULL,
|
||||
capacity int NOT NULL,
|
||||
safe_wait_flag bit NOT NULL CONSTRAINT df_wcs_node_safe_wait DEFAULT (0),
|
||||
safe_yield_flag bit NOT NULL CONSTRAINT df_wcs_node_safe_yield DEFAULT (0),
|
||||
CONSTRAINT pk_wcs_topology_node PRIMARY KEY (
|
||||
warehouse_code, topology_version, node_id),
|
||||
CONSTRAINT fk_wcs_topology_node_version FOREIGN KEY (
|
||||
warehouse_code, topology_version)
|
||||
REFERENCES dbo.wcs_topology_version(warehouse_code, topology_version),
|
||||
CONSTRAINT fk_wcs_topology_node_floor FOREIGN KEY (floor_id)
|
||||
REFERENCES dbo.wcs_floor(floor_id),
|
||||
CONSTRAINT ck_wcs_topology_node_capacity CHECK (capacity > 0),
|
||||
CONSTRAINT uk_wcs_topology_node_coordinate UNIQUE (
|
||||
warehouse_code, topology_version, floor_id, coordinate_x, coordinate_y)
|
||||
);
|
||||
END;
|
||||
|
||||
IF OBJECT_ID('dbo.wcs_topology_edge', 'U') IS NULL
|
||||
BEGIN
|
||||
CREATE TABLE dbo.wcs_topology_edge (
|
||||
warehouse_code varchar(64) NOT NULL,
|
||||
topology_version bigint NOT NULL,
|
||||
resource_key varchar(320) NOT NULL,
|
||||
source_node_id varchar(128) NOT NULL,
|
||||
target_node_id varchar(128) NOT NULL,
|
||||
distance_cost int NOT NULL,
|
||||
capacity int NOT NULL,
|
||||
CONSTRAINT pk_wcs_topology_edge PRIMARY KEY (
|
||||
warehouse_code, topology_version, resource_key),
|
||||
CONSTRAINT fk_wcs_topology_edge_version FOREIGN KEY (
|
||||
warehouse_code, topology_version)
|
||||
REFERENCES dbo.wcs_topology_version(warehouse_code, topology_version),
|
||||
CONSTRAINT ck_wcs_topology_edge_distance CHECK (distance_cost >= 0),
|
||||
CONSTRAINT ck_wcs_topology_edge_capacity CHECK (capacity > 0),
|
||||
CONSTRAINT ck_wcs_topology_edge_direction CHECK (
|
||||
source_node_id <> target_node_id)
|
||||
);
|
||||
END;
|
||||
|
||||
IF OBJECT_ID('dbo.wcs_traffic_zone', 'U') IS NULL
|
||||
BEGIN
|
||||
CREATE TABLE dbo.wcs_traffic_zone (
|
||||
warehouse_code varchar(64) NOT NULL,
|
||||
topology_version bigint NOT NULL,
|
||||
zone_id varchar(128) NOT NULL,
|
||||
zone_name nvarchar(128) NOT NULL,
|
||||
coordination_mode varchar(32) NOT NULL,
|
||||
CONSTRAINT pk_wcs_traffic_zone PRIMARY KEY (
|
||||
warehouse_code, topology_version, zone_id),
|
||||
CONSTRAINT fk_wcs_traffic_zone_version FOREIGN KEY (
|
||||
warehouse_code, topology_version)
|
||||
REFERENCES dbo.wcs_topology_version(warehouse_code, topology_version)
|
||||
);
|
||||
END;
|
||||
|
||||
IF OBJECT_ID('dbo.wcs_resource_definition', 'U') IS NULL
|
||||
BEGIN
|
||||
CREATE TABLE dbo.wcs_resource_definition (
|
||||
resource_key varchar(320) NOT NULL,
|
||||
warehouse_code varchar(64) NOT NULL,
|
||||
topology_version bigint NOT NULL,
|
||||
resource_type varchar(32) NOT NULL,
|
||||
capacity int NOT NULL,
|
||||
zone_id varchar(128) NULL,
|
||||
CONSTRAINT pk_wcs_resource_definition PRIMARY KEY (
|
||||
warehouse_code, topology_version, resource_key),
|
||||
CONSTRAINT fk_wcs_resource_definition_version FOREIGN KEY (
|
||||
warehouse_code, topology_version)
|
||||
REFERENCES dbo.wcs_topology_version(warehouse_code, topology_version),
|
||||
CONSTRAINT ck_wcs_resource_definition_capacity CHECK (capacity > 0)
|
||||
);
|
||||
END;
|
||||
|
||||
IF OBJECT_ID('dbo.wcs_device', 'U') IS NULL
|
||||
BEGIN
|
||||
CREATE TABLE dbo.wcs_device (
|
||||
warehouse_code varchar(64) NOT NULL,
|
||||
topology_version bigint NOT NULL,
|
||||
device_id varchar(64) NOT NULL,
|
||||
device_type varchar(32) NOT NULL,
|
||||
floor_id varchar(64) NULL,
|
||||
enabled_flag bit NOT NULL CONSTRAINT df_wcs_device_enabled DEFAULT (1),
|
||||
CONSTRAINT pk_wcs_device PRIMARY KEY (
|
||||
warehouse_code, topology_version, device_id),
|
||||
CONSTRAINT fk_wcs_device_version FOREIGN KEY (
|
||||
warehouse_code, topology_version)
|
||||
REFERENCES dbo.wcs_topology_version(warehouse_code, topology_version),
|
||||
CONSTRAINT fk_wcs_device_floor FOREIGN KEY (floor_id)
|
||||
REFERENCES dbo.wcs_floor(floor_id)
|
||||
);
|
||||
END;
|
||||
|
||||
IF OBJECT_ID('dbo.wcs_device_capability', 'U') IS NULL
|
||||
BEGIN
|
||||
CREATE TABLE dbo.wcs_device_capability (
|
||||
warehouse_code varchar(64) NOT NULL,
|
||||
topology_version bigint NOT NULL,
|
||||
device_id varchar(64) NOT NULL,
|
||||
capability_code varchar(64) NOT NULL,
|
||||
CONSTRAINT pk_wcs_device_capability PRIMARY KEY (
|
||||
warehouse_code, topology_version, device_id, capability_code),
|
||||
CONSTRAINT fk_wcs_device_capability_device FOREIGN KEY (
|
||||
warehouse_code, topology_version, device_id)
|
||||
REFERENCES dbo.wcs_device(warehouse_code, topology_version, device_id)
|
||||
);
|
||||
END;
|
||||
|
||||
IF OBJECT_ID('dbo.wcs_device_port', 'U') IS NULL
|
||||
BEGIN
|
||||
CREATE TABLE dbo.wcs_device_port (
|
||||
warehouse_code varchar(64) NOT NULL,
|
||||
topology_version bigint NOT NULL,
|
||||
port_id varchar(64) NOT NULL,
|
||||
device_id varchar(64) NOT NULL,
|
||||
node_id varchar(128) NOT NULL,
|
||||
port_role varchar(32) NOT NULL,
|
||||
CONSTRAINT pk_wcs_device_port PRIMARY KEY (
|
||||
warehouse_code, topology_version, port_id),
|
||||
CONSTRAINT fk_wcs_device_port_device FOREIGN KEY (
|
||||
warehouse_code, topology_version, device_id)
|
||||
REFERENCES dbo.wcs_device(warehouse_code, topology_version, device_id)
|
||||
);
|
||||
END;
|
||||
|
||||
IF OBJECT_ID('dbo.wcs_charger', 'U') IS NULL
|
||||
BEGIN
|
||||
CREATE TABLE dbo.wcs_charger (
|
||||
warehouse_code varchar(64) NOT NULL,
|
||||
topology_version bigint NOT NULL,
|
||||
charger_id varchar(64) NOT NULL,
|
||||
node_id varchar(128) NOT NULL,
|
||||
enabled_flag bit NOT NULL CONSTRAINT df_wcs_charger_enabled DEFAULT (1),
|
||||
CONSTRAINT pk_wcs_charger PRIMARY KEY (
|
||||
warehouse_code, topology_version, charger_id),
|
||||
CONSTRAINT fk_wcs_charger_version FOREIGN KEY (
|
||||
warehouse_code, topology_version)
|
||||
REFERENCES dbo.wcs_topology_version(warehouse_code, topology_version)
|
||||
);
|
||||
END;
|
||||
|
||||
IF OBJECT_ID('dbo.wcs_vehicle_assignment', 'U') IS NULL
|
||||
BEGIN
|
||||
CREATE TABLE dbo.wcs_vehicle_assignment (
|
||||
assignment_id varchar(128) NOT NULL PRIMARY KEY,
|
||||
warehouse_code varchar(64) NOT NULL,
|
||||
topology_version bigint NOT NULL,
|
||||
snapshot_version bigint NOT NULL,
|
||||
order_id varchar(64) NOT NULL,
|
||||
step_id varchar(128) NOT NULL,
|
||||
vehicle_id varchar(64) NOT NULL,
|
||||
fencing_token bigint NOT NULL,
|
||||
assignment_state varchar(32) NOT NULL,
|
||||
created_time datetime2(3) NOT NULL,
|
||||
CONSTRAINT uk_wcs_vehicle_assignment_step UNIQUE (step_id),
|
||||
CONSTRAINT ck_wcs_vehicle_assignment_fencing CHECK (fencing_token > 0)
|
||||
);
|
||||
END;
|
||||
|
||||
IF OBJECT_ID('dbo.wcs_route_plan', 'U') IS NULL
|
||||
BEGIN
|
||||
CREATE TABLE dbo.wcs_route_plan (
|
||||
route_plan_id varchar(128) NOT NULL PRIMARY KEY,
|
||||
assignment_id varchar(128) NOT NULL,
|
||||
warehouse_code varchar(64) NOT NULL,
|
||||
topology_version bigint NOT NULL,
|
||||
node_path_json nvarchar(max) NOT NULL,
|
||||
resource_path_json nvarchar(max) NOT NULL,
|
||||
distance_cost int NOT NULL,
|
||||
turn_count int NOT NULL,
|
||||
route_state varchar(32) NOT NULL,
|
||||
created_time datetime2(3) NOT NULL,
|
||||
CONSTRAINT fk_wcs_route_plan_assignment FOREIGN KEY (assignment_id)
|
||||
REFERENCES dbo.wcs_vehicle_assignment(assignment_id),
|
||||
CONSTRAINT uk_wcs_route_plan_assignment UNIQUE (assignment_id),
|
||||
CONSTRAINT ck_wcs_route_plan_distance CHECK (distance_cost >= 0),
|
||||
CONSTRAINT ck_wcs_route_plan_turns CHECK (turn_count >= 0)
|
||||
);
|
||||
END;
|
||||
|
||||
IF OBJECT_ID('dbo.wcs_resource_state', 'U') IS NULL
|
||||
BEGIN
|
||||
CREATE TABLE dbo.wcs_resource_state (
|
||||
warehouse_code varchar(64) NOT NULL,
|
||||
topology_version bigint NOT NULL,
|
||||
resource_key varchar(320) NOT NULL,
|
||||
capacity int NOT NULL,
|
||||
reserved_count int NOT NULL,
|
||||
occupied_count int NOT NULL,
|
||||
fencing_token bigint NOT NULL,
|
||||
state_version bigint NOT NULL,
|
||||
CONSTRAINT pk_wcs_resource_state PRIMARY KEY (
|
||||
warehouse_code, topology_version, resource_key),
|
||||
CONSTRAINT fk_wcs_resource_state_definition FOREIGN KEY (
|
||||
warehouse_code, topology_version, resource_key)
|
||||
REFERENCES dbo.wcs_resource_definition(
|
||||
warehouse_code, topology_version, resource_key),
|
||||
CONSTRAINT ck_wcs_resource_state_counts CHECK (
|
||||
capacity > 0 AND reserved_count >= 0 AND occupied_count >= 0
|
||||
AND reserved_count + occupied_count <= capacity),
|
||||
CONSTRAINT ck_wcs_resource_state_fencing CHECK (fencing_token >= 0),
|
||||
CONSTRAINT ck_wcs_resource_state_version CHECK (state_version >= 0)
|
||||
);
|
||||
END;
|
||||
|
||||
IF OBJECT_ID('dbo.wcs_resource_reservation', 'U') IS NULL
|
||||
BEGIN
|
||||
CREATE TABLE dbo.wcs_resource_reservation (
|
||||
reservation_id varchar(128) NOT NULL,
|
||||
warehouse_code varchar(64) NOT NULL,
|
||||
topology_version bigint NOT NULL,
|
||||
resource_key varchar(320) NOT NULL,
|
||||
order_id varchar(64) NOT NULL,
|
||||
step_id varchar(128) NOT NULL,
|
||||
vehicle_id varchar(64) NOT NULL,
|
||||
reservation_state varchar(32) NOT NULL,
|
||||
fencing_token bigint NOT NULL,
|
||||
release_evidence_id varchar(128) NULL,
|
||||
created_time datetime2(3) NOT NULL,
|
||||
updated_time datetime2(3) NOT NULL,
|
||||
CONSTRAINT pk_wcs_resource_reservation PRIMARY KEY (
|
||||
reservation_id, resource_key),
|
||||
CONSTRAINT fk_wcs_resource_reservation_state FOREIGN KEY (
|
||||
warehouse_code, topology_version, resource_key)
|
||||
REFERENCES dbo.wcs_resource_state(
|
||||
warehouse_code, topology_version, resource_key),
|
||||
CONSTRAINT ck_wcs_resource_reservation_fencing CHECK (fencing_token > 0)
|
||||
);
|
||||
END;
|
||||
|
||||
IF OBJECT_ID('dbo.wcs_traffic_decision_event', 'U') IS NULL
|
||||
BEGIN
|
||||
CREATE TABLE dbo.wcs_traffic_decision_event (
|
||||
event_id varchar(128) NOT NULL PRIMARY KEY,
|
||||
warehouse_code varchar(64) NOT NULL,
|
||||
topology_version bigint NOT NULL,
|
||||
snapshot_version bigint NOT NULL,
|
||||
order_id varchar(64) NOT NULL,
|
||||
step_id varchar(128) NOT NULL,
|
||||
vehicle_id varchar(64) NULL,
|
||||
decision_type varchar(16) NOT NULL,
|
||||
reason_code varchar(128) NOT NULL,
|
||||
occurred_time datetime2(3) NOT NULL
|
||||
);
|
||||
END;
|
||||
|
||||
COMMIT TRANSACTION;
|
||||
32
sql/wcs/verify_V002__wcs_topology_and_traffic.sql
Normal file
32
sql/wcs/verify_V002__wcs_topology_and_traffic.sql
Normal file
@@ -0,0 +1,32 @@
|
||||
SET NOCOUNT ON;
|
||||
|
||||
SELECT name AS table_name
|
||||
FROM sys.tables
|
||||
WHERE name IN (
|
||||
'wcs_warehouse',
|
||||
'wcs_floor',
|
||||
'wcs_topology_version',
|
||||
'wcs_topology_node',
|
||||
'wcs_topology_edge',
|
||||
'wcs_traffic_zone',
|
||||
'wcs_resource_definition',
|
||||
'wcs_device',
|
||||
'wcs_device_capability',
|
||||
'wcs_device_port',
|
||||
'wcs_charger',
|
||||
'wcs_vehicle_assignment',
|
||||
'wcs_route_plan',
|
||||
'wcs_resource_state',
|
||||
'wcs_resource_reservation',
|
||||
'wcs_traffic_decision_event'
|
||||
)
|
||||
ORDER BY name;
|
||||
|
||||
SELECT c.name AS constraint_name
|
||||
FROM sys.check_constraints c
|
||||
WHERE c.name IN (
|
||||
'ck_wcs_resource_definition_capacity',
|
||||
'ck_wcs_resource_state_counts',
|
||||
'ck_wcs_resource_reservation_fencing'
|
||||
)
|
||||
ORDER BY c.name;
|
||||
Reference in New Issue
Block a user