Files
JY1.0/sql/零件改制_发起改制_精确基本件.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