139 lines
9.2 KiB
Transact-SQL
139 lines
9.2 KiB
Transact-SQL
SET NOCOUNT ON;
|
|
DECLARE @r int,@m varchar(255),@job varchar(255),@n int;
|
|
EXEC dbo.proc_allot_space 'NEW-TRAY','TEST',@r OUTPUT,@m OUTPUT;
|
|
IF @r<>2 OR EXISTS(SELECT 1 FROM dbo.mydo_job WHERE job_id='IN-NEW' AND cargo_space_id IS NOT NULL)
|
|
THROW 51900,'Disabled pilot must preserve Legacy no-position behavior',1;
|
|
|
|
UPDATE mixed_pilot.control SET enabled=1,all_projects_may_mix=1 WHERE id=1;
|
|
UPDATE mixed_pilot.lane SET enabled=1,physical_fit_confirmed=1 WHERE lane_code='C1203';
|
|
-- An ordinary same-project position must win before mixed fallback.
|
|
INSERT dbo.bas_cargo_space(cargo_space_id,warehouse_id,the_floor,the_platoon,the_column,group_coding_no,group_coding,this_cargo_area,status,locked,tray_code)
|
|
VALUES('110801','01',1,11,8,'C1101','1','C','2','N','SAME'),('110701','01',1,11,7,'C1101','2','C','1','N',NULL);
|
|
INSERT dbo.bas_stock(stock_id,cargo_space_id,tray_code,spare4,spare1,spare2,spare3,quantity,out_quantity)
|
|
VALUES('SAME-S','110801','SAME','NEW','D','E','F',1,0);
|
|
EXEC dbo.proc_allot_space 'NEW-TRAY','TEST',@r OUTPUT,@m OUTPUT;
|
|
IF @r<>10 OR NOT EXISTS(SELECT 1 FROM dbo.mydo_job WHERE job_id='IN-NEW' AND cargo_space_id='110701')
|
|
THROW 51901,'Normal Legacy allocation must have priority',1;
|
|
UPDATE dbo.mydo_job SET cargo_space_id=NULL,status='1' WHERE job_id='IN-NEW';
|
|
DELETE dbo.bas_stock WHERE stock_id='SAME-S';
|
|
DELETE dbo.bas_cargo_space WHERE group_coding_no='C1101';
|
|
|
|
-- No physical confirmation, missing E capacity, ambiguity and common-project input fail closed.
|
|
UPDATE mixed_pilot.lane SET physical_fit_confirmed=0 WHERE lane_code='C1203';
|
|
EXEC dbo.proc_allot_space 'NEW-TRAY','TEST',@r OUTPUT,@m OUTPUT;
|
|
IF @r=10 THROW 51902,'Unconfirmed physical fit must not admit mixed pallet',1;
|
|
UPDATE mixed_pilot.lane SET physical_fit_confirmed=1 WHERE lane_code='C1203';
|
|
UPDATE dbo.bas_cargo_space SET locked='Y' WHERE this_cargo_area='E';
|
|
EXEC dbo.proc_allot_space 'NEW-TRAY','TEST',@r OUTPUT,@m OUTPUT;
|
|
IF @r=10 THROW 51903,'No same-floor E capacity must not admit mixed pallet',1;
|
|
UPDATE dbo.bas_cargo_space SET locked='N' WHERE this_cargo_area='E';
|
|
UPDATE dbo.mydo_job_detail SET spare4='WRONG' WHERE job_id='IN-NEW';
|
|
EXEC dbo.proc_allot_space 'NEW-TRAY','TEST',@r OUTPUT,@m OUTPUT;
|
|
IF @r=10 THROW 51904,'Header/detail project mismatch must be rejected',1;
|
|
UPDATE dbo.mydo_job_detail SET spare4='NEW' WHERE job_id='IN-NEW';
|
|
|
|
EXEC dbo.proc_allot_space 'NEW-TRAY','TEST',@r OUTPUT,@m OUTPUT;
|
|
IF @r<>10 OR NOT EXISTS(SELECT 1 FROM dbo.mydo_job WHERE job_id='IN-NEW' AND cargo_space_id='120703' AND status='3')
|
|
THROW 51905,'Fallback must reserve only the designated outer position',1;
|
|
IF NOT EXISTS(SELECT 1 FROM dbo.bas_cargo_space WHERE cargo_space_id='120703' AND status='3')
|
|
THROW 51906,'Fallback must reserve slot and job together',1;
|
|
EXEC dbo.proc_allot_space 'NEW-TRAY','TEST',@r OUTPUT,@m OUTPUT;
|
|
IF @r<>10 OR (SELECT COUNT(*) FROM mixed_pilot.admission)<>1
|
|
THROW 51907,'Repeated allocation must return same reservation without a second admission',1;
|
|
|
|
INSERT dbo.mydo_job(job_id,tray_code,warehouse_id,line_id,in_or_out,status,execution_phase,fault_flag)
|
|
VALUES('IN-THIRD','THIRD-TRAY','01','THIRD',1,'1','0','0');
|
|
INSERT dbo.mydo_job_detail(job_detail_id,job_id,spare4,spare1,spare2,spare3,in_quantity)
|
|
VALUES('IN-THIRD-1','IN-THIRD','THIRD','X','Y','Z',1);
|
|
EXEC dbo.proc_allot_space 'THIRD-TRAY','TEST',@r OUTPUT,@m OUTPUT;
|
|
IF @r=10 THROW 51908,'A third project or an already reserved front slot must be rejected',1;
|
|
|
|
-- Simulate a confirmed physical inbound completion (no WCS or HTTP is contacted).
|
|
INSERT dbo.bas_stock(stock_id,cargo_space_id,tray_code,spare4,spare1,spare2,spare3,quantity,out_quantity)
|
|
VALUES('GUEST-S','120703','NEW-TRAY','NEW','D','E','F',1,0);
|
|
UPDATE dbo.bas_cargo_space SET status='2',tray_code='NEW-TRAY' WHERE cargo_space_id='120703';
|
|
DELETE dbo.mydo_job WHERE job_id='IN-NEW';
|
|
|
|
-- Automatic allocation creates the blocker move before the rear job.
|
|
EXEC dbo.proc_yk_job_add '120703','130803','NEW-TRAY';
|
|
SELECT @job=job_id FROM dbo.mydo_job WHERE in_or_out=30 AND tray_code='NEW-TRAY';
|
|
UPDATE dbo.bas_cargo_space SET status='4' WHERE cargo_space_id='120803';
|
|
INSERT dbo.mydo_job(job_id,tray_code,cargo_space_id,class_id,in_or_out,status,execution_phase,task_no)
|
|
VALUES('OUT-REAR','RESIDENT','120803','3',21,'1','0',800001);
|
|
IF NOT EXISTS(SELECT 1 FROM dbo.mydo_job WHERE job_id='OUT-REAR' AND status='8')
|
|
THROW 51909,'Blocked rear outbound must be held before the WMS scheduler can see it',1;
|
|
IF NOT EXISTS(SELECT 1 FROM mixed_pilot.dispatch_hold WHERE job_id='OUT-REAR' AND released_at IS NULL)
|
|
THROW 51910,'Held job must be diagnosable',1;
|
|
|
|
-- Occupied or wrong-floor destinations must not create a move or change inventory.
|
|
BEGIN TRY
|
|
EXEC dbo.proc_yk_job_add '120703','020704','NEW-TRAY';
|
|
THROW 51911,'Wrong-floor move was accepted',1;
|
|
END TRY BEGIN CATCH IF ERROR_NUMBER()=51911 THROW; END CATCH;
|
|
IF (SELECT COUNT(*) FROM dbo.mydo_job WHERE in_or_out=30)<>1
|
|
THROW 51912,'Rejected relocation must leave no partial task',1;
|
|
|
|
EXEC dbo.proc_yk_job_add '120703','130803','NEW-TRAY';
|
|
IF @job IS NULL OR NOT EXISTS(SELECT 1 FROM dbo.mydo_job WHERE job_id=@job AND status='1')
|
|
THROW 51913,'Outer relocation must remain dispatchable',1;
|
|
EXEC dbo.proc_yk_job_add '120703','130803','NEW-TRAY';
|
|
IF (SELECT COUNT(*) FROM dbo.mydo_job WHERE in_or_out=30)<>1
|
|
THROW 51914,'Repeated identical relocation must not duplicate tasks',1;
|
|
IF NOT EXISTS(SELECT 1 FROM dbo.mydo_job WHERE job_id='OUT-REAR' AND status='8')
|
|
THROW 51915,'Creating a relocation is not physical completion',1;
|
|
|
|
-- Switch OFF while pallets are mixed: no new admissions, protection must remain.
|
|
UPDATE mixed_pilot.control SET enabled=0 WHERE id=1;
|
|
IF NOT EXISTS(SELECT 1 FROM dbo.mydo_job WHERE job_id='OUT-REAR' AND status='8')
|
|
THROW 51916,'Disabling admission must not release blocked outbound',1;
|
|
EXEC dbo.proc_yk_complete @job,@r OUTPUT;
|
|
IF @r<>10 OR NOT EXISTS(SELECT 1 FROM dbo.bas_stock WHERE stock_id='GUEST-S' AND cargo_space_id='130803' AND spare4='NEW')
|
|
THROW 51917,'Move completion must preserve guest project ownership',1;
|
|
IF NOT EXISTS(SELECT 1 FROM dbo.mydo_job WHERE job_id='OUT-REAR' AND status='1')
|
|
THROW 51918,'Rear outbound must be released only after confirmed front clearance',1;
|
|
SELECT @n=COUNT(*) FROM dbo.move_msg;
|
|
EXEC dbo.proc_yk_complete @job,@r OUTPUT;
|
|
IF @r<>10 OR (SELECT COUNT(*) FROM dbo.move_msg)<>@n
|
|
THROW 51919,'Duplicate move completion must not change stock or emit duplicate move messages',1;
|
|
|
|
-- Ordinary front outbound also blocks the rear until BOTH stock and job are cleared.
|
|
DELETE dbo.mydo_job WHERE job_id='OUT-REAR';
|
|
UPDATE dbo.bas_stock SET cargo_space_id='120703' WHERE stock_id='GUEST-S';
|
|
UPDATE dbo.bas_cargo_space SET status='2',tray_code='NEW-TRAY' WHERE cargo_space_id='120703';
|
|
INSERT dbo.mydo_job(job_id,tray_code,cargo_space_id,class_id,in_or_out,status,execution_phase,task_no)
|
|
VALUES('OUT-FRONT','NEW-TRAY','120703','3',21,'1','0',800002),('OUT-REAR2','RESIDENT','120803','3',21,'1','0',800003);
|
|
IF NOT EXISTS(SELECT 1 FROM dbo.mydo_job WHERE job_id='OUT-FRONT' AND status='1') OR NOT EXISTS(SELECT 1 FROM dbo.mydo_job WHERE job_id='OUT-REAR2' AND status='8')
|
|
THROW 51920,'Front may dispatch while blocked rear must wait',1;
|
|
UPDATE dbo.bas_cargo_space SET status='1',tray_code=NULL WHERE cargo_space_id='120703';
|
|
DELETE dbo.bas_stock WHERE stock_id='GUEST-S';
|
|
IF NOT EXISTS(SELECT 1 FROM dbo.mydo_job WHERE job_id='OUT-REAR2' AND status='8')
|
|
THROW 51921,'An active front task must continue to block rear dispatch',1;
|
|
DELETE dbo.mydo_job WHERE job_id='OUT-FRONT';
|
|
IF NOT EXISTS(SELECT 1 FROM dbo.mydo_job WHERE job_id='OUT-REAR2' AND status='1')
|
|
THROW 51922,'Final front task deletion must release waiting rear job',1;
|
|
|
|
-- Unlisted lanes must not be held by the pilot triggers.
|
|
INSERT dbo.mydo_job(job_id,tray_code,cargo_space_id,class_id,in_or_out,status,execution_phase,task_no)
|
|
VALUES('OTHER-OUT','OTHER-RESIDENT','080801','1',21,'1','0',800004);
|
|
IF NOT EXISTS(SELECT 1 FROM dbo.mydo_job WHERE job_id='OTHER-OUT' AND status='1')
|
|
THROW 51923,'Unlisted lanes must retain Legacy dispatch behavior',1;
|
|
-- Manual allocation must not strand a held task when no blocker move exists.
|
|
DELETE dbo.mydo_job WHERE job_id='OUT-REAR2';
|
|
UPDATE dbo.bas_cargo_space SET status='2',tray_code='NEW-TRAY' WHERE cargo_space_id='120703';
|
|
INSERT dbo.bas_stock(stock_id,cargo_space_id,tray_code,spare4,quantity,out_quantity)
|
|
VALUES('GUEST-AGAIN','120703','NEW-TRAY','NEW',1,0);
|
|
BEGIN TRY
|
|
INSERT dbo.mydo_job(job_id,tray_code,cargo_space_id,class_id,in_or_out,status,execution_phase,task_no)
|
|
VALUES('MANUAL-BLOCKED','RESIDENT','120803','3',21,'1','0',800005);
|
|
THROW 51924,'Manual blocked outbound was accepted without a blocker task',1;
|
|
END TRY BEGIN CATCH IF ERROR_NUMBER()=51924 THROW; END CATCH;
|
|
IF EXISTS(SELECT 1 FROM dbo.mydo_job WHERE job_id='MANUAL-BLOCKED')
|
|
THROW 51925,'Rejected manual allocation must not leave a stranded held job',1;
|
|
BEGIN TRY
|
|
EXEC dbo.proc_yk_job_add '080801','130803','OTHER-RESIDENT';
|
|
THROW 51926,'Unlisted source overwrote a protected relocation destination',1;
|
|
END TRY BEGIN CATCH IF ERROR_NUMBER()=51926 THROW; END CATCH;
|
|
IF NOT EXISTS(SELECT 1 FROM dbo.bas_cargo_space WHERE cargo_space_id='130803' AND status='2' AND tray_code='NEW-TRAY')
|
|
THROW 51927,'Rejected stale relocation target must retain existing occupancy',1;
|
|
PRINT 'PASS: mixed-pilot sequential behavior assertions';
|