316 lines
9.5 KiB
Transact-SQL
316 lines
9.5 KiB
Transact-SQL
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
|