USE [ERPTOOL_JY_20250826Back]
GO

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

-- 工序工价基础表，维护现场确认的 9 个工价字段；修改人:Ld 修改时间:2026-07-03 08:02:29;
IF OBJECT_ID(N'[dbo].[车间生产管理工艺_工序工价]', N'U') IS NULL
BEGIN
  CREATE TABLE [dbo].[车间生产管理工艺_工序工价](
    [工价流水号] [int] IDENTITY(1,1) NOT NULL,
    [工序流水号] [int] NULL,
    [工艺名称] [nvarchar](100) NOT NULL,
    [工序名称] [nvarchar](100) NOT NULL,
    [零件名称] [nvarchar](100) NOT NULL,
    [图号] [nvarchar](100) NOT NULL,
    [机动时间s] [decimal](18, 4) NOT NULL CONSTRAINT [DF_车间生产管理工艺_工序工价_机动时间s] DEFAULT ((0)),
    [辅助时间s] [decimal](18, 4) NOT NULL CONSTRAINT [DF_车间生产管理工艺_工序工价_辅助时间s] DEFAULT ((0)),
    [总时间s] [decimal](18, 4) NOT NULL CONSTRAINT [DF_车间生产管理工艺_工序工价_总时间s] DEFAULT ((0)),
    [单装数量(件)] [decimal](18, 4) NOT NULL CONSTRAINT [DF_车间生产管理工艺_工序工价_单装数量件] DEFAULT ((0)),
    [操作台数] [decimal](18, 4) NOT NULL CONSTRAINT [DF_车间生产管理工艺_工序工价_操作台数] DEFAULT ((0)),
    [日产能(件)] [decimal](18, 4) NOT NULL CONSTRAINT [DF_车间生产管理工艺_工序工价_日产能件] DEFAULT ((0)),
    [最终单价(元/件)] [decimal](18, 4) NOT NULL CONSTRAINT [DF_车间生产管理工艺_工序工价_最终单价元件] DEFAULT ((0)),
    [生效日期] [date] NULL,
    [变更次数] [int] NOT NULL CONSTRAINT [DF_车间生产管理工艺_工序工价_变更次数] DEFAULT ((0)),
    [是否启用] [bit] NOT NULL CONSTRAINT [DF_车间生产管理工艺_工序工价_是否启用] DEFAULT ((1)),
    [备注] [nvarchar](500) NULL,
    [创建人] [nvarchar](50) NULL,
    [创建时间] [datetime] NOT NULL CONSTRAINT [DF_车间生产管理工艺_工序工价_创建时间] DEFAULT (GETDATE()),
    [修改人] [nvarchar](50) NULL,
    [修改时间] [datetime] NOT NULL CONSTRAINT [DF_车间生产管理工艺_工序工价_修改时间] DEFAULT (GETDATE()),
    [计价方式] [nvarchar](20) NOT NULL CONSTRAINT [DF_车间生产管理工艺_工序工价_计价方式] DEFAULT (N'按件'),
    [单件工价] [decimal](18, 4) NOT NULL CONSTRAINT [DF_车间生产管理工艺_工序工价_单件工价] DEFAULT ((0)),
    [单时工价] [decimal](18, 4) NOT NULL CONSTRAINT [DF_车间生产管理工艺_工序工价_单时工价] DEFAULT ((0)),
    [准结工价] [decimal](18, 4) NOT NULL CONSTRAINT [DF_车间生产管理工艺_工序工价_准结工价] DEFAULT ((0)),
    [难度系数] [decimal](18, 4) NOT NULL CONSTRAINT [DF_车间生产管理工艺_工序工价_难度系数] DEFAULT ((1)),
    [质量系数] [decimal](18, 4) NOT NULL CONSTRAINT [DF_车间生产管理工艺_工序工价_质量系数] DEFAULT ((1)),
    [设备系数] [decimal](18, 4) NOT NULL CONSTRAINT [DF_车间生产管理工艺_工序工价_设备系数] DEFAULT ((1)),
    [失效日期] [date] NULL,
    CONSTRAINT [PK_车间生产管理工艺_工序工价] PRIMARY KEY CLUSTERED ([工价流水号] ASC)
  );
END
GO

-- 兼容已建旧表，补齐现场确认字段；修改人:Ld 修改时间:2026-07-03 08:02:29;
IF OBJECT_ID(N'[dbo].[车间生产管理工艺_工序工价]', N'U') IS NOT NULL AND COL_LENGTH(N'[dbo].[车间生产管理工艺_工序工价]', N'机动时间s') IS NULL
  ALTER TABLE [dbo].[车间生产管理工艺_工序工价] ADD [机动时间s] [decimal](18, 4) NOT NULL CONSTRAINT [DF_车间生产管理工艺_工序工价_机动时间s] DEFAULT ((0));
GO
IF OBJECT_ID(N'[dbo].[车间生产管理工艺_工序工价]', N'U') IS NOT NULL AND COL_LENGTH(N'[dbo].[车间生产管理工艺_工序工价]', N'辅助时间s') IS NULL
  ALTER TABLE [dbo].[车间生产管理工艺_工序工价] ADD [辅助时间s] [decimal](18, 4) NOT NULL CONSTRAINT [DF_车间生产管理工艺_工序工价_辅助时间s] DEFAULT ((0));
GO
IF OBJECT_ID(N'[dbo].[车间生产管理工艺_工序工价]', N'U') IS NOT NULL AND COL_LENGTH(N'[dbo].[车间生产管理工艺_工序工价]', N'总时间s') IS NULL
  ALTER TABLE [dbo].[车间生产管理工艺_工序工价] ADD [总时间s] [decimal](18, 4) NOT NULL CONSTRAINT [DF_车间生产管理工艺_工序工价_总时间s] DEFAULT ((0));
GO
IF OBJECT_ID(N'[dbo].[车间生产管理工艺_工序工价]', N'U') IS NOT NULL AND COL_LENGTH(N'[dbo].[车间生产管理工艺_工序工价]', N'单装数量(件)') IS NULL
  ALTER TABLE [dbo].[车间生产管理工艺_工序工价] ADD [单装数量(件)] [decimal](18, 4) NOT NULL CONSTRAINT [DF_车间生产管理工艺_工序工价_单装数量件] DEFAULT ((0));
