ALTER PROCEDURE [dbo].[车间生产管理工艺_零件工序_派工]

@工序流水号 int = null,

@数量 int = null,

@人员编号 int = null,

@设备流水号 int = null,

@调拨员编号 int = null,

@计划完成日期 nvarchar(50)=null,

@计划开始日期 nvarchar(50)=null

AS

declare @工序顺序 int
declare @工艺计划流水号 int
declare @工艺任务流水号 int
declare @分配日期 nvarchar(50)
declare @剩余料数 int
declare @已领数量 int=0

-- 修改人:Ld 修改时间:2026-08-05 09:35:00; 后端兜底校验派工数量，避免空值或非正数落入任务分配表。
if @数量 is null or @数量 <= 0
begin
    RAISERROR(N'派工数量不能为空且必须大于0', 16, 1)
    return
end

update 车间生产管理工艺_零件工序 set 已分配数 = ISNULL(已分配数,0) + @数量 where 工序流水号=@工序流水号

select @工艺计划流水号=工艺计划流水号,@工序顺序=工序顺序,@剩余料数=ISNULL(剩余料数,0) from 车间生产管理工艺_零件工序 where 工序流水号=@工序流水号

select @分配日期 = 分配日期 from 车间生产管理工艺_零件工艺计划 where 工艺计划流水号=@工艺计划流水号

if @分配日期 is null
begin
   update 车间生产管理工艺_零件工艺计划 set 分配日期 = getdate() where 工艺计划流水号=@工艺计划流水号
end

if @人员编号 = 16
 begin
      update 车间生产管理工艺_零件工序 set 工序间是否外协 = 1,外协数量=@数量 where 工序流水号=@工序流水号
 end
 else
 begin
      update 车间生产管理工艺_零件工序 set 工序间是否外协 = 0,外协数量=0 where 工序流水号=@工序流水号
 end
 
if @工序顺序 = 1
begin
    if @数量 > @剩余料数 and @剩余料数 > 0
    begin
        set @已领数量 = @剩余料数
        update 车间生产管理工艺_零件工序 set 剩余料数=0 where 工序流水号=@工序流水号
    end
    else if @数量 <= @剩余料数 and @剩余料数 > 0
    begin
        set @已领数量 = @数量
        update 车间生产管理工艺_零件工序 set 剩余料数=isnull(剩余料数,0)-@数量 where 工序流水号=@工序流水号
    end
end

if (select COUNT(*) from 车间生产管理工艺_零件工序_任务分配 where 工序流水号=@工序流水号 and 人员编号=@人员编号 and 设备流水号=@设备流水号) = 1
begin
    -- 修改人:Ld 修改时间:2026-08-05 09:35:00; 累加时对历史空值做默认值处理，避免 NULL + 新数量 仍然为 NULL。
    update 车间生产管理工艺_零件工序_任务分配 set 数量=ISNULL(数量,0)+@数量,分配时间=GETDATE(),已领数量=isnull(已领数量,0)+@已领数量,调拨员编号=@调拨员编号,计划完成日期=@计划完成日期,计划开始日期=@计划开始日期 where 工序流水号=@工序流水号 and 人员编号=@人员编号 and 设备流水号=@设备流水号
end
else
begin
insert into 车间生产管理工艺_零件工序_任务分配(工序流水号,数量,人员编号,设备流水号,分配时间,已领数量,调拨员编号,计划完成日期,计划开始日期)values(@工序流水号,@数量,@人员编号,@设备流水号,GETDATE(),@已领数量,@调拨员编号,@计划完成日期,@计划开始日期)

if @人员编号 <> 16
begin
select @工艺任务流水号 = IDENT_CURRENT('车间生产管理工艺_零件工序_任务分配')

exec 车间生产管理工艺_零件工序_派工_生产计划_增加 @工艺任务流水号,@数量,@计划完成日期,@计划开始日期

end
end
