From 26f45822a2a84af81e20ca543da98d3b822c5afd Mon Sep 17 00:00:00 2001 From: duheng <2784771470@qq.com> Date: 星期一, 17 二月 2025 21:25:59 +0800 Subject: [PATCH] Merge branch 'master' of http://47.103.154.90:83/r/HStation/XHS.V1.0 --- WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/13-print/report/SimulationCommonReport.cs | 371 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 370 insertions(+), 1 deletions(-) diff --git a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/13-print/report/SimulationCommonReport.cs b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/13-print/report/SimulationCommonReport.cs index 72a045c..038e653 100644 --- a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/13-print/report/SimulationCommonReport.cs +++ b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/13-print/report/SimulationCommonReport.cs @@ -1,4 +1,5 @@ -锘縰sing DevExpress.XtraReports.UI; +锘縰sing DevExpress.XtraCharts; +using DevExpress.XtraReports.UI; using System; using System.Collections; using System.ComponentModel; @@ -18,7 +19,375 @@ /// </summary> public void SetBindingData(SimulationPrintViewModel vm) { + //A4璁剧疆 827 1169 + this.PaperKind = DevExpress.Drawing.Printing.DXPaperKind.A4; + this.Margins = new DevExpress.Drawing.DXMargins(50, 50, 50, 50); + //鍐呭瀹藉害 + float contentWidth = 727F;//鍐呭瀹藉害 + float firstCaptionHeight = 30F;//涓�绾ф爣棰橀珮搴� + + //727 1069 + + #region 椤电湁 + + var labForCorp = new XRLabel(); + labForCorp.Name = "椤电湁"; + labForCorp.Text = "鏉窞绉戠淮鑺傝兘鎶�鏈偂浠芥湁闄愬叕鍙�"; + labForCorp.Multiline = true; + labForCorp.LocationFloat = new DevExpress.Utils.PointFloat(482F, 16F); + labForCorp.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F); + labForCorp.SizeF = new System.Drawing.SizeF(236F, 24F); + labForCorp.StylePriority.UseTextAlignment = false; + labForCorp.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter; + this.TopMargin.Controls.Add(labForCorp); + + #endregion + + #region 椤佃剼 + + var pageForCurrentNum = new XRPageInfo(); + pageForCurrentNum.LocationFloat = new DevExpress.Utils.PointFloat(617F, 10.00001F); + pageForCurrentNum.Name = "椤佃剼"; + pageForCurrentNum.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F); + pageForCurrentNum.SizeF = new System.Drawing.SizeF(100F, 23F); + pageForCurrentNum.StylePriority.UseTextAlignment = false; + pageForCurrentNum.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter; + pageForCurrentNum.TextFormatString = "绗瑊0}椤�"; + this.BottomMargin.Controls.Add(pageForCurrentNum); + + #endregion + + #region 鏍囬 + + float locationY = 0F; + var labForTitle = new XRLabel(); + labForTitle.AnchorHorizontal = ((DevExpress.XtraReports.UI.HorizontalAnchorStyles)((DevExpress.XtraReports.UI.HorizontalAnchorStyles.Left | DevExpress.XtraReports.UI.HorizontalAnchorStyles.Right))); + labForTitle.Font = new DevExpress.Drawing.DXFont("Arial", 15F, DevExpress.Drawing.DXFontStyle.Bold); + labForTitle.LocationFloat = new DevExpress.Utils.PointFloat(0F, 0F); + labForTitle.Multiline = true; + labForTitle.Name = "labTitle"; + labForTitle.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 96F); + labForTitle.SizeF = new System.Drawing.SizeF(727F, 50F); + labForTitle.StylePriority.UseFont = false; + labForTitle.StylePriority.UseTextAlignment = false; + labForTitle.Text = $"{vm.Project.Name}椤圭洰鑺傝兘鎶ュ憡"; + labForTitle.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter; + this.Detail.Controls.Add(labForTitle); + locationY += 50F; + + #endregion + + #region 涓�銆侀」鐩杩� + + var labForDescription = CreateFirstCaption("涓�銆侀」鐩杩�", contentWidth, firstCaptionHeight, 0F, locationY); + this.Detail.Controls.Add(labForDescription); + locationY += firstCaptionHeight; + + #endregion + + #region 椤圭洰姒傝堪鍐呭 + + var labForDescriptionContent = new XRLabel(); + labForDescriptionContent.AnchorHorizontal = (DevExpress.XtraReports.UI.HorizontalAnchorStyles.Left | DevExpress.XtraReports.UI.HorizontalAnchorStyles.Right); + labForDescriptionContent.Font = new DevExpress.Drawing.DXFont("Arial", 10F); + labForDescriptionContent.LocationFloat = new DevExpress.Utils.PointFloat(0F, locationY); + labForDescriptionContent.Multiline = true; + labForDescriptionContent.Name = "labForDescriptionContent"; + labForDescriptionContent.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 96F); + labForDescriptionContent.SizeF = new System.Drawing.SizeF(727F, 100F); + labForDescriptionContent.StylePriority.UseFont = false; + labForDescriptionContent.StylePriority.UseTextAlignment = false; + labForDescriptionContent.Text = $" {vm.Project.Description}"; + labForDescriptionContent.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleLeft; + this.Detail.Controls.Add(labForDescriptionContent); + locationY += 100F; + + #endregion + + //浜屻�佹按娉垫槑缁� + var labForPumpList = new XRLabel(); + labForPumpList.AnchorHorizontal = (DevExpress.XtraReports.UI.HorizontalAnchorStyles.Left | DevExpress.XtraReports.UI.HorizontalAnchorStyles.Right); + labForPumpList.Font = new DevExpress.Drawing.DXFont("Arial", 12F, DevExpress.Drawing.DXFontStyle.Bold); + labForPumpList.LocationFloat = new DevExpress.Utils.PointFloat(0F, locationY); + labForPumpList.Multiline = true; + labForPumpList.Name = "labForPumpList"; + labForPumpList.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F); + labForPumpList.SizeF = new System.Drawing.SizeF(727F, 25F); + labForPumpList.StylePriority.UseFont = false; + labForPumpList.StylePriority.UseTextAlignment = false; + labForPumpList.Text = "浜屻�佹按娉垫槑缁�"; + labForPumpList.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleLeft; + this.Detail.Controls.Add(labForPumpList); + locationY += 25F; + + //姘存车鏄庣粏鍐呭 + if (vm.PumpList != null && vm.PumpList.Count > 0) + { + // 鍒涘缓 XRTable + var tableForPumpList = new XRTable(); + tableForPumpList.LocationF = new DevExpress.Utils.PointFloat(0F, locationY); + tableForPumpList.SizeF = new SizeF(727F, 30F); // 璁剧疆澶у皬 + + // 鍒涘缓琛ㄥご琛� + XRTableRow headerRowPumpList = new XRTableRow(); + headerRowPumpList.BackColor = Color.LightGray; // 璁剧疆鑳屾櫙棰滆壊 + + // 娣诲姞琛ㄥご鍒� + headerRowPumpList.Cells.Add(CreateTableCell("鍚嶇О", 100)); + headerRowPumpList.Cells.Add(CreateTableCell("缂栫爜", 100)); + headerRowPumpList.Cells.Add(CreateTableCell("棰濆畾娴侀噺", 100)); + headerRowPumpList.Cells.Add(CreateTableCell("棰濆畾鎵▼", 100)); + headerRowPumpList.Cells.Add(CreateTableCell("棰濆畾鍔熺巼", 100)); + headerRowPumpList.Cells.Add(CreateTableCell("棰濆畾杞��", 100)); + + // 灏嗚〃澶磋娣诲姞鍒拌〃鏍� + tableForPumpList.Rows.Add(headerRowPumpList); + + //閬嶅巻姘存车 + foreach (var pump in vm.PumpList) + { + // 鍒涘缓鏁版嵁琛� + var dataRow = new XRTableRow(); + dataRow.Cells.Add(new XRTableCell() + { + Text = pump.Name, + WidthF = 100F, + TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter, + Borders = DevExpress.XtraPrinting.BorderSide.All + }); + dataRow.Cells.Add(new XRTableCell() + { + Text = pump.Code, + WidthF = 100F, + TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter, + Borders = DevExpress.XtraPrinting.BorderSide.All + }); + dataRow.Cells.Add(new XRTableCell() + { + Text = pump.RatedQ.ToString(), + WidthF = 100F, + TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter, + Borders = DevExpress.XtraPrinting.BorderSide.All + }); + dataRow.Cells.Add(new XRTableCell() + { + Text = pump.RatedH.ToString(), + WidthF = 100F, + TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter, + Borders = DevExpress.XtraPrinting.BorderSide.All + }); + dataRow.Cells.Add(new XRTableCell() + { + Text = pump.RatedP.ToString(), + WidthF = 100F, + TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter, + Borders = DevExpress.XtraPrinting.BorderSide.All + }); + dataRow.Cells.Add(new XRTableCell() + { + Text = pump.RatedN.ToString(), + WidthF = 100F, + TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter, + Borders = DevExpress.XtraPrinting.BorderSide.All + }); + tableForPumpList.Rows.Add(dataRow); + } + + // 灏嗚〃鏍兼坊鍔犲埌Detail + this.Detail.Controls.Add(tableForPumpList); + locationY += 30F; + locationY += 30F * vm.PumpList.Count; + } + + if (vm.WorkingList != null && vm.WorkingList.Count > 0) + { + foreach (var working in vm.WorkingList) + { + //XRChart chart = new XRChart(); + //chart.LocationF = new DevExpress.Utils.PointFloat(0F, locationY); + //chart.WidthF = contentWidth; + //chart.HeightF = 300F; + + //// 鍒涘缓涓�涓嚎绯诲垪 + //Series series = new Series("Series1", ViewType.Spline); + + //// 娣诲姞鏁版嵁鐐� + //foreach (var item in working.PumpAnaly.Items[0].RatedCurveQH) + //{ + // series.Points.Add(new SeriesPoint(item.X, item.Y)); + //} + + //chart.Series.Add(series); + + //Detail.Controls.Add(chart); + + var accuracyScaleChart = CreateAccuracyScale(working.Accuracy.Scale, 300F, 250F, locationY); + Detail.Controls.Add(accuracyScaleChart); + var accuracyFlowChart = CreateAccuracyItem(working.Accuracy.Flow?.AvgError ?? 0, 213F, 250F, 300F, locationY); + Detail.Controls.Add(accuracyFlowChart); + var accuracyPressChart = CreateAccuracyItem(working.Accuracy.Press?.AvgError ?? 0, 213F, 250F, 513F, locationY); + Detail.Controls.Add(accuracyPressChart); + + //var chart = new XRChart(); + //chart.BackColor = System.Drawing.Color.Transparent; + //chart.BorderColor = System.Drawing.Color.Black; + //chart.Borders = DevExpress.XtraPrinting.BorderSide.None; + ////chart.Legend.LegendID = -1; + //chart.Legend.Name = "Default Legend"; + //chart.Legend.Visibility = DevExpress.Utils.DefaultBoolean.False; + //chart.LocationFloat = new DevExpress.Utils.PointFloat(20F, locationY); + //chart.Name = "xrChart6"; + //chart.Padding = new DevExpress.XtraPrinting.PaddingInfo(10, 10, 20, 20, 96F); + //chart.PaletteRepository.Add("Palette 1", new DevExpress.XtraCharts.Palette("Palette 1", DevExpress.XtraCharts.PaletteScaleMode.Repeat, new DevExpress.XtraCharts.PaletteEntry[] { + //new DevExpress.XtraCharts.PaletteEntry(System.Drawing.Color.FromArgb(((int)(((byte)(103)))), ((int)(((byte)(174)))), ((int)(((byte)(197))))), System.Drawing.Color.FromArgb(((int)(((byte)(103)))), ((int)(((byte)(174)))), ((int)(((byte)(197)))))), + //new DevExpress.XtraCharts.PaletteEntry(System.Drawing.Color.FromArgb(((int)(((byte)(232)))), ((int)(((byte)(236)))), ((int)(((byte)(240))))), System.Drawing.Color.FromArgb(((int)(((byte)(232)))), ((int)(((byte)(236)))), ((int)(((byte)(240))))))})); + //chart.PaletteName = "Palette 1"; + + + + //var series = new DevExpress.XtraCharts.Series(); + //series.LabelsVisibility = DevExpress.Utils.DefaultBoolean.False; + //series.Name = "Series 1"; + ////series.SeriesID = 0; + //var doughnutSeriesView = new DevExpress.XtraCharts.DoughnutSeriesView(); + //doughnutSeriesView.HoleRadiusPercent = 45; + //doughnutSeriesView.TotalLabel.DXFont = new DevExpress.Drawing.DXFont("Tahoma", 12F, DevExpress.Drawing.DXFontStyle.Bold); + //doughnutSeriesView.TotalLabel.Visible = true; + //series.View = doughnutSeriesView; + //chart.SeriesSerializable = new DevExpress.XtraCharts.Series[] { series }; + //chart.SizeF = new System.Drawing.SizeF(175F, 185F); + //chart.StylePriority.UseBackColor = false; + //chart.StylePriority.UsePadding = false; + + //series.Points.Add(new SeriesPoint("璇樊", 15)); + //series.Points.Add(new SeriesPoint("鍏朵粬", 85)); + + //doughnutSeriesView.TotalLabel.TextPattern = string.Format("{0:0%}", 0.15); + + //this.Detail.Controls.Add(chart); + + + } + } + } + + //鍒涘缓涓�绾ф爣棰� + private XRLabel CreateFirstCaption(string caption, float sizeX, float sizeY, float locationX, float locationY) + { + var lab = new XRLabel(); + lab.AnchorHorizontal = (DevExpress.XtraReports.UI.HorizontalAnchorStyles.Left | DevExpress.XtraReports.UI.HorizontalAnchorStyles.Right); + lab.Font = new DevExpress.Drawing.DXFont("Arial", 12F, DevExpress.Drawing.DXFontStyle.Bold); + lab.LocationFloat = new DevExpress.Utils.PointFloat(locationX, locationY); + lab.Multiline = true; + lab.Name = "lab"; + lab.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F); + lab.SizeF = new System.Drawing.SizeF(sizeX, sizeY); + lab.StylePriority.UseFont = false; + lab.StylePriority.UseTextAlignment = false; + lab.Text = caption; + lab.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleLeft; + return lab; + } + + //鍒涘缓绮惧害姣斾緥 + private XRChart CreateAccuracyScale(SimulationPrintAccuracyScaleViewModel scale, float sizeX, float sizeY, float locationY) + { + var chart = new XRChart(); + chart.BackColor = System.Drawing.Color.Transparent; + chart.BorderColor = System.Drawing.Color.Black; + chart.Borders = DevExpress.XtraPrinting.BorderSide.All; + chart.Legend.Name = "Default Legend"; + chart.Legend.Visibility = DevExpress.Utils.DefaultBoolean.False; + chart.LocationFloat = new DevExpress.Utils.PointFloat(0F, locationY); + chart.Name = "chart"; + chart.Padding = new DevExpress.XtraPrinting.PaddingInfo(10, 10, 20, 20, 100F); + + var series = new DevExpress.XtraCharts.Series(); + series.LabelsVisibility = DevExpress.Utils.DefaultBoolean.True; + series.Name = "Series"; + var doughnutSeriesView = new DevExpress.XtraCharts.DoughnutSeriesView(); + doughnutSeriesView.HoleRadiusPercent = 45; + doughnutSeriesView.TotalLabel.DXFont = new DevExpress.Drawing.DXFont("Tahoma", 12F, DevExpress.Drawing.DXFontStyle.Bold); + doughnutSeriesView.TotalLabel.Visible = true; + series.View = doughnutSeriesView; + series.Label.LineVisibility = DevExpress.Utils.DefaultBoolean.True; + series.Label.TextPattern = "{A}锛歿VP:P1}"; + chart.SeriesSerializable = new DevExpress.XtraCharts.Series[] { series }; + chart.SizeF = new System.Drawing.SizeF(sizeX, sizeY); + chart.StylePriority.UseBackColor = false; + chart.StylePriority.UsePadding = false; + + if (scale.Items != null && scale.Items.Count > 0) + { + foreach (var item in scale.Items) + { + series.Points.Add(new SeriesPoint(item.EvaluateItem, item.EvaluateCount)); + } + } + doughnutSeriesView.TotalLabel.TextPattern = string.Format("{0:0%}", (scale.AvgError ?? 0) / 100F); + return chart; + } + + //鍒涘缓绮惧害椤� + private XRChart CreateAccuracyItem(double value, float sizeX, float sizeY, float locationX, float locationY) + { + var chart = new XRChart(); + chart.BackColor = System.Drawing.Color.Transparent; + chart.BorderColor = System.Drawing.Color.Black; + chart.Borders = DevExpress.XtraPrinting.BorderSide.All; + chart.Legend.Name = "Default Legend"; + chart.Legend.Visibility = DevExpress.Utils.DefaultBoolean.False; + chart.LocationFloat = new DevExpress.Utils.PointFloat(locationX, locationY); + chart.Name = "chart"; + chart.Padding = new DevExpress.XtraPrinting.PaddingInfo(10, 10, 20, 20, 100F); + chart.PaletteRepository.Add("Palette 1", new DevExpress.XtraCharts.Palette("Palette 1", DevExpress.XtraCharts.PaletteScaleMode.Repeat, new DevExpress.XtraCharts.PaletteEntry[] { + new DevExpress.XtraCharts.PaletteEntry(System.Drawing.Color.FromArgb(((int)(((byte)(103)))), ((int)(((byte)(174)))), ((int)(((byte)(197))))), System.Drawing.Color.FromArgb(((int)(((byte)(103)))), ((int)(((byte)(174)))), ((int)(((byte)(197)))))), + new DevExpress.XtraCharts.PaletteEntry(System.Drawing.Color.FromArgb(((int)(((byte)(232)))), ((int)(((byte)(236)))), ((int)(((byte)(240))))), System.Drawing.Color.FromArgb(((int)(((byte)(232)))), ((int)(((byte)(236)))), ((int)(((byte)(240))))))})); + chart.PaletteName = "Palette 1"; + + var series = new DevExpress.XtraCharts.Series(); + series.LabelsVisibility = DevExpress.Utils.DefaultBoolean.False; + series.Name = "Series"; + var doughnutSeriesView = new DevExpress.XtraCharts.DoughnutSeriesView(); + doughnutSeriesView.HoleRadiusPercent = 45; + doughnutSeriesView.TotalLabel.DXFont = new DevExpress.Drawing.DXFont("Tahoma", 12F, DevExpress.Drawing.DXFontStyle.Bold); + doughnutSeriesView.TotalLabel.Visible = true; + series.View = doughnutSeriesView; + chart.SeriesSerializable = new DevExpress.XtraCharts.Series[] { series }; + chart.SizeF = new System.Drawing.SizeF(sizeX, sizeY); + chart.StylePriority.UseBackColor = false; + chart.StylePriority.UsePadding = false; + + var otherValue = 100 - value; + series.Points.Add(new SeriesPoint("璇樊", value)); + series.Points.Add(new SeriesPoint("鍏朵粬", otherValue)); + + doughnutSeriesView.TotalLabel.TextPattern = string.Format("{0:0%}", value / 100f); + return chart; + } + + + // 鍒涘缓琛ㄥご鍗曞厓鏍� + private XRTableCell CreateTableCell(string text, int width) + { + XRTableCell cell = new XRTableCell(); + cell.Text = text; + cell.Width = width; + cell.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter; // 鏂囨湰灞呬腑 + cell.Borders = DevExpress.XtraPrinting.BorderSide.All; // 璁剧疆杈规 + return cell; + } + + // 鍒涘缓鏁版嵁缁戝畾鍗曞厓鏍� + private XRTableCell CreateTableCellWithBinding(string dataMember, int width) + { + XRTableCell cell = new XRTableCell(); + cell.DataBindings.Add(new XRBinding("Text", null, dataMember)); // 缁戝畾鏁版嵁瀛楁 + cell.Width = width; + cell.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleLeft; // 鏂囨湰宸﹀榻� + cell.Borders = DevExpress.XtraPrinting.BorderSide.All; // 璁剧疆杈规 + return cell; } -- Gitblit v1.9.3