feat: 完善设计报工与研发工时功能

This commit is contained in:
2026-07-24 14:59:37 +08:00
parent e7554da9c7
commit 62f7632fc6
9 changed files with 1338 additions and 86 deletions

View File

@@ -0,0 +1,122 @@
USE [YL_MESDB]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE OR ALTER PROCEDURE [dbo].[_工时校验_查询]
@DID int = NULL,
@ nvarchar(100) = N'',
@ nvarchar(100) = N'',
@ nvarchar(100) = N'',
@ nvarchar(100) = N'',
@ nvarchar(30) = N'',
@ nvarchar(30) = N'',
@ nvarchar(50) = N'未校验',
@ nvarchar(100) = N'',
@ nvarchar(100) = N'',
@PageCurrent int = 1,
@PageSize int = 20,
@PageCount int = NULL OUTPUT,
@ItemCount int = NULL OUTPUT
AS
BEGIN
SET NOCOUNT ON;
SET @PageCurrent = CASE WHEN ISNULL(@PageCurrent, 0) < 1 THEN 1 ELSE @PageCurrent END;
SET @PageSize = CASE
WHEN ISNULL(@PageSize, 0) < 1 THEN 20
WHEN @PageSize > 100 THEN 100
ELSE @PageSize
END;
DECLARE @ datetime = TRY_CONVERT(datetime, NULLIF(@, N''));
DECLARE @ datetime = TRY_CONVERT(datetime, NULLIF(@, N''));
DECLARE @ nvarchar(100) = LTRIM(RTRIM(ISNULL(@, 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;
CREATE TABLE #FilteredRecords
(
[RID] int NOT NULL PRIMARY KEY
);
INSERT INTO #FilteredRecords ([RID])
SELECT r.[RID]
FROM [dbo].[MES_设计报工_记录] AS r
INNER JOIN [dbo].[MES_设计报工_任务] AS t ON r.[DID] = t.[DID]
WHERE
(@DID IS NULL OR @DID = 0 OR r.[DID] = @DID)
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 r.[] LIKE N'%' + @ + N'%')
AND (@ IS NULL OR r.[] >= @)
AND (@ IS NULL OR r.[] < DATEADD(day, 1, @))
AND
(
ISNULL(@, N'') = N''
OR @ = N'全部'
OR (@ = N'已校验' AND r.[] = 1)
OR (@ = N'未校验' AND r.[] = 0)
)
AND
(
@ = 1
OR
(
NULLIF(@, N'') IS NOT NULL
AND
(
LTRIM(RTRIM(ISNULL(t.[], N''))) = @
OR LTRIM(RTRIM(ISNULL(r.[], N''))) = @
)
)
);
SELECT @ItemCount = COUNT(1) FROM #FilteredRecords;
SET @PageCount = CASE
WHEN @ItemCount = 0 THEN 0
ELSE CEILING(CONVERT(decimal(18, 2), @ItemCount) / @PageSize)
END;
SELECT
r.[RID],
r.[DID],
t.[],
t.[],
t.[],
t.[],
t.[],
t.[],
t.[],
r.[ID],
r.[],
CONVERT(varchar(19), r.[], 120) AS [],
CONVERT(varchar(19), r.[], 120) AS [],
r.[],
CAST(CAST(ISNULL(r.[], 0) / 3600.0 AS decimal(18, 2)) AS varchar(30)) AS [],
r.[],
r.[],
CASE WHEN r.[] = 1 THEN N'已校验' ELSE N'未校验' END AS [],
r.[],
CONVERT(varchar(19), r.[], 120) AS [],
r.[],
r.[],
t.[]
FROM #FilteredRecords AS f
INNER JOIN [dbo].[MES_设计报工_记录] AS r ON f.[RID] = r.[RID]
INNER JOIN [dbo].[MES_设计报工_任务] AS t ON r.[DID] = t.[DID]
ORDER BY r.[RID] DESC
OFFSET (@PageCurrent - 1) * @PageSize ROWS
FETCH NEXT @PageSize ROWS ONLY;
END
GO

View File

@@ -0,0 +1,204 @@
USE [YL_MESDB];
GO
SET ANSI_NULLS ON;
GO
SET QUOTED_IDENTIFIER ON;
GO
CREATE OR ALTER PROCEDURE [dbo].[_任务_查询]
@DID int = NULL,
@ nvarchar(100) = N'',
@ nvarchar(100) = N'',
@ nvarchar(100) = N'',
@ nvarchar(100) = N'',
@ nvarchar(200) = N'',
@ nvarchar(100) = N'',
@_Start nvarchar(30) = N'',
@_End nvarchar(30) = N'',
@_Start nvarchar(30) = N'',
@_End nvarchar(30) = N'',
@ nvarchar(50) = N'',
@ID nvarchar(100) = N'',
@ nvarchar(100) = N'',
@ nvarchar(100) = N''
AS
BEGIN
SET NOCOUNT ON;
DECLARE @1 datetime = TRY_CONVERT(datetime, NULLIF(@_Start, N''));
DECLARE @2 datetime = TRY_CONVERT(datetime, NULLIF(@_End, N''));
DECLARE @1 datetime = TRY_CONVERT(datetime, NULLIF(@_Start, N''));
DECLARE @2 datetime = TRY_CONVERT(datetime, NULLIF(@_End, 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;
SELECT TOP 1000
ISNULL(task_notes.[], N'') AS [],
t.[DID],
t.[],
t.[],
t.[],
t.[],
t.[],
t.[],
t.[],
t.[],
t.[],
t.[],
t.[],
t.[],
t.[ID],
t.[],
t.[ID],
t.[],
CONVERT(varchar(19), t.[], 120) AS [],
CONVERT(varchar(19), t.[], 120) AS [],
t.[],
CONVERT(varchar(19), t.[], 120) AS [],
t.[],
t.[],
CONVERT(varchar(19), t.[], 120) AS [],
t.[],
ISNULL(r.[], 0) AS [],
ISNULL(r.[], 0) AS [],
ISNULL(r.[], 0) AS [],
ISNULL(p.[], N'') AS [],
CONVERT(varchar(19), r.[], 120) AS [],
CONVERT(varchar(19), r.[], 120) AS [],
ISNULL(progress_notes.[], N'') AS [],
ISNULL(task_notes.[], N'') AS [],
ISNULL(task_notes.[], N'') AS []
FROM [dbo].[MES_设计报工_任务] AS t
OUTER APPLY
(
SELECT
COUNT(1) AS [],
SUM(CASE WHEN rr.[] IS NULL THEN 1 ELSE 0 END) AS [],
SUM(CASE
WHEN rr.[] IS NULL
AND
(
(NULLIF(@ID, N'') IS NOT NULL AND ISNULL(rr.[ID], N'') = @ID)
OR (NULLIF(@ID, N'') IS NULL AND NULLIF(@, N'') IS NOT NULL AND ISNULL(rr.[], N'') = @)
)
THEN 1 ELSE 0 END) AS [],
MAX(rr.[]) AS [],
MAX(rr.[]) AS []
FROM [dbo].[MES_设计报工_记录] AS rr
WHERE rr.[DID] = t.[DID]
) AS r
OUTER APPLY
(
SELECT STRING_AGG(CONVERT(nvarchar(max), x.[]), N'') AS []
FROM
(
SELECT DISTINCT COALESCE(NULLIF(rr2.[], N''), NULLIF(rr2.[ID], N''), N'未填写操作人') AS []
FROM [dbo].[MES_设计报工_记录] AS rr2
WHERE rr2.[DID] = t.[DID]
AND rr2.[] IS NULL
) AS x
) AS p
OUTER APPLY
(
SELECT STRING_AGG(
CONVERT(nvarchar(max),
CONVERT(nvarchar(19), rr3.[], 120)
+ N' '
+ COALESCE(NULLIF(LTRIM(RTRIM(rr3.[])), N''), NULLIF(LTRIM(RTRIM(rr3.[ID])), N''), N'未填写编辑人')
+ NCHAR(13) + NCHAR(10)
+ rr3.[]),
NCHAR(13) + NCHAR(10) + NCHAR(13) + NCHAR(10)
) WITHIN GROUP (ORDER BY rr3.[] DESC, rr3.[RID] DESC) AS []
FROM [dbo].[MES_设计报工_记录] AS rr3
WHERE rr3.[DID] = t.[DID]
AND NULLIF(LTRIM(RTRIM(rr3.[])), N'') IS NOT NULL
) AS progress_notes
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 [],
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 task_notes
WHERE
(@DID IS NULL OR @DID = 0 OR t.[DID] = @DID)
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 (ISNULL(@, N'') = N'' OR t.[] LIKE N'%' + @ + N'%')
AND (ISNULL(@, N'') = N'' OR t.[] LIKE N'%' + @ + N'%')
AND
(
ISNULL(@, N'') = N''
OR @ = N'全部'
OR (@ = N'未完成' AND ISNULL(t.[], N'') <> N'已完成')
OR (@ <> N'未完成' AND t.[] = @)
)
AND (@1 IS NULL OR t.[] >= @1)
AND (@2 IS NULL OR t.[] < DATEADD(day, 1, @2))
AND (@1 IS NULL OR t.[] >= @1)
AND (@2 IS NULL OR t.[] < DATEADD(day, 1, @2))
AND
(
@ = 1
OR (NULLIF(@, N'') IS NOT NULL AND ISNULL(t.[], N'') = @)
OR
(
NULLIF(@ID, N'') IS NOT NULL
AND CHARINDEX(N',' + @ID + N',', N',' + ISNULL(t.[ID], N'') + N',') > 0
)
OR
(
NULLIF(@, N'') IS NOT NULL
AND CHARINDEX(N',' + @ + N',', N',' + ISNULL(t.[], N'') + N',') > 0
)
OR
(
NULLIF(@ID, N'') IS NOT NULL
AND CHARINDEX(N',' + @ID + N',', N',' + ISNULL(t.[ID], N'') + N',') > 0
)
OR
(
NULLIF(@, N'') IS NOT NULL
AND CHARINDEX(N',' + @ + N',', N',' + ISNULL(t.[], N'') + N',') > 0
)
)
ORDER BY t.[DID] DESC;
END
GO

View File

@@ -0,0 +1,197 @@
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(200) = N'',
@ nvarchar(100) = 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 @ nvarchar(100) = LTRIM(RTRIM(ISNULL(@, 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;
SELECT
r.[RID],
r.[DID],
ISNULL(r.[], N'') AS [],
CONVERT(varchar(10), r.[], 120) AS [],
CONVERT(varchar(19), t.[], 120) AS [],
ISNULL(t.[], N'') AS [],
ISNULL(t.[], N'') AS [],
ISNULL(t.[], N'') AS [],
ISNULL(t.[], N'') AS [],
ISNULL(t.[], N'') AS [],
ISNULL(t.[], N'') AS [],
CONVERT(varchar(19), t.[], 120) AS [],
CONVERT(varchar(19), t.[], 120) AS [],
ISNULL(t.[], N'') AS [],
ISNULL(t.[], N'') AS [],
ISNULL(t.[], N'') AS [],
ISNULL(t.[], N'') AS [],
ISNULL(t.[], N'') AS [],
ISNULL(t.[], N'') AS [],
ISNULL(t.[], N'') AS [],
ISNULL(t.[], N'') AS [],
ISNULL(t.[], N'') AS [],
ISNULL(t.[], N'') AS [],
ISNULL(t.[], N'') AS [],
CONVERT(varchar(19), r.[], 120) AS [],
CONVERT(varchar(19), r.[], 120) AS [],
CAST(1 AS int) AS [],
CAST(ISNULL(r.[], 0) / 3600.0 AS decimal(18, 2)) AS [],
CASE WHEN r.[] = 1 THEN N'已校验' ELSE N'未校验' END AS [],
ISNULL(r.[], N'') AS [],
ISNULL(r.[], N'') AS []
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 (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(@, N'') IS NOT NULL
AND
(
LTRIM(RTRIM(ISNULL(t.[], N''))) = @
OR LTRIM(RTRIM(ISNULL(r.[], N''))) = @
)
)
)
ORDER BY r.[] DESC, r.[RID] DESC;
END
GO
SET NOCOUNT ON;
SET XACT_ABORT ON;
BEGIN TRANSACTION;
DECLARE @TargetMenus TABLE
(
[] int NOT NULL PRIMARY KEY,
[ID] int NOT NULL
);
INSERT INTO @TargetMenus ([], [ID])
SELECT
parent_menu.[],
MIN(parent_menu.[id]) AS [ID]
FROM [dbo].[_二级菜单] AS parent_menu WITH (UPDLOCK, HOLDLOCK)
WHERE parent_menu.[pid] = 0
AND parent_menu.[] = 1
AND
(
parent_menu.[title] = N'研发管理'
OR parent_menu.[path] = '/ResearchManagement'
OR parent_menu.[name] = 'ResearchManagement'
)
GROUP BY parent_menu.[];
UPDATE menu_row
SET
menu_row.[pid] = target.[ID],
menu_row.[path] = 'DesignReportTask/FinancialHours/index',
menu_row.[componet] = '/ProductionManagement/DesignReportTask/FinancialHours/index',
menu_row.[redirect] = NULL,
menu_row.[name] = 'DesignReportFinancialHours',
menu_row.[title] = N'研发财务工时',
menu_row.[icon] = 'WhiteCollarBonusesSummary',
menu_row.[] = menu_row.[id],
menu_row.[] = 1,
menu_row.[] = GETDATE()
FROM [dbo].[_二级菜单] AS menu_row
INNER JOIN @TargetMenus AS target ON target.[] = menu_row.[]
WHERE
menu_row.[path] = 'DesignReportTask/FinancialHours/index'
OR menu_row.[componet] = '/ProductionManagement/DesignReportTask/FinancialHours/index'
OR menu_row.[name] = 'DesignReportFinancialHours'
OR menu_row.[title] = N'研发财务工时';
INSERT INTO [dbo].[_二级菜单]
([id], [pid], [path], [componet], [redirect], [name], [title], [icon], [], [], [], [])
SELECT
next_id.[ID],
target.[ID],
'DesignReportTask/FinancialHours/index',
'/ProductionManagement/DesignReportTask/FinancialHours/index',
NULL,
'DesignReportFinancialHours',
N'研发财务工时',
'WhiteCollarBonusesSummary',
target.[],
next_id.[ID],
1,
GETDATE()
FROM @TargetMenus AS target
CROSS APPLY
(
SELECT ISNULL(MAX(existing.[id]), 0) + 1 AS [ID]
FROM [dbo].[_二级菜单] AS existing WITH (UPDLOCK, HOLDLOCK)
WHERE existing.[] = target.[]
) AS next_id
WHERE NOT EXISTS
(
SELECT 1
FROM [dbo].[_二级菜单] AS existing WITH (UPDLOCK, HOLDLOCK)
WHERE existing.[] = target.[]
AND
(
existing.[path] = 'DesignReportTask/FinancialHours/index'
OR existing.[componet] = '/ProductionManagement/DesignReportTask/FinancialHours/index'
OR existing.[name] = 'DesignReportFinancialHours'
OR existing.[title] = N'研发财务工时'
)
);
COMMIT TRANSACTION;
SELECT
menu_row.[id],
menu_row.[pid],
menu_row.[path],
menu_row.[componet],
menu_row.[name],
menu_row.[title],
menu_row.[icon],
menu_row.[],
menu_row.[]
FROM [dbo].[_二级菜单] AS menu_row
WHERE menu_row.[title] = N'研发财务工时'
ORDER BY menu_row.[], menu_row.[id];
GO