feat: 完善盘点出入库流程

This commit is contained in:
zgw
2026-06-25 18:31:17 +08:00
parent 4b8bc03343
commit c7c07c01cf
21 changed files with 1974 additions and 111 deletions

View File

@@ -0,0 +1,80 @@
-- 盘点流程增强:盘点明细关联库存明细,支持盘点出库/PDA盘点/盘点回库/差异审核。
-- 可重复执行;请先在 FTC25009-WMS 的测试库验证后再上生产。
IF COL_LENGTH('dbo.pd_stockpd_detail', 'stock_id') IS NULL
ALTER TABLE dbo.pd_stockpd_detail ADD stock_id nvarchar(80) NULL;
IF COL_LENGTH('dbo.pd_stockpd_detail', 'stock_detail_id') IS NULL
ALTER TABLE dbo.pd_stockpd_detail ADD stock_detail_id nvarchar(80) NULL;
IF COL_LENGTH('dbo.pd_stockpd_detail', 'cargo_space_id') IS NULL
ALTER TABLE dbo.pd_stockpd_detail ADD cargo_space_id nvarchar(80) NULL;
IF COL_LENGTH('dbo.pd_stockpd_detail', 'cargo_space_name') IS NULL
ALTER TABLE dbo.pd_stockpd_detail ADD cargo_space_name nvarchar(255) NULL;
IF COL_LENGTH('dbo.pd_stockpd_detail', 'warehouse_id') IS NULL
ALTER TABLE dbo.pd_stockpd_detail ADD warehouse_id nvarchar(80) NULL;
IF COL_LENGTH('dbo.pd_stockpd_detail', 'warehouse_name') IS NULL
ALTER TABLE dbo.pd_stockpd_detail ADD warehouse_name nvarchar(255) NULL;
IF OBJECT_ID('dbo.pd_stockpd_detail_finish', 'U') IS NOT NULL
BEGIN
IF COL_LENGTH('dbo.pd_stockpd_detail_finish', 'stock_id') IS NULL
ALTER TABLE dbo.pd_stockpd_detail_finish ADD stock_id nvarchar(80) NULL;
IF COL_LENGTH('dbo.pd_stockpd_detail_finish', 'stock_detail_id') IS NULL
ALTER TABLE dbo.pd_stockpd_detail_finish ADD stock_detail_id nvarchar(80) NULL;
IF COL_LENGTH('dbo.pd_stockpd_detail_finish', 'cargo_space_id') IS NULL
ALTER TABLE dbo.pd_stockpd_detail_finish ADD cargo_space_id nvarchar(80) NULL;
IF COL_LENGTH('dbo.pd_stockpd_detail_finish', 'cargo_space_name') IS NULL
ALTER TABLE dbo.pd_stockpd_detail_finish ADD cargo_space_name nvarchar(255) NULL;
IF COL_LENGTH('dbo.pd_stockpd_detail_finish', 'warehouse_id') IS NULL
ALTER TABLE dbo.pd_stockpd_detail_finish ADD warehouse_id nvarchar(80) NULL;
IF COL_LENGTH('dbo.pd_stockpd_detail_finish', 'warehouse_name') IS NULL
ALTER TABLE dbo.pd_stockpd_detail_finish ADD warehouse_name nvarchar(255) NULL;
END;
EXEC(N'
UPDATE pdd
SET pdd.stock_id = bsd.stock_id,
pdd.stock_detail_id = bsd.detail_id,
pdd.cargo_space_id = bs.cargo_space_id,
pdd.cargo_space_name = bcs.cargo_space_name,
pdd.warehouse_id = bs.warehouse_id,
pdd.warehouse_name = ISNULL(NULLIF(bs.warehouse_name, ''''), bw.warehouse_name)
FROM dbo.pd_stockpd_detail pdd
INNER JOIN dbo.bas_stock bs ON bs.tray_code = pdd.tray_code
INNER JOIN dbo.bas_stock_detail bsd ON bsd.stock_id = bs.stock_id AND bsd.product_id = pdd.product_id
LEFT JOIN dbo.bas_cargo_space bcs ON bcs.cargo_space_id = bs.cargo_space_id
LEFT JOIN dbo.bas_warehouse bw ON bw.warehouse_id = bs.warehouse_id
WHERE (pdd.stock_detail_id IS NULL OR pdd.stock_detail_id = '''')
AND ISNULL(bsd.quantity, 0) > 0
');
IF OBJECT_ID('dbo.pd_stockpd_detail_finish', 'U') IS NOT NULL
BEGIN
EXEC(N'
UPDATE pdd
SET pdd.stock_id = bsd.stock_id,
pdd.stock_detail_id = bsd.detail_id,
pdd.cargo_space_id = bs.cargo_space_id,
pdd.cargo_space_name = bcs.cargo_space_name,
pdd.warehouse_id = bs.warehouse_id,
pdd.warehouse_name = ISNULL(NULLIF(bs.warehouse_name, ''''), bw.warehouse_name)
FROM dbo.pd_stockpd_detail_finish pdd
INNER JOIN dbo.bas_stock bs ON bs.tray_code = pdd.tray_code
INNER JOIN dbo.bas_stock_detail bsd ON bsd.stock_id = bs.stock_id AND bsd.product_id = pdd.product_id
LEFT JOIN dbo.bas_cargo_space bcs ON bcs.cargo_space_id = bs.cargo_space_id
LEFT JOIN dbo.bas_warehouse bw ON bw.warehouse_id = bs.warehouse_id
WHERE (pdd.stock_detail_id IS NULL OR pdd.stock_detail_id = '''')
AND ISNULL(bsd.quantity, 0) > 0
');
END;
IF NOT EXISTS (SELECT 1 FROM sys.indexes WHERE name = 'IX_pd_stockpd_detail_stock_detail_id' AND object_id = OBJECT_ID('dbo.pd_stockpd_detail'))
EXEC(N'CREATE INDEX IX_pd_stockpd_detail_stock_detail_id ON dbo.pd_stockpd_detail(stock_detail_id)');
IF NOT EXISTS (SELECT 1 FROM sys.indexes WHERE name = 'IX_pd_stockpd_detail_stock_id' AND object_id = OBJECT_ID('dbo.pd_stockpd_detail'))
EXEC(N'CREATE INDEX IX_pd_stockpd_detail_stock_id ON dbo.pd_stockpd_detail(stock_id)');
IF OBJECT_ID('dbo.pd_stockpd_detail_finish', 'U') IS NOT NULL
BEGIN
IF NOT EXISTS (SELECT 1 FROM sys.indexes WHERE name = 'IX_pd_stockpd_detail_finish_stock_detail_id' AND object_id = OBJECT_ID('dbo.pd_stockpd_detail_finish'))
EXEC(N'CREATE INDEX IX_pd_stockpd_detail_finish_stock_detail_id ON dbo.pd_stockpd_detail_finish(stock_detail_id)');
END;