USE [ERPTOOL_JY_20250826Back]
GO

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

-- 员工工时汇总增加工价总价，工价取工序工价当前启用最终单价，总价=完成数量*工价；修改人:Ld 修改时间:2026-07-06 09:12:38;
ALTER PROCEDURE [dbo].[车间生产管理_工人工时统计_查询数据]
  @开始时间 DATETIME = NULL,
  @结束时间 DATETIME = NULL
AS
BEGIN
  SET NOCOUNT ON;

  SELECT
    SUM(a.工时) AS 加工工时,
    SUM(a.完成数量) AS 总数量,
    SUM(a.总价) AS 总价,
    a.姓名 AS 操作者,
    a.操作者编号
  FROM (
    SELECT
      ISNULL(f.扫码工时, 0) AS 工时,
      p.姓名,
      f.操作者编号,
      f.完成日期,
      f.完成数量,
      ISNULL(f.完成数量, 0) * ISNULL(price.工价, 0) AS 总价
    FROM dbo.设备管理_零件工序_工序完成过程情况 f
      INNER JOIN dbo.人事档案管理_人员名单 p ON f.操作者编号 = p.人员编号
      OUTER APPLY (
        SELECT TOP 1 ISNULL(pp.[最终单价(元/件)], 0) AS 工价
        FROM dbo.车间生产管理工艺_工序工价 pp
        WHERE pp.工序流水号 = f.工序流水号
          AND ISNULL(pp.是否启用, 1) = 1
        ORDER BY ISNULL(pp.生效日期, CONVERT(DATE, '1900-01-01')) DESC, pp.修改时间 DESC, pp.工价流水号 DESC
      ) price
    WHERE f.完成日期 >= @开始时间
      AND f.完成日期 <= @结束时间
  ) a
  GROUP BY a.姓名, a.操作者编号;
END
GO

-- 员工工时明细增加工价总价，明细按零件名称+图号+工序匹配工序工价；修改人:Ld 修改时间:2026-07-06 09:12:38;
ALTER PROCEDURE [dbo].[精工车间_员工工时统计_详情_查询数据]
  @操作者编号 INT = 62,
  @开始时间 DATETIME = NULL,
  @结束时间 DATETIME = NULL,
  @排序名称 INT = NULL,
  @排序方式 INT = NULL
AS
BEGIN
  SET NOCOUNT ON;

  SELECT
    data.*,
    data.加工时长 / NULLIF(data.完成数, 0) AS 单个工时,
    ISNULL(price.工价, 0) AS 工价,
    ISNULL(data.完成数, 0) * ISNULL(price.工价, 0) AS 总价
  FROM dbo.车间生产管理_零件工序加工时长_视图 data
    OUTER APPLY (
      SELECT TOP 1 ISNULL(pp.[最终单价(元/件)], 0) AS 工价
      FROM dbo.车间生产管理工艺_工序工价 pp
      WHERE pp.零件名称 = data.零件名称
        AND pp.图号 = data.图号
        AND pp.工序名称 = data.工序
        AND ISNULL(pp.是否启用, 1) = 1
      ORDER BY ISNULL(pp.生效日期, CONVERT(DATE, '1900-01-01')) DESC, pp.修改时间 DESC, pp.工价流水号 DESC
    ) price
  WHERE data.操作者编号 = @操作者编号
    AND data.结束加工 >= @开始时间
    AND data.结束加工 < DATEADD(DAY, 1, @结束时间)
  ORDER BY
    CASE WHEN @排序名称 = 1 AND @排序方式 = 1 THEN data.结束加工 END DESC,
    CASE WHEN @排序名称 = 1 AND @排序方式 <> 1 THEN data.结束加工 END ASC,
    CASE WHEN ISNULL(@排序名称, 0) <> 1 THEN data.结束加工 END DESC;
END
GO

-- 设备工时汇总增加工价总价，工价取工序工价当前启用最终单价，总价=完成数量*工价；修改人:Ld 修改时间:2026-07-06 09:12:38;
ALTER PROCEDURE [dbo].[车间生产管理_设备工时统计_查询数据]
  @开始时间 DATETIME = NULL,
  @结束时间 DATETIME = NULL
AS
BEGIN
  SET NOCOUNT ON;

  SELECT
    SUM(a.工时) AS 加工工时,
    a.工位号 AS 设备,
    SUM(a.完成数量) AS 总数量,
    SUM(a.总价) AS 总价
  FROM (
    SELECT
      ISNULL(f.扫码工时, 0) AS 工时,
      e.设备名称 + N'-' + f.工位号 AS 工位号,
      f.完成数量,
      ISNULL(f.完成数量, 0) * ISNULL(price.工价, 0) AS 总价
    FROM dbo.设备管理_零件工序_工序完成过程情况 f
      INNER JOIN dbo.基础数据_设备工位点检表 e ON f.工位号 = e.工位号
      OUTER APPLY (
        SELECT TOP 1 ISNULL(pp.[最终单价(元/件)], 0) AS 工价
        FROM dbo.车间生产管理工艺_工序工价 pp
        WHERE pp.工序流水号 = f.工序流水号
          AND ISNULL(pp.是否启用, 1) = 1
        ORDER BY ISNULL(pp.生效日期, CONVERT(DATE, '1900-01-01')) DESC, pp.修改时间 DESC, pp.工价流水号 DESC
      ) price
    WHERE f.完成日期 >= @开始时间
      AND f.完成日期 <= @结束时间
  ) a
  GROUP BY a.工位号;
END
GO

-- 设备工时明细增加工价总价，明细按零件名称+图号+工序匹配工序工价；修改人:Ld 修改时间:2026-07-06 09:12:38;
ALTER PROCEDURE [dbo].[精工车间_设备工时统计_详情_查询数据]
  @设备 NVARCHAR(50) = NULL,
  @开始时间 DATETIME = NULL,
  @结束时间 DATETIME = NULL,
  @排序名称 INT = NULL,
  @排序方式 INT = NULL
AS
BEGIN
  SET NOCOUNT ON;

  SELECT
    data.*,
    ISNULL(price.工价, 0) AS 工价,
    ISNULL(data.完成数, 0) * ISNULL(price.工价, 0) AS 总价
  FROM dbo.车间生产管理_零件工序加工时长_视图 data
    OUTER APPLY (
      SELECT TOP 1 ISNULL(pp.[最终单价(元/件)], 0) AS 工价
      FROM dbo.车间生产管理工艺_工序工价 pp
      WHERE pp.零件名称 = data.零件名称
        AND pp.图号 = data.图号
        AND pp.工序名称 = data.工序
        AND ISNULL(pp.是否启用, 1) = 1
      ORDER BY ISNULL(pp.生效日期, CONVERT(DATE, '1900-01-01')) DESC, pp.修改时间 DESC, pp.工价流水号 DESC
    ) price
  WHERE data.工位号 = @设备
    AND data.结束加工 >= @开始时间
    AND data.结束加工 <= @结束时间
  ORDER BY
    CASE WHEN @排序名称 = 1 AND @排序方式 = 1 THEN data.结束加工 END DESC,
    CASE WHEN @排序名称 = 1 AND @排序方式 <> 1 THEN data.结束加工 END ASC,
    CASE WHEN ISNULL(@排序名称, 0) <> 1 THEN data.结束加工 END DESC;
END
GO

-- 员工工时导出增加工价总价列，保持与页面明细一致；修改人:Ld 修改时间:2026-07-06 09:12:38;
ALTER PROCEDURE [dbo].[报表_精工车间_员工工时统计_查询数据]
  @开始时间 DATETIME = NULL,
  @结束时间 DATETIME = NULL,
  @排序名称 INT = NULL,
  @排序方式 INT = NULL
AS
BEGIN
  SET NOCOUNT ON;

  SELECT N'库存_' + REPLACE(REPLACE(REPLACE(CONVERT(NVARCHAR(19), GETDATE(), 21), ':', ''), '-', ''), ' ', '-') AS tablename, '17' AS tabletype;

  SELECT
    256 * 15 AS 工序,
    256 * 10 AS 工序顺序,
    256 * 30 AS 零件名称,
    256 * 30 AS 零件图号,
    256 * 20 AS 物料编码,
    256 * 10 AS 加工数,
    256 * 15 AS 加工工时M,
    256 * 10 AS 暂停时长,
    256 * 10 AS 工价,
    256 * 12 AS 总价,
    256 * 30 AS 开始加工时间,
    256 * 30 AS 完成时间,
    256 * 10 AS 操作者,
    256 * 25 AS 设备,
    246 * 25 AS 订单编号,
    246 * 25 AS 产品名称;

  SELECT
    0 AS 工序,
    1 AS 工序顺序,
    0 AS 零件名称,
    0 AS 零件图号,
    0 AS 物料编号,
    1 AS 加工数,
    1 AS 加工工时M,
    1 AS 暂停时长,
    1 AS 工价,
    1 AS 总价,
    0 AS 开始加工时间,
    0 AS 完成时间,
    0 AS 操作者,
    0 AS 设备,
    0 AS 订单编号,
    0 AS 产品名称;

  SELECT
    data.工序,
    data.工序顺序,
    data.零件名称,
    data.图号 AS 零件图号,
    data.物料编码,
    data.完成数 AS 加工数,
    data.加工时长 AS 加工工时M,
    data.暂停时间 AS 暂停时长,
    ISNULL(price.工价, 0) AS 工价,
    ISNULL(data.完成数, 0) * ISNULL(price.工价, 0) AS 总价,
    data.开始加工 AS 开始加工时间,
    data.结束加工 AS 完成时间,
    data.操作者,
    data.工位号 AS 设备,
    data.订单编号,
    data.产品名称
  FROM dbo.车间生产管理_零件工序加工时长_视图 data
    OUTER APPLY (
      SELECT TOP 1 ISNULL(pp.[最终单价(元/件)], 0) AS 工价
      FROM dbo.车间生产管理工艺_工序工价 pp
      WHERE pp.零件名称 = data.零件名称
        AND pp.图号 = data.图号
        AND pp.工序名称 = data.工序
        AND ISNULL(pp.是否启用, 1) = 1
      ORDER BY ISNULL(pp.生效日期, CONVERT(DATE, '1900-01-01')) DESC, pp.修改时间 DESC, pp.工价流水号 DESC
    ) price
  WHERE data.结束加工 >= @开始时间
    AND data.结束加工 <= @结束时间
  ORDER BY
    CASE WHEN @排序名称 = 1 AND @排序方式 = 1 THEN data.结束加工 END DESC,
    CASE WHEN @排序名称 = 1 AND @排序方式 <> 1 THEN data.结束加工 END ASC,
    CASE WHEN ISNULL(@排序名称, 0) <> 1 THEN data.结束加工 END DESC;
END
GO
