From bf642afbd5918272f6f23905c23bc0b2cc0789a8 Mon Sep 17 00:00:00 2001 From: gaofei1985 <181547018@qq.com> Date: Mon, 16 Oct 2023 09:23:49 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../版本日志/SGGLDB_WH_2023-10-12.sql | 387 ++++++++++++ .../版本日志/SGGLDB_WH_2023-10-16.sql | 12 + SGGL/FineUIPro.Web/Images/Template.png | Bin 0 -> 29397 bytes .../InspectWanderAboutConfirm.aspx | 9 + .../InspectWanderAboutConfirm.aspx.cs | 578 +++++++++++++++++- ...InspectWanderAboutConfirm.aspx.designer.cs | 36 ++ .../TestRun/BeforeTestRun/SubInspectTerm.aspx | 106 ++-- .../BeforeTestRun/SubInspectTerm.aspx.cs | 134 ++-- .../SysPipingDeviceImport.aspx.cs | 16 + SGGL/Model/Model.cs | 96 +++ 10 files changed, 1260 insertions(+), 114 deletions(-) create mode 100644 DataBase/版本日志/SGGLDB_WH_2023-10-16.sql create mode 100644 SGGL/FineUIPro.Web/Images/Template.png diff --git a/DataBase/版本日志/SGGLDB_WH_2023-10-12.sql b/DataBase/版本日志/SGGLDB_WH_2023-10-12.sql index bea26c75..6349430c 100644 --- a/DataBase/版本日志/SGGLDB_WH_2023-10-12.sql +++ b/DataBase/版本日志/SGGLDB_WH_2023-10-12.sql @@ -21,3 +21,390 @@ alter table PreRun_SubInspectTermItem add SubcontractorIsPass int NULL-- alter table PreRun_SubInspectTermItem add ContractorIsPass int NULL--аǷͨ0/null:δͨ 1:ͨ alter table PreRun_SubInspectTermItem add SupervisionIsPass int NULL--Ƿͨ0/null:δͨ 1:ͨ alter table PreRun_SubInspectTermItem add OwnerIsPass int NULL--ҵǷͨ0/null:δͨ 1:ͨ +GO + + + +--ȡǰ˴ +ALTER PROCEDURE [dbo].[Sp_APP_GetToDoItems] + @projectId NVARCHAR(50)=NULL, + @userId NVARCHAR(200)=NULL +AS +/*ȡǰ˴*/ +BEGIN +SELECT HazardRegisterId AS DataId + ,'B6BE5FE0-CB84-47FF-A6C3-5AD9E1CCE079' AS MenuId + ,'ȫѲ' AS MenuName + ,register.RegisterDef AS Content + ,UserId + ,users.UserName + ,register.RegisterDate AS DataTime + ,CONVERT(varchar(100),register.RegisterDate, 23) AS DataTimeStr + ,'/pagesHSSE/safe/inspecitonconfirm' AS UrlStr +FROM HSSE_Hazard_HazardRegister AS register +LEFT JOIN Sys_User AS users ON users.UserId =@userId +WHERE register.ProjectId=@projectId AND +((register.states = '1' AND (register.ResponsibleMan =@userId OR register.CCManIds LIKE ('%'+@userId+'%') )) +OR (register.states = '2' AND register.CheckManId =@userId)) + +UNION ALL +SELECT PlanId AS DataId + ,'B782A26B-D85C-4F84-8B45-F7AA47B3159E' AS MenuId + ,'ѵƻ' AS MenuName + ,PlanName AS Content + ,UserId + ,users.UserName + ,DesignerDate AS DataTime + ,CONVERT(varchar(100),DesignerDate, 23) AS DataTimeStr + ,'/pagesTest/test/trainindex' AS UrlStr +FROM Training_Plan AS ePlan +LEFT JOIN Sys_User AS users ON ePlan.DesignerId= users.UserId +WHERE (ePlan.ProjectId=@projectId or (@projectId is null and ePlan.ProjectId is null)) + AND (States = '0' OR States = '1' ) AND ePlan.DesignerId =@userId + +UNION ALL +SELECT TestPlanId AS DataId + ,'FAF7F4A4-A4BC-4D94-9E88-0CF5A380DB34' AS MenuId + ,'Լƻ' AS MenuName + ,PlanName AS Content + ,UserId + ,users.UserName + ,PlanDate AS DataTime + ,CONVERT(varchar(100),PlanDate, 23) AS DataTimeStr + ,'/pagesTest/test/testplan' AS UrlStr +FROM Training_TestPlan AS TPlan +LEFT JOIN Sys_User AS users ON users.UserId =TPlan.PlanManId +WHERE (TPlan.ProjectId=@projectId or (@projectId is null and TPlan.ProjectId is null)) + AND (States = '0' OR States = '1' ) AND PlanManId =@userId + +UNION ALL +SELECT TaskId AS DataId + ,'E108F75D-89D0-4DCA-8356-A156C328805C' AS MenuId + ,'ѵ' AS MenuName + ,Plans.PlanName AS Content + ,users.UserId + ,users.UserName + ,TaskDate AS DataTime + ,CONVERT(varchar(100),TaskDate, 23) AS DataTimeStr + ,('/pagesTest/test/taskindex') AS UrlStr +FROM Training_Task AS Task + LEFT JOIN Sys_User AS users ON users.UserId =@userId + LEFT JOIN Training_Plan AS Plans ON Plans.PlanId =Task.PlanId +WHERE (Task.ProjectId=@projectId or (@projectId is null and Task.ProjectId is null)) + AND (Task.States IS NULL OR Task.States != 2) + AND Task.UserId = @userId + +UNION ALL +SELECT TestRecordId AS DataId + ,'0EEB138D-84F9-4686-8CBB-CAEAA6CF1B2A' AS MenuId + ,'ɨ뿼' AS MenuName + ,TestPlan.PlanName AS Content + ,TestRecord.TestManId + ,Person.PersonName + ,TestPlan.TestStartTime AS DataTime + ,CONVERT(varchar(100),TestPlan.TestStartTime, 23) AS DataTimeStr + ,('/pages/temp_index/index') AS UrlStr +FROM Training_TestRecord AS TestRecord +left join Training_TestPlan as TestPlan on TestRecord.TestPlanId = TestPlan.TestPlanId +left join SitePerson_Person as Person on Person.PersonId = TestRecord.TestManId +left join Sys_User as uses on Person.IdentityCard = uses.IdentityCard +WHERE (TestRecord.ProjectId=@projectId or (@projectId is null and TestRecord.ProjectId is null)) +AND TestPlan.States ='1' +AND TestRecord.TestEndTime IS NULL +AND (TestRecord.TestManId = @userId or uses.UserId = @userId) + +UNION ALL +SELECT FireWorkId AS DataId + ,'2E58D4F1-2FF1-450E-8A00-1CE3BBCF8D4B' AS MenuId + ,'ҵ' AS MenuName + ,LicenseCode AS Content + ,UserId + ,users.UserName + ,ApplyDate AS DataTime + ,CONVERT(varchar(100),ApplyDate, 23) AS DataTimeStr + ,(CASE WHEN States = '0' THEN '/pagesWork/dhuo/add' + ELSE '/pagesWork/dhuo/approval' END) AS UrlStr +FROM License_FireWork AS License + LEFT JOIN Sys_User AS users ON users.UserId =License.NextManId +WHERE License.ProjectId=@projectId + AND (States = '0' OR States = '1' OR States= '6') + AND License.NextManId LIKE '%'+ @userId+'%' + +UNION ALL +SELECT HeightWorkId AS DataId + ,'DA1CAE8E-B5BF-4AC0-9996-AF6CAA412CA9' AS MenuId + ,'ߴҵ' AS MenuName + ,LicenseCode AS Content + ,UserId + ,users.UserName + ,ApplyDate AS DataTime + ,CONVERT(varchar(100),ApplyDate, 23) AS DataTimeStr + ,(CASE WHEN States = '0' THEN '/pagesWork/gchu/add' + ELSE '/pagesWork/dhuo/approval' END) AS UrlStr +FROM License_HeightWork AS License + LEFT JOIN Sys_User AS users ON users.UserId =License.NextManId +WHERE License.ProjectId=@projectId + AND (States = '0' OR States = '1' OR States= '6') + AND License.NextManId LIKE '%'+ @userId+'%' + +UNION ALL +SELECT LimitedSpaceId AS DataId + ,'AEC9166D-1C91-45F0-8BFE-D3D0479A28C7' AS MenuId + ,'޿ռ' AS MenuName + ,LicenseCode AS Content + ,UserId + ,users.UserName + ,ApplyDate AS DataTime + ,CONVERT(varchar(100),ApplyDate, 23) AS DataTimeStr + ,(CASE WHEN States = '0' THEN '/pagesWork/sxkj/add' + ELSE '/pagesWork/dhuo/approval' END) AS UrlStr +FROM License_LimitedSpace AS License + LEFT JOIN Sys_User AS users ON users.UserId =License.NextManId +WHERE License.ProjectId=@projectId + AND (States = '0' OR States = '1' OR States= '6') + AND License.NextManId LIKE '%'+ @userId+'%' + +UNION ALL +SELECT RadialWorkId AS DataId + ,'F72FF20B-D3EB-46A5-97F7-C99B2473A140' AS MenuId + ,'ҵ' AS MenuName + ,LicenseCode AS Content + ,UserId + ,users.UserName + ,ApplyDate AS DataTime + ,CONVERT(varchar(100),ApplyDate, 23) AS DataTimeStr + ,(CASE WHEN States = '0' THEN '/pagesWork/sx/add' + ELSE '/pagesWork/dhuo/approval' END) AS UrlStr +FROM License_RadialWork AS License + LEFT JOIN Sys_User AS users ON users.UserId =License.NextManId +WHERE License.ProjectId=@projectId + AND (States = '0' OR States = '1' OR States= '6') + AND License.NextManId LIKE '%'+ @userId+'%' + +UNION ALL +SELECT OpenCircuitId AS DataId + ,'4E607E83-41FC-4F49-B26F-A21CFE38328F' AS MenuId + ,'·(ռ)' AS MenuName + ,LicenseCode AS Content + ,UserId + ,users.UserName + ,ApplyDate AS DataTime + ,CONVERT(varchar(100),ApplyDate, 23) AS DataTimeStr + ,(CASE WHEN States = '0' THEN '/pagesWork/dlu/add' + ELSE '/pagesWork/dhuo/approval' END) AS UrlStr +FROM License_OpenCircuit AS License + LEFT JOIN Sys_User AS users ON users.UserId =License.NextManId +WHERE License.ProjectId=@projectId + AND (States = '0' OR States = '1' OR States= '6') + AND License.NextManId LIKE '%'+ @userId+'%' + +UNION ALL +SELECT BreakGroundId AS DataId + ,'755C6AC9-2E38-4D4F-AF33-33CB1744A907' AS MenuId + ,'ҵ' AS MenuName + ,LicenseCode AS Content + ,UserId + ,users.UserName + ,ApplyDate AS DataTime + ,CONVERT(varchar(100),ApplyDate, 23) AS DataTimeStr + ,(CASE WHEN States = '0' THEN '/pagesWork/dtu/add' + ELSE '/pagesWork/dhuo/approval' END) AS UrlStr +FROM License_BreakGround AS License + LEFT JOIN Sys_User AS users ON users.UserId =License.NextManId +WHERE License.ProjectId=@projectId + AND (States = '0' OR States = '1' OR States= '6') + AND License.NextManId LIKE '%'+ @userId+'%' + +UNION ALL +SELECT NightWorkId AS DataId + ,'7BBAE649-7B00-4475-A911-BFE3A37AC55B' AS MenuId + ,'ҹʩ' AS MenuName + ,LicenseCode AS Content + ,UserId + ,users.UserName + ,ApplyDate AS DataTime + ,CONVERT(varchar(100),ApplyDate, 23) AS DataTimeStr + ,(CASE WHEN States = '0' THEN '/pagesWork/yjsg/add' + ELSE '/pagesWork/dhuo/approval' END) AS UrlStr +FROM License_NightWork AS License + LEFT JOIN Sys_User AS users ON users.UserId =License.NextManId +WHERE License.ProjectId=@projectId + AND (States = '0' OR States = '1' OR States= '6') + AND License.NextManId LIKE '%'+ @userId+'%' + +UNION ALL +SELECT LiftingWorkId AS DataId + ,'A1BE3AB6-9D4A-41E7-8870-E73423165451' AS MenuId + ,'װҵ' AS MenuName + ,LicenseCode AS Content + ,UserId + ,users.UserName + ,ApplyDate AS DataTime + ,CONVERT(varchar(100),ApplyDate, 23) AS DataTimeStr + ,(CASE WHEN States = '0' THEN '/pagesWork/dzhuang/add' + ELSE '/pagesWork/dhuo/approval' END) AS UrlStr +FROM License_LiftingWork AS License + LEFT JOIN Sys_User AS users ON users.UserId =License.NextManId +WHERE License.ProjectId=@projectId + AND (States = '0' OR States = '1' OR States= '6') + AND License.NextManId LIKE '%'+ @userId+'%' + +UNION ALL +SELECT ElectricityId AS DataId + ,'48F64E0F-38B2-4BDC-9B61-6200BD02CBF5' AS MenuId + ,'ʱõ' AS MenuName + ,LicenseCode AS Content + ,UserId + ,users.UserName + ,ApplyDate AS DataTime + ,CONVERT(varchar(100),ApplyDate, 23) AS DataTimeStr + ,(CASE WHEN States = '0' THEN '/pagesWork/ldian/add' + ELSE '/pagesWork/dhuo/approval' END) AS UrlStr +FROM License_Electricity AS License + LEFT JOIN Sys_User AS users ON users.UserId =License.NextManId +WHERE License.ProjectId=@projectId + AND (States = '0' OR States = '1' OR States= '6') + AND License.NextManId LIKE '%'+ @userId+'%' + +UNION ALL +SELECT RectifyNoticesId AS DataId + ,'0038D764-D628-46F0-94FF-D0A22C3C45A3' AS MenuId + ,'' AS MenuName + ,(CASE WHEN Rectify.States =1 THEN 'ǩ' + WHEN Rectify.States =2 THEN 'ģ' + WHEN Rectify.States =3 THEN 'ˣ' + WHEN Rectify.States =4 THEN '飺' + WHEN Rectify.States =5 THEN 'ɣ' + ELSE 'ύ' END + RectifyNoticesCode) AS Content + ,users.UserId + ,users.UserName + ,CheckedDate AS DataTime + ,CONVERT(varchar(100),CheckedDate, 23) AS DataTimeStr + ,(CASE WHEN ISNULL(Rectify.States,0) =0 THEN '/pagesHSSE/rn/rn_add' --ύ + WHEN Rectify.States =1 THEN '/pagesHSSE/rn/rn_approval' --ǩ + WHEN Rectify.States =2 THEN '/pagesHSSE/rn/rn_rectify' -- + WHEN Rectify.States =3 THEN '/pagesHSSE/rn/rn_rectifycf' -- + WHEN Rectify.States =4 THEN '/pagesHSSE/rn/rn_confirm' -- + ELSE '/pagesHSSE/rn/rn_add' END) AS UrlStr +FROM Check_RectifyNotices AS Rectify + LEFT JOIN Sys_User AS users ON users.UserId =@userId +WHERE Rectify.Projectid=@projectId AND Rectify.States <> 5 + AND ((ISNULL(Rectify.States,0) =0 AND Rectify.CompleteManId LIKE '%'+ @userId+'%') + OR (Rectify.States =1 AND Rectify.SignPerson LIKE '%'+ @userId+'%') + OR (Rectify.States =2 AND Rectify.DutyPersonId LIKE '%'+ @userId+'%') + OR (Rectify.States =3 AND Rectify.UnitHeadManId LIKE '%'+ @userId+'%') + OR (Rectify.States =4 AND Rectify.CheckPerson LIKE '%'+ @userId+'%') + OR (Rectify.ProfessionalEngineerId LIKE '%'+ @userId+'%' AND (ProfessionalEngineerTime1 IS NULL OR ProfessionalEngineerTime2 IS NULL)) + OR (Rectify.ConstructionManagerId LIKE '%'+ @userId+'%' AND (ConstructionManagerTime1 IS NULL OR ConstructionManagerTime2 IS NULL)) + OR (Rectify.ProjectManagerId LIKE '%'+ @userId+'%' AND (ProjectManagerTime1 IS NULL OR ProjectManagerTime2 IS NULL))) + +UNION ALL +SELECT PersonId AS DataId + ,'EE260447-028F-46AF-8864-9A5DC9DAA5BD' AS MenuId + ,'ֳԱ' AS MenuName + ,Person.PersonName AS Content + ,users.UserId + ,users.UserName + ,Person.InTime AS DataTime + ,CONVERT(varchar(100),Person.InTime, 23) AS DataTimeStr + ,('/pagesHSSE/info/peopledetail') AS UrlStr +FROM SitePerson_Person AS Person + LEFT JOIN Sys_User AS users ON users.UserId =@userId +WHERE Person.ProjectId=@projectId AND (Person.IsUsed IS NULL OR Person.IsUsed= 0) + AND Person.AuditorId = @userId AND Person.AuditorDate IS NULL + + +UNION ALL +SELECT PauseNoticeId AS DataId + ,'C81DB7ED-165E-4C69-86B0-A3AAE37059FE' AS MenuId + ,'ͣ' AS MenuName + ,(CASE WHEN PauseNotice.PauseStates =1 THEN 'ǩ' + WHEN PauseNotice.PauseStates =2 THEN '׼' + WHEN PauseNotice.PauseStates =3 THEN 'գ' + ELSE 'ύ' END + PauseNoticeCode) AS Content + ,users.UserId + ,users.UserName + ,PauseTime AS DataTime + ,CONVERT(varchar(100),PauseTime, 23) AS DataTimeStr + ,(CASE WHEN ISNULL(PauseNotice.PauseStates,0) =0 THEN '/pagesHSSE/info/stop_add' --ύ + WHEN PauseNotice.PauseStates =1 AND PauseNotice.SignManId=@userId THEN '/pagesHSSE/info/stop_approval' --ǩ + WHEN PauseNotice.PauseStates =2 AND PauseNotice.ApproveManId=@userId THEN '/pagesHSSE/info/stop_confirm' --׼ + WHEN PauseNotice.PauseStates =3 AND PauseNotice.DutyPersonId=@userId THEN '/pagesHSSE/info/stop_feedback' -- + ELSE '/pagesHSSE/info/stop_add' END) AS UrlStr +FROM Check_PauseNotice AS PauseNotice + LEFT JOIN Sys_User AS users ON users.UserId =@userId +WHERE PauseNotice.ProjectId=@projectId AND PauseNotice.PauseStates <> 4 + AND ((ISNULL(PauseNotice.PauseStates,0) =0 AND PauseNotice.CompileManId LIKE '%'+ @userId+'%') + OR (PauseNotice.PauseStates =1 AND PauseNotice.SignManId LIKE '%'+ @userId+'%') + OR (PauseNotice.PauseStates =2 AND PauseNotice.ApproveManId LIKE '%'+ @userId+'%') + OR (PauseNotice.PauseStates =3 AND PauseNotice.DutyPersonId LIKE '%'+ @userId+'%') + OR (PauseNotice.ProfessionalEngineerId LIKE '%'+ @userId+'%' AND ProfessionalEngineerTime IS NULL) + OR (PauseNotice.ConstructionManagerId LIKE '%'+ @userId+'%' AND ConstructionManagerTime IS NULL) + OR (PauseNotice.UnitHeadManId LIKE '%'+ @userId+'%' AND UnitHeadManTime IS NULL) + OR (PauseNotice.SupervisorManId LIKE '%'+ @userId+'%' AND SupervisorManTime IS NULL) + OR (PauseNotice.OwnerId LIKE '%'+ @userId+'%' AND OwnerTime IS NULL)) +UNION ALL +SELECT PunishNoticeId AS DataId + ,'755F1C1D-2178-47D8-9F82-A501B53A2436' AS MenuId + ,'' AS MenuName + ,(CASE WHEN PunishNotice.PunishStates =1 THEN 'ǩ' + WHEN PunishNotice.PunishStates =2 THEN '׼' + WHEN PunishNotice.PunishStates =3 THEN 'ִ' + ELSE 'ύ' END + PunishNoticeCode) AS Content + ,users.UserId + ,users.UserName + ,PunishNoticeDate AS DataTime + ,CONVERT(varchar(100),PunishNoticeDate, 23) AS DataTimeStr + ,(CASE WHEN ISNULL(PunishNotice.PunishStates,0) =0 THEN '/pagesTest/punish/add' --ύ + WHEN PunishNotice.PunishStates =1 AND PunishNotice.SignMan=@userId THEN '/pagesTest/punish/approval' --ǩ + WHEN PunishNotice.PunishStates =2 AND PunishNotice.ApproveMan=@userId THEN '/pagesTest/punish/rectify' --׼ + WHEN PunishNotice.PunishStates =3 AND PunishNotice.DutyPersonId=@userId THEN '/pagesTest/punish/rectifycf' --ִ + ELSE '/pagesTest/punish/detail' END) AS UrlStr +FROM Check_PunishNotice AS PunishNotice + LEFT JOIN Sys_User AS users ON users.UserId =@userId +WHERE PunishNotice.ProjectId=@projectId AND PunishNotice.PunishStates <> 4 + AND ((ISNULL(PunishNotice.PunishStates,0) =0 AND PunishNotice.CompileMan LIKE '%'+ @userId+'%') + OR (PunishNotice.PunishStates =1 AND PunishNotice.SignMan LIKE '%'+ @userId+'%') + OR (PunishNotice.PunishStates =2 AND PunishNotice.ApproveMan LIKE '%'+ @userId+'%') + OR (PunishNotice.PunishStates =3 AND PunishNotice.DutyPersonId LIKE '%'+ @userId+'%') + OR (PunishNotice.ProfessionalEngineerId LIKE '%'+ @userId+'%' AND ProfessionalEngineerTime IS NULL) + OR (PunishNotice.ConstructionManagerId LIKE '%'+ @userId+'%' AND ConstructionManagerTime IS NULL) + OR (PunishNotice.UnitHeadManId LIKE '%'+ @userId+'%' AND UnitHeadManTime IS NULL)) +UNION ALL + +SELECT CheckSpecialId AS DataId + ,'1B08048F-93ED-4E84-AE65-DB7917EA2DFB' AS MenuId + ,'ר' AS MenuName + ,checkspecial.CheckSpecialCode+'ר' AS Content + ,UserId + ,users.UserName + ,checkspecial.CheckTime AS DataTime + ,CONVERT(varchar(100),checkspecial.CheckTime, 23) AS DataTimeStr + ,'/pagesHSSE/grow/special_detail' AS UrlStr +FROM Check_CheckSpecial AS checkspecial +LEFT JOIN Sys_User AS users ON users.UserId =@userId +WHERE checkspecial.ProjectId=@projectId AND +checkspecial.States='1' and checkspecial.ResponsibleMan=@userId + +UNION ALL +SELECT ConstructSolutionId AS DataId + ,'91C4BFDB-0A51-4992-99CC-EB4EC185593D' AS MenuId + ,'ʩ' AS MenuName + ,Solution.SolutionName AS Content + ,UserId + ,users.UserName + ,Solution.CompileDate AS DataTime + ,CONVERT(varchar(100),Solution.CompileDate, 23) AS DataTimeStr + ,'/pagesQ/eq_fangan/detail' AS UrlStr +FROM Solution_CQMSConstructSolution AS Solution +LEFT JOIN Sys_User AS users ON users.UserId =@userId +WHERE Solution.ProjectId=@projectId and +Solution.State!='3' AND Solution.ConstructSolutionId in (select ConstructSolutionId from Solution_CQMSConstructSolutionApprove approve where approve.ApproveType!='S' and approve.ApproveMan=@userId and approve.ApproveDate is null ) + +ORDER BY DataTime DESC +END + + + + + diff --git a/DataBase/版本日志/SGGLDB_WH_2023-10-16.sql b/DataBase/版本日志/SGGLDB_WH_2023-10-16.sql new file mode 100644 index 00000000..70f2f296 --- /dev/null +++ b/DataBase/版本日志/SGGLDB_WH_2023-10-16.sql @@ -0,0 +1,12 @@ + +--ɾ +truncate table PreRun_SubInspectTerm +truncate table PreRun_SubInspectTermItem +truncate table PreRun_InspectTailTerm +truncate table PreRun_InspectTermApproveRecords + +--ֶ +alter table PreRun_SubInspectTermItem add SubcontractorRemark varchar(1000) NULL--ְ̱ע +alter table PreRun_SubInspectTermItem add ContractorRemark varchar(1000) NULL--а̱ע +alter table PreRun_SubInspectTermItem add SupervisionRemark varchar(1000) NULL--ע +alter table PreRun_SubInspectTermItem add OwnerRemark varchar(1000) NULL--ҵע \ No newline at end of file diff --git a/SGGL/FineUIPro.Web/Images/Template.png b/SGGL/FineUIPro.Web/Images/Template.png new file mode 100644 index 0000000000000000000000000000000000000000..0f479c9d6be8f921a40826fa4fa002d5c6e6b8f9 GIT binary patch literal 29397 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 + + + @@ -42,6 +45,12 @@ + + + + + diff --git a/SGGL/FineUIPro.Web/TestRun/BeforeTestRun/InspectWanderAboutConfirm.aspx.cs b/SGGL/FineUIPro.Web/TestRun/BeforeTestRun/InspectWanderAboutConfirm.aspx.cs index 0244bfbd..4e77c65f 100644 --- a/SGGL/FineUIPro.Web/TestRun/BeforeTestRun/InspectWanderAboutConfirm.aspx.cs +++ b/SGGL/FineUIPro.Web/TestRun/BeforeTestRun/InspectWanderAboutConfirm.aspx.cs @@ -1,18 +1,23 @@ using BLL; +using Model; using Newtonsoft.Json.Linq; +using NPOI.SS.UserModel; +using NPOI.SS.Util; +using NPOI.XSSF.UserModel; using System; using System.Collections.Generic; +using System.Data; +using System.IO; using System.Linq; using System.Web; using System.Web.UI; -using System.Web.UI.WebControls; namespace FineUIPro.Web.TestRun.BeforeTestRun { public partial class InspectWanderAboutConfirm : PageBase { /// - /// + /// 检查表主键 /// public string SubInspectId { @@ -21,7 +26,7 @@ namespace FineUIPro.Web.TestRun.BeforeTestRun } /// - /// + /// 类型 /// public int ConfirmType { @@ -29,12 +34,39 @@ namespace FineUIPro.Web.TestRun.BeforeTestRun set { ViewState["ConfirmType"] = value; } } + /// + /// 类型名称 + /// + public string ConfirmTypeName + { + get { return (string)ViewState["ConfirmTypeName"]; } + set { ViewState["ConfirmTypeName"] = value; } + } + protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { this.SubInspectId = Request.Params["SubInspectId"]; this.ConfirmType = int.Parse(Request.Params["ConfirmType"]); + + if (this.ConfirmType == 1) + { + this.ConfirmTypeName = "分包商"; + } + if (this.ConfirmType == 2) + { + this.ConfirmTypeName = "承包商"; + } + if (this.ConfirmType == 3) + { + this.ConfirmTypeName = "监理"; + } + if (this.ConfirmType == 4) + { + this.ConfirmTypeName = "业主"; + } + this.BindGrid(); } } @@ -60,26 +92,27 @@ namespace FineUIPro.Web.TestRun.BeforeTestRun model.WorkInspectName = item.WorkInspectName; model.ConfirmType = this.ConfirmType; model.InspectionIllustrate = item.InspectionIllustrate; + model.ConfirmTypeName = this.ConfirmTypeName; //1=分包商2=承包商3=监理4=业主 if (this.ConfirmType == 1) { model.IsPass = item.SubcontractorIsPass; - model.ConfirmTypeName = "分包商"; + model.Remark = item.SubcontractorRemark; } if (this.ConfirmType == 2) { model.IsPass = item.ContractorIsPass; - model.ConfirmTypeName = "承包商"; + model.Remark = item.ContractorRemark; } if (this.ConfirmType == 3) { model.IsPass = item.SupervisionIsPass; - model.ConfirmTypeName = "监理"; + model.Remark = item.SupervisionRemark; } if (this.ConfirmType == 4) { model.IsPass = item.OwnerIsPass; - model.ConfirmTypeName = "业主"; + model.Remark = item.OwnerRemark; } data.Add(model); } @@ -127,18 +160,22 @@ namespace FineUIPro.Web.TestRun.BeforeTestRun if (this.ConfirmType == 1) { model.SubcontractorIsPass = int.Parse(values.Value("IsPass")); + model.SubcontractorRemark = values.Value("Remark"); } else if (this.ConfirmType == 2) { model.ContractorIsPass = int.Parse(values.Value("IsPass")); + model.ContractorRemark = values.Value("Remark"); } else if (this.ConfirmType == 3) { model.SupervisionIsPass = int.Parse(values.Value("IsPass")); + model.SupervisionRemark = values.Value("Remark"); } else if (this.ConfirmType == 4) { model.OwnerIsPass = int.Parse(values.Value("IsPass")); + model.OwnerRemark = values.Value("Remark"); } } Funs.DB.SubmitChanges(); @@ -243,6 +280,10 @@ namespace FineUIPro.Web.TestRun.BeforeTestRun /// 是否通过 /// public int? IsPass { get; set; } + /// + /// 备注 + /// + public string Remark { get; set; } } @@ -253,5 +294,528 @@ namespace FineUIPro.Web.TestRun.BeforeTestRun { BindGrid(); } + + /// + /// 导出 + /// + protected void btnExport_Click(object sender, EventArgs e) + { + string rootPath = Server.MapPath("~/") + Const.ExcelUrl; + //导出文件 + string filePath = rootPath + DateTime.Now.ToString("yyyyMMddhhmmss") + "\\"; + if (!Directory.Exists(filePath)) + { + Directory.CreateDirectory(filePath); + } + string ReportFileName = filePath + this.ConfirmTypeName + "确认签字.xlsx"; + //获取工作包检查表 + var termData = from a in Funs.DB.PreRun_SubInspectTerm + join b in Funs.DB.Base_Project on a.ProjectId equals b.ProjectId + join c in Funs.DB.PreRun_WorkPackage on a.WorkPackId equals c.WorkPackId + join zz in Funs.DB.PreRun_SysDevice on a.InstallationId equals zz.PreRunId//装置 + join gx in Funs.DB.PreRun_SysDevice on a.ProcessesId equals gx.PreRunId//工序 + join xt in Funs.DB.PreRun_SysDevice on a.SystemId equals xt.PreRunId//系统 + select new { a.SubInspectId, a.ProjectId, b.ProjectName, b.ShortName, b.ProjectCode, a.InstallationId, a.ProcessesId, a.SystemId, a.SubSystemId, a.WorkPackId, a.InspectResult, a.Subcontractor, a.Contractor, a.Supervision, a.Owner, a.InspectionIsAllPass, a.SubcontractorIsAllPass, a.ContractorIsAllPass, a.SupervisionIsAllPass, a.OwnerIsAllPass, a.WorkPackType, a.PropertyTechnologyId, a.InspectTime, a.AddUser, a.AddTime, c.WorkPackName, zzName = zz.PreRunName, gxName = gx.PreRunName, xtName = xt.PreRunName }; + if (termData != null) + { + var termModel = termData.FirstOrDefault(); + //获取工作包检查项表 + var termItems = Funs.DB.PreRun_SubInspectTermItem.Where(x => x.SubInspectId == this.SubInspectId).OrderBy(x => x.Sort).ToList(); + //获取管道或者设备号 + var termCodes = string.Empty; + //1=管道2=设备 + var ids = termModel.PropertyTechnologyId.Split(',').ToList(); + if (termModel.WorkPackType == 1) + { + var codeDatas = Funs.DB.PreRun_PropertySysPiping.Where(x => ids.Contains(x.PropertyId)).ToList(); + if (codeDatas.Count > 0) + { + termCodes = string.Join(",", codeDatas.ConvertAll(x => x.PipingCode)); + } + } + else + { + var codeDatas = Funs.DB.PreRun_TechnologySysPiping.Where(x => ids.Contains(x.TechnologyId)).ToList(); + if (codeDatas.Count > 0) + { + termCodes = string.Join(",", codeDatas.ConvertAll(x => x.TagNumber)); + } + } + + int rowIndex = 0; + XSSFWorkbook hssfworkbook = new XSSFWorkbook(); + XSSFSheet ws = (XSSFSheet)hssfworkbook.CreateSheet(this.ConfirmTypeName + "确认签字"); + + #region 列宽 + + ws.SetColumnWidth(0, (7 * 256)); + ws.SetColumnWidth(1, (4 * 256)); + ws.SetColumnWidth(2, (4 * 256)); + ws.SetColumnWidth(3, (4 * 256)); + ws.SetColumnWidth(4, (10 * 256)); + ws.SetColumnWidth(5, (10 * 256)); + ws.SetColumnWidth(6, (10 * 256)); + ws.SetColumnWidth(7, (10 * 256)); + ws.SetColumnWidth(8, (3 * 256)); + ws.SetColumnWidth(9, (3 * 256)); + ws.SetColumnWidth(10, (3 * 256)); + ws.SetColumnWidth(11, (3 * 256)); + ws.SetColumnWidth(12, (3 * 256)); + ws.SetColumnWidth(13, (3 * 256)); + ws.SetColumnWidth(14, (3 * 256)); + ws.SetColumnWidth(15, (3 * 256)); + ws.SetColumnWidth(16, (3 * 256)); + ws.SetColumnWidth(17, (3 * 256)); + + #endregion + + #region 样式 + //头部样式居中 + ICellStyle titleStyle = SetExcelStyle(hssfworkbook, BorderStyle.Thin, BorderStyle.Thin, BorderStyle.Thin, BorderStyle.Thin, VerticalAlignment.Center, HorizontalAlignment.Center, 14, true, true); + //头部样式靠左 + ICellStyle leftTitleStyle = SetExcelStyle(hssfworkbook, BorderStyle.Thin, BorderStyle.Thin, BorderStyle.Thin, BorderStyle.Thin, VerticalAlignment.Center, HorizontalAlignment.Left, 14, true, true); + //公共样式 + ICellStyle style = SetExcelStyle(hssfworkbook, BorderStyle.Thin, BorderStyle.Thin, BorderStyle.Thin, BorderStyle.Thin, VerticalAlignment.Center, HorizontalAlignment.Center, 10.5, true); + //公共样式靠左 + ICellStyle leftStyle = SetExcelStyle(hssfworkbook, BorderStyle.Thin, BorderStyle.Thin, BorderStyle.Thin, BorderStyle.Thin, VerticalAlignment.Center, HorizontalAlignment.Left, 10.5, true); + //公共样式靠左上对其 + ICellStyle leftTopStyle = SetExcelStyle(hssfworkbook, BorderStyle.Thin, BorderStyle.Thin, BorderStyle.Thin, BorderStyle.Thin, VerticalAlignment.Top, HorizontalAlignment.Left, 10.5, true); + //公共样式加粗 + ICellStyle styleBold = SetExcelStyle(hssfworkbook, BorderStyle.Thin, BorderStyle.Thin, BorderStyle.Thin, BorderStyle.Thin, VerticalAlignment.Center, HorizontalAlignment.Center, 10.5, true, true); + + #endregion + + #region 头部 + + ws = ExcelCreateRowTitle(ws, hssfworkbook, style, rowIndex, rowIndex + 5, 0, 17); + //行1 + var region = new CellRangeAddress(rowIndex, rowIndex + 2, 0, 0); + ws.AddMergedRegion(region); + byte[] bytes = File.ReadAllBytes(Server.MapPath("~/") + "Images\\Template.png"); + int pictureIdx = hssfworkbook.AddPicture(bytes, PictureType.JPEG); + IDrawing patriarch = ws.CreateDrawingPatriarch(); + IClientAnchor anchor = patriarch.CreateAnchor(0, 0, 0, 0, 0, rowIndex, 1, rowIndex + 2); + IPicture pict = patriarch.CreatePicture(anchor, pictureIdx); + //pict.Resize(); + region = new CellRangeAddress(rowIndex, rowIndex + 2, 1, 3); + ws.AddMergedRegion(region); + ws.GetRow(rowIndex).GetCell(1).SetCellValue("中国五环工程有限公司"); + ws.GetRow(rowIndex).GetCell(1).CellStyle = + ws.GetRow(rowIndex).GetCell(2).CellStyle = + ws.GetRow(rowIndex).GetCell(3).CellStyle = leftTitleStyle; + region = new CellRangeAddress(rowIndex, rowIndex, 4, 7); + ws.AddMergedRegion(region); + ws.GetRow(rowIndex).GetCell(4).SetCellValue(termModel.ProjectName); + ws.GetRow(rowIndex).GetCell(4).CellStyle = style; + region = new CellRangeAddress(rowIndex, rowIndex, 8, 12); + ws.AddMergedRegion(region); + ws.GetRow(rowIndex).GetCell(8).SetCellValue("项目号"); + ws.GetRow(rowIndex).GetCell(8).CellStyle = style; + region = new CellRangeAddress(rowIndex, rowIndex, 13, 17); + ws.AddMergedRegion(region); + ws.GetRow(rowIndex).GetCell(13).SetCellValue(termModel.ProjectCode); + ws.GetRow(rowIndex).GetCell(13).CellStyle = style; + region = new CellRangeAddress(rowIndex + 1, rowIndex + 1, 4, 7); + ws.AddMergedRegion(region); + ws.GetRow(rowIndex + 1).GetCell(4).SetCellValue($"({termModel.zzName})({termModel.gxName}/{termModel.xtName})"); + ws.GetRow(rowIndex + 1).GetCell(4).CellStyle = style; + region = new CellRangeAddress(rowIndex + 1, rowIndex + 1, 8, 12); + ws.AddMergedRegion(region); + ws.GetRow(rowIndex + 1).GetCell(8).SetCellValue("(文件号)"); + ws.GetRow(rowIndex + 1).GetCell(8).CellStyle = style; + region = new CellRangeAddress(rowIndex + 1, rowIndex + 1, 13, 17); + ws.AddMergedRegion(region); + ws.GetRow(rowIndex + 1).GetCell(13).SetCellValue(""); + ws.GetRow(rowIndex + 1).GetCell(13).CellStyle = style; + region = new CellRangeAddress(rowIndex + 2, rowIndex + 2, 4, 7); + ws.AddMergedRegion(region); + ws.GetRow(rowIndex + 2).GetCell(4).SetCellValue($"{termModel.WorkPackName}条件检查表"); + ws.GetRow(rowIndex + 2).GetCell(4).CellStyle = titleStyle; + region = new CellRangeAddress(rowIndex + 2, rowIndex + 2, 8, 12); + ws.AddMergedRegion(region); + ws.GetRow(rowIndex + 2).GetCell(8).SetCellValue("第 1 页"); + ws.GetRow(rowIndex + 2).GetCell(8).CellStyle = style; + region = new CellRangeAddress(rowIndex + 2, rowIndex + 2, 13, 17); + ws.AddMergedRegion(region); + ws.GetRow(rowIndex + 2).GetCell(13).SetCellValue("共 1 页"); + ws.GetRow(rowIndex + 2).GetCell(13).CellStyle = style; + //行4,行5 + region = new CellRangeAddress(rowIndex + 3, rowIndex + 4, 0, 2); + ws.AddMergedRegion(region); + ws.GetRow(rowIndex + 3).GetCell(0).CellStyle = style; + ws.GetRow(rowIndex + 3).GetCell(0).SetCellValue(termModel.WorkPackType == 1 ? "管道号" : "设备号"); + region = new CellRangeAddress(rowIndex + 3, rowIndex + 4, 3, 11); + ws.AddMergedRegion(region); + ws.GetRow(rowIndex + 3).GetCell(3).CellStyle = leftStyle; + ws.GetRow(rowIndex + 3).GetCell(3).SetCellValue(termCodes); + region = new CellRangeAddress(rowIndex + 3, rowIndex + 3, 12, 17); + ws.AddMergedRegion(region); + ws.GetRow(rowIndex + 3).GetCell(12).CellStyle = style; + ws.GetRow(rowIndex + 3).GetCell(12).SetCellValue("检查日期"); + region = new CellRangeAddress(rowIndex + 4, rowIndex + 4, 12, 17); + ws.AddMergedRegion(region); + ws.GetRow(rowIndex + 4).GetCell(12).CellStyle = style; + ws.GetRow(rowIndex + 4).GetCell(12).SetCellValue(DateTime.Now.ToString("yyyy年MM月dd日")); + //行6 + ws.GetRow(rowIndex + 5).GetCell(0).CellStyle = styleBold; + ws.GetRow(rowIndex + 5).GetCell(0).SetCellValue("序号"); + region = new CellRangeAddress(rowIndex + 5, rowIndex + 5, 1, 7); + ws.AddMergedRegion(region); + ws.GetRow(rowIndex + 5).GetCell(1).CellStyle = styleBold; + ws.GetRow(rowIndex + 5).GetCell(1).SetCellValue("检查项目"); + region = new CellRangeAddress(rowIndex + 5, rowIndex + 5, 8, 12); + ws.AddMergedRegion(region); + ws.GetRow(rowIndex + 5).GetCell(8).CellStyle = styleBold; + ws.GetRow(rowIndex + 5).GetCell(8).SetCellValue("结果"); + region = new CellRangeAddress(rowIndex + 5, rowIndex + 5, 13, 17); + ws.AddMergedRegion(region); + ws.GetRow(rowIndex + 5).GetCell(13).CellStyle = styleBold; + ws.GetRow(rowIndex + 5).GetCell(13).SetCellValue("备注"); + + #endregion + + #region 表格 + + var start = rowIndex + 6; + var end = rowIndex + 5 + termItems.Count; + + ws = ExcelCreateRowTitle(ws, hssfworkbook, style, start, end, 0, 17); + + //合并单元格 + for (int hb = start; hb <= end; hb++) + { + region = new CellRangeAddress(hb, hb, 1, 7); + ws.AddMergedRegion(region); + region = new CellRangeAddress(hb, hb, 8, 12); + ws.AddMergedRegion(region); + region = new CellRangeAddress(hb, hb, 13, 17); + ws.AddMergedRegion(region); + } + + //数据 + int num = 1; + var dataIndex = 6; + foreach (var item in termItems) + { + //序号 + ws.GetRow(dataIndex).GetCell(0).SetCellValue(num); + //检查项目 + ws.GetRow(dataIndex).GetCell(1).SetCellValue(item.WorkInspectName); + ws.GetRow(dataIndex).GetCell(1).CellStyle = leftStyle; + //结果 + ws.GetRow(dataIndex).GetCell(8).SetCellValue(""); + //备注 + ws.GetRow(dataIndex).GetCell(13).SetCellValue(""); + dataIndex++; + num++; + } + rowIndex = start + termItems.Count; + + #endregion + + #region 尾部 + + ws = ExcelCreateRowTitle(ws, hssfworkbook, style, rowIndex, rowIndex, 0, 17, 100); + //行1 + ws.GetRow(rowIndex).GetCell(0).SetCellValue("结论"); + region = new CellRangeAddress(rowIndex, rowIndex, 1, 17); + ws.AddMergedRegion(region); + ws.GetRow(rowIndex).GetCell(1).SetCellValue("是否同意进行冲洗吹扫(包括整改意见):"); + ws.GetRow(rowIndex).GetCell(1).CellStyle = leftTopStyle; + //行2 + ws = ExcelCreateRowTitle(ws, hssfworkbook, style, rowIndex + 1, rowIndex + 1, 0, 17, 80); + ws.GetRow(rowIndex + 1).GetCell(0).SetCellValue("检查人员"); + region = new CellRangeAddress(rowIndex + 1, rowIndex + 1, 1, 4); + ws.AddMergedRegion(region); + ws.GetRow(rowIndex + 1).GetCell(1).SetCellValue("施工单位:"); + ws.GetRow(rowIndex + 1).GetCell(1).CellStyle = leftTopStyle; + region = new CellRangeAddress(rowIndex + 1, rowIndex + 1, 5, 6); + ws.AddMergedRegion(region); + ws.GetRow(rowIndex + 1).GetCell(5).SetCellValue("总承包商:"); + ws.GetRow(rowIndex + 1).GetCell(5).CellStyle = leftTopStyle; + region = new CellRangeAddress(rowIndex + 1, rowIndex + 1, 7, 11); + ws.AddMergedRegion(region); + ws.GetRow(rowIndex + 1).GetCell(7).SetCellValue("监理:"); + ws.GetRow(rowIndex + 1).GetCell(7).CellStyle = leftTopStyle; + region = new CellRangeAddress(rowIndex + 1, rowIndex + 1, 12, 17); + ws.AddMergedRegion(region); + ws.GetRow(rowIndex + 1).GetCell(12).SetCellValue("业主:"); + ws.GetRow(rowIndex + 1).GetCell(12).CellStyle = leftTopStyle; + + #endregion + + ws.PrintSetup.Landscape = false; + ws.PrintSetup.PaperSize = 9; + ws.ForceFormulaRecalculation = true; + using (FileStream filess = File.OpenWrite(ReportFileName)) + { + hssfworkbook.Write(filess); + } + FileInfo filet = new FileInfo(ReportFileName); + Response.Clear(); + Response.Charset = "GB2312"; + Response.ContentEncoding = System.Text.Encoding.UTF8; + // 添加头信息,为"文件下载/另存为"对话框指定默认文件名 + Response.AddHeader("Content-Disposition", "attachment; filename=" + Server.UrlEncode(this.ConfirmTypeName + "确认签字.xlsx")); + // 添加头信息,指定文件大小,让浏览器能够显示下载进度 + Response.AddHeader("Content-Length", filet.Length.ToString()); + // 指定返回的是一个不能被客户端读取的流,必须被下载 + Response.ContentType = "application/ms-excel"; + // 把文件流发送到客户端 + Response.WriteFile(filet.FullName); + // 停止页面的执行 + Response.End(); + } + } + + /// + /// 导入 + /// + protected void btnImport_Click(object sender, EventArgs e) + { + try + { + if (this.fileData.HasFile == false) + { + ShowNotify("请选择excel文件!", MessageBoxIcon.Warning); + return; + } + string IsXls = Path.GetExtension(this.fileData.FileName).ToString().Trim().ToLower(); + if (IsXls != ".xls" && IsXls != ".xlsx") + { + ShowNotify("excel文件类型错误!", MessageBoxIcon.Warning); + return; + } + string rootPath = Server.MapPath("~/"); + string initFullPath = rootPath + Const.ExcelUrl; + if (!Directory.Exists(initFullPath)) + { + Directory.CreateDirectory(initFullPath); + } + //指定上传文件名称 + string fileUrl = BLL.Funs.GetNewFileName() + IsXls; + //上传文件路径 + string filePath = initFullPath + fileUrl; + //文件上传服务器 + this.fileData.PostedFile.SaveAs(filePath); + //文件上传服务器后的名称 + string fileName = rootPath + Const.ExcelUrl + fileUrl; + //读取Excel + DataSet ds = NPOIHelper.ExcelToDataSet(fileName, out string message, false); + if (ds == null) + { + ShowNotify("模板错误,请从系统下载正确的模板!", MessageBoxIcon.Warning); + return; + } + if (!string.IsNullOrWhiteSpace(message)) + { + ShowNotify(message, MessageBoxIcon.Warning); + return; + } + if (ds.Tables[0].Rows.Count > 6) + { + var fileVerify = VerifyFile(ds); + if (!fileVerify) + { + ShowNotify("请使用导出的Excel作为模板!", MessageBoxIcon.Warning); + return; + } + List list = new List(); + //数据导入 + for (int i = 6; i < ds.Tables[0].Rows.Count; i++) + { + if (string.IsNullOrWhiteSpace(ds.Tables[0].Rows[i][1].ToString())) continue; + if (string.IsNullOrWhiteSpace(ds.Tables[0].Rows[i][8].ToString())) continue; + var model = Funs.DB.PreRun_SubInspectTermItem.FirstOrDefault(x => x.WorkInspectName.Trim() == ds.Tables[0].Rows[i][1].ToString().Trim()); + if (model == null) continue; + var resultStr = ds.Tables[0].Rows[i][8].ToString(); + var remark = ds.Tables[0].Rows[i][13].ToString(); + var isPass = 0; + if (resultStr.Trim() == "通过") + { + isPass = 1; + } + if (this.ConfirmType == 1) + { + model.SubcontractorIsPass = isPass; + if (!string.IsNullOrWhiteSpace(remark)) + { + model.SubcontractorRemark = remark; + } + } + else if (this.ConfirmType == 2) + { + model.ContractorIsPass = isPass; + if (!string.IsNullOrWhiteSpace(remark)) + { + model.ContractorRemark = remark; + } + } + else if (this.ConfirmType == 3) + { + model.SupervisionIsPass = isPass; + if (!string.IsNullOrWhiteSpace(remark)) + { + model.SupervisionRemark = remark; + } + } + else if (this.ConfirmType == 4) + { + model.OwnerIsPass = isPass; + if (!string.IsNullOrWhiteSpace(remark)) + { + model.OwnerRemark = remark; + } + } + Funs.DB.SubmitChanges(); + } + } + else + { + ShowNotify("文件无数据!", MessageBoxIcon.Warning); + } + var subModel = Funs.DB.PreRun_SubInspectTerm.FirstOrDefault(x => x.SubInspectId == this.SubInspectId); + if (subModel != null) + { + //1=分包商2=承包商3=监理4=业主 + if (this.ConfirmType == 1) + { + if (Funs.DB.PreRun_SubInspectTermItem.Count(x => x.SubInspectId == this.SubInspectId && x.SubcontractorIsPass.GetValueOrDefault() != 1) == 0) + { + subModel.SubcontractorIsAllPass = 1; + } + else + { + subModel.SubcontractorIsAllPass = 0; + } + } + else if (this.ConfirmType == 2) + { + if (Funs.DB.PreRun_SubInspectTermItem.Count(x => x.SubInspectId == this.SubInspectId && x.ContractorIsPass.GetValueOrDefault() != 1) == 0) + { + subModel.ContractorIsAllPass = 1; + } + else + { + subModel.ContractorIsAllPass = 0; + } + } + else if (this.ConfirmType == 3) + { + if (Funs.DB.PreRun_SubInspectTermItem.Count(x => x.SubInspectId == this.SubInspectId && x.SupervisionIsPass.GetValueOrDefault() != 1) == 0) + { + subModel.SupervisionIsAllPass = 1; + } + else + { + subModel.SupervisionIsAllPass = 0; + } + } + else if (this.ConfirmType == 4) + { + if (Funs.DB.PreRun_SubInspectTermItem.Count(x => x.SubInspectId == this.SubInspectId && x.OwnerIsPass.GetValueOrDefault() != 1) == 0) + { + subModel.OwnerIsAllPass = 1; + } + else + { + subModel.OwnerIsAllPass = 0; + } + } + Funs.DB.SubmitChanges(); + } + BindGrid(); + fileData.Reset(); + ShowNotify("导入成功!", MessageBoxIcon.Success); + } + catch (Exception ex) + { + ShowNotify(ex.Message, MessageBoxIcon.Warning); + } + } + + #region 私有方法 + + private bool VerifyFile(DataSet ds) + { + var result = true; + + if (ds.Tables[0].Rows[5][0].ToString() != "序号") result = false; + if (ds.Tables[0].Rows[5][1].ToString() != "检查项目") result = false; + if (ds.Tables[0].Rows[5][8].ToString() != "结果") result = false; + if (ds.Tables[0].Rows[5][13].ToString() != "备注") result = false; + + return result; + } + + /// + /// 获取某一列的所有值 + /// + /// 列数据类型 + /// 数据表 + /// 列名 + /// + public static List GetColumnValues(DataTable dtSource, string filedName) + { + return (from r in dtSource.AsEnumerable() select r.Field(filedName)).ToList(); + } + + /// + /// 验证datatable某列是否存在重复 + /// + /// + public bool HasRepeatData(DataTable dt, string[] colName) + { + bool flag = false; + DataView myDataView = new DataView(dt); + if (myDataView.ToTable(true, colName).Rows.Count < dt.Rows.Count) + { + flag = true; + } + return flag; + } + + /// + /// 创建样式 + /// + /// + public static ICellStyle SetExcelStyle(XSSFWorkbook wb, BorderStyle Bottom, BorderStyle Left, BorderStyle Right, BorderStyle Top, VerticalAlignment VerAig, HorizontalAlignment HorAig, double FontSize, bool WrapText = true, bool Bold = false, string FontName = "宋体") + { + ICellStyle style = wb.CreateCellStyle(); + style.BorderBottom = Bottom; + style.BorderLeft = Left; + style.BorderRight = Right; + style.BorderTop = Top; + style.VerticalAlignment = VerAig; + style.Alignment = HorAig; + IFont font = wb.CreateFont(); + font.FontHeightInPoints = FontSize; + font.IsBold = Bold; + font.FontName = FontName; + style.SetFont(font); + style.WrapText = WrapText; + return style; + } + + /// + /// 创建头部 + /// + /// + private XSSFSheet ExcelCreateRowTitle(XSSFSheet ws, XSSFWorkbook hssfworkbook, ICellStyle style, int sRows, int eRows, int cStart, int cEnd, float height = 21) + { + for (int i = sRows; i <= eRows; i++) + { + ws.CreateRow(i); + ws.GetRow(i).HeightInPoints = height; + for (int j = cStart; j <= cEnd; j++) + { + ws.GetRow(i).CreateCell(j); + ws.GetRow(i).CreateCell(j).CellStyle = style; + } + } + return ws; + } + + #endregion } } \ No newline at end of file diff --git a/SGGL/FineUIPro.Web/TestRun/BeforeTestRun/InspectWanderAboutConfirm.aspx.designer.cs b/SGGL/FineUIPro.Web/TestRun/BeforeTestRun/InspectWanderAboutConfirm.aspx.designer.cs index 7f26c159..d8b837ef 100644 --- a/SGGL/FineUIPro.Web/TestRun/BeforeTestRun/InspectWanderAboutConfirm.aspx.designer.cs +++ b/SGGL/FineUIPro.Web/TestRun/BeforeTestRun/InspectWanderAboutConfirm.aspx.designer.cs @@ -59,6 +59,24 @@ namespace FineUIPro.Web.TestRun.BeforeTestRun /// protected global::FineUIPro.Toolbar Toolbar1; + /// + /// fileData 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUIPro.FileUpload fileData; + + /// + /// btnImport 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUIPro.Button btnImport; + /// /// ToolbarFill 控件。 /// @@ -68,6 +86,15 @@ namespace FineUIPro.Web.TestRun.BeforeTestRun /// protected global::FineUIPro.ToolbarFill ToolbarFill; + /// + /// btnExport 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUIPro.Button btnExport; + /// /// btnSave 控件。 /// @@ -86,6 +113,15 @@ namespace FineUIPro.Web.TestRun.BeforeTestRun /// protected global::FineUIPro.DropDownList ddlrenderIsPass; + /// + /// txtRemark 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUIPro.TextBox txtRemark; + /// /// Window1 控件。 /// diff --git a/SGGL/FineUIPro.Web/TestRun/BeforeTestRun/SubInspectTerm.aspx b/SGGL/FineUIPro.Web/TestRun/BeforeTestRun/SubInspectTerm.aspx index c24d23d3..42575527 100644 --- a/SGGL/FineUIPro.Web/TestRun/BeforeTestRun/SubInspectTerm.aspx +++ b/SGGL/FineUIPro.Web/TestRun/BeforeTestRun/SubInspectTerm.aspx @@ -27,7 +27,7 @@ - + @@ -63,7 +63,7 @@ - + @@ -111,45 +111,79 @@ diff --git a/SGGL/FineUIPro.Web/TestRun/BeforeTestRun/SubInspectTerm.aspx.cs b/SGGL/FineUIPro.Web/TestRun/BeforeTestRun/SubInspectTerm.aspx.cs index 0d8e489f..643b2135 100644 --- a/SGGL/FineUIPro.Web/TestRun/BeforeTestRun/SubInspectTerm.aspx.cs +++ b/SGGL/FineUIPro.Web/TestRun/BeforeTestRun/SubInspectTerm.aspx.cs @@ -175,7 +175,7 @@ namespace FineUIPro.Web.TestRun.BeforeTestRun /// public void BindGrid(bool typechange = true) { - var result = new List(); + var result = new List(); var workPackId = this.tvControlItem.SelectedNodeID.Split('|')[0]; var subSystemId = this.tvControlItem.SelectedNodeID.Split('|')[1]; var subInspectId = string.Empty; @@ -258,7 +258,8 @@ namespace FineUIPro.Web.TestRun.BeforeTestRun { foreach (var item in list) { - var model = new Brid_SubInspectTermItem(); + var model = new PreRun_SubInspectTermItem(); + model.TermItemId = item.TermItemId; model.SubItemId = item.SubItemId; model.ProjectId = item.ProjectId; model.WorkPackId = item.WorkPackId; @@ -272,44 +273,46 @@ namespace FineUIPro.Web.TestRun.BeforeTestRun model.InspectionResults = item.InspectionResults; model.InspectionIllustrate = item.InspectionIllustrate; model.Sort = item.Sort; - model.isChick = true; result.Add(model); } } - //获取预加载的数据 - var defaultDatas = Funs.DB.PreRun_WorkInspectTemplate.Where(s => s.WorkPackId == workPackId).OrderBy(x => x.Sort).ToList(); - if (defaultDatas.Count > 0) + else { - int index = list.Count + 1; - foreach (var item in defaultDatas) + //获取预加载的数据 + var defaultDatas = Funs.DB.PreRun_WorkInspectTemplate.Where(s => s.WorkPackId == workPackId).OrderBy(x => x.Sort).ToList(); + if (defaultDatas.Count > 0) { - if (list.Count(x => x.WorkInspectName == item.WorkInspectName) == 0) + int index = list.Count + 1; + foreach (var item in defaultDatas) { - var model = new Brid_SubInspectTermItem(); - model.SubItemId = Guid.NewGuid().ToString(); - model.ProjectId = this.CurrUser.LoginProjectId; - model.WorkPackId = item.WorkPackId; - model.WorkInspectId = item.WorkInspectId; - model.WorkInspectName = item.WorkInspectName; - model.InstallationId = subSysModel.InstallationId; - model.ProcessesId = subSysModel.ProcessesId; - model.SystemId = subSysModel.SystemId; - model.SubSystemId = subSysModel.PreRunId; - model.Sort = index + 1; - model.isChick = false; - result.Add(model); - index++; + if (list.Count(x => x.WorkInspectName == item.WorkInspectName) == 0) + { + var model = new PreRun_SubInspectTermItem(); + model.TermItemId = Guid.NewGuid().ToString(); + model.SubItemId = Guid.NewGuid().ToString(); + model.ProjectId = this.CurrUser.LoginProjectId; + model.WorkPackId = item.WorkPackId; + model.WorkInspectId = item.WorkInspectId; + model.WorkInspectName = item.WorkInspectName; + model.InstallationId = subSysModel.InstallationId; + model.ProcessesId = subSysModel.ProcessesId; + model.SystemId = subSysModel.SystemId; + model.SubSystemId = subSysModel.PreRunId; + model.Sort = index + 1; + result.Add(model); + index++; + } } } } Grid1.DataSource = result; Grid1.DataBind(); - if (result.Count(x => x.isChick) > 0) - { - //默认选中行 - var checkids = result.Where(x => x.isChick).Select(a => a.SubItemId); - Grid1.SelectedRowIDArray = checkids.ToArray(); - } + //if (result.Count(x => x.isChick) > 0) + //{ + // //默认选中行 + // var checkids = result.Where(x => x.isChick).Select(a => a.SubItemId); + // Grid1.SelectedRowIDArray = checkids.ToArray(); + //} //检查人绑定 var userList = from user in Funs.DB.Sys_User join projectrole in Funs.DB.Project_ProjectUser on user.UserId equals projectrole.UserId where projectrole.ProjectId == this.CurrUser.LoginProjectId select user; @@ -345,7 +348,7 @@ namespace FineUIPro.Web.TestRun.BeforeTestRun if (e.CommandName == "Delete") { string rowID = e.RowID; - var model = Funs.DB.PreRun_SubInspectTermItem.FirstOrDefault(p => p.SubItemId == rowID); + var model = Funs.DB.PreRun_SubInspectTermItem.FirstOrDefault(p => p.TermItemId == rowID); if (model != null) { Funs.DB.PreRun_SubInspectTermItem.DeleteOnSubmit(model); @@ -356,7 +359,7 @@ namespace FineUIPro.Web.TestRun.BeforeTestRun else { var list = gvList(); - list.RemoveAll(x => x.SubItemId == rowID); + list.RemoveAll(x => x.TermItemId == rowID); Grid1.DataSource = list; Grid1.DataBind(); ShowNotify("删除成功!"); @@ -398,12 +401,6 @@ namespace FineUIPro.Web.TestRun.BeforeTestRun ShowNotify("请选择设备!", MessageBoxIcon.Warning); return; } - if (Grid1.SelectedRowIndexArray.Length == 0) - { - ShowNotify("请选择一条数据!", MessageBoxIcon.Warning); - return; - } - var workPackId = this.tvControlItem.SelectedNodeID.Split('|')[0]; var subSystemId = this.tvControlItem.SelectedNodeID.Split('|')[1]; var subInspectId = string.Empty; @@ -412,22 +409,19 @@ namespace FineUIPro.Web.TestRun.BeforeTestRun subInspectId = this.tvControlItem.SelectedNodeID.Split('|').Last(); } var workPackType = int.Parse(ddlWorkPackType.SelectedValue); - List subTrems = new List(); List subTremItems = new List(); - - //foreach (var item in ddbSysPiping.Values) - //{ var subTrem = Funs.DB.PreRun_SubInspectTerm.FirstOrDefault(x => x.SubInspectId == subInspectId); + var termItems = Funs.DB.PreRun_SubInspectTermItem.Where(x => x.SubInspectId == subInspectId).ToList(); JArray mergedData = Grid1.GetMergedData(); foreach (JObject mergedRow in mergedData) { string status = mergedRow.Value("status"); JObject values = mergedRow.Value("values"); int i = mergedRow.Value("index"); - var subItemId = this.Grid1.Rows[i].DataKeys[0].ToString(); - var workInspectId = this.Grid1.Rows[i].DataKeys[1].ToString(); - if (!Grid1.SelectedRowIndexArray.Contains(i)) continue; + var termItemId = this.Grid1.Rows[i].DataKeys[0].ToString(); + var subItemId = this.Grid1.Rows[i].DataKeys[1].ToString(); + var workInspectId = this.Grid1.Rows[i].DataKeys[2].ToString(); //获取子系统信息 var list = new List(); @@ -460,15 +454,14 @@ namespace FineUIPro.Web.TestRun.BeforeTestRun subTrem.Subcontractor = ddlfbs.SelectedValue; subTrem.Contractor = ddlcbs.SelectedValue; subTrem.Supervision = ddljl.SelectedValue; - subTrem.Owner = ddlyz.SelectedValue; + subTrem.Owner = ddlyz.SelectedValue; Funs.DB.SubmitChanges(); } - - var model = Funs.DB.PreRun_SubInspectTermItem.FirstOrDefault(x => x.SubInspectId == subInspectId); + var model = Funs.DB.PreRun_SubInspectTermItem.FirstOrDefault(x => x.TermItemId == termItemId); if (model == null) { model = new PreRun_SubInspectTermItem(); - model.TermItemId = Guid.NewGuid().ToString(); + model.TermItemId = termItemId; model.SubItemId = subItemId; model.SubInspectId = subTrem.SubInspectId; model.WorkPackId = workPackId; @@ -500,11 +493,19 @@ namespace FineUIPro.Web.TestRun.BeforeTestRun } } - Funs.DB.PreRun_SubInspectTerm.InsertAllOnSubmit(subTrems); - Funs.DB.PreRun_SubInspectTermItem.InsertAllOnSubmit(subTremItems); + if (subTrems != null) Funs.DB.PreRun_SubInspectTerm.InsertAllOnSubmit(subTrems); + if (subTremItems.Count > 0) Funs.DB.PreRun_SubInspectTermItem.InsertAllOnSubmit(subTremItems); + Funs.DB.SubmitChanges(); + if (Funs.DB.PreRun_SubInspectTermItem.Count(x => x.SubInspectId == subTrem.SubInspectId && x.InspectionResults.GetValueOrDefault() != 1) == 0) + { + subTrem.InspectionIsAllPass = 1; + } + else + { + subTrem.InspectionIsAllPass = 0; + } Funs.DB.SubmitChanges(); this.InitTreeMenu(); - //BindGrid(); ShowNotify("保存成功!"); } catch (Exception ex) @@ -526,6 +527,7 @@ namespace FineUIPro.Web.TestRun.BeforeTestRun if (subSysModel != null) { var model = new PreRun_SubInspectTermItem(); + model.TermItemId = Guid.NewGuid().ToString(); model.SubItemId = Guid.NewGuid().ToString(); model.ProjectId = this.CurrUser.LoginProjectId; model.WorkPackId = workPackId; @@ -554,17 +556,18 @@ namespace FineUIPro.Web.TestRun.BeforeTestRun string status = mergedRow.Value("status"); JObject values = mergedRow.Value("values"); int i = mergedRow.Value("index"); - var subItemId = this.Grid1.Rows[i].DataKeys[0].ToString(); - var workInspectId = this.Grid1.Rows[i].DataKeys[1] != null ? this.Grid1.Rows[i].DataKeys[1].ToString() : string.Empty; ; - var subInspectId = this.Grid1.Rows[i].DataKeys[2] != null ? this.Grid1.Rows[i].DataKeys[2].ToString() : string.Empty; - var workPackId = this.Grid1.Rows[i].DataKeys[3].ToString(); - var installationId = this.Grid1.Rows[i].DataKeys[4].ToString(); - var processesId = this.Grid1.Rows[i].DataKeys[4].ToString(); - var systemId = this.Grid1.Rows[i].DataKeys[4].ToString(); - var subSystemId = this.Grid1.Rows[i].DataKeys[4].ToString(); + var termItemId = this.Grid1.Rows[i].DataKeys[0].ToString(); + var subItemId = this.Grid1.Rows[i].DataKeys[1].ToString(); + var workInspectId = this.Grid1.Rows[i].DataKeys[2] != null ? this.Grid1.Rows[i].DataKeys[2].ToString() : string.Empty; ; + var subInspectId = this.Grid1.Rows[i].DataKeys[3] != null ? this.Grid1.Rows[i].DataKeys[3].ToString() : string.Empty; + var workPackId = this.Grid1.Rows[i].DataKeys[4].ToString(); + var installationId = this.Grid1.Rows[i].DataKeys[5].ToString(); + var processesId = this.Grid1.Rows[i].DataKeys[6].ToString(); + var systemId = this.Grid1.Rows[i].DataKeys[7].ToString(); + var subSystemId = this.Grid1.Rows[i].DataKeys[8].ToString(); var model = new PreRun_SubInspectTermItem(); - model = new PreRun_SubInspectTermItem(); + model.TermItemId = termItemId; model.SubItemId = subItemId; model.SubInspectId = subInspectId; model.WorkPackId = workPackId; @@ -608,17 +611,6 @@ namespace FineUIPro.Web.TestRun.BeforeTestRun return result; } - /// - /// 绑定实体 - /// - public class Brid_SubInspectTermItem : PreRun_SubInspectTermItem - { - /// - /// 是否选中 - /// - public bool isChick { get; set; } - } - /// /// 类型 /// diff --git a/SGGL/FineUIPro.Web/TestRun/BeforeTestRun/SysPipingDeviceImport.aspx.cs b/SGGL/FineUIPro.Web/TestRun/BeforeTestRun/SysPipingDeviceImport.aspx.cs index ffd96e50..b025a6ef 100644 --- a/SGGL/FineUIPro.Web/TestRun/BeforeTestRun/SysPipingDeviceImport.aspx.cs +++ b/SGGL/FineUIPro.Web/TestRun/BeforeTestRun/SysPipingDeviceImport.aspx.cs @@ -256,6 +256,7 @@ namespace FineUIPro.Web.TestRun.BeforeTestRun string IsXls = Path.GetExtension(this.fileData.FileName).ToString().Trim().ToLower(); if (IsXls != ".xls" && IsXls != ".xlsx") { + fileData.Reset(); ShowNotify("excel文件类型错误!", MessageBoxIcon.Warning); return; } @@ -277,6 +278,7 @@ namespace FineUIPro.Web.TestRun.BeforeTestRun DataSet ds = NPOIHelper.ExcelToDataSet(fileName, out string message, false); if (ds == null) { + fileData.Reset(); ShowNotify("模板错误,请从系统下载正确的模板!", MessageBoxIcon.Warning); return; } @@ -290,12 +292,14 @@ namespace FineUIPro.Web.TestRun.BeforeTestRun var fileVerify = PropertyVerifyFile(ds); if (!fileVerify) { + fileData.Reset(); ShowNotify("请获取正确模板!", MessageBoxIcon.Warning); return; } var columVerify = HasRepeatData(ds.Tables[0], new string[] { "A" }); if (columVerify) { + fileData.Reset(); ShowNotify("模板中存在管道号相同或管道号为空的数据!", MessageBoxIcon.Warning); return; } @@ -317,6 +321,7 @@ namespace FineUIPro.Web.TestRun.BeforeTestRun { if (string.IsNullOrWhiteSpace(ds.Tables[0].Rows[i][0].ToString())) { + fileData.Reset(); ShowNotify($"第{i}行管道号为空", MessageBoxIcon.Warning); return; } @@ -350,13 +355,16 @@ namespace FineUIPro.Web.TestRun.BeforeTestRun } else { + fileData.Reset(); ShowNotify("文件无数据!", MessageBoxIcon.Warning); } + fileData.Reset(); ZxtgdBrid(); ShowNotify("导入成功!", MessageBoxIcon.Success); } catch (Exception ex) { + fileData.Reset(); ShowNotify(ex.Message, MessageBoxIcon.Warning); } } @@ -494,6 +502,7 @@ namespace FineUIPro.Web.TestRun.BeforeTestRun string IsXls = Path.GetExtension(this.filegyData.FileName).ToString().Trim().ToLower(); if (IsXls != ".xls" && IsXls != ".xlsx") { + filegyData.Reset(); ShowNotify("excel文件类型错误!", MessageBoxIcon.Warning); return; } @@ -515,6 +524,7 @@ namespace FineUIPro.Web.TestRun.BeforeTestRun DataSet ds = NPOIHelper.ExcelToDataSet(fileName, out string message, false); if (ds == null) { + filegyData.Reset(); ShowNotify("模板错误,请从系统下载正确的模板!", MessageBoxIcon.Warning); return; } @@ -528,6 +538,7 @@ namespace FineUIPro.Web.TestRun.BeforeTestRun var fileVerify = TechnologyVerifyFile(ds); if (!fileVerify) { + filegyData.Reset(); ShowNotify("请获取正确模板!", MessageBoxIcon.Warning); return; } @@ -554,6 +565,7 @@ namespace FineUIPro.Web.TestRun.BeforeTestRun { if (model == null) { + filegyData.Reset(); ShowNotify($"{i}行数据存在错误!", MessageBoxIcon.Warning); return; } @@ -616,6 +628,7 @@ namespace FineUIPro.Web.TestRun.BeforeTestRun } if (list.GroupBy(x => x.TagNumber).Count() != list.Count) { + filegyData.Reset(); ShowNotify("模板中存在设备位号相同的数据!", MessageBoxIcon.Warning); return; } @@ -625,13 +638,16 @@ namespace FineUIPro.Web.TestRun.BeforeTestRun } else { + filegyData.Reset(); ShowNotify("文件无数据!", MessageBoxIcon.Warning); } + filegyData.Reset(); ZxtgyBrid(); ShowNotify("导入成功!", MessageBoxIcon.Success); } catch (Exception ex) { + filegyData.Reset(); ShowNotify(ex.Message, MessageBoxIcon.Warning); } } diff --git a/SGGL/Model/Model.cs b/SGGL/Model/Model.cs index 471c6cfa..a1aa9e81 100644 --- a/SGGL/Model/Model.cs +++ b/SGGL/Model/Model.cs @@ -263002,6 +263002,14 @@ namespace Model private System.Nullable _OwnerIsPass; + private string _SubcontractorRemark; + + private string _ContractorRemark; + + private string _SupervisionRemark; + + private string _OwnerRemark; + #region 可扩展性方法定义 partial void OnLoaded(); partial void OnValidate(System.Data.Linq.ChangeAction action); @@ -263062,6 +263070,14 @@ namespace Model partial void OnSupervisionIsPassChanged(); partial void OnOwnerIsPassChanging(System.Nullable value); partial void OnOwnerIsPassChanged(); + partial void OnSubcontractorRemarkChanging(string value); + partial void OnSubcontractorRemarkChanged(); + partial void OnContractorRemarkChanging(string value); + partial void OnContractorRemarkChanged(); + partial void OnSupervisionRemarkChanging(string value); + partial void OnSupervisionRemarkChanged(); + partial void OnOwnerRemarkChanging(string value); + partial void OnOwnerRemarkChanged(); #endregion public PreRun_SubInspectTermItem() @@ -263629,6 +263645,86 @@ namespace Model } } + [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_SubcontractorRemark", DbType="VarChar(1000)")] + public string SubcontractorRemark + { + get + { + return this._SubcontractorRemark; + } + set + { + if ((this._SubcontractorRemark != value)) + { + this.OnSubcontractorRemarkChanging(value); + this.SendPropertyChanging(); + this._SubcontractorRemark = value; + this.SendPropertyChanged("SubcontractorRemark"); + this.OnSubcontractorRemarkChanged(); + } + } + } + + [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_ContractorRemark", DbType="VarChar(1000)")] + public string ContractorRemark + { + get + { + return this._ContractorRemark; + } + set + { + if ((this._ContractorRemark != value)) + { + this.OnContractorRemarkChanging(value); + this.SendPropertyChanging(); + this._ContractorRemark = value; + this.SendPropertyChanged("ContractorRemark"); + this.OnContractorRemarkChanged(); + } + } + } + + [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_SupervisionRemark", DbType="VarChar(1000)")] + public string SupervisionRemark + { + get + { + return this._SupervisionRemark; + } + set + { + if ((this._SupervisionRemark != value)) + { + this.OnSupervisionRemarkChanging(value); + this.SendPropertyChanging(); + this._SupervisionRemark = value; + this.SendPropertyChanged("SupervisionRemark"); + this.OnSupervisionRemarkChanged(); + } + } + } + + [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_OwnerRemark", DbType="VarChar(1000)")] + public string OwnerRemark + { + get + { + return this._OwnerRemark; + } + set + { + if ((this._OwnerRemark != value)) + { + this.OnOwnerRemarkChanging(value); + this.SendPropertyChanging(); + this._OwnerRemark = value; + this.SendPropertyChanged("OwnerRemark"); + this.OnOwnerRemarkChanged(); + } + } + } + public event PropertyChangingEventHandler PropertyChanging; public event PropertyChangedEventHandler PropertyChanged; From 6e7bff7cdf25ae8ad151828139ff8e228dfacf1b Mon Sep 17 00:00:00 2001 From: gaofei1985 <181547018@qq.com> Date: Mon, 16 Oct 2023 14:39:37 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../版本日志/SGGLDB_WH_2023-10-16.sql | 11 +- SGGL/BLL/API/HSSE/APITestRecordService.cs | 111 ++++++++++++++++++ .../HSSE/Check/CheckSpecial.aspx | 17 +-- .../HSSE/Check/CheckSpecial.aspx.cs | 33 +++--- .../HSSE/Check/CheckSpecial.aspx.designer.cs | 54 +++++---- SGGL/FineUIPro.Web/HSSE/EduTrain/Plan.aspx | 2 +- .../HSSE/EduTrain/TrainRecord.aspx | 3 + .../HSSE/EduTrain/TrainRecord.aspx.cs | 16 +++ .../EduTrain/TrainRecord.aspx.designer.cs | 77 ++++++------ SGGL/Model/Model.cs | 24 ++++ .../Controllers/HSSE/TestRecordController.cs | 24 +++- 11 files changed, 287 insertions(+), 85 deletions(-) diff --git a/DataBase/版本日志/SGGLDB_WH_2023-10-16.sql b/DataBase/版本日志/SGGLDB_WH_2023-10-16.sql index 70f2f296..87ccdd7c 100644 --- a/DataBase/版本日志/SGGLDB_WH_2023-10-16.sql +++ b/DataBase/版本日志/SGGLDB_WH_2023-10-16.sql @@ -9,4 +9,13 @@ truncate table PreRun_InspectTermApproveRecords alter table PreRun_SubInspectTermItem add SubcontractorRemark varchar(1000) NULL--ְ̱ע alter table PreRun_SubInspectTermItem add ContractorRemark varchar(1000) NULL--а̱ע alter table PreRun_SubInspectTermItem add SupervisionRemark varchar(1000) NULL--ע -alter table PreRun_SubInspectTermItem add OwnerRemark varchar(1000) NULL--ҵע \ No newline at end of file +alter table PreRun_SubInspectTermItem add OwnerRemark varchar(1000) NULL--ҵע +GO + + + + + +--ѵ¼Ӷά +alter table EduTrain_TrainRecord add QRCodeUrl nvarchar(2000) null +GO \ No newline at end of file diff --git a/SGGL/BLL/API/HSSE/APITestRecordService.cs b/SGGL/BLL/API/HSSE/APITestRecordService.cs index 2eaa488a..2a973ae5 100644 --- a/SGGL/BLL/API/HSSE/APITestRecordService.cs +++ b/SGGL/BLL/API/HSSE/APITestRecordService.cs @@ -616,5 +616,116 @@ namespace BLL } } #endregion + + #region 扫码获取培训记录 + /// + /// 培训记录主表实体类 + /// + public class EduTrainRecord { + public string TrainTitle { get; set; } + public string UnitsName { get; set; } + public string TrainType { get; set; } + public string TrainStartDate { get; set; } + public string TeachHour { get; set; } + public string TrainContent { get; set; } + public List ChildList { get; set; } + } + public class EduTrain_TrainRecordDetailDto { + public string PersonName { get; set; } + public string IdCard { get; set; } + public string CheckScore { get; set; } + public string CheckResult { get; set; } + } + + /// + /// 扫码获取培训记录 + /// + /// + /// + public static EduTrainRecord getTestRecordByTestRecordIdQrCode(string TrainingId) + { + using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString)) + { + var getDataLists = from x in db.EduTrain_TrainRecord + where x.TrainingId == TrainingId + select new EduTrainRecord + { + TrainTitle=x.TrainTitle, + UnitsName= getUnitNameByUnitids(x.UnitIds), + TrainType= getTrainTypeNameByTrainTypeId(x.TrainTypeId), + TrainStartDate = string.Format("{0:yyyy-MM-dd}", x.TrainStartDate), + TeachHour=x.TeachHour.ToString(), + TrainContent=x.TrainContent, + ChildList=getChildEduTrainChild(x.TrainingId) + }; + return getDataLists.FirstOrDefault(); + } + } + /// + /// 根据单位id获取单位名称 + /// + /// + /// + private static string getUnitNameByUnitids(string unitId) { + if (!string.IsNullOrEmpty(unitId)) + { + string unitNames = string.Empty; + string[] unitIds = unitId.Split(','); + foreach (var item in unitIds) + { + Model.Base_Unit unit = BLL.UnitService.GetUnitByUnitId(item); + if (unit != null) + { + unitNames += unit.UnitName + ","; + } + } + if (!string.IsNullOrEmpty(unitNames)) + { + unitNames = unitNames.Substring(0, unitNames.LastIndexOf(",")); + } + return unitNames; + } + else { + return ""; + } + } + + private static string getPerIdCardByPersonId(string personId) { + var pmodel = Funs.DB.SitePerson_Person.FirstOrDefault(x => x.PersonId == personId); + if (pmodel != null) + { + return pmodel.IdentityCard; + } + else { + return ""; + } + } + + private static string getTrainTypeNameByTrainTypeId(string TrainTypeId) { + if (!string.IsNullOrEmpty(TrainTypeId)) + { + return BLL.TrainTypeService.GetTrainTypeById(TrainTypeId).TrainTypeName; + } + else { + return ""; + } + } + private static List getChildEduTrainChild(string TrainingId) { + using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString)) + { + var getDataLists = from x in db.View_EduTrain_TrainRecordDetail + where x.TrainingId == TrainingId + select new EduTrain_TrainRecordDetailDto + { + PersonName=x.PersonName, + IdCard= getPerIdCardByPersonId(x.PersonId), + CheckScore=x.CheckScore.ToString(), + CheckResult=x.CheckResult==true?"合格":"不合格" + + }; + return getDataLists.ToList(); + } + } + #endregion } } \ No newline at end of file diff --git a/SGGL/FineUIPro.Web/HSSE/Check/CheckSpecial.aspx b/SGGL/FineUIPro.Web/HSSE/Check/CheckSpecial.aspx index efc7fda4..5a70c33f 100644 --- a/SGGL/FineUIPro.Web/HSSE/Check/CheckSpecial.aspx +++ b/SGGL/FineUIPro.Web/HSSE/Check/CheckSpecial.aspx @@ -46,11 +46,12 @@ - + - + + @@ -153,12 +154,12 @@ } function onGridDataLoad(event) { - this.mergeColumns(['CheckSpecialCode', 'CheckCount','CheckTime'], { depends: true }); -// this.mergeColumns(['CheckCount']); -// this.mergeColumns(['CheckPersonName']); -// this.mergeColumns(['CheckTime']); -// this.mergeColumns(['FlowOperateName']); - } + this.mergeColumns(['CheckSpecialCode', 'CheckCount', 'CheckTime'], { depends: true }); + // this.mergeColumns(['CheckCount']); + // this.mergeColumns(['CheckPersonName']); + // this.mergeColumns(['CheckTime']); + // this.mergeColumns(['FlowOperateName']); + } diff --git a/SGGL/FineUIPro.Web/HSSE/Check/CheckSpecial.aspx.cs b/SGGL/FineUIPro.Web/HSSE/Check/CheckSpecial.aspx.cs index c178df09..9b77dffb 100644 --- a/SGGL/FineUIPro.Web/HSSE/Check/CheckSpecial.aspx.cs +++ b/SGGL/FineUIPro.Web/HSSE/Check/CheckSpecial.aspx.cs @@ -60,7 +60,7 @@ namespace FineUIPro.Web.HSSE.Check { string strSql = @"SELECT CheckSpecial.CheckSpecialId,CodeRecords.Code AS CheckSpecialCode," + @" CheckItemSet.CheckItemName,CheckSpecial.CheckTime,(CASE WHEN CheckSpecial.CheckType ='1' THEN '联合检查' ELSE '专项检查' END) AS CheckTypeName" - + @" ,(CASE WHEN CheckSpecial.States='2' THEN '已完成' WHEN CheckSpecial.States='1' THEN '待整改' ELSE '待提交' END) AS StatesName" + + @" ,(CASE WHEN CheckSpecial.States='2' THEN '待确认' WHEN CheckSpecial.States='3' THEN '已确认' WHEN CheckSpecial.States='1' THEN '待整改' ELSE '待提交' END) AS StatesName" + @" FROM Check_CheckSpecial AS CheckSpecial " + @" LEFT JOIN Sys_CodeRecords AS CodeRecords ON CheckSpecial.CheckSpecialId=CodeRecords.DataId " + @" LEFT JOIN Technique_CheckItemSet AS CheckItemSet ON CheckItemSet.CheckItemSetId = CheckSpecial.CheckItemSetId where 1=1"; @@ -68,9 +68,9 @@ namespace FineUIPro.Web.HSSE.Check strSql += " AND CheckSpecial.ProjectId = @ProjectId"; listStr.Add(new SqlParameter("@ProjectId", this.ProjectId)); - if (this.rbStates.SelectedValue!="-1") + if (this.rbStates.SelectedValue != "-1") { - strSql += " AND CheckSpecial.States = @States"; + strSql += " AND CheckSpecial.States = @States"; listStr.Add(new SqlParameter("@States", this.rbStates.SelectedValue)); } if (this.rbType.SelectedValue != "-1") @@ -86,10 +86,10 @@ namespace FineUIPro.Web.HSSE.Check listStr.Add(new SqlParameter("@CheckType", this.rbType.SelectedValue)); } } - if (this.drpSupCheckItemSet.SelectedValue!=BLL.Const._Null) + if (this.drpSupCheckItemSet.SelectedValue != BLL.Const._Null) { strSql += " AND CheckSpecial.CheckItemSetId = @CheckItemSetId"; - listStr.Add(new SqlParameter("@CheckItemSetId", this.drpSupCheckItemSet.SelectedValue )); + listStr.Add(new SqlParameter("@CheckItemSetId", this.drpSupCheckItemSet.SelectedValue)); } if (!string.IsNullOrEmpty(this.txtStartTime.Text.Trim())) { @@ -269,8 +269,8 @@ namespace FineUIPro.Web.HSSE.Check } } } - #endregion - + #endregion + #region 导出按钮 /// 导出按钮 /// @@ -289,7 +289,7 @@ namespace FineUIPro.Web.HSSE.Check Response.End(); } #endregion - + /// /// /// @@ -361,7 +361,8 @@ namespace FineUIPro.Web.HSSE.Check uploadfilepath = rootPath + initTemplatePath; newUrl = uploadfilepath.Replace(".doc", string.Format("{0:yyyy-MM}", DateTime.Now) + ".doc"); //filePath = initTemplatePath.Replace(".doc", string.Format("{0:yyyy-MM}", DateTime.Now) + ".pdf"); - if (File.Exists(newUrl)) { + if (File.Exists(newUrl)) + { File.Delete(newUrl); } File.Copy(uploadfilepath, newUrl); @@ -398,10 +399,11 @@ namespace FineUIPro.Web.HSSE.Check { if (checkSpecial != null) { - if (!string.IsNullOrEmpty(checkSpecial.CheckItemSetId)) { + if (!string.IsNullOrEmpty(checkSpecial.CheckItemSetId)) + { bookmarkSupCheckItemSet.Text = Technique_CheckItemSetService.GetCheckItemSetNameById(checkSpecial.CheckItemSetId); } - + } } @@ -410,10 +412,11 @@ namespace FineUIPro.Web.HSSE.Check { if (checkSpecial != null) { - if (checkSpecial.CheckTime.HasValue) { + if (checkSpecial.CheckTime.HasValue) + { bookmarkCheckDate.Text = string.Format("{0:yyyy-MM-dd}", checkSpecial.CheckTime); } - + } } @@ -598,7 +601,7 @@ namespace FineUIPro.Web.HSSE.Check builder.ParagraphFormat.Alignment = ParagraphAlignment.Left;//水平居中对齐 builder.CellFormat.Width = 250; builder.CellFormat.WrapText = true; - builder.Write(string.IsNullOrEmpty(detail.CheckItemSetContent)?"": detail.CheckItemSetContent); + builder.Write(string.IsNullOrEmpty(detail.CheckItemSetContent) ? "" : detail.CheckItemSetContent); ////处理结果 //builder.InsertCell(); @@ -615,7 +618,7 @@ namespace FineUIPro.Web.HSSE.Check builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;//垂直居中对齐 builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐 builder.CellFormat.Width = 60; - builder.Write(string.Format("{0:yyyy-MM-dd}", detail.Rectification_Date)); + builder.Write(string.Format("{0:yyyy-MM-dd}", detail.Rectification_Date)); //隐患类别 builder.InsertCell(); builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None; diff --git a/SGGL/FineUIPro.Web/HSSE/Check/CheckSpecial.aspx.designer.cs b/SGGL/FineUIPro.Web/HSSE/Check/CheckSpecial.aspx.designer.cs index 82f82f65..7b0d4f2c 100644 --- a/SGGL/FineUIPro.Web/HSSE/Check/CheckSpecial.aspx.designer.cs +++ b/SGGL/FineUIPro.Web/HSSE/Check/CheckSpecial.aspx.designer.cs @@ -7,11 +7,13 @@ // //------------------------------------------------------------------------------ -namespace FineUIPro.Web.HSSE.Check { - - - public partial class CheckSpecial { - +namespace FineUIPro.Web.HSSE.Check +{ + + + public partial class CheckSpecial + { + /// /// form1 控件。 /// @@ -20,7 +22,7 @@ namespace FineUIPro.Web.HSSE.Check { /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// protected global::System.Web.UI.HtmlControls.HtmlForm form1; - + /// /// PageManager1 控件。 /// @@ -29,7 +31,7 @@ namespace FineUIPro.Web.HSSE.Check { /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// protected global::FineUIPro.PageManager PageManager1; - + /// /// Panel1 控件。 /// @@ -38,7 +40,7 @@ namespace FineUIPro.Web.HSSE.Check { /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// protected global::FineUIPro.Panel Panel1; - + /// /// Grid1 控件。 /// @@ -47,7 +49,7 @@ namespace FineUIPro.Web.HSSE.Check { /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// protected global::FineUIPro.Grid Grid1; - + /// /// Toolbar2 控件。 /// @@ -56,7 +58,7 @@ namespace FineUIPro.Web.HSSE.Check { /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// protected global::FineUIPro.Toolbar Toolbar2; - + /// /// rbStates 控件。 /// @@ -65,7 +67,7 @@ namespace FineUIPro.Web.HSSE.Check { /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// protected global::FineUIPro.RadioButtonList rbStates; - + /// /// rbType 控件。 /// @@ -74,7 +76,7 @@ namespace FineUIPro.Web.HSSE.Check { /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// protected global::FineUIPro.RadioButtonList rbType; - + /// /// drpSupCheckItemSet 控件。 /// @@ -83,7 +85,7 @@ namespace FineUIPro.Web.HSSE.Check { /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// protected global::FineUIPro.DropDownList drpSupCheckItemSet; - + /// /// txtStartTime 控件。 /// @@ -92,7 +94,7 @@ namespace FineUIPro.Web.HSSE.Check { /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// protected global::FineUIPro.DatePicker txtStartTime; - + /// /// txtEndTime 控件。 /// @@ -101,7 +103,7 @@ namespace FineUIPro.Web.HSSE.Check { /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// protected global::FineUIPro.DatePicker txtEndTime; - + /// /// ToolbarFill1 控件。 /// @@ -110,7 +112,7 @@ namespace FineUIPro.Web.HSSE.Check { /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// protected global::FineUIPro.ToolbarFill ToolbarFill1; - + /// /// btnNew 控件。 /// @@ -119,7 +121,7 @@ namespace FineUIPro.Web.HSSE.Check { /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// protected global::FineUIPro.Button btnNew; - + /// /// btnOut 控件。 /// @@ -128,7 +130,7 @@ namespace FineUIPro.Web.HSSE.Check { /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// protected global::FineUIPro.Button btnOut; - + /// /// labNumber 控件。 /// @@ -137,7 +139,7 @@ namespace FineUIPro.Web.HSSE.Check { /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// protected global::System.Web.UI.WebControls.Label labNumber; - + /// /// ToolbarSeparator1 控件。 /// @@ -146,7 +148,7 @@ namespace FineUIPro.Web.HSSE.Check { /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// protected global::FineUIPro.ToolbarSeparator ToolbarSeparator1; - + /// /// ToolbarText1 控件。 /// @@ -155,7 +157,7 @@ namespace FineUIPro.Web.HSSE.Check { /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// protected global::FineUIPro.ToolbarText ToolbarText1; - + /// /// ddlPageSize 控件。 /// @@ -164,7 +166,7 @@ namespace FineUIPro.Web.HSSE.Check { /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// protected global::FineUIPro.DropDownList ddlPageSize; - + /// /// Window1 控件。 /// @@ -173,7 +175,7 @@ namespace FineUIPro.Web.HSSE.Check { /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// protected global::FineUIPro.Window Window1; - + /// /// Menu1 控件。 /// @@ -182,7 +184,7 @@ namespace FineUIPro.Web.HSSE.Check { /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// protected global::FineUIPro.Menu Menu1; - + /// /// btnMenuModify 控件。 /// @@ -191,7 +193,7 @@ namespace FineUIPro.Web.HSSE.Check { /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// protected global::FineUIPro.MenuButton btnMenuModify; - + /// /// btnPrinter 控件。 /// @@ -200,7 +202,7 @@ namespace FineUIPro.Web.HSSE.Check { /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// protected global::FineUIPro.MenuButton btnPrinter; - + /// /// btnMenuDel 控件。 /// diff --git a/SGGL/FineUIPro.Web/HSSE/EduTrain/Plan.aspx b/SGGL/FineUIPro.Web/HSSE/EduTrain/Plan.aspx index 45ecaa32..d5b689b9 100644 --- a/SGGL/FineUIPro.Web/HSSE/EduTrain/Plan.aspx +++ b/SGGL/FineUIPro.Web/HSSE/EduTrain/Plan.aspx @@ -88,7 +88,7 @@ runat="server" Text="查看" Icon="Find"> + runat="server" Text="二维码" Hidden="true" Icon="Shading"> + + diff --git a/SGGL/FineUIPro.Web/HSSE/EduTrain/TrainRecord.aspx.cs b/SGGL/FineUIPro.Web/HSSE/EduTrain/TrainRecord.aspx.cs index b2ed5240..07e64c76 100644 --- a/SGGL/FineUIPro.Web/HSSE/EduTrain/TrainRecord.aspx.cs +++ b/SGGL/FineUIPro.Web/HSSE/EduTrain/TrainRecord.aspx.cs @@ -661,5 +661,21 @@ namespace FineUIPro.Web.HSSE.EduTrain } } } + + /// + /// 查看二维码 + /// + /// + /// + protected void btnQR_Click(object sender, EventArgs e) + { + if (Grid1.SelectedRowIndexArray.Length == 0) + { + Alert.ShowInTop("请选择一条记录!", MessageBoxIcon.Warning); + return; + } + + PageContext.RegisterStartupScript(Window1.GetShowReference(String.Format("~/Controls/SeeQRImage.aspx?TrainingId={0}&strCode={1}", Grid1.SelectedRowID, "trainRecord$" + Grid1.SelectedRowID), "二维码查看", 400, 400)); + } } } \ No newline at end of file diff --git a/SGGL/FineUIPro.Web/HSSE/EduTrain/TrainRecord.aspx.designer.cs b/SGGL/FineUIPro.Web/HSSE/EduTrain/TrainRecord.aspx.designer.cs index c00b7651..764a3460 100644 --- a/SGGL/FineUIPro.Web/HSSE/EduTrain/TrainRecord.aspx.designer.cs +++ b/SGGL/FineUIPro.Web/HSSE/EduTrain/TrainRecord.aspx.designer.cs @@ -7,11 +7,13 @@ // //------------------------------------------------------------------------------ -namespace FineUIPro.Web.HSSE.EduTrain { - - - public partial class TrainRecord { - +namespace FineUIPro.Web.HSSE.EduTrain +{ + + + public partial class TrainRecord + { + /// /// form1 控件。 /// @@ -20,7 +22,7 @@ namespace FineUIPro.Web.HSSE.EduTrain { /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// protected global::System.Web.UI.HtmlControls.HtmlForm form1; - + /// /// PageManager1 控件。 /// @@ -29,7 +31,7 @@ namespace FineUIPro.Web.HSSE.EduTrain { /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// protected global::FineUIPro.PageManager PageManager1; - + /// /// Panel1 控件。 /// @@ -38,7 +40,7 @@ namespace FineUIPro.Web.HSSE.EduTrain { /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// protected global::FineUIPro.Panel Panel1; - + /// /// Grid1 控件。 /// @@ -47,7 +49,7 @@ namespace FineUIPro.Web.HSSE.EduTrain { /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// protected global::FineUIPro.Grid Grid1; - + /// /// Toolbar2 控件。 /// @@ -56,7 +58,7 @@ namespace FineUIPro.Web.HSSE.EduTrain { /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// protected global::FineUIPro.Toolbar Toolbar2; - + /// /// drpUnitId 控件。 /// @@ -65,7 +67,7 @@ namespace FineUIPro.Web.HSSE.EduTrain { /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// protected global::FineUIPro.DropDownList drpUnitId; - + /// /// drpTrainType 控件。 /// @@ -74,7 +76,7 @@ namespace FineUIPro.Web.HSSE.EduTrain { /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// protected global::FineUIPro.DropDownList drpTrainType; - + /// /// drpTrainLevel 控件。 /// @@ -83,7 +85,7 @@ namespace FineUIPro.Web.HSSE.EduTrain { /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// protected global::FineUIPro.DropDownList drpTrainLevel; - + /// /// txtStartDate 控件。 /// @@ -92,7 +94,7 @@ namespace FineUIPro.Web.HSSE.EduTrain { /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// protected global::FineUIPro.DatePicker txtStartDate; - + /// /// lblTo 控件。 /// @@ -101,7 +103,7 @@ namespace FineUIPro.Web.HSSE.EduTrain { /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// protected global::FineUIPro.Label lblTo; - + /// /// txtEndDate 控件。 /// @@ -110,7 +112,7 @@ namespace FineUIPro.Web.HSSE.EduTrain { /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// protected global::FineUIPro.DatePicker txtEndDate; - + /// /// ToolbarFill1 控件。 /// @@ -119,7 +121,7 @@ namespace FineUIPro.Web.HSSE.EduTrain { /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// protected global::FineUIPro.ToolbarFill ToolbarFill1; - + /// /// btnNew 控件。 /// @@ -128,7 +130,7 @@ namespace FineUIPro.Web.HSSE.EduTrain { /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// protected global::FineUIPro.Button btnNew; - + /// /// btnOut 控件。 /// @@ -137,7 +139,7 @@ namespace FineUIPro.Web.HSSE.EduTrain { /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// protected global::FineUIPro.Button btnOut; - + /// /// btnRefresh 控件。 /// @@ -146,7 +148,7 @@ namespace FineUIPro.Web.HSSE.EduTrain { /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// protected global::FineUIPro.Button btnRefresh; - + /// /// lblNumber 控件。 /// @@ -155,7 +157,7 @@ namespace FineUIPro.Web.HSSE.EduTrain { /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// protected global::System.Web.UI.WebControls.Label lblNumber; - + /// /// lblTrainingCode 控件。 /// @@ -164,7 +166,7 @@ namespace FineUIPro.Web.HSSE.EduTrain { /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// protected global::System.Web.UI.WebControls.Label lblTrainingCode; - + /// /// lblUnitId 控件。 /// @@ -173,7 +175,7 @@ namespace FineUIPro.Web.HSSE.EduTrain { /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// protected global::System.Web.UI.WebControls.Label lblUnitId; - + /// /// Label1 控件。 /// @@ -182,7 +184,7 @@ namespace FineUIPro.Web.HSSE.EduTrain { /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// protected global::System.Web.UI.WebControls.Label Label1; - + /// /// ToolbarSeparator1 控件。 /// @@ -191,7 +193,7 @@ namespace FineUIPro.Web.HSSE.EduTrain { /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// protected global::FineUIPro.ToolbarSeparator ToolbarSeparator1; - + /// /// ToolbarText1 控件。 /// @@ -200,7 +202,7 @@ namespace FineUIPro.Web.HSSE.EduTrain { /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// protected global::FineUIPro.ToolbarText ToolbarText1; - + /// /// ddlPageSize 控件。 /// @@ -209,7 +211,7 @@ namespace FineUIPro.Web.HSSE.EduTrain { /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// protected global::FineUIPro.DropDownList ddlPageSize; - + /// /// Window1 控件。 /// @@ -218,7 +220,7 @@ namespace FineUIPro.Web.HSSE.EduTrain { /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// protected global::FineUIPro.Window Window1; - + /// /// Window2 控件。 /// @@ -227,7 +229,7 @@ namespace FineUIPro.Web.HSSE.EduTrain { /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// protected global::FineUIPro.Window Window2; - + /// /// Menu1 控件。 /// @@ -236,7 +238,7 @@ namespace FineUIPro.Web.HSSE.EduTrain { /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// protected global::FineUIPro.Menu Menu1; - + /// /// btnMenuView 控件。 /// @@ -245,7 +247,16 @@ namespace FineUIPro.Web.HSSE.EduTrain { /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// protected global::FineUIPro.MenuButton btnMenuView; - + + /// + /// btnQR 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::FineUIPro.MenuButton btnQR; + /// /// btnMenuEdit 控件。 /// @@ -254,7 +265,7 @@ namespace FineUIPro.Web.HSSE.EduTrain { /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// protected global::FineUIPro.MenuButton btnMenuEdit; - + /// /// btnPrint 控件。 /// @@ -263,7 +274,7 @@ namespace FineUIPro.Web.HSSE.EduTrain { /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// protected global::FineUIPro.MenuButton btnPrint; - + /// /// btnMenuDelete 控件。 /// diff --git a/SGGL/Model/Model.cs b/SGGL/Model/Model.cs index a1aa9e81..834d18e0 100644 --- a/SGGL/Model/Model.cs +++ b/SGGL/Model/Model.cs @@ -128299,6 +128299,8 @@ namespace Model private string _UnitWorkIds; + private string _QRCodeUrl; + private EntitySet _EduTrain_TrainRecordDetail; private EntityRef _Base_Project; @@ -128359,6 +128361,8 @@ namespace Model partial void OnCNProfessionalIdChanged(); partial void OnUnitWorkIdsChanging(string value); partial void OnUnitWorkIdsChanged(); + partial void OnQRCodeUrlChanging(string value); + partial void OnQRCodeUrlChanged(); #endregion public EduTrain_TrainRecord() @@ -128843,6 +128847,26 @@ namespace Model } } + [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_QRCodeUrl", DbType="NVarChar(2000)")] + public string QRCodeUrl + { + get + { + return this._QRCodeUrl; + } + set + { + if ((this._QRCodeUrl != value)) + { + this.OnQRCodeUrlChanging(value); + this.SendPropertyChanging(); + this._QRCodeUrl = value; + this.SendPropertyChanged("QRCodeUrl"); + this.OnQRCodeUrlChanged(); + } + } + } + [global::System.Data.Linq.Mapping.AssociationAttribute(Name="FK_EduTrain_TrainDetail_EduTrain_Training", Storage="_EduTrain_TrainRecordDetail", ThisKey="TrainingId", OtherKey="TrainingId", DeleteRule="NO ACTION")] public EntitySet EduTrain_TrainRecordDetail { diff --git a/SGGL/WebAPI/Controllers/HSSE/TestRecordController.cs b/SGGL/WebAPI/Controllers/HSSE/TestRecordController.cs index 303ca136..1580f762 100644 --- a/SGGL/WebAPI/Controllers/HSSE/TestRecordController.cs +++ b/SGGL/WebAPI/Controllers/HSSE/TestRecordController.cs @@ -400,6 +400,28 @@ namespace WebAPI.Controllers return responeData; } - #endregion + #endregion + + #region 扫码获取培训记录详情 + /// + /// 扫码获取培训记录详情 + /// + /// + /// + public Model.ResponeData getTestRecordByTestRecordIdQrCode(string TrainingId) + { + var responeData = new Model.ResponeData(); + try + { + responeData.data = APITestRecordService.getTestRecordByTestRecordIdQrCode(TrainingId); + } + catch (Exception ex) + { + responeData.code = 0; + responeData.message = ex.Message; + } + return responeData; + } + #endregion } } From 16638e5e5ea25adb43a903d666faf6c1e523b6d8 Mon Sep 17 00:00:00 2001 From: gaofei1985 <181547018@qq.com> Date: Mon, 16 Oct 2023 15:14:41 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- SGGL/FineUIPro.Web/Controls/SeeQRImage.aspx.cs | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/SGGL/FineUIPro.Web/Controls/SeeQRImage.aspx.cs b/SGGL/FineUIPro.Web/Controls/SeeQRImage.aspx.cs index 3dd05f4e..791293e1 100644 --- a/SGGL/FineUIPro.Web/Controls/SeeQRImage.aspx.cs +++ b/SGGL/FineUIPro.Web/Controls/SeeQRImage.aspx.cs @@ -167,6 +167,23 @@ namespace FineUIPro.Web.Controls } } } + else if (!string.IsNullOrEmpty(Request.Params["TrainingId"])) + { + var serverTestPlan = Funs.DB.EduTrain_TrainRecord.FirstOrDefault(e => e.TrainingId == Request.Params["TrainingId"]); + if (serverTestPlan != null) + { + if (!string.IsNullOrEmpty(serverTestPlan.QRCodeUrl) && CreateQRCodeService.isHaveImage(serverTestPlan.QRCodeUrl)) + { + this.QRCodeAttachUrl = serverTestPlan.QRCodeUrl; + } + else + { + this.CreateCode_Simple(Request.Params["strCode"]); + serverTestPlan.QRCodeUrl = this.QRCodeAttachUrl; + Funs.DB.SubmitChanges(); + } + } + } this.Image1.ImageUrl = "~/" + this.QRCodeAttachUrl; }