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