GO
IF OBJECT_ID(N'[dbo].[车间生产管理工艺_工序工价]', N'U') IS NOT NULL AND COL_LENGTH(N'[dbo].[车间生产管理工艺_工序工价]', N'操作台数') IS NULL
  ALTER TABLE [dbo].[车间生产管理工艺_工序工价] ADD [操作台数] [decimal](18, 4) NOT NULL CONSTRAINT [DF_车间生产管理工艺_工序工价_操作台数] DEFAULT ((0));
GO
IF OBJECT_ID(N'[dbo].[车间生产管理工艺_工序工价]', N'U') IS NOT NULL AND COL_LENGTH(N'[dbo].[车间生产管理工艺_工序工价]', N'日产能(件)') IS NULL
  ALTER TABLE [dbo].[车间生产管理工艺_工序工价] ADD [日产能(件)] [decimal](18, 4) NOT NULL CONSTRAINT [DF_车间生产管理工艺_工序工价_日产能件] DEFAULT ((0));
GO
IF OBJECT_ID(N'[dbo].[车间生产管理工艺_工序工价]', N'U') IS NOT NULL AND COL_LENGTH(N'[dbo].[车间生产管理工艺_工序工价]', N'最终单价(元/件)') IS NULL
  ALTER TABLE [dbo].[车间生产管理工艺_工序工价] ADD [最终单价(元/件)] [decimal](18, 4) NOT NULL CONSTRAINT [DF_车间生产管理工艺_工序工价_最终单价元件] DEFAULT ((0));
GO
IF OBJECT_ID(N'[dbo].[车间生产管理工艺_工序工价]', N'U') IS NOT NULL AND COL_LENGTH(N'[dbo].[车间生产管理工艺_工序工价]', N'变更次数') IS NULL
  ALTER TABLE [dbo].[车间生产管理工艺_工序工价] ADD [变更次数] [int] NOT NULL CONSTRAINT [DF_车间生产管理工艺_工序工价_变更次数] DEFAULT ((0));
GO

-- 工序流水号唯一索引，避免同一工序重复维护当前工价；修改人:Ld 修改时间:2026-07-03 08:02:29;
IF OBJECT_ID(N'[dbo].[车间生产管理工艺_工序工价]', N'U') IS NOT NULL
AND NOT EXISTS (
  SELECT 1
  FROM sys.indexes
  WHERE name = N'UX_车间生产管理工艺_工序工价_工序流水号'
    AND object_id = OBJECT_ID(N'[dbo].[车间生产管理工艺_工序工价]')
)
BEGIN
  CREATE UNIQUE NONCLUSTERED INDEX [UX_车间生产管理工艺_工序工价_工序流水号]
    ON [dbo].[车间生产管理工艺_工序工价]([工序流水号])
    WHERE [工序流水号] IS NOT NULL;
END
GO

-- 工序工价历史表，仅记录最终单价前后数据；修改人:Ld 修改时间:2026-07-06 09:27:09;
IF OBJECT_ID(N'[dbo].[车间生产管理工艺_工序工价历史记录]', N'U') IS NULL
BEGIN
  CREATE TABLE [dbo].[车间生产管理工艺_工序工价历史记录](
    [历史流水号] [int] IDENTITY(1,1) NOT NULL,
    [工价流水号] [int] NULL,
    [工序流水号] [int] NULL,
    [工艺名称] [nvarchar](100) NULL,
    [工序名称] [nvarchar](100) NULL,
    [零件名称] [nvarchar](100) NULL,
    [图号] [nvarchar](100) NULL,
    [操作类型] [nvarchar](20) NOT NULL,
    [变更前] [nvarchar](max) NULL,
    [变更后] [nvarchar](max) NULL,
    [操作人] [nvarchar](50) NULL,
    [操作时间] [datetime] NOT NULL CONSTRAINT [DF_车间生产管理工艺_工序工价历史记录_操作时间] DEFAULT (GETDATE()),
    [备注] [nvarchar](500) NULL,
    CONSTRAINT [PK_车间生产管理工艺_工序工价历史记录] PRIMARY KEY CLUSTERED ([历史流水号] ASC)
  );
END
GO

-- 清理旧历史中的多字段内容，历史弹窗只保留最终单价数据；修改人:Ld 修改时间:2026-07-06 09:27:09;
IF OBJECT_ID(N'[dbo].[车间生产管理工艺_工序工价历史记录]', N'U') IS NOT NULL
BEGIN
  UPDATE [dbo].[车间生产管理工艺_工序工价历史记录]
  SET 变更前 = CASE
        WHEN 变更前 IS NULL OR 变更前 = N'' THEN 变更前
        WHEN CHARINDEX(N'最终单价(元/件)=', 变更前) > 0 THEN
          SUBSTRING(
            变更前,
            CHARINDEX(N'最终单价(元/件)=', 变更前),
            CASE
              WHEN CHARINDEX(N';', 变更前 + N';', CHARINDEX(N'最终单价(元/件)=', 变更前)) > 0
                THEN CHARINDEX(N';', 变更前 + N';', CHARINDEX(N'最终单价(元/件)=', 变更前)) - CHARINDEX(N'最终单价(元/件)=', 变更前)
              ELSE LEN(变更前)
            END
          )
        ELSE 变更前
      END,
      变更后 = CASE
        WHEN 变更后 IS NULL OR 变更后 = N'' THEN 变更后
        WHEN CHARINDEX(N'最终单价(元/件)=', 变更后) > 0 THEN
          SUBSTRING(
            变更后,
            CHARINDEX(N'最终单价(元/件)=', 变更后),
            CASE
              WHEN CHARINDEX(N';', 变更后 + N';', CHARINDEX(N'最终单价(元/件)=', 变更后)) > 0
                THEN CHARINDEX(N';', 变更后 + N';', CHARINDEX(N'最终单价(元/件)=', 变更后)) - CHARINDEX(N'最终单价(元/件)=', 变更后)
              ELSE LEN(变更后)
            END
          )
        ELSE 变更后
      END
  WHERE (变更前 LIKE N'%最终单价(元/件)=%' AND 变更前 LIKE N'%;%')
     OR (变更后 LIKE N'%最终单价(元/件)=%' AND 变更后 LIKE N'%;%');

  -- 修改人:Ld 修改时间:2026-07-06 09:27:09; 兼容早期历史中的单件工价字段并统一为最终单价
  UPDATE [dbo].[车间生产管理工艺_工序工价历史记录]
  SET 变更前 = CASE
        WHEN 变更前 IS NULL OR 变更前 = N'' THEN 变更前
        WHEN CHARINDEX(N'单件工价=', 变更前) > 0 THEN
          N'最终单价(元/件)=' + SUBSTRING(
            变更前,
            CHARINDEX(N'单件工价=', 变更前) + LEN(N'单件工价='),
            CASE
              WHEN CHARINDEX(N';', 变更前 + N';', CHARINDEX(N'单件工价=', 变更前)) > 0
                THEN CHARINDEX(N';', 变更前 + N';', CHARINDEX(N'单件工价=', 变更前)) - CHARINDEX(N'单件工价=', 变更前) - LEN(N'单件工价=')
              ELSE LEN(变更前)
            END
          )
        ELSE 变更前
      END,
      变更后 = CASE
        WHEN 变更后 IS NULL OR 变更后 = N'' THEN 变更后
        WHEN CHARINDEX(N'单件工价=', 变更后) > 0 THEN
          N'最终单价(元/件)=' + SUBSTRING(
            变更后,
            CHARINDEX(N'单件工价=', 变更后) + LEN(N'单件工价='),
            CASE
              WHEN CHARINDEX(N';', 变更后 + N';', CHARINDEX(N'单件工价=', 变更后)) > 0
                THEN CHARINDEX(N';', 变更后 + N';', CHARINDEX(N'单件工价=', 变更后)) - CHARINDEX(N'单件工价=', 变更后) - LEN(N'单件工价=')
              ELSE LEN(变更后)
            END
          )
        ELSE 变更后
      END
  WHERE 变更前 LIKE N'%单件工价=%'
     OR 变更后 LIKE N'%单件工价=%';
