USE [YL_MESDB]
GO

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

CREATE OR ALTER PROCEDURE [dbo].[异常提醒_装配及时送检_查询]
    @订单号 int = 0,
    @合同号 nvarchar(50) = N'',
    @产品编码 nvarchar(50) = N'',
    @产品名称 nvarchar(50) = N'',
    @工序名称 nvarchar(50) = N'',
    @辅助配件 nvarchar(50) = N'不含'
AS
BEGIN
    SET NOCOUNT ON;

    ;WITH 装配任务 AS (
        SELECT
            CASE WHEN v.[物料描述] LIKE N'%系统%' THEN N'系统类' ELSE N'阀类' END AS 任务类型,
            v.[合同号],
            v.[订单编号] AS 订单号,
            v.[物料编号] AS 产品编码,
            v.[物料描述] AS 产品名称,
            TRIM('.' FROM TRIM('0' FROM CAST(v.[计划数量] AS varchar(30)))) AS 计划数量,
            v.[工序名称],
            v.[指派对象],
            v.[计划开始时间],
            v.[计划完成时间],
            v.[齐套时间],
            v.[钣金预达时间],
            CASE
                WHEN v.[物料描述] LIKE N'%系统%'
                    THEN ISNULL(v.[预计送检日期], DATEADD(DAY, 3, v.[钣金预达时间]))
                ELSE ISNULL(v.[预计送检日期], DATEADD(DAY, 3, v.[齐套时间]))
            END AS 预计送检日期,
            CASE WHEN ISNULL(v.[加急状态], 0) = 1 THEN N'加急' ELSE N'' END AS 加急状态
        FROM [dbo].[View_生产订单_MES] v
        WHERE v.[物料类型] = 'pit_Resource'
            AND v.[自制件属性] LIKE N'%装配%'
            AND ISNULL(v.[任务状态], 0) < 4
            AND (@订单号 <= 0 OR v.[订单编号] = @订单号)
            AND (@合同号 = N'' OR v.[合同号] LIKE N'%' + @合同号 + N'%')
            AND (@产品编码 = N'' OR v.[物料编号] LIKE N'%' + @产品编码 + N'%')
            AND (@产品名称 = N'' OR v.[物料描述] LIKE N'%' + @产品名称 + N'%')
            AND (@工序名称 = N'' OR v.[工序名称] = @工序名称)
            AND (
                @辅助配件 <> N'不含'
                OR (
                    v.[物料描述] NOT LIKE N'%软管总成%'
                    AND v.[物料描述] NOT LIKE N'%发货部件%'
                )
            )
            AND v.[不装配] <> N'否'
    )
    SELECT
        任务类型,
        合同号,
        订单号,
        产品编码,
        产品名称,
        计划数量,
        工序名称,
        指派对象,
        计划开始时间,
        计划完成时间,
        齐套时间,
        钣金预达时间,
        预计送检日期,
        加急状态
    FROM 装配任务
    WHERE 预计送检日期 IS NOT NULL
        AND CONVERT(date, 预计送检日期) <= CONVERT(date, GETDATE())
    ORDER BY
        CONVERT(date, 预计送检日期),
        CASE WHEN 加急状态 = N'加急' THEN 0 ELSE 1 END,
        订单号;
END
GO
