SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER PROCEDURE [dbo].[技术中心_改制订单_发起改制] @原订单流水号 int = null, @原组件流水号 int = null, @改制零件名称 nvarchar(50) = null, @改制零件图号 nvarchar(50) = null, @改制数量 int = null, @精工期限 date = null, @发起人 int = null, @原零件名称 nvarchar(50) = null, @原零件图号 nvarchar(50) = null, @原基本件流水号 int = null AS BEGIN SET NOCOUNT ON; DECLARE @工艺计划流水号 int; DECLARE @改制订单流水号 int; DECLARE @改制订单编号 varchar(100); DECLARE @改制工艺编号 int; DECLARE @工序流水号 int; DECLARE @改制物料流水号 int; DECLARE @单号排序代码 varchar(100); DECLARE @年份 varchar(100); DECLARE @n int; IF ISNULL(LTRIM(RTRIM(@原零件图号)), '') <> '' AND ISNULL(LTRIM(RTRIM(@改制零件图号)), '') <> '' AND LTRIM(RTRIM(@原零件图号)) = LTRIM(RTRIM(@改制零件图号)) BEGIN SELECT '0' AS result, '改制零件图号不能与原零件图号相同' AS msg; RETURN; END; IF @原订单流水号 IS NULL OR @原组件流水号 IS NULL BEGIN SELECT '0' AS result, '原订单流水号或原组件流水号不能为空' AS msg; RETURN; END; IF ISNULL(@改制零件名称, '') = '' OR ISNULL(@改制零件图号, '') = '' BEGIN SELECT '0' AS result, '改制零件名称或改制零件图号不能为空' AS msg; RETURN; END; IF ISNULL(@改制数量, 0) <= 0 BEGIN SELECT '0' AS result, '改制数量必须大于0' AS msg; RETURN; END; -- 修改人:Ld 修改时间:2026-07-01 14:45:00; 优先使用前端点击行传入的原基本件流水号,避免同组件内重复零件或历史流水号导致改制记录回显错位。 IF @原基本件流水号 IS NULL BEGIN SELECT TOP 1 @原基本件流水号 = B.流水号 FROM dbo.PDM_零件明细表_所有视图 AS B WHERE B.订单流水号 = @原订单流水号 AND B.组件流水号 = @原组件流水号 AND (ISNULL(@原零件名称, '') = '' OR B.零件名称 = @原零件名称) AND (ISNULL(@原零件图号, '') = '' OR B.[图号或型号] = @原零件图号) ORDER BY B.流水号 DESC; END; IF @原基本件流水号 IS NULL BEGIN SELECT TOP 1 @原基本件流水号 = 基本件流水号 FROM dbo.PDM_零件明细表_基本件 WHERE 组件流水号 = @原组件流水号 ORDER BY 基本件流水号 DESC; END; IF @原基本件流水号 IS NULL BEGIN SELECT '0' AS result, '未找到原零件基本件流水号' AS msg; RETURN; END; SELECT TOP 1 @改制物料流水号 = 物料流水号 FROM dbo.库存管理_物料主文件_基本 WHERE LTRIM(RTRIM(名称)) = LTRIM(RTRIM(@改制零件名称)) AND LTRIM(RTRIM(代号)) = LTRIM(RTRIM(@改制零件图号)) AND ISNULL(是否禁用, 0) = 0 ORDER BY 物料流水号 DESC; IF @改制物料流水号 IS NULL BEGIN SELECT '0' AS result, '未找到改制零件对应的新物料,请先维护物料信息' AS msg; RETURN; END; IF @精工期限 IS NULL SET @精工期限 = CONVERT(date, GETDATE()); BEGIN TRY BEGIN TRAN; SELECT @n = COUNT(*) FROM dbo.技术中心_改制订单排序 WHERE 年份 = CONVERT(varchar(4), GETDATE(), 23); IF @n = 0 BEGIN SET @年份 = CONVERT(varchar(4), GETDATE(), 23); INSERT INTO dbo.技术中心_改制订单排序(年份, 数量) VALUES(@年份, 1); SET @单号排序代码 = 1; END ELSE BEGIN UPDATE dbo.技术中心_改制订单排序 SET 数量 = 数量 + 1 WHERE 年份 = CONVERT(varchar(4), GETDATE(), 23); SELECT @单号排序代码 = 数量 FROM dbo.技术中心_改制订单排序 WHERE 年份 = CONVERT(varchar(4), GETDATE(), 23); END; SET @单号排序代码 = RIGHT(10000 + CONVERT(varchar(100), @单号排序代码), 4); SET @改制订单编号 = 'BHGZ' + '-' + DATENAME(year, GETDATE()) + DATENAME(month, GETDATE()) + RIGHT(100 + DAY(GETDATE()), 2) + CONVERT(varchar, @单号排序代码); INSERT INTO dbo.技术中心_改制订单记录 ( 改制订单编号, 原订单流水号, 原组件流水号, 原基本件流水号, 原零件名称, 原零件图号, 改制零件名称, 改制零件图号, 改制物料流水号, 改制数量, 精工期限, 状态, 发起人, 发起时间, 是否删除 ) VALUES ( @改制订单编号, @原订单流水号, @原组件流水号, @原基本件流水号, @原零件名称, @原零件图号, @改制零件名称, @改制零件图号, @改制物料流水号, @改制数量, @精工期限, N'待生成任务', @发起人, GETDATE(), 0 ); SET @改制订单流水号 = SCOPE_IDENTITY(); INSERT INTO dbo.车间生产管理工艺_零件工艺计划 ( 基本件流水号, 零件图号, 批次数量, 操作日期, 考核状态, 工艺更新时间, 工艺员编号, 计划完成 ) VALUES ( @原基本件流水号, @改制零件图号, @改制数量, GETDATE(), 2, GETDATE(), @发起人, @精工期限 ); SET @工艺计划流水号 = SCOPE_IDENTITY(); UPDATE dbo.技术中心_改制订单记录 SET 工艺计划流水号 = @工艺计划流水号, 状态 = N'工艺完成' WHERE 改制订单流水号 = @改制订单流水号; SELECT TOP 1 @改制工艺编号 = 工艺编号 FROM dbo.车间生产管理工艺_基础表_工艺名称 WHERE 工艺名称 = N'改制' AND ISNULL(是否启用, 1) = 1; IF @改制工艺编号 IS NULL BEGIN INSERT INTO dbo.车间生产管理工艺_基础表_工艺名称(工艺名称, 是否启用) VALUES(N'改制', 1); SET @改制工艺编号 = SCOPE_IDENTITY(); END; SELECT TOP 1 @工序流水号 = 工序流水号 FROM dbo.车间生产管理工艺_零件工序 WHERE 工艺计划流水号 = @工艺计划流水号 ORDER BY 工序顺序; IF @工序流水号 IS NOT NULL BEGIN UPDATE dbo.车间生产管理工艺_零件工序 SET 工艺编号 = @改制工艺编号, 工序顺序 = 1, 工艺要求 = N'改制', 工序间是否外协 = 0, 外协数量 = 0, 是否最后一序 = 1, 定额工时 = 0, 准结工时 = 0, 已分配数 = 0, 已外协数 = 0, 是否允许变更 = 1 WHERE 工序流水号 = @工序流水号; END ELSE BEGIN INSERT INTO dbo.车间生产管理工艺_零件工序 ( 工艺计划流水号, 工艺编号, 工序顺序, 工艺要求, 工序间是否外协, 外协数量, 是否最后一序, 定额工时, 准结工时, 已分配数, 已外协数, 是否允许变更 ) VALUES ( @工艺计划流水号, @改制工艺编号, 1, N'改制', 0, 0, 1, 0, 0, 0, 0, 1 ); END; EXEC dbo.精工车间_工艺保存_派工 @工艺计划流水号 = @工艺计划流水号, @人员编号 = @发起人; UPDATE dbo.PDM_组件名称 SET 组件精工车间 = 1, 是否分配 = 1 WHERE 组件流水号 = @原组件流水号; UPDATE dbo.合同管理_订单信息_基础表 SET 精工车间 = 1, 是否下达 = 1, 技术审核 = 0, 下达人 = @发起人, 下达日期 = GETDATE(), 精工期限 = @精工期限 WHERE 订单流水号 = @原订单流水号; COMMIT TRAN; SELECT '1' AS result, '改制订单已生成' AS msg, @改制订单流水号 AS 改制订单流水号, @改制订单编号 AS 改制订单编号, @工艺计划流水号 AS 工艺计划流水号, @改制物料流水号 AS 改制物料流水号; END TRY BEGIN CATCH IF @@TRANCOUNT > 0 ROLLBACK TRAN; SELECT '0' AS result, ERROR_MESSAGE() AS msg; END CATCH; END; GO