feat(hjgl): 完善焊接任务与质量管理流程

This commit is contained in:
2026-08-19 17:13:33 +08:00
parent 08792e0dc8
commit 679e9f6cec
68 changed files with 2481 additions and 1170 deletions
@@ -0,0 +1,280 @@
/*
SQL Server 2012 兼容脚本(数据库兼容级别 110)。
不使用 DROP IF EXISTS、STRING_AGG、STRING_SPLIT、CREATE OR ALTER 等 SQL Server 2012 之后新增的语法;
错误重抛统一使用 RAISERROR。
*/
SET XACT_ABORT ON;
BEGIN TRY
BEGIN TRANSACTION;
DECLARE @Sql NVARCHAR(1000);
/* 焊接任务单增加班组。 */
IF COL_LENGTH('dbo.HJGL_WeldTask', 'TeamGroupId') IS NULL
ALTER TABLE dbo.HJGL_WeldTask ADD TeamGroupId NVARCHAR(50) NULL;
/* 防腐委托改为关联任务单或热处理报告来源。 */
IF COL_LENGTH('dbo.Tw_AntiCorrosionTrust', 'WeldTaskCode') IS NULL
ALTER TABLE dbo.Tw_AntiCorrosionTrust ADD WeldTaskCode NVARCHAR(200) NULL;
IF COL_LENGTH('dbo.Tw_AntiCorrosionTrust', 'HotProessTrustId') IS NULL
ALTER TABLE dbo.Tw_AntiCorrosionTrust ADD HotProessTrustId NVARCHAR(50) NULL;
/*
新防腐委托仅使用焊接任务单或热处理委托作为来源。
旧来源列不再写入;该表尚无业务数据,无需迁移或回填旧来源。
*/
IF COL_LENGTH('dbo.Tw_AntiCorrosionTrust', 'OutputMasterId') IS NOT NULL
AND EXISTS
(
SELECT 1
FROM sys.columns
WHERE object_id = OBJECT_ID('dbo.Tw_AntiCorrosionTrust')
AND name = 'OutputMasterId'
AND is_nullable = 0
)
DROP INDEX UX_Tw_AntiCorrosionTrust_OutputMasterId ON SGGLDB_SHJ.dbo.Tw_AntiCorrosionTrust;
BEGIN
ALTER TABLE dbo.Tw_AntiCorrosionTrust
ALTER COLUMN OutputMasterId NVARCHAR(50) NULL;
END;
IF COL_LENGTH('dbo.Tw_AntiCorrosionTrustDetail', 'IsPostWeld') IS NULL
BEGIN
ALTER TABLE dbo.Tw_AntiCorrosionTrustDetail
ADD IsPostWeld BIT NOT NULL
CONSTRAINT DF_Tw_AntiCorrosionTrustDetail_IsPostWeld DEFAULT (0);
END;
/* 下料检测增加坡口加工类型。 */
IF COL_LENGTH('dbo.HJGL_PreWeldCuttingCheck', 'GrooveProcessType') IS NULL
ALTER TABLE dbo.HJGL_PreWeldCuttingCheck ADD GrooveProcessType NVARCHAR(100) NULL;
/* 焊缝外观检测承接原组对记录中不属于组对工序的字段。 */
IF COL_LENGTH('dbo.HJGL_WeldAppearanceCheck', 'WeldReinforcement') IS NULL
ALTER TABLE dbo.HJGL_WeldAppearanceCheck ADD WeldReinforcement DECIMAL(18,2) NULL;
IF COL_LENGTH('dbo.HJGL_WeldAppearanceCheck', 'WeldHeight') IS NULL
ALTER TABLE dbo.HJGL_WeldAppearanceCheck ADD WeldHeight DECIMAL(18,2) NULL;
IF COL_LENGTH('dbo.HJGL_WeldAppearanceCheck', 'WeldWidth') IS NULL
ALTER TABLE dbo.HJGL_WeldAppearanceCheck ADD WeldWidth DECIMAL(18,2) NULL;
IF COL_LENGTH('dbo.HJGL_WeldAppearanceCheck', 'SurfaceDefect') IS NULL
ALTER TABLE dbo.HJGL_WeldAppearanceCheck ADD SurfaceDefect NVARCHAR(500) NULL;
IF COL_LENGTH('dbo.HJGL_WeldAppearanceCheck', 'PreheatTemperature') IS NULL
ALTER TABLE dbo.HJGL_WeldAppearanceCheck ADD PreheatTemperature DECIMAL(18,2) NULL;
IF COL_LENGTH('dbo.HJGL_WeldAppearanceCheck', 'InterpassTemperature') IS NULL
ALTER TABLE dbo.HJGL_WeldAppearanceCheck ADD InterpassTemperature DECIMAL(18,2) NULL;
IF COL_LENGTH('dbo.HJGL_WeldAppearanceCheck', 'CheckCode') IS NULL
ALTER TABLE dbo.HJGL_WeldAppearanceCheck ADD CheckCode NVARCHAR(200) NULL;
/* 焊接日报增加班组、专工两级审核留痕。 */
IF COL_LENGTH('dbo.HJGL_WeldingDailyTempDetail', 'TeamAuditMan') IS NULL
ALTER TABLE dbo.HJGL_WeldingDailyTempDetail ADD TeamAuditMan NVARCHAR(50) NULL;
IF COL_LENGTH('dbo.HJGL_WeldingDailyTempDetail', 'TeamAuditDate') IS NULL
ALTER TABLE dbo.HJGL_WeldingDailyTempDetail ADD TeamAuditDate DATETIME NULL;
IF COL_LENGTH('dbo.HJGL_WeldingDailyTempDetail', 'ProfessionalAuditMan') IS NULL
ALTER TABLE dbo.HJGL_WeldingDailyTempDetail ADD ProfessionalAuditMan NVARCHAR(50) NULL;
IF COL_LENGTH('dbo.HJGL_WeldingDailyTempDetail', 'ProfessionalAuditDate') IS NULL
ALTER TABLE dbo.HJGL_WeldingDailyTempDetail ADD ProfessionalAuditDate DATETIME NULL;
/* 焊接日报待审核阶段保存实际工艺快照,专工审核后再回写焊口。 */
IF COL_LENGTH('dbo.HJGL_WeldingDailyTempDetail', 'WeldingMethodId') IS NULL
ALTER TABLE dbo.HJGL_WeldingDailyTempDetail ADD WeldingMethodId NVARCHAR(50) NULL;
IF COL_LENGTH('dbo.HJGL_WeldingDailyTempDetail', 'WeldTypeId') IS NULL
ALTER TABLE dbo.HJGL_WeldingDailyTempDetail ADD WeldTypeId NVARCHAR(50) NULL;
IF COL_LENGTH('dbo.HJGL_WeldingDailyTempDetail', 'WeldingWire') IS NULL
ALTER TABLE dbo.HJGL_WeldingDailyTempDetail ADD WeldingWire NVARCHAR(50) NULL;
IF COL_LENGTH('dbo.HJGL_WeldingDailyTempDetail', 'WeldingRod') IS NULL
ALTER TABLE dbo.HJGL_WeldingDailyTempDetail ADD WeldingRod NVARCHAR(50) NULL;
/* 历史待审核记录按焊口当前工艺值补齐,保证升级后查询和审核行为一致。 */
SET @Sql = N'
UPDATE temp
SET WeldingMethodId = COALESCE(temp.WeldingMethodId, joint.WeldingMethodId),
WeldTypeId = COALESCE(temp.WeldTypeId, joint.WeldTypeId),
WeldingWire = COALESCE(temp.WeldingWire, joint.WeldingWire),
WeldingRod = COALESCE(temp.WeldingRod, joint.WeldingRod)
FROM dbo.HJGL_WeldingDailyTempDetail temp
INNER JOIN dbo.HJGL_WeldJoint joint ON joint.WeldJointId = temp.WeldJointId
WHERE temp.WeldingMethodId IS NULL
OR temp.WeldTypeId IS NULL
OR temp.WeldingWire IS NULL
OR temp.WeldingRod IS NULL;';
EXEC sys.sp_executesql @Sql;
/*
为本次新增字段补充数据库注释。
字段已存在时更新 MS_Description,不存在注释时新增,确保升级脚本可重复执行。
*/
DECLARE @ColumnComments TABLE
(
TableName SYSNAME NOT NULL,
ColumnName SYSNAME NOT NULL,
ColumnDescription NVARCHAR(500) NOT NULL,
SortIndex INT NOT NULL
);
INSERT INTO @ColumnComments (TableName, ColumnName, ColumnDescription, SortIndex)
SELECT N'HJGL_WeldTask', N'TeamGroupId', N'班组ID', 1 UNION ALL
SELECT N'Tw_AntiCorrosionTrust', N'WeldTaskCode', N'来源焊接任务单编码', 2 UNION ALL
SELECT N'Tw_AntiCorrosionTrust', N'HotProessTrustId', N'来源热处理委托ID', 3 UNION ALL
SELECT N'Tw_AntiCorrosionTrustDetail', N'IsPostWeld', N'是否焊后防腐:0-否,1-是', 4 UNION ALL
SELECT N'HJGL_PreWeldCuttingCheck', N'GrooveProcessType', N'坡口加工类型', 5 UNION ALL
SELECT N'HJGL_WeldAppearanceCheck', N'WeldReinforcement', N'焊缝余高', 6 UNION ALL
SELECT N'HJGL_WeldAppearanceCheck', N'WeldHeight', N'焊缝高度', 7 UNION ALL
SELECT N'HJGL_WeldAppearanceCheck', N'WeldWidth', N'焊缝宽度', 8 UNION ALL
SELECT N'HJGL_WeldAppearanceCheck', N'SurfaceDefect', N'表面缺陷', 9 UNION ALL
SELECT N'HJGL_WeldAppearanceCheck', N'PreheatTemperature', N'预热温度', 10 UNION ALL
SELECT N'HJGL_WeldAppearanceCheck', N'InterpassTemperature', N'层间温度', 11 UNION ALL
SELECT N'HJGL_WeldingDailyTempDetail', N'TeamAuditMan', N'班组审核人ID', 12 UNION ALL
SELECT N'HJGL_WeldingDailyTempDetail', N'TeamAuditDate', N'班组审核时间', 13 UNION ALL
SELECT N'HJGL_WeldingDailyTempDetail', N'ProfessionalAuditMan', N'专工审核人ID', 14 UNION ALL
SELECT N'HJGL_WeldingDailyTempDetail', N'ProfessionalAuditDate', N'专工审核时间', 15 UNION ALL
SELECT N'HJGL_WeldingDailyTempDetail', N'WeldingMethodId', N'待审核焊接方法ID,专工审核后回写焊口', 16 UNION ALL
SELECT N'HJGL_WeldingDailyTempDetail', N'WeldTypeId', N'待审核焊缝类型ID,专工审核后回写焊口', 17 UNION ALL
SELECT N'HJGL_WeldingDailyTempDetail', N'WeldingWire', N'待审核焊丝ID,专工审核后回写焊口', 18 UNION ALL
SELECT N'HJGL_WeldingDailyTempDetail', N'WeldingRod', N'待审核焊条ID,专工审核后回写焊口', 19 UNION ALL
SELECT N'HJGL_WeldAppearanceCheck', N'CheckCode', N'焊缝外观检测编号,格式:FCC-单位工程名称-yyyyMMdd', 20;
DECLARE @CommentTableName SYSNAME;
DECLARE @CommentColumnName SYSNAME;
DECLARE @ColumnDescription NVARCHAR(500);
DECLARE ColumnComments CURSOR LOCAL FAST_FORWARD FOR
SELECT TableName, ColumnName, ColumnDescription
FROM @ColumnComments
ORDER BY SortIndex;
OPEN ColumnComments;
FETCH NEXT FROM ColumnComments INTO @CommentTableName, @CommentColumnName, @ColumnDescription;
WHILE @@FETCH_STATUS = 0
BEGIN
IF COL_LENGTH(N'dbo.' + @CommentTableName, @CommentColumnName) IS NOT NULL
BEGIN
IF EXISTS
(
SELECT 1
FROM sys.extended_properties ep
INNER JOIN sys.columns c
ON c.object_id = ep.major_id
AND c.column_id = ep.minor_id
WHERE ep.class = 1
AND ep.name = N'MS_Description'
AND ep.major_id = OBJECT_ID(N'dbo.' + @CommentTableName)
AND c.name = @CommentColumnName
)
BEGIN
EXEC sys.sp_updateextendedproperty
@name = N'MS_Description',
@value = @ColumnDescription,
@level0type = N'SCHEMA', @level0name = N'dbo',
@level1type = N'TABLE', @level1name = @CommentTableName,
@level2type = N'COLUMN', @level2name = @CommentColumnName;
END
ELSE
BEGIN
EXEC sys.sp_addextendedproperty
@name = N'MS_Description',
@value = @ColumnDescription,
@level0type = N'SCHEMA', @level0name = N'dbo',
@level1type = N'TABLE', @level1name = @CommentTableName,
@level2type = N'COLUMN', @level2name = @CommentColumnName;
END;
END;
FETCH NEXT FROM ColumnComments INTO @CommentTableName, @CommentColumnName, @ColumnDescription;
END;
CLOSE ColumnComments;
DEALLOCATE ColumnComments;
/* 原有已审核记录直接视为两级审核完成,旧审核信息回填到专工审核。 */
UPDATE dbo.HJGL_WeldingDailyTempDetail
SET AuditState = 2,
ProfessionalAuditMan = COALESCE(ProfessionalAuditMan, AuditMan),
ProfessionalAuditDate = COALESCE(ProfessionalAuditDate, AuditDate)
WHERE AuditState = 1;
/* 组对记录只保留组对工序字段。 */
IF EXISTS (SELECT 1 FROM sys.foreign_keys WHERE parent_object_id = OBJECT_ID('dbo.HJGL_PreWeldFitupCheck') AND name = 'FK_PreWeldFitupCheck_GrooveType')
ALTER TABLE dbo.HJGL_PreWeldFitupCheck DROP CONSTRAINT FK_PreWeldFitupCheck_GrooveType;
DECLARE @FitupColumn SYSNAME;
DECLARE @FitupIndex SYSNAME;
DECLARE @DefaultConstraint SYSNAME;
DECLARE @FitupColumns TABLE
(
ColumnName SYSNAME NOT NULL,
SortIndex INT NOT NULL
);
/* 使用 SQL Server 2012 支持的 UNION ALL 初始化待删除字段,避免依赖高版本语法。 */
INSERT INTO @FitupColumns (ColumnName, SortIndex)
SELECT N'GrooveTypeId', 1 UNION ALL
SELECT N'GrooveProcessType', 2 UNION ALL
SELECT N'GrooveAngle', 3 UNION ALL
SELECT N'WeldReinforcement', 4 UNION ALL
SELECT N'WeldHeight', 5 UNION ALL
SELECT N'WeldWidth', 6 UNION ALL
SELECT N'SurfaceDefect', 7;
DECLARE FitupColumns CURSOR LOCAL FAST_FORWARD FOR
SELECT ColumnName
FROM @FitupColumns
ORDER BY SortIndex;
OPEN FitupColumns;
FETCH NEXT FROM FitupColumns INTO @FitupColumn;
WHILE @@FETCH_STATUS = 0
BEGIN
IF COL_LENGTH('dbo.HJGL_PreWeldFitupCheck', @FitupColumn) IS NOT NULL
BEGIN
WHILE 1 = 1
BEGIN
SET @FitupIndex = NULL;
SELECT TOP (1) @FitupIndex = i.name
FROM sys.indexes i
INNER JOIN sys.index_columns ic ON ic.object_id = i.object_id AND ic.index_id = i.index_id
INNER JOIN sys.columns c ON c.object_id = ic.object_id AND c.column_id = ic.column_id
WHERE i.object_id = OBJECT_ID('dbo.HJGL_PreWeldFitupCheck') AND c.name = @FitupColumn
AND i.is_primary_key = 0 AND i.is_unique_constraint = 0;
IF @FitupIndex IS NULL BREAK;
SET @Sql = N'DROP INDEX ' + QUOTENAME(@FitupIndex) + N' ON dbo.HJGL_PreWeldFitupCheck';
EXEC sys.sp_executesql @Sql;
END;
SET @DefaultConstraint = NULL;
SELECT @DefaultConstraint = dc.name
FROM sys.default_constraints dc
INNER JOIN sys.columns c ON c.object_id = dc.parent_object_id AND c.column_id = dc.parent_column_id
WHERE dc.parent_object_id = OBJECT_ID('dbo.HJGL_PreWeldFitupCheck') AND c.name = @FitupColumn;
IF @DefaultConstraint IS NOT NULL
BEGIN
SET @Sql = N'ALTER TABLE dbo.HJGL_PreWeldFitupCheck DROP CONSTRAINT ' + QUOTENAME(@DefaultConstraint);
EXEC sys.sp_executesql @Sql;
END;
SET @Sql = N'ALTER TABLE dbo.HJGL_PreWeldFitupCheck DROP COLUMN ' + QUOTENAME(@FitupColumn);
EXEC sys.sp_executesql @Sql;
END;
FETCH NEXT FROM FitupColumns INTO @FitupColumn;
END;
CLOSE FitupColumns;
DEALLOCATE FitupColumns;
COMMIT TRANSACTION;
END TRY
BEGIN CATCH
IF XACT_STATE() <> 0
ROLLBACK TRANSACTION;
DECLARE @ErrorMessage NVARCHAR(4000);
DECLARE @ErrorSeverity INT;
DECLARE @ErrorState INT;
SELECT @ErrorMessage = ERROR_MESSAGE(),
@ErrorSeverity = ERROR_SEVERITY(),
@ErrorState = ERROR_STATE();
/* SQL Server 2012 使用 RAISERROR 重新抛出原始错误。 */
RAISERROR(@ErrorMessage, @ErrorSeverity, @ErrorState);
END CATCH;