IF OBJECT_ID(N'dbo.proc_update_pdbill_status', N'P') IS NOT NULL DROP PROCEDURE dbo.proc_update_pdbill_status GO CREATE PROCEDURE dbo.proc_update_pdbill_status @v_stockpd_id VARCHAR(80), @v_status INT, @v_result INT OUTPUT, @v_resultString VARCHAR(500) OUTPUT AS BEGIN SET NOCOUNT ON; SET XACT_ABORT ON; DECLARE @target_status NVARCHAR(5) = CONVERT(NVARCHAR(5), @v_status); DECLARE @now DATETIME2 = SYSDATETIME(); BEGIN TRY SET @v_result = 0; SET @v_resultString = ''; IF @v_stockpd_id IS NULL OR LTRIM(RTRIM(@v_stockpd_id)) = '' BEGIN SET @v_resultString = N'盘点单号不能为空'; RETURN; END IF @target_status NOT IN (N'2', N'4', N'5') BEGIN SET @v_resultString = N'不支持的盘点状态'; RETURN; END IF NOT EXISTS (SELECT 1 FROM dbo.pd_stockpd WHERE stockpd_id = @v_stockpd_id) BEGIN IF @target_status IN (N'4', N'5') AND EXISTS (SELECT 1 FROM dbo.pd_stockpd_finish WHERE stockpd_id = @v_stockpd_id) BEGIN SET @v_result = 10; SET @v_resultString = CASE WHEN @target_status = N'5' THEN N'盘点单据已作废' ELSE N'盘点单据已完成' END; RETURN; END SET @v_resultString = N'盘点单据不存在'; RETURN; END BEGIN TRANSACTION; IF @target_status = N'2' BEGIN UPDATE dbo.pd_stockpd SET status = N'2', start_date = CASE WHEN start_date IS NULL THEN @now ELSE start_date END WHERE stockpd_id = @v_stockpd_id; COMMIT TRANSACTION; SET @v_result = 10; SET @v_resultString = N'审核成功'; RETURN; END IF @target_status = N'5' BEGIN INSERT INTO dbo.pd_stockpd_finish ( stockpd_id, pd_type, stock_source, status, create_date, start_date, finish_date, erp_bill, warehouse_id, warehouse_name, user_id, user_name, dept_id, dept_name ) SELECT p.stockpd_id, p.pd_type, p.stock_source, N'5', p.create_date, p.start_date, CASE WHEN p.finish_date IS NULL THEN @now ELSE p.finish_date END, p.erp_bill, p.warehouse_id, p.warehouse_name, p.user_id, p.user_name, p.dept_id, p.dept_name FROM dbo.pd_stockpd p WHERE p.stockpd_id = @v_stockpd_id AND NOT EXISTS ( SELECT 1 FROM dbo.pd_stockpd_finish f WHERE f.stockpd_id = p.stockpd_id ); INSERT INTO dbo.pd_stockpd_detail_finish ( stockpd_detail_id, stockpd_id, tray_code, product_id, product_name, quantity, allot_num, assign_num, remark, stock_id, stock_detail_id, cargo_space_id, cargo_space_name, warehouse_id, warehouse_name ) SELECT d.stockpd_detail_id, d.stockpd_id, d.tray_code, d.product_id, d.product_name, d.quantity, d.allot_num, d.assign_num, d.remark, d.stock_id, d.stock_detail_id, d.cargo_space_id, d.cargo_space_name, d.warehouse_id, d.warehouse_name FROM dbo.pd_stockpd_detail d WHERE d.stockpd_id = @v_stockpd_id AND NOT EXISTS ( SELECT 1 FROM dbo.pd_stockpd_detail_finish f WHERE f.stockpd_detail_id = d.stockpd_detail_id ); DELETE FROM dbo.pd_stockpd_detail WHERE stockpd_id = @v_stockpd_id; DELETE FROM dbo.pd_stockpd WHERE stockpd_id = @v_stockpd_id; COMMIT TRANSACTION; SET @v_result = 10; SET @v_resultString = N'作废成功'; RETURN; END INSERT INTO dbo.pd_stockpd_finish ( stockpd_id, pd_type, stock_source, status, create_date, start_date, finish_date, erp_bill, warehouse_id, warehouse_name, user_id, user_name, dept_id, dept_name ) SELECT p.stockpd_id, p.pd_type, p.stock_source, N'4', p.create_date, CASE WHEN p.start_date IS NULL THEN @now ELSE p.start_date END, CASE WHEN p.finish_date IS NULL THEN @now ELSE p.finish_date END, p.erp_bill, p.warehouse_id, p.warehouse_name, p.user_id, p.user_name, p.dept_id, p.dept_name FROM dbo.pd_stockpd p WHERE p.stockpd_id = @v_stockpd_id AND NOT EXISTS ( SELECT 1 FROM dbo.pd_stockpd_finish f WHERE f.stockpd_id = p.stockpd_id ); INSERT INTO dbo.pd_stockpd_detail_finish ( stockpd_detail_id, stockpd_id, tray_code, product_id, product_name, quantity, allot_num, assign_num, remark, stock_id, stock_detail_id, cargo_space_id, cargo_space_name, warehouse_id, warehouse_name ) SELECT d.stockpd_detail_id, d.stockpd_id, d.tray_code, d.product_id, d.product_name, d.quantity, d.allot_num, d.assign_num, d.remark, d.stock_id, d.stock_detail_id, d.cargo_space_id, d.cargo_space_name, d.warehouse_id, d.warehouse_name FROM dbo.pd_stockpd_detail d WHERE d.stockpd_id = @v_stockpd_id AND NOT EXISTS ( SELECT 1 FROM dbo.pd_stockpd_detail_finish f WHERE f.stockpd_detail_id = d.stockpd_detail_id ); DELETE FROM dbo.pd_stockpd_detail WHERE stockpd_id = @v_stockpd_id; DELETE FROM dbo.pd_stockpd WHERE stockpd_id = @v_stockpd_id; COMMIT TRANSACTION; SET @v_result = 10; SET @v_resultString = N'完成成功'; END TRY BEGIN CATCH IF @@TRANCOUNT > 0 ROLLBACK TRANSACTION; SET @v_result = 0; SET @v_resultString = LEFT(ERROR_MESSAGE(), 500); END CATCH END