using DevExpress.PivotGrid.PivotTable;
using DevExpress.XtraEditors;
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.Geometry;
using Yw.Pump;
using Yw.WinFrmUI.Phart;
namespace HStation.WinFrmUI
{
public partial class SimulationPumpParallelCtrl : DevExpress.XtraEditors.XtraUserControl
{
public SimulationPumpParallelCtrl()
{
InitializeComponent();
this.layoutControl1.SetupLayoutControl();
this.hydroPumpListExtendGridCtrl1.StateChangedEvent += HydroPumpListExtendGridCtrl1_StateChangedEvent;
this.pumpParallelChart1.DesignPointChangedEvent += PumpParallelChart1_DesignPointChangedEvent;
this.pumpParallelChart1.QueryPointChangedEvent += PumpParallelChart1_QueryPointChangedEvent;
this.pumpParallelChart1.ParallelStatusChangedEvent += PumpParallelChart1_ParallelStatusChangedEvent;
}
///
/// 保存事件
///
public event Action> SaveEvent;
///
/// 并联状态改变事件
///
public event Action ParallelStatusChangedEvent;
///
/// 绑定列表
///
public void SetBindingData(Yw.Model.HydroModelInfo hydroInfo)
{
this.hydroPumpListExtendGridCtrl1.SetBindingData(hydroInfo);
var allStateList = this.hydroPumpListExtendGridCtrl1.GetStateList();
var allVmList = CreateParallelViewModels(allStateList);
this.pumpParallelChart1.SetBindingData(allVmList);
}
//状态改变事件
private void HydroPumpListExtendGridCtrl1_StateChangedEvent(List allStateList)
{
var allVmList = CreateParallelViewModels(allStateList);
this.pumpParallelChart1.SetBindingData(allVmList);
}
//保存
private void btnSave_Click(object sender, EventArgs e)
{
var result = XtraMessageBox.Show("是否使用现有水泵状态更新模型?", "询问", MessageBoxButtons.YesNo) == DialogResult.Yes;
if (!result)
{
return;
}
var allStateList = this.hydroPumpListExtendGridCtrl1.GetStateList();
if (allStateList == null || allStateList.Count < 1)
{
return;
}
var allSaveList = allStateList.Select(x => new SimulationPumpParallelSaveItemViewModel()
{
Code = x.Code,
LinkStatus = x.RunStatus ? Yw.Hydro.PumpStatus.Open : Yw.Hydro.PumpStatus.Closed,
SpeedRatio = Math.Round(x.Hz / x.Vmo.RatedHz, 2)
}).ToList();
this.SaveEvent?.Invoke(allSaveList);
}
//创建
private List CreateParallelViewModels(List allStateList)
{
var allRunList = allStateList?.Where(x => x.RunStatus).ToList();
if (allRunList == null || allRunList.Count < 1)
{
return default;
}
var vmList = new List();
foreach (var item in allRunList)
{
var vm = new PumpParallelViewModel();
vm.Id = item.Code;
vm.Name = item.Name;
vm.RatedQ = item.Vmo.RatedQ;
vm.RatedH = item.Vmo.RatedH;
vm.RatedP = item.Vmo.RatedP;
vm.RatedN = item.Vmo.RatedN;
vm.RatedHz = item.Vmo.RatedHz;
vm.CurrentHz = item.Hz;
vm.CurrentN = Math.Round(item.Hz / item.Vmo.RatedHz * vm.RatedN, 1);
vm.CurrentColor = item.Color;
double extend = 1;
var curveqh = item.HydroInfo.Curves?.Find(x => x.Code == item.Vmo.CurveQH);
if (curveqh != null)
{
var qh_pts = curveqh.CurveData?.Select(x => new Yw.Geometry.Point2d(x.X, x.Y)).ToList();
if (qh_pts != null && qh_pts.Count > 3)
{
vm.CurveQH = qh_pts;
var qh_current_pts = qh_pts.GetQHPointListByN(item.Vmo.RatedHz, item.Hz);
vm.CurrentCurveQH = qh_current_pts;
if (item.Extend > 100)
{
vm.CurrentExtendFlow = vm.CurrentCurveQH.Max(x => x.X);
extend = item.Extend / 100;
var qh_current_extend_pts = vm.CurrentCurveQH.GetExpandPointList(Yw.Ahart.eFeatType.Cubic, 1, extend, 20);
vm.CurrentCurveQH = qh_current_extend_pts;
}
}
}
var curveqp = item.HydroInfo.Curves?.Find(x => x.Code == item.Vmo.CurveQP);
if (curveqp != null)
{
var qp_pts = curveqp.CurveData?.Select(x => new Yw.Geometry.Point2d(x.X, x.Y)).ToList();
if (qp_pts != null && qp_pts.Count > 3)
{
vm.CurveQP = qp_pts;
var qp_current_pts = qp_pts.GetQPPointListByN(item.Vmo.RatedHz, item.Hz);
vm.CurrentCurveQP = qp_current_pts;
if (extend > 1)
{
var qp_current_extend_pts = vm.CurrentCurveQP.GetExpandPointList(Yw.Ahart.eFeatType.Cubic, 1, extend, 20);
vm.CurrentCurveQP = qp_current_extend_pts;
}
}
}
var curveqe = item.HydroInfo.Curves?.Find(x => x.Code == item.Vmo.CurveQE);
if (curveqe != null)
{
var qe_pts = curveqe.CurveData?.Select(x => new Yw.Geometry.Point2d(x.X, x.Y)).ToList();
if (qe_pts != null && qe_pts.Count > 3)
{
vm.CurveQE = qe_pts;
var qe_current_pts = qe_pts.GetQEPointListByN(item.Vmo.RatedHz, item.Hz);
vm.CurrentCurveQE = qe_current_pts;
if (extend > 1)
{
var qe_current_extend_pts = vm.CurrentCurveQE.GetExpandPointList(Yw.Ahart.eFeatType.Cubic, 1, extend, 20);
vm.CurrentCurveQE = qe_current_extend_pts;
}
}
}
vmList.Add(vm);
}
return vmList;
}
//设计点改变
private void PumpParallelChart1_DesignPointChangedEvent(List obj)
{
var vmList = obj?.Select(x => new HydroPumpDesignPointViewModel()
{
Code = x.Id,
Name = x.Name,
DesignQ = Math.Round(x.Q, 1),
DesignH = Math.Round(x.H, 2),
DesignP = x.P.HasValue ? Math.Round(x.P.Value, 1) : null,
DesignE = x.E.HasValue ? Math.Round(x.E.Value, 1) : null,
}).ToList();
this.hydroPumpDesignPointListGridCtrl1.SetBindingData(vmList);
}
//查询点改变
private void PumpParallelChart1_QueryPointChangedEvent(List obj)
{
var vmList = obj?.Select(x => new HydroPumpQueryPointViewModel()
{
Code = x.Id,
Name = x.Name,
QueryQ = Math.Round(x.Q, 1),
QueryH = Math.Round(x.H, 2),
QueryP = x.P.HasValue ? Math.Round(x.P.Value, 1) : null,
QueryE = x.E.HasValue ? Math.Round(x.E.Value, 1) : null,
}).ToList();
this.hydroPumpQueryPointListGridCtrl1.SetBindingData(vmList);
}
//并联状态改变事件
private void PumpParallelChart1_ParallelStatusChangedEvent(bool status, string msg)
{
this.ParallelStatusChangedEvent?.Invoke(status, msg);
}
//设计点
private void btnDesign_Click(object sender, EventArgs e)
{
var qtext = this.txtDesignQ.Text.Trim();
if (string.IsNullOrEmpty(qtext))
{
TipFormHelper.ShowWarn("请输入设计点流量!");
return;
}
var htext = this.txtDesignH.Text.Trim();
if (string.IsNullOrEmpty(htext))
{
TipFormHelper.ShowWarn("请输入设计点扬程!");
return;
}
var q = double.Parse(qtext);
var h = double.Parse(htext);
this.pumpParallelChart1.SetDesignPoint(q, h);
}
}
}