feat: 增加设计任务工时报表
This commit is contained in:
135
db_backups/add_design_report_task_hours_report_20260715.sql
Normal file
135
db_backups/add_design_report_task_hours_report_20260715.sql
Normal file
@@ -0,0 +1,135 @@
|
||||
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'',
|
||||
@DID int = NULL
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON;
|
||||
|
||||
DECLARE @开始 datetime = TRY_CONVERT(datetime, NULLIF(@开始日期, N''));
|
||||
DECLARE @结束 datetime = TRY_CONVERT(datetime, NULLIF(@结束日期, N''));
|
||||
|
||||
;WITH base AS
|
||||
(
|
||||
SELECT
|
||||
r.[RID],
|
||||
r.[DID],
|
||||
ISNULL(r.[操作人], N'') AS [操作人],
|
||||
t.[项目号],
|
||||
t.[物料编码],
|
||||
t.[物料名称],
|
||||
t.[图号],
|
||||
t.[类别],
|
||||
t.[任务描述],
|
||||
r.[开始时间],
|
||||
r.[结束时间],
|
||||
ISNULL(r.[工时秒数], 0) AS [工时秒数],
|
||||
r.[已校验],
|
||||
r.[进度说明],
|
||||
r.[备注]
|
||||
FROM [dbo].[MES_设计报工_记录] AS r
|
||||
INNER JOIN [dbo].[MES_设计报工_任务] AS t ON r.[DID] = t.[DID]
|
||||
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 (@DID IS NULL OR @DID = 0 OR r.[DID] = @DID)
|
||||
),
|
||||
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 [任务描述],
|
||||
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(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-' + [操作人] AS [id],
|
||||
N't-' + CAST([DID] AS nvarchar(20)) AS [parentId],
|
||||
[操作人],
|
||||
CAST(N'' AS nvarchar(20)) AS [工作日期],
|
||||
CAST(NULL AS int) AS [RID],
|
||||
[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 [任务描述],
|
||||
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(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], [操作人]
|
||||
)
|
||||
SELECT *
|
||||
FROM result
|
||||
ORDER BY [DID] DESC, [Level], [操作人];
|
||||
END
|
||||
GO
|
||||
Reference in New Issue
Block a user