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,126 @@
IF OBJECT_ID(N'[dbo].[proc_add_in_job]', N'P') IS NOT NULL
DROP PROCEDURE [dbo].[proc_add_in_job]
GO
CREATE PROCEDURE [dbo].[proc_add_in_job]
@tray_code NVARCHAR(255),
@warehouse_id NVARCHAR(255),
@user_id INT,
@dept_id INT,
@v_result INT OUTPUT,
@v_resultmsg VARCHAR(80) OUTPUT
AS
BEGIN
SET NOCOUNT ON;
SET XACT_ABORT ON;
DECLARE
@task_no varchar(255),
@job_id varchar(255),
@now DATETIME = GETDATE();
DECLARE
@row_idx INT = 1,
@job_detail_id NVARCHAR(80),
@product_id NVARCHAR(255),
@product_name NVARCHAR(255),
@lot_no NVARCHAR(80),
@quantity DECIMAL(18),
@stockin_id NVARCHAR(80),
@stockin_detail_id NVARCHAR(255);
IF NOT EXISTS (SELECT 1 FROM dbo.in_tray_msg WHERE tray_code = @tray_code AND warehouse_id = @warehouse_id)
BEGIN
SET @v_result = 0;
SET @v_resultmsg = '错误:托盘无绑定数据';
RETURN;
END
IF EXISTS (SELECT 1 FROM dbo.mydo_job WHERE tray_code = @tray_code AND warehouse_id = @warehouse_id)
BEGIN
SET @v_result = 0;
SET @v_resultmsg = '错误:该托盘已生成作业';
RETURN;
END
BEGIN TRY
DECLARE cur_tray CURSOR LOCAL FAST_FORWARD FOR
SELECT
tm.product_id,
ISNULL(d.product_name, ''),
ISNULL(d.lot_no, ''),
tm.quantity,
ISNULL(d.stockin_id, ''),
tm.stockin_detail_id
FROM dbo.in_tray_msg tm
LEFT JOIN dbo.in_stockin_detail d ON tm.stockin_detail_id = d.stockin_detail_id
WHERE tm.tray_code = @tray_code
AND tm.warehouse_id = @warehouse_id;
BEGIN TRANSACTION;
EXEC dbo.util_serial_job 'RK', @job_id OUTPUT;
EXEC dbo.util_serial_task '1', @task_no OUTPUT;
INSERT INTO dbo.mydo_job (
job_id, status, task_no, in_or_out, execution_phase,
tray_code, warehouse_id, create_time,
user_id, dept_id, priority, height, weight
)
VALUES (
@job_id, '1', @task_no, 1, '0',
@tray_code, @warehouse_id, @now,
@user_id, @dept_id, 10, 0.00, 0.00
);
OPEN cur_tray;
FETCH NEXT FROM cur_tray INTO
@product_id, @product_name, @lot_no, @quantity, @stockin_id, @stockin_detail_id;
WHILE @@FETCH_STATUS = 0
BEGIN
SET @job_detail_id = @job_id + '-' + CAST(@row_idx AS VARCHAR);
-- stockin_id/stockin_detail_id 为入库单追溯字段;in_or_out_id/in_or_out_d_id 为通用出入库追溯字段。
INSERT INTO dbo.mydo_job_detail (
job_detail_id, job_id, product_id, product_name,
lot_no, in_quantity, in_or_out_id, in_or_out_d_id,
stockin_id, stockin_detail_id
)
VALUES (
@job_detail_id, @job_id, @product_id, @product_name,
@lot_no, @quantity, @stockin_id, @stockin_detail_id,
@stockin_id, @stockin_detail_id
);
SET @row_idx += 1;
FETCH NEXT FROM cur_tray INTO
@product_id, @product_name, @lot_no, @quantity, @stockin_id, @stockin_detail_id;
END
CLOSE cur_tray;
DEALLOCATE cur_tray;
DELETE FROM dbo.in_tray_msg
WHERE tray_code = @tray_code AND warehouse_id = @warehouse_id;
COMMIT TRANSACTION;
SET @v_result = 1;
SET @v_resultmsg = '成功:入库作业生成完成';
END TRY
BEGIN CATCH
IF XACT_STATE() <> 0
ROLLBACK TRANSACTION;
IF CURSOR_STATUS('local','cur_tray') >= 0
BEGIN
CLOSE cur_tray;
DEALLOCATE cur_tray;
END
SET @v_result = 0;
SET @v_resultmsg = LEFT(ERROR_MESSAGE(), 80);
END CATCH
END
GO