-- 生产审核操作者输入框按人名查询兼容工作者和录工票人员；修改人:Ld 修改时间:2026-07-23 16:08:35;
ALTER PROCEDURE [dbo].[机加工MES_加工完成整修审核_查询数据]
  @审核状态_check INT = 0,
  @审核状态 NVARCHAR(20) = N'',
  @审核类型_check INT = 0,
  @审核类型 NVARCHAR(50) = N'',
  @操作者_check INT = 0,
  @操作者 NVARCHAR(100) = N'',
  @时间_check INT = 0,
  @开始时间 NVARCHAR(20) = N'',
  @结束时间 NVARCHAR(20) = N'',
  @PageCurrent INT = 1,
  @PageSize INT = 100
AS
BEGIN
  SET NOCOUNT ON;

  IF @PageCurrent IS NULL OR @PageCurrent < 1 SET @PageCurrent = 1;
  IF @PageSize IS NULL OR @PageSize < 1 SET @PageSize = 100;

  ;WITH AuditData AS (
    SELECT
      ROW_NUMBER() OVER (
        ORDER BY
          CASE WHEN A.审核状态 = N'待审核' THEN 0 ELSE 1 END,
          A.提交时间 DESC,
          A.id DESC
      ) AS RowNum,
      A.id,
      A.审核类型,
      A.审核状态,
      V.订单号,
      V.产品名称,
      V.零件名称,
      V.零件图号,
      V.工序,
      V.工艺计划流水号,
      V.数量 AS 投产数量,
      V.已完成数,
      V.工序顺序,
      V.物料编码,
      V.材料,
      A.工序流水号,
      A.工作者考勤编号,
      工作者.姓名 AS 工作者姓名,
      A.完成数量,
      A.完成类型,
      ISNULL(NULLIF(A.计价方式, N''), N'计件') AS 计价方式,
      CASE WHEN ISNULL(A.单件工价, 0) <> 0 THEN A.单件工价 ELSE ISNULL(priceData.单件工价, 0) END AS 单件工价,
      ISNULL(A.单时工价, 0) AS 单时工价,
      A.录工票人员编号,
      录工票人员.姓名 AS 录工票人员姓名,
      A.工位号,
      ISNULL(SB.设备名称, A.设备名) AS 工位设备名称,
      A.备注,
      A.剩余工时,
      A.剩余数量,
      A.设备号,
      A.设备名,
      A.操作者,
      -- 操作者人名查询兼容操作者、工作者和录工票人员；修改人:Ld 修改时间:2026-07-23 16:08:35;
      COALESCE(操作者人员.姓名, 工作者.姓名, 录工票人员.姓名, A.操作者) AS 操作者姓名,
      A.整修状态,
      A.整修记录id,
      A.整修方案,
      CONVERT(VARCHAR(19), A.开始时间, 120) AS 开始时间,
      CONVERT(VARCHAR(19), A.结束时间, 120) AS 结束时间,
      CONVERT(VARCHAR(19), A.提交时间, 120) AS 提交时间,
      A.审核人,
      审核人员.姓名 AS 审核人姓名,
      CONVERT(VARCHAR(19), A.审核时间, 120) AS 审核时间,
      A.审核意见,
      A.修改人,
      CONVERT(VARCHAR(19), A.修改时间, 120) AS 修改时间
    FROM [dbo].[MES_机加工MES_加工完成整修审核表] AS A
    LEFT JOIN [dbo].[车间生产管理_零件工序_视图] AS V
      ON A.工序流水号 = V.工序流水号
    LEFT JOIN [dbo].[人事档案管理_人员名单] AS 工作者
      ON A.工作者考勤编号 = 工作者.考勤编号
    LEFT JOIN [dbo].[人事档案管理_人员名单] AS 录工票人员
      ON A.录工票人员编号 = 录工票人员.序号
      OR A.录工票人员编号 = 录工票人员.人员编号
    LEFT JOIN [dbo].[人事档案管理_人员名单] AS 操作者人员
      ON A.操作者 = CONVERT(NVARCHAR(100), 操作者人员.人员编号)
      OR A.操作者 = CONVERT(NVARCHAR(100), 操作者人员.序号)
      OR A.操作者 = 操作者人员.姓名
    LEFT JOIN [dbo].[人事档案管理_人员名单] AS 审核人员
      ON A.审核人 = CONVERT(NVARCHAR(100), 审核人员.人员编号)
      OR A.审核人 = CONVERT(NVARCHAR(100), 审核人员.序号)
      OR A.审核人 = 审核人员.姓名
    LEFT JOIN [dbo].[基础数据_设备工位点检表] AS SB
      ON A.工位号 = SB.工位号
    OUTER APPLY (
      SELECT TOP 1
        CASE
          WHEN ISNULL(price.[单件工价], 0) <> 0 THEN price.[单件工价]
          ELSE ISNULL(price.[最终单价(元/件)], 0)
        END AS 单件工价
      FROM [dbo].[车间生产管理工艺_工序工价] price
      WHERE price.工序流水号 = A.工序流水号
        AND ISNULL(price.是否启用, 1) = 1
      ORDER BY ISNULL(price.生效日期, CONVERT(DATE, '1900-01-01')) DESC, price.修改时间 DESC, price.工价流水号 DESC
    ) priceData
    WHERE (@审核状态_check = 0 OR A.审核状态 = @审核状态)
      AND (@审核类型_check = 0 OR A.审核类型 = @审核类型)
      AND (
        @操作者_check = 0
        OR ISNULL(操作者人员.姓名, ISNULL(A.操作者, N'')) LIKE N'%' + @操作者 + N'%'
        OR ISNULL(工作者.姓名, N'') LIKE N'%' + @操作者 + N'%'
        OR ISNULL(录工票人员.姓名, N'') LIKE N'%' + @操作者 + N'%'
      )
      AND (@时间_check = 0 OR CONVERT(DATE, A.提交时间) BETWEEN CONVERT(DATE, @开始时间) AND CONVERT(DATE, @结束时间))
  )
  SELECT
    id,
    审核类型,
    审核状态,
    订单号,
    产品名称,
    零件名称,
    零件图号,
    工序,
    工艺计划流水号,
    投产数量,
    已完成数,
    工序顺序,
    物料编码,
    材料,
    工序流水号,
    工作者考勤编号,
    工作者姓名,
    完成数量,
    完成类型,
    计价方式,
    单件工价,
    单时工价,
    录工票人员编号,
    录工票人员姓名,
    工位号,
    工位设备名称,
    备注,
    剩余工时,
    剩余数量,
    设备号,
    设备名,
    操作者,
    操作者姓名,
    整修状态,
    整修记录id,
    整修方案,
    开始时间,
    结束时间,
    提交时间,
    审核人,
    审核人姓名,
    审核时间,
    审核意见,
    修改人,
    修改时间
  FROM AuditData
  WHERE RowNum BETWEEN ((@PageCurrent - 1) * @PageSize + 1) AND (@PageCurrent * @PageSize)
  ORDER BY RowNum;

  SELECT COUNT(1) AS total
  FROM [dbo].[MES_机加工MES_加工完成整修审核表] AS A
  LEFT JOIN [dbo].[人事档案管理_人员名单] AS 工作者
    ON A.工作者考勤编号 = 工作者.考勤编号
  LEFT JOIN [dbo].[人事档案管理_人员名单] AS 录工票人员
    ON A.录工票人员编号 = 录工票人员.序号
    OR A.录工票人员编号 = 录工票人员.人员编号
  LEFT JOIN [dbo].[人事档案管理_人员名单] AS 操作者人员
    ON A.操作者 = CONVERT(NVARCHAR(100), 操作者人员.人员编号)
    OR A.操作者 = CONVERT(NVARCHAR(100), 操作者人员.序号)
    OR A.操作者 = 操作者人员.姓名
  WHERE (@审核状态_check = 0 OR A.审核状态 = @审核状态)
    AND (@审核类型_check = 0 OR A.审核类型 = @审核类型)
    AND (
      @操作者_check = 0
      OR ISNULL(操作者人员.姓名, ISNULL(A.操作者, N'')) LIKE N'%' + @操作者 + N'%'
      OR ISNULL(工作者.姓名, N'') LIKE N'%' + @操作者 + N'%'
      OR ISNULL(录工票人员.姓名, N'') LIKE N'%' + @操作者 + N'%'
    )
    AND (@时间_check = 0 OR CONVERT(DATE, A.提交时间) BETWEEN CONVERT(DATE, @开始时间) AND CONVERT(DATE, @结束时间));
END;
GO
