fix: scope shadow inputs to authoritative warehouse
This commit is contained in:
@@ -168,7 +168,7 @@ CREATE TABLE alg.decision_log (
|
|||||||
decision_type varchar(40) NOT NULL,
|
decision_type varchar(40) NOT NULL,
|
||||||
input_version binary(8) NULL,
|
input_version binary(8) NULL,
|
||||||
result_code varchar(80) NULL,
|
result_code varchar(80) NULL,
|
||||||
reason varchar(2000) NULL,
|
reason nvarchar(4000) NULL,
|
||||||
created_at datetime2 NOT NULL CONSTRAINT DF_alg_decision_log_created_at DEFAULT SYSUTCDATETIME()
|
created_at datetime2 NOT NULL CONSTRAINT DF_alg_decision_log_created_at DEFAULT SYSUTCDATETIME()
|
||||||
);
|
);
|
||||||
GO
|
GO
|
||||||
@@ -942,8 +942,12 @@ BEGIN
|
|||||||
DECLARE @pre_source_count bigint, @post_source_count bigint,
|
DECLARE @pre_source_count bigint, @post_source_count bigint,
|
||||||
@pre_source_signature varbinary(32), @post_source_signature varbinary(32),
|
@pre_source_signature varbinary(32), @post_source_signature varbinary(32),
|
||||||
@source_payload nvarchar(max), @synchronized_at datetime2,
|
@source_payload nvarchar(max), @synchronized_at datetime2,
|
||||||
|
@numeric_warehouse_id decimal(38,0),
|
||||||
@current_generation bigint;
|
@current_generation bigint;
|
||||||
|
|
||||||
|
IF LTRIM(RTRIM(@warehouse_id)) NOT LIKE '%[^0-9]%'
|
||||||
|
SET @numeric_warehouse_id = TRY_CONVERT(decimal(38,0), LTRIM(RTRIM(@warehouse_id)));
|
||||||
|
|
||||||
BEGIN TRY
|
BEGIN TRY
|
||||||
BEGIN TRANSACTION;
|
BEGIN TRANSACTION;
|
||||||
|
|
||||||
@@ -963,12 +967,22 @@ BEGIN
|
|||||||
+ (SELECT COUNT_BIG(*) FROM dbo.mydo_job_detail detail WITH (NOLOCK)
|
+ (SELECT COUNT_BIG(*) FROM dbo.mydo_job_detail detail WITH (NOLOCK)
|
||||||
JOIN dbo.mydo_job job WITH (NOLOCK) ON job.job_id = detail.job_id
|
JOIN dbo.mydo_job job WITH (NOLOCK) ON job.job_id = detail.job_id
|
||||||
WHERE job.warehouse_id = @warehouse_id)
|
WHERE job.warehouse_id = @warehouse_id)
|
||||||
+ (SELECT COUNT_BIG(*) FROM dbo.in_stockin_detail inbound WITH (NOLOCK)
|
+ (SELECT COUNT_BIG(*) FROM dbo.in_stockin_detail inbound WITH (NOLOCK)
|
||||||
JOIN dbo.mydo_job_detail detail WITH (NOLOCK) ON detail.stockin_detail_id = inbound.stockin_detail_id
|
JOIN dbo.mydo_job_detail detail WITH (NOLOCK) ON detail.stockin_detail_id = inbound.stockin_detail_id
|
||||||
JOIN dbo.mydo_job job WITH (NOLOCK) ON job.job_id = detail.job_id
|
JOIN dbo.mydo_job job WITH (NOLOCK) ON job.job_id = detail.job_id
|
||||||
WHERE job.finish_time IS NULL OR LTRIM(RTRIM(job.finish_time)) = '')
|
JOIN dbo.in_stockin stockin WITH (NOLOCK) ON stockin.stockin_id = inbound.stockin_id
|
||||||
+ (SELECT COUNT_BIG(*) FROM dbo.out_stockout_detail outbound WITH (NOLOCK)
|
WHERE (job.finish_time IS NULL OR LTRIM(RTRIM(job.finish_time)) = '')
|
||||||
WHERE ISNULL(outbound.quantity, 0) > ISNULL(outbound.allot_quantity, 0));
|
AND (LTRIM(RTRIM(stockin.warehouse_id)) = LTRIM(RTRIM(@warehouse_id))
|
||||||
|
OR (@numeric_warehouse_id IS NOT NULL
|
||||||
|
AND LTRIM(RTRIM(stockin.warehouse_id)) NOT LIKE '%[^0-9]%'
|
||||||
|
AND TRY_CONVERT(decimal(38,0), LTRIM(RTRIM(stockin.warehouse_id))) = @numeric_warehouse_id)))
|
||||||
|
+ (SELECT COUNT_BIG(*) FROM dbo.out_stockout_detail outbound WITH (NOLOCK)
|
||||||
|
JOIN dbo.out_stockout stockout WITH (NOLOCK) ON stockout.stockout_id = outbound.stockout_id
|
||||||
|
WHERE ISNULL(outbound.quantity, 0) > ISNULL(outbound.allot_quantity, 0)
|
||||||
|
AND (LTRIM(RTRIM(stockout.warehouse_id)) = LTRIM(RTRIM(@warehouse_id))
|
||||||
|
OR (@numeric_warehouse_id IS NOT NULL
|
||||||
|
AND LTRIM(RTRIM(stockout.warehouse_id)) NOT LIKE '%[^0-9]%'
|
||||||
|
AND TRY_CONVERT(decimal(38,0), LTRIM(RTRIM(stockout.warehouse_id))) = @numeric_warehouse_id)));
|
||||||
|
|
||||||
SELECT @source_payload = ISNULL(CONVERT(nvarchar(max), (
|
SELECT @source_payload = ISNULL(CONVERT(nvarchar(max), (
|
||||||
SELECT cargo.cargo_space_id AS [@space_id], cargo.warehouse_id AS [@warehouse_id],
|
SELECT cargo.cargo_space_id AS [@space_id], cargo.warehouse_id AS [@warehouse_id],
|
||||||
@@ -1028,27 +1042,39 @@ BEGIN
|
|||||||
inbound.stockin_id AS [@stockin_id], inbound.lot_no AS [@lot_no],
|
inbound.stockin_id AS [@stockin_id], inbound.lot_no AS [@lot_no],
|
||||||
inbound.product_id AS [@product_id], inbound.quantity AS [@quantity],
|
inbound.product_id AS [@product_id], inbound.quantity AS [@quantity],
|
||||||
inbound.assign_num AS [@assign_num], inbound.spare4 AS [@project_no],
|
inbound.assign_num AS [@assign_num], inbound.spare4 AS [@project_no],
|
||||||
job.warehouse_id AS [@warehouse_id], job.task_no AS [@task_no],
|
job.warehouse_id AS [@warehouse_id], stockin.warehouse_id AS [@source_warehouse_id],
|
||||||
|
job.task_no AS [@task_no],
|
||||||
job.tray_code AS [@tray_code], detail.job_id AS [@job_id],
|
job.tray_code AS [@tray_code], detail.job_id AS [@job_id],
|
||||||
detail.in_or_out_id AS [@request_id]
|
detail.in_or_out_id AS [@request_id]
|
||||||
FROM dbo.in_stockin_detail inbound WITH (NOLOCK)
|
FROM dbo.in_stockin_detail inbound WITH (NOLOCK)
|
||||||
JOIN dbo.mydo_job_detail detail WITH (NOLOCK) ON detail.stockin_detail_id = inbound.stockin_detail_id
|
JOIN dbo.mydo_job_detail detail WITH (NOLOCK) ON detail.stockin_detail_id = inbound.stockin_detail_id
|
||||||
JOIN dbo.mydo_job job WITH (NOLOCK) ON job.job_id = detail.job_id
|
JOIN dbo.mydo_job job WITH (NOLOCK) ON job.job_id = detail.job_id
|
||||||
WHERE job.finish_time IS NULL OR LTRIM(RTRIM(job.finish_time)) = ''
|
JOIN dbo.in_stockin stockin WITH (NOLOCK) ON stockin.stockin_id = inbound.stockin_id
|
||||||
|
WHERE (job.finish_time IS NULL OR LTRIM(RTRIM(job.finish_time)) = '')
|
||||||
|
AND (LTRIM(RTRIM(stockin.warehouse_id)) = LTRIM(RTRIM(@warehouse_id))
|
||||||
|
OR (@numeric_warehouse_id IS NOT NULL
|
||||||
|
AND LTRIM(RTRIM(stockin.warehouse_id)) NOT LIKE '%[^0-9]%'
|
||||||
|
AND TRY_CONVERT(decimal(38,0), LTRIM(RTRIM(stockin.warehouse_id))) = @numeric_warehouse_id))
|
||||||
ORDER BY inbound.stockin_detail_id
|
ORDER BY inbound.stockin_detail_id
|
||||||
FOR XML PATH('inbound'), ROOT('inbound_requests'), TYPE
|
FOR XML PATH('inbound'), ROOT('inbound_requests'), TYPE
|
||||||
)), '');
|
)), '');
|
||||||
|
|
||||||
SET @source_payload = @source_payload + '|OUTBOUND|' + ISNULL(CONVERT(nvarchar(max), (
|
SET @source_payload = @source_payload + '|OUTBOUND|' + ISNULL(CONVERT(nvarchar(max), (
|
||||||
SELECT outbound.stockout_detail_id AS [@stockout_detail_id], outbound.warehouse_id AS [@warehouse_id],
|
SELECT outbound.stockout_detail_id AS [@stockout_detail_id], outbound.warehouse_id AS [@warehouse_id],
|
||||||
|
stockout.warehouse_id AS [@source_warehouse_id],
|
||||||
warehouse.project_no AS [@project_no],
|
warehouse.project_no AS [@project_no],
|
||||||
outbound.product_id AS [@product_id], outbound.lot_no AS [@lot_no],
|
outbound.product_id AS [@product_id], outbound.lot_no AS [@lot_no],
|
||||||
outbound.quantity AS [@quantity], outbound.assign_num AS [@assign_num],
|
outbound.quantity AS [@quantity], outbound.assign_num AS [@assign_num],
|
||||||
outbound.allot_quantity AS [@allot_quantity], outbound.create_time AS [@create_time]
|
outbound.allot_quantity AS [@allot_quantity], outbound.create_time AS [@create_time]
|
||||||
FROM dbo.out_stockout_detail outbound WITH (NOLOCK)
|
FROM dbo.out_stockout_detail outbound WITH (NOLOCK)
|
||||||
|
JOIN dbo.out_stockout stockout WITH (NOLOCK) ON stockout.stockout_id = outbound.stockout_id
|
||||||
LEFT JOIN dbo.bas_warehouse warehouse WITH (NOLOCK)
|
LEFT JOIN dbo.bas_warehouse warehouse WITH (NOLOCK)
|
||||||
ON warehouse.warehouse_id = outbound.warehouse_id
|
ON warehouse.warehouse_id = @warehouse_id
|
||||||
WHERE ISNULL(outbound.quantity, 0) > ISNULL(outbound.allot_quantity, 0)
|
WHERE ISNULL(outbound.quantity, 0) > ISNULL(outbound.allot_quantity, 0)
|
||||||
|
AND (LTRIM(RTRIM(stockout.warehouse_id)) = LTRIM(RTRIM(@warehouse_id))
|
||||||
|
OR (@numeric_warehouse_id IS NOT NULL
|
||||||
|
AND LTRIM(RTRIM(stockout.warehouse_id)) NOT LIKE '%[^0-9]%'
|
||||||
|
AND TRY_CONVERT(decimal(38,0), LTRIM(RTRIM(stockout.warehouse_id))) = @numeric_warehouse_id))
|
||||||
ORDER BY outbound.stockout_detail_id
|
ORDER BY outbound.stockout_detail_id
|
||||||
FOR XML PATH('outbound'), ROOT('outbound_requests'), TYPE
|
FOR XML PATH('outbound'), ROOT('outbound_requests'), TYPE
|
||||||
)), '');
|
)), '');
|
||||||
@@ -1111,7 +1137,12 @@ BEGIN
|
|||||||
JOIN dbo.mydo_job_detail detail WITH (NOLOCK)
|
JOIN dbo.mydo_job_detail detail WITH (NOLOCK)
|
||||||
ON detail.stockin_detail_id = inbound.stockin_detail_id
|
ON detail.stockin_detail_id = inbound.stockin_detail_id
|
||||||
JOIN dbo.mydo_job job WITH (NOLOCK) ON job.job_id = detail.job_id
|
JOIN dbo.mydo_job job WITH (NOLOCK) ON job.job_id = detail.job_id
|
||||||
WHERE job.finish_time IS NULL OR LTRIM(RTRIM(job.finish_time)) = ''
|
JOIN dbo.in_stockin stockin WITH (NOLOCK) ON stockin.stockin_id = inbound.stockin_id
|
||||||
|
WHERE (job.finish_time IS NULL OR LTRIM(RTRIM(job.finish_time)) = '')
|
||||||
|
AND (LTRIM(RTRIM(stockin.warehouse_id)) = LTRIM(RTRIM(@warehouse_id))
|
||||||
|
OR (@numeric_warehouse_id IS NOT NULL
|
||||||
|
AND LTRIM(RTRIM(stockin.warehouse_id)) NOT LIKE '%[^0-9]%'
|
||||||
|
AND TRY_CONVERT(decimal(38,0), LTRIM(RTRIM(stockin.warehouse_id))) = @numeric_warehouse_id))
|
||||||
)
|
)
|
||||||
INSERT INTO alg.shadow_inbound_request_snapshot (
|
INSERT INTO alg.shadow_inbound_request_snapshot (
|
||||||
warehouse_id, task_no, tray_no, request_id, raw_warehouse_id,
|
warehouse_id, task_no, tray_no, request_id, raw_warehouse_id,
|
||||||
@@ -1130,9 +1161,14 @@ BEGIN
|
|||||||
CONVERT(decimal(38,6), outbound.quantity),
|
CONVERT(decimal(38,6), outbound.quantity),
|
||||||
@snapshot_generation, @synchronized_at
|
@snapshot_generation, @synchronized_at
|
||||||
FROM dbo.out_stockout_detail outbound WITH (NOLOCK)
|
FROM dbo.out_stockout_detail outbound WITH (NOLOCK)
|
||||||
|
JOIN dbo.out_stockout stockout WITH (NOLOCK) ON stockout.stockout_id = outbound.stockout_id
|
||||||
LEFT JOIN dbo.bas_warehouse warehouse WITH (NOLOCK)
|
LEFT JOIN dbo.bas_warehouse warehouse WITH (NOLOCK)
|
||||||
ON warehouse.warehouse_id = outbound.warehouse_id
|
ON warehouse.warehouse_id = @warehouse_id
|
||||||
WHERE ISNULL(outbound.quantity, 0) > ISNULL(outbound.allot_quantity, 0);
|
WHERE ISNULL(outbound.quantity, 0) > ISNULL(outbound.allot_quantity, 0)
|
||||||
|
AND (LTRIM(RTRIM(stockout.warehouse_id)) = LTRIM(RTRIM(@warehouse_id))
|
||||||
|
OR (@numeric_warehouse_id IS NOT NULL
|
||||||
|
AND LTRIM(RTRIM(stockout.warehouse_id)) NOT LIKE '%[^0-9]%'
|
||||||
|
AND TRY_CONVERT(decimal(38,0), LTRIM(RTRIM(stockout.warehouse_id))) = @numeric_warehouse_id));
|
||||||
|
|
||||||
EXEC alg.usp_rebuild_space_topology @warehouse_id = @warehouse_id,
|
EXEC alg.usp_rebuild_space_topology @warehouse_id = @warehouse_id,
|
||||||
@snapshot_generation = @snapshot_generation;
|
@snapshot_generation = @snapshot_generation;
|
||||||
@@ -1150,12 +1186,22 @@ BEGIN
|
|||||||
+ (SELECT COUNT_BIG(*) FROM dbo.mydo_job_detail detail WITH (NOLOCK)
|
+ (SELECT COUNT_BIG(*) FROM dbo.mydo_job_detail detail WITH (NOLOCK)
|
||||||
JOIN dbo.mydo_job job WITH (NOLOCK) ON job.job_id = detail.job_id
|
JOIN dbo.mydo_job job WITH (NOLOCK) ON job.job_id = detail.job_id
|
||||||
WHERE job.warehouse_id = @warehouse_id)
|
WHERE job.warehouse_id = @warehouse_id)
|
||||||
+ (SELECT COUNT_BIG(*) FROM dbo.in_stockin_detail inbound WITH (NOLOCK)
|
+ (SELECT COUNT_BIG(*) FROM dbo.in_stockin_detail inbound WITH (NOLOCK)
|
||||||
JOIN dbo.mydo_job_detail detail WITH (NOLOCK) ON detail.stockin_detail_id = inbound.stockin_detail_id
|
JOIN dbo.mydo_job_detail detail WITH (NOLOCK) ON detail.stockin_detail_id = inbound.stockin_detail_id
|
||||||
JOIN dbo.mydo_job job WITH (NOLOCK) ON job.job_id = detail.job_id
|
JOIN dbo.mydo_job job WITH (NOLOCK) ON job.job_id = detail.job_id
|
||||||
WHERE job.finish_time IS NULL OR LTRIM(RTRIM(job.finish_time)) = '')
|
JOIN dbo.in_stockin stockin WITH (NOLOCK) ON stockin.stockin_id = inbound.stockin_id
|
||||||
+ (SELECT COUNT_BIG(*) FROM dbo.out_stockout_detail outbound WITH (NOLOCK)
|
WHERE (job.finish_time IS NULL OR LTRIM(RTRIM(job.finish_time)) = '')
|
||||||
WHERE ISNULL(outbound.quantity, 0) > ISNULL(outbound.allot_quantity, 0));
|
AND (LTRIM(RTRIM(stockin.warehouse_id)) = LTRIM(RTRIM(@warehouse_id))
|
||||||
|
OR (@numeric_warehouse_id IS NOT NULL
|
||||||
|
AND LTRIM(RTRIM(stockin.warehouse_id)) NOT LIKE '%[^0-9]%'
|
||||||
|
AND TRY_CONVERT(decimal(38,0), LTRIM(RTRIM(stockin.warehouse_id))) = @numeric_warehouse_id)))
|
||||||
|
+ (SELECT COUNT_BIG(*) FROM dbo.out_stockout_detail outbound WITH (NOLOCK)
|
||||||
|
JOIN dbo.out_stockout stockout WITH (NOLOCK) ON stockout.stockout_id = outbound.stockout_id
|
||||||
|
WHERE ISNULL(outbound.quantity, 0) > ISNULL(outbound.allot_quantity, 0)
|
||||||
|
AND (LTRIM(RTRIM(stockout.warehouse_id)) = LTRIM(RTRIM(@warehouse_id))
|
||||||
|
OR (@numeric_warehouse_id IS NOT NULL
|
||||||
|
AND LTRIM(RTRIM(stockout.warehouse_id)) NOT LIKE '%[^0-9]%'
|
||||||
|
AND TRY_CONVERT(decimal(38,0), LTRIM(RTRIM(stockout.warehouse_id))) = @numeric_warehouse_id)));
|
||||||
|
|
||||||
SELECT @source_payload = ISNULL(CONVERT(nvarchar(max), (
|
SELECT @source_payload = ISNULL(CONVERT(nvarchar(max), (
|
||||||
SELECT cargo.cargo_space_id AS [@space_id], cargo.warehouse_id AS [@warehouse_id],
|
SELECT cargo.cargo_space_id AS [@space_id], cargo.warehouse_id AS [@warehouse_id],
|
||||||
@@ -1211,26 +1257,38 @@ BEGIN
|
|||||||
inbound.stockin_id AS [@stockin_id], inbound.lot_no AS [@lot_no],
|
inbound.stockin_id AS [@stockin_id], inbound.lot_no AS [@lot_no],
|
||||||
inbound.product_id AS [@product_id], inbound.quantity AS [@quantity],
|
inbound.product_id AS [@product_id], inbound.quantity AS [@quantity],
|
||||||
inbound.assign_num AS [@assign_num], inbound.spare4 AS [@project_no],
|
inbound.assign_num AS [@assign_num], inbound.spare4 AS [@project_no],
|
||||||
job.warehouse_id AS [@warehouse_id], job.task_no AS [@task_no],
|
job.warehouse_id AS [@warehouse_id], stockin.warehouse_id AS [@source_warehouse_id],
|
||||||
|
job.task_no AS [@task_no],
|
||||||
job.tray_code AS [@tray_code], detail.job_id AS [@job_id],
|
job.tray_code AS [@tray_code], detail.job_id AS [@job_id],
|
||||||
detail.in_or_out_id AS [@request_id]
|
detail.in_or_out_id AS [@request_id]
|
||||||
FROM dbo.in_stockin_detail inbound WITH (NOLOCK)
|
FROM dbo.in_stockin_detail inbound WITH (NOLOCK)
|
||||||
JOIN dbo.mydo_job_detail detail WITH (NOLOCK) ON detail.stockin_detail_id = inbound.stockin_detail_id
|
JOIN dbo.mydo_job_detail detail WITH (NOLOCK) ON detail.stockin_detail_id = inbound.stockin_detail_id
|
||||||
JOIN dbo.mydo_job job WITH (NOLOCK) ON job.job_id = detail.job_id
|
JOIN dbo.mydo_job job WITH (NOLOCK) ON job.job_id = detail.job_id
|
||||||
WHERE job.finish_time IS NULL OR LTRIM(RTRIM(job.finish_time)) = ''
|
JOIN dbo.in_stockin stockin WITH (NOLOCK) ON stockin.stockin_id = inbound.stockin_id
|
||||||
|
WHERE (job.finish_time IS NULL OR LTRIM(RTRIM(job.finish_time)) = '')
|
||||||
|
AND (LTRIM(RTRIM(stockin.warehouse_id)) = LTRIM(RTRIM(@warehouse_id))
|
||||||
|
OR (@numeric_warehouse_id IS NOT NULL
|
||||||
|
AND LTRIM(RTRIM(stockin.warehouse_id)) NOT LIKE '%[^0-9]%'
|
||||||
|
AND TRY_CONVERT(decimal(38,0), LTRIM(RTRIM(stockin.warehouse_id))) = @numeric_warehouse_id))
|
||||||
ORDER BY inbound.stockin_detail_id
|
ORDER BY inbound.stockin_detail_id
|
||||||
FOR XML PATH('inbound'), ROOT('inbound_requests'), TYPE
|
FOR XML PATH('inbound'), ROOT('inbound_requests'), TYPE
|
||||||
)), '');
|
)), '');
|
||||||
SET @source_payload = @source_payload + '|OUTBOUND|' + ISNULL(CONVERT(nvarchar(max), (
|
SET @source_payload = @source_payload + '|OUTBOUND|' + ISNULL(CONVERT(nvarchar(max), (
|
||||||
SELECT outbound.stockout_detail_id AS [@stockout_detail_id], outbound.warehouse_id AS [@warehouse_id],
|
SELECT outbound.stockout_detail_id AS [@stockout_detail_id], outbound.warehouse_id AS [@warehouse_id],
|
||||||
|
stockout.warehouse_id AS [@source_warehouse_id],
|
||||||
warehouse.project_no AS [@project_no],
|
warehouse.project_no AS [@project_no],
|
||||||
outbound.product_id AS [@product_id], outbound.lot_no AS [@lot_no],
|
outbound.product_id AS [@product_id], outbound.lot_no AS [@lot_no],
|
||||||
outbound.quantity AS [@quantity], outbound.assign_num AS [@assign_num],
|
outbound.quantity AS [@quantity], outbound.assign_num AS [@assign_num],
|
||||||
outbound.allot_quantity AS [@allot_quantity], outbound.create_time AS [@create_time]
|
outbound.allot_quantity AS [@allot_quantity], outbound.create_time AS [@create_time]
|
||||||
FROM dbo.out_stockout_detail outbound WITH (NOLOCK)
|
FROM dbo.out_stockout_detail outbound WITH (NOLOCK)
|
||||||
|
JOIN dbo.out_stockout stockout WITH (NOLOCK) ON stockout.stockout_id = outbound.stockout_id
|
||||||
LEFT JOIN dbo.bas_warehouse warehouse WITH (NOLOCK)
|
LEFT JOIN dbo.bas_warehouse warehouse WITH (NOLOCK)
|
||||||
ON warehouse.warehouse_id = outbound.warehouse_id
|
ON warehouse.warehouse_id = @warehouse_id
|
||||||
WHERE ISNULL(outbound.quantity, 0) > ISNULL(outbound.allot_quantity, 0)
|
WHERE ISNULL(outbound.quantity, 0) > ISNULL(outbound.allot_quantity, 0)
|
||||||
|
AND (LTRIM(RTRIM(stockout.warehouse_id)) = LTRIM(RTRIM(@warehouse_id))
|
||||||
|
OR (@numeric_warehouse_id IS NOT NULL
|
||||||
|
AND LTRIM(RTRIM(stockout.warehouse_id)) NOT LIKE '%[^0-9]%'
|
||||||
|
AND TRY_CONVERT(decimal(38,0), LTRIM(RTRIM(stockout.warehouse_id))) = @numeric_warehouse_id))
|
||||||
ORDER BY outbound.stockout_detail_id
|
ORDER BY outbound.stockout_detail_id
|
||||||
FOR XML PATH('outbound'), ROOT('outbound_requests'), TYPE
|
FOR XML PATH('outbound'), ROOT('outbound_requests'), TYPE
|
||||||
)), '');
|
)), '');
|
||||||
|
|||||||
@@ -144,6 +144,8 @@ IF EXISTS (
|
|||||||
BEGIN TRY
|
BEGIN TRY
|
||||||
BEGIN TRANSACTION;
|
BEGIN TRANSACTION;
|
||||||
|
|
||||||
|
ALTER TABLE alg.decision_log ALTER COLUMN reason nvarchar(4000) NULL;
|
||||||
|
|
||||||
ALTER TABLE alg.space_topology
|
ALTER TABLE alg.space_topology
|
||||||
ADD snapshot_generation bigint NOT NULL
|
ADD snapshot_generation bigint NOT NULL
|
||||||
CONSTRAINT DF_alg_space_topology_snapshot_generation DEFAULT 0 WITH VALUES;
|
CONSTRAINT DF_alg_space_topology_snapshot_generation DEFAULT 0 WITH VALUES;
|
||||||
@@ -277,8 +279,12 @@ BEGIN
|
|||||||
DECLARE @pre_source_count bigint, @post_source_count bigint,
|
DECLARE @pre_source_count bigint, @post_source_count bigint,
|
||||||
@pre_source_signature varbinary(32), @post_source_signature varbinary(32),
|
@pre_source_signature varbinary(32), @post_source_signature varbinary(32),
|
||||||
@source_payload nvarchar(max), @synchronized_at datetime2,
|
@source_payload nvarchar(max), @synchronized_at datetime2,
|
||||||
|
@numeric_warehouse_id decimal(38,0),
|
||||||
@current_generation bigint;
|
@current_generation bigint;
|
||||||
|
|
||||||
|
IF LTRIM(RTRIM(@warehouse_id)) NOT LIKE '%[^0-9]%'
|
||||||
|
SET @numeric_warehouse_id = TRY_CONVERT(decimal(38,0), LTRIM(RTRIM(@warehouse_id)));
|
||||||
|
|
||||||
BEGIN TRY
|
BEGIN TRY
|
||||||
BEGIN TRANSACTION;
|
BEGIN TRANSACTION;
|
||||||
|
|
||||||
@@ -304,9 +310,19 @@ BEGIN
|
|||||||
JOIN dbo.mydo_job_detail detail WITH (NOLOCK)
|
JOIN dbo.mydo_job_detail detail WITH (NOLOCK)
|
||||||
ON detail.stockin_detail_id = inbound.stockin_detail_id
|
ON detail.stockin_detail_id = inbound.stockin_detail_id
|
||||||
JOIN dbo.mydo_job job WITH (NOLOCK) ON job.job_id = detail.job_id
|
JOIN dbo.mydo_job job WITH (NOLOCK) ON job.job_id = detail.job_id
|
||||||
WHERE job.finish_time IS NULL OR LTRIM(RTRIM(job.finish_time)) = '')
|
JOIN dbo.in_stockin stockin WITH (NOLOCK) ON stockin.stockin_id = inbound.stockin_id
|
||||||
|
WHERE (job.finish_time IS NULL OR LTRIM(RTRIM(job.finish_time)) = '')
|
||||||
|
AND (LTRIM(RTRIM(stockin.warehouse_id)) = LTRIM(RTRIM(@warehouse_id))
|
||||||
|
OR (@numeric_warehouse_id IS NOT NULL
|
||||||
|
AND LTRIM(RTRIM(stockin.warehouse_id)) NOT LIKE '%[^0-9]%'
|
||||||
|
AND TRY_CONVERT(decimal(38,0), LTRIM(RTRIM(stockin.warehouse_id))) = @numeric_warehouse_id)))
|
||||||
+ (SELECT COUNT_BIG(*) FROM dbo.out_stockout_detail outbound WITH (NOLOCK)
|
+ (SELECT COUNT_BIG(*) FROM dbo.out_stockout_detail outbound WITH (NOLOCK)
|
||||||
WHERE ISNULL(outbound.quantity, 0) > ISNULL(outbound.allot_quantity, 0));
|
JOIN dbo.out_stockout stockout WITH (NOLOCK) ON stockout.stockout_id = outbound.stockout_id
|
||||||
|
WHERE ISNULL(outbound.quantity, 0) > ISNULL(outbound.allot_quantity, 0)
|
||||||
|
AND (LTRIM(RTRIM(stockout.warehouse_id)) = LTRIM(RTRIM(@warehouse_id))
|
||||||
|
OR (@numeric_warehouse_id IS NOT NULL
|
||||||
|
AND LTRIM(RTRIM(stockout.warehouse_id)) NOT LIKE '%[^0-9]%'
|
||||||
|
AND TRY_CONVERT(decimal(38,0), LTRIM(RTRIM(stockout.warehouse_id))) = @numeric_warehouse_id)));
|
||||||
|
|
||||||
SELECT @source_payload = ISNULL(CONVERT(nvarchar(max), (
|
SELECT @source_payload = ISNULL(CONVERT(nvarchar(max), (
|
||||||
SELECT cargo.cargo_space_id AS [@space_id], cargo.warehouse_id AS [@warehouse_id],
|
SELECT cargo.cargo_space_id AS [@space_id], cargo.warehouse_id AS [@warehouse_id],
|
||||||
@@ -363,27 +379,39 @@ BEGIN
|
|||||||
inbound.stockin_id AS [@stockin_id], inbound.lot_no AS [@lot_no],
|
inbound.stockin_id AS [@stockin_id], inbound.lot_no AS [@lot_no],
|
||||||
inbound.product_id AS [@product_id], inbound.quantity AS [@quantity],
|
inbound.product_id AS [@product_id], inbound.quantity AS [@quantity],
|
||||||
inbound.assign_num AS [@assign_num], inbound.spare4 AS [@project_no],
|
inbound.assign_num AS [@assign_num], inbound.spare4 AS [@project_no],
|
||||||
job.warehouse_id AS [@warehouse_id], job.task_no AS [@task_no],
|
job.warehouse_id AS [@warehouse_id], stockin.warehouse_id AS [@source_warehouse_id],
|
||||||
|
job.task_no AS [@task_no],
|
||||||
job.tray_code AS [@tray_code], detail.job_id AS [@job_id],
|
job.tray_code AS [@tray_code], detail.job_id AS [@job_id],
|
||||||
detail.in_or_out_id AS [@request_id]
|
detail.in_or_out_id AS [@request_id]
|
||||||
FROM dbo.in_stockin_detail inbound WITH (NOLOCK)
|
FROM dbo.in_stockin_detail inbound WITH (NOLOCK)
|
||||||
JOIN dbo.mydo_job_detail detail WITH (NOLOCK)
|
JOIN dbo.mydo_job_detail detail WITH (NOLOCK)
|
||||||
ON detail.stockin_detail_id = inbound.stockin_detail_id
|
ON detail.stockin_detail_id = inbound.stockin_detail_id
|
||||||
JOIN dbo.mydo_job job WITH (NOLOCK) ON job.job_id = detail.job_id
|
JOIN dbo.mydo_job job WITH (NOLOCK) ON job.job_id = detail.job_id
|
||||||
WHERE job.finish_time IS NULL OR LTRIM(RTRIM(job.finish_time)) = ''
|
JOIN dbo.in_stockin stockin WITH (NOLOCK) ON stockin.stockin_id = inbound.stockin_id
|
||||||
|
WHERE (job.finish_time IS NULL OR LTRIM(RTRIM(job.finish_time)) = '')
|
||||||
|
AND (LTRIM(RTRIM(stockin.warehouse_id)) = LTRIM(RTRIM(@warehouse_id))
|
||||||
|
OR (@numeric_warehouse_id IS NOT NULL
|
||||||
|
AND LTRIM(RTRIM(stockin.warehouse_id)) NOT LIKE '%[^0-9]%'
|
||||||
|
AND TRY_CONVERT(decimal(38,0), LTRIM(RTRIM(stockin.warehouse_id))) = @numeric_warehouse_id))
|
||||||
ORDER BY inbound.stockin_detail_id
|
ORDER BY inbound.stockin_detail_id
|
||||||
FOR XML PATH('inbound'), ROOT('inbound_requests'), TYPE
|
FOR XML PATH('inbound'), ROOT('inbound_requests'), TYPE
|
||||||
)), '');
|
)), '');
|
||||||
SET @source_payload = @source_payload + '|OUTBOUND|' + ISNULL(CONVERT(nvarchar(max), (
|
SET @source_payload = @source_payload + '|OUTBOUND|' + ISNULL(CONVERT(nvarchar(max), (
|
||||||
SELECT outbound.stockout_detail_id AS [@stockout_detail_id], outbound.warehouse_id AS [@warehouse_id],
|
SELECT outbound.stockout_detail_id AS [@stockout_detail_id], outbound.warehouse_id AS [@warehouse_id],
|
||||||
|
stockout.warehouse_id AS [@source_warehouse_id],
|
||||||
warehouse.project_no AS [@project_no],
|
warehouse.project_no AS [@project_no],
|
||||||
outbound.product_id AS [@product_id], outbound.lot_no AS [@lot_no],
|
outbound.product_id AS [@product_id], outbound.lot_no AS [@lot_no],
|
||||||
outbound.quantity AS [@quantity], outbound.assign_num AS [@assign_num],
|
outbound.quantity AS [@quantity], outbound.assign_num AS [@assign_num],
|
||||||
outbound.allot_quantity AS [@allot_quantity], outbound.create_time AS [@create_time]
|
outbound.allot_quantity AS [@allot_quantity], outbound.create_time AS [@create_time]
|
||||||
FROM dbo.out_stockout_detail outbound WITH (NOLOCK)
|
FROM dbo.out_stockout_detail outbound WITH (NOLOCK)
|
||||||
|
JOIN dbo.out_stockout stockout WITH (NOLOCK) ON stockout.stockout_id = outbound.stockout_id
|
||||||
LEFT JOIN dbo.bas_warehouse warehouse WITH (NOLOCK)
|
LEFT JOIN dbo.bas_warehouse warehouse WITH (NOLOCK)
|
||||||
ON warehouse.warehouse_id = outbound.warehouse_id
|
ON warehouse.warehouse_id = @warehouse_id
|
||||||
WHERE ISNULL(outbound.quantity, 0) > ISNULL(outbound.allot_quantity, 0)
|
WHERE ISNULL(outbound.quantity, 0) > ISNULL(outbound.allot_quantity, 0)
|
||||||
|
AND (LTRIM(RTRIM(stockout.warehouse_id)) = LTRIM(RTRIM(@warehouse_id))
|
||||||
|
OR (@numeric_warehouse_id IS NOT NULL
|
||||||
|
AND LTRIM(RTRIM(stockout.warehouse_id)) NOT LIKE '%[^0-9]%'
|
||||||
|
AND TRY_CONVERT(decimal(38,0), LTRIM(RTRIM(stockout.warehouse_id))) = @numeric_warehouse_id))
|
||||||
ORDER BY outbound.stockout_detail_id
|
ORDER BY outbound.stockout_detail_id
|
||||||
FOR XML PATH('outbound'), ROOT('outbound_requests'), TYPE
|
FOR XML PATH('outbound'), ROOT('outbound_requests'), TYPE
|
||||||
)), '');
|
)), '');
|
||||||
@@ -445,7 +473,12 @@ BEGIN
|
|||||||
JOIN dbo.mydo_job_detail detail WITH (NOLOCK)
|
JOIN dbo.mydo_job_detail detail WITH (NOLOCK)
|
||||||
ON detail.stockin_detail_id = inbound.stockin_detail_id
|
ON detail.stockin_detail_id = inbound.stockin_detail_id
|
||||||
JOIN dbo.mydo_job job WITH (NOLOCK) ON job.job_id = detail.job_id
|
JOIN dbo.mydo_job job WITH (NOLOCK) ON job.job_id = detail.job_id
|
||||||
WHERE job.finish_time IS NULL OR LTRIM(RTRIM(job.finish_time)) = ''
|
JOIN dbo.in_stockin stockin WITH (NOLOCK) ON stockin.stockin_id = inbound.stockin_id
|
||||||
|
WHERE (job.finish_time IS NULL OR LTRIM(RTRIM(job.finish_time)) = '')
|
||||||
|
AND (LTRIM(RTRIM(stockin.warehouse_id)) = LTRIM(RTRIM(@warehouse_id))
|
||||||
|
OR (@numeric_warehouse_id IS NOT NULL
|
||||||
|
AND LTRIM(RTRIM(stockin.warehouse_id)) NOT LIKE '%[^0-9]%'
|
||||||
|
AND TRY_CONVERT(decimal(38,0), LTRIM(RTRIM(stockin.warehouse_id))) = @numeric_warehouse_id))
|
||||||
)
|
)
|
||||||
INSERT INTO alg.shadow_inbound_request_snapshot (
|
INSERT INTO alg.shadow_inbound_request_snapshot (
|
||||||
warehouse_id, task_no, tray_no, request_id, raw_warehouse_id,
|
warehouse_id, task_no, tray_no, request_id, raw_warehouse_id,
|
||||||
@@ -464,9 +497,14 @@ BEGIN
|
|||||||
CONVERT(decimal(38,6), outbound.quantity),
|
CONVERT(decimal(38,6), outbound.quantity),
|
||||||
@snapshot_generation, @synchronized_at
|
@snapshot_generation, @synchronized_at
|
||||||
FROM dbo.out_stockout_detail outbound WITH (NOLOCK)
|
FROM dbo.out_stockout_detail outbound WITH (NOLOCK)
|
||||||
|
JOIN dbo.out_stockout stockout WITH (NOLOCK) ON stockout.stockout_id = outbound.stockout_id
|
||||||
LEFT JOIN dbo.bas_warehouse warehouse WITH (NOLOCK)
|
LEFT JOIN dbo.bas_warehouse warehouse WITH (NOLOCK)
|
||||||
ON warehouse.warehouse_id = outbound.warehouse_id
|
ON warehouse.warehouse_id = @warehouse_id
|
||||||
WHERE ISNULL(outbound.quantity, 0) > ISNULL(outbound.allot_quantity, 0);
|
WHERE ISNULL(outbound.quantity, 0) > ISNULL(outbound.allot_quantity, 0)
|
||||||
|
AND (LTRIM(RTRIM(stockout.warehouse_id)) = LTRIM(RTRIM(@warehouse_id))
|
||||||
|
OR (@numeric_warehouse_id IS NOT NULL
|
||||||
|
AND LTRIM(RTRIM(stockout.warehouse_id)) NOT LIKE '%[^0-9]%'
|
||||||
|
AND TRY_CONVERT(decimal(38,0), LTRIM(RTRIM(stockout.warehouse_id))) = @numeric_warehouse_id));
|
||||||
|
|
||||||
EXEC alg.usp_rebuild_space_topology @warehouse_id = @warehouse_id,
|
EXEC alg.usp_rebuild_space_topology @warehouse_id = @warehouse_id,
|
||||||
@snapshot_generation = @snapshot_generation;
|
@snapshot_generation = @snapshot_generation;
|
||||||
@@ -487,9 +525,19 @@ BEGIN
|
|||||||
+ (SELECT COUNT_BIG(*) FROM dbo.in_stockin_detail inbound WITH (NOLOCK)
|
+ (SELECT COUNT_BIG(*) FROM dbo.in_stockin_detail inbound WITH (NOLOCK)
|
||||||
JOIN dbo.mydo_job_detail detail WITH (NOLOCK) ON detail.stockin_detail_id = inbound.stockin_detail_id
|
JOIN dbo.mydo_job_detail detail WITH (NOLOCK) ON detail.stockin_detail_id = inbound.stockin_detail_id
|
||||||
JOIN dbo.mydo_job job WITH (NOLOCK) ON job.job_id = detail.job_id
|
JOIN dbo.mydo_job job WITH (NOLOCK) ON job.job_id = detail.job_id
|
||||||
WHERE job.finish_time IS NULL OR LTRIM(RTRIM(job.finish_time)) = '')
|
JOIN dbo.in_stockin stockin WITH (NOLOCK) ON stockin.stockin_id = inbound.stockin_id
|
||||||
|
WHERE (job.finish_time IS NULL OR LTRIM(RTRIM(job.finish_time)) = '')
|
||||||
|
AND (LTRIM(RTRIM(stockin.warehouse_id)) = LTRIM(RTRIM(@warehouse_id))
|
||||||
|
OR (@numeric_warehouse_id IS NOT NULL
|
||||||
|
AND LTRIM(RTRIM(stockin.warehouse_id)) NOT LIKE '%[^0-9]%'
|
||||||
|
AND TRY_CONVERT(decimal(38,0), LTRIM(RTRIM(stockin.warehouse_id))) = @numeric_warehouse_id)))
|
||||||
+ (SELECT COUNT_BIG(*) FROM dbo.out_stockout_detail outbound WITH (NOLOCK)
|
+ (SELECT COUNT_BIG(*) FROM dbo.out_stockout_detail outbound WITH (NOLOCK)
|
||||||
WHERE ISNULL(outbound.quantity, 0) > ISNULL(outbound.allot_quantity, 0));
|
JOIN dbo.out_stockout stockout WITH (NOLOCK) ON stockout.stockout_id = outbound.stockout_id
|
||||||
|
WHERE ISNULL(outbound.quantity, 0) > ISNULL(outbound.allot_quantity, 0)
|
||||||
|
AND (LTRIM(RTRIM(stockout.warehouse_id)) = LTRIM(RTRIM(@warehouse_id))
|
||||||
|
OR (@numeric_warehouse_id IS NOT NULL
|
||||||
|
AND LTRIM(RTRIM(stockout.warehouse_id)) NOT LIKE '%[^0-9]%'
|
||||||
|
AND TRY_CONVERT(decimal(38,0), LTRIM(RTRIM(stockout.warehouse_id))) = @numeric_warehouse_id)));
|
||||||
|
|
||||||
SELECT @source_payload = ISNULL(CONVERT(nvarchar(max), (
|
SELECT @source_payload = ISNULL(CONVERT(nvarchar(max), (
|
||||||
SELECT cargo.cargo_space_id AS [@space_id], cargo.warehouse_id AS [@warehouse_id],
|
SELECT cargo.cargo_space_id AS [@space_id], cargo.warehouse_id AS [@warehouse_id],
|
||||||
@@ -544,25 +592,37 @@ BEGIN
|
|||||||
SELECT inbound.stockin_detail_id AS [@stockin_detail_id], inbound.stockin_guid AS [@stockin_guid],
|
SELECT inbound.stockin_detail_id AS [@stockin_detail_id], inbound.stockin_guid AS [@stockin_guid],
|
||||||
inbound.stockin_id AS [@stockin_id], inbound.lot_no AS [@lot_no], inbound.product_id AS [@product_id],
|
inbound.stockin_id AS [@stockin_id], inbound.lot_no AS [@lot_no], inbound.product_id AS [@product_id],
|
||||||
inbound.quantity AS [@quantity], inbound.assign_num AS [@assign_num], inbound.spare4 AS [@project_no],
|
inbound.quantity AS [@quantity], inbound.assign_num AS [@assign_num], inbound.spare4 AS [@project_no],
|
||||||
job.warehouse_id AS [@warehouse_id], job.task_no AS [@task_no],
|
job.warehouse_id AS [@warehouse_id], stockin.warehouse_id AS [@source_warehouse_id],
|
||||||
|
job.task_no AS [@task_no],
|
||||||
job.tray_code AS [@tray_code], detail.job_id AS [@job_id],
|
job.tray_code AS [@tray_code], detail.job_id AS [@job_id],
|
||||||
detail.in_or_out_id AS [@request_id]
|
detail.in_or_out_id AS [@request_id]
|
||||||
FROM dbo.in_stockin_detail inbound WITH (NOLOCK)
|
FROM dbo.in_stockin_detail inbound WITH (NOLOCK)
|
||||||
JOIN dbo.mydo_job_detail detail WITH (NOLOCK) ON detail.stockin_detail_id = inbound.stockin_detail_id
|
JOIN dbo.mydo_job_detail detail WITH (NOLOCK) ON detail.stockin_detail_id = inbound.stockin_detail_id
|
||||||
JOIN dbo.mydo_job job WITH (NOLOCK) ON job.job_id = detail.job_id
|
JOIN dbo.mydo_job job WITH (NOLOCK) ON job.job_id = detail.job_id
|
||||||
WHERE job.finish_time IS NULL OR LTRIM(RTRIM(job.finish_time)) = ''
|
JOIN dbo.in_stockin stockin WITH (NOLOCK) ON stockin.stockin_id = inbound.stockin_id
|
||||||
|
WHERE (job.finish_time IS NULL OR LTRIM(RTRIM(job.finish_time)) = '')
|
||||||
|
AND (LTRIM(RTRIM(stockin.warehouse_id)) = LTRIM(RTRIM(@warehouse_id))
|
||||||
|
OR (@numeric_warehouse_id IS NOT NULL
|
||||||
|
AND LTRIM(RTRIM(stockin.warehouse_id)) NOT LIKE '%[^0-9]%'
|
||||||
|
AND TRY_CONVERT(decimal(38,0), LTRIM(RTRIM(stockin.warehouse_id))) = @numeric_warehouse_id))
|
||||||
ORDER BY inbound.stockin_detail_id
|
ORDER BY inbound.stockin_detail_id
|
||||||
FOR XML PATH('inbound'), ROOT('inbound_requests'), TYPE
|
FOR XML PATH('inbound'), ROOT('inbound_requests'), TYPE
|
||||||
)), '');
|
)), '');
|
||||||
SET @source_payload = @source_payload + '|OUTBOUND|' + ISNULL(CONVERT(nvarchar(max), (
|
SET @source_payload = @source_payload + '|OUTBOUND|' + ISNULL(CONVERT(nvarchar(max), (
|
||||||
SELECT outbound.stockout_detail_id AS [@stockout_detail_id], outbound.warehouse_id AS [@warehouse_id],
|
SELECT outbound.stockout_detail_id AS [@stockout_detail_id], outbound.warehouse_id AS [@warehouse_id],
|
||||||
|
stockout.warehouse_id AS [@source_warehouse_id],
|
||||||
warehouse.project_no AS [@project_no],
|
warehouse.project_no AS [@project_no],
|
||||||
outbound.product_id AS [@product_id], outbound.lot_no AS [@lot_no], outbound.quantity AS [@quantity],
|
outbound.product_id AS [@product_id], outbound.lot_no AS [@lot_no], outbound.quantity AS [@quantity],
|
||||||
outbound.assign_num AS [@assign_num], outbound.allot_quantity AS [@allot_quantity], outbound.create_time AS [@create_time]
|
outbound.assign_num AS [@assign_num], outbound.allot_quantity AS [@allot_quantity], outbound.create_time AS [@create_time]
|
||||||
FROM dbo.out_stockout_detail outbound WITH (NOLOCK)
|
FROM dbo.out_stockout_detail outbound WITH (NOLOCK)
|
||||||
|
JOIN dbo.out_stockout stockout WITH (NOLOCK) ON stockout.stockout_id = outbound.stockout_id
|
||||||
LEFT JOIN dbo.bas_warehouse warehouse WITH (NOLOCK)
|
LEFT JOIN dbo.bas_warehouse warehouse WITH (NOLOCK)
|
||||||
ON warehouse.warehouse_id = outbound.warehouse_id
|
ON warehouse.warehouse_id = @warehouse_id
|
||||||
WHERE ISNULL(outbound.quantity, 0) > ISNULL(outbound.allot_quantity, 0)
|
WHERE ISNULL(outbound.quantity, 0) > ISNULL(outbound.allot_quantity, 0)
|
||||||
|
AND (LTRIM(RTRIM(stockout.warehouse_id)) = LTRIM(RTRIM(@warehouse_id))
|
||||||
|
OR (@numeric_warehouse_id IS NOT NULL
|
||||||
|
AND LTRIM(RTRIM(stockout.warehouse_id)) NOT LIKE '%[^0-9]%'
|
||||||
|
AND TRY_CONVERT(decimal(38,0), LTRIM(RTRIM(stockout.warehouse_id))) = @numeric_warehouse_id))
|
||||||
ORDER BY outbound.stockout_detail_id
|
ORDER BY outbound.stockout_detail_id
|
||||||
FOR XML PATH('outbound'), ROOT('outbound_requests'), TYPE
|
FOR XML PATH('outbound'), ROOT('outbound_requests'), TYPE
|
||||||
)), '');
|
)), '');
|
||||||
|
|||||||
@@ -218,15 +218,30 @@ class ShadowSqlServerMigrationScriptTest {
|
|||||||
assertThat(refresh).as(script).contains(
|
assertThat(refresh).as(script).contains(
|
||||||
"select @warehouse_id, isnull(task_no, ''), isnull(tray_code, ''), request_id, raw_warehouse_id",
|
"select @warehouse_id, isnull(task_no, ''), isnull(tray_code, ''), request_id, raw_warehouse_id",
|
||||||
"select @warehouse_id, outbound.stockout_detail_id, outbound.warehouse_id",
|
"select @warehouse_id, outbound.stockout_detail_id, outbound.warehouse_id",
|
||||||
|
"join dbo.in_stockin stockin with (nolock) on stockin.stockin_id = inbound.stockin_id",
|
||||||
|
"join dbo.out_stockout stockout with (nolock) on stockout.stockout_id = outbound.stockout_id",
|
||||||
"left join dbo.bas_warehouse warehouse with (nolock)",
|
"left join dbo.bas_warehouse warehouse with (nolock)",
|
||||||
|
"on warehouse.warehouse_id = @warehouse_id",
|
||||||
"nullif(ltrim(rtrim(warehouse.project_no)), '')",
|
"nullif(ltrim(rtrim(warehouse.project_no)), '')",
|
||||||
|
"try_convert(decimal(38,0), ltrim(rtrim(stockin.warehouse_id))) = @numeric_warehouse_id",
|
||||||
|
"try_convert(decimal(38,0), ltrim(rtrim(stockout.warehouse_id))) = @numeric_warehouse_id",
|
||||||
"job.finish_time is null or ltrim(rtrim(job.finish_time)) = ''",
|
"job.finish_time is null or ltrim(rtrim(job.finish_time)) = ''",
|
||||||
"isnull(outbound.quantity, 0) > isnull(outbound.allot_quantity, 0)");
|
"isnull(outbound.quantity, 0) > isnull(outbound.allot_quantity, 0)");
|
||||||
assertThat(refresh).as(script).doesNotContain(
|
assertThat(refresh).as(script).doesNotContain(
|
||||||
"select outbound.warehouse_id, outbound.stockout_detail_id, outbound.warehouse_id, null");
|
"select outbound.warehouse_id, outbound.stockout_detail_id, outbound.warehouse_id, null",
|
||||||
|
"on warehouse.warehouse_id = outbound.warehouse_id");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void decisionReasonStoresBoundedUnicodeDiagnosticsAcrossCleanInstallAndUpgrade() throws IOException {
|
||||||
|
String install = normalize(resource("db/sqlserver/install-shadow.sql"));
|
||||||
|
String upgrade = normalize(resource("db/sqlserver/upgrade-shadow-v2-to-v3.sql"));
|
||||||
|
|
||||||
|
assertThat(install).contains("reason nvarchar(4000) null");
|
||||||
|
assertThat(upgrade).contains("alter table alg.decision_log alter column reason nvarchar(4000) null");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void plannerViewsContainOnlyGenerationQualifiedAlgSnapshots() throws IOException {
|
void plannerViewsContainOnlyGenerationQualifiedAlgSnapshots() throws IOException {
|
||||||
String install = normalize(resource("db/sqlserver/install-shadow.sql"));
|
String install = normalize(resource("db/sqlserver/install-shadow.sql"));
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ import java.util.function.Supplier;
|
|||||||
@Component
|
@Component
|
||||||
public class ShadowPlanningEngine {
|
public class ShadowPlanningEngine {
|
||||||
private static final int INSTANCE_STALE_SECONDS = 120;
|
private static final int INSTANCE_STALE_SECONDS = 120;
|
||||||
private static final int DECISION_REASON_MAX_LENGTH = 2000;
|
private static final int DECISION_REASON_MAX_LENGTH = 4000;
|
||||||
private static final String PUBLISHED = "PUBLISHED";
|
private static final String PUBLISHED = "PUBLISHED";
|
||||||
|
|
||||||
private final SchedulingFacade schedulingFacade;
|
private final SchedulingFacade schedulingFacade;
|
||||||
@@ -128,9 +128,9 @@ public class ShadowPlanningEngine {
|
|||||||
+ "; request=" + observation.requestId()
|
+ "; request=" + observation.requestId()
|
||||||
+ "; shadow=" + observation.resultCode()
|
+ "; shadow=" + observation.resultCode()
|
||||||
+ "; proposedSpace=" + nullSafe(observation.proposedSpaceId())
|
+ "; proposedSpace=" + nullSafe(observation.proposedSpaceId())
|
||||||
+ "; shadowReason=" + nullSafe(observation.reason())
|
|
||||||
+ "; legacy=" + nullSafe(legacyResultCode)
|
+ "; legacy=" + nullSafe(legacyResultCode)
|
||||||
+ "; legacySpace=" + nullSafe(legacySpaceId), DECISION_REASON_MAX_LENGTH));
|
+ "; legacySpace=" + nullSafe(legacySpaceId)
|
||||||
|
+ "; shadowReason=" + nullSafe(observation.reason()), DECISION_REASON_MAX_LENGTH));
|
||||||
requireComparisonInserted(inserted);
|
requireComparisonInserted(inserted);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -149,8 +149,8 @@ public class ShadowPlanningEngine {
|
|||||||
+ "; shadow=" + observation.resultCode()
|
+ "; shadow=" + observation.resultCode()
|
||||||
+ "; proposedStock=" + nullSafe(observation.proposedStockId())
|
+ "; proposedStock=" + nullSafe(observation.proposedStockId())
|
||||||
+ "; proposedSpace=" + nullSafe(observation.proposedSpaceId())
|
+ "; proposedSpace=" + nullSafe(observation.proposedSpaceId())
|
||||||
+ "; shadowReason=" + nullSafe(observation.reason())
|
+ "; legacy=" + nullSafe(legacyResultCode)
|
||||||
+ "; legacy=" + nullSafe(legacyResultCode), DECISION_REASON_MAX_LENGTH));
|
+ "; shadowReason=" + nullSafe(observation.reason()), DECISION_REASON_MAX_LENGTH));
|
||||||
requireComparisonInserted(inserted);
|
requireComparisonInserted(inserted);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ import com.ruoyi.algorithm.repository.VersionToken;
|
|||||||
import com.ruoyi.algorithm.service.InboundPlanningResult;
|
import com.ruoyi.algorithm.service.InboundPlanningResult;
|
||||||
import com.ruoyi.algorithm.shadow.mapper.ShadowInputMapper;
|
import com.ruoyi.algorithm.shadow.mapper.ShadowInputMapper;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
|
import org.mockito.ArgumentCaptor;
|
||||||
import org.springframework.transaction.PlatformTransactionManager;
|
import org.springframework.transaction.PlatformTransactionManager;
|
||||||
import org.springframework.transaction.TransactionDefinition;
|
import org.springframework.transaction.TransactionDefinition;
|
||||||
import org.springframework.transaction.TransactionStatus;
|
import org.springframework.transaction.TransactionStatus;
|
||||||
@@ -207,20 +208,49 @@ class ShadowPlanningEngineTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void comparisonReasonIsBoundedToDecisionLogCapacity() {
|
void inboundComparisonRetainsRequiredEvidenceWhenUnicodeReasonIsOversized() {
|
||||||
ShadowInputMapper mapper = mock(ShadowInputMapper.class);
|
ShadowInputMapper mapper = mock(ShadowInputMapper.class);
|
||||||
when(mapper.insertComparison(any(), any(), any(), any(Long.class),
|
when(mapper.insertComparison(any(), any(), any(), any(Long.class),
|
||||||
any(Instant.class), any(), any(), any())).thenReturn(1);
|
any(Instant.class), any(), any(), any())).thenReturn(1);
|
||||||
ShadowPlanningEngine engine = engine(mock(SchedulingFacade.class), mapper);
|
ShadowPlanningEngine engine = engine(mock(SchedulingFacade.class), mapper);
|
||||||
|
String shadowDiagnostic = "snapshotGeneration=42; snapshotSync=2026-09-03T00:00:00Z"
|
||||||
|
+ "; sourceSignature=ABC123; project=" + "中".repeat(255)
|
||||||
|
+ "; shadowCandidates=17; reason=" + "长".repeat(5000);
|
||||||
InboundShadowObservation observation = new InboundShadowObservation(
|
InboundShadowObservation observation = new InboundShadowObservation(
|
||||||
true, 42L, "01", SNAPSHOT.synchronizedAt(), SNAPSHOT.sourceSignature(),
|
true, 42L, "01", SNAPSHOT.synchronizedAt(), SNAPSHOT.sourceSignature(),
|
||||||
"JOB-1", "READY", "SPACE-9", "X".repeat(2500));
|
"JOB-1", "READY", "SPACE-9", shadowDiagnostic);
|
||||||
|
|
||||||
engine.compareInbound(observation, "READY", "SPACE-9");
|
engine.compareInbound(observation, "READY", "LEGACY-SPACE-9");
|
||||||
|
|
||||||
|
ArgumentCaptor<String> reason = ArgumentCaptor.forClass(String.class);
|
||||||
verify(mapper).insertComparison(any(), any(), any(), any(Long.class),
|
verify(mapper).insertComparison(any(), any(), any(), any(Long.class),
|
||||||
any(Instant.class), any(), any(),
|
any(Instant.class), any(), any(),
|
||||||
argThat(reason -> reason.length() <= 2000));
|
reason.capture());
|
||||||
|
assertThat(reason.getValue()).hasSizeLessThanOrEqualTo(4000)
|
||||||
|
.contains("sourceSignature=ABC123", "shadowCandidates=17",
|
||||||
|
"legacy=READY", "legacySpace=LEGACY-SPACE-9");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void outboundComparisonRetainsLegacyOutcomeAndCandidateEvidenceWhenReasonIsOversized() {
|
||||||
|
ShadowInputMapper mapper = mock(ShadowInputMapper.class);
|
||||||
|
when(mapper.insertComparison(any(), any(), any(), any(Long.class),
|
||||||
|
any(Instant.class), any(), any(), any())).thenReturn(1);
|
||||||
|
ShadowPlanningEngine engine = engine(mock(SchedulingFacade.class), mapper);
|
||||||
|
String shadowDiagnostic = "snapshotGeneration=42; snapshotSync=2026-09-03T00:00:00Z"
|
||||||
|
+ "; sourceSignature=ABC123; project=" + "中".repeat(255)
|
||||||
|
+ "; shadowMatches=23; reason=" + "长".repeat(5000);
|
||||||
|
OutboundShadowObservation observation = new OutboundShadowObservation(
|
||||||
|
true, 42L, "01", SNAPSHOT.synchronizedAt(), SNAPSHOT.sourceSignature(),
|
||||||
|
"DETAIL-1", "READY", "STOCK-1", "SPACE-9", shadowDiagnostic);
|
||||||
|
|
||||||
|
engine.compareOutbound(observation, "10");
|
||||||
|
|
||||||
|
ArgumentCaptor<String> reason = ArgumentCaptor.forClass(String.class);
|
||||||
|
verify(mapper).insertComparison(any(), any(), any(), any(Long.class),
|
||||||
|
any(Instant.class), any(), any(), reason.capture());
|
||||||
|
assertThat(reason.getValue()).hasSizeLessThanOrEqualTo(4000)
|
||||||
|
.contains("sourceSignature=ABC123", "shadowMatches=23", "legacy=10");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|||||||
Reference in New Issue
Block a user