Files
FTC25009/sql/proc_add_in_job_trace.sql

129 lines
3.9 KiB
Transact-SQL
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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),
@project_no NVARCHAR(80);
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,
d.project_no
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, @project_no;
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, project_no
)
VALUES (
@job_detail_id, @job_id, @product_id, @product_name,
@lot_no, @quantity, @stockin_id, @stockin_detail_id,
@stockin_id, @stockin_detail_id, @project_no
);
SET @row_idx += 1;
FETCH NEXT FROM cur_tray INTO
@product_id, @product_name, @lot_no, @quantity, @stockin_id, @stockin_detail_id, @project_no;
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