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