feat: 完善WCS调度、库存追溯和出库分配

This commit is contained in:
zgw
2026-07-15 16:24:07 +08:00
parent 9d3aa7a3bd
commit 66ac268524
101 changed files with 12596 additions and 669 deletions

View File

@@ -0,0 +1,161 @@
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