feat: 打通出库作业链路

This commit is contained in:
zgw
2026-06-24 09:13:18 +08:00
parent a3c023a8d3
commit 1af5b3cbd3
141 changed files with 17337 additions and 1065 deletions

View File

@@ -0,0 +1,85 @@
IF OBJECT_ID(N'[dbo].[proc_hand_delete_in_job]', N'P') IS NOT NULL
DROP PROCEDURE [dbo].[proc_hand_delete_in_job]
GO
CREATE PROCEDURE [dbo].[proc_hand_delete_in_job]
@v_job_id varchar(80),
@v_result int OUTPUT,
@v_resultmsg varchar(500) OUTPUT
AS
BEGIN
SET NOCOUNT ON;
SET XACT_ABORT ON;
DECLARE @v_tray_code varchar(255);
DECLARE @v_cargo_space_id varchar(80);
BEGIN TRY
IF @v_job_id IS NULL OR LTRIM(RTRIM(@v_job_id)) = ''
BEGIN
SET @v_result = 0;
SET @v_resultmsg = '作业ID不能为空';
RETURN;
END
SELECT TOP 1
@v_tray_code = tray_code,
@v_cargo_space_id = cargo_space_id
FROM dbo.mydo_job
WHERE job_id = @v_job_id
AND in_or_out = 1;
IF @v_tray_code IS NULL AND @v_cargo_space_id IS NULL
BEGIN
SET @v_result = 0;
SET @v_resultmsg = '未找到对应入库作业';
RETURN;
END
BEGIN TRANSACTION;
;WITH detail_qty AS (
SELECT
COALESCE(NULLIF(stockin_detail_id, ''), NULLIF(in_or_out_d_id, '')) AS stockin_detail_id,
SUM(ISNULL(in_quantity, 0)) AS rollback_qty
FROM dbo.mydo_job_detail
WHERE job_id = @v_job_id
AND COALESCE(NULLIF(stockin_detail_id, ''), NULLIF(in_or_out_d_id, '')) IS NOT NULL
GROUP BY COALESCE(NULLIF(stockin_detail_id, ''), NULLIF(in_or_out_d_id, ''))
)
UPDATE d
SET d.scan_num = CASE
WHEN ISNULL(d.scan_num, 0) - q.rollback_qty < 0 THEN 0
ELSE ISNULL(d.scan_num, 0) - q.rollback_qty
END
FROM dbo.in_stockin_detail d
INNER JOIN detail_qty q ON d.stockin_detail_id = q.stockin_detail_id;
UPDATE dbo.bas_cargo_space
SET status = '1',
locked = 'N',
tray_code = NULL
WHERE cargo_space_id = @v_cargo_space_id
OR (tray_code = @v_tray_code AND status = '3' AND locked = 'Y');
DELETE FROM dbo.mydo_job_detail
WHERE job_id = @v_job_id;
DELETE FROM dbo.mydo_job
WHERE job_id = @v_job_id
AND in_or_out = 1;
COMMIT TRANSACTION;
SET @v_result = 10;
SET @v_resultmsg = '入库作业已作废';
END TRY
BEGIN CATCH
IF @@TRANCOUNT > 0
ROLLBACK TRANSACTION;
SET @v_result = 0;
SET @v_resultmsg = ERROR_MESSAGE();
END CATCH
END
GO