-- 生产审核普通通过只改审核状态为已审核;修改数量/时间才修正生产完成数据。修改人:Ld 修改时间:2026-07-17 09:10:08; ALTER PROCEDURE [dbo].[机加工MES_加工完成整修审核_审核数据] @审核流水号 INT, @审核状态 NVARCHAR(20), @审核人 NVARCHAR(100) = NULL, @审核意见 NVARCHAR(1000) = NULL, @审核完成数量 FLOAT = NULL, @审核加工开始时间 DATETIME = NULL, @审核加工完成时间 DATETIME = NULL, @审核整修开始时间 DATETIME = NULL, @审核整修结束时间 DATETIME = NULL, @审核整修方案 NVARCHAR(1000) = NULL, @计价方式 NVARCHAR(20) = NULL AS BEGIN SET NOCOUNT ON; DECLARE @目标审核状态 NVARCHAR(20); DECLARE @审核类型 NVARCHAR(50); DECLARE @工序流水号 INT; DECLARE @原完成数量 FLOAT; DECLARE @最终完成数量 FLOAT; DECLARE @数量差 FLOAT; DECLARE @投产数量 FLOAT; DECLARE @当前工序完成数量 FLOAT; DECLARE @修改后工序完成数量 FLOAT; DECLARE @录工票人员编号 INT; DECLARE @工位号 NVARCHAR(100); DECLARE @设备流水号 INT; DECLARE @完成过程流水号 INT; DECLARE @设备号 NVARCHAR(100); DECLARE @整修记录id INT; DECLARE @整修方案 NVARCHAR(1000); DECLARE @Safe计价方式 NVARCHAR(20); DECLARE @单件工价 DECIMAL(18, 4); DECLARE @单时工价 DECIMAL(18, 4); DECLARE @是否修改加工 BIT = 0; DECLARE @是否修改整修 BIT = 0; DECLARE @是否本过程开启事务 BIT; SET @目标审核状态 = CASE WHEN @审核状态 IN (N'审核通过', N'已审核') THEN N'已审核' ELSE @审核状态 END; IF @目标审核状态 NOT IN (N'已审核', N'审核不通过') BEGIN SELECT N'0' AS result, N'审核状态不正确' AS message; RETURN; END; IF NOT EXISTS ( SELECT 1 FROM [dbo].[MES_机加工MES_加工完成整修审核表] WHERE id = @审核流水号 AND 审核状态 = N'待审核' ) BEGIN SELECT N'0' AS result, N'该审核记录不存在或已审核' AS message; RETURN; END; SELECT @审核类型 = 审核类型, @工序流水号 = 工序流水号, @原完成数量 = ISNULL(完成数量, 0), @录工票人员编号 = 录工票人员编号, @工位号 = 工位号, @设备号 = 设备号, @整修记录id = 整修记录id, @整修方案 = ISNULL(@审核整修方案, 整修方案), @Safe计价方式 = ISNULL(NULLIF(@计价方式, N''), ISNULL(NULLIF(计价方式, N''), N'计件')), @单时工价 = ISNULL(单时工价, 0) FROM [dbo].[MES_机加工MES_加工完成整修审核表] WHERE id = @审核流水号 AND 审核状态 = N'待审核'; IF @Safe计价方式 NOT IN (N'计件', N'计时') SET @Safe计价方式 = N'计件'; SET @最终完成数量 = ISNULL(@审核完成数量, @原完成数量); SET @数量差 = ISNULL(@最终完成数量, 0) - ISNULL(@原完成数量, 0); SET @是否修改加工 = CASE WHEN @目标审核状态 = N'已审核' AND @审核类型 = N'加工完成' AND (@审核完成数量 IS NOT NULL OR @审核加工开始时间 IS NOT NULL OR @审核加工完成时间 IS NOT NULL OR @计价方式 IS NOT NULL) THEN 1 ELSE 0 END; SET @是否修改整修 = CASE WHEN @目标审核状态 = N'已审核' AND @审核类型 = N'结束整修' AND (@审核整修开始时间 IS NOT NULL OR @审核整修结束时间 IS NOT NULL OR @审核整修方案 IS NOT NULL) THEN 1 ELSE 0 END; IF @是否修改加工 = 1 AND (@最终完成数量 < 0 OR @最终完成数量 <> FLOOR(@最终完成数量)) BEGIN SELECT N'0' AS result, N'完成数量必须为大于等于 0 的整数' AS message; RETURN; END; -- 修改完成数量后的累计结果不能超过投产数量;修改人:Ld 修改时间:2026-07-23 16:22:46; IF @是否修改加工 = 1 AND @审核完成数量 IS NOT NULL BEGIN SELECT @投产数量 = ISNULL(V.数量, 0), @当前工序完成数量 = ISNULL(V.已完成数, 0) FROM [dbo].[车间生产管理_零件工序_视图] AS V WHERE V.工序流水号 = @工序流水号; SET @修改后工序完成数量 = ISNULL(@当前工序完成数量, 0) + ISNULL(@数量差, 0); IF ISNULL(@投产数量, 0) > 0 AND @修改后工序完成数量 > @投产数量 BEGIN SELECT N'0' AS result, N'修改后的已完成数不能超过投产数量' AS message; RETURN; END; END; SELECT TOP 1 @单件工价 = CASE WHEN ISNULL(price.[单件工价], 0) <> 0 THEN price.[单件工价] ELSE ISNULL(price.[最终单价(元/件)], 0) END FROM [dbo].[车间生产管理工艺_工序工价] price WHERE price.工序流水号 = @工序流水号 AND ISNULL(price.是否启用, 1) = 1 ORDER BY ISNULL(price.生效日期, CONVERT(DATE, '1900-01-01')) DESC, price.修改时间 DESC, price.工价流水号 DESC; SET @单件工价 = ISNULL(@单件工价, 0); SET @单时工价 = ISNULL(@单时工价, 0); BEGIN TRY SET @是否本过程开启事务 = CASE WHEN @@TRANCOUNT = 0 THEN 1 ELSE 0 END; IF @是否本过程开启事务 = 1 BEGIN TRAN; ELSE SAVE TRAN 生产完成审核保存点; IF @是否修改加工 = 1 BEGIN SELECT @设备流水号 = [设备流水号] FROM [dbo].[基础数据_设备工位点检表] WHERE [工位号] = @工位号; SELECT TOP 1 @完成过程流水号 = [完成过程流水号] FROM [dbo].[设备管理_零件工序_工序完成过程情况] WHERE [工序流水号] = @工序流水号 AND [录工票人员编号] = @录工票人员编号 AND [工位号] = @工位号 AND [完成数量] = @原完成数量 ORDER BY [完成过程流水号] DESC; IF @完成过程流水号 IS NULL BEGIN SELECT TOP 1 @完成过程流水号 = [完成过程流水号] FROM [dbo].[设备管理_零件工序_工序完成过程情况] WHERE [工序流水号] = @工序流水号 AND [录工票人员编号] = @录工票人员编号 AND [工位号] = @工位号 ORDER BY [完成过程流水号] DESC; END; IF @完成过程流水号 IS NULL BEGIN IF @是否本过程开启事务 = 1 ROLLBACK TRAN ELSE ROLLBACK TRAN 生产完成审核保存点; SELECT N'0' AS result, N'未找到对应生产完成记录' AS message; RETURN; END; UPDATE [dbo].[设备管理_零件工序_工序完成过程情况] SET [完成数量] = @最终完成数量, [加工开始时间] = ISNULL(@审核加工开始时间, [加工开始时间]), [加工完成时间] = ISNULL(@审核加工完成时间, [加工完成时间]), [完成日期] = CASE WHEN @审核加工完成时间 IS NULL THEN [完成日期] ELSE CONVERT(DATE, @审核加工完成时间) END, [操作日期] = ISNULL(@审核加工完成时间, [操作日期]), [计价方式] = @Safe计价方式, [单件工价] = @单件工价, [单时工价] = CASE WHEN @Safe计价方式 = N'计时' THEN ISNULL([单时工价], @单时工价) ELSE 0 END, [修改人员] = CASE WHEN ISNUMERIC(@审核人) = 1 THEN CAST(@审核人 AS INT) ELSE [修改人员] END, [修改时间] = GETDATE() WHERE [完成过程流水号] = @完成过程流水号; IF ISNULL(@数量差, 0) <> 0 BEGIN UPDATE [dbo].[车间生产管理工艺_零件工序] SET [完成数量] = ISNULL([完成数量], 0) + @数量差 WHERE [工序流水号] = @工序流水号; UPDATE [dbo].[车间生产管理工艺_零件工序_任务分配] SET [加工数量] = ISNULL([加工数量], 0) + @数量差 WHERE [工序流水号] = @工序流水号 AND [人员编号] = @录工票人员编号 AND [设备流水号] = @设备流水号; END; IF @审核加工完成时间 IS NOT NULL BEGIN UPDATE [dbo].[车间生产管理工艺_零件工序] SET [完成日期] = @审核加工完成时间 WHERE [工序流水号] = @工序流水号; END; END; IF @是否修改整修 = 1 BEGIN UPDATE [dbo].[设备管理_整修] SET [整修开始时间] = CASE WHEN @审核整修开始时间 IS NULL THEN [整修开始时间] ELSE CONVERT(VARCHAR(20), @审核整修开始时间, 120) END, [整修结束时间] = CASE WHEN @审核整修结束时间 IS NULL THEN [整修结束时间] ELSE CONVERT(VARCHAR(20), @审核整修结束时间, 120) END, [整修方案] = @整修方案 WHERE [id] = @整修记录id AND [设备号] = @设备号; END; UPDATE [dbo].[MES_机加工MES_加工完成整修审核表] SET [审核状态] = @目标审核状态, [审核人] = @审核人, [审核时间] = GETDATE(), [审核意见] = ISNULL(@审核意见, N''), [完成数量] = CASE WHEN @是否修改加工 = 1 THEN @最终完成数量 ELSE [完成数量] END, [开始时间] = CASE WHEN @是否修改加工 = 1 AND @审核加工开始时间 IS NOT NULL THEN @审核加工开始时间 WHEN @是否修改整修 = 1 AND @审核整修开始时间 IS NOT NULL THEN @审核整修开始时间 ELSE [开始时间] END, [结束时间] = CASE WHEN @是否修改加工 = 1 AND @审核加工完成时间 IS NOT NULL THEN @审核加工完成时间 WHEN @是否修改整修 = 1 AND @审核整修结束时间 IS NOT NULL THEN @审核整修结束时间 ELSE [结束时间] END, [整修方案] = CASE WHEN @是否修改整修 = 1 THEN @整修方案 ELSE [整修方案] END, [计价方式] = CASE WHEN @是否修改加工 = 1 THEN @Safe计价方式 ELSE [计价方式] END, [单件工价] = CASE WHEN @是否修改加工 = 1 THEN @单件工价 ELSE [单件工价] END, [单时工价] = CASE WHEN @是否修改加工 = 1 THEN @单时工价 ELSE [单时工价] END, [修改人] = N'Ld', [修改时间] = GETDATE() WHERE [id] = @审核流水号 AND [审核状态] = N'待审核'; IF @是否本过程开启事务 = 1 COMMIT TRAN; END TRY BEGIN CATCH IF @@TRANCOUNT > 0 BEGIN IF ISNULL(@是否本过程开启事务, 1) = 1 ROLLBACK TRAN; ELSE ROLLBACK TRAN 生产完成审核保存点; END; SELECT N'0' AS result, ERROR_MESSAGE() AS message; RETURN; END CATCH; SELECT N'1' AS result; END; GO