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,117 @@
SET NOCOUNT ON;
SET XACT_ABORT ON;
BEGIN TRY
BEGIN TRANSACTION;
IF OBJECT_ID(N'dbo.bas_cargo_area_config', N'U') IS NULL
THROW 51100, N'缺少bas_cargo_area_config,请先执行货区方向迁移。', 1;
DECLARE @direction TABLE
(
warehouse_id nvarchar(80) NOT NULL,
cargo_area_code nvarchar(10) NOT NULL,
direction_type nvarchar(2) NOT NULL,
PRIMARY KEY (warehouse_id, cargo_area_code)
);
INSERT INTO @direction(warehouse_id, cargo_area_code, direction_type)
VALUES
(N'03', N'A', N'1'),
(N'03', N'B', N'1'),
(N'03', N'C', N'1'),
(N'03', N'D', N'2'),
(N'03', N'E', N'1'),
(N'03', N'F', N'2'),
(N'03', N'G', N'2'),
(N'03', N'H', N'2');
MERGE dbo.bas_cargo_area_config AS target
USING @direction AS source
ON target.warehouse_id = source.warehouse_id
AND target.cargo_area_code = source.cargo_area_code
WHEN MATCHED THEN UPDATE
SET direction_type = source.direction_type,
is_active = N'1',
update_by = N'admin',
update_time = SYSDATETIME(),
remark = N'03密集库固定方向;A/B/C/E小到大,D/F/G/H大到小'
WHEN NOT MATCHED THEN INSERT
(warehouse_id, cargo_area_code, cargo_area_name, direction_type, is_active,
create_by, create_time, remark)
VALUES
(source.warehouse_id, source.cargo_area_code, source.cargo_area_code + N'货区',
source.direction_type, N'1', N'admin', SYSDATETIME(),
N'03密集库固定方向;A/B/C/E小到大,D/F/G/H大到小');
UPDATE dbo.bas_cargo_space
SET the_height = CASE WHEN the_floor = 1 THEN 2 ELSE 1 END
WHERE warehouse_id = N'03'
AND status = N'1'
AND (the_height IS NULL
OR the_height != CASE WHEN the_floor = 1 THEN 2 ELSE 1 END);
IF (SELECT COUNT(*) FROM dbo.bas_cargo_space
WHERE warehouse_id = N'03' AND status = N'1') != 1028
THROW 51102, N'03仓普通货位数量异常,拒绝配置高度。', 1;
IF EXISTS
(
SELECT 1
FROM dbo.bas_cargo_space
WHERE warehouse_id = N'03'
AND status = N'1'
AND (the_height IS NULL
OR the_height != CASE WHEN the_floor = 1 THEN 2 ELSE 1 END)
)
THROW 51103, N'03仓普通货位高度配置失败。', 1;
IF NOT EXISTS
(
SELECT 1 FROM sys.indexes
WHERE object_id = OBJECT_ID(N'dbo.bas_cargo_space')
AND name = N'IX_bas_cargo_space_dense_lane'
)
CREATE NONCLUSTERED INDEX IX_bas_cargo_space_dense_lane
ON dbo.bas_cargo_space(warehouse_id, roadway_id, group_coding, status)
INCLUDE(cargo_space_id, this_cargo_area, the_type, the_height, the_column,
the_floor, the_platoon, locked, tray_code);
IF NOT EXISTS
(
SELECT 1 FROM sys.indexes
WHERE object_id = OBJECT_ID(N'dbo.bas_stock')
AND name = N'IX_bas_stock_cargo_space_id'
)
CREATE NONCLUSTERED INDEX IX_bas_stock_cargo_space_id
ON dbo.bas_stock(cargo_space_id)
INCLUDE(stock_id, warehouse_id, in_type, project_no);
IF NOT EXISTS
(
SELECT 1 FROM sys.indexes
WHERE object_id = OBJECT_ID(N'dbo.mydo_job')
AND name = N'IX_mydo_job_dense_reservation'
)
CREATE NONCLUSTERED INDEX IX_mydo_job_dense_reservation
ON dbo.mydo_job(warehouse_id, tray_code, status, in_or_out)
INCLUDE(job_id, cargo_space_id, roadway_id);
IF (SELECT COUNT(*) FROM dbo.bas_cargo_area_config
WHERE warehouse_id = N'03' AND cargo_area_code BETWEEN N'A' AND N'H'
AND is_active = N'1') != 8
THROW 51101, N'03仓A-H货区方向配置数量异常。', 1;
COMMIT TRANSACTION;
END TRY
BEGIN CATCH
IF XACT_STATE() != 0
ROLLBACK TRANSACTION;
THROW;
END CATCH;
SELECT warehouse_id, cargo_area_code, direction_type, is_active
FROM dbo.bas_cargo_area_config
WHERE warehouse_id = N'03'
AND cargo_area_code BETWEEN N'A' AND N'H'
ORDER BY cargo_area_code;