/*
库房管理库位归类规则脚本（测试库 ERPTOOL_JY_20250826Back）
修改人:Ld 修改时间:2026-07-31 14:26:30;
说明：毛坯库归一楼毛坯库，耗材归耗材库，其余未归类库位归库房A区。
*/

SET NOCOUNT ON;
GO

IF NOT EXISTS (SELECT 1 FROM dbo.库房管理_库房主文件 WHERE 库房编号 = N'KF-A')
BEGIN
    INSERT INTO dbo.库房管理_库房主文件(库房编号, 库房名称, 库房类型, 地址, 状态, 排数, 每排列数, 层数, 备注, 创建人)
    VALUES(N'KF-A', N'库房A区', N'标准库房', N'库房A区', N'启用', 1, 99, 1, N'未归类库位默认归属库房', 0);
END
GO

IF NOT EXISTS (SELECT 1 FROM dbo.库房管理_库房主文件 WHERE 库房编号 = N'KF-MP')
BEGIN
    INSERT INTO dbo.库房管理_库房主文件(库房编号, 库房名称, 库房类型, 地址, 状态, 排数, 每排列数, 层数, 备注, 创建人)
    VALUES(N'KF-MP', N'一楼毛坯库', N'毛坯库', N'一楼毛坯库', N'启用', 1, 99, 1, N'毛坯库库位归属', 0);
END
GO

IF NOT EXISTS (SELECT 1 FROM dbo.库房管理_库房主文件 WHERE 库房编号 = N'KF-HC')
BEGIN
    INSERT INTO dbo.库房管理_库房主文件(库房编号, 库房名称, 库房类型, 地址, 状态, 排数, 每排列数, 层数, 备注, 创建人)
    VALUES(N'KF-HC', N'耗材库', N'耗材库', N'耗材库', N'启用', 1, 99, 1, N'耗材库位归属', 0);
END
GO

;WITH DefaultArea AS
(
    SELECT N'KF-A' AS 库房编号, N'A01' AS 库区编号, N'标准库位区' AS 库区名称, N'标准库区' AS 库区类型, N'未归类库位默认库区' AS 备注
    UNION ALL SELECT N'KF-MP', N'MP', N'一楼毛坯库区', N'毛坯库区', N'毛坯库库位默认库区'
    UNION ALL SELECT N'KF-HC', N'HC', N'耗材库区', N'耗材库区', N'耗材库位默认库区'
)
INSERT INTO dbo.库房管理_库区主文件(库房流水号, 库区编号, 库区名称, 库区类型, 排序, 备注, 创建人)
SELECT k.库房流水号, a.库区编号, a.库区名称, a.库区类型, 1, a.备注, 0
FROM DefaultArea a
INNER JOIN dbo.库房管理_库房主文件 k ON a.库房编号 = k.库房编号
WHERE NOT EXISTS
(
    SELECT 1
    FROM dbo.库房管理_库区主文件 x
    WHERE x.库房流水号 = k.库房流水号
      AND x.库区编号 = a.库区编号
);
GO

DECLARE @库房A INT;
DECLARE @库区A INT;
DECLARE @毛坯库 INT;
DECLARE @毛坯库区 INT;
DECLARE @耗材库 INT;
DECLARE @耗材库区 INT;

SELECT @库房A = 库房流水号 FROM dbo.库房管理_库房主文件 WHERE 库房编号 = N'KF-A';
SELECT @库区A = 库区流水号 FROM dbo.库房管理_库区主文件 WHERE 库房流水号 = @库房A AND 库区编号 = N'A01';
SELECT @毛坯库 = 库房流水号 FROM dbo.库房管理_库房主文件 WHERE 库房编号 = N'KF-MP';
SELECT @毛坯库区 = 库区流水号 FROM dbo.库房管理_库区主文件 WHERE 库房流水号 = @毛坯库 AND 库区编号 = N'MP';
SELECT @耗材库 = 库房流水号 FROM dbo.库房管理_库房主文件 WHERE 库房编号 = N'KF-HC';
SELECT @耗材库区 = 库区流水号 FROM dbo.库房管理_库区主文件 WHERE 库房流水号 = @耗材库 AND 库区编号 = N'HC';

UPDATE h
SET 库房流水号 = @毛坯库,
    库区流水号 = @毛坯库区,
    库位状态 = ISNULL(h.库位状态, N'空库位'),
    修改人 = 0,
    修改时间 = GETDATE()
FROM dbo.库存管理_货位主文件 h
WHERE h.货位名称 LIKE N'%毛坯%';

UPDATE h
SET 库房流水号 = @耗材库,
    库区流水号 = @耗材库区,
    库位状态 = ISNULL(h.库位状态, N'空库位'),
    修改人 = 0,
    修改时间 = GETDATE()
FROM dbo.库存管理_货位主文件 h
WHERE h.货位名称 LIKE N'%耗材%';

UPDATE h
SET 库房流水号 = @库房A,
    库区流水号 = @库区A,
    库位状态 = ISNULL(h.库位状态, N'空库位'),
    修改人 = 0,
    修改时间 = GETDATE()
FROM dbo.库存管理_货位主文件 h
LEFT JOIN dbo.库房管理_库房主文件 k ON h.库房流水号 = k.库房流水号
WHERE k.库房流水号 IS NULL;

SELECT
    SUM(CASE WHEN h.库房流水号 = @毛坯库 THEN 1 ELSE 0 END) AS 一楼毛坯库库位数,
    SUM(CASE WHEN h.库房流水号 = @耗材库 THEN 1 ELSE 0 END) AS 耗材库库位数,
    SUM(CASE WHEN h.库房流水号 = @库房A THEN 1 ELSE 0 END) AS 库房A区库位数,
    SUM(CASE WHEN h.库房流水号 IS NULL THEN 1 ELSE 0 END) AS 未归类库位数
FROM dbo.库存管理_货位主文件 h;
GO
