feat: 同步全部系统改动与文档
This commit is contained in:
193
db_backups/add_install_task_budget_progress_20260725.sql
Normal file
193
db_backups/add_install_task_budget_progress_20260725.sql
Normal file
@@ -0,0 +1,193 @@
|
||||
USE [YL_MESDB];
|
||||
GO
|
||||
|
||||
SET NOCOUNT ON;
|
||||
SET XACT_ABORT ON;
|
||||
|
||||
BEGIN TRANSACTION;
|
||||
|
||||
IF OBJECT_ID(N'dbo.计划排产_装配任务查询_核心_预算前_20260725', N'P') IS NOT NULL
|
||||
THROW 51400, N'预算功能部署前备份过程已存在,停止重复部署。', 1;
|
||||
|
||||
IF OBJECT_ID(N'dbo.计划排产_装配任务预算', N'U') IS NULL
|
||||
BEGIN
|
||||
CREATE TABLE dbo.[计划排产_装配任务预算]
|
||||
(
|
||||
[订单号] int NOT NULL,
|
||||
[任务预算装配工时] decimal(18, 2) NOT NULL
|
||||
CONSTRAINT [DF_装配任务预算_工时] DEFAULT (0),
|
||||
[最后编辑人] nvarchar(100) NULL,
|
||||
[最后编辑时间] datetime2(0) NOT NULL
|
||||
CONSTRAINT [DF_装配任务预算_编辑时间] DEFAULT (SYSDATETIME()),
|
||||
CONSTRAINT [PK_计划排产_装配任务预算] PRIMARY KEY CLUSTERED ([订单号]),
|
||||
CONSTRAINT [CK_装配任务预算_工时] CHECK ([任务预算装配工时] >= 0)
|
||||
);
|
||||
END;
|
||||
|
||||
IF OBJECT_ID(N'dbo.计划排产_装配合同预算', N'U') IS NULL
|
||||
BEGIN
|
||||
CREATE TABLE dbo.[计划排产_装配合同预算]
|
||||
(
|
||||
[合同号] nvarchar(50) NOT NULL,
|
||||
[合同预算测试工时] decimal(18, 2) NOT NULL
|
||||
CONSTRAINT [DF_装配合同预算_工时] DEFAULT (0),
|
||||
[最后编辑人] nvarchar(100) NULL,
|
||||
[最后编辑时间] datetime2(0) NOT NULL
|
||||
CONSTRAINT [DF_装配合同预算_编辑时间] DEFAULT (SYSDATETIME()),
|
||||
CONSTRAINT [PK_计划排产_装配合同预算] PRIMARY KEY CLUSTERED ([合同号]),
|
||||
CONSTRAINT [CK_装配合同预算_工时] CHECK ([合同预算测试工时] >= 0)
|
||||
);
|
||||
END;
|
||||
GO
|
||||
|
||||
CREATE OR ALTER PROCEDURE dbo.[计划排产_装配任务预算_保存]
|
||||
@预算类型 nvarchar(10),
|
||||
@订单号 int = 0,
|
||||
@合同号 nvarchar(50) = N'',
|
||||
@预算工时 decimal(18, 2),
|
||||
@最后编辑人 nvarchar(100) = N''
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON;
|
||||
SET XACT_ABORT ON;
|
||||
|
||||
IF @预算工时 IS NULL OR @预算工时 < 0
|
||||
THROW 51401, N'预算工时必须大于或等于 0。', 1;
|
||||
|
||||
IF @预算类型 = N'任务'
|
||||
BEGIN
|
||||
IF @订单号 <= 0
|
||||
THROW 51402, N'任务预算缺少有效订单号。', 1;
|
||||
|
||||
BEGIN TRANSACTION;
|
||||
|
||||
UPDATE dbo.[计划排产_装配任务预算] WITH (UPDLOCK, SERIALIZABLE)
|
||||
SET [任务预算装配工时] = @预算工时,
|
||||
[最后编辑人] = NULLIF(@最后编辑人, N''),
|
||||
[最后编辑时间] = SYSDATETIME()
|
||||
WHERE [订单号] = @订单号;
|
||||
|
||||
IF @@ROWCOUNT = 0
|
||||
BEGIN
|
||||
INSERT INTO dbo.[计划排产_装配任务预算]
|
||||
([订单号], [任务预算装配工时], [最后编辑人])
|
||||
VALUES
|
||||
(@订单号, @预算工时, NULLIF(@最后编辑人, N''));
|
||||
END;
|
||||
|
||||
COMMIT TRANSACTION;
|
||||
END
|
||||
ELSE IF @预算类型 = N'合同'
|
||||
BEGIN
|
||||
SET @合同号 = LTRIM(RTRIM(@合同号));
|
||||
IF @合同号 = N''
|
||||
THROW 51403, N'合同预算缺少合同号。', 1;
|
||||
|
||||
BEGIN TRANSACTION;
|
||||
|
||||
UPDATE dbo.[计划排产_装配合同预算] WITH (UPDLOCK, SERIALIZABLE)
|
||||
SET [合同预算测试工时] = @预算工时,
|
||||
[最后编辑人] = NULLIF(@最后编辑人, N''),
|
||||
[最后编辑时间] = SYSDATETIME()
|
||||
WHERE [合同号] = @合同号;
|
||||
|
||||
IF @@ROWCOUNT = 0
|
||||
BEGIN
|
||||
INSERT INTO dbo.[计划排产_装配合同预算]
|
||||
([合同号], [合同预算测试工时], [最后编辑人])
|
||||
VALUES
|
||||
(@合同号, @预算工时, NULLIF(@最后编辑人, N''));
|
||||
END;
|
||||
|
||||
COMMIT TRANSACTION;
|
||||
END
|
||||
ELSE
|
||||
THROW 51404, N'预算类型只允许“任务”或“合同”。', 1;
|
||||
|
||||
SELECT CAST(1 AS int) AS [result];
|
||||
END;
|
||||
GO
|
||||
|
||||
DECLARE @Definition nvarchar(max) =
|
||||
OBJECT_DEFINITION(OBJECT_ID(N'dbo.计划排产_装配任务查询_核心'));
|
||||
DECLARE @BackupDefinition nvarchar(max);
|
||||
DECLARE @ProcedurePosition int;
|
||||
DECLARE @FieldMarker nvarchar(200) =
|
||||
N'ISNULL(ht.[合同质检工时], 0) AS [合同质检工时],';
|
||||
DECLARE @JoinMarker nvarchar(200) =
|
||||
N'LEFT JOIN #合同工时 AS ht ON v.[合同号] = ht.[合同号]';
|
||||
|
||||
IF @Definition IS NULL
|
||||
THROW 51405, N'未找到装配任务核心查询过程。', 1;
|
||||
|
||||
IF (LEN(@Definition) - LEN(REPLACE(@Definition, @FieldMarker, N''))) / LEN(@FieldMarker) <> 2
|
||||
THROW 51406, N'核心查询的工时字段结构与预期不一致,停止部署。', 1;
|
||||
|
||||
IF (LEN(@Definition) - LEN(REPLACE(@Definition, @JoinMarker, N''))) / LEN(@JoinMarker) <> 2
|
||||
THROW 51407, N'核心查询的合同工时连接结构与预期不一致,停止部署。', 1;
|
||||
|
||||
SET @BackupDefinition = REPLACE(
|
||||
@Definition,
|
||||
N'[dbo].[计划排产_装配任务查询_核心]',
|
||||
N'[dbo].[计划排产_装配任务查询_核心_预算前_20260725]'
|
||||
);
|
||||
|
||||
EXEC sys.sp_executesql @BackupDefinition;
|
||||
|
||||
SET @Definition = REPLACE(
|
||||
@Definition,
|
||||
@FieldMarker,
|
||||
@FieldMarker + N'
|
||||
ISNULL(rw.[任务预算装配工时], 0) AS [任务预算装配工时],
|
||||
CAST(CASE
|
||||
WHEN ISNULL(rw.[任务预算装配工时], 0) > 0
|
||||
THEN ISNULL(zp.[装配工时], 0) / 3600.0 / rw.[任务预算装配工时] * 100.0
|
||||
ELSE 0
|
||||
END AS decimal(18, 2)) AS [任务预算装配进度],
|
||||
ISNULL(cw.[合同预算测试工时], 0) AS [合同预算测试工时],
|
||||
CAST(CASE
|
||||
WHEN ISNULL(cw.[合同预算测试工时], 0) > 0
|
||||
THEN ISNULL(ht.[合同质检工时], 0) / 3600.0 / cw.[合同预算测试工时] * 100.0
|
||||
ELSE 0
|
||||
END AS decimal(18, 2)) AS [合同预算测试进度],'
|
||||
);
|
||||
|
||||
SET @Definition = REPLACE(
|
||||
@Definition,
|
||||
@JoinMarker,
|
||||
@JoinMarker + N'
|
||||
LEFT JOIN dbo.[计划排产_装配任务预算] AS rw ON v.[订单编号] = rw.[订单号]
|
||||
LEFT JOIN dbo.[计划排产_装配合同预算] AS cw ON v.[合同号] = cw.[合同号]'
|
||||
);
|
||||
|
||||
SET @ProcedurePosition = CHARINDEX(N'PROCEDURE', @Definition);
|
||||
IF @ProcedurePosition = 0
|
||||
THROW 51408, N'未识别核心查询过程定义头。', 1;
|
||||
|
||||
SET @Definition = N'ALTER ' + SUBSTRING(@Definition, @ProcedurePosition, LEN(@Definition));
|
||||
EXEC sys.sp_executesql @Definition;
|
||||
|
||||
COMMIT TRANSACTION;
|
||||
GO
|
||||
|
||||
IF OBJECT_ID(N'dbo.计划排产_装配任务预算', N'U') IS NULL
|
||||
THROW 51409, N'任务预算表部署校验失败。', 1;
|
||||
IF OBJECT_ID(N'dbo.计划排产_装配合同预算', N'U') IS NULL
|
||||
THROW 51410, N'合同预算表部署校验失败。', 1;
|
||||
IF OBJECT_ID(N'dbo.计划排产_装配任务预算_保存', N'P') IS NULL
|
||||
THROW 51411, N'预算保存过程部署校验失败。', 1;
|
||||
IF OBJECT_ID(N'dbo.计划排产_装配任务查询_核心_预算前_20260725', N'P') IS NULL
|
||||
THROW 51412, N'核心查询备份过程部署校验失败。', 1;
|
||||
|
||||
SELECT [name], [type_desc], [create_date], [modify_date]
|
||||
FROM sys.objects
|
||||
WHERE [name] IN
|
||||
(
|
||||
N'计划排产_装配任务预算',
|
||||
N'计划排产_装配合同预算',
|
||||
N'计划排产_装配任务预算_保存',
|
||||
N'计划排产_装配任务查询_核心',
|
||||
N'计划排产_装配任务查询_核心_预算前_20260725'
|
||||
)
|
||||
ORDER BY [name];
|
||||
GO
|
||||
@@ -0,0 +1,228 @@
|
||||
USE [YL_MESDB];
|
||||
GO
|
||||
|
||||
SET NOCOUNT ON;
|
||||
SET XACT_ABORT ON;
|
||||
GO
|
||||
|
||||
BEGIN TRY
|
||||
BEGIN TRANSACTION;
|
||||
|
||||
IF COL_LENGTH(N'dbo.计划排产_装配任务预算', N'任务预算质检工时') IS NULL
|
||||
BEGIN
|
||||
ALTER TABLE dbo.[计划排产_装配任务预算]
|
||||
ADD [任务预算质检工时] decimal(18, 2) NOT NULL
|
||||
CONSTRAINT [DF_装配任务预算_质检工时] DEFAULT (0) WITH VALUES,
|
||||
CONSTRAINT [CK_装配任务预算_质检工时] CHECK ([任务预算质检工时] >= 0);
|
||||
END;
|
||||
|
||||
IF COL_LENGTH(N'dbo.计划排产_装配合同预算', N'合同预算装配工时') IS NULL
|
||||
BEGIN
|
||||
ALTER TABLE dbo.[计划排产_装配合同预算]
|
||||
ADD [合同预算装配工时] decimal(18, 2) NOT NULL
|
||||
CONSTRAINT [DF_装配合同预算_装配工时] DEFAULT (0) WITH VALUES,
|
||||
CONSTRAINT [CK_装配合同预算_装配工时] CHECK ([合同预算装配工时] >= 0);
|
||||
END;
|
||||
|
||||
COMMIT TRANSACTION;
|
||||
END TRY
|
||||
BEGIN CATCH
|
||||
IF XACT_STATE() <> 0 ROLLBACK TRANSACTION;
|
||||
THROW;
|
||||
END CATCH;
|
||||
GO
|
||||
|
||||
DECLARE @SaveProcedureDefinition nvarchar(max) =
|
||||
OBJECT_DEFINITION(OBJECT_ID(N'dbo.计划排产_装配任务预算_保存'));
|
||||
DECLARE @SaveProcedurePosition int;
|
||||
|
||||
IF @SaveProcedureDefinition IS NULL
|
||||
THROW 51420, N'未找到装配任务预算保存过程。', 1;
|
||||
|
||||
IF OBJECT_ID(N'dbo.计划排产_装配任务预算_保存_预算扩展前_20260727', N'P') IS NULL
|
||||
BEGIN
|
||||
SET @SaveProcedureDefinition = REPLACE(
|
||||
@SaveProcedureDefinition,
|
||||
N'[计划排产_装配任务预算_保存]',
|
||||
N'[计划排产_装配任务预算_保存_预算扩展前_20260727]'
|
||||
);
|
||||
SET @SaveProcedurePosition = CHARINDEX(N'PROCEDURE', @SaveProcedureDefinition);
|
||||
IF @SaveProcedurePosition = 0
|
||||
THROW 51434, N'未识别预算保存过程定义头。', 1;
|
||||
|
||||
SET @SaveProcedureDefinition = N'CREATE ' + SUBSTRING(
|
||||
@SaveProcedureDefinition,
|
||||
@SaveProcedurePosition,
|
||||
LEN(@SaveProcedureDefinition)
|
||||
);
|
||||
EXEC sys.sp_executesql @SaveProcedureDefinition;
|
||||
END;
|
||||
GO
|
||||
|
||||
CREATE OR ALTER PROCEDURE dbo.[计划排产_装配任务预算_保存]
|
||||
@预算类型 nvarchar(10),
|
||||
@订单号 int = 0,
|
||||
@合同号 nvarchar(50) = N'',
|
||||
@预算工时 decimal(18, 2),
|
||||
@最后编辑人 nvarchar(100) = N''
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON;
|
||||
SET XACT_ABORT ON;
|
||||
|
||||
IF @预算工时 IS NULL OR @预算工时 < 0
|
||||
THROW 51421, N'预算工时必须大于或等于 0。', 1;
|
||||
|
||||
IF @预算类型 IN (N'任务', N'任务装配', N'任务质检')
|
||||
BEGIN
|
||||
IF @订单号 <= 0
|
||||
THROW 51422, N'任务预算缺少有效订单号。', 1;
|
||||
|
||||
BEGIN TRANSACTION;
|
||||
|
||||
UPDATE dbo.[计划排产_装配任务预算] WITH (UPDLOCK, SERIALIZABLE)
|
||||
SET [任务预算装配工时] = CASE WHEN @预算类型 IN (N'任务', N'任务装配') THEN @预算工时 ELSE [任务预算装配工时] END,
|
||||
[任务预算质检工时] = CASE WHEN @预算类型 = N'任务质检' THEN @预算工时 ELSE [任务预算质检工时] END,
|
||||
[最后编辑人] = NULLIF(@最后编辑人, N''),
|
||||
[最后编辑时间] = SYSDATETIME()
|
||||
WHERE [订单号] = @订单号;
|
||||
|
||||
IF @@ROWCOUNT = 0
|
||||
BEGIN
|
||||
INSERT INTO dbo.[计划排产_装配任务预算]
|
||||
([订单号], [任务预算装配工时], [任务预算质检工时], [最后编辑人])
|
||||
VALUES
|
||||
(@订单号,
|
||||
CASE WHEN @预算类型 IN (N'任务', N'任务装配') THEN @预算工时 ELSE 0 END,
|
||||
CASE WHEN @预算类型 = N'任务质检' THEN @预算工时 ELSE 0 END,
|
||||
NULLIF(@最后编辑人, N''));
|
||||
END;
|
||||
|
||||
COMMIT TRANSACTION;
|
||||
END
|
||||
ELSE IF @预算类型 IN (N'合同', N'合同测试', N'合同装配')
|
||||
BEGIN
|
||||
SET @合同号 = LTRIM(RTRIM(@合同号));
|
||||
IF @合同号 = N''
|
||||
THROW 51423, N'合同预算缺少合同号。', 1;
|
||||
|
||||
BEGIN TRANSACTION;
|
||||
|
||||
UPDATE dbo.[计划排产_装配合同预算] WITH (UPDLOCK, SERIALIZABLE)
|
||||
SET [合同预算测试工时] = CASE WHEN @预算类型 IN (N'合同', N'合同测试') THEN @预算工时 ELSE [合同预算测试工时] END,
|
||||
[合同预算装配工时] = CASE WHEN @预算类型 = N'合同装配' THEN @预算工时 ELSE [合同预算装配工时] END,
|
||||
[最后编辑人] = NULLIF(@最后编辑人, N''),
|
||||
[最后编辑时间] = SYSDATETIME()
|
||||
WHERE [合同号] = @合同号;
|
||||
|
||||
IF @@ROWCOUNT = 0
|
||||
BEGIN
|
||||
INSERT INTO dbo.[计划排产_装配合同预算]
|
||||
([合同号], [合同预算测试工时], [合同预算装配工时], [最后编辑人])
|
||||
VALUES
|
||||
(@合同号,
|
||||
CASE WHEN @预算类型 IN (N'合同', N'合同测试') THEN @预算工时 ELSE 0 END,
|
||||
CASE WHEN @预算类型 = N'合同装配' THEN @预算工时 ELSE 0 END,
|
||||
NULLIF(@最后编辑人, N''));
|
||||
END;
|
||||
|
||||
COMMIT TRANSACTION;
|
||||
END
|
||||
ELSE
|
||||
THROW 51424, N'预算类型只允许任务装配、任务质检、合同装配或合同测试。', 1;
|
||||
|
||||
SELECT CAST(1 AS int) AS [result];
|
||||
END;
|
||||
GO
|
||||
|
||||
BEGIN TRY
|
||||
BEGIN TRANSACTION;
|
||||
|
||||
DECLARE @Definition nvarchar(max) =
|
||||
OBJECT_DEFINITION(OBJECT_ID(N'dbo.计划排产_装配任务查询_核心'));
|
||||
DECLARE @BackupDefinition nvarchar(max);
|
||||
DECLARE @ProcedurePosition int;
|
||||
DECLARE @TaskQualityMarker nvarchar(200) =
|
||||
N'ISNULL(zp.[质检工时], 0) AS [任务质检工时],';
|
||||
DECLARE @ContractAssemblyMarker nvarchar(200) =
|
||||
N'ISNULL(ht.[合同装配工时], 0) AS [合同装配工时],';
|
||||
|
||||
IF @Definition IS NULL
|
||||
THROW 51425, N'未找到装配任务核心查询过程。', 1;
|
||||
|
||||
IF CHARINDEX(N'[任务预算质检工时]', @Definition) = 0
|
||||
BEGIN
|
||||
IF (LEN(@Definition) - LEN(REPLACE(@Definition, @TaskQualityMarker, N''))) / LEN(@TaskQualityMarker) <> 2
|
||||
THROW 51426, N'核心查询的任务质检工时字段结构与预期不一致,停止部署。', 1;
|
||||
|
||||
IF (LEN(@Definition) - LEN(REPLACE(@Definition, @ContractAssemblyMarker, N''))) / LEN(@ContractAssemblyMarker) <> 2
|
||||
THROW 51427, N'核心查询的合同装配工时字段结构与预期不一致,停止部署。', 1;
|
||||
|
||||
IF OBJECT_ID(N'dbo.计划排产_装配任务查询_核心_预算扩展前_20260727', N'P') IS NULL
|
||||
BEGIN
|
||||
SET @BackupDefinition = REPLACE(
|
||||
@Definition,
|
||||
N'[dbo].[计划排产_装配任务查询_核心]',
|
||||
N'[dbo].[计划排产_装配任务查询_核心_预算扩展前_20260727]'
|
||||
);
|
||||
SET @ProcedurePosition = CHARINDEX(N'PROCEDURE', @BackupDefinition);
|
||||
IF @ProcedurePosition = 0
|
||||
THROW 51428, N'未识别核心查询过程定义头。', 1;
|
||||
|
||||
SET @BackupDefinition = N'CREATE ' + SUBSTRING(
|
||||
@BackupDefinition,
|
||||
@ProcedurePosition,
|
||||
LEN(@BackupDefinition)
|
||||
);
|
||||
EXEC sys.sp_executesql @BackupDefinition;
|
||||
END;
|
||||
|
||||
SET @Definition = REPLACE(
|
||||
@Definition,
|
||||
@TaskQualityMarker,
|
||||
@TaskQualityMarker + N'
|
||||
ISNULL(rw.[任务预算质检工时], 0) AS [任务预算质检工时],
|
||||
CAST(CASE
|
||||
WHEN ISNULL(rw.[任务预算质检工时], 0) > 0
|
||||
THEN ISNULL(zp.[质检工时], 0) / 3600.0 / rw.[任务预算质检工时] * 100.0
|
||||
ELSE 0
|
||||
END AS decimal(18, 2)) AS [任务预算质检进度],'
|
||||
);
|
||||
|
||||
SET @Definition = REPLACE(
|
||||
@Definition,
|
||||
@ContractAssemblyMarker,
|
||||
@ContractAssemblyMarker + N'
|
||||
ISNULL(cw.[合同预算装配工时], 0) AS [合同预算装配工时],
|
||||
CAST(CASE
|
||||
WHEN ISNULL(cw.[合同预算装配工时], 0) > 0
|
||||
THEN ISNULL(ht.[合同装配工时], 0) / 3600.0 / cw.[合同预算装配工时] * 100.0
|
||||
ELSE 0
|
||||
END AS decimal(18, 2)) AS [合同预算装配进度],'
|
||||
);
|
||||
|
||||
SET @ProcedurePosition = CHARINDEX(N'PROCEDURE', @Definition);
|
||||
IF @ProcedurePosition = 0
|
||||
THROW 51429, N'未识别核心查询过程定义头。', 1;
|
||||
|
||||
SET @Definition = N'ALTER ' + SUBSTRING(@Definition, @ProcedurePosition, LEN(@Definition));
|
||||
EXEC sys.sp_executesql @Definition;
|
||||
END;
|
||||
|
||||
COMMIT TRANSACTION;
|
||||
END TRY
|
||||
BEGIN CATCH
|
||||
IF XACT_STATE() <> 0 ROLLBACK TRANSACTION;
|
||||
THROW;
|
||||
END CATCH;
|
||||
GO
|
||||
|
||||
IF COL_LENGTH(N'dbo.计划排产_装配任务预算', N'任务预算质检工时') IS NULL
|
||||
THROW 51430, N'任务预算质检工时字段部署校验失败。', 1;
|
||||
IF COL_LENGTH(N'dbo.计划排产_装配合同预算', N'合同预算装配工时') IS NULL
|
||||
THROW 51431, N'合同预算装配工时字段部署校验失败。', 1;
|
||||
IF OBJECT_DEFINITION(OBJECT_ID(N'dbo.计划排产_装配任务查询_核心')) NOT LIKE N'%任务预算质检进度%'
|
||||
THROW 51432, N'任务预算质检进度字段部署校验失败。', 1;
|
||||
IF OBJECT_DEFINITION(OBJECT_ID(N'dbo.计划排产_装配任务查询_核心')) NOT LIKE N'%合同预算装配进度%'
|
||||
THROW 51433, N'合同预算装配进度字段部署校验失败。', 1;
|
||||
GO
|
||||
103
db_backups/fix_install_task_contract_hours_20260725.sql
Normal file
103
db_backups/fix_install_task_contract_hours_20260725.sql
Normal file
@@ -0,0 +1,103 @@
|
||||
USE [YL_MESDB];
|
||||
GO
|
||||
|
||||
SET NOCOUNT ON;
|
||||
SET XACT_ABORT ON;
|
||||
|
||||
BEGIN TRY
|
||||
BEGIN TRANSACTION;
|
||||
|
||||
DECLARE @ProcedureName sysname;
|
||||
DECLARE @Definition nvarchar(max);
|
||||
DECLARE @CreatePosition int;
|
||||
DECLARE @AssemblySelect nvarchar(200) = N'SELECT gs.合同号, SUM(gs.总时长) as 合同装配工时';
|
||||
DECLARE @QualitySelect nvarchar(200) = N'SELECT gs.合同号, SUM(gs.总时长) as 合同质检工时';
|
||||
DECLARE @GroupBy nvarchar(100) = N'GROUP BY gs.合同号';
|
||||
|
||||
DECLARE ProcedureCursor CURSOR LOCAL FAST_FORWARD FOR
|
||||
SELECT [name]
|
||||
FROM sys.procedures
|
||||
WHERE [name] IN (N'计划排产_系统类任务查询', N'计划排产_阀类任务查询')
|
||||
ORDER BY [name];
|
||||
|
||||
OPEN ProcedureCursor;
|
||||
FETCH NEXT FROM ProcedureCursor INTO @ProcedureName;
|
||||
|
||||
WHILE @@FETCH_STATUS = 0
|
||||
BEGIN
|
||||
SET @Definition = OBJECT_DEFINITION(OBJECT_ID(N'dbo.' + QUOTENAME(@ProcedureName)));
|
||||
|
||||
IF @Definition IS NULL
|
||||
THROW 51000, N'未找到待修改的存储过程。', 1;
|
||||
|
||||
IF (LEN(@Definition) - LEN(REPLACE(@Definition, @AssemblySelect, N''))) / LEN(@AssemblySelect) <> 1
|
||||
THROW 51001, N'合同装配工时汇总代码与预期不一致,已停止部署。', 1;
|
||||
|
||||
IF (LEN(@Definition) - LEN(REPLACE(@Definition, @QualitySelect, N''))) / LEN(@QualitySelect) <> 1
|
||||
THROW 51002, N'合同质检工时汇总代码与预期不一致,已停止部署。', 1;
|
||||
|
||||
IF (LEN(@Definition) - LEN(REPLACE(@Definition, @GroupBy, N''))) / LEN(@GroupBy) <> 2
|
||||
THROW 51003, N'合同工时分组代码与预期不一致,已停止部署。', 1;
|
||||
|
||||
SET @Definition = REPLACE(
|
||||
@Definition,
|
||||
@AssemblySelect,
|
||||
N'SELECT gs.订单合同号 AS 合同号, SUM(gs.总时长) as 合同装配工时'
|
||||
);
|
||||
SET @Definition = REPLACE(
|
||||
@Definition,
|
||||
@QualitySelect,
|
||||
N'SELECT gs.订单合同号 AS 合同号, SUM(gs.总时长) as 合同质检工时'
|
||||
);
|
||||
SET @Definition = REPLACE(@Definition, @GroupBy, N'GROUP BY gs.订单合同号');
|
||||
|
||||
SET @CreatePosition = CHARINDEX(N'CREATE PROCEDURE', @Definition);
|
||||
IF @CreatePosition = 0
|
||||
THROW 51004, N'存储过程定义中未找到 CREATE PROCEDURE。', 1;
|
||||
|
||||
SET @Definition = STUFF(
|
||||
@Definition,
|
||||
@CreatePosition,
|
||||
LEN(N'CREATE PROCEDURE'),
|
||||
N'ALTER PROCEDURE'
|
||||
);
|
||||
|
||||
EXEC sys.sp_executesql @Definition;
|
||||
|
||||
FETCH NEXT FROM ProcedureCursor INTO @ProcedureName;
|
||||
END;
|
||||
|
||||
CLOSE ProcedureCursor;
|
||||
DEALLOCATE ProcedureCursor;
|
||||
|
||||
IF EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM sys.procedures
|
||||
WHERE [name] IN (N'计划排产_系统类任务查询', N'计划排产_阀类任务查询')
|
||||
AND
|
||||
(
|
||||
OBJECT_DEFINITION([object_id]) NOT LIKE N'%SELECT gs.订单合同号 AS 合同号, SUM(gs.总时长) as 合同装配工时%'
|
||||
OR OBJECT_DEFINITION([object_id]) NOT LIKE N'%SELECT gs.订单合同号 AS 合同号, SUM(gs.总时长) as 合同质检工时%'
|
||||
OR OBJECT_DEFINITION([object_id]) LIKE N'%GROUP BY gs.合同号%'
|
||||
)
|
||||
)
|
||||
THROW 51005, N'存储过程修改后校验失败。', 1;
|
||||
|
||||
COMMIT TRANSACTION;
|
||||
|
||||
SELECT [name], [modify_date]
|
||||
FROM sys.procedures
|
||||
WHERE [name] IN (N'计划排产_系统类任务查询', N'计划排产_阀类任务查询')
|
||||
ORDER BY [name];
|
||||
END TRY
|
||||
BEGIN CATCH
|
||||
IF CURSOR_STATUS('local', 'ProcedureCursor') >= 0
|
||||
CLOSE ProcedureCursor;
|
||||
IF CURSOR_STATUS('local', 'ProcedureCursor') > -3
|
||||
DEALLOCATE ProcedureCursor;
|
||||
IF XACT_STATE() <> 0
|
||||
ROLLBACK TRANSACTION;
|
||||
THROW;
|
||||
END CATCH;
|
||||
GO
|
||||
469
db_backups/optimize_install_task_queries_20260725.sql
Normal file
469
db_backups/optimize_install_task_queries_20260725.sql
Normal file
@@ -0,0 +1,469 @@
|
||||
USE [YL_MESDB];
|
||||
GO
|
||||
|
||||
SET NOCOUNT ON;
|
||||
SET XACT_ABORT ON;
|
||||
|
||||
BEGIN TRANSACTION;
|
||||
GO
|
||||
|
||||
DECLARE @Name sysname;
|
||||
DECLARE @BackupName sysname;
|
||||
DECLARE @Definition nvarchar(max);
|
||||
DECLARE @HeaderPosition int;
|
||||
DECLARE @HeaderLength int;
|
||||
|
||||
IF OBJECT_ID(N'dbo.计划排产_系统类任务查询_优化前_20260725', N'P') IS NOT NULL
|
||||
THROW 51200, N'系统类优化前备份过程已存在,停止重复部署。', 1;
|
||||
|
||||
IF OBJECT_ID(N'dbo.计划排产_阀类任务查询_优化前_20260725', N'P') IS NOT NULL
|
||||
THROW 51201, N'阀类优化前备份过程已存在,停止重复部署。', 1;
|
||||
|
||||
DECLARE BackupCursor CURSOR LOCAL FAST_FORWARD FOR
|
||||
SELECT [name], [name] + N'_优化前_20260725'
|
||||
FROM sys.procedures
|
||||
WHERE [name] IN (N'计划排产_系统类任务查询', N'计划排产_阀类任务查询')
|
||||
ORDER BY [name];
|
||||
|
||||
OPEN BackupCursor;
|
||||
FETCH NEXT FROM BackupCursor INTO @Name, @BackupName;
|
||||
|
||||
WHILE @@FETCH_STATUS = 0
|
||||
BEGIN
|
||||
SET @Definition = OBJECT_DEFINITION(OBJECT_ID(N'dbo.' + QUOTENAME(@Name)));
|
||||
IF @Definition IS NULL
|
||||
THROW 51202, N'未找到待优化过程定义。', 1;
|
||||
|
||||
SET @Definition = REPLACE(
|
||||
@Definition,
|
||||
N'[dbo].[' + @Name + N']',
|
||||
N'[dbo].[' + @BackupName + N']'
|
||||
);
|
||||
|
||||
SET @HeaderPosition = CHARINDEX(N'ALTER PROCEDURE', @Definition);
|
||||
SET @HeaderLength = LEN(N'ALTER PROCEDURE');
|
||||
IF @HeaderPosition = 0
|
||||
BEGIN
|
||||
SET @HeaderPosition = CHARINDEX(N'CREATE PROCEDURE', @Definition);
|
||||
SET @HeaderLength = LEN(N'CREATE PROCEDURE');
|
||||
END;
|
||||
IF @HeaderPosition = 0
|
||||
THROW 51203, N'未识别过程定义头。', 1;
|
||||
|
||||
SET @Definition = STUFF(
|
||||
@Definition,
|
||||
@HeaderPosition,
|
||||
@HeaderLength,
|
||||
N'CREATE PROCEDURE'
|
||||
);
|
||||
|
||||
EXEC sys.sp_executesql @Definition;
|
||||
FETCH NEXT FROM BackupCursor INTO @Name, @BackupName;
|
||||
END;
|
||||
|
||||
CLOSE BackupCursor;
|
||||
DEALLOCATE BackupCursor;
|
||||
GO
|
||||
|
||||
CREATE OR ALTER PROCEDURE [dbo].[计划排产_装配任务查询_核心]
|
||||
@任务分类 nvarchar(10),
|
||||
@订单号 int = 0,
|
||||
@物料类型 nvarchar(50) = N'',
|
||||
@合同号 nvarchar(50) = N'',
|
||||
@产品编码 nvarchar(50) = N'',
|
||||
@产品名称 nvarchar(50) = N'',
|
||||
@工序名称 nvarchar(50) = N'',
|
||||
@要求完工日期1 nvarchar(50) = N'',
|
||||
@要求完工日期2 nvarchar(50) = N'',
|
||||
@计划开始 nvarchar(50) = N'',
|
||||
@计划完成 nvarchar(50) = N'',
|
||||
@排产状态 nvarchar(50) = N'全部',
|
||||
@指派对象 nvarchar(50) = N'全部',
|
||||
@辅助配件 nvarchar(50) = N'不含'
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON;
|
||||
|
||||
-- 原过程只有“自制件”分支会生成查询,保持该行为不变。
|
||||
IF @物料类型 <> N'自制件'
|
||||
RETURN;
|
||||
|
||||
DECLARE @要求开始日期 datetime = CASE WHEN @要求完工日期1 = N'' THEN NULL ELSE CONVERT(datetime, @要求完工日期1) END;
|
||||
DECLARE @要求结束日期 datetime = CASE WHEN @要求完工日期2 = N'' THEN NULL ELSE CONVERT(datetime, @要求完工日期2) END;
|
||||
DECLARE @计划开始日期 datetime = CASE WHEN @计划开始 = N'' THEN NULL ELSE CONVERT(datetime, @计划开始) END;
|
||||
DECLARE @计划完成日期 datetime = CASE WHEN @计划完成 = N'' THEN NULL ELSE CONVERT(datetime, @计划完成) END;
|
||||
|
||||
SELECT v.*
|
||||
INTO #任务
|
||||
FROM dbo.View_生产订单_MES AS v
|
||||
WHERE v.[物料类型] = N'pit_Resource'
|
||||
AND v.[自制件属性] LIKE N'%装配%'
|
||||
AND
|
||||
(
|
||||
(@任务分类 = N'系统' AND v.[物料描述] LIKE N'%系统%')
|
||||
OR (@任务分类 = N'阀类' AND v.[物料描述] NOT LIKE N'%系统%')
|
||||
)
|
||||
AND ISNULL(v.[任务状态], 0) < 4
|
||||
AND (@订单号 = 0 OR v.[订单编号] = @订单号)
|
||||
AND (@合同号 = N'' OR v.[合同号] LIKE N'%' + @合同号 + N'%')
|
||||
AND (@产品编码 = N'' OR v.[物料编号] LIKE N'%' + @产品编码 + N'%')
|
||||
AND (@产品名称 = N'' OR v.[物料描述] LIKE N'%' + @产品名称 + N'%')
|
||||
AND
|
||||
(
|
||||
@辅助配件 <> N'不含'
|
||||
OR
|
||||
(
|
||||
v.[物料描述] NOT LIKE N'%软管总成%'
|
||||
AND v.[物料描述] NOT LIKE N'%发货部件%'
|
||||
)
|
||||
)
|
||||
AND (@工序名称 = N'' OR v.[工序名称] = @工序名称)
|
||||
AND (@要求开始日期 IS NULL OR v.[计划完成] >= @要求开始日期)
|
||||
AND (@要求结束日期 IS NULL OR v.[计划完成] <= @要求结束日期)
|
||||
AND (@计划开始日期 IS NULL OR v.[计划开始时间] >= @计划开始日期)
|
||||
AND (@计划完成日期 IS NULL OR v.[计划完成时间] <= @计划完成日期)
|
||||
AND
|
||||
(
|
||||
@排产状态 = N'全部'
|
||||
OR (@排产状态 = N'未完成' AND ISNULL(v.[排产状态], 0) = 0)
|
||||
OR (@排产状态 = N'已完成' AND v.[排产状态] = 1)
|
||||
)
|
||||
AND v.[不装配] <> N'否'
|
||||
AND
|
||||
(
|
||||
@指派对象 = N'全部'
|
||||
OR EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM STRING_SPLIT(@指派对象, N',') AS ss
|
||||
WHERE ss.[value] = v.[指派对象]
|
||||
)
|
||||
)
|
||||
OPTION (RECOMPILE);
|
||||
|
||||
CREATE CLUSTERED INDEX [CX_任务_订单]
|
||||
ON #任务 ([订单编号], [订单行号], [订单拆分内码]);
|
||||
CREATE NONCLUSTERED INDEX [IX_任务_合同物料]
|
||||
ON #任务 ([合同号], [物料编号]);
|
||||
|
||||
SELECT DISTINCT [订单编号]
|
||||
INTO #订单
|
||||
FROM #任务;
|
||||
CREATE UNIQUE CLUSTERED INDEX [CX_订单] ON #订单 ([订单编号]);
|
||||
|
||||
SELECT DISTINCT [合同号]
|
||||
INTO #合同
|
||||
FROM #任务
|
||||
WHERE [合同号] IS NOT NULL;
|
||||
CREATE UNIQUE CLUSTERED INDEX [CX_合同] ON #合同 ([合同号]);
|
||||
|
||||
-- 原过程对同一复杂工时视图扫描四次;改为一次扫描后再按订单和合同汇总。
|
||||
SELECT
|
||||
TRY_CONVERT(int, gs.[订单号]) AS [订单号],
|
||||
gs.[订单合同号] AS [合同号],
|
||||
SUM(CASE WHEN ry.[班组] IN (N'装配', N'电气') THEN gs.[总时长] ELSE 0 END) AS [装配工时],
|
||||
SUM(CASE WHEN ry.[班组] = N'质检' THEN gs.[总时长] ELSE 0 END) AS [质检工时],
|
||||
MAX(CASE WHEN ry.[班组] IN (N'装配', N'电气') THEN gs.[工序说明] END) AS [装配工序说明],
|
||||
MAX(CASE WHEN ry.[班组] = N'质检' THEN gs.[工序说明] END) AS [质检工序说明]
|
||||
INTO #工时粒度
|
||||
FROM dbo.View_生产工时视图 AS gs
|
||||
INNER JOIN dbo.[登录基础数据_人员信息] AS ry
|
||||
ON gs.[操作人] = ry.[Personnel_Name]
|
||||
WHERE ry.[班组] IN (N'装配', N'电气', N'质检')
|
||||
AND
|
||||
(
|
||||
EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM #订单 AS od
|
||||
WHERE od.[订单编号] = TRY_CONVERT(int, gs.[订单号])
|
||||
)
|
||||
OR EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM #合同 AS ht
|
||||
WHERE ht.[合同号] = gs.[订单合同号]
|
||||
)
|
||||
)
|
||||
GROUP BY TRY_CONVERT(int, gs.[订单号]), gs.[订单合同号]
|
||||
OPTION (RECOMPILE);
|
||||
|
||||
SELECT
|
||||
[订单号],
|
||||
SUM([装配工时]) AS [装配工时],
|
||||
SUM([质检工时]) AS [质检工时],
|
||||
MAX([装配工序说明]) AS [装配工序说明],
|
||||
MAX([质检工序说明]) AS [质检工序说明]
|
||||
INTO #任务工时
|
||||
FROM #工时粒度
|
||||
WHERE [订单号] IS NOT NULL
|
||||
GROUP BY [订单号];
|
||||
CREATE UNIQUE CLUSTERED INDEX [CX_任务工时] ON #任务工时 ([订单号]);
|
||||
|
||||
SELECT
|
||||
[合同号],
|
||||
SUM([装配工时]) AS [合同装配工时],
|
||||
SUM([质检工时]) AS [合同质检工时]
|
||||
INTO #合同工时
|
||||
FROM #工时粒度
|
||||
WHERE [合同号] IS NOT NULL
|
||||
GROUP BY [合同号];
|
||||
CREATE UNIQUE CLUSTERED INDEX [CX_合同工时] ON #合同工时 ([合同号]);
|
||||
|
||||
SELECT
|
||||
lc.[已关联计划号] AS [订单编号],
|
||||
STRING_AGG(CONVERT(nvarchar(max), lc.[流程描述]), N',')
|
||||
WITHIN GROUP (ORDER BY lc.[流程ID]) AS [异常报警信息]
|
||||
INTO #流程
|
||||
FROM dbo.[流程表] AS lc
|
||||
INNER JOIN #订单 AS od
|
||||
ON od.[订单编号] = lc.[已关联计划号]
|
||||
GROUP BY lc.[已关联计划号];
|
||||
|
||||
SELECT DISTINCT
|
||||
pt.[订单编号],
|
||||
CASE WHEN ry.[班组] = N'质检' THEN N'质检' ELSE N'装配' END AS [类型],
|
||||
t.[操作人],
|
||||
t.[开始时间]
|
||||
INTO #进行中明细
|
||||
FROM dbo.[YL_加工中心_操作记录表] AS t
|
||||
INNER JOIN dbo.[MES_接口_生产计划_生产任务] AS pt
|
||||
ON t.[TaskAID] = pt.[AID]
|
||||
INNER JOIN #订单 AS od
|
||||
ON od.[订单编号] = pt.[订单编号]
|
||||
INNER JOIN dbo.[登录基础数据_人员信息] AS ry
|
||||
ON t.[操作人] = ry.[Personnel_Name]
|
||||
WHERE t.[操作类别] = N'开始加工'
|
||||
AND t.[结束时间] IS NULL
|
||||
AND t.[操作数值] IS NOT NULL
|
||||
AND ry.[班组] IN (N'装配', N'电气', N'质检');
|
||||
|
||||
SELECT
|
||||
[订单编号],
|
||||
[类型],
|
||||
STRING_AGG(
|
||||
CONVERT(nvarchar(max), [操作人] + N': ' + CONVERT(varchar(19), [开始时间], 120)),
|
||||
N','
|
||||
) WITHIN GROUP (ORDER BY [开始时间] DESC) AS [进行中信息]
|
||||
INTO #进行中聚合
|
||||
FROM #进行中明细
|
||||
GROUP BY [订单编号], [类型];
|
||||
|
||||
SELECT
|
||||
[订单编号],
|
||||
MAX(CASE WHEN [类型] = N'装配' THEN [进行中信息] END) AS [装配进行中],
|
||||
MAX(CASE WHEN [类型] = N'质检' THEN [进行中信息] END) AS [质检进行中]
|
||||
INTO #进行中
|
||||
FROM #进行中聚合
|
||||
GROUP BY [订单编号];
|
||||
|
||||
SELECT DISTINCT q.[计划号]
|
||||
INTO #终检
|
||||
FROM dbo.[YL_质量检验_质检记录] AS q
|
||||
INNER JOIN #订单 AS od
|
||||
ON od.[订单编号] = q.[计划号]
|
||||
WHERE q.[质检类型] = N'终检';
|
||||
CREATE UNIQUE CLUSTERED INDEX [CX_终检] ON #终检 ([计划号]);
|
||||
|
||||
SELECT DISTINCT [合同号], [物料编号]
|
||||
INTO #交货键
|
||||
FROM #任务
|
||||
WHERE [合同号] IS NOT NULL
|
||||
AND [物料编号] IS NOT NULL;
|
||||
|
||||
SELECT
|
||||
k.[合同号],
|
||||
k.[物料编号],
|
||||
MIN(s.[交货日期理论齐套日期]) AS [交货日期理论齐套日期]
|
||||
INTO #交货
|
||||
FROM #交货键 AS k
|
||||
LEFT JOIN [SAP].[SBO_YL].[dbo].[UBT_MES_ORDROPEN2] AS s
|
||||
ON s.[项目号] = k.[合同号]
|
||||
AND s.[物料号] = k.[物料编号]
|
||||
GROUP BY k.[合同号], k.[物料编号];
|
||||
CREATE UNIQUE CLUSTERED INDEX [CX_交货] ON #交货 ([合同号], [物料编号]);
|
||||
|
||||
IF @任务分类 = N'系统'
|
||||
BEGIN
|
||||
SELECT
|
||||
v.[计划数量订单], ISNULL(v.[开工时间], 0) AS [开工时间], ISNULL(v.[进度], 0) AS [进度],
|
||||
v.[TaskAID], v.[合同号], v.[订单编号] AS [订单号], v.[订单行号], v.[订单拆分内码] AS [拆分内码],
|
||||
v.[物料编号] AS [产品编码], v.[物料描述] AS [产品名称],
|
||||
TRIM('.' FROM TRIM('0' FROM CAST(v.[计划数量] AS varchar(30)))) AS [计划数量],
|
||||
v.[计划完成] AS [要求完工日期], v.[工序名称], v.[完成数量], v.[计划号], v.[收料数量],
|
||||
v.[外协分组], v.[任务状态], v.[齐套时间], v.[派工时间], v.[齐套], v.[要求发货日期],
|
||||
CASE WHEN v.[加急状态] = 1 THEN N'加急' ELSE N'' END AS [加急状态], v.[性质],
|
||||
ISNULL(v.[总工时], 0) AS [总工时], v.[占用情况], v.[排产状态], v.[工序计划数量],
|
||||
v.[指派对象编号], v.[指派对象],
|
||||
TRIM('.' FROM TRIM('0' FROM CAST(v.[指派数量] AS varchar(30)))) AS [指派数量],
|
||||
v.[计划开始时间], v.[计划完成时间], v.[最晚开始时间], v.[派工状态], v.[外协通知], v.[优先级],
|
||||
v.[未完成说明], v.[派工特殊说明], v.[最后编辑人], v.[最后编辑时间], v.[二次派工],
|
||||
jh.[交货日期理论齐套日期] AS [交货日期],
|
||||
CASE WHEN zj.[计划号] IS NOT NULL THEN N'是' ELSE N'否' END AS [终检],
|
||||
ISNULL(g.[标准工时], 0) AS [标准工时], v.[钣金预达时间],
|
||||
ISNULL(v.[预计送检日期], DATEADD(DAY, 3, v.[钣金预达时间])) AS [预计送检日期],
|
||||
ISNULL(v.[销售要求日期], jh.[交货日期理论齐套日期]) AS [销售要求日期],
|
||||
CASE
|
||||
WHEN ISNULL(v.[发料状态], 0) = 1 THEN N'发料齐套'
|
||||
WHEN ISNULL(v.[发料状态], 0) = 2 THEN N'发料缺件'
|
||||
WHEN ISNULL(v.[发料状态], 0) = 0 THEN N'未发料'
|
||||
END AS [发料状态],
|
||||
ISNULL(zp.[装配工时], 0) AS [任务装配工时],
|
||||
ISNULL(zp.[质检工时], 0) AS [任务质检工时],
|
||||
ISNULL(ht.[合同装配工时], 0) AS [合同装配工时],
|
||||
ISNULL(ht.[合同质检工时], 0) AS [合同质检工时],
|
||||
ISNULL(zp.[装配工序说明], N'') AS [装配工序说明],
|
||||
ISNULL(zp.[质检工序说明], N'') AS [质检工序说明],
|
||||
ISNULL(lc.[异常报警信息], N'') AS [异常报警信息],
|
||||
ISNULL(jxz.[装配进行中], N'') AS [装配进行中],
|
||||
ISNULL(jxz.[质检进行中], N'') AS [质检进行中]
|
||||
FROM #任务 AS v
|
||||
LEFT JOIN #终检 AS zj ON v.[订单编号] = zj.[计划号]
|
||||
LEFT JOIN dbo.[车间生产管理工艺_零件生产工艺_工艺库] AS g
|
||||
ON v.[订单编号] = g.[订单编号] AND v.[订单行号] = g.[工艺顺序]
|
||||
LEFT JOIN #任务工时 AS zp ON v.[订单编号] = zp.[订单号]
|
||||
LEFT JOIN #合同工时 AS ht ON v.[合同号] = ht.[合同号]
|
||||
LEFT JOIN #交货 AS jh ON v.[合同号] = jh.[合同号] AND v.[物料编号] = jh.[物料编号]
|
||||
LEFT JOIN #流程 AS lc ON v.[订单编号] = lc.[订单编号]
|
||||
LEFT JOIN #进行中 AS jxz ON v.[订单编号] = jxz.[订单编号]
|
||||
ORDER BY
|
||||
CASE WHEN v.[钣金预达时间] IS NULL THEN 1 ELSE 0 END,
|
||||
v.[钣金预达时间], v.[合同号];
|
||||
END
|
||||
ELSE
|
||||
BEGIN
|
||||
SELECT
|
||||
v.[计划数量订单], ISNULL(v.[开工时间], 0) AS [开工时间], ISNULL(v.[进度], 0) AS [进度],
|
||||
v.[TaskAID], v.[合同号], v.[订单编号] AS [订单号], v.[订单行号], v.[订单拆分内码] AS [拆分内码],
|
||||
v.[物料编号] AS [产品编码], v.[物料描述] AS [产品名称],
|
||||
TRIM('.' FROM TRIM('0' FROM CAST(v.[计划数量] AS varchar(30)))) AS [计划数量],
|
||||
v.[计划完成] AS [要求完工日期], v.[工序名称], v.[完成数量], v.[计划号], v.[收料数量],
|
||||
v.[外协分组], v.[任务状态], v.[齐套时间], v.[派工时间], v.[齐套], v.[要求发货日期],
|
||||
CASE WHEN v.[加急状态] = 1 THEN N'加急' ELSE N'' END AS [加急状态], v.[性质],
|
||||
ISNULL(v.[总工时], 0) AS [总工时], v.[占用情况], v.[排产状态], v.[工序计划数量],
|
||||
v.[指派对象编号], v.[指派对象],
|
||||
TRIM('.' FROM TRIM('0' FROM CAST(v.[指派数量] AS varchar(30)))) AS [指派数量],
|
||||
v.[计划开始时间], v.[计划完成时间], v.[最晚开始时间], v.[派工状态], v.[外协通知], v.[优先级],
|
||||
v.[未完成说明], v.[派工特殊说明], v.[最后编辑人], v.[最后编辑时间], v.[二次派工],
|
||||
jh.[交货日期理论齐套日期] AS [交货日期],
|
||||
CASE WHEN zj.[计划号] IS NOT NULL THEN N'是' ELSE N'否' END AS [终检],
|
||||
ISNULL(g.[标准工时], 0) AS [标准工时],
|
||||
ISNULL(v.[预计送检日期], DATEADD(DAY, 3, v.[齐套时间])) AS [预计送检日期],
|
||||
ISNULL(v.[销售要求日期], jh.[交货日期理论齐套日期]) AS [销售要求日期],
|
||||
ISNULL(zp.[装配工时], 0) AS [任务装配工时],
|
||||
ISNULL(zp.[质检工时], 0) AS [任务质检工时],
|
||||
ISNULL(ht.[合同装配工时], 0) AS [合同装配工时],
|
||||
ISNULL(ht.[合同质检工时], 0) AS [合同质检工时],
|
||||
ISNULL(zp.[装配工序说明], N'') AS [装配工序说明],
|
||||
ISNULL(zp.[质检工序说明], N'') AS [质检工序说明],
|
||||
ISNULL(lc.[异常报警信息], N'') AS [异常报警信息],
|
||||
ISNULL(jxz.[装配进行中], N'') AS [装配进行中],
|
||||
ISNULL(jxz.[质检进行中], N'') AS [质检进行中]
|
||||
FROM #任务 AS v
|
||||
LEFT JOIN #终检 AS zj ON v.[订单编号] = zj.[计划号]
|
||||
LEFT JOIN dbo.[车间生产管理工艺_零件生产工艺_工艺库] AS g
|
||||
ON v.[订单编号] = g.[订单编号] AND v.[订单行号] = g.[工艺顺序]
|
||||
LEFT JOIN #任务工时 AS zp ON v.[订单编号] = zp.[订单号]
|
||||
LEFT JOIN #合同工时 AS ht ON v.[合同号] = ht.[合同号]
|
||||
LEFT JOIN #交货 AS jh ON v.[合同号] = jh.[合同号] AND v.[物料编号] = jh.[物料编号]
|
||||
LEFT JOIN #流程 AS lc ON v.[订单编号] = lc.[订单编号]
|
||||
LEFT JOIN #进行中 AS jxz ON v.[订单编号] = jxz.[订单编号]
|
||||
ORDER BY
|
||||
CASE WHEN v.[齐套时间] IS NULL THEN 1 ELSE 0 END,
|
||||
v.[齐套时间], v.[计划开始时间];
|
||||
END;
|
||||
END;
|
||||
GO
|
||||
|
||||
ALTER PROCEDURE [dbo].[计划排产_系统类任务查询]
|
||||
@订单号 int = 0,
|
||||
@物料类型 nvarchar(50) = N'',
|
||||
@合同号 nvarchar(50) = N'',
|
||||
@产品编码 nvarchar(50) = N'',
|
||||
@产品名称 nvarchar(50) = N'',
|
||||
@工序名称 nvarchar(50) = N'',
|
||||
@要求完工日期1 nvarchar(50) = N'',
|
||||
@要求完工日期2 nvarchar(50) = N'',
|
||||
@计划开始 nvarchar(50) = N'',
|
||||
@计划完成 nvarchar(50) = N'',
|
||||
@排产状态 nvarchar(50) = N'全部',
|
||||
@指派对象 nvarchar(50) = N'全部',
|
||||
@辅助配件 nvarchar(50) = N'不含'
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON;
|
||||
EXEC dbo.[计划排产_装配任务查询_核心]
|
||||
@任务分类 = N'系统',
|
||||
@订单号 = @订单号,
|
||||
@物料类型 = @物料类型,
|
||||
@合同号 = @合同号,
|
||||
@产品编码 = @产品编码,
|
||||
@产品名称 = @产品名称,
|
||||
@工序名称 = @工序名称,
|
||||
@要求完工日期1 = @要求完工日期1,
|
||||
@要求完工日期2 = @要求完工日期2,
|
||||
@计划开始 = @计划开始,
|
||||
@计划完成 = @计划完成,
|
||||
@排产状态 = @排产状态,
|
||||
@指派对象 = @指派对象,
|
||||
@辅助配件 = @辅助配件;
|
||||
END;
|
||||
GO
|
||||
|
||||
ALTER PROCEDURE [dbo].[计划排产_阀类任务查询]
|
||||
@订单号 int = 0,
|
||||
@物料类型 nvarchar(50) = N'',
|
||||
@合同号 nvarchar(50) = N'',
|
||||
@产品编码 nvarchar(50) = N'',
|
||||
@产品名称 nvarchar(50) = N'',
|
||||
@工序名称 nvarchar(50) = N'',
|
||||
@要求完工日期1 nvarchar(50) = N'',
|
||||
@要求完工日期2 nvarchar(50) = N'',
|
||||
@计划开始 nvarchar(50) = N'',
|
||||
@计划完成 nvarchar(50) = N'',
|
||||
@排产状态 nvarchar(50) = N'全部',
|
||||
@指派对象 nvarchar(50) = N'全部',
|
||||
@辅助配件 nvarchar(50) = N'不含'
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON;
|
||||
EXEC dbo.[计划排产_装配任务查询_核心]
|
||||
@任务分类 = N'阀类',
|
||||
@订单号 = @订单号,
|
||||
@物料类型 = @物料类型,
|
||||
@合同号 = @合同号,
|
||||
@产品编码 = @产品编码,
|
||||
@产品名称 = @产品名称,
|
||||
@工序名称 = @工序名称,
|
||||
@要求完工日期1 = @要求完工日期1,
|
||||
@要求完工日期2 = @要求完工日期2,
|
||||
@计划开始 = @计划开始,
|
||||
@计划完成 = @计划完成,
|
||||
@排产状态 = @排产状态,
|
||||
@指派对象 = @指派对象,
|
||||
@辅助配件 = @辅助配件;
|
||||
END;
|
||||
GO
|
||||
|
||||
IF OBJECT_ID(N'dbo.计划排产_装配任务查询_核心', N'P') IS NULL
|
||||
THROW 51210, N'核心过程创建失败。', 1;
|
||||
IF OBJECT_ID(N'dbo.计划排产_系统类任务查询_优化前_20260725', N'P') IS NULL
|
||||
THROW 51211, N'系统类备份过程创建失败。', 1;
|
||||
IF OBJECT_ID(N'dbo.计划排产_阀类任务查询_优化前_20260725', N'P') IS NULL
|
||||
THROW 51212, N'阀类备份过程创建失败。', 1;
|
||||
|
||||
COMMIT TRANSACTION;
|
||||
GO
|
||||
|
||||
SELECT [name], [modify_date]
|
||||
FROM sys.procedures
|
||||
WHERE [name] IN
|
||||
(
|
||||
N'计划排产_装配任务查询_核心',
|
||||
N'计划排产_系统类任务查询',
|
||||
N'计划排产_阀类任务查询',
|
||||
N'计划排产_系统类任务查询_优化前_20260725',
|
||||
N'计划排产_阀类任务查询_优化前_20260725'
|
||||
)
|
||||
ORDER BY [name];
|
||||
GO
|
||||
79
db_backups/optimize_install_task_query_indexes_20260725.sql
Normal file
79
db_backups/optimize_install_task_query_indexes_20260725.sql
Normal file
@@ -0,0 +1,79 @@
|
||||
USE [YL_MESDB];
|
||||
GO
|
||||
|
||||
SET NOCOUNT ON;
|
||||
SET XACT_ABORT ON;
|
||||
|
||||
BEGIN TRY
|
||||
BEGIN TRANSACTION;
|
||||
|
||||
IF NOT EXISTS
|
||||
(
|
||||
SELECT 1 FROM sys.indexes
|
||||
WHERE object_id = OBJECT_ID(N'dbo.物料基础数据_零件图纸')
|
||||
AND name = N'IX_零件图纸_num'
|
||||
)
|
||||
CREATE NONCLUSTERED INDEX [IX_零件图纸_num]
|
||||
ON [dbo].[物料基础数据_零件图纸] ([num])
|
||||
INCLUDE ([worker]);
|
||||
|
||||
IF NOT EXISTS
|
||||
(
|
||||
SELECT 1 FROM sys.indexes
|
||||
WHERE object_id = OBJECT_ID(N'dbo.车间生产管理工艺_零件生产工艺_工艺库')
|
||||
AND name = N'IX_工艺库_订单_顺序'
|
||||
)
|
||||
CREATE NONCLUSTERED INDEX [IX_工艺库_订单_顺序]
|
||||
ON [dbo].[车间生产管理工艺_零件生产工艺_工艺库] ([订单编号], [工艺顺序])
|
||||
INCLUDE ([标准工时]);
|
||||
|
||||
IF NOT EXISTS
|
||||
(
|
||||
SELECT 1 FROM sys.indexes
|
||||
WHERE object_id = OBJECT_ID(N'dbo.YL_质量检验_质检记录')
|
||||
AND name = N'IX_质检记录_质检类型_计划号'
|
||||
)
|
||||
CREATE NONCLUSTERED INDEX [IX_质检记录_质检类型_计划号]
|
||||
ON [dbo].[YL_质量检验_质检记录] ([质检类型], [计划号]);
|
||||
|
||||
IF NOT EXISTS
|
||||
(
|
||||
SELECT 1 FROM sys.indexes
|
||||
WHERE object_id = OBJECT_ID(N'dbo.登录基础数据_人员信息')
|
||||
AND name = N'IX_人员信息_姓名_班组'
|
||||
)
|
||||
CREATE NONCLUSTERED INDEX [IX_人员信息_姓名_班组]
|
||||
ON [dbo].[登录基础数据_人员信息] ([Personnel_Name])
|
||||
INCLUDE ([班组]);
|
||||
|
||||
IF NOT EXISTS
|
||||
(
|
||||
SELECT 1 FROM sys.indexes
|
||||
WHERE object_id = OBJECT_ID(N'dbo.流程表')
|
||||
AND name = N'IX_流程表_关联计划_流程'
|
||||
)
|
||||
CREATE NONCLUSTERED INDEX [IX_流程表_关联计划_流程]
|
||||
ON [dbo].[流程表] ([已关联计划号], [流程ID])
|
||||
INCLUDE ([流程描述]);
|
||||
|
||||
COMMIT TRANSACTION;
|
||||
END TRY
|
||||
BEGIN CATCH
|
||||
IF XACT_STATE() <> 0
|
||||
ROLLBACK TRANSACTION;
|
||||
THROW;
|
||||
END CATCH;
|
||||
GO
|
||||
|
||||
SELECT OBJECT_NAME(i.object_id) AS [表名], i.name AS [索引名]
|
||||
FROM sys.indexes AS i
|
||||
WHERE i.name IN
|
||||
(
|
||||
N'IX_零件图纸_num',
|
||||
N'IX_工艺库_订单_顺序',
|
||||
N'IX_质检记录_质检类型_计划号',
|
||||
N'IX_人员信息_姓名_班组',
|
||||
N'IX_流程表_关联计划_流程'
|
||||
)
|
||||
ORDER BY [表名], [索引名];
|
||||
GO
|
||||
@@ -0,0 +1,45 @@
|
||||
USE [YL_MESDB];
|
||||
GO
|
||||
|
||||
SET NOCOUNT ON;
|
||||
SET XACT_ABORT ON;
|
||||
|
||||
BEGIN TRANSACTION;
|
||||
|
||||
DECLARE @Definition nvarchar(max) =
|
||||
OBJECT_DEFINITION(OBJECT_ID(N'dbo.计划排产_装配任务查询_核心_预算前_20260725'));
|
||||
DECLARE @ProcedurePosition int;
|
||||
|
||||
IF @Definition IS NULL
|
||||
THROW 51500, N'未找到预算功能部署前的核心查询备份过程。', 1;
|
||||
|
||||
SET @Definition = REPLACE(
|
||||
@Definition,
|
||||
N'[dbo].[计划排产_装配任务查询_核心_预算前_20260725]',
|
||||
N'[dbo].[计划排产_装配任务查询_核心]'
|
||||
);
|
||||
|
||||
SET @ProcedurePosition = CHARINDEX(N'PROCEDURE', @Definition);
|
||||
IF @ProcedurePosition = 0
|
||||
THROW 51501, N'未识别核心查询备份过程定义头。', 1;
|
||||
|
||||
SET @Definition = N'ALTER ' + SUBSTRING(@Definition, @ProcedurePosition, LEN(@Definition));
|
||||
EXEC sys.sp_executesql @Definition;
|
||||
|
||||
DROP PROCEDURE IF EXISTS dbo.[计划排产_装配任务预算_保存];
|
||||
|
||||
COMMIT TRANSACTION;
|
||||
GO
|
||||
|
||||
-- 两张预算表可能已包含人工录入数据,回滚时有意保留,避免数据丢失。
|
||||
SELECT [name], [type_desc], [modify_date]
|
||||
FROM sys.objects
|
||||
WHERE [name] IN
|
||||
(
|
||||
N'计划排产_装配任务预算',
|
||||
N'计划排产_装配合同预算',
|
||||
N'计划排产_装配任务查询_核心',
|
||||
N'计划排产_装配任务查询_核心_预算前_20260725'
|
||||
)
|
||||
ORDER BY [name];
|
||||
GO
|
||||
82
db_backups/rollback_install_task_contract_hours_20260725.sql
Normal file
82
db_backups/rollback_install_task_contract_hours_20260725.sql
Normal file
@@ -0,0 +1,82 @@
|
||||
USE [YL_MESDB];
|
||||
GO
|
||||
|
||||
SET NOCOUNT ON;
|
||||
SET XACT_ABORT ON;
|
||||
|
||||
BEGIN TRY
|
||||
BEGIN TRANSACTION;
|
||||
|
||||
DECLARE @ProcedureName sysname;
|
||||
DECLARE @Definition nvarchar(max);
|
||||
DECLARE @AlterPosition int;
|
||||
DECLARE @AssemblySelect nvarchar(250) = N'SELECT gs.订单合同号 AS 合同号, SUM(gs.总时长) as 合同装配工时';
|
||||
DECLARE @QualitySelect nvarchar(250) = N'SELECT gs.订单合同号 AS 合同号, SUM(gs.总时长) as 合同质检工时';
|
||||
DECLARE @GroupBy nvarchar(100) = N'GROUP BY gs.订单合同号';
|
||||
|
||||
DECLARE ProcedureCursor CURSOR LOCAL FAST_FORWARD FOR
|
||||
SELECT [name]
|
||||
FROM sys.procedures
|
||||
WHERE [name] IN (N'计划排产_系统类任务查询', N'计划排产_阀类任务查询')
|
||||
ORDER BY [name];
|
||||
|
||||
OPEN ProcedureCursor;
|
||||
FETCH NEXT FROM ProcedureCursor INTO @ProcedureName;
|
||||
|
||||
WHILE @@FETCH_STATUS = 0
|
||||
BEGIN
|
||||
SET @Definition = OBJECT_DEFINITION(OBJECT_ID(N'dbo.' + QUOTENAME(@ProcedureName)));
|
||||
|
||||
IF @Definition IS NULL
|
||||
THROW 51100, N'未找到待回滚的存储过程。', 1;
|
||||
|
||||
IF (LEN(@Definition) - LEN(REPLACE(@Definition, @AssemblySelect, N''))) / LEN(@AssemblySelect) <> 1
|
||||
THROW 51101, N'合同装配工时汇总代码与修复版本不一致,已停止回滚。', 1;
|
||||
|
||||
IF (LEN(@Definition) - LEN(REPLACE(@Definition, @QualitySelect, N''))) / LEN(@QualitySelect) <> 1
|
||||
THROW 51102, N'合同质检工时汇总代码与修复版本不一致,已停止回滚。', 1;
|
||||
|
||||
IF (LEN(@Definition) - LEN(REPLACE(@Definition, @GroupBy, N''))) / LEN(@GroupBy) <> 2
|
||||
THROW 51103, N'合同工时分组代码与修复版本不一致,已停止回滚。', 1;
|
||||
|
||||
SET @Definition = REPLACE(
|
||||
@Definition,
|
||||
@AssemblySelect,
|
||||
N'SELECT gs.合同号, SUM(gs.总时长) as 合同装配工时'
|
||||
);
|
||||
SET @Definition = REPLACE(
|
||||
@Definition,
|
||||
@QualitySelect,
|
||||
N'SELECT gs.合同号, SUM(gs.总时长) as 合同质检工时'
|
||||
);
|
||||
SET @Definition = REPLACE(@Definition, @GroupBy, N'GROUP BY gs.合同号');
|
||||
|
||||
SET @AlterPosition = CHARINDEX(N'ALTER PROCEDURE', @Definition);
|
||||
IF @AlterPosition = 0
|
||||
THROW 51104, N'存储过程定义中未找到 ALTER PROCEDURE。', 1;
|
||||
|
||||
EXEC sys.sp_executesql @Definition;
|
||||
|
||||
FETCH NEXT FROM ProcedureCursor INTO @ProcedureName;
|
||||
END;
|
||||
|
||||
CLOSE ProcedureCursor;
|
||||
DEALLOCATE ProcedureCursor;
|
||||
|
||||
COMMIT TRANSACTION;
|
||||
|
||||
SELECT [name], [modify_date]
|
||||
FROM sys.procedures
|
||||
WHERE [name] IN (N'计划排产_系统类任务查询', N'计划排产_阀类任务查询')
|
||||
ORDER BY [name];
|
||||
END TRY
|
||||
BEGIN CATCH
|
||||
IF CURSOR_STATUS('local', 'ProcedureCursor') >= 0
|
||||
CLOSE ProcedureCursor;
|
||||
IF CURSOR_STATUS('local', 'ProcedureCursor') > -3
|
||||
DEALLOCATE ProcedureCursor;
|
||||
IF XACT_STATE() <> 0
|
||||
ROLLBACK TRANSACTION;
|
||||
THROW;
|
||||
END CATCH;
|
||||
GO
|
||||
72
db_backups/rollback_install_task_queries_20260725.sql
Normal file
72
db_backups/rollback_install_task_queries_20260725.sql
Normal file
@@ -0,0 +1,72 @@
|
||||
USE [YL_MESDB];
|
||||
GO
|
||||
|
||||
SET NOCOUNT ON;
|
||||
SET XACT_ABORT ON;
|
||||
BEGIN TRANSACTION;
|
||||
GO
|
||||
|
||||
DECLARE @Name sysname;
|
||||
DECLARE @BackupName sysname;
|
||||
DECLARE @Definition nvarchar(max);
|
||||
DECLARE @HeaderPosition int;
|
||||
DECLARE @HeaderLength int;
|
||||
|
||||
DECLARE RestoreCursor CURSOR LOCAL FAST_FORWARD FOR
|
||||
SELECT v.[name], v.[backup_name]
|
||||
FROM
|
||||
(
|
||||
VALUES
|
||||
(N'计划排产_系统类任务查询', N'计划排产_系统类任务查询_优化前_20260725'),
|
||||
(N'计划排产_阀类任务查询', N'计划排产_阀类任务查询_优化前_20260725')
|
||||
) AS v([name], [backup_name]);
|
||||
|
||||
OPEN RestoreCursor;
|
||||
FETCH NEXT FROM RestoreCursor INTO @Name, @BackupName;
|
||||
|
||||
WHILE @@FETCH_STATUS = 0
|
||||
BEGIN
|
||||
SET @Definition = OBJECT_DEFINITION(OBJECT_ID(N'dbo.' + QUOTENAME(@BackupName)));
|
||||
IF @Definition IS NULL
|
||||
THROW 51300, N'未找到优化前备份过程,停止回滚。', 1;
|
||||
|
||||
SET @Definition = REPLACE(
|
||||
@Definition,
|
||||
N'[dbo].[' + @BackupName + N']',
|
||||
N'[dbo].[' + @Name + N']'
|
||||
);
|
||||
|
||||
SET @HeaderPosition = CHARINDEX(N'CREATE PROCEDURE', @Definition);
|
||||
SET @HeaderLength = LEN(N'CREATE PROCEDURE');
|
||||
IF @HeaderPosition = 0
|
||||
BEGIN
|
||||
SET @HeaderPosition = CHARINDEX(N'ALTER PROCEDURE', @Definition);
|
||||
SET @HeaderLength = LEN(N'ALTER PROCEDURE');
|
||||
END;
|
||||
IF @HeaderPosition = 0
|
||||
THROW 51301, N'未识别备份过程定义头。', 1;
|
||||
|
||||
SET @Definition = STUFF(
|
||||
@Definition,
|
||||
@HeaderPosition,
|
||||
@HeaderLength,
|
||||
N'ALTER PROCEDURE'
|
||||
);
|
||||
EXEC sys.sp_executesql @Definition;
|
||||
|
||||
FETCH NEXT FROM RestoreCursor INTO @Name, @BackupName;
|
||||
END;
|
||||
|
||||
CLOSE RestoreCursor;
|
||||
DEALLOCATE RestoreCursor;
|
||||
|
||||
DROP PROCEDURE IF EXISTS dbo.[计划排产_装配任务查询_核心];
|
||||
|
||||
COMMIT TRANSACTION;
|
||||
GO
|
||||
|
||||
SELECT [name], [modify_date]
|
||||
FROM sys.procedures
|
||||
WHERE [name] IN (N'计划排产_系统类任务查询', N'计划排产_阀类任务查询')
|
||||
ORDER BY [name];
|
||||
GO
|
||||
32
db_backups/rollback_install_task_query_indexes_20260725.sql
Normal file
32
db_backups/rollback_install_task_query_indexes_20260725.sql
Normal file
@@ -0,0 +1,32 @@
|
||||
USE [YL_MESDB];
|
||||
GO
|
||||
|
||||
SET NOCOUNT ON;
|
||||
SET XACT_ABORT ON;
|
||||
|
||||
BEGIN TRY
|
||||
BEGIN TRANSACTION;
|
||||
|
||||
IF EXISTS (SELECT 1 FROM sys.indexes WHERE object_id = OBJECT_ID(N'dbo.物料基础数据_零件图纸') AND name = N'IX_零件图纸_num')
|
||||
DROP INDEX [IX_零件图纸_num] ON [dbo].[物料基础数据_零件图纸];
|
||||
|
||||
IF EXISTS (SELECT 1 FROM sys.indexes WHERE object_id = OBJECT_ID(N'dbo.车间生产管理工艺_零件生产工艺_工艺库') AND name = N'IX_工艺库_订单_顺序')
|
||||
DROP INDEX [IX_工艺库_订单_顺序] ON [dbo].[车间生产管理工艺_零件生产工艺_工艺库];
|
||||
|
||||
IF EXISTS (SELECT 1 FROM sys.indexes WHERE object_id = OBJECT_ID(N'dbo.YL_质量检验_质检记录') AND name = N'IX_质检记录_质检类型_计划号')
|
||||
DROP INDEX [IX_质检记录_质检类型_计划号] ON [dbo].[YL_质量检验_质检记录];
|
||||
|
||||
IF EXISTS (SELECT 1 FROM sys.indexes WHERE object_id = OBJECT_ID(N'dbo.登录基础数据_人员信息') AND name = N'IX_人员信息_姓名_班组')
|
||||
DROP INDEX [IX_人员信息_姓名_班组] ON [dbo].[登录基础数据_人员信息];
|
||||
|
||||
IF EXISTS (SELECT 1 FROM sys.indexes WHERE object_id = OBJECT_ID(N'dbo.流程表') AND name = N'IX_流程表_关联计划_流程')
|
||||
DROP INDEX [IX_流程表_关联计划_流程] ON [dbo].[流程表];
|
||||
|
||||
COMMIT TRANSACTION;
|
||||
END TRY
|
||||
BEGIN CATCH
|
||||
IF XACT_STATE() <> 0
|
||||
ROLLBACK TRANSACTION;
|
||||
THROW;
|
||||
END CATCH;
|
||||
GO
|
||||
47
db_backups/rollback_secure_test_login_response_20260725.sql
Normal file
47
db_backups/rollback_secure_test_login_response_20260725.sql
Normal file
@@ -0,0 +1,47 @@
|
||||
USE [YL_MESDB];
|
||||
GO
|
||||
|
||||
SET NOCOUNT ON;
|
||||
SET XACT_ABORT ON;
|
||||
GO
|
||||
|
||||
BEGIN TRY
|
||||
BEGIN TRANSACTION;
|
||||
|
||||
IF OBJECT_ID(N'dbo.菜单模块系统_用户名密码_查询数据_安全修复前_20260725', N'P') IS NULL
|
||||
THROW 51610, N'未找到登录查询过程安全修复前备份。', 1;
|
||||
|
||||
DECLARE @definition nvarchar(max) = OBJECT_DEFINITION(
|
||||
OBJECT_ID(N'dbo.菜单模块系统_用户名密码_查询数据_安全修复前_20260725')
|
||||
);
|
||||
DECLARE @procedurePosition int;
|
||||
|
||||
SET @definition = REPLACE(
|
||||
@definition,
|
||||
N'dbo.菜单模块系统_用户名密码_查询数据_安全修复前_20260725',
|
||||
N'dbo.菜单模块系统_用户名密码_查询数据'
|
||||
);
|
||||
SET @definition = REPLACE(
|
||||
@definition,
|
||||
N'[dbo].[菜单模块系统_用户名密码_查询数据_安全修复前_20260725]',
|
||||
N'[dbo].[菜单模块系统_用户名密码_查询数据]'
|
||||
);
|
||||
SET @procedurePosition = CHARINDEX(N'PROCEDURE', @definition);
|
||||
|
||||
IF @procedurePosition = 0
|
||||
THROW 51611, N'登录查询过程备份结构异常,停止回滚。', 1;
|
||||
|
||||
SET @definition = N'ALTER ' + SUBSTRING(
|
||||
@definition,
|
||||
@procedurePosition,
|
||||
LEN(@definition)
|
||||
);
|
||||
EXEC sys.sp_executesql @definition;
|
||||
|
||||
COMMIT TRANSACTION;
|
||||
END TRY
|
||||
BEGIN CATCH
|
||||
IF XACT_STATE() <> 0 ROLLBACK TRANSACTION;
|
||||
THROW;
|
||||
END CATCH;
|
||||
GO
|
||||
@@ -0,0 +1,39 @@
|
||||
USE [YL_MESDB];
|
||||
GO
|
||||
|
||||
SET NOCOUNT ON;
|
||||
SET XACT_ABORT ON;
|
||||
GO
|
||||
|
||||
BEGIN TRY
|
||||
BEGIN TRANSACTION;
|
||||
|
||||
IF OBJECT_ID(N'dbo.计划排产_装配任务查询_核心_测试跳过SAP前_20260725', N'P') IS NULL
|
||||
THROW 51510, N'未找到测试环境 SAP 适配前备份过程。', 1;
|
||||
|
||||
DECLARE @sql nvarchar(max) = OBJECT_DEFINITION(
|
||||
OBJECT_ID(N'dbo.计划排产_装配任务查询_核心_测试跳过SAP前_20260725')
|
||||
);
|
||||
DECLARE @procedurePosition int;
|
||||
|
||||
SET @sql = REPLACE(
|
||||
@sql,
|
||||
N'[dbo].[计划排产_装配任务查询_核心_测试跳过SAP前_20260725]',
|
||||
N'[dbo].[计划排产_装配任务查询_核心]'
|
||||
);
|
||||
SET @procedurePosition = CHARINDEX(N'PROCEDURE', @sql);
|
||||
|
||||
IF @procedurePosition = 0
|
||||
OR CHARINDEX(N'[SAP].[SBO_YL].[dbo].[UBT_MES_ORDROPEN2]', @sql) = 0
|
||||
THROW 51511, N'测试环境 SAP 适配备份结构异常,停止回滚。', 1;
|
||||
|
||||
SET @sql = N'ALTER ' + SUBSTRING(@sql, @procedurePosition, LEN(@sql));
|
||||
EXEC sys.sp_executesql @sql;
|
||||
|
||||
COMMIT TRANSACTION;
|
||||
END TRY
|
||||
BEGIN CATCH
|
||||
IF XACT_STATE() <> 0 ROLLBACK TRANSACTION;
|
||||
THROW;
|
||||
END CATCH;
|
||||
GO
|
||||
76
db_backups/secure_test_login_response_20260725.sql
Normal file
76
db_backups/secure_test_login_response_20260725.sql
Normal file
@@ -0,0 +1,76 @@
|
||||
USE [YL_MESDB];
|
||||
GO
|
||||
|
||||
SET NOCOUNT ON;
|
||||
SET XACT_ABORT ON;
|
||||
GO
|
||||
|
||||
BEGIN TRY
|
||||
BEGIN TRANSACTION;
|
||||
|
||||
IF OBJECT_ID(N'dbo.菜单模块系统_用户名密码_查询数据', N'P') IS NULL
|
||||
THROW 51600, N'未找到登录查询过程。', 1;
|
||||
|
||||
IF OBJECT_ID(N'dbo.菜单模块系统_用户名密码_查询数据_安全修复前_20260725', N'P') IS NOT NULL
|
||||
THROW 51601, N'登录查询过程安全修复前备份已存在,停止重复部署。', 1;
|
||||
|
||||
DECLARE @definition nvarchar(max) = OBJECT_DEFINITION(
|
||||
OBJECT_ID(N'dbo.菜单模块系统_用户名密码_查询数据')
|
||||
);
|
||||
DECLARE @procedurePosition int = CHARINDEX(N'PROCEDURE', @definition);
|
||||
|
||||
IF @procedurePosition = 0
|
||||
THROW 51602, N'无法识别登录查询过程定义。', 1;
|
||||
|
||||
SET @definition = REPLACE(
|
||||
@definition,
|
||||
N'dbo.菜单模块系统_用户名密码_查询数据',
|
||||
N'dbo.菜单模块系统_用户名密码_查询数据_安全修复前_20260725'
|
||||
);
|
||||
SET @definition = REPLACE(
|
||||
@definition,
|
||||
N'[dbo].[菜单模块系统_用户名密码_查询数据]',
|
||||
N'[dbo].[菜单模块系统_用户名密码_查询数据_安全修复前_20260725]'
|
||||
);
|
||||
SET @definition = N'CREATE ' + SUBSTRING(
|
||||
@definition,
|
||||
@procedurePosition,
|
||||
LEN(@definition)
|
||||
);
|
||||
EXEC sys.sp_executesql @definition;
|
||||
|
||||
EXEC sys.sp_executesql N'
|
||||
ALTER PROCEDURE [dbo].[菜单模块系统_用户名密码_查询数据]
|
||||
@用户名 nvarchar(50) = NULL,
|
||||
@密码 nvarchar(50) = NULL
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON;
|
||||
|
||||
SELECT
|
||||
[Roles_number],
|
||||
[Roles_Function],
|
||||
[Personnel_Number],
|
||||
[account],
|
||||
[Personnel_Name],
|
||||
[Departments_ID],
|
||||
[Quit],
|
||||
[部门名称],
|
||||
[OrgUnit],
|
||||
[班组]
|
||||
FROM [dbo].[登录基础数据_管理人员权限视图]
|
||||
WHERE [account] = @用户名
|
||||
AND [password] = @密码
|
||||
AND [Quit] = 0;
|
||||
END;';
|
||||
|
||||
IF OBJECT_DEFINITION(OBJECT_ID(N'dbo.菜单模块系统_用户名密码_查询数据')) LIKE N'%SELECT *%'
|
||||
THROW 51603, N'登录查询过程仍包含 SELECT *,停止部署。', 1;
|
||||
|
||||
COMMIT TRANSACTION;
|
||||
END TRY
|
||||
BEGIN CATCH
|
||||
IF XACT_STATE() <> 0 ROLLBACK TRANSACTION;
|
||||
THROW;
|
||||
END CATCH;
|
||||
GO
|
||||
@@ -0,0 +1,85 @@
|
||||
USE [YL_MESDB];
|
||||
GO
|
||||
|
||||
SET NOCOUNT ON;
|
||||
SET XACT_ABORT ON;
|
||||
GO
|
||||
|
||||
BEGIN TRY
|
||||
BEGIN TRANSACTION;
|
||||
|
||||
IF OBJECT_ID(N'dbo.计划排产_装配任务查询_核心', N'P') IS NULL
|
||||
THROW 51500, N'未找到装配任务核心查询过程。', 1;
|
||||
|
||||
IF OBJECT_ID(N'dbo.计划排产_装配任务查询_核心_测试跳过SAP前_20260725', N'P') IS NOT NULL
|
||||
THROW 51501, N'测试环境 SAP 适配前备份过程已存在,停止重复部署。', 1;
|
||||
|
||||
DECLARE @sql nvarchar(max) = OBJECT_DEFINITION(
|
||||
OBJECT_ID(N'dbo.计划排产_装配任务查询_核心')
|
||||
);
|
||||
DECLARE @backupSql nvarchar(max) = REPLACE(
|
||||
@sql,
|
||||
N'[dbo].[计划排产_装配任务查询_核心]',
|
||||
N'[dbo].[计划排产_装配任务查询_核心_测试跳过SAP前_20260725]'
|
||||
);
|
||||
DECLARE @procedurePosition int = CHARINDEX(N'PROCEDURE', @backupSql);
|
||||
|
||||
IF @procedurePosition = 0
|
||||
THROW 51502, N'未识别核心查询过程定义头。', 1;
|
||||
|
||||
SET @backupSql = N'CREATE ' + SUBSTRING(
|
||||
@backupSql,
|
||||
@procedurePosition,
|
||||
LEN(@backupSql)
|
||||
);
|
||||
EXEC sys.sp_executesql @backupSql;
|
||||
|
||||
DECLARE @keysPosition int = CHARINDEX(N'INTO #交货键', @sql);
|
||||
DECLARE @blockStart int = CHARINDEX(N' SELECT', @sql, @keysPosition + 1);
|
||||
DECLARE @blockEnd int = CHARINDEX(
|
||||
N' CREATE UNIQUE CLUSTERED INDEX [CX_交货]',
|
||||
@sql,
|
||||
@blockStart
|
||||
);
|
||||
DECLARE @oldBlock nvarchar(max);
|
||||
|
||||
IF @keysPosition = 0 OR @blockStart = 0 OR @blockEnd = 0
|
||||
THROW 51503, N'未找到核心查询的 SAP 交货日期代码块。', 1;
|
||||
|
||||
SET @oldBlock = SUBSTRING(@sql, @blockStart, @blockEnd - @blockStart);
|
||||
IF CHARINDEX(N'[SAP].[SBO_YL].[dbo].[UBT_MES_ORDROPEN2]', @oldBlock) = 0
|
||||
THROW 51504, N'交货日期代码块不是预期的 SAP 链接查询。', 1;
|
||||
|
||||
DECLARE @newBlock nvarchar(max) = N' -- 测试环境无法连接现场 SAP,保留返回结构但不等待远程交货日期。
|
||||
SELECT
|
||||
k.[合同号],
|
||||
k.[物料编号],
|
||||
CAST(NULL AS datetime) AS [交货日期理论齐套日期]
|
||||
INTO #交货
|
||||
FROM #交货键 AS k;
|
||||
|
||||
';
|
||||
|
||||
SET @sql = STUFF(
|
||||
@sql,
|
||||
@blockStart,
|
||||
@blockEnd - @blockStart,
|
||||
@newBlock
|
||||
);
|
||||
|
||||
IF CHARINDEX(N'[SAP].[SBO_YL].[dbo].[UBT_MES_ORDROPEN2]', @sql) > 0
|
||||
OR CHARINDEX(N'测试环境无法连接现场 SAP', @sql) = 0
|
||||
THROW 51505, N'测试环境 SAP 适配替换失败。', 1;
|
||||
|
||||
SET @procedurePosition = CHARINDEX(N'PROCEDURE', @sql);
|
||||
SET @sql = N'ALTER ' + SUBSTRING(@sql, @procedurePosition, LEN(@sql));
|
||||
EXEC sys.sp_executesql @sql;
|
||||
|
||||
COMMIT TRANSACTION;
|
||||
END TRY
|
||||
BEGIN CATCH
|
||||
IF XACT_STATE() <> 0 ROLLBACK TRANSACTION;
|
||||
THROW;
|
||||
END CATCH;
|
||||
GO
|
||||
|
||||
119
db_backups/update_design_report_hours_report_fields_20260727.sql
Normal file
119
db_backups/update_design_report_hours_report_fields_20260727.sql
Normal file
@@ -0,0 +1,119 @@
|
||||
USE [YL_MESDB];
|
||||
GO
|
||||
|
||||
SET ANSI_NULLS ON;
|
||||
GO
|
||||
SET QUOTED_IDENTIFIER ON;
|
||||
GO
|
||||
|
||||
CREATE OR ALTER PROCEDURE [dbo].[设计报工_工时报表_任务工时_查询]
|
||||
@开始日期 nvarchar(30) = N'',
|
||||
@结束日期 nvarchar(30) = N'',
|
||||
@操作人 nvarchar(100) = N'',
|
||||
@项目号 nvarchar(100) = N'',
|
||||
@物料编码 nvarchar(100) = N'',
|
||||
@类别 nvarchar(100) = N'',
|
||||
@任务描述 nvarchar(500) = N'',
|
||||
@DID int = NULL,
|
||||
@当前操作人 nvarchar(100) = N'',
|
||||
@角色编号 nvarchar(100) = N''
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON;
|
||||
|
||||
DECLARE @开始 datetime = TRY_CONVERT(datetime, NULLIF(@开始日期, N''));
|
||||
DECLARE @结束 datetime = TRY_CONVERT(datetime, NULLIF(@结束日期, N''));
|
||||
DECLARE @可查看全部 bit = CASE WHEN EXISTS
|
||||
(
|
||||
SELECT 1
|
||||
FROM [dbo].[登录基础数据_角色信息]
|
||||
WHERE CONVERT(nvarchar(100), [Roles_number]) = @角色编号
|
||||
AND ([Roles_Function] LIKE N'%领导%' OR [Roles_Function] LIKE N'%管理员%')
|
||||
) THEN 1 ELSE 0 END;
|
||||
|
||||
;WITH base AS
|
||||
(
|
||||
SELECT
|
||||
r.[RID], r.[DID], ISNULL(r.[操作人], N'') AS [操作人],
|
||||
t.[项目号], t.[物料编码], t.[物料名称], t.[图号], t.[类别],
|
||||
t.[任务描述], ISNULL(t.[设计要求], N'') AS [设计要求],
|
||||
r.[开始时间], r.[结束时间], ISNULL(r.[工时秒数], 0) AS [工时秒数],
|
||||
r.[已校验], r.[进度说明],
|
||||
ISNULL(notes.[异常说明], N'') AS [异常说明],
|
||||
ISNULL(notes.[奇思妙想], N'') AS [奇思妙想],
|
||||
r.[备注]
|
||||
FROM [dbo].[MES_设计报工_记录] AS r
|
||||
INNER JOIN [dbo].[MES_设计报工_任务] AS t ON r.[DID] = t.[DID]
|
||||
OUTER APPLY
|
||||
(
|
||||
SELECT
|
||||
STRING_AGG(CASE WHEN n.[说明类型] = N'异常说明' THEN CONVERT(nvarchar(max), CONVERT(nvarchar(19), n.[录入时间], 120) + N' ' + COALESCE(NULLIF(LTRIM(RTRIM(n.[操作人])), N''), NULLIF(LTRIM(RTRIM(n.[操作人ID])), N''), N'未填写编辑人') + NCHAR(13) + NCHAR(10) + n.[说明内容]) END, NCHAR(13) + NCHAR(10) + NCHAR(13) + NCHAR(10)) WITHIN GROUP (ORDER BY n.[录入时间] DESC, n.[SID] DESC) AS [异常说明],
|
||||
STRING_AGG(CASE WHEN n.[说明类型] = N'奇思妙想' THEN CONVERT(nvarchar(max), CONVERT(nvarchar(19), n.[录入时间], 120) + N' ' + COALESCE(NULLIF(LTRIM(RTRIM(n.[操作人])), N''), NULLIF(LTRIM(RTRIM(n.[操作人ID])), N''), N'未填写编辑人') + NCHAR(13) + NCHAR(10) + n.[说明内容]) END, NCHAR(13) + NCHAR(10) + NCHAR(13) + NCHAR(10)) WITHIN GROUP (ORDER BY n.[录入时间] DESC, n.[SID] DESC) AS [奇思妙想]
|
||||
FROM [dbo].[MES_设计报工_任务说明] AS n
|
||||
WHERE n.[DID] = t.[DID]
|
||||
) AS notes
|
||||
WHERE r.[开始时间] IS NOT NULL
|
||||
AND r.[结束时间] IS NOT NULL
|
||||
AND (@开始 IS NULL OR r.[开始时间] >= @开始)
|
||||
AND (@结束 IS NULL OR r.[开始时间] < DATEADD(day, 1, @结束))
|
||||
AND (ISNULL(@操作人, N'') = N'' OR r.[操作人] LIKE N'%' + @操作人 + N'%')
|
||||
AND (ISNULL(@项目号, N'') = N'' OR t.[项目号] LIKE N'%' + @项目号 + N'%')
|
||||
AND (ISNULL(@物料编码, N'') = N'' OR t.[物料编码] LIKE N'%' + @物料编码 + N'%')
|
||||
AND (ISNULL(@类别, N'') = N'' OR t.[类别] LIKE N'%' + @类别 + N'%')
|
||||
AND (ISNULL(@任务描述, N'') = N'' OR t.[任务描述] LIKE N'%' + @任务描述 + N'%')
|
||||
AND (@DID IS NULL OR @DID = 0 OR r.[DID] = @DID)
|
||||
AND (@可查看全部 = 1 OR (NULLIF(LTRIM(RTRIM(@当前操作人)), N'') IS NOT NULL AND (ISNULL(t.[创建人], N'') = LTRIM(RTRIM(@当前操作人)) OR ISNULL(r.[操作人], N'') = LTRIM(RTRIM(@当前操作人)))))
|
||||
), result AS
|
||||
(
|
||||
SELECT 1 AS [Level], N't-' + CAST([DID] AS nvarchar(20)) AS [id], CAST(N'' AS nvarchar(120)) AS [parentId], CAST(N'' AS nvarchar(100)) AS [操作人], CAST(N'' AS nvarchar(20)) AS [工作日期], CAST(NULL AS int) AS [RID], [DID], ISNULL(MAX([项目号]), N'') AS [项目号], ISNULL(MAX([物料编码]), N'') AS [物料编码], ISNULL(MAX([物料名称]), N'') AS [物料名称], ISNULL(MAX([图号]), N'') AS [图号], ISNULL(MAX([类别]), N'') AS [类别], ISNULL(MAX([任务描述]), N'') AS [任务描述], ISNULL(MAX([设计要求]), N'') AS [设计要求], CONVERT(varchar(19), MIN([开始时间]), 120) AS [开始时间], CONVERT(varchar(19), MAX([结束时间]), 120) AS [结束时间], COUNT(1) AS [报工次数], CAST(SUM([工时秒数]) / 3600.0 AS decimal(18, 2)) AS [工时小时], CASE WHEN SUM(CONVERT(int, [已校验])) = COUNT(1) THEN N'已校验' WHEN SUM(CONVERT(int, [已校验])) = 0 THEN N'未校验' ELSE N'部分校验' END AS [校验状态], ISNULL(STRING_AGG(CASE WHEN NULLIF(LTRIM(RTRIM([进度说明])), N'') IS NOT NULL THEN CONVERT(nvarchar(max), CONVERT(nvarchar(19), [结束时间], 120) + NCHAR(13) + NCHAR(10) + [进度说明]) END, NCHAR(13) + NCHAR(10) + NCHAR(13) + NCHAR(10)) WITHIN GROUP (ORDER BY [开始时间], [RID]), N'') AS [进度说明], ISNULL(MAX([异常说明]), N'') AS [异常说明], ISNULL(MAX([奇思妙想]), N'') AS [奇思妙想], ISNULL(STRING_AGG(CASE WHEN NULLIF(LTRIM(RTRIM([备注])), N'') IS NOT NULL THEN CONVERT(nvarchar(max), [备注]) END, NCHAR(13) + NCHAR(10)) WITHIN GROUP (ORDER BY [开始时间], [RID]), N'') AS [备注]
|
||||
FROM base GROUP BY [DID]
|
||||
UNION ALL
|
||||
SELECT 2 AS [Level], N't-' + CAST([DID] AS nvarchar(20)) + N'-o-' + [操作人], N't-' + CAST([DID] AS nvarchar(20)), [操作人], CAST(N'' AS nvarchar(20)), CAST(NULL AS int), [DID], CAST(N'' AS nvarchar(100)), CAST(N'' AS nvarchar(100)), CAST(N'' AS nvarchar(200)), CAST(N'' AS nvarchar(100)), CAST(N'' AS nvarchar(100)), CAST(N'' AS nvarchar(500)), CAST(N'' AS nvarchar(max)), CONVERT(varchar(19), MIN([开始时间]), 120), CONVERT(varchar(19), MAX([结束时间]), 120), COUNT(1), CAST(SUM([工时秒数]) / 3600.0 AS decimal(18, 2)), CASE WHEN SUM(CONVERT(int, [已校验])) = COUNT(1) THEN N'已校验' WHEN SUM(CONVERT(int, [已校验])) = 0 THEN N'未校验' ELSE N'部分校验' END, ISNULL(STRING_AGG(CASE WHEN NULLIF(LTRIM(RTRIM([进度说明])), N'') IS NOT NULL THEN CONVERT(nvarchar(max), CONVERT(nvarchar(19), [结束时间], 120) + NCHAR(13) + NCHAR(10) + [进度说明]) END, NCHAR(13) + NCHAR(10) + NCHAR(13) + NCHAR(10)) WITHIN GROUP (ORDER BY [开始时间], [RID]), N''), CAST(N'' AS nvarchar(max)), CAST(N'' AS nvarchar(max)), ISNULL(STRING_AGG(CASE WHEN NULLIF(LTRIM(RTRIM([备注])), N'') IS NOT NULL THEN CONVERT(nvarchar(max), [备注]) END, NCHAR(13) + NCHAR(10)) WITHIN GROUP (ORDER BY [开始时间], [RID]), N'')
|
||||
FROM base GROUP BY [DID], [操作人]
|
||||
)
|
||||
SELECT * FROM result ORDER BY [DID] DESC, [Level], [操作人];
|
||||
END
|
||||
GO
|
||||
|
||||
CREATE OR ALTER PROCEDURE [dbo].[设计报工_工时报表_作业者工时_查询]
|
||||
@开始日期 nvarchar(30) = N'',
|
||||
@结束日期 nvarchar(30) = N'',
|
||||
@操作人 nvarchar(100) = N'',
|
||||
@项目号 nvarchar(100) = N'',
|
||||
@物料编码 nvarchar(100) = N'',
|
||||
@类别 nvarchar(100) = N'',
|
||||
@任务描述 nvarchar(500) = N'',
|
||||
@DID int = NULL,
|
||||
@当前操作人 nvarchar(100) = N'',
|
||||
@角色编号 nvarchar(100) = N''
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON;
|
||||
DECLARE @开始 datetime = TRY_CONVERT(datetime, NULLIF(@开始日期, N''));
|
||||
DECLARE @结束 datetime = TRY_CONVERT(datetime, NULLIF(@结束日期, N''));
|
||||
DECLARE @可查看全部 bit = CASE WHEN EXISTS (SELECT 1 FROM [dbo].[登录基础数据_角色信息] WHERE CONVERT(nvarchar(100), [Roles_number]) = @角色编号 AND ([Roles_Function] LIKE N'%领导%' OR [Roles_Function] LIKE N'%管理员%')) THEN 1 ELSE 0 END;
|
||||
;WITH base AS
|
||||
(
|
||||
SELECT r.[RID], r.[DID], ISNULL(r.[操作人], N'') AS [操作人], CONVERT(varchar(10), r.[开始时间], 120) AS [工作日期], t.[项目号], t.[物料编码], t.[物料名称], t.[图号], t.[类别], t.[任务描述], ISNULL(t.[设计要求], N'') AS [设计要求], r.[开始时间], r.[结束时间], ISNULL(r.[工时秒数], 0) AS [工时秒数], r.[已校验], r.[进度说明], ISNULL(notes.[异常说明], N'') AS [异常说明], ISNULL(notes.[奇思妙想], N'') AS [奇思妙想], r.[备注]
|
||||
FROM [dbo].[MES_设计报工_记录] AS r
|
||||
INNER JOIN [dbo].[MES_设计报工_任务] AS t ON r.[DID] = t.[DID]
|
||||
OUTER APPLY
|
||||
(
|
||||
SELECT STRING_AGG(CASE WHEN n.[说明类型] = N'异常说明' THEN CONVERT(nvarchar(max), CONVERT(nvarchar(19), n.[录入时间], 120) + N' ' + COALESCE(NULLIF(LTRIM(RTRIM(n.[操作人])), N''), NULLIF(LTRIM(RTRIM(n.[操作人ID])), N''), N'未填写编辑人') + NCHAR(13) + NCHAR(10) + n.[说明内容]) END, NCHAR(13) + NCHAR(10) + NCHAR(13) + NCHAR(10)) WITHIN GROUP (ORDER BY n.[录入时间] DESC, n.[SID] DESC) AS [异常说明], STRING_AGG(CASE WHEN n.[说明类型] = N'奇思妙想' THEN CONVERT(nvarchar(max), CONVERT(nvarchar(19), n.[录入时间], 120) + N' ' + COALESCE(NULLIF(LTRIM(RTRIM(n.[操作人])), N''), NULLIF(LTRIM(RTRIM(n.[操作人ID])), N''), N'未填写编辑人') + NCHAR(13) + NCHAR(10) + n.[说明内容]) END, NCHAR(13) + NCHAR(10) + NCHAR(13) + NCHAR(10)) WITHIN GROUP (ORDER BY n.[录入时间] DESC, n.[SID] DESC) AS [奇思妙想]
|
||||
FROM [dbo].[MES_设计报工_任务说明] AS n WHERE n.[DID] = t.[DID]
|
||||
) AS notes
|
||||
WHERE r.[开始时间] IS NOT NULL AND r.[结束时间] IS NOT NULL AND (@开始 IS NULL OR r.[开始时间] >= @开始) AND (@结束 IS NULL OR r.[开始时间] < DATEADD(day, 1, @结束)) AND (ISNULL(@操作人, N'') = N'' OR r.[操作人] LIKE N'%' + @操作人 + N'%') AND (ISNULL(@项目号, N'') = N'' OR t.[项目号] LIKE N'%' + @项目号 + N'%') AND (ISNULL(@物料编码, N'') = N'' OR t.[物料编码] LIKE N'%' + @物料编码 + N'%') AND (ISNULL(@类别, N'') = N'' OR t.[类别] LIKE N'%' + @类别 + N'%') AND (ISNULL(@任务描述, N'') = N'' OR t.[任务描述] LIKE N'%' + @任务描述 + N'%') AND (@DID IS NULL OR @DID = 0 OR r.[DID] = @DID) AND (@可查看全部 = 1 OR (NULLIF(LTRIM(RTRIM(@当前操作人)), N'') IS NOT NULL AND (ISNULL(t.[创建人], N'') = LTRIM(RTRIM(@当前操作人)) OR ISNULL(r.[操作人], N'') = LTRIM(RTRIM(@当前操作人)))))
|
||||
), result AS
|
||||
(
|
||||
SELECT 1 AS [Level], N'p-' + [操作人] AS [id], CAST(N'' AS nvarchar(100)) AS [parentId], [操作人], CAST(N'' AS nvarchar(20)) AS [工作日期], CAST(NULL AS int) AS [RID], CAST(NULL AS int) AS [DID], CAST(N'' AS nvarchar(100)) AS [项目号], CAST(N'' AS nvarchar(100)) AS [物料编码], CAST(N'' AS nvarchar(200)) AS [物料名称], CAST(N'' AS nvarchar(100)) AS [图号], CAST(N'' AS nvarchar(100)) AS [类别], CAST(N'' AS nvarchar(500)) AS [任务描述], CAST(N'' AS nvarchar(max)) AS [设计要求], CAST(N'' AS varchar(19)) AS [开始时间], CAST(N'' AS varchar(19)) AS [结束时间], COUNT(1) AS [报工次数], CAST(SUM([工时秒数]) / 3600.0 AS decimal(18, 2)) AS [工时小时], CAST(N'' AS nvarchar(20)) AS [校验状态], CAST(N'' AS nvarchar(max)) AS [进度说明], CAST(N'' AS nvarchar(max)) AS [异常说明], CAST(N'' AS nvarchar(max)) AS [奇思妙想], CAST(N'' AS nvarchar(max)) AS [备注]
|
||||
FROM base GROUP BY [操作人]
|
||||
UNION ALL
|
||||
SELECT 2 AS [Level], N'd-' + [操作人] + N'-' + [工作日期], N'p-' + [操作人], [操作人], [工作日期], CAST(NULL AS int), CAST(NULL AS int), CAST(N'' AS nvarchar(100)), CAST(N'' AS nvarchar(100)), CAST(N'' AS nvarchar(200)), CAST(N'' AS nvarchar(100)), CAST(N'' AS nvarchar(100)), CAST(N'' AS nvarchar(500)), CAST(N'' AS nvarchar(max)), CAST(N'' AS varchar(19)), CAST(N'' AS varchar(19)), COUNT(1), CAST(SUM([工时秒数]) / 3600.0 AS decimal(18, 2)), CAST(N'' AS nvarchar(20)), CAST(N'' AS nvarchar(max)), CAST(N'' AS nvarchar(max)), CAST(N'' AS nvarchar(max)), CAST(N'' AS nvarchar(max))
|
||||
FROM base GROUP BY [操作人], [工作日期]
|
||||
UNION ALL
|
||||
SELECT 3 AS [Level], N'r-' + CAST([RID] AS nvarchar(20)), N'd-' + [操作人] + N'-' + [工作日期], [操作人], [工作日期], [RID], [DID], ISNULL([项目号], N''), ISNULL([物料编码], N''), ISNULL([物料名称], N''), ISNULL([图号], N''), ISNULL([类别], N''), ISNULL([任务描述], N''), ISNULL([设计要求], N''), CONVERT(varchar(19), [开始时间], 120), CONVERT(varchar(19), [结束时间], 120), 1, CAST([工时秒数] / 3600.0 AS decimal(18, 2)), CASE WHEN [已校验] = 1 THEN N'已校验' ELSE N'未校验' END, ISNULL([进度说明], N''), ISNULL([异常说明], N''), ISNULL([奇思妙想], N''), ISNULL([备注], N'')
|
||||
FROM base
|
||||
)
|
||||
SELECT * FROM result ORDER BY [操作人], [工作日期], [Level], [RID];
|
||||
END
|
||||
GO
|
||||
Reference in New Issue
Block a user