using DevExpress.XtraEditors; using DevExpress.XtraLayout; using DevExpress.XtraLayout.Utils; using DevExpress.XtraRichEdit.Model; using NPOI.HPSF; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using Yw.Model; using Yw.Vmo; namespace HStation.WinFrmUI { public partial class SimulationWorkingReportCtrl : DevExpress.XtraEditors.XtraUserControl { public SimulationWorkingReportCtrl() { InitializeComponent(); this.layoutControl1.SetupLayoutControl(); } private SimulationProjectTitleCtrl _titleCtrl = null; private SimulationPumpSingleWorkingChartCtrl _workingChart = null; private HydroSingleWorkingLossCurveCtrl _lossCurve = null; private HydroSingleWorkingLossStatisticsCtrl _lossStatistics = null; private XhsProjectVmo _project = null; private Yw.Model.HydroModelInfo _hydroInfo = null; private List _allMonitorList = null; private HydroWorkingVmo _working = null; private HydroCalcuResult _calcuResult = null; private HydroVisualInfo _visual; /// /// 绑定数据 /// public void SetBindingData ( XhsProjectVmo project, Yw.Model.HydroModelInfo hydroInfo, List allMonitorList, HydroWorkingVmo working, HydroCalcuResult calcuResult, HydroVisualInfo visual ) { _project = project; _hydroInfo = hydroInfo; _allMonitorList = allMonitorList; _working = working; _calcuResult = calcuResult; _visual = visual; #region 项目信息 var projectGroup = this.layoutControl1.AddGroup(); projectGroup.Text = "项目信息"; projectGroup.ExpandButtonVisible = true; projectGroup.Expanded = false; projectGroup.HeaderButtonsLocation = DevExpress.Utils.GroupElementLocation.AfterText; projectGroup.ExpandOnDoubleClick = true; _titleCtrl = new SimulationProjectTitleCtrl(); _titleCtrl.SetBindingData(project); var basicItem = projectGroup.AddItem("项目信息", _titleCtrl); basicItem.TextVisible = false; basicItem.Height = 120; projectGroup.BestFit(); projectGroup.LayoutMode = LayoutMode.Regular; projectGroup.AllowBorderColorBlending = true; projectGroup.AppearanceGroup.BorderColor = Color.FromArgb(0, 122, 204); #endregion 项目信息 #region 能耗分析 var energyGroup = this.layoutControl1.AddGroup(); energyGroup.Text = "能耗分析"; energyGroup.ExpandButtonVisible = true; energyGroup.Expanded = true; energyGroup.HeaderButtonsLocation = DevExpress.Utils.GroupElementLocation.AfterText; energyGroup.ExpandOnDoubleClick = true; _workingChart = new SimulationPumpSingleWorkingChartCtrl(); _workingChart.SetBindingData(working, hydroInfo, allMonitorList, calcuResult); var energyItem = energyGroup.AddItem("能耗分析", _workingChart); energyItem.TextVisible = false; energyItem.Height = 250; energyGroup.BestFit(); energyGroup.LayoutMode = LayoutMode.Regular; energyGroup.AllowBorderColorBlending = true; energyGroup.AppearanceGroup.BorderColor = Color.FromArgb(0, 122, 204); #endregion 能耗分析 #region 损失曲线 var lossCurveGroup = this.layoutControl1.AddGroup(); lossCurveGroup.Text = "损失曲线"; lossCurveGroup.ExpandButtonVisible = true; lossCurveGroup.Expanded = false; lossCurveGroup.HeaderButtonsLocation = DevExpress.Utils.GroupElementLocation.AfterText; lossCurveGroup.ExpandOnDoubleClick = true; _lossCurve = new HydroSingleWorkingLossCurveCtrl(); _lossCurve.SetBindingData(hydroInfo, calcuResult, visual); var lossCurveItem = lossCurveGroup.AddItem("损失曲线", _lossCurve); lossCurveItem.TextVisible = false; lossCurveItem.Height = 250; lossCurveGroup.BestFit(); lossCurveGroup.LayoutMode = LayoutMode.Regular; lossCurveGroup.AllowBorderColorBlending = true; lossCurveGroup.AppearanceGroup.BorderColor = Color.FromArgb(0, 122, 204); #endregion 损失曲线 #region 损失统计 var lossStatisticsGroup = this.layoutControl1.AddGroup(); lossStatisticsGroup.Text = "损失统计"; lossStatisticsGroup.ExpandButtonVisible = true; lossStatisticsGroup.Expanded = false; lossStatisticsGroup.HeaderButtonsLocation = DevExpress.Utils.GroupElementLocation.AfterText; lossStatisticsGroup.ExpandOnDoubleClick = true; _lossStatistics = new HydroSingleWorkingLossStatisticsCtrl(); _lossStatistics.SetBindingData(hydroInfo, calcuResult); var lossStatisticsItem = lossStatisticsGroup.AddItem("损失统计", _lossStatistics); lossStatisticsItem.TextVisible = false; lossStatisticsItem.Height = 250; lossStatisticsGroup.BestFit(); lossStatisticsGroup.LayoutMode = LayoutMode.Regular; lossStatisticsGroup.AllowBorderColorBlending = true; lossStatisticsGroup.AppearanceGroup.BorderColor = Color.FromArgb(0, 122, 204); #endregion 损失统计 } private const string _tempFoler = "workingImageTemp"; private const string _energyAnalyImageFileName = "energy_analy.png"; private const string _lossCurveImageFileName = "loss_curve.png"; private const string _energyInputImageFileName = "energy_input.png"; private const string _energyLossImageFileName = "energy_loss.png"; private const string _energyStatisticsImageFileName = "energy_statistics.png"; //获取图片路径 private string GetImageFilePath(string fileName) { var tempFolder = Path.Combine(Yw.Service.ConfigHelper.DataPath, HStation.Settings.XhsParasHelper.Xhs.DataFolder, _tempFoler); //如果存在临时文件夹,则删除临时文件夹及子目录与文件 if (!Directory.Exists(tempFolder)) { Directory.CreateDirectory(tempFolder); } //创建临时文件夹 return Path.Combine(tempFolder, fileName); } /// /// 获取视图 /// public async Task GetViewModel() { var vm = new HStation.ReportFile.SimulationWorkingReportViewModel(); vm.ReportType = "模拟工况运行报告"; vm.Info = new HStation.ReportFile.SimulationReportInfoItemViewModel() { Name = _project.Name, Description = _project.Description, }; vm.Pumps = new List(); var pumps = _hydroInfo.Pumps; foreach (var pump in _hydroInfo.Pumps) { var pumpItem = new HStation.ReportFile.SimulationReportPumpItemViewModel(); pumpItem.Name = pump.Name; pumpItem.ModelType = pumpItem.ModelType; pumpItem.SerialNO = (_hydroInfo.Pumps.IndexOf(pump) + 1).ToString(); pumpItem.RatedQ = $"{pump.RatedQ ?? 0}m³/h"; pumpItem.RatedH = $"{pump.RatedH ?? 0}m"; pumpItem.RatedP = $"{pump.RatedP}kW"; pumpItem.RatedN = $"{pump.RatedN ?? 0}r/min"; vm.Pumps.Add(pumpItem); var pumpDb = await BLLFactory.Instance.GetByIDEx(long.Parse(pump.DbId)); if (pumpDb != null) { if (pumpDb.PropContent != null && pumpDb.PropContent.Count > 0) { var ratedUProp = pumpDb.PropContent.Find(x => x.TagName == HStation.Assets.PumpDataType.RatedVoltage); if (ratedUProp != null) { pumpItem.RatedU = ratedUProp.PropValue; } var ratedIProp = pumpDb.PropContent.Find(x => x.TagName == HStation.Assets.PumpDataType.RatedCurrent); if (ratedIProp != null) { pumpItem.RatedI = ratedIProp.PropValue; } var ratedFProp = pumpDb.PropContent.Find(x => x.TagName == HStation.Assets.PumpDataType.RatedFactor); if (ratedFProp != null) { pumpItem.RatedF = ratedFProp.PropValue; } } } } vm.Working = new HStation.ReportFile.SimulationReportWorkingItemViewModel(); vm.Working.Name = _working.Name; if (string.IsNullOrEmpty(vm.Working.Name)) { vm.Working.Name = "当前计算工况"; } vm.Working.EnergyAnalyImagePath = GetImageFilePath(_energyAnalyImageFileName); _workingChart.ExportToImage(vm.Working.EnergyAnalyImagePath); vm.Working.LossCurveImagePath = GetImageFilePath(_lossCurveImageFileName); _lossCurve.ExportToImage(vm.Working.LossCurveImagePath); vm.Working.EnergyInputImagePath = GetImageFilePath(_energyInputImageFileName); _lossStatistics.ExportInputToImage(vm.Working.EnergyInputImagePath); vm.Working.EnergyLossImagePath = GetImageFilePath(_energyLossImageFileName); _lossStatistics.ExportLossToImage(vm.Working.EnergyLossImagePath); vm.Working.EnergyStatisticsImagePath = GetImageFilePath(_energyStatisticsImageFileName); _lossStatistics.ExportStatisticsToImage(vm.Working.EnergyStatisticsImagePath); vm.PumpChart = new Yw.DiagramFile.PumpChartViewModel(); return vm; } } }