END
GO

-- 工序工价分页查询，参考制定工艺组件订单、产品、零件数据源后再展开有工序名称的数据；修改人:Ld 修改时间:2026-07-06 09:00:29;
IF OBJECT_ID(N'[dbo].[车间生产管理工艺_工序工价_查询数据]', N'P') IS NOT NULL
  DROP PROCEDURE [dbo].[车间生产管理工艺_工序工价_查询数据];
GO

CREATE PROCEDURE [dbo].[车间生产管理工艺_工序工价_查询数据]
  @订单流水号_check INT = 0,
  @订单流水号 INT = NULL,
  @组件流水号_check INT = 0,
  @组件流水号 INT = NULL,
  @工艺计划流水号_check INT = 0,
  @工艺计划流水号 INT = NULL,
  @工艺名称_check INT = 0,
  @工艺名称 NVARCHAR(100) = N'',
  @工序名称_check INT = 0,
  @工序名称 NVARCHAR(100) = N'',
  @零件名称_check INT = 0,
  @零件名称 NVARCHAR(100) = N'',
  @图号_check INT = 0,
  @图号 NVARCHAR(100) = N'',
  @是否启用_check INT = 0,
  @是否启用 NVARCHAR(20) = N'',
  @PageCurrent INT = 1,
  @PageSize INT = 1000
AS
BEGIN
  SET NOCOUNT ON;

  IF @PageCurrent IS NULL OR @PageCurrent < 1 SET @PageCurrent = 1;
  -- 修改人:Ld 修改时间:2026-07-06 08:52:37;
  -- 工序工价数据超过 100 条，默认页大小放大，页面仍可按分页参数控制
  IF @PageSize IS NULL OR @PageSize < 1 SET @PageSize = 1000;

  ;WITH PlanData AS (
    -- 修改人:Ld 修改时间:2026-07-06 08:36:02;
    -- 与制定工艺组件订单、产品、零件选择保持同一工艺计划来源口径
    SELECT gp.*
    FROM [dbo].[车间生产管理_零件工艺计划_视图] gp
    WHERE gp.考核状态 >= 1
      AND (@订单流水号_check = 0 OR gp.订单流水号 = @订单流水号)
      AND (@组件流水号_check = 0 OR gp.组件流水号 = @组件流水号)
      AND (@工艺计划流水号_check = 0 OR gp.工艺计划流水号 = @工艺计划流水号)
      AND (@零件名称_check = 0 OR gp.零件名称 + gp.零件图号 LIKE N'%' + @零件名称 + N'%')
      AND (@图号_check = 0 OR gp.零件图号 LIKE N'%' + @图号 + N'%')
  ),
  ProcessData AS (
    SELECT
      ROW_NUMBER() OVER (
        ORDER BY gp.工艺更新时间 DESC, gp.工艺计划流水号 DESC, gx.工序顺序 ASC, gx.工序流水号 ASC
      ) AS RowNum,
      price.工价流水号,
      gx.工序流水号,
      gx.工艺计划流水号,
      gp.订单号,
      gp.产品名称,
      base.工艺名称 AS 工艺名称,
      base.工艺名称 AS 工序名称,
      gp.零件名称,
      gp.零件图号 AS 图号,
      gx.工序顺序,
      gx.定额工时,
      gx.准结工时,
      ISNULL(price.[机动时间s], 0) AS [机动时间s],
      ISNULL(price.[辅助时间s], 0) AS [辅助时间s],
      ISNULL(price.[总时间s], 0) AS [总时间s],
      ISNULL(price.[单装数量(件)], 0) AS [单装数量(件)],
      ISNULL(price.[操作台数], 0) AS [操作台数],
      ISNULL(price.[日产能(件)], 0) AS [日产能(件)],
      ISNULL(price.[最终单价(元/件)], 0) AS [最终单价(元/件)],
      CONVERT(VARCHAR(10), price.生效日期, 23) AS 生效日期,
      ISNULL(price.变更次数, 0) AS 变更次数,
      ISNULL(price.是否启用, 1) AS 是否启用,
      price.备注,
      price.创建人,
      CONVERT(VARCHAR(19), price.创建时间, 120) AS 创建时间,
      price.修改人,
      CONVERT(VARCHAR(19), price.修改时间, 120) AS 修改时间
    FROM PlanData gp
      INNER JOIN [dbo].[车间生产管理工艺_零件工序] gx ON gp.工艺计划流水号 = gx.工艺计划流水号
      LEFT JOIN [dbo].[车间生产管理工艺_基础表_工艺名称] base ON gx.工艺编号 = base.工艺编号
      LEFT JOIN [dbo].[车间生产管理工艺_工序工价] price ON gx.工序流水号 = price.工序流水号
    WHERE NULLIF(LTRIM(RTRIM(base.工艺名称)), N'') IS NOT NULL
      AND (@工艺名称_check = 0 OR base.工艺名称 LIKE N'%' + @工艺名称 + N'%')
      AND (@工序名称_check = 0 OR base.工艺名称 LIKE N'%' + @工序名称 + N'%')
      AND (@是否启用_check = 0 OR CAST(ISNULL(price.是否启用, 1) AS NVARCHAR(20)) = @是否启用)
  )
  SELECT
    工价流水号,
    工序流水号,
    工艺计划流水号,
    订单号,
    产品名称,
    工艺名称,
    工序名称,
    零件名称,
    图号,
    工序顺序,
    定额工时,
    准结工时,
    [机动时间s],
    [辅助时间s],
    [总时间s],
    [单装数量(件)],
    操作台数,
    [日产能(件)],
    [最终单价(元/件)],
    生效日期,
    变更次数,
    是否启用,
    备注,
    创建人,
    创建时间,
    修改人,
    修改时间
  FROM ProcessData
  WHERE RowNum BETWEEN ((@PageCurrent - 1) * @PageSize + 1) AND (@PageCurrent * @PageSize)
  ORDER BY RowNum;

  SELECT COUNT(1) AS total
  FROM [dbo].[车间生产管理_零件工艺计划_视图] gp
    INNER JOIN [dbo].[车间生产管理工艺_零件工序] gx ON gp.工艺计划流水号 = gx.工艺计划流水号
    LEFT JOIN [dbo].[车间生产管理工艺_基础表_工艺名称] base ON gx.工艺编号 = base.工艺编号
    LEFT JOIN [dbo].[车间生产管理工艺_工序工价] price ON gx.工序流水号 = price.工序流水号
  WHERE gp.考核状态 >= 1
    AND (@订单流水号_check = 0 OR gp.订单流水号 = @订单流水号)
    AND (@组件流水号_check = 0 OR gp.组件流水号 = @组件流水号)
    AND (@工艺计划流水号_check = 0 OR gp.工艺计划流水号 = @工艺计划流水号)
    AND NULLIF(LTRIM(RTRIM(base.工艺名称)), N'') IS NOT NULL
    AND (@工艺名称_check = 0 OR base.工艺名称 LIKE N'%' + @工艺名称 + N'%')
    AND (@工序名称_check = 0 OR base.工艺名称 LIKE N'%' + @工序名称 + N'%')
    AND (@零件名称_check = 0 OR gp.零件名称 + gp.零件图号 LIKE N'%' + @零件名称 + N'%')
    AND (@图号_check = 0 OR gp.零件图号 LIKE N'%' + @图号 + N'%')
    AND (@是否启用_check = 0 OR CAST(ISNULL(price.是否启用, 1) AS NVARCHAR(20)) = @是否启用);
END
GO

-- 工序工价新增；修改人:Ld 修改时间:2026-07-03 08:02:29;
IF OBJECT_ID(N'[dbo].[车间生产管理工艺_工序工价_增加数据]', N'P') IS NOT NULL
  DROP PROCEDURE [dbo].[车间生产管理工艺_工序工价_增加数据];
GO

CREATE PROCEDURE [dbo].[车间生产管理工艺_工序工价_增加数据]
  @工价流水号 NVARCHAR(50) = N'',
  @工艺名称 NVARCHAR(100) = N'',
  @工序名称 NVARCHAR(100) = N'',
  @零件名称 NVARCHAR(100) = N'',
  @图号 NVARCHAR(100) = N'',
  @机动时间s NVARCHAR(50) = N'',
  @辅助时间s NVARCHAR(50) = N'',
  @总时间s NVARCHAR(50) = N'',
  @单装数量件 NVARCHAR(50) = N'',
  @操作台数 NVARCHAR(50) = N'',
  @日产能件 NVARCHAR(50) = N'',
  @最终单价元件 NVARCHAR(50) = N'',
  @生效日期 NVARCHAR(50) = N'',
  @变更次数 NVARCHAR(50) = N'',
  @是否启用 NVARCHAR(20) = N'',
  @备注 NVARCHAR(500) = N'',
  @工序流水号 NVARCHAR(50) = N'',
  @创建人 NVARCHAR(50) = N'',
  @修改人 NVARCHAR(50) = N''
AS
BEGIN
  EXEC [dbo].[车间生产管理工艺_工序工价_编辑数据]
    @工价流水号 = @工价流水号,
    @工艺名称 = @工艺名称,
    @工序名称 = @工序名称,
    @零件名称 = @零件名称,
    @图号 = @图号,
    @机动时间s = @机动时间s,
    @辅助时间s = @辅助时间s,
    @总时间s = @总时间s,
    @单装数量件 = @单装数量件,
    @操作台数 = @操作台数,
    @日产能件 = @日产能件,
    @最终单价元件 = @最终单价元件,
    @生效日期 = @生效日期,
    @变更次数 = @变更次数,
    @是否启用 = @是否启用,
    @备注 = @备注,
    @工序流水号 = @工序流水号,
    @修改人 = @修改人;
END
GO

-- 工序工价编辑，按已有工序流水号新增或更新工价记录；修改人:Ld 修改时间:2026-07-03 08:02:29;
IF OBJECT_ID(N'[dbo].[车间生产管理工艺_工序工价_编辑数据]', N'P') IS NOT NULL
  DROP PROCEDURE [dbo].[车间生产管理工艺_工序工价_编辑数据];
GO

CREATE PROCEDURE [dbo].[车间生产管理工艺_工序工价_编辑数据]
  @工价流水号 NVARCHAR(50) = N'',
  @工艺名称 NVARCHAR(100) = N'',
  @工序名称 NVARCHAR(100) = N'',
  @零件名称 NVARCHAR(100) = N'',
  @图号 NVARCHAR(100) = N'',
  @机动时间s NVARCHAR(50) = N'',
  @辅助时间s NVARCHAR(50) = N'',
  @总时间s NVARCHAR(50) = N'',
  @单装数量件 NVARCHAR(50) = N'',
  @操作台数 NVARCHAR(50) = N'',
  @日产能件 NVARCHAR(50) = N'',
  @最终单价元件 NVARCHAR(50) = N'',
  @生效日期 NVARCHAR(50) = N'',
  @变更次数 NVARCHAR(50) = N'',
  @是否启用 NVARCHAR(20) = N'',
  @备注 NVARCHAR(500) = N'',
  @工序流水号 NVARCHAR(50) = N'',
  @修改人 NVARCHAR(50) = N''
AS
BEGIN
  SET NOCOUNT ON;

  DECLARE @Id INT;
  DECLARE @Safe工序流水号 INT;
  DECLARE @Safe机动时间s DECIMAL(18, 4);
  DECLARE @Safe辅助时间s DECIMAL(18, 4);
  DECLARE @Safe总时间s DECIMAL(18, 4);
  DECLARE @Safe单装数量件 DECIMAL(18, 4);
  DECLARE @Safe操作台数 DECIMAL(18, 4);
  DECLARE @Safe日产能件 DECIMAL(18, 4);
  DECLARE @Safe最终单价元件 DECIMAL(18, 4);
  DECLARE @Safe生效日期 DATE;
  DECLARE @Safe变更次数 INT;
  DECLARE @Safe是否启用 BIT = CASE WHEN NULLIF(@是否启用, N'') IS NULL THEN 1 WHEN @是否启用 = N'1' THEN 1 ELSE 0 END;
  DECLARE @操作人 NVARCHAR(50) = NULLIF(@修改人, N'');
  DECLARE @当前时间 DATETIME = GETDATE();
  DECLARE @旧数据 NVARCHAR(MAX);
  DECLARE @新数据 NVARCHAR(MAX);
  DECLARE @Old工序流水号 INT;

  SET @Id = CASE WHEN ISNUMERIC(NULLIF(@工价流水号, N'')) = 1 THEN CONVERT(INT, @工价流水号) ELSE NULL END;
  SET @Safe工序流水号 = CASE WHEN ISNUMERIC(NULLIF(@工序流水号, N'')) = 1 THEN CONVERT(INT, @工序流水号) ELSE NULL END;
  SET @Safe机动时间s = CASE WHEN ISNUMERIC(NULLIF(@机动时间s, N'')) = 1 THEN CONVERT(DECIMAL(18, 4), @机动时间s) ELSE 0 END;
  SET @Safe辅助时间s = CASE WHEN ISNUMERIC(NULLIF(@辅助时间s, N'')) = 1 THEN CONVERT(DECIMAL(18, 4), @辅助时间s) ELSE 0 END;
  SET @Safe总时间s = CASE WHEN ISNUMERIC(NULLIF(@总时间s, N'')) = 1 THEN CONVERT(DECIMAL(18, 4), @总时间s) ELSE 0 END;
  SET @Safe单装数量件 = CASE WHEN ISNUMERIC(NULLIF(@单装数量件, N'')) = 1 THEN CONVERT(DECIMAL(18, 4), @单装数量件) ELSE 0 END;
  SET @Safe操作台数 = CASE WHEN ISNUMERIC(NULLIF(@操作台数, N'')) = 1 THEN CONVERT(DECIMAL(18, 4), @操作台数) ELSE 0 END;
  SET @Safe日产能件 = CASE WHEN ISNUMERIC(NULLIF(@日产能件, N'')) = 1 THEN CONVERT(DECIMAL(18, 4), @日产能件) ELSE 0 END;
  SET @Safe最终单价元件 = CASE WHEN ISNUMERIC(NULLIF(@最终单价元件, N'')) = 1 THEN CONVERT(DECIMAL(18, 4), @最终单价元件) ELSE 0 END;
  SET @Safe生效日期 = CASE WHEN ISDATE(NULLIF(@生效日期, N'')) = 1 THEN CONVERT(DATE, @生效日期) ELSE NULL END;
  SET @Safe变更次数 = CASE WHEN ISNUMERIC(NULLIF(@变更次数, N'')) = 1 THEN CONVERT(INT, @变更次数) ELSE 0 END;

  IF @Safe工序流水号 IS NULL
  BEGIN
    SELECT N'0' AS result, N'工序流水号不能为空' AS message;
    RETURN;
  END;

  IF NULLIF(LTRIM(RTRIM(@工艺名称)), N'') IS NULL
    OR NULLIF(LTRIM(RTRIM(@工序名称)), N'') IS NULL
    OR NULLIF(LTRIM(RTRIM(@零件名称)), N'') IS NULL
    OR NULLIF(LTRIM(RTRIM(@图号)), N'') IS NULL
  BEGIN
    SELECT N'0' AS result, N'工艺名称、工序名称、零件名称和图号不能为空' AS message;
    RETURN;
  END;

  IF @Id IS NULL
  BEGIN
    SELECT TOP 1 @Id = 工价流水号
    FROM [dbo].[车间生产管理工艺_工序工价]
    WHERE 工序流水号 = @Safe工序流水号;
  END;

  IF @Id IS NOT NULL
  AND NOT EXISTS (
    SELECT 1
    FROM [dbo].[车间生产管理工艺_工序工价]
    WHERE 工价流水号 = @Id
  )
  BEGIN
    SELECT N'0' AS result, N'工序工价记录不存在' AS message;
    RETURN;
  END;

  BEGIN TRY
    BEGIN TRAN;

    IF @Id IS NOT NULL
    BEGIN
      SELECT
        @Old工序流水号 = 工序流水号,
        -- 修改人:Ld 修改时间:2026-07-06 09:27:09; 历史数据只存储最终单价
        @旧数据 = N'最终单价(元/件)=' + CONVERT(NVARCHAR(50), ISNULL([最终单价(元/件)], 0))
      FROM [dbo].[车间生产管理工艺_工序工价]
      WHERE 工价流水号 = @Id;

      UPDATE [dbo].[车间生产管理工艺_工序工价]
      SET 工序流水号 = @Safe工序流水号,
          工艺名称 = LTRIM(RTRIM(@工艺名称)),
          工序名称 = LTRIM(RTRIM(@工序名称)),
          零件名称 = LTRIM(RTRIM(@零件名称)),
          图号 = LTRIM(RTRIM(@图号)),
          [机动时间s] = @Safe机动时间s,
          [辅助时间s] = @Safe辅助时间s,
          [总时间s] = @Safe总时间s,
          [单装数量(件)] = @Safe单装数量件,
          [操作台数] = @Safe操作台数,
          [日产能(件)] = @Safe日产能件,
          [最终单价(元/件)] = @Safe最终单价元件,
          生效日期 = @Safe生效日期,
          变更次数 = @Safe变更次数,
          是否启用 = @Safe是否启用,
          备注 = NULLIF(@备注, N''),
          计价方式 = N'按件',
          单件工价 = @Safe最终单价元件,
          修改人 = @操作人,
          修改时间 = @当前时间
      WHERE 工价流水号 = @Id;
    END
    ELSE
    BEGIN
      INSERT INTO [dbo].[车间生产管理工艺_工序工价](
        工序流水号,
        工艺名称,
        工序名称,
        零件名称,
        图号,
        [机动时间s],
        [辅助时间s],
        [总时间s],
        [单装数量(件)],
        [操作台数],
        [日产能(件)],
        [最终单价(元/件)],
        生效日期,
        变更次数,
        是否启用,
        备注,
        创建人,
        创建时间,
        修改人,
        修改时间,
        计价方式,
        单件工价
      )
      VALUES (
        @Safe工序流水号,
        LTRIM(RTRIM(@工艺名称)),
        LTRIM(RTRIM(@工序名称)),
        LTRIM(RTRIM(@零件名称)),
        LTRIM(RTRIM(@图号)),
        @Safe机动时间s,
        @Safe辅助时间s,
        @Safe总时间s,
        @Safe单装数量件,
        @Safe操作台数,
        @Safe日产能件,
        @Safe最终单价元件,
        @Safe生效日期,
        @Safe变更次数,
        @Safe是否启用,
        NULLIF(@备注, N''),
        @操作人,
        @当前时间,
        @操作人,
        @当前时间,
        N'按件',
        @Safe最终单价元件
      );

      SET @Id = SCOPE_IDENTITY();
      SET @Old工序流水号 = @Safe工序流水号;
      SET @旧数据 = N'';
    END;

    -- 修改人:Ld 修改时间:2026-07-06 09:27:09; 历史数据只存储最终单价
    SET @新数据 = N'最终单价(元/件)=' + CONVERT(NVARCHAR(50), @Safe最终单价元件);

    INSERT INTO [dbo].[车间生产管理工艺_工序工价历史记录](
      工价流水号,
      工序流水号,
      工艺名称,
      工序名称,
      零件名称,
      图号,
      操作类型,
      变更前,
      变更后,
      操作人,
      操作时间,
      备注
    )
    VALUES (
      @Id,
      ISNULL(@Safe工序流水号, @Old工序流水号),
      LTRIM(RTRIM(@工艺名称)),
      LTRIM(RTRIM(@工序名称)),
      LTRIM(RTRIM(@零件名称)),
      LTRIM(RTRIM(@图号)),
      CASE WHEN @旧数据 = N'' THEN N'新增' ELSE N'编辑' END,
      @旧数据,
      @新数据,
      @操作人,
      @当前时间,
      NULLIF(@备注, N'')
    );

    COMMIT TRAN;

    SELECT N'1' AS result, @Id AS 工价流水号;
  END TRY
  BEGIN CATCH
    IF @@TRANCOUNT > 0
      ROLLBACK TRAN;

    SELECT N'0' AS result, ERROR_MESSAGE() AS message;
  END CATCH;
END
GO

-- 工序工价停用；修改人:Ld 修改时间:2026-07-03 08:02:29;
IF OBJECT_ID(N'[dbo].[车间生产管理工艺_工序工价_删除数据]', N'P') IS NOT NULL
  DROP PROCEDURE [dbo].[车间生产管理工艺_工序工价_删除数据];
GO

CREATE PROCEDURE [dbo].[车间生产管理工艺_工序工价_删除数据]
  @工价流水号 NVARCHAR(50) = N'',
  @修改人 NVARCHAR(50) = N''
AS
BEGIN
  SET NOCOUNT ON;

  DECLARE @Id INT;
  DECLARE @操作人 NVARCHAR(50) = NULLIF(@修改人, N'');
  DECLARE @当前时间 DATETIME = GETDATE();
  DECLARE @旧数据 NVARCHAR(MAX);
  DECLARE @工序流水号 INT;
  DECLARE @工艺名称 NVARCHAR(100);
  DECLARE @工序名称 NVARCHAR(100);
  DECLARE @零件名称 NVARCHAR(100);
  DECLARE @图号 NVARCHAR(100);
  DECLARE @变更后 NVARCHAR(MAX);

  SET @Id = CASE WHEN ISNUMERIC(NULLIF(@工价流水号, N'')) = 1 THEN CONVERT(INT, @工价流水号) ELSE NULL END;

  IF @Id IS NULL
  BEGIN
    SELECT N'0' AS result, N'工价流水号不能为空' AS message;
    RETURN;
  END;

  IF NOT EXISTS (
    SELECT 1
    FROM [dbo].[车间生产管理工艺_工序工价]
    WHERE 工价流水号 = @Id
  )
  BEGIN
    SELECT N'0' AS result, N'工序工价记录不存在' AS message;
    RETURN;
  END;

  BEGIN TRY
    BEGIN TRAN;

    SELECT
      @工序流水号 = 工序流水号,
      @工艺名称 = 工艺名称,
      @工序名称 = 工序名称,
      @零件名称 = 零件名称,
      @图号 = 图号,
      -- 修改人:Ld 修改时间:2026-07-06 09:27:09; 停用历史只记录最终单价
      @旧数据 = N'最终单价(元/件)=' + CONVERT(NVARCHAR(50), ISNULL([最终单价(元/件)], 0))
    FROM [dbo].[车间生产管理工艺_工序工价]
    WHERE 工价流水号 = @Id;

    UPDATE [dbo].[车间生产管理工艺_工序工价]
    SET 是否启用 = 0,
        修改人 = @操作人,
        修改时间 = @当前时间
    WHERE 工价流水号 = @Id;

    -- 修改人:Ld 修改时间:2026-07-06 09:27:09; 停用历史只记录最终单价
    SET @变更后 = @旧数据;

    INSERT INTO [dbo].[车间生产管理工艺_工序工价历史记录](
      工价流水号,
      工序流水号,
      工艺名称,
      工序名称,
      零件名称,
      图号,
      操作类型,
      变更前,
      变更后,
      操作人,
      操作时间,
      备注
    )
    VALUES (
      @Id,
      @工序流水号,
      @工艺名称,
      @工序名称,
      @零件名称,
      @图号,
      N'停用',
      @旧数据,
      @变更后,
      @操作人,
      @当前时间,
      N''
    );

    COMMIT TRAN;

    SELECT N'1' AS result;
  END TRY
  BEGIN CATCH
    IF @@TRANCOUNT > 0
      ROLLBACK TRAN;

    SELECT N'0' AS result, ERROR_MESSAGE() AS message;
  END CATCH;
END
GO

-- 工序工价复制源查询，仅返回零件名称、工序号和工艺名称；修改人:Ld 修改时间:2026-07-06 08:45:45;
IF OBJECT_ID(N'[dbo].[车间生产管理工艺_工序工价_复制源_查询数据]', N'P') IS NOT NULL
  DROP PROCEDURE [dbo].[车间生产管理工艺_工序工价_复制源_查询数据];
GO

CREATE PROCEDURE [dbo].[车间生产管理工艺_工序工价_复制源_查询数据]
  @零件图号 NVARCHAR(100) = N''
AS
BEGIN
  SET NOCOUNT ON;

  DECLARE @源工艺计划流水号 INT;

  SELECT TOP 1 @源工艺计划流水号 = 工艺计划流水号
  FROM [dbo].[车间生产管理_零件工艺计划_视图]
  WHERE 零件图号 = @零件图号
    AND 考核状态 >= 1
  ORDER BY 工艺更新时间 DESC, 工艺计划流水号 DESC;

  SELECT
    gp.零件名称,
    gx.工序顺序,
    ISNULL(base.工艺名称, N'未设置工序') AS 工艺名称
  FROM [dbo].[车间生产管理工艺_零件工序] gx
    LEFT JOIN [dbo].[车间生产管理工艺_基础表_工艺名称] base ON gx.工艺编号 = base.工艺编号
    LEFT JOIN [dbo].[车间生产管理_零件工艺计划_视图] gp ON gx.工艺计划流水号 = gp.工艺计划流水号
  WHERE gx.工艺计划流水号 = @源工艺计划流水号
  ORDER BY gx.工序顺序;
END
GO

-- 工序工价复制，按工序号和工艺名称匹配源零件已维护工价；修改人:Ld 修改时间:2026-07-06 08:45:45;
IF OBJECT_ID(N'[dbo].[车间生产管理工艺_工序工价_复制数据]', N'P') IS NOT NULL
  DROP PROCEDURE [dbo].[车间生产管理工艺_工序工价_复制数据];
GO

CREATE PROCEDURE [dbo].[车间生产管理工艺_工序工价_复制数据]
  @目标工艺计划流水号 NVARCHAR(50) = N'',
  @源零件图号 NVARCHAR(100) = N'',
  @修改人 NVARCHAR(50) = N''
AS
BEGIN
  SET NOCOUNT ON;

  DECLARE @TargetPlanId INT;
  DECLARE @SourcePlanId INT;
  DECLARE @操作人 NVARCHAR(50) = NULLIF(@修改人, N'');
  DECLARE @当前时间 DATETIME = GETDATE();

  SET @TargetPlanId = CASE WHEN ISNUMERIC(NULLIF(@目标工艺计划流水号, N'')) = 1 THEN CONVERT(INT, @目标工艺计划流水号) ELSE NULL END;

  IF @TargetPlanId IS NULL
  BEGIN
    SELECT N'0' AS result, N'目标零件不能为空' AS message;
    RETURN;
  END;

  SELECT TOP 1 @SourcePlanId = 工艺计划流水号
  FROM [dbo].[车间生产管理_零件工艺计划_视图]
  WHERE 零件图号 = @源零件图号
    AND 考核状态 >= 1
  ORDER BY 工艺更新时间 DESC, 工艺计划流水号 DESC;

  IF @SourcePlanId IS NULL
  BEGIN
    SELECT N'0' AS result, N'源零件没有可复制的工序数据' AS message;
    RETURN;
  END;

  IF @SourcePlanId = @TargetPlanId
  BEGIN
    SELECT N'0' AS result, N'不能复制当前零件自身' AS message;
    RETURN;
  END;

  IF OBJECT_ID(N'tempdb..#CopyRows') IS NOT NULL DROP TABLE #CopyRows;
  CREATE TABLE #CopyRows(
    工序流水号 INT NOT NULL,
    工艺名称 NVARCHAR(100) NOT NULL,
    工序名称 NVARCHAR(100) NOT NULL,
    零件名称 NVARCHAR(100) NOT NULL,
    图号 NVARCHAR(100) NOT NULL,
    [机动时间s] DECIMAL(18, 4) NOT NULL,
    [辅助时间s] DECIMAL(18, 4) NOT NULL,
    [总时间s] DECIMAL(18, 4) NOT NULL,
    [单装数量(件)] DECIMAL(18, 4) NOT NULL,
    [操作台数] DECIMAL(18, 4) NOT NULL,
    [日产能(件)] DECIMAL(18, 4) NOT NULL,
    [最终单价(元/件)] DECIMAL(18, 4) NOT NULL,
    生效日期 DATE NULL,
    变更次数 INT NOT NULL,
    是否启用 BIT NOT NULL,
    备注 NVARCHAR(500) NULL
  );

  -- 修改人:Ld 修改时间:2026-07-06 08:45:45;
  -- 源与目标仅按工序号和工艺名称匹配，避免带入制定工艺的其他工艺编辑数据
  INSERT INTO #CopyRows(
    工序流水号,
    工艺名称,
    工序名称,
    零件名称,
    图号,
    [机动时间s],
    [辅助时间s],
    [总时间s],
    [单装数量(件)],
    [操作台数],
    [日产能(件)],
    [最终单价(元/件)],
    生效日期,
    变更次数,
    是否启用,
    备注
  )
  SELECT
    targetGx.工序流水号,
    ISNULL(targetBase.工艺名称, N'未设置工序') AS 工艺名称,
    ISNULL(targetBase.工艺名称, N'未设置工序') AS 工序名称,
    targetGp.零件名称,
    targetGp.零件图号 AS 图号,
    sourcePrice.[机动时间s],
    sourcePrice.[辅助时间s],
    sourcePrice.[总时间s],
    sourcePrice.[单装数量(件)],
    sourcePrice.[操作台数],
    sourcePrice.[日产能(件)],
    sourcePrice.[最终单价(元/件)],
    sourcePrice.生效日期,
    sourcePrice.变更次数,
    sourcePrice.是否启用,
    sourcePrice.备注
  FROM [dbo].[车间生产管理工艺_零件工序] targetGx
    LEFT JOIN [dbo].[车间生产管理工艺_基础表_工艺名称] targetBase ON targetGx.工艺编号 = targetBase.工艺编号
    LEFT JOIN [dbo].[车间生产管理_零件工艺计划_视图] targetGp ON targetGx.工艺计划流水号 = targetGp.工艺计划流水号
    INNER JOIN [dbo].[车间生产管理工艺_零件工序] sourceGx ON sourceGx.工艺计划流水号 = @SourcePlanId
      AND sourceGx.工序顺序 = targetGx.工序顺序
    LEFT JOIN [dbo].[车间生产管理工艺_基础表_工艺名称] sourceBase ON sourceGx.工艺编号 = sourceBase.工艺编号
    INNER JOIN [dbo].[车间生产管理工艺_工序工价] sourcePrice ON sourceGx.工序流水号 = sourcePrice.工序流水号
  WHERE targetGx.工艺计划流水号 = @TargetPlanId
    AND ISNULL(sourceBase.工艺名称, N'未设置工序') = ISNULL(targetBase.工艺名称, N'未设置工序');

  IF NOT EXISTS (SELECT 1 FROM #CopyRows)
  BEGIN
    SELECT N'0' AS result, N'源零件没有可匹配的工价记录' AS message;
    RETURN;
  END;

  BEGIN TRY
    BEGIN TRAN;

    UPDATE price
    SET price.工艺名称 = copyData.工艺名称,
        price.工序名称 = copyData.工序名称,
        price.零件名称 = copyData.零件名称,
        price.图号 = copyData.图号,
        price.[机动时间s] = copyData.[机动时间s],
        price.[辅助时间s] = copyData.[辅助时间s],
        price.[总时间s] = copyData.[总时间s],
        price.[单装数量(件)] = copyData.[单装数量(件)],
        price.[操作台数] = copyData.[操作台数],
        price.[日产能(件)] = copyData.[日产能(件)],
        price.[最终单价(元/件)] = copyData.[最终单价(元/件)],
        price.生效日期 = copyData.生效日期,
        price.变更次数 = copyData.变更次数,
        price.是否启用 = copyData.是否启用,
        price.备注 = copyData.备注,
        price.计价方式 = N'按件',
        price.单件工价 = copyData.[最终单价(元/件)],
        price.修改人 = @操作人,
        price.修改时间 = @当前时间
    FROM [dbo].[车间生产管理工艺_工序工价] price
      INNER JOIN #CopyRows copyData ON price.工序流水号 = copyData.工序流水号;

    INSERT INTO [dbo].[车间生产管理工艺_工序工价](
      工序流水号,
      工艺名称,
      工序名称,
      零件名称,
      图号,
      [机动时间s],
      [辅助时间s],
      [总时间s],
      [单装数量(件)],
      [操作台数],
      [日产能(件)],
      [最终单价(元/件)],
      生效日期,
      变更次数,
      是否启用,
      备注,
      创建人,
      创建时间,
      修改人,
      修改时间,
      计价方式,
      单件工价
    )
    SELECT
      copyData.工序流水号,
      copyData.工艺名称,
      copyData.工序名称,
      copyData.零件名称,
      copyData.图号,
      copyData.[机动时间s],
      copyData.[辅助时间s],
      copyData.[总时间s],
      copyData.[单装数量(件)],
      copyData.[操作台数],
      copyData.[日产能(件)],
      copyData.[最终单价(元/件)],
      copyData.生效日期,
      copyData.变更次数,
      copyData.是否启用,
      copyData.备注,
      @操作人,
      @当前时间,
      @操作人,
      @当前时间,
      N'按件',
      copyData.[最终单价(元/件)]
    FROM #CopyRows copyData
    WHERE NOT EXISTS (
      SELECT 1
      FROM [dbo].[车间生产管理工艺_工序工价] price
      WHERE price.工序流水号 = copyData.工序流水号
    );

    INSERT INTO [dbo].[车间生产管理工艺_工序工价历史记录](
      工价流水号,
      工序流水号,
      工艺名称,
      工序名称,
      零件名称,
      图号,
      操作类型,
      变更前,
      变更后,
      操作人,
      操作时间,
      备注
    )
    SELECT
      price.工价流水号,
      price.工序流水号,
      price.工艺名称,
      price.工序名称,
      price.零件名称,
      price.图号,
      N'拷贝',
      N'源零件图号=' + ISNULL(@源零件图号, N''),
      N'最终单价(元/件)=' + CONVERT(NVARCHAR(50), price.[最终单价(元/件)]),
      @操作人,
      @当前时间,
      N'工序工价拷贝'
    FROM [dbo].[车间生产管理工艺_工序工价] price
      INNER JOIN #CopyRows copyData ON price.工序流水号 = copyData.工序流水号;

    COMMIT TRAN;

    SELECT N'1' AS result, COUNT(1) AS 复制数量
    FROM #CopyRows;
  END TRY
  BEGIN CATCH
    IF @@TRANCOUNT > 0
      ROLLBACK TRAN;

    SELECT N'0' AS result, ERROR_MESSAGE() AS message;
  END CATCH;
END
GO

-- 工序工价历史查询，按该零件的该工序名称查看历史；修改人:Ld 修改时间:2026-07-06 09:00:29;
IF OBJECT_ID(N'[dbo].[车间生产管理工艺_工序工价_历史_查询数据]', N'P') IS NOT NULL
  DROP PROCEDURE [dbo].[车间生产管理工艺_工序工价_历史_查询数据];
GO

CREATE PROCEDURE [dbo].[车间生产管理工艺_工序工价_历史_查询数据]
  @零件名称_check INT = 0,
  @零件名称 NVARCHAR(100) = N'',
  @图号_check INT = 0,
  @图号 NVARCHAR(100) = N'',
  @工序名称_check INT = 0,
  @工序名称 NVARCHAR(100) = 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 HistoryData AS (
    SELECT
      ROW_NUMBER() OVER (ORDER BY 操作时间 DESC, 历史流水号 DESC) AS RowNum,
      历史流水号,
      工价流水号,
      工序流水号,
      工艺名称,
      工序名称,
      零件名称,
      图号,
      操作类型,
      变更前,
      变更后,
      操作人,
      CONVERT(VARCHAR(19), 操作时间, 120) AS 操作时间,
      备注
    FROM [dbo].[车间生产管理工艺_工序工价历史记录]
    WHERE (@零件名称_check = 0 OR 零件名称 = @零件名称)
      AND (@图号_check = 0 OR 图号 = @图号)
      AND (@工序名称_check = 0 OR 工序名称 = @工序名称)
  )
  SELECT
    历史流水号,
    工价流水号,
    工序流水号,
    工艺名称,
    工序名称,
    零件名称,
    图号,
    操作类型,
    变更前,
    变更后,
    操作人,
    操作时间,
    备注
  FROM HistoryData
  WHERE RowNum BETWEEN ((@PageCurrent - 1) * @PageSize + 1) AND (@PageCurrent * @PageSize)
  ORDER BY RowNum;

  SELECT COUNT(1) AS total
  FROM [dbo].[车间生产管理工艺_工序工价历史记录]
  WHERE (@零件名称_check = 0 OR 零件名称 = @零件名称)
    AND (@图号_check = 0 OR 图号 = @图号)
    AND (@工序名称_check = 0 OR 工序名称 = @工序名称);
END
GO
