USE [ERPTOOL_JY_20250826Back]
GO

/*
  目的：
  1. 物料新增/编辑不再维护默认库位。
  2. 新增物料不再写入 0 库存的“物料与货位对照表”记录。
  3. 保留 @货位流水号 参数，兼容未同步发布的旧前端调用。
*/

ALTER PROCEDURE [dbo].[物料管理_增加]
  @材料流水号 int = null,
  @货位流水号 int = null,
  @单位流水号 int = null,
  @类型 int = null,
  @物料名称 nvarchar(50) = null,
  @图号 nvarchar(50) = null,
  @物料编码 nvarchar(50) = null,
  @物料库流水号 int = null
AS
BEGIN
  SET NOCOUNT ON;

  DECLARE @物料流水号 int;

  IF @材料流水号 = 0
    SET @材料流水号 = 3;

  INSERT INTO 库存管理_物料主文件_基本
    (名称, 代号, 单位流水号, 材料流水号, 类型, 物料编码, 物料库流水号)
  VALUES
    (@物料名称, @图号, @单位流水号, @材料流水号, @类型, @物料编码, @物料库流水号);

  SET @物料流水号 = IDENT_CURRENT(N'库存管理_物料主文件_基本');

  INSERT INTO 库存管理_外购件累计库存(物料流水号, 累计库存)
  VALUES(@物料流水号, 0);
END
GO

ALTER PROCEDURE [dbo].[物料管理_增加新]
  @材料流水号 int = null,
  @货位流水号 int = null,
  @单位流水号 int = null,
  @类型 int = null,
  @物料名称 nvarchar(50) = null,
  @图号 nvarchar(50) = null,
  @物料说明 nvarchar(MAX) = null,
  @物料库流水号 int = null,
  @人员编号 int = null
AS
BEGIN
  SET NOCOUNT ON;

  DECLARE @物料流水号 int,
          @物料编码2 nvarchar(50) = null;

  IF @材料流水号 = 0
    SET @材料流水号 = 3;

  IF @类型 = 1
  BEGIN
    SELECT @物料编码2 = 'LJ' + RIGHT(CAST(POWER(10, 8) AS varchar) + (SUBSTRING((SELECT 物料编码 FROM 库存管理_物料主文件_基本 WHERE 物料流水号 = (SELECT MAX(物料流水号) FROM 库存管理_物料主文件_基本)), 3, 8) + 1), 8);

    INSERT INTO 库存管理_物料主文件_基本
      (名称, 代号, 单位流水号, 材料流水号, 类型, 物料编码, 物料库流水号, 修改人, 修改日期, 物料说明)
    VALUES
      (@物料名称, @图号, @单位流水号, @材料流水号, @类型, @物料编码2, @物料库流水号, @人员编号, GETDATE(), @物料说明);

    SET @物料流水号 = IDENT_CURRENT(N'库存管理_物料主文件_基本');

    INSERT INTO 库存管理_外购件累计库存(物料流水号, 累计库存)
    VALUES(@物料流水号, 0);
  END

  IF @类型 = 2
  BEGIN
    SELECT @物料编码2 = 'LJ' + RIGHT(CAST(POWER(10, 8) AS varchar) + (SUBSTRING((SELECT 物料编码 FROM 库存管理_物料主文件_基本 WHERE 物料流水号 = (SELECT MAX(物料流水号) FROM 库存管理_物料主文件_基本)), 3, 8) + 1), 8);

    INSERT INTO 库存管理_物料主文件_基本
      (名称, 代号, 单位流水号, 材料流水号, 类型, 物料编码, 物料库流水号, 修改人, 修改日期, 物料说明)
    VALUES
      (@物料名称, @图号, @单位流水号, @材料流水号, @类型, @物料编码2, @物料库流水号, @人员编号, GETDATE(), @物料说明);

    SET @物料流水号 = IDENT_CURRENT(N'库存管理_物料主文件_基本');

    INSERT INTO 库存管理_外购件累计库存(物料流水号, 累计库存)
    VALUES(@物料流水号, 0);

    SELECT @物料编码2 = 'MP' + RIGHT(CAST(POWER(10, 8) AS varchar) + (SUBSTRING((SELECT 物料编码 FROM 库存管理_物料主文件_基本 WHERE 物料流水号 = (SELECT MAX(物料流水号) FROM 库存管理_物料主文件_基本)), 3, 8) + 1), 8);

    INSERT INTO 库存管理_物料主文件_基本
      (名称, 代号, 单位流水号, 材料流水号, 类型, 物料编码, 物料库流水号, 修改人, 修改日期, 物料说明)
    VALUES
      (@物料名称 + 'MP', @图号 + 'MP', @单位流水号, @材料流水号, 1, @物料编码2, @物料库流水号, @人员编号, GETDATE(), @物料说明);

    SET @物料流水号 = IDENT_CURRENT(N'库存管理_物料主文件_基本');

    INSERT INTO 库存管理_外购件累计库存(物料流水号, 累计库存)
    VALUES(@物料流水号, 0);
  END
END
GO

ALTER PROCEDURE [dbo].[物料管理_编辑]
  @材料流水号 int = null,
  @货位流水号 int = null,
  @单位流水号 int = null,
  @类型 int = null,
  @物料名称 nvarchar(50) = null,
  @图号 nvarchar(50) = null,
  @物料流水号 int = null,
  @操作者 int = null,
  @物料编码 nvarchar(50) = null,
  @物料说明 nvarchar(MAX) = null,
  @物料库流水号 int = null,
  @最高库存 int = null,
  @安全库存 int = null,
  @最低库存 int = null
AS
BEGIN
  SET NOCOUNT ON;

  UPDATE 库存管理_物料主文件_基本
  SET 名称 = @物料名称,
      代号 = @图号,
      单位流水号 = @单位流水号,
      材料流水号 = @材料流水号,
      类型 = @类型,
      修改人 = @操作者,
      修改日期 = GETDATE(),
      物料编码 = @物料编码,
      物料说明 = @物料说明,
      物料库流水号 = @物料库流水号
  WHERE 物料流水号 = @物料流水号;

  UPDATE dbo.PDM_零件明细表_基本件
  SET 材料流水号 = @材料流水号
  WHERE 物料流水号 = @物料流水号;

  UPDATE dbo.PDM_零件明细表_标准件和外购件
  SET 材料流水号 = @材料流水号
  WHERE 物料流水号 = @物料流水号;

  IF (SELECT COUNT(*) FROM PDM_零件明细表_基本件 WHERE 物料流水号 = @物料流水号) > 0
  BEGIN
    IF (SELECT COUNT(*) FROM 车间生产管理工艺_零件工艺计划 WHERE 基本件流水号 IN (SELECT 基本件流水号 FROM PDM_零件明细表_基本件 WHERE 物料流水号 = @物料流水号) AND 考核状态 < 4) > 0
    BEGIN
      UPDATE 车间生产管理工艺_零件工艺计划
      SET 零件图号 = @图号
      WHERE 基本件流水号 IN (SELECT 基本件流水号 FROM PDM_零件明细表_基本件 WHERE 物料流水号 = @物料流水号)
        AND 考核状态 < 4;
    END
  END
END
GO
