feat: prepare warehouse 01 floor 1 inbound pilot
This commit is contained in:
316
scripts/layer1-inbound-pilot/install-layer1-inbound-pilot.sql
Normal file
316
scripts/layer1-inbound-pilot/install-layer1-inbound-pilot.sql
Normal file
@@ -0,0 +1,316 @@
|
||||
/* LAYER1_INBOUND_PILOT_V1 - SQL Server 2016 RTM compatible. */
|
||||
SET NOCOUNT ON;
|
||||
SET XACT_ABORT ON;
|
||||
|
||||
IF DB_NAME() <> N'FT546-wms'
|
||||
THROW 51100, 'Layer1 pilot installer requires FT546-wms', 1;
|
||||
|
||||
IF SCHEMA_ID(N'alg') IS NULL
|
||||
OR OBJECT_ID(N'alg.shadow_snapshot_state', N'U') IS NULL
|
||||
OR OBJECT_ID(N'alg.cargo_space_snapshot', N'U') IS NULL
|
||||
OR OBJECT_ID(N'alg.decision_log', N'U') IS NULL
|
||||
THROW 51101, 'Shadow v3 snapshot objects are required', 1;
|
||||
|
||||
IF OBJECT_ID(N'dbo.mydo_job', N'U') IS NULL
|
||||
OR OBJECT_ID(N'dbo.mydo_job_detail', N'U') IS NULL
|
||||
OR OBJECT_ID(N'dbo.bas_cargo_space', N'U') IS NULL
|
||||
OR OBJECT_ID(N'dbo.bas_stock', N'U') IS NULL
|
||||
OR OBJECT_ID(N'dbo.bas_led', N'U') IS NULL
|
||||
THROW 51102, 'Required Legacy WMS objects are missing', 1;
|
||||
|
||||
IF OBJECT_ID(N'dbo.proc_allot_layer1_inbound_pilot', N'P') IS NULL
|
||||
BEGIN
|
||||
EXEC(N'CREATE PROCEDURE dbo.proc_allot_layer1_inbound_pilot AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON;
|
||||
/* LAYER1_INBOUND_PILOT_V1 LAYER1_INBOUND_PILOT_STUB */
|
||||
THROW 51103, ''Layer1 pilot installation did not complete'', 1;
|
||||
END;');
|
||||
END
|
||||
ELSE IF CHARINDEX(N'LAYER1_INBOUND_PILOT_V1',
|
||||
OBJECT_DEFINITION(OBJECT_ID(N'dbo.proc_allot_layer1_inbound_pilot'))) = 0
|
||||
THROW 51104, 'Refusing to replace an unowned procedure', 1;
|
||||
GO
|
||||
|
||||
/* LAYER1_INBOUND_PILOT_V1 */
|
||||
ALTER PROCEDURE dbo.proc_allot_layer1_inbound_pilot
|
||||
@v_task_no varchar(80),
|
||||
@v_tray_code varchar(80),
|
||||
@v_code varchar(80),
|
||||
@v_space_id varchar(80),
|
||||
@v_warehouse_id varchar(80),
|
||||
@v_floor int,
|
||||
@v_snapshot_generation bigint,
|
||||
@v_snapshot_max_age_seconds int,
|
||||
@v_result int OUTPUT,
|
||||
@v_resultmsg varchar(255) OUTPUT,
|
||||
@v_final_space_id varchar(80) OUTPUT
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON;
|
||||
SET XACT_ABORT ON;
|
||||
|
||||
SET @v_result = 90;
|
||||
SET @v_resultmsg = 'PILOT_NOT_COMPLETED';
|
||||
SET @v_final_space_id = NULL;
|
||||
|
||||
IF @v_warehouse_id <> '01' OR @v_floor <> 1
|
||||
BEGIN
|
||||
SET @v_result = 30;
|
||||
SET @v_resultmsg = 'PILOT_SCOPE_REJECTED';
|
||||
RETURN;
|
||||
END;
|
||||
IF @v_snapshot_generation <= 0 OR @v_snapshot_max_age_seconds NOT BETWEEN 5 AND 300
|
||||
BEGIN
|
||||
SET @v_result = 31;
|
||||
SET @v_resultmsg = 'PILOT_CONFIGURATION_REJECTED';
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
DECLARE @current_generation bigint;
|
||||
DECLARE @snapshot_status varchar(20);
|
||||
DECLARE @snapshot_time datetime2;
|
||||
DECLARE @job_count int;
|
||||
DECLARE @tray_job_count int;
|
||||
DECLARE @job_id varchar(80);
|
||||
DECLARE @existing_space_id varchar(80);
|
||||
DECLARE @lane_code varchar(80);
|
||||
DECLARE @actual_floor int;
|
||||
DECLARE @depth int;
|
||||
DECLARE @lane_row_count int;
|
||||
DECLARE @start_time varchar(80) = CONVERT(varchar, GETDATE(), 120);
|
||||
DECLARE @product_id nvarchar(max);
|
||||
DECLARE @product_name nvarchar(max);
|
||||
DECLARE @quantity nvarchar(max);
|
||||
DECLARE @spec nvarchar(max);
|
||||
|
||||
BEGIN TRY
|
||||
BEGIN TRANSACTION;
|
||||
|
||||
SELECT @current_generation = snapshot_generation,
|
||||
@snapshot_status = snapshot_status,
|
||||
@snapshot_time = synchronized_at
|
||||
FROM alg.shadow_snapshot_state WITH (UPDLOCK, HOLDLOCK)
|
||||
WHERE warehouse_id = @v_warehouse_id;
|
||||
|
||||
IF @current_generation IS NULL
|
||||
OR @current_generation <> @v_snapshot_generation
|
||||
OR @snapshot_status <> 'PUBLISHED'
|
||||
OR @snapshot_time IS NULL
|
||||
OR DATEDIFF(SECOND, @snapshot_time, SYSUTCDATETIME()) NOT BETWEEN 0 AND @v_snapshot_max_age_seconds
|
||||
BEGIN
|
||||
ROLLBACK TRANSACTION;
|
||||
SET @v_result = 21;
|
||||
SET @v_resultmsg = 'SNAPSHOT_STALE_OR_CHANGED';
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
SELECT @job_count = COUNT(*),
|
||||
@job_id = MAX(job_id),
|
||||
@existing_space_id = MAX(NULLIF(LTRIM(RTRIM(cargo_space_id)), ''))
|
||||
FROM dbo.mydo_job WITH (UPDLOCK, HOLDLOCK)
|
||||
WHERE task_no = @v_task_no
|
||||
AND tray_code = @v_tray_code
|
||||
AND warehouse_id = @v_warehouse_id
|
||||
AND TRY_CONVERT(int, in_or_out) < 20;
|
||||
|
||||
SELECT @tray_job_count = COUNT(*)
|
||||
FROM dbo.mydo_job WITH (UPDLOCK, HOLDLOCK)
|
||||
WHERE tray_code = @v_tray_code
|
||||
AND TRY_CONVERT(int, in_or_out) < 20;
|
||||
|
||||
IF @job_count <> 1 OR @tray_job_count <> 1
|
||||
BEGIN
|
||||
ROLLBACK TRANSACTION;
|
||||
SET @v_result = 20;
|
||||
SET @v_resultmsg = 'JOB_OR_TRAY_SCOPE_CHANGED';
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
IF @existing_space_id IS NOT NULL
|
||||
BEGIN
|
||||
ROLLBACK TRANSACTION;
|
||||
SET @v_final_space_id = @existing_space_id;
|
||||
SET @v_result = CASE WHEN @existing_space_id = @v_space_id THEN 11 ELSE 12 END;
|
||||
SET @v_resultmsg = 'JOB_ALREADY_ALLOCATED';
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
SELECT @lane_code = group_coding_no,
|
||||
@actual_floor = TRY_CONVERT(int, the_floor),
|
||||
@depth = TRY_CONVERT(int, group_coding)
|
||||
FROM dbo.bas_cargo_space WITH (UPDLOCK, HOLDLOCK)
|
||||
WHERE cargo_space_id = @v_space_id
|
||||
AND warehouse_id = @v_warehouse_id
|
||||
AND TRY_CONVERT(int, the_floor) = @v_floor
|
||||
AND status = '1'
|
||||
AND locked = 'N'
|
||||
AND NULLIF(LTRIM(RTRIM(tray_code)), '') IS NULL
|
||||
AND this_cargo_area IN ('A', 'C');
|
||||
|
||||
IF @lane_code IS NULL OR @depth IS NULL OR @actual_floor <> @v_floor
|
||||
BEGIN
|
||||
ROLLBACK TRANSACTION;
|
||||
SET @v_result = 22;
|
||||
SET @v_resultmsg = 'SPACE_CONFLICT';
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
IF NOT EXISTS (
|
||||
SELECT 1
|
||||
FROM alg.cargo_space_snapshot WITH (READCOMMITTEDLOCK)
|
||||
WHERE warehouse_id = @v_warehouse_id
|
||||
AND snapshot_generation = @v_snapshot_generation
|
||||
AND space_id = @v_space_id
|
||||
AND lane_code = @lane_code
|
||||
AND TRY_CONVERT(int, floor_no) = @v_floor
|
||||
AND space_status = '1'
|
||||
AND locked = 'N'
|
||||
AND NULLIF(LTRIM(RTRIM(tray_code)), '') IS NULL)
|
||||
BEGIN
|
||||
ROLLBACK TRANSACTION;
|
||||
SET @v_result = 22;
|
||||
SET @v_resultmsg = 'SPACE_NOT_IN_PLANNED_SNAPSHOT';
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
/* Lock the complete live lane before checking continuity and obstruction. */
|
||||
SELECT @lane_row_count = COUNT(*)
|
||||
FROM dbo.bas_cargo_space WITH (UPDLOCK, HOLDLOCK)
|
||||
WHERE warehouse_id = @v_warehouse_id AND group_coding_no = @lane_code;
|
||||
IF @lane_row_count = 0
|
||||
BEGIN
|
||||
ROLLBACK TRANSACTION;
|
||||
SET @v_result = 23;
|
||||
SET @v_resultmsg = 'LANE_NOT_FOUND';
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
IF EXISTS (
|
||||
SELECT 1 FROM dbo.bas_stock WITH (UPDLOCK, HOLDLOCK)
|
||||
WHERE cargo_space_id = @v_space_id)
|
||||
OR EXISTS (
|
||||
SELECT 1 FROM dbo.mydo_job WITH (UPDLOCK, HOLDLOCK)
|
||||
WHERE job_id <> @job_id
|
||||
AND (cargo_space_id = @v_space_id OR target_cargo_space_id = @v_space_id))
|
||||
BEGIN
|
||||
ROLLBACK TRANSACTION;
|
||||
SET @v_result = 22;
|
||||
SET @v_resultmsg = 'SPACE_ALREADY_OWNED';
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
IF EXISTS (
|
||||
SELECT 1
|
||||
FROM dbo.bas_cargo_space WITH (UPDLOCK, HOLDLOCK)
|
||||
WHERE warehouse_id = @v_warehouse_id
|
||||
AND TRY_CONVERT(int, the_floor) = @v_floor
|
||||
AND status = '3')
|
||||
OR EXISTS (
|
||||
SELECT 1
|
||||
FROM dbo.bas_cargo_space WITH (UPDLOCK, HOLDLOCK)
|
||||
WHERE warehouse_id = @v_warehouse_id
|
||||
AND group_coding_no = @lane_code
|
||||
AND (status IN ('3', '4') OR locked = 'Y'))
|
||||
OR EXISTS (
|
||||
SELECT 1
|
||||
FROM dbo.mydo_job outbound_job WITH (UPDLOCK, HOLDLOCK)
|
||||
JOIN dbo.bas_cargo_space source_space WITH (UPDLOCK, HOLDLOCK)
|
||||
ON source_space.cargo_space_id = outbound_job.cargo_space_id
|
||||
WHERE source_space.warehouse_id = @v_warehouse_id
|
||||
AND source_space.group_coding_no = @lane_code
|
||||
AND TRY_CONVERT(int, outbound_job.in_or_out) >= 20)
|
||||
BEGIN
|
||||
ROLLBACK TRANSACTION;
|
||||
SET @v_result = 23;
|
||||
SET @v_resultmsg = 'LANE_OBSTRUCTED_OR_ACTIVE';
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
IF EXISTS (
|
||||
SELECT 1
|
||||
FROM dbo.bas_cargo_space inner_space WITH (UPDLOCK, HOLDLOCK)
|
||||
WHERE inner_space.warehouse_id = @v_warehouse_id
|
||||
AND inner_space.group_coding_no = @lane_code
|
||||
AND TRY_CONVERT(int, inner_space.group_coding) < @depth
|
||||
AND inner_space.status = '1'
|
||||
AND inner_space.locked = 'N'
|
||||
AND NULLIF(LTRIM(RTRIM(inner_space.tray_code)), '') IS NULL
|
||||
AND NOT EXISTS (
|
||||
SELECT 1 FROM dbo.bas_stock inner_stock WITH (UPDLOCK, HOLDLOCK)
|
||||
WHERE inner_stock.cargo_space_id = inner_space.cargo_space_id))
|
||||
BEGIN
|
||||
ROLLBACK TRANSACTION;
|
||||
SET @v_result = 23;
|
||||
SET @v_resultmsg = 'LANE_INNER_SPACE_STILL_FREE';
|
||||
RETURN;
|
||||
END;
|
||||
|
||||
UPDATE dbo.mydo_job
|
||||
SET cargo_space_id = @v_space_id,
|
||||
status = '3',
|
||||
start_time = @start_time,
|
||||
class_id = CONVERT(varchar(5), @actual_floor)
|
||||
WHERE job_id = @job_id
|
||||
AND task_no = @v_task_no
|
||||
AND tray_code = @v_tray_code
|
||||
AND warehouse_id = @v_warehouse_id
|
||||
AND TRY_CONVERT(int, in_or_out) < 20
|
||||
AND NULLIF(LTRIM(RTRIM(cargo_space_id)), '') IS NULL;
|
||||
IF @@ROWCOUNT <> 1
|
||||
THROW 51110, 'PILOT_JOB_UPDATE_CONFLICT', 1;
|
||||
|
||||
UPDATE dbo.bas_cargo_space
|
||||
SET status = '3'
|
||||
WHERE cargo_space_id = @v_space_id
|
||||
AND warehouse_id = @v_warehouse_id
|
||||
AND status = '1'
|
||||
AND locked = 'N'
|
||||
AND NULLIF(LTRIM(RTRIM(tray_code)), '') IS NULL;
|
||||
IF @@ROWCOUNT <> 1
|
||||
THROW 51111, 'PILOT_SPACE_UPDATE_CONFLICT', 1;
|
||||
|
||||
IF @v_code IN ('L1004', 'L1005')
|
||||
BEGIN
|
||||
;WITH detail_summary AS (
|
||||
SELECT product_id,
|
||||
CAST(SUM(in_quantity) AS varchar) AS sum_quantity,
|
||||
spec,
|
||||
product_name
|
||||
FROM dbo.mydo_job_detail
|
||||
WHERE job_id = @job_id
|
||||
GROUP BY product_id, spec, product_name
|
||||
)
|
||||
SELECT @product_id = STUFF((SELECT ',' + product_id FROM detail_summary FOR XML PATH(''), TYPE).value('.', 'nvarchar(max)'), 1, 1, ''),
|
||||
@product_name = STUFF((SELECT ',' + product_name FROM detail_summary FOR XML PATH(''), TYPE).value('.', 'nvarchar(max)'), 1, 1, ''),
|
||||
@quantity = STUFF((SELECT ',' + sum_quantity FROM detail_summary FOR XML PATH(''), TYPE).value('.', 'nvarchar(max)'), 1, 1, ''),
|
||||
@spec = STUFF((SELECT ',' + spec FROM detail_summary FOR XML PATH(''), TYPE).value('.', 'nvarchar(max)'), 1, 1, '');
|
||||
|
||||
UPDATE dbo.bas_led
|
||||
SET tray_code = @v_tray_code,
|
||||
product_id = @product_id,
|
||||
quantity = @quantity,
|
||||
spec = @spec,
|
||||
send_flag = 0,
|
||||
model = 1,
|
||||
product_name = @product_name
|
||||
WHERE id = CASE WHEN @v_code = 'L1004' THEN 1 ELSE 2 END;
|
||||
IF @@ROWCOUNT <> 1
|
||||
THROW 51112, 'PILOT_LED_UPDATE_CONFLICT', 1;
|
||||
END;
|
||||
|
||||
SET @v_final_space_id = @v_space_id;
|
||||
SET @v_result = 10;
|
||||
SET @v_resultmsg = 'SUCCESS';
|
||||
COMMIT TRANSACTION;
|
||||
END TRY
|
||||
BEGIN CATCH
|
||||
IF XACT_STATE() <> 0
|
||||
ROLLBACK TRANSACTION;
|
||||
THROW;
|
||||
END CATCH;
|
||||
END;
|
||||
GO
|
||||
|
||||
SELECT 'LAYER1_INBOUND_PILOT_INSTALL_OK' AS result;
|
||||
GO
|
||||
Reference in New Issue
Block a user