Files
JY1.0/sql/车间生产管理工艺_零件工序_派工_空数量校验_正式库_20260805.sql

84 lines
3.5 KiB
Transact-SQL

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