feat: 增加设计任务工时报表

This commit is contained in:
2026-07-15 18:19:25 +08:00
parent 4f42c3a030
commit 9d08fb1d1a
3 changed files with 334 additions and 50 deletions

View 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