From 24edddf9320acb487e9001195620dbe364fcca17 Mon Sep 17 00:00:00 2001 From: xiaju <1784803958@qq.com> Date: Thu, 25 Dec 2025 19:05:33 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8D=95=E4=BD=8D=E8=80=83=E5=8B=A4=E7=95=8C?= =?UTF-8?q?=E9=9D=A2=E6=9F=A5=E8=AF=A2=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ..._V2025-12-25-xiaj(spInOutManHoursReport).sql | 117 ++++++++++++++++++ .../SUBQHSE_V2025-12-25-xiaj(考勤表索引).sql | 9 ++ SGGL/WebAPI/WebAPI.csproj.user | 2 +- 3 files changed, 127 insertions(+), 1 deletion(-) create mode 100644 DataBase/版本日志/SUBQHSE_V2025-12-25-xiaj(spInOutManHoursReport).sql create mode 100644 DataBase/版本日志/SUBQHSE_V2025-12-25-xiaj(考勤表索引).sql diff --git a/DataBase/版本日志/SUBQHSE_V2025-12-25-xiaj(spInOutManHoursReport).sql b/DataBase/版本日志/SUBQHSE_V2025-12-25-xiaj(spInOutManHoursReport).sql new file mode 100644 index 00000000..00d8b188 --- /dev/null +++ b/DataBase/版本日志/SUBQHSE_V2025-12-25-xiaj(spInOutManHoursReport).sql @@ -0,0 +1,117 @@ +GO + +/****** Object: StoredProcedure [dbo].[spInOutManHoursReport] Script Date: 2025-12-25 18:14:07 ******/ +SET ANSI_NULLS ON +GO + +SET QUOTED_IDENTIFIER ON +GO + + + +ALTER PROC [dbo].[spInOutManHoursReport] + @projectId NVARCHAR(50), + @unitId NVARCHAR(max)= NULL, + @postId NVARCHAR(max)= NULL, + @startTime DATETIME = NULL, + @endTime DATETIME = NULL +AS +/*****************µ¥Î»¿¼ÇÚ****************/ + + SET NOCOUNT ON; + + -- 1. ´´½¨ÁÙʱ±í´æ´¢¹ýÂ˵ĵ¥Î»ID + CREATE TABLE #FilteredUnits (UnitId NVARCHAR(50) PRIMARY KEY); + + IF @unitId IS NOT NULL AND LTRIM(RTRIM(@unitId)) <> '' + BEGIN + INSERT INTO #FilteredUnits (UnitId) + select distinct items from split(@unitId,',') + END + + -- 2. ´´½¨ÁÙʱ±í´æ´¢¹ýÂ˵ĸÚλID + CREATE TABLE #FilteredPosts (WorkPostId NVARCHAR(50) PRIMARY KEY); + + IF @postId IS NOT NULL AND LTRIM(RTRIM(@postId)) <> '' + BEGIN + INSERT INTO #FilteredPosts (WorkPostId) + select distinct items from split(@postId,',') + + END + ; + + -- 3. ʹÓÃCTEÔ¤ÏȾۺÏÈËԱͳ¼ÆÊý¾Ý£¨±ÜÃâÏà¹Ø×Ó²éѯ£© +WITH InOutRecord AS ( +SELECT T.ProjectId,P.UnitId,P.WorkPostId as PostId,ManHours +,ISNULL((case when P.UnitId=''then null else (case when u.ShortUnitName IS NOT NULL THEN u.ShortUnitName ELSE u.UnitName END) end),'δ֪') AS UnitName +,ISNULL((case when P.UnitId=''then null else u.UnitName end),'δ֪') AS AllUnitName +,ISNULL((case when W.WorkPostName=''then null else W.WorkPostName end),'δ֪') AS PostName +,T.NewID,U.ShortUnitName +FROM dbo.t_d_EmployInOutRecord AS T WITH(NOLOCK) +LEFT JOIN dbo.SitePerson_Person AS P WITH(NOLOCK) ON T.ProjectId=P.ProjectId AND T.IDCardNo=P.IdentityCard +LEFT JOIN dbo.Base_Unit AS U WITH(NOLOCK) ON P.UnitId=U.UnitId +LEFT JOIN dbo.Base_WorkPost AS W WITH(NOLOCK) ON P.WorkPostId=W.WorkPostId +WHERE 1=1 AND T.ProjectId = @ProjectId + AND (@startTime IS NULL OR T.RecordDate >= @startTime) + AND (@endTime IS NULL OR T.RecordDate <= @endTime) + AND (@unitId IS NULL OR EXISTS (SELECT 1 FROM #FilteredUnits WHERE UnitId = P.UnitId)) + AND (@postId IS NULL OR EXISTS (SELECT 1 FROM #FilteredPosts WHERE WorkPostId = P.WorkPostId)) +), +PerCountSum AS ( +SELECT COUNT(PersonId) AS PersonCountSum,ProjectId,UnitId,WorkPostId +FROM dbo.SitePerson_Person AS SP WITH(NOLOCK) +WHERE IsUsed=1 AND OutTime IS NOT NULL AND ProjectId = @ProjectId + AND (@unitId IS NULL OR EXISTS (SELECT 1 FROM #FilteredUnits WHERE UnitId = SP.UnitId)) + AND (@postId IS NULL OR EXISTS (SELECT 1 FROM #FilteredPosts WHERE WorkPostId = SP.WorkPostId)) +GROUP BY ProjectId,UnitId,WorkPostId +) + + -- 4. Ö÷²éѯ - ÓÅ»¯ºóµÄJOIN½á¹¹ +SELECT CAST(NEWID() AS NVARCHAR(100)) AS ID,InOutRecord.ProjectId,InOutRecord.UnitId,InOutRecord.UnitName,InOutRecord.AllUnitName,InOutRecord.PostName +,SUM(ISNULL(InOutRecord.ManHours, 0)) AS ManHoursSum +,COUNT(InOutRecord.NewID) AS ManCountSum ,PerCountSum.PersonCountSum +FROM InOutRecord +LEFT JOIN PerCountSum ON PerCountSum.UnitId=InOutRecord.UnitId AND PerCountSum.WorkPostId=InOutRecord.PostId AND PerCountSum.ProjectId=InOutRecord.ProjectId +GROUP BY InOutRecord.ProjectId,InOutRecord.UnitId,InOutRecord.UnitName,InOutRecord.AllUnitName,InOutRecord.PostId,InOutRecord.PostName,PerCountSum.PersonCountSum +ORDER BY ISNULL(InOutRecord.UnitName, InOutRecord.AllUnitName),InOutRecord.PostName + + + -- ÇåÀíÁÙʱ±í + DROP TABLE #FilteredUnits; + DROP TABLE #FilteredPosts; + + + + + +--2025-12-25ÐÞ¸Ä֮ǰ xiaj +--SELECT CAST(NEWID() AS NVARCHAR(100)) AS ID +-- ,T.ProjectId +-- ,p.UnitId +-- ,ISNULL((case when P.UnitId=''then null +-- else (case when u.ShortUnitName IS NOT NULL THEN u.ShortUnitName ELSE u.UnitName END) end),'δ֪') AS UnitName +-- ,ISNULL((case when P.UnitId=''then null +-- else u.UnitName end),'δ֪') AS AllUnitName +-- ,p.WorkPostId as PostId +-- ,ISNULL((case when W.WorkPostName=''then null else W.WorkPostName end),'δ֪') AS PostName +-- ,SUM(ISNULL(ManHours,0)) AS ManHoursSum +-- ,COUNT(T.NewID) AS ManCountSum +-- ,(SELECT COUNT(PersonId) FROM SitePerson_Person +-- WHERE ProjectId = T.ProjectId AND P.UnitId=UnitId AND P.WorkPostId=WorkPostId AND IsUsed=1 AND OutTime IS NOT NULL +-- group by ProjectId,UnitId,WorkPostId) AS PersonCountSum +--FROM dbo.t_d_EmployInOutRecord AS T +--LEFT JOIN dbo.SitePerson_Person AS P ON T.ProjectId=P.ProjectId AND T.IDCardNo=P.IdentityCard +--LEFT JOIN dbo.Base_Unit AS U ON P.UnitId=U.UnitId +----LEFT JOIN dbo.ProjectData_TeamGroup AS Team ON P.TeamGroupId=Team.TeamGroupId +--LEFT JOIN dbo.Base_WorkPost AS W ON P.WorkPostId=W.WorkPostId +--WHERE T.ProjectId = @ProjectId +--AND (RecordDate >= @startTime OR @startTime IS NULL) +--AND (RecordDate <= @endTime OR @endTime IS NULL) +--AND (@unitId like '%'+P.UnitId+'%' OR @unitId IS NULL) +--AND (@postId like '%'+P.WorkPostId+'%' OR @postId IS NULL) +--GROUP BY T.ProjectId,P.UnitId,U.UnitName,u.ShortUnitName,P.WorkPostId,W.WorkPostName + + +GO + + diff --git a/DataBase/版本日志/SUBQHSE_V2025-12-25-xiaj(考勤表索引).sql b/DataBase/版本日志/SUBQHSE_V2025-12-25-xiaj(考勤表索引).sql new file mode 100644 index 00000000..bf2fac86 --- /dev/null +++ b/DataBase/版本日志/SUBQHSE_V2025-12-25-xiaj(考勤表索引).sql @@ -0,0 +1,9 @@ + + +--¿¼ÇÚ±íË÷Òý +CREATE NONCLUSTERED INDEX [IX_SitePerson_Person_ProjectUnitPost] + ON [dbo].[SitePerson_Person] ([ProjectId], [UnitId], [WorkPostId]) + INCLUDE ([PersonId], [IsUsed], [OutTime]) + WHERE [IsUsed] = 1 AND [OutTime] IS NOT NULL; + + diff --git a/SGGL/WebAPI/WebAPI.csproj.user b/SGGL/WebAPI/WebAPI.csproj.user index d38a848b..cbae34bb 100644 --- a/SGGL/WebAPI/WebAPI.csproj.user +++ b/SGGL/WebAPI/WebAPI.csproj.user @@ -1,7 +1,7 @@ - Release|Any CPU + Debug|Any CPU true