lixiaojun
2025-02-06 146ca8c7eefe74d3b73c00a73e99e94e903be401
WinFrmUI/Yw.WinFrmUI.Hydro.Core/03-calcu/01-result/HydroCalcuResultExtensions.cs
@@ -1,8 +1,7 @@
using Yw.Hydro;
using SqlSugar;
using Yw.EPAnet;
using System.Diagnostics.Metrics;
using Yw.Hydro;
using Yw.Model;
using SqlSugar;
namespace Yw.WinFrmUI
{
    /// <summary>
@@ -13,7 +12,12 @@
        /// <summary>
        /// 计算
        /// </summary>
        public static HydroCalcuResult Calcu(this Yw.Model.HydroModelInfo hydroInfo, string calcuMode = Yw.EPAnet.CalcuMode.Simple)
        public static HydroCalcuResult Calcu
            (
                this Yw.Model.HydroModelInfo hydroInfo,
                string calcuMode = Yw.EPAnet.CalcuMode.Simple,
                bool isHead = false
            )
        {
            var network = hydroInfo.ToNetwork();
            if (network == null)
@@ -25,13 +29,18 @@
            {
                return default;
            }
            return hydroInfo.GetCalcuResult(calcuResult);
            return hydroInfo.GetCalcuResult(calcuResult, isHead);
        }
        /// <summary>
        /// 获取计算结果
        /// </summary>
        public static HydroCalcuResult GetCalcuResult(this Yw.Model.HydroModelInfo hydroInfo, Yw.EPAnet.CalcuResult calcuResult)
        public static HydroCalcuResult GetCalcuResult
            (
                this Yw.Model.HydroModelInfo hydroInfo,
                Yw.EPAnet.CalcuResult calcuResult,
                bool isHead = false
            )
        {
            if (hydroInfo == null)
            {
@@ -119,7 +128,7 @@
                    if (calcuJunctionResult != null)
                    {
                        var calcuJunctionNewResult = new HydroCalcuJunctionResult(calcuJunctionResult);
                        calcuJunctionNewResult.CalcuPr = calcuJunctionResult.CalcuPress;
                        calcuJunctionNewResult.CalcuPr = isHead ? calcuJunctionResult.CalcuHead : calcuJunctionResult.CalcuPress;
                        hydroCalcuResult.NodeList.Remove(calcuJunctionResult);
                        hydroCalcuResult.NodeList.Add(calcuJunctionNewResult);
                    }
@@ -139,7 +148,7 @@
                    if (calcuBluntheadResult != null)
                    {
                        var calcuBluntheadNewResult = new HydroCalcuBluntheadResult(calcuBluntheadResult);
                        calcuBluntheadNewResult.CalcuPr = calcuBluntheadResult.CalcuPress;
                        calcuBluntheadNewResult.CalcuPr = isHead ? calcuBluntheadResult.CalcuHead : calcuBluntheadResult.CalcuPress;
                        hydroCalcuResult.NodeList.Remove(calcuBluntheadResult);
                        hydroCalcuResult.NodeList.Add(calcuBluntheadNewResult);
                    }
@@ -159,7 +168,7 @@
                    if (calcuElbowResult != null)
                    {
                        var calcuElbowNewResult = new HydroCalcuElbowResult(calcuElbowResult);
                        calcuElbowNewResult.CalcuPr = calcuElbowResult.CalcuPress;
                        calcuElbowNewResult.CalcuPr = isHead ? calcuElbowResult.CalcuHead : calcuElbowResult.CalcuPress;
                        hydroCalcuResult.NodeList.Remove(calcuElbowResult);
                        hydroCalcuResult.NodeList.Add(calcuElbowNewResult);
                    }
@@ -179,7 +188,7 @@
                    if (calcuThreelinkResult != null)
                    {
                        var calcuThreelinkNewResult = new HydroCalcuThreelinkResult(calcuThreelinkResult);
                        calcuThreelinkNewResult.CalcuPr = calcuThreelinkResult.CalcuPress;
                        calcuThreelinkNewResult.CalcuPr = isHead ? calcuThreelinkResult.CalcuHead : calcuThreelinkResult.CalcuPress;
                        hydroCalcuResult.NodeList.Remove(calcuThreelinkResult);
                        hydroCalcuResult.NodeList.Add(calcuThreelinkNewResult);
                    }
@@ -199,7 +208,7 @@
                    if (calcuFourlinkResult != null)
                    {
                        var calcuFourlinkNewResult = new HydroCalcuFourlinkResult(calcuFourlinkResult);
                        calcuFourlinkNewResult.CalcuPr = calcuFourlinkResult.CalcuPress;
                        calcuFourlinkNewResult.CalcuPr = isHead ? calcuFourlinkResult.CalcuHead : calcuFourlinkResult.CalcuPress;
                        hydroCalcuResult.NodeList.Remove(calcuFourlinkResult);
                        hydroCalcuResult.NodeList.Add(calcuFourlinkNewResult);
                    }
@@ -219,7 +228,7 @@
                    if (calcuHydrantResult != null)
                    {
                        var calcuHydrantNewResult = new HydroCalcuHydrantResult(calcuHydrantResult);
                        calcuHydrantNewResult.CalcuPr = calcuHydrantResult.CalcuPress;
                        calcuHydrantNewResult.CalcuPr = isHead ? calcuHydrantResult.CalcuHead : calcuHydrantResult.CalcuPress;
                        var linkHydrantList = allLinkList?.Where(x => x.StartCode == hydrant.Code || x.EndCode == hydrant.Code).ToList();
                        if (linkHydrantList != null && linkHydrantList.Count > 0)
@@ -257,7 +266,7 @@
                    if (calcuNozzleResult != null)
                    {
                        var calcuNozzleNewResult = new HydroCalcuNozzleResult(calcuNozzleResult);
                        calcuNozzleNewResult.CalcuPr = calcuNozzleResult.CalcuPress;
                        calcuNozzleNewResult.CalcuPr = isHead ? calcuNozzleResult.CalcuHead : calcuNozzleResult.CalcuPress;
                        var linkNozzleList = allLinkList?.Where(x => x.StartCode == nozzle.Code || x.EndCode == nozzle.Code).ToList();
                        if (linkNozzleList != null && linkNozzleList.Count > 0)
@@ -295,7 +304,7 @@
                    if (calcuCoolingResult != null)
                    {
                        var calcuCoolingNewResult = new HydroCalcuCoolingResult(calcuCoolingResult);
                        calcuCoolingNewResult.CalcuPr = calcuCoolingResult.CalcuPress;
                        calcuCoolingNewResult.CalcuPr = isHead ? calcuCoolingResult.CalcuHead : calcuCoolingResult.CalcuPress;
                        var linkCoolingList = allLinkList?.Where(x => x.StartCode == cooling.Code || x.EndCode == cooling.Code).ToList();
                        if (linkCoolingList != null && linkCoolingList.Count > 0)
@@ -333,7 +342,7 @@
                    if (calcuMeterResult != null)
                    {
                        var calcuMeterNewResult = new HydroCalcuMeterResult(calcuMeterResult);
                        calcuMeterNewResult.CalcuPr = calcuMeterResult.CalcuPress;
                        calcuMeterNewResult.CalcuPr = isHead ? calcuMeterResult.CalcuHead : calcuMeterResult.CalcuPress;
                        var linkMeterList = allLinkList?.Where(x => x.StartCode == meter.Code || x.EndCode == meter.Code).ToList();
                        if (linkMeterList != null && linkMeterList.Count > 0)
@@ -371,7 +380,7 @@
                    if (calcuFlowmeterResult != null)
                    {
                        var calcuFlowmeterNewResult = new HydroCalcuFlowmeterResult(calcuFlowmeterResult);
                        calcuFlowmeterNewResult.CalcuPr = calcuFlowmeterResult.CalcuPress;
                        calcuFlowmeterNewResult.CalcuPr = isHead ? calcuFlowmeterResult.CalcuHead : calcuFlowmeterResult.CalcuPress;
                        var linkFlowmeterList = allLinkList?.Where(x => x.StartCode == flowmeter.Code || x.EndCode == flowmeter.Code).ToList();
                        if (linkFlowmeterList != null && linkFlowmeterList.Count > 0)
@@ -410,7 +419,7 @@
                    if (calcuPressmeterResult != null)
                    {
                        var calcuPressmeterNewResult = new HydroCalcuPressmeterResult(calcuPressmeterResult);
                        calcuPressmeterNewResult.CalcuPr = calcuPressmeterResult.CalcuPress;
                        calcuPressmeterNewResult.CalcuPr = isHead ? calcuPressmeterResult.CalcuHead : calcuPressmeterResult.CalcuPress;
                        hydroCalcuResult.NodeList.Remove(calcuPressmeterResult);
                        hydroCalcuResult.NodeList.Add(calcuPressmeterNewResult);
                    }
@@ -437,13 +446,13 @@
                            var calcuStartPipeNodeResult = allCalcuResultVisualDict?.GetValue(startPipeCode) as HydroCalcuNodeResult;
                            if (calcuStartPipeNodeResult != null)
                            {
                                calcuPipeNewResult.CalcuPr1 = calcuStartPipeNodeResult.CalcuPress;
                                calcuPipeNewResult.CalcuPr1 = isHead ? calcuStartPipeNodeResult.CalcuHead : calcuStartPipeNodeResult.CalcuPress;
                            }
                            var endPipeCode = calcuPipeResult.CalcuFlow.Value > 0 ? pipe.EndCode : pipe.StartCode;
                            var calcuEndPipeNodeResult = allCalcuResultVisualDict?.GetValue(endPipeCode) as HydroCalcuNodeResult;
                            if (calcuEndPipeNodeResult != null)
                            {
                                calcuPipeNewResult.CalcuPr2 = calcuEndPipeNodeResult.CalcuPress;
                                calcuPipeNewResult.CalcuPr2 = isHead ? calcuEndPipeNodeResult.CalcuHead : calcuEndPipeNodeResult.CalcuPress;
                            }
                        }
@@ -474,13 +483,13 @@
                            var calcuStartTranslationNodeResult = allCalcuResultVisualDict?.GetValue(startTranslationCode) as HydroCalcuNodeResult;
                            if (calcuStartTranslationNodeResult != null)
                            {
                                calcuTranslationNewResult.CalcuPr1 = calcuStartTranslationNodeResult.CalcuPress;
                                calcuTranslationNewResult.CalcuPr1 = isHead ? calcuStartTranslationNodeResult.CalcuHead : calcuStartTranslationNodeResult.CalcuPress;
                            }
                            var endTranslationCode = calcuTranslationResult.CalcuFlow.Value > 0 ? translation.EndCode : translation.StartCode;
                            var calcuEndTranslationNodeResult = allCalcuResultVisualDict?.GetValue(endTranslationCode) as HydroCalcuNodeResult;
                            if (calcuEndTranslationNodeResult != null)
                            {
                                calcuTranslationNewResult.CalcuPr2 = calcuEndTranslationNodeResult.CalcuPress;
                                calcuTranslationNewResult.CalcuPr2 = isHead ? calcuEndTranslationNodeResult.CalcuHead : calcuEndTranslationNodeResult.CalcuPress;
                            }
                        }
@@ -516,7 +525,7 @@
                                var calcuStartPumpNodeResult = allCalcuResultVisualDict?.GetValue(startPumpCode) as HydroCalcuNodeResult;
                                if (calcuStartPumpNodeResult != null)
                                {
                                    calcuPumpNewResult.CalcuPr1 = calcuStartPumpNodeResult.CalcuPress;
                                    calcuPumpNewResult.CalcuPr1 = isHead ? calcuStartPumpNodeResult.CalcuHead : calcuStartPumpNodeResult.CalcuPress;
                                }
                            }
@@ -528,7 +537,7 @@
                                var calcuEndPumpNodeResult = allCalcuResultVisualDict?.GetValue(endPumpCode) as HydroCalcuNodeResult;
                                if (calcuEndPumpNodeResult != null)
                                {
                                    calcuPumpNewResult.CalcuPr2 = calcuEndPumpNodeResult.CalcuPress;
                                    calcuPumpNewResult.CalcuPr2 = isHead ? calcuEndPumpNodeResult.CalcuHead : calcuEndPumpNodeResult.CalcuPress;
                                }
                            }
@@ -539,15 +548,15 @@
                                {
                                    var pr1 = CalculationHelper.M2Mpa(calcuPumpNewResult.CalcuPr1.Value);
                                    var pr2 = CalculationHelper.M2Mpa(calcuPumpNewResult.CalcuPr2.Value);
                                    var d1 = pump.InletDiameter;
                                    var d2 = pump.OutletDiameter;
                                    var z1 = (startPumpNode as HydroJunctionInfo)?.Elev;
                                    var z2 = (endPumpNode as HydroJunctionInfo)?.Elev;
                                    double? d1 = pump.InletDiameter < 1 ? null : pump.InletDiameter;
                                    double? d2 = pump.OutletDiameter < 1 ? null : pump.OutletDiameter;
                                    double? z1 = (startPumpNode as HydroJunctionInfo)?.Elev;
                                    double? z2 = (endPumpNode as HydroJunctionInfo)?.Elev;
                                    calcuPumpNewResult.CalcuH = Yw.Pump.CalculationHelper.CalcuH(pr1, pr2, calcuPumpNewResult.CalcuQ.Value, d1, d2, z1, z2);
                                }
                                //功率
                                if (pump.LinkStatus == Yw.Hydro.PumpStatus.Open && pump.RatedN.HasValue)
                                if (pump.LinkStatus == Yw.Hydro.PumpStatus.Open)
                                {
                                    var curveqp = hydroInfo.Curves?.Find(x => x.Code == pump.CurveQP);
                                    if (curveqp != null)
@@ -555,7 +564,7 @@
                                        if (curveqp.CurveData != null && curveqp.CurveData.Count > 3)
                                        {
                                            var point2dList = curveqp.CurveData.Select(x => new Yw.Geometry.Point2d(x.X, x.Y)).ToList();
                                            var point2dSimularList = point2dList.GetQPPointListByN(pump.RatedN.Value, pump.RatedN.Value * pump.SpeedRatio);
                                            var point2dSimularList = point2dList.GetQPPointListByN(pump.RatedN, pump.RatedN * pump.SpeedRatio);
                                            var pumpCurveQp = new Yw.Pump.CurveQP(Yw.Ahart.eFeatType.Cubic, point2dSimularList);
                                            calcuPumpNewResult.CalcuP = pumpCurveQp.FeatCurve.GetPointYUnlimited(calcuPumpNewResult.CalcuQ.Value);
                                        }
@@ -652,13 +661,13 @@
                            var calcuStartValveNodeResult = allCalcuResultVisualDict?.GetValue(startValveCode) as HydroCalcuNodeResult;
                            if (calcuStartValveNodeResult != null)
                            {
                                calcuValveNewResult.CalcuPr1 = calcuStartValveNodeResult.CalcuPress;
                                calcuValveNewResult.CalcuPr1 = isHead ? calcuStartValveNodeResult.CalcuHead : calcuStartValveNodeResult.CalcuPress;
                            }
                            var endValveCode = calcuValveResult.CalcuFlow.Value > 0 ? valve.EndCode : valve.StartCode;
                            var calcuEndValveNodeResult = allCalcuResultVisualDict?.GetValue(endValveCode) as HydroCalcuNodeResult;
                            if (calcuEndValveNodeResult != null)
                            {
                                calcuValveNewResult.CalcuPr2 = calcuEndValveNodeResult.CalcuPress;
                                calcuValveNewResult.CalcuPr2 = isHead ? calcuEndValveNodeResult.CalcuHead : calcuEndValveNodeResult.CalcuPress;
                            }
                        }
@@ -688,13 +697,13 @@
                            var calcuStartExchangerNodeResult = allCalcuResultVisualDict?.GetValue(startExchangerCode) as HydroCalcuNodeResult;
                            if (calcuStartExchangerNodeResult != null)
                            {
                                calcuExchangerNewResult.CalcuPr1 = calcuStartExchangerNodeResult.CalcuPress;
                                calcuExchangerNewResult.CalcuPr1 = isHead ? calcuStartExchangerNodeResult.CalcuHead : calcuStartExchangerNodeResult.CalcuPress;
                            }
                            var endExchangerCode = calcuExchangerResult.CalcuFlow.Value > 0 ? exchanger.EndCode : exchanger.StartCode;
                            var calcuEndExchangerNodeResult = allCalcuResultVisualDict?.GetValue(endExchangerCode) as HydroCalcuNodeResult;
                            if (calcuEndExchangerNodeResult != null)
                            {
                                calcuExchangerNewResult.CalcuPr2 = calcuEndExchangerNodeResult.CalcuPress;
                                calcuExchangerNewResult.CalcuPr2 = isHead ? calcuEndExchangerNodeResult.CalcuHead : calcuEndExchangerNodeResult.CalcuPress;
                            }
                        }
@@ -724,13 +733,13 @@
                            var calcuStartCompressorNodeResult = allCalcuResultVisualDict?.GetValue(startCompressorCode) as HydroCalcuNodeResult;
                            if (calcuStartCompressorNodeResult != null)
                            {
                                calcuCompressorNewResult.CalcuPr1 = calcuStartCompressorNodeResult.CalcuPress;
                                calcuCompressorNewResult.CalcuPr1 = isHead ? calcuStartCompressorNodeResult.CalcuHead : calcuStartCompressorNodeResult.CalcuPress;
                            }
                            var endCompressorCode = calcuCompressorResult.CalcuFlow.Value > 0 ? compressor.EndCode : compressor.StartCode;
                            var calcuEndCompressorNodeResult = allCalcuResultVisualDict?.GetValue(endCompressorCode) as HydroCalcuNodeResult;
                            if (calcuEndCompressorNodeResult != null)
                            {
                                calcuCompressorNewResult.CalcuPr2 = calcuEndCompressorNodeResult.CalcuPress;
                                calcuCompressorNewResult.CalcuPr2 = isHead ? calcuEndCompressorNodeResult.CalcuHead : calcuEndCompressorNodeResult.CalcuPress;
                            }
                        }