Files
JY1.0/sql/生产审核_通过仅更新审核状态.sql

232 lines
9.6 KiB
Transact-SQL

-- 生产审核普通通过只改审核状态为已审核;修改数量/时间才修正生产完成数据。修改人: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 @录工票人员编号 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;
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