-- 三楼仓库可视化 - 库位查询存储过程
-- 创建时间: 2026-06-30
-- 说明: 查询三楼仓库库位列表及状态（三段式库位编码: 排号-列号-层号）
-- 状态: 0=空闲, 1=有物料无库存, 2=有库存
-- 矩阵布局: 竖向排号，横向列号

IF EXISTS (SELECT name FROM sys.procedures WHERE name = '仓储管理_三楼仓库库位_查询数据')
    DROP PROCEDURE 仓储管理_三楼仓库库位_查询数据
GO

CREATE PROCEDURE [dbo].[仓储管理_三楼仓库库位_查询数据]
    @排号_check bit = 0,
    @排号 nvarchar(50) = NULL,
    @库位编号_check bit = 0,
    @库位编号 nvarchar(50) = NULL,
    @库位状态_check bit = 0,
    @库位状态 int = NULL
AS
BEGIN
    SET NOCOUNT ON;

    SELECT 
        h.货位名称 AS 库位编号,
        h.货位名称 AS 库位名称,
        CASE 
            WHEN EXISTS (SELECT 1 FROM 库存管理_物料与货位对照表 ml WHERE ml.货位流水号 = h.货位流水号 AND ml.货位存量 > 0) THEN 2
            WHEN EXISTS (SELECT 1 FROM 库存管理_物料主文件_基本 m WHERE m.货位流水号 = h.货位流水号) THEN 1
            ELSE 0
        END AS 状态,
        PARSENAME(REPLACE(h.货位名称, '-', '.'), 3) AS 排号,
        CAST(PARSENAME(REPLACE(h.货位名称, '-', '.'), 2) AS int) AS 列号,
        PARSENAME(REPLACE(h.货位名称, '-', '.'), 1) AS 层号,
        h.货位流水号
    INTO #TempLocations
    FROM 库存管理_货位主文件 h
    WHERE LEN(h.货位名称) - LEN(REPLACE(h.货位名称, '-', '')) = 2
      AND ISNUMERIC(PARSENAME(REPLACE(h.货位名称, '-', '.'), 3)) = 1

    DECLARE @sql nvarchar(4000)
    SET @sql = 'SELECT 库位编号, 库位名称, 状态, 排号, 列号, 层号, 货位流水号 FROM #TempLocations WHERE 1=1'

    IF @排号_check = 1 AND @排号 IS NOT NULL
        SET @sql = @sql + ' AND 排号 = @p_row'

    IF @库位编号_check = 1 AND @库位编号 IS NOT NULL
        SET @sql = @sql + ' AND 库位编号 LIKE ''%'' + @p_code + ''%'''

    IF @库位状态_check = 1 AND @库位状态 IS NOT NULL
        SET @sql = @sql + ' AND 状态 = @p_status'

    SET @sql = @sql + ' ORDER BY 排号, 列号, 层号'

    EXEC sp_executesql @sql, 
        N'@p_row nvarchar(50), @p_code nvarchar(50), @p_status int',
        @p_row = @排号, @p_code = @库位编号, @p_status = @库位状态

    DROP TABLE #TempLocations
END
GO


-- 三楼仓库可视化 - 库位物料查询存储过程
-- 创建时间: 2026-06-30
-- 说明: 按库位编号查询三楼仓库库位上的物料明细

IF EXISTS (SELECT name FROM sys.procedures WHERE name = '仓储管理_三楼仓库库位物料_查询数据')
    DROP PROCEDURE 仓储管理_三楼仓库库位物料_查询数据
GO

CREATE PROCEDURE [dbo].[仓储管理_三楼仓库库位物料_查询数据]
    @库位编号_check bit = 0,
    @库位编号 nvarchar(50) = NULL
AS
BEGIN
    SET NOCOUNT ON;

    IF @库位编号_check = 1 AND @库位编号 IS NOT NULL
    BEGIN
        SELECT 
            m.物料编码 AS 物料编号,
            m.名称 AS 物料名称,
            m.代号 AS 图号,
            m.规格 AS 规格型号,
            ISNULL(ml.货位存量, 0) AS 库存数量,
            ISNULL(m.库存计量单位, '台') AS 单位,
            ISNULL(ml.批次号, '') AS 批次
        FROM 库存管理_货位主文件 h
        INNER JOIN 库存管理_物料主文件_基本 m ON h.货位流水号 = m.货位流水号
        LEFT JOIN 库存管理_物料与货位对照表 ml ON m.物料流水号 = ml.物料流水号 AND ml.货位流水号 = h.货位流水号
        WHERE h.货位名称 = @库位编号
        ORDER BY m.物料编码
    END
END
GO
