| | |
| | | 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.Text; |
| | | using System.Threading.Tasks; |
| | | using System.Windows.Forms; |
| | | using Yw.Model; |
| | | using Yw.Vmo; |
| | | |
| | | namespace HStation.WinFrmUI |
| | |
| | | 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<HydroMonitorVmo> _allMonitorList = null; |
| | | private HydroWorkingVmo _working = null; |
| | | private HydroCalcuResult _calcuResult = null; |
| | | private HydroVisualInfo _visual; |
| | | |
| | | /// <summary> |
| | | /// 绑定数据 |
| | | /// </summary> |
| | | public void SetBindingData |
| | | ( |
| | | XhsProjectVmo project, |
| | | Yw.Model.HydroModelInfo hydroInfo, |
| | | List<HydroWorkingVmo> allWorkingList, |
| | | List<HydroMonitorValueViewModel> allMonitorValueList |
| | | List<HydroMonitorVmo> allMonitorList, |
| | | HydroWorkingVmo working, |
| | | HydroCalcuResult calcuResult, |
| | | HydroVisualInfo visual |
| | | ) |
| | | { |
| | | if (hydroInfo == null) |
| | | { |
| | | return; |
| | | } |
| | | _project = project; |
| | | _hydroInfo = hydroInfo; |
| | | _allMonitorList = allMonitorList; |
| | | _working = working; |
| | | _calcuResult = calcuResult; |
| | | _visual = visual; |
| | | |
| | | #region 项目信息 |
| | | |
| | | #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); |
| | | |
| | | //var basicGroup = this.layoutControl1.AddGroup(); |
| | | //basicGroup.Text = "工况信息"; |
| | | //basicGroup.ExpandButtonVisible = true; |
| | | //basicGroup.Expanded = false; |
| | | //basicGroup.HeaderButtonsLocation = DevExpress.Utils.GroupElementLocation.AfterText; |
| | | //basicGroup.ExpandOnDoubleClick = true; |
| | | //var basicCtrl = new SetHydroWorkingBasicCtrl(); |
| | | //basicCtrl.SetBindingData(_hydroWorking); |
| | | //var basicItem = basicGroup.AddItem("工况信息", basicCtrl); |
| | | //basicItem.TextVisible = false; |
| | | //basicItem.Height = 120; |
| | | //basicGroup.BestFit(); |
| | | //basicGroup.LayoutMode = LayoutMode.Regular; |
| | | //basicGroup.AllowBorderColorBlending = true; |
| | | //basicGroup.AppearanceGroup.BorderColor = Color.FromArgb(0, 122, 204); |
| | | //_basicCtrl = basicCtrl; |
| | | |
| | | #endregion |
| | | #endregion 项目信息 |
| | | |
| | | #region 能耗分析 |
| | | |
| | | |
| | | var energyGroup = this.layoutControl1.AddGroup(); |
| | | energyGroup.Text = "能耗分析"; |
| | |
| | | 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); |
| | | |
| | | //if (hydroInfo.Reservoirs != null && hydroInfo.Reservoirs.Count > 0) |
| | | //{ |
| | | // var group = this.layoutControl1.AddGroup(); |
| | | // group.Text = HydroParterCatalogHelper.GetName(Yw.Hydro.ParterCatalog.Reservoir); |
| | | // group.ExpandButtonVisible = true; |
| | | // group.Expanded = true; |
| | | // group.HeaderButtonsLocation = DevExpress.Utils.GroupElementLocation.AfterText; |
| | | // group.ExpandOnDoubleClick = true; |
| | | // foreach (var visual in hydroInfo.Reservoirs) |
| | | // { |
| | | // var visualCtrl = new SetHydroWorkingReservoirCtrl(); |
| | | // visualCtrl.HydroViewEvent += x => this.HydroViewEvent?.Invoke(x); |
| | | // var workingInfo = new HydroWorkingReservoirViewModel(visual); |
| | | // _working.WorkingInfo.AppendWorking(workingInfo); |
| | | // visualCtrl.SetBindingData(visual, workingInfo); |
| | | // var item = group.AddItem(visual.Name, visualCtrl); |
| | | // item.TextVisible = false; |
| | | // _visualCtrlList.Add(visualCtrl); |
| | | // } |
| | | // group.BestFit(); |
| | | // group.LayoutMode = LayoutMode.Flow; |
| | | // group.AllowBorderColorBlending = true; |
| | | // group.AppearanceGroup.BorderColor = Color.FromArgb(0, 122, 204); |
| | | // foreach (LayoutControlItem item in group.Items) |
| | | // { |
| | | // item.Size = new Size(200, 80); |
| | | // } |
| | | //} |
| | | #endregion 能耗分析 |
| | | |
| | | #endregion |
| | | #region 损失曲线 |
| | | |
| | | //#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); |
| | | |
| | | //var tanks = hydroInfo.GetAllTanks(); |
| | | //if (tanks != null && tanks.Count > 0) |
| | | //{ |
| | | // var group = this.layoutControl1.AddGroup(); |
| | | // group.Text = HydroParterCatalogHelper.GetName(Yw.Hydro.ParterCatalog.Tank); |
| | | // group.ExpandButtonVisible = true; |
| | | // group.Expanded = true; |
| | | // group.HeaderButtonsLocation = DevExpress.Utils.GroupElementLocation.AfterText; |
| | | // group.ExpandOnDoubleClick = true; |
| | | // foreach (var visual in tanks) |
| | | // { |
| | | // var visualCtrl = new SetHydroWorkingTankCtrl(); |
| | | // visualCtrl.HydroViewEvent += x => this.HydroViewEvent?.Invoke(x); |
| | | // var workingInfo = new HydroWorkingTankViewModel(visual); |
| | | // _working.WorkingInfo.AppendWorking(workingInfo); |
| | | // visualCtrl.SetBindingData(visual, workingInfo); |
| | | // var item = group.AddItem(visual.Name, visualCtrl); |
| | | // item.TextVisible = false; |
| | | // _visualCtrlList.Add(visualCtrl); |
| | | // } |
| | | // group.BestFit(); |
| | | // group.LayoutMode = LayoutMode.Flow; |
| | | // group.AllowBorderColorBlending = true; |
| | | // group.AppearanceGroup.BorderColor = Color.FromArgb(0, 122, 204); |
| | | // foreach (LayoutControlItem item in group.Items) |
| | | // { |
| | | // item.Size = new Size(200, 80); |
| | | // } |
| | | //} |
| | | #endregion 损失曲线 |
| | | |
| | | //#endregion |
| | | #region 损失统计 |
| | | |
| | | //#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); |
| | | |
| | | //if (hydroInfo.Pumps != null && hydroInfo.Pumps.Count > 0) |
| | | //{ |
| | | // var group = this.layoutControl1.AddGroup(); |
| | | // group.Text = HydroParterCatalogHelper.GetName(Yw.Hydro.ParterCatalog.Pump); |
| | | // group.ExpandButtonVisible = true; |
| | | // group.Expanded = true; |
| | | // group.HeaderButtonsLocation = DevExpress.Utils.GroupElementLocation.AfterText; |
| | | // group.ExpandOnDoubleClick = true; |
| | | // foreach (var visual in hydroInfo.Pumps) |
| | | // { |
| | | // var visualCtrl = new SetHydroWorkingPumpCtrl(); |
| | | // visualCtrl.HydroViewEvent += x => this.HydroViewEvent?.Invoke(x); |
| | | // var workingInfo = new HydroWorkingPumpViewModel(visual); |
| | | // _working.WorkingInfo.AppendWorking(workingInfo); |
| | | // visualCtrl.SetBindingData(visual, workingInfo); |
| | | // var item = group.AddItem(visual.Name, visualCtrl); |
| | | // item.TextVisible = false; |
| | | // _visualCtrlList.Add(visualCtrl); |
| | | // } |
| | | // group.BestFit(); |
| | | // group.LayoutMode = LayoutMode.Flow; |
| | | // group.AllowBorderColorBlending = true; |
| | | // group.AppearanceGroup.BorderColor = Color.FromArgb(0, 122, 204); |
| | | // foreach (LayoutControlItem item in group.Items) |
| | | // { |
| | | // item.Size = new Size(200, 100); |
| | | // } |
| | | //} |
| | | |
| | | //#endregion |
| | | |
| | | |
| | | |
| | | |
| | | #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); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 获取视图 |
| | | /// </summary> |
| | | public async Task<HStation.ReportFile.SimulationWorkingReportViewModel> 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<HStation.ReportFile.SimulationReportPumpItemViewModel>(); |
| | | 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<HStation.BLL.AssetsPumpMain>.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); |
| | | |
| | | return vm; |
| | | } |
| | | } |
| | | } |
| | | } |