diff --git a/SGGL/BLL/HJGL/TestPackage/TestPackageEditService.cs b/SGGL/BLL/HJGL/TestPackage/TestPackageEditService.cs index 47cbabf3..405ecc4a 100644 --- a/SGGL/BLL/HJGL/TestPackage/TestPackageEditService.cs +++ b/SGGL/BLL/HJGL/TestPackage/TestPackageEditService.cs @@ -680,9 +680,63 @@ namespace BLL if (!(totalJointNum > totalWeldingJointNum) && !(notCloseBatch > 0) && !(allPointJointNum > allOKCheckNum)) passCount = result.TotalPipelines; } - // 计算是否具备试压条件:全通过数量 == 管线数量且管线数>0 - result.CanPressureTest = (result.TotalPipelines > 0 && passCount == result.TotalPipelines); + result.PassPipelines = passCount;// 全通过管线数 + // 计算管线通过率 + result.PipelinePassPercent = result.TotalPipelines > 0 ? Math.Round((decimal)passCount / result.TotalPipelines * 100, 2) : 0M; + // 设置试压条件状态:>=100% -> 已具备;>=80% and <100% -> 易具备;<80% -> 未具备 + if (result.PipelinePassPercent >= 100M) + { + result.CanPressureTest = "已具备"; + } + else if (result.PipelinePassPercent >= 80M) + { + result.CanPressureTest = "易具备"; + } + else + { + result.CanPressureTest = "未具备"; + } return result; } + + /// + /// 获取单位工程下已完成试压包的通过率(完成试压包的通过数/总数*100,保留两位小数) + /// + /// 项目ID + /// 单位工程ID + /// 完成率百分比 + public static decimal GetTestPackagePassPercentByUnitWorkId(string projectId, string unitWorkId) + { + Model.SGGLDB db = Funs.DB; + // 获取该单位工程下所有试压包 + int totalPipelines = db.PTP_TestPackage.Count(x => x.ProjectId == projectId && x.UnitWorkId == unitWorkId) ; + if (totalPipelines == 0) + return 0M; + int finishedPipelines = db.PTP_TestPackage.Count(x => x.ProjectId == projectId && x.UnitWorkId == unitWorkId&&x.FinishDate.HasValue); + if (totalPipelines == 0) + return 0M; + return Math.Round((decimal)finishedPipelines / totalPipelines * 100, 2); + } + public static Dictionary GetTestPackagePassPercentByProjectId(string projectId) + { + Model.SGGLDB db = Funs.DB; + Dictionary dic = new Dictionary(); + // 获取该项目下所有单位工程分组统计 + var groupQuery = db.PTP_TestPackage + .Where(x => x.ProjectId == projectId) + .GroupBy(x => x.UnitWorkId) + .Select(g => new { + UnitWorkId = g.Key, + Total = g.Count(), + Finished = g.Count(t => t.FinishDate.HasValue) + }).ToList(); + foreach (var item in groupQuery) + { + decimal percent = item.Total > 0 ? Math.Round((decimal)item.Finished / item.Total * 100, 2) : 0M; + dic[item.UnitWorkId] = percent; + } + return dic; + } + } } diff --git a/SGGL/FineUIPro.Web/HJGL/TestPackage/TestPackageComplete.aspx b/SGGL/FineUIPro.Web/HJGL/TestPackage/TestPackageComplete.aspx index 9ab8abfc..d555ad0a 100644 --- a/SGGL/FineUIPro.Web/HJGL/TestPackage/TestPackageComplete.aspx +++ b/SGGL/FineUIPro.Web/HJGL/TestPackage/TestPackageComplete.aspx @@ -76,34 +76,30 @@ runat="server" BoxFlex="1" DataKeyNames="PTP_ID" AllowCellEditing="true" EnableColumnLines="true" ClicksToEdit="2" DataIDField="PTP_ID" AllowSorting="true" SortField="TestPackageNo" SortDirection="ASC" EnableTextSelection="True" - AllowPaging="true" IsDatabasePaging="false" PageSize="20" ForceFit="true"> + AllowPaging="true" IsDatabasePaging="false" PageSize="20" ForceFit="true"> - - + - - - - + - - - - + + + + diff --git a/SGGL/FineUIPro.Web/HJGL/TestPackage/TestPackageComplete.aspx.cs b/SGGL/FineUIPro.Web/HJGL/TestPackage/TestPackageComplete.aspx.cs index 128a2fe2..988d7bff 100644 --- a/SGGL/FineUIPro.Web/HJGL/TestPackage/TestPackageComplete.aspx.cs +++ b/SGGL/FineUIPro.Web/HJGL/TestPackage/TestPackageComplete.aspx.cs @@ -197,15 +197,16 @@ namespace FineUIPro.Web.HJGL.TestPackage unitWork2 = (from x in unitWorkList where x.ProjectType == "2" select x).ToList(); //} + var dicUnitWorkTestPackagePassPercent= BLL.TestPackageEditService.GetTestPackagePassPercentByProjectId(this.CurrUser.LoginProjectId); if (unitWork1.Count() > 0) { foreach (var q in unitWork1) { - int a = (from x in Funs.DB.HJGL_Pipeline where x.ProjectId == this.CurrUser.LoginProjectId && x.UnitWorkId == q.UnitWorkId select x).Count(); var unitNamesUnitIds = BLL.UnitService.getUnitNamesUnitIds(q.UnitId); - TreeNode tn1 = new TreeNode(); + var unitWorkTestPackagePassPercent = dicUnitWorkTestPackagePassPercent.TryGetValue(q.UnitWorkId, out var value) ? value : 0; + TreeNode tn1 = new TreeNode(); tn1.NodeID = q.UnitWorkId; - tn1.Text = q.UnitWorkName; + tn1.Text = q.UnitWorkName+"(已完成"+ unitWorkTestPackagePassPercent+"%)"; tn1.ToolTip = "施工单位:" + unitNamesUnitIds; tn1.CommandName = "单位工程"; rootNode1.Nodes.Add(tn1); @@ -217,11 +218,12 @@ namespace FineUIPro.Web.HJGL.TestPackage { foreach (var q in unitWork2) { - int a = (from x in Funs.DB.HJGL_Pipeline where x.ProjectId == this.CurrUser.LoginProjectId && x.UnitWorkId == q.UnitWorkId select x).Count(); var unitNamesUnitIds = BLL.UnitService.getUnitNamesUnitIds(q.UnitId); + var unitWorkTestPackagePassPercent = dicUnitWorkTestPackagePassPercent.TryGetValue(q.UnitWorkId, out var value) ? value : 0; + TreeNode tn2 = new TreeNode(); tn2.NodeID = q.UnitWorkId; - tn2.Text = q.UnitWorkName; + tn2.Text = q.UnitWorkName + "(已完成" + unitWorkTestPackagePassPercent + "%)"; tn2.ToolTip = "施工单位:" + unitNamesUnitIds; tn2.CommandName = "单位工程"; rootNode2.Nodes.Add(tn2); @@ -342,6 +344,7 @@ namespace FineUIPro.Web.HJGL.TestPackage var analyze = BLL.TestPackageEditService.getTestPackageAnalyze(pkg.PTP_ID, pkg.ProjectId); analyzeList.Add(analyze); } + analyzeList = analyzeList.OrderBy(x => x.UnitWorkName).ThenBy(x => x.TestPackageNo).ToList(); // 绑定到Grid1 Grid2.RecordCount = analyzeList.Count; Grid2.DataSource = analyzeList; diff --git a/SGGL/FineUIPro.Web/HJGL/TestPackage/TestPackageData.aspx.cs b/SGGL/FineUIPro.Web/HJGL/TestPackage/TestPackageData.aspx.cs index 26f6d63d..5d761e75 100644 --- a/SGGL/FineUIPro.Web/HJGL/TestPackage/TestPackageData.aspx.cs +++ b/SGGL/FineUIPro.Web/HJGL/TestPackage/TestPackageData.aspx.cs @@ -253,7 +253,6 @@ namespace FineUIPro.Web.HJGL.TestPackage return; } Dictionary printFiles = new Dictionary(); - foreach (var ptp_id in selectedRows) { var item = exportWord(ptp_id); @@ -262,6 +261,7 @@ namespace FineUIPro.Web.HJGL.TestPackage } if (printFiles.Count>1) { + string zipName = ""; string rootPath = Funs.RootPath; string startPath = rootPath + "FileUpload\\试压包资料" + DateTime.Now.GetHashCode(); if (!Directory.Exists(startPath)) @@ -273,18 +273,20 @@ namespace FineUIPro.Web.HJGL.TestPackage { var sourceFile = item.Key; var destFile = startPath + "\\" + item.Value; + zipName+= item.Value.Replace(".pdf","")+"," ; if (File.Exists(sourceFile)) { File.Copy(sourceFile, destFile, true); File.Delete(sourceFile); } } + zipName= zipName.TrimEnd(','); System.IO.Compression.ZipFile.CreateFromDirectory(startPath, zipPath); FileInfo info = new FileInfo(zipPath); long fileSize = info.Length; System.Web.HttpContext.Current.Response.Clear(); System.Web.HttpContext.Current.Response.ContentType = "application/x-zip-compressed"; - System.Web.HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment;filename=" + System.Web.HttpUtility.UrlEncode("试压包资料.zip", System.Text.Encoding.UTF8)); + System.Web.HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment;filename=" + System.Web.HttpUtility.UrlEncode(zipName+".zip", System.Text.Encoding.UTF8)); System.Web.HttpContext.Current.Response.AddHeader("Content-Length", fileSize.ToString()); System.Web.HttpContext.Current.Response.TransmitFile(zipPath, 0, fileSize); System.Web.HttpContext.Current.Response.Flush(); diff --git a/SGGL/Model/HJGL/TestPackageAnalyzeOutput.cs b/SGGL/Model/HJGL/TestPackageAnalyzeOutput.cs index 8bb8625a..1d5c93e0 100644 --- a/SGGL/Model/HJGL/TestPackageAnalyzeOutput.cs +++ b/SGGL/Model/HJGL/TestPackageAnalyzeOutput.cs @@ -16,9 +16,14 @@ public string UnitWorkName { get; set; } /// - /// 是否具备试压条件(全通过数量 == 管线数量,且未通过数为0)。 + /// 试压条件状态:"已具备"、"易具备"、"未具备" /// - public bool CanPressureTest { get; set; } + public string CanPressureTest { get; set; } + + /// + /// 管线通过率(通过管线数 / 管线总数 * 100,保留两位小数) + /// + public decimal PipelinePassPercent { get; set; } /// /// 检测完成百分比(已检测焊口 / 总焊口 * 100,保留两位小数)。 @@ -34,6 +39,10 @@ /// public string StateStr { get; set; } + /// + /// 当前试压包下的通过管线数。 + /// + public int PassPipelines { get; set; } /// /// 当前试压包下的管线总数。 ///