Files
FTC25009/sql/20260714_warehouse_03_inbound_lane_allocation.sql

118 lines
4.0 KiB
Transact-SQL
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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;