127 lines
3.8 KiB
Transact-SQL
127 lines
3.8 KiB
Transact-SQL
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
|