namespace Yw.WinFrmUI { /// /// 阀门视图 /// public class HydroValveViewModel : HydroLinkViewModel, IHydroCalcuValveResult { /// /// /// public HydroValveViewModel() { } /// /// /// public HydroValveViewModel(Yw.Model.HydroValveInfo rhs, Yw.Model.HydroModelInfo hydroInfo) : base(rhs, hydroInfo) { this.LinkStatus = HydroValveStatusHelper.GetStatusName(rhs.LinkStatus); this.Material = rhs.Material; this.Diameter = rhs.Diameter; this.MinorLoss = rhs.MinorLoss; this.ValveType = HydroValveTypeHelper.GetTypeName(rhs.ValveType); this.OpeningDegree = rhs.OpeningDegree; this.ValveSetting = rhs.ValveSetting; UpdateValveSetting(); } /// /// 阀门状态 /// [Category("数据")] [DisplayName("阀门状态")] [Description("[默认]使用阀门设置;[开启]使用局阻系数")] [PropertyOrder(1003)] [Browsable(true)] [TypeConverter(typeof(HydroValveStatusConverter))] public override string LinkStatus { get; set; } /// /// 材料 /// [Category("数据")] [DisplayName("材料")] [PropertyOrder(2001)] [Browsable(true)] public string Material { get; set; } /// /// 直径 /// [Category("数据")] [DisplayName("直径")] [PropertyOrder(2002)] [Browsable(true)] [DisplayUnit("mm")] public double Diameter { get; set; } /// /// 局阻系数 /// [Category("数据")] [DisplayName("局阻系数")] [PropertyOrder(2003)] [Browsable(true)] public double MinorLoss { get; set; } /// /// 阀门类型 /// [Category("数据")] [DisplayName("阀门类型")] [PropertyOrder(2004)] [Browsable(true)] [TypeConverter(typeof(HydroValveTypeConverter))] public string ValveType { get; set; } /// /// 阀门开度 /// [Category("数据")] [DisplayName("阀门开度")] [Range(10, 100, ErrorMessage = "阀门开度区间在【10,100】")] [PropertyOrder(2005)] [Browsable(true)] public double OpeningDegree { get; set; } /// /// 阀门设置 /// [Category("数据")] [DisplayName("阀门设置")] [PropertyOrder(2006)] [Browsable(true)] public string ValveSetting { get; set; } /// /// 压强设置 /// [Category("数据")] [DisplayName("压强设置")] [Display(Name = "压强设置(m)")] [DisplayUnit("m")] [HydroRealPro("ValveSetting")] [PropertyOrder(2007)] [Browsable(true)] public double? ValvePress { get; set; } /// /// 压强设置 /// [Category("数据")] [DisplayName("流量设置")] [Display(Name = "流量设置(m³/h)")] [DisplayUnit("m³/h")] [HydroRealPro("ValveSetting")] [PropertyOrder(2008)] [Browsable(true)] public double? ValveFlow { get; set; } /// /// 开度损失曲线 /// [Category("数据")] [DisplayName("开度损失曲线")] [HydroRealPro("ValveSetting")] [HydroCurvePro(HydroCurve.Valve, HydroCurveType.CurveOL)] [PropertyOrder(2009)] [Browsable(true)] public string ValveOL { get; set; } /// /// 水头损失曲线 /// [Category("数据")] [DisplayName("水头损失曲线")] [HydroRealPro("ValveSetting")] [HydroCurvePro(HydroCurve.Valve, HydroCurveType.CurveQL)] [PropertyOrder(2010)] [Browsable(true)] public string ValveQL { get; set; } /// /// 流量 /// [Category("计算结果")] [DisplayName("流量")] [DisplayUnit("m³/h")] [Display(Name = "流量(m³/h)")] [PropertyOrder(11001)] [HydroCalcuPro] [ShowEditor(false)] [Browsable(true)] public virtual double? CalcuQ { get; set; } /// /// 进口压力 /// [Category("计算结果")] [DisplayName("进口压力")] [DisplayUnit("m")] [Display(Name = "进口压力(m)")] [PropertyOrder(11002)] [HydroCalcuPro] [ShowEditor(false)] [Browsable(true)] public virtual double? CalcuPr1 { get; set; } /// /// 出口压力 /// [Category("计算结果")] [DisplayName("出口压力")] [DisplayUnit("m")] [Display(Name = "出口压力(m)")] [PropertyOrder(11003)] [HydroCalcuPro] [ShowEditor(false)] [Browsable(true)] public virtual double? CalcuPr2 { get; set; } /// /// 局部损失 /// [Category("计算结果")] [DisplayName("局部损失")] [DisplayUnit("m")] [Display(Name = "局部损失(m)")] [PropertyOrder(19008)] [HydroCalcuPro] [ShowEditor(false)] [Browsable(true)] public override double? CalcuMinorLoss { get; set; } /// /// /// [Browsable(false)] public new Yw.Model.HydroValveInfo Vmo { get { return _vmo as Yw.Model.HydroValveInfo; } set { _vmo = value; } } /// /// 更新属性 /// public override void UpdateProperty() { base.UpdateProperty(); this.LinkStatus = HydroValveStatusHelper.GetStatusName(this.Vmo.LinkStatus); this.Material = this.Vmo.Material; this.Diameter = this.Vmo.Diameter; this.MinorLoss = this.Vmo.MinorLoss; this.ValveType = HydroValveTypeHelper.GetTypeName(this.Vmo.ValveType); this.OpeningDegree = this.Vmo.OpeningDegree; //this.ValveSetting = this.Vmo.ValveSetting; UpdateValveSetting(); } /// /// /// public override void UpdateVmoProperty() { base.UpdateVmoProperty(); this.Vmo.LinkStatus = HydroValveStatusHelper.GetStatusCode(this.LinkStatus); this.Vmo.Material = this.Material; this.Vmo.Diameter = this.Diameter; this.Vmo.MinorLoss = this.MinorLoss; this.Vmo.ValveType = HydroValveTypeHelper.GetTypeCode(this.ValveType); this.Vmo.OpeningDegree = this.OpeningDegree; UpdateVmoValveSetting(); //this.Vmo.ValveSetting = this.ValveSetting; } /// /// 更新计算属性 /// public override void UpdateCalcuProperty(HydroCalcuVisualResult rhs) { base.UpdateCalcuProperty(rhs); if (rhs is HydroCalcuValveResult calcuValveProperty) { this.CalcuQ = calcuValveProperty.CalcuQ.HasValue ? Math.Round(calcuValveProperty.CalcuQ.Value, 1) : null; this.CalcuPr1 = calcuValveProperty.CalcuPr1.HasValue ? Math.Round(calcuValveProperty.CalcuPr1.Value, 2) : null; this.CalcuPr2 = calcuValveProperty.CalcuPr2.HasValue ? Math.Round(calcuValveProperty.CalcuPr2.Value, 2) : null; } } //更新阀门设置 //使用vmo更新自身属性时,再度更新阀门设置的其他属性 private void UpdateValveSetting() { switch (this.Vmo.ValveType) { case Yw.Hydro.ValveType.PSV: { if (double.TryParse(this.ValveSetting, out double press)) { this.ValvePress = press; } } break; case Yw.Hydro.ValveType.PBV: { if (double.TryParse(this.ValveSetting, out double press)) { this.ValvePress = press; } } break; case Yw.Hydro.ValveType.PRV: { if (double.TryParse(this.ValveSetting, out double press)) { this.ValvePress = press; } } break; case Yw.Hydro.ValveType.FCV: { if (double.TryParse(this.ValveSetting, out double flow)) { this.ValveFlow = flow; } } break; case Yw.Hydro.ValveType.TCV: { this.ValveOL = this.ValveSetting; } break; case Yw.Hydro.ValveType.GPV: { this.ValveQL = this.ValveSetting; } break; default: break; } } //更新vmo阀门设置 //使用自身属性,更新vmo阀门设置 private void UpdateVmoValveSetting() { switch (this.Vmo.ValveType) { case Yw.Hydro.ValveType.PSV: { this.ValveSetting = this.ValvePress?.ToString(); } break; case Yw.Hydro.ValveType.PBV: { this.ValveSetting = this.ValvePress?.ToString(); } break; case Yw.Hydro.ValveType.PRV: { this.ValveSetting = this.ValvePress?.ToString(); } break; case Yw.Hydro.ValveType.FCV: { this.ValveSetting = this.ValveFlow?.ToString(); } break; case Yw.Hydro.ValveType.TCV: { this.ValveSetting = this.ValveOL; } break; case Yw.Hydro.ValveType.GPV: { this.ValveSetting = this.ValveQL; } break; default: break; } } } }