using DevExpress.PivotGrid.PivotTable;
using DevExpress.Xpo.Helpers;
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 SimulationSinglePumpFeatCtrl : DevExpress.XtraEditors.XtraUserControl
{
public SimulationSinglePumpFeatCtrl()
{
InitializeComponent();
this.layoutControl1.SetupLayoutControl();
this.pumpOperationChart1.DesignPointChangedEvent += PumpParallelChart1_DesignPointChangedEvent;
this.pumpOperationChart1.QueryPointChangedEvent += PumpParallelChart1_QueryPointChangedEvent;
this.hydroSinglePumpListExtendGridCtrl1.StateChangedEvent += HydroSinglePumpListExtendGridCtrl1_StateChangedEvent;
}
///
/// 保存事件
///
public event Action SaveEvent;
private Yw.Model.HydroModelInfo _hydroInfo = null;
private Yw.Model.HydroPumpInfo _pumpInfo = null;
///
/// 绑定数据
///
public void SetBindingData(Yw.Model.HydroModelInfo hydroInfo, Yw.Model.HydroPumpInfo pumpInfo)
{
if (hydroInfo == null)
{
return;
}
if (pumpInfo == null)
{
return;
}
_hydroInfo = hydroInfo;
_pumpInfo = pumpInfo;
this.hydroSinglePumpListExtendGridCtrl1.SetBindingData(pumpInfo);
var allStateList = this.hydroSinglePumpListExtendGridCtrl1.GetStateList();
var vm = CreateViewModel(allStateList);
this.pumpOperationChart1.SetBindingData(vm);
}
//状态改变事件
private void HydroSinglePumpListExtendGridCtrl1_StateChangedEvent(List allStateList)
{
if (_hydroInfo == null)
{
return;
}
if (_pumpInfo == null)
{
return;
}
var vm = CreateViewModel(allStateList);
this.pumpOperationChart1.SetBindingData(vm);
}
//保存
private void btnSave_Click(object sender, EventArgs e)
{
Save();
}
//创建
private PumpOperationViewModel CreateViewModel(List allStateList)
{
if (_hydroInfo == null)
{
return default;
}
if (_pumpInfo == null)
{
return default;
}
if (allStateList == null || allStateList.Count != 2)
{
return default;
}
var rated = allStateList[0];
var current = allStateList[1];
var vm = new PumpOperationViewModel();
vm.Id = _pumpInfo.Code;
vm.Name = _pumpInfo.Name;
vm.RatedQ = _pumpInfo.RatedQ.HasValue ? _pumpInfo.RatedQ.Value : 0;
vm.RatedH = _pumpInfo.RatedH.HasValue ? _pumpInfo.RatedH.Value : 0;
vm.RatedP = _pumpInfo.RatedP;
vm.RatedN = _pumpInfo.RatedN.HasValue ? _pumpInfo.RatedN.Value : 0;
vm.RatedHz = _pumpInfo.RatedHz;
vm.CurrentHz = current.Hz;
vm.CurrentN = current.N;
vm.CurrentStatus = _pumpInfo.LinkStatus == Yw.Hydro.PumpStatus.Open;
var curveqh = _hydroInfo.Curves?.Find(x => x.Code == _pumpInfo.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 = new CubicSpline2d(qh_pts);
var qh_current_pts = qh_pts.GetQHPointListByN(rated.Hz, current.Hz);
vm.CurrentCurveQH = new CubicSpline2d(qh_current_pts);
}
}
var curveqp = _hydroInfo.Curves?.Find(x => x.Code == _pumpInfo.CurveQP);
if (curveqp != null)
{
var qppts = curveqp.CurveData?.Select(x => new Yw.Geometry.Point2d(x.X, x.Y)).ToList();
if (qppts != null && qppts.Count > 3)
{
vm.CurveQP = new CubicSpline2d(qppts);
var sqppts = qppts.GetQHPointListByN(rated.Hz, current.Hz);
vm.CurrentCurveQP = new CubicSpline2d(sqppts);
}
}
var curveqe = _hydroInfo.Curves?.Find(x => x.Code == _pumpInfo.CurveQE);
if (curveqe != null)
{
var qepts = curveqe.CurveData?.Select(x => new Yw.Geometry.Point2d(x.X, x.Y)).ToList();
if (qepts != null && qepts.Count > 3)
{
vm.CurveQE = new CubicSpline2d(qepts);
var sqepts = qepts.GetQHPointListByN(rated.Hz, current.Hz);
vm.CurrentCurveQE = new CubicSpline2d(sqepts);
}
}
return vm;
}
//设计点改变
private void PumpParallelChart1_DesignPointChangedEvent(List obj)
{
var vmList = obj?.Select(x => new HydroSinglePumpDesignPointViewModel()
{
Name = x.Name,
Hz = x.Hz,
N = x.N,
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.hydroSinglePumpDesignPointListGridCtrl1.SetBindingData(vmList);
}
//查询点改变
private void PumpParallelChart1_QueryPointChangedEvent(List obj)
{
var vmList = obj?.Select(x => new HydroSinglePumpQueryPointViewModel()
{
Name = x.Name,
Hz = x.Hz,
N = x.N,
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.hydroSinglePumpQueryPointListGridCtrl1.SetBindingData(vmList);
}
//设计点
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.pumpOperationChart1.SetDesignPoint(q, h);
}
///
/// 保存
///
public void Save()
{
if (this.hydroSinglePumpListExtendGridCtrl1.HasChanged)
{
this.hydroSinglePumpListExtendGridCtrl1.HasChanged = false;
var result = XtraMessageBox.Show("是否使用现有状态更新模型?", "询问", MessageBoxButtons.YesNo) == DialogResult.Yes;
if (!result)
{
return;
}
var allStateList = this.hydroSinglePumpListExtendGridCtrl1.GetStateList();
if (allStateList == null || allStateList.Count != 2)
{
return;
}
var working = new HydroWorkingPumpViewModel()
{
LinkStatus = _pumpInfo.LinkStatus,
CurrentHz = allStateList[1].Hz
};
this.SaveEvent?.Invoke(working);
}
}
}
}