feat: add algorithm core for shadow observation

This commit is contained in:
zgw
2026-08-11 16:59:43 +08:00
parent 9480882752
commit 86fc240b84
99 changed files with 65211 additions and 0 deletions

View File

@@ -0,0 +1,224 @@
/* Read-only validation queries for a SQL Server 2016 installation. */
SET NOCOUNT ON;
SELECT CAST(SERVERPROPERTY('ProductVersion') AS varchar(30)) AS product_version,
DB_NAME() AS database_name;
SELECT o.type_desc, COUNT(*) AS object_count
FROM sys.objects o
JOIN sys.schemas s ON s.schema_id = o.schema_id
WHERE s.name = N'alg' AND o.type IN ('U', 'V', 'P')
GROUP BY o.type_desc
ORDER BY o.type_desc;
SELECT installed.object_kind, installed.object_name
FROM (
SELECT o.type_desc AS object_kind, o.name AS object_name
FROM sys.objects o
JOIN sys.schemas s ON s.schema_id = o.schema_id
WHERE s.name = N'alg' AND o.type IN ('U', 'V', 'P')
UNION ALL
SELECT 'INDEX' AS object_kind, i.name AS object_name
FROM sys.indexes i
JOIN sys.objects o ON o.object_id = i.object_id
JOIN sys.schemas s ON s.schema_id = o.schema_id
WHERE s.name = N'alg' AND i.name IS NOT NULL
) installed
ORDER BY installed.object_kind, installed.object_name;
SELECT warehouse_id,
COUNT_BIG(*) AS excluded_from_algorithm_topology_count,
SUM(CASE WHEN group_coding_no IS NULL OR LTRIM(RTRIM(group_coding_no)) = ''
THEN 1 ELSE 0 END) AS missing_lane_code_count,
SUM(CASE WHEN TRY_CONVERT(int, group_coding) IS NULL
THEN 1 ELSE 0 END) AS invalid_depth_count
FROM dbo.bas_cargo_space
WHERE group_coding_no IS NULL OR LTRIM(RTRIM(group_coding_no)) = ''
OR TRY_CONVERT(int, group_coding) IS NULL
GROUP BY warehouse_id
ORDER BY warehouse_id;
SELECT warehouse_id,
COUNT(*) AS space_state_count,
SUM(CASE WHEN space_status = 2 THEN 1 ELSE 0 END) AS full_space_count,
SUM(CASE WHEN inbound_available = 1 THEN 1 ELSE 0 END) AS inbound_available_count,
SUM(CASE WHEN pending_outbound = 1 THEN 1 ELSE 0 END) AS pending_outbound_space_count,
SUM(CASE WHEN has_gap = 1 THEN 1 ELSE 0 END) AS gap_space_count,
SUM(CASE WHEN tray_conflict = 1 OR project_conflict = 1 OR product_conflict = 1 THEN 1 ELSE 0 END) AS conflict_space_count
FROM alg.v_space_state
GROUP BY warehouse_id
ORDER BY warehouse_id;
SELECT warehouse_id, COUNT(*) AS topology_count
FROM alg.space_topology
GROUP BY warehouse_id
ORDER BY warehouse_id;
SELECT warehouse_id,
COUNT(*) AS inventory_detail_snapshot_count,
COUNT(DISTINCT space_id) AS inventory_space_snapshot_count,
MAX(synchronized_at) AS last_inventory_synchronized_at
FROM alg.inventory_item_snapshot
GROUP BY warehouse_id
ORDER BY warehouse_id;
;WITH warehouse_floors AS (
SELECT DISTINCT warehouse_id, the_floor AS floor_no
FROM dbo.bas_cargo_space
), role_counts AS (
SELECT cargo.warehouse_id, cargo.the_floor AS floor_no,
SUM(CASE WHEN role.role = 'RELOCATION_BUFFER' THEN 1 ELSE 0 END) AS relocation_buffer_count,
SUM(CASE WHEN role.role = 'OUTBOUND_BUFFER' THEN 1 ELSE 0 END) AS outbound_buffer_count,
SUM(CASE WHEN role.role = 'PROTECTED_CORE' THEN 1 ELSE 0 END) AS protected_core_count
FROM dbo.bas_cargo_space cargo
LEFT JOIN alg.space_role role ON role.space_id = cargo.cargo_space_id
GROUP BY cargo.warehouse_id, cargo.the_floor
)
SELECT floors.warehouse_id, floors.floor_no,
ISNULL(counts.relocation_buffer_count, 0) AS relocation_buffer_count,
CAST(4 AS int) AS relocation_buffer_target,
CASE WHEN ISNULL(counts.relocation_buffer_count, 0) >= 4 THEN 0
ELSE 4 - ISNULL(counts.relocation_buffer_count, 0) END AS relocation_buffer_shortage,
ISNULL(counts.outbound_buffer_count, 0) AS outbound_buffer_count,
ISNULL(counts.protected_core_count, 0) AS protected_core_count
FROM warehouse_floors floors
LEFT JOIN role_counts counts ON counts.warehouse_id = floors.warehouse_id
AND counts.floor_no = floors.floor_no
ORDER BY floors.warehouse_id, floors.floor_no;
SELECT cargo.warehouse_id, cargo.the_floor AS floor_no, role.space_id, role.role, role.updated_at
FROM alg.space_role role
JOIN dbo.bas_cargo_space cargo ON cargo.cargo_space_id = role.space_id
WHERE role.role IN ('RELOCATION_BUFFER', 'OUTBOUND_BUFFER', 'PROTECTED_CORE')
ORDER BY cargo.warehouse_id, cargo.the_floor, role.role, role.space_id;
SELECT warehouse_id, COUNT(*) AS lane_state_count,
SUM(CASE WHEN pending_outbound = 1 THEN 1 ELSE 0 END) AS pending_lane_count,
SUM(CASE WHEN has_gap = 1 THEN 1 ELSE 0 END) AS gap_lane_count
FROM alg.lane_state
GROUP BY warehouse_id
ORDER BY warehouse_id;
SELECT 'bas_cargo_space' AS table_name, COUNT_BIG(*) AS row_count,
CHECKSUM_AGG(BINARY_CHECKSUM(cargo_space_id, warehouse_id, group_coding_no, group_coding, status, tray_code)) AS row_checksum
FROM dbo.bas_cargo_space
UNION ALL
SELECT 'bas_stock', COUNT_BIG(*),
CHECKSUM_AGG(BINARY_CHECKSUM(stock_id, cargo_space_id, tray_code, spare4, product_id, lot_no, in_date))
FROM dbo.bas_stock
UNION ALL
SELECT 'mydo_job', COUNT_BIG(*),
CHECKSUM_AGG(BINARY_CHECKSUM(job_id, status, task_no, tray_code, cargo_space_id, target_cargo_space_id, in_or_out, warehouse_id))
FROM dbo.mydo_job;
;WITH pallet_details AS (
SELECT cargo_space_id,
MIN(NULLIF(LTRIM(RTRIM(tray_code)), '')) AS tray_code,
MIN(NULLIF(LTRIM(RTRIM(spare4)), '')) AS project_no,
MIN(NULLIF(LTRIM(RTRIM(product_id)), '')) AS first_product_no,
MAX(NULLIF(LTRIM(RTRIM(product_id)), '')) AS last_product_no,
COUNT(DISTINCT NULLIF(LTRIM(RTRIM(product_id)), '')) AS product_count
FROM dbo.bas_stock
GROUP BY cargo_space_id
)
SELECT TOP 5 state.space_id, details.tray_code, details.project_no,
details.first_product_no, details.last_product_no, details.product_count
FROM pallet_details details
JOIN alg.v_space_state state ON state.space_id = details.cargo_space_id
WHERE details.product_count > 1
AND state.space_status = '2'
AND state.stock_tray_count = 1
AND state.stock_project_count = 1
AND state.tray_conflict = 0
AND state.project_conflict = 0
AND state.pending_outbound = 0
AND state.reserved = 0
AND state.has_gap = 0
ORDER BY state.space_id;
SELECT space_id, warehouse_id, lane_code, depth, space_status, role,
tray_conflict, project_conflict, product_conflict, pending_outbound, reserved, has_gap,
inbound_available
FROM alg.v_space_state
WHERE tray_conflict = 1 OR project_conflict = 1 OR product_conflict = 1
OR pending_outbound = 1 OR has_gap = 1
ORDER BY warehouse_id, lane_code, depth;
SELECT reservation_id, warehouse_id, lane_code, space_id, project_no, status,
created_at, released_at
FROM alg.reservation
ORDER BY created_at DESC;
SELECT lock_id, request_id, warehouse_id, floor_no, status, created_at, released_at
FROM alg.deep_workflow_lock
ORDER BY created_at DESC;
SELECT warehouse_id, lane_code, topology_dirty, reason_mask, change_count,
enqueued_at, last_changed_at
FROM alg.dirty_lane_queue
ORDER BY last_changed_at, warehouse_id, lane_code;
SELECT workflow_id, request_id, stockout_detail_id, warehouse_id, source_stock_id,
selected_tray_code, source_space_id, lane_code, floor_no, exit_id,
status, current_step, total_steps, created_at, updated_at, completed_at
FROM alg.outbound_workflow
WHERE status <> 'COMPLETED'
ORDER BY created_at, workflow_id;
SELECT step.workflow_id, step.assignment_id, step.phase, step.source_space_id,
step.target_space_id, step.workflow_step, step.workflow_total_steps,
step.depends_on_assignment_id, step.stock_id, step.tray_code, step.status,
step.wms_job_id, step.created_at, step.started_at, step.at_exit_at, step.completed_at
FROM alg.outbound_workflow_step step
JOIN alg.outbound_workflow workflow ON workflow.workflow_id = step.workflow_id
WHERE workflow.status <> 'COMPLETED' OR step.status <> 'COMPLETED'
ORDER BY step.workflow_id, step.workflow_step;
SELECT mode.warehouse_id, mode.requested_enabled, mode.effective_state,
mode.status_reason, mode.mode_version, mode.updated_by, mode.updated_at
FROM alg.tidy_mode mode
ORDER BY mode.warehouse_id;
SELECT queue.warehouse_id, queue.lane_code, queue.dirty_version, queue.queue_status,
queue.reason_mask, queue.change_count, queue.last_dirty_at, queue.claimed_version,
queue.claimed_by, queue.claimed_at, queue.lease_expires_at, queue.last_error
FROM alg.tidy_lane_queue queue
ORDER BY queue.last_dirty_at, queue.warehouse_id, queue.lane_code;
SELECT workflow.workflow_id, workflow.warehouse_id, workflow.lane_code, workflow.origin,
workflow.candidate_type, workflow.source_space_id, workflow.target_space_id,
workflow.stock_id, workflow.tray_code, workflow.status, workflow.claimed_dirty_version,
workflow.vehicle_id, workflow.wcs_task_id, workflow.status_reason,
workflow.created_at, workflow.updated_at, workflow.dispatched_at, workflow.completed_at
FROM alg.tidy_workflow workflow
WHERE workflow.completed_at IS NULL
OR workflow.status IN ('PAUSED_RECOVERY', 'CANCELLED_RECONCILED')
ORDER BY workflow.created_at, workflow.workflow_id;
SELECT step.workflow_id, step.step_id, step.step_no, step.source_space_id,
step.target_space_id, step.stock_id, step.tray_code, step.status,
step.wms_job_id, step.wcs_task_id, step.expected_event_stage,
step.created_at, step.started_at, step.completed_at
FROM alg.tidy_step step
JOIN alg.tidy_workflow workflow ON workflow.workflow_id = step.workflow_id
WHERE workflow.completed_at IS NULL OR step.completed_at IS NULL
ORDER BY step.workflow_id, step.step_no;
SELECT lock.workflow_id, lock.warehouse_id, lock.resource_type, lock.resource_id,
lock.status, lock.locked_at, lock.released_at
FROM alg.tidy_space_lock lock
WHERE lock.status = 'ACTIVE'
ORDER BY lock.warehouse_id, lock.resource_type, lock.resource_id;
SELECT event.workflow_id, event.step_id, event.wcs_task_id, event.event_stage,
COUNT(*) AS callback_count, MIN(event.received_at) AS first_received_at,
MAX(event.received_at) AS last_received_at
FROM alg.tidy_callback_event event
GROUP BY event.workflow_id, event.step_id, event.wcs_task_id, event.event_stage
HAVING COUNT(*) > 1
ORDER BY event.workflow_id, event.step_id, event.event_stage;
SELECT workflow.origin, workflow.status, COUNT(*) AS workflow_count
FROM alg.tidy_workflow workflow
GROUP BY workflow.origin, workflow.status
ORDER BY workflow.origin, workflow.status;