using DevExpress.Pdf.ContentGeneration.Fonts; using NPOI.SS.Formula.Functions; using SqlSugar; using System.Diagnostics.Metrics; using Yw.EPAnet; using Yw.Hydro; using Yw.Model; namespace Yw.WinFrmUI { /// /// /// public static class HydroCalcuResultExtensions { /// /// 计算 /// public static HydroCalcuResult Calcu ( this Yw.Model.HydroModelInfo hydroInfo, string calcuMode = Yw.EPAnet.CalcuMode.MinorLoss, bool isHead = false, List allEvaluationList = null ) { var network = hydroInfo.ToNetwork(); if (network == null) { return default; } var calcuResult = network.Calcu(calcuMode); if (calcuResult == null) { return default; } return hydroInfo.GetCalcuResult(calcuResult, isHead, allEvaluationList); } /// /// 获取计算结果 /// public static HydroCalcuResult GetCalcuResult ( this Yw.Model.HydroModelInfo hydroInfo, Yw.EPAnet.CalcuResult calcuResult, bool isHead = false, List allEvaluationList = null ) { if (hydroInfo == null) { return default; } if (calcuResult == null) { return default; } var allNodeList = hydroInfo.GetAllNodes(); var allLinkList = hydroInfo.GetAllLinks(); var hydroCalcuResult = new HydroCalcuResult(calcuResult); var allCalcuResultVisualDict = hydroCalcuResult.GetVisualDict(); #region 评估 //局部损失 var allMinorLossEvaluationList = allEvaluationList?.Where(x => x.EvaluateType == Yw.Hydro.EvaluateType.MinorLoss).ToList(); //压差 var allPressDiffEvaluationList = allEvaluationList?.Where(x => x.EvaluateType == Yw.Hydro.EvaluateType.PressDiff).ToList(); //千米沿程损失 var allFrictionLossKmEvaluationList = allEvaluationList?.Where(x => x.EvaluateType == Yw.Hydro.EvaluateType.FrictionLossKm).ToList(); //运行流量 var allFlowRunEvaluationList = allEvaluationList?.Where(x => x.EvaluateType == Yw.Hydro.EvaluateType.FlowRun).ToList(); //压力 var allPressEvaluationList = allEvaluationList?.Where(x => x.EvaluateType == Yw.Hydro.EvaluateType.Press).ToList(); #endregion #region 水库 var allReservoirList = hydroInfo.Reservoirs; if (allReservoirList != null && allReservoirList.Count > 0) { foreach (var reservoir in allReservoirList) { var calcuReservoirResult = allCalcuResultVisualDict?.GetValue(reservoir.Code) as HydroCalcuNodeResult; if (calcuReservoirResult != null) { var calcuReservoirNewResult = new HydroCalcuReservoirResult(calcuReservoirResult); calcuReservoirNewResult.CalcuL = calcuReservoirResult.CalcuPress; hydroCalcuResult.NodeList.Remove(calcuReservoirResult); hydroCalcuResult.NodeList.Add(calcuReservoirNewResult); } } } #endregion #region 水池 var allTankList = hydroInfo.Tanks; if (allTankList != null && allTankList.Count > 0) { foreach (var tank in allTankList) { var calcuTankResult = allCalcuResultVisualDict?.GetValue(tank.Code) as HydroCalcuNodeResult; if (calcuTankResult != null) { var calcuTankNewResult = new HydroCalcuTankResult(calcuTankResult); calcuTankNewResult.CalcuL = calcuTankResult.CalcuPress; hydroCalcuResult.NodeList.Remove(calcuTankResult); hydroCalcuResult.NodeList.Add(calcuTankNewResult); } } } #endregion #region 水箱 var allWaterboxList = hydroInfo.Waterboxs; if (allWaterboxList != null && allWaterboxList.Count > 0) { foreach (var waterbox in allWaterboxList) { var calcuWaterboxResult = allCalcuResultVisualDict?.GetValue(waterbox.Code) as HydroCalcuNodeResult; if (calcuWaterboxResult != null) { var calcuWaterboxNewResult = new HydroCalcuWaterboxResult(calcuWaterboxResult); calcuWaterboxNewResult.CalcuL = calcuWaterboxResult.CalcuPress; hydroCalcuResult.NodeList.Remove(calcuWaterboxResult); hydroCalcuResult.NodeList.Add(calcuWaterboxNewResult); } } } #endregion #region 连接节点 var allJunctionList = hydroInfo.Junctions; if (allJunctionList != null && allJunctionList.Count > 0) { foreach (var junction in allJunctionList) { var calcuJunctionResult = allCalcuResultVisualDict?.GetValue(junction.Code) as HydroCalcuNodeResult; if (calcuJunctionResult != null) { var calcuJunctionNewResult = new HydroCalcuJunctionResult(calcuJunctionResult); calcuJunctionNewResult.CalcuPr = isHead ? calcuJunctionResult.CalcuHead : calcuJunctionResult.CalcuPress; hydroCalcuResult.NodeList.Remove(calcuJunctionResult); hydroCalcuResult.NodeList.Add(calcuJunctionNewResult); } } } #endregion #region 闷头 var allBluntheadList = hydroInfo.Bluntheads; if (allBluntheadList != null && allBluntheadList.Count > 0) { foreach (var blunthead in allBluntheadList) { var calcuBluntheadResult = allCalcuResultVisualDict?.GetValue(blunthead.Code) as HydroCalcuNodeResult; if (calcuBluntheadResult != null) { var calcuBluntheadNewResult = new HydroCalcuBluntheadResult(calcuBluntheadResult); calcuBluntheadNewResult.CalcuPr = isHead ? calcuBluntheadResult.CalcuHead : calcuBluntheadResult.CalcuPress; hydroCalcuResult.NodeList.Remove(calcuBluntheadResult); hydroCalcuResult.NodeList.Add(calcuBluntheadNewResult); } } } #endregion #region 弯头 var allElbowList = hydroInfo.Elbows; if (allElbowList != null && allElbowList.Count > 0) { var allElbowMinorLossEvaluationList = allMinorLossEvaluationList?.Where(x => x.Catalog == Yw.Hydro.ParterCatalog.Elbow).ToList(); foreach (var elbow in allElbowList) { var calcuElbowResult = allCalcuResultVisualDict?.GetValue(elbow.Code) as HydroCalcuNodeResult; if (calcuElbowResult != null) { var calcuElbowNewResult = new HydroCalcuElbowResult(calcuElbowResult); calcuElbowNewResult.CalcuPr = isHead ? calcuElbowResult.CalcuHead : calcuElbowResult.CalcuPress; hydroCalcuResult.NodeList.Remove(calcuElbowResult); hydroCalcuResult.NodeList.Add(calcuElbowNewResult); if (calcuElbowNewResult.CalcuMinorLoss.HasValue) { if (allElbowMinorLossEvaluationList != null && allElbowMinorLossEvaluationList.Count > 0) { foreach (var elbowMinorLossEvaluation in allElbowMinorLossEvaluationList) { if (elbowMinorLossEvaluation.IsMeet(calcuElbowNewResult.CalcuMinorLoss.Value)) { hydroCalcuResult.WainingList.Add(new HydroCalcuWarning() { Code = elbow.Code, Message = $"[{elbow.Name}]{elbowMinorLossEvaluation.EvaluateContent}" }); } } } } } } } #endregion #region 三通 var allThreelinkList = hydroInfo.Threelinks; if (allThreelinkList != null && allThreelinkList.Count > 0) { var allTreelinkMinorLossEvaluationList = allMinorLossEvaluationList?.Where(x => x.Catalog == Yw.Hydro.ParterCatalog.Threelink).ToList(); foreach (var threelink in allThreelinkList) { var calcuThreelinkResult = allCalcuResultVisualDict?.GetValue(threelink.Code) as HydroCalcuNodeResult; if (calcuThreelinkResult != null) { var calcuThreelinkNewResult = new HydroCalcuThreelinkResult(calcuThreelinkResult); calcuThreelinkNewResult.CalcuPr = isHead ? calcuThreelinkResult.CalcuHead : calcuThreelinkResult.CalcuPress; hydroCalcuResult.NodeList.Remove(calcuThreelinkResult); hydroCalcuResult.NodeList.Add(calcuThreelinkNewResult); if (calcuThreelinkNewResult.CalcuMinorLoss.HasValue) { if (allTreelinkMinorLossEvaluationList != null && allTreelinkMinorLossEvaluationList.Count > 0) { foreach (var threelinkMinorLossEvaluation in allTreelinkMinorLossEvaluationList) { if (threelinkMinorLossEvaluation.IsMeet(calcuThreelinkNewResult.CalcuMinorLoss.Value)) { hydroCalcuResult.WainingList.Add(new HydroCalcuWarning() { Code = threelink.Code, Message = $"[{threelink.Name}]{threelinkMinorLossEvaluation.EvaluateContent}" }); } } } } } } } #endregion #region 四通 var allFourlinkList = hydroInfo.Fourlinks; if (allFourlinkList != null && allFourlinkList.Count > 0) { var allFourlinkMinorLossEvaluationList = allMinorLossEvaluationList?.Where(x => x.Catalog == Yw.Hydro.ParterCatalog.Fourlink).ToList(); foreach (var fourlink in allFourlinkList) { var calcuFourlinkResult = allCalcuResultVisualDict?.GetValue(fourlink.Code) as HydroCalcuNodeResult; if (calcuFourlinkResult != null) { var calcuFourlinkNewResult = new HydroCalcuFourlinkResult(calcuFourlinkResult); calcuFourlinkNewResult.CalcuPr = isHead ? calcuFourlinkResult.CalcuHead : calcuFourlinkResult.CalcuPress; hydroCalcuResult.NodeList.Remove(calcuFourlinkResult); hydroCalcuResult.NodeList.Add(calcuFourlinkNewResult); if (calcuFourlinkNewResult.CalcuMinorLoss.HasValue) { if (allFourlinkMinorLossEvaluationList != null && allFourlinkMinorLossEvaluationList.Count > 0) { foreach (var fourlinkMinorLossEvaluation in allFourlinkMinorLossEvaluationList) { if (fourlinkMinorLossEvaluation.IsMeet(calcuFourlinkNewResult.CalcuMinorLoss.Value)) { hydroCalcuResult.WainingList.Add(new HydroCalcuWarning() { Code = fourlink.Code, Message = $"[{fourlink.Name}]{fourlinkMinorLossEvaluation.EvaluateContent}" }); } } } } } } } #endregion #region 消火栓 var allHydrantList = hydroInfo.Hydrants; if (allHydrantList != null && allHydrantList.Count > 0) { var allHydrantMinorLossEvaluationList = allMinorLossEvaluationList?.Where(x => x.Catalog == Yw.Hydro.ParterCatalog.Hydrant).ToList(); foreach (var hydrant in allHydrantList) { var calcuHydrantResult = allCalcuResultVisualDict?.GetValue(hydrant.Code) as HydroCalcuNodeResult; if (calcuHydrantResult != null) { var calcuHydrantNewResult = new HydroCalcuHydrantResult(calcuHydrantResult); 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) { foreach (var linkHydrant in linkHydrantList) { var calcuLinkHydrantResult = allCalcuResultVisualDict?.GetValue(linkHydrant.Code) as HydroCalcuLinkResult; if (calcuLinkHydrantResult != null) { if (calcuLinkHydrantResult.CalcuFlow.HasValue) { calcuHydrantNewResult.CalcuQ = Math.Abs(calcuLinkHydrantResult.CalcuFlow.Value); break; } } } } hydroCalcuResult.NodeList.Remove(calcuHydrantResult); hydroCalcuResult.NodeList.Add(calcuHydrantNewResult); if (calcuHydrantNewResult.CalcuMinorLoss.HasValue) { if (allHydrantMinorLossEvaluationList != null && allHydrantMinorLossEvaluationList.Count > 0) { foreach (var hydrantMinorLossEvaluation in allHydrantMinorLossEvaluationList) { if (hydrantMinorLossEvaluation.IsMeet(calcuHydrantNewResult.CalcuMinorLoss.Value)) { hydroCalcuResult.WainingList.Add(new HydroCalcuWarning() { Code = hydrant.Code, Message = $"[{hydrant.Name}]{hydrantMinorLossEvaluation.EvaluateContent}" }); } } } } } } } #endregion #region 喷头 var allNozzleList = hydroInfo.Nozzles; if (allNozzleList != null && allNozzleList.Count > 0) { var allNozzleMinorLossEvaluationList = allMinorLossEvaluationList?.Where(x => x.Catalog == Yw.Hydro.ParterCatalog.Nozzle).ToList(); foreach (var nozzle in allNozzleList) { var calcuNozzleResult = allCalcuResultVisualDict?.GetValue(nozzle.Code) as HydroCalcuNodeResult; if (calcuNozzleResult != null) { var calcuNozzleNewResult = new HydroCalcuNozzleResult(calcuNozzleResult); 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) { foreach (var linkNozzle in linkNozzleList) { var calcuLinkNozzleResult = allCalcuResultVisualDict?.GetValue(linkNozzle.Code) as HydroCalcuLinkResult; if (calcuLinkNozzleResult != null) { if (calcuLinkNozzleResult.CalcuFlow.HasValue) { calcuNozzleNewResult.CalcuQ = Math.Abs(calcuLinkNozzleResult.CalcuFlow.Value); break; } } } } hydroCalcuResult.NodeList.Remove(calcuNozzleResult); hydroCalcuResult.NodeList.Add(calcuNozzleNewResult); if (calcuNozzleNewResult.CalcuMinorLoss.HasValue) { if (allNozzleMinorLossEvaluationList != null && allNozzleMinorLossEvaluationList.Count > 0) { foreach (var nozzleMinorLossEvaluation in allNozzleMinorLossEvaluationList) { if (nozzleMinorLossEvaluation.IsMeet(calcuNozzleNewResult.CalcuMinorLoss.Value)) { hydroCalcuResult.WainingList.Add(new HydroCalcuWarning() { Code = nozzle.Code, Message = $"[{nozzle.Name}]{nozzleMinorLossEvaluation.EvaluateContent}" }); } } } } } } } #endregion #region 冷却塔 var allCoolingList = hydroInfo.Coolings; if (allCoolingList != null && allCoolingList.Count > 0) { var allCoolingMinorLossEvaluationList = allMinorLossEvaluationList?.Where(x => x.Catalog == Yw.Hydro.ParterCatalog.Cooling).ToList(); var allCoolingPressDiffEvaluationList = allPressDiffEvaluationList?.Where(x => x.Catalog == Yw.Hydro.ParterCatalog.Cooling).ToList(); foreach (var cooling in allCoolingList) { var calcuCoolingResult = allCalcuResultVisualDict?.GetValue(cooling.Code) as HydroCalcuNodeResult; if (calcuCoolingResult != null) { var calcuCoolingNewResult = new HydroCalcuCoolingResult(calcuCoolingResult); 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) { foreach (var linkCooling in linkCoolingList) { var calcuLinkCoolingResult = allCalcuResultVisualDict?.GetValue(linkCooling.Code) as HydroCalcuLinkResult; if (calcuLinkCoolingResult != null) { if (calcuLinkCoolingResult.CalcuFlow.HasValue) { calcuCoolingNewResult.CalcuQ = Math.Abs(calcuLinkCoolingResult.CalcuFlow.Value); break; } } } } hydroCalcuResult.NodeList.Remove(calcuCoolingResult); hydroCalcuResult.NodeList.Add(calcuCoolingNewResult); if (calcuCoolingNewResult.CalcuMinorLoss.HasValue) { if (allCoolingMinorLossEvaluationList != null && allCoolingMinorLossEvaluationList.Count > 0) { foreach (var coolingMinorLossEvaluation in allCoolingMinorLossEvaluationList) { if (coolingMinorLossEvaluation.IsMeet(calcuCoolingNewResult.CalcuMinorLoss.Value)) { hydroCalcuResult.WainingList.Add(new HydroCalcuWarning() { Code = cooling.Code, Message = $"[{cooling.Name}]{coolingMinorLossEvaluation.EvaluateContent}" }); } } } } if (calcuCoolingNewResult.CalcuPress.HasValue) { if (allCoolingPressDiffEvaluationList != null && allCoolingPressDiffEvaluationList.Count > 0) { var coolingPressDiff = calcuCoolingNewResult.CalcuPress.Value - cooling.LowerLimit; foreach (var coolingPressDiffEvaluation in allCoolingPressDiffEvaluationList) { if (coolingPressDiffEvaluation.IsMeet(coolingPressDiff)) { hydroCalcuResult.WainingList.Add(new HydroCalcuWarning() { Code = cooling.Code, Message = $"[{cooling.Name}]{coolingPressDiffEvaluation.EvaluateContent}" }); } } } } } } } #endregion #region 水表 var allMeterList = hydroInfo.Meters; if (allMeterList != null && allMeterList.Count > 0) { var allMeterMinorLossEvaluationList = allMinorLossEvaluationList?.Where(x => x.Catalog == Yw.Hydro.ParterCatalog.Meter).ToList(); foreach (var meter in allMeterList) { var calcuMeterResult = allCalcuResultVisualDict?.GetValue(meter.Code) as HydroCalcuNodeResult; if (calcuMeterResult != null) { var calcuMeterNewResult = new HydroCalcuMeterResult(calcuMeterResult); 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) { foreach (var linkMeter in linkMeterList) { var calcuLinkMeterResult = allCalcuResultVisualDict?.GetValue(linkMeter.Code) as HydroCalcuLinkResult; if (calcuLinkMeterResult != null) { if (calcuLinkMeterResult.CalcuFlow.HasValue) { calcuMeterNewResult.CalcuQ = Math.Abs(calcuLinkMeterResult.CalcuFlow.Value); break; } } } } hydroCalcuResult.NodeList.Remove(calcuMeterResult); hydroCalcuResult.NodeList.Add(calcuMeterNewResult); if (calcuMeterNewResult.CalcuMinorLoss.HasValue) { if (allMeterMinorLossEvaluationList != null && allMeterMinorLossEvaluationList.Count > 0) { foreach (var meterMinorLossEvaluation in allMeterMinorLossEvaluationList) { if (meterMinorLossEvaluation.IsMeet(calcuMeterNewResult.CalcuMinorLoss.Value)) { hydroCalcuResult.WainingList.Add(new HydroCalcuWarning() { Code = meter.Code, Message = $"[{meter.Name}]{meterMinorLossEvaluation.EvaluateContent}" }); } } } } } } } #endregion #region 流量计 var allFlowmeterList = hydroInfo.Flowmeters; if (allFlowmeterList != null && allFlowmeterList.Count > 0) { var allFlowmeterMinorLossEvaluationList = allMinorLossEvaluationList?.Where(x => x.Catalog == Yw.Hydro.ParterCatalog.Flowmeter).ToList(); foreach (var flowmeter in allFlowmeterList) { var calcuFlowmeterResult = allCalcuResultVisualDict?.GetValue(flowmeter.Code) as HydroCalcuNodeResult; if (calcuFlowmeterResult != null) { var calcuFlowmeterNewResult = new HydroCalcuFlowmeterResult(calcuFlowmeterResult); 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) { foreach (var linkFlowmeter in linkFlowmeterList) { var calcuLinkFlowmeterResult = allCalcuResultVisualDict?.GetValue(linkFlowmeter.Code) as HydroCalcuLinkResult; if (calcuLinkFlowmeterResult != null) { if (calcuLinkFlowmeterResult.CalcuFlow.HasValue) { calcuFlowmeterNewResult.CalcuQ = Math.Abs(calcuLinkFlowmeterResult.CalcuFlow.Value); break; } } } } hydroCalcuResult.NodeList.Remove(calcuFlowmeterResult); hydroCalcuResult.NodeList.Add(calcuFlowmeterNewResult); if (calcuFlowmeterNewResult.CalcuMinorLoss.HasValue) { if (allFlowmeterMinorLossEvaluationList != null && allFlowmeterMinorLossEvaluationList.Count > 0) { foreach (var flowmeterMinorLossEvaluation in allFlowmeterMinorLossEvaluationList) { if (flowmeterMinorLossEvaluation.IsMeet(calcuFlowmeterNewResult.CalcuMinorLoss.Value)) { hydroCalcuResult.WainingList.Add(new HydroCalcuWarning() { Code = flowmeter.Code, Message = $"[{flowmeter.Name}]{flowmeterMinorLossEvaluation.EvaluateContent}" }); } } } } } } } #endregion #region 压力表 var allPressmeterList = hydroInfo.Pressmeters; if (allPressmeterList != null && allPressmeterList.Count > 0) { var allPressmeterMinorLossEvaluationList = allMinorLossEvaluationList?.Where(x => x.Catalog == Yw.Hydro.ParterCatalog.Pressmeter).ToList(); foreach (var pressmeter in allPressmeterList) { var calcuPressmeterResult = allCalcuResultVisualDict?.GetValue(pressmeter.Code) as HydroCalcuNodeResult; if (calcuPressmeterResult != null) { var calcuPressmeterNewResult = new HydroCalcuPressmeterResult(calcuPressmeterResult); calcuPressmeterNewResult.CalcuPr = isHead ? calcuPressmeterResult.CalcuHead : calcuPressmeterResult.CalcuPress; hydroCalcuResult.NodeList.Remove(calcuPressmeterResult); hydroCalcuResult.NodeList.Add(calcuPressmeterNewResult); if (calcuPressmeterNewResult.CalcuMinorLoss.HasValue) { if (allPressmeterMinorLossEvaluationList != null && allPressmeterMinorLossEvaluationList.Count > 0) { foreach (var pressmeterMinorLossEvaluation in allPressmeterMinorLossEvaluationList) { if (pressmeterMinorLossEvaluation.IsMeet(calcuPressmeterNewResult.CalcuMinorLoss.Value)) { hydroCalcuResult.WainingList.Add(new HydroCalcuWarning() { Code = pressmeter.Code, Message = $"[{pressmeter.Name}]{pressmeterMinorLossEvaluation.EvaluateContent}" }); } } } } } } } #endregion #region 管道 var allPipeList = hydroInfo.Pipes; if (allPipeList != null && allPipeList.Count > 0) { var allPipeFrictionLossKmEvaluationList = allFrictionLossKmEvaluationList?.Where(x => x.Catalog == Yw.Hydro.ParterCatalog.Pipe).ToList(); allPipeFrictionLossKmEvaluationList = null;//测试代码 foreach (var pipe in allPipeList) { var calcuPipeResult = allCalcuResultVisualDict?.GetValue(pipe.Code) as HydroCalcuLinkResult; if (calcuPipeResult != null) { var calcuPipeNewResult = new HydroCalcuPipeResult(calcuPipeResult); if (calcuPipeResult.CalcuFlow.HasValue) { calcuPipeNewResult.CalcuQ = Math.Abs(calcuPipeResult.CalcuFlow.Value); var startPipeCode = calcuPipeResult.CalcuFlow.Value > 0 ? pipe.StartCode : pipe.EndCode; var calcuStartPipeNodeResult = allCalcuResultVisualDict?.GetValue(startPipeCode) as HydroCalcuNodeResult; if (calcuStartPipeNodeResult != null) { 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 = isHead ? calcuEndPipeNodeResult.CalcuHead : calcuEndPipeNodeResult.CalcuPress; } } hydroCalcuResult.LinkList.Remove(calcuPipeResult); hydroCalcuResult.LinkList.Add(calcuPipeNewResult); if (calcuPipeNewResult.CalcuFrictionLoss.HasValue) { if (pipe.Length > 0) { if (allPipeFrictionLossKmEvaluationList != null && allPipeFrictionLossKmEvaluationList.Count > 0) { var pipeFrictionLossKm = calcuPipeNewResult.CalcuFrictionLoss.Value / pipe.Length * 1000; foreach (var pipeFrictionLossKmEvaluation in allPipeFrictionLossKmEvaluationList) { if (pipeFrictionLossKmEvaluation.IsMeet(pipeFrictionLossKm)) { hydroCalcuResult.WainingList.Add(new HydroCalcuWarning() { Code = pipe.Code, Message = $"[{pipe.Name}]{pipeFrictionLossKmEvaluation.EvaluateContent}" }); } } } } } } } } #endregion #region 过渡件 var allTranslationList = hydroInfo.Translations; if (allTranslationList != null && allTranslationList.Count > 0) { var allTranslationMinorLossEvaluationList = allMinorLossEvaluationList?.Where(x => x.Catalog == Yw.Hydro.ParterCatalog.Translation).ToList(); foreach (var translation in allTranslationList) { var calcuTranslationResult = allCalcuResultVisualDict?.GetValue(translation.Code) as HydroCalcuLinkResult; if (calcuTranslationResult != null) { var calcuTranslationNewResult = new HydroCalcuTranslationResult(calcuTranslationResult); if (calcuTranslationResult.CalcuFlow.HasValue) { calcuTranslationNewResult.CalcuQ = Math.Abs(calcuTranslationResult.CalcuFlow.Value); var startTranslationCode = calcuTranslationResult.CalcuFlow.Value > 0 ? translation.StartCode : translation.EndCode; var calcuStartTranslationNodeResult = allCalcuResultVisualDict?.GetValue(startTranslationCode) as HydroCalcuNodeResult; if (calcuStartTranslationNodeResult != null) { 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 = isHead ? calcuEndTranslationNodeResult.CalcuHead : calcuEndTranslationNodeResult.CalcuPress; } } hydroCalcuResult.LinkList.Remove(calcuTranslationResult); hydroCalcuResult.LinkList.Add(calcuTranslationNewResult); if (calcuTranslationNewResult.CalcuMinorLoss.HasValue) { if (allTranslationMinorLossEvaluationList != null && allTranslationMinorLossEvaluationList.Count > 0) { foreach (var translationMinorLossEvaluation in allTranslationMinorLossEvaluationList) { if (translationMinorLossEvaluation.IsMeet(calcuTranslationNewResult.CalcuMinorLoss.Value)) { hydroCalcuResult.WainingList.Add(new HydroCalcuWarning() { Code = translation.Code, Message = $"[{translation.Name}]{translationMinorLossEvaluation.EvaluateContent}" }); } } } } } } } #endregion #region 水泵 var allPumpList = hydroInfo.Pumps; if (allPumpList != null && allPumpList.Count > 0) { var allPumpFlowRunEvaluationList = allFlowRunEvaluationList?.Where(x => x.Catalog == Yw.Hydro.ParterCatalog.Pump).ToList(); foreach (var pump in allPumpList) { var calcuPumpResult = allCalcuResultVisualDict?.GetValue(pump.Code) as HydroCalcuLinkResult; if (calcuPumpResult != null) { var calcuPumpNewResult = new HydroCalcuPumpResult(calcuPumpResult); if (calcuPumpResult.CalcuFlow.HasValue) { //流量 calcuPumpNewResult.CalcuQ = Math.Abs(calcuPumpResult.CalcuFlow.Value); //进口压力 var startPumpCode = calcuPumpResult.CalcuFlow.Value > 0 ? pump.StartCode : pump.EndCode; var startPumpNode = allNodeList?.Find(x => x.Code == startPumpCode); if (startPumpNode != null) { var calcuStartPumpNodeResult = allCalcuResultVisualDict?.GetValue(startPumpCode) as HydroCalcuNodeResult; if (calcuStartPumpNodeResult != null) { calcuPumpNewResult.CalcuPr1 = isHead ? calcuStartPumpNodeResult.CalcuHead : calcuStartPumpNodeResult.CalcuPress; } } //出口压力 var endPumpCode = calcuPumpResult.CalcuFlow.Value > 0 ? pump.EndCode : pump.StartCode; var endPumpNode = allNodeList?.Find(x => x.Code == endPumpCode); if (endPumpNode != null) { var calcuEndPumpNodeResult = allCalcuResultVisualDict?.GetValue(endPumpCode) as HydroCalcuNodeResult; if (calcuEndPumpNodeResult != null) { calcuPumpNewResult.CalcuPr2 = isHead ? calcuEndPumpNodeResult.CalcuHead : calcuEndPumpNodeResult.CalcuPress; } } if (calcuPumpNewResult.CalcuQ > 0) { //扬程 if (calcuPumpNewResult.CalcuPr1.HasValue && calcuPumpNewResult.CalcuPr2.HasValue) { var pr1 = CalculationHelper.M2Mpa(calcuPumpNewResult.CalcuPr1.Value); var pr2 = CalculationHelper.M2Mpa(calcuPumpNewResult.CalcuPr2.Value); 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) { var curveqp = hydroInfo.Curves?.Find(x => x.Code == pump.CurveQP); if (curveqp != null) { 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, pump.RatedN * pump.SpeedRatio); var pumpCurveQp = new Yw.Pump.CurveQP(Yw.Ahart.eFeatType.Cubic, point2dSimularList); calcuPumpNewResult.CalcuP = pumpCurveQp.FeatCurve.GetPointYUnlimited(calcuPumpNewResult.CalcuQ.Value); } } } //效率 if (calcuPumpNewResult.CalcuH.HasValue && calcuPumpNewResult.CalcuP.HasValue) { calcuPumpNewResult.CalcuE = Yw.Pump.CalculationHelper.CalcuE(calcuPumpNewResult.CalcuQ.Value, calcuPumpNewResult.CalcuH.Value, calcuPumpNewResult.CalcuP.Value); if (calcuPumpNewResult.CalcuE.Value > 95) { calcuPumpNewResult.CalcuE = 95; } } } } hydroCalcuResult.LinkList.Remove(calcuPumpResult); hydroCalcuResult.LinkList.Add(calcuPumpNewResult); if (pump.LinkStatus == Yw.Hydro.PumpStatus.Open) { if (calcuPumpNewResult.CalcuFlow.HasValue) { if (allPumpFlowRunEvaluationList != null && allPumpFlowRunEvaluationList.Count > 0) { foreach (var pumpFlowRunEvaluation in allPumpFlowRunEvaluationList) { if (pumpFlowRunEvaluation.IsMeet(calcuPumpNewResult.CalcuFlow.Value)) { hydroCalcuResult.WainingList.Add(new HydroCalcuWarning() { Code = pump.Code, Message = $"[{pump.Name}]{pumpFlowRunEvaluation.EvaluateContent}" }); } } } } } } } } #endregion #region 阀门 var allValveList = hydroInfo.Valves; if (allValveList != null && allValveList.Count > 0) { var allValveMinorLossEvaluationList = allMinorLossEvaluationList?.Where(x => x.Catalog == Yw.Hydro.ParterCatalog.Valve).ToList(); foreach (var valve in allValveList) { var calcuValveResult = allCalcuResultVisualDict?.GetValue(valve.Code) as HydroCalcuLinkResult; if (calcuValveResult != null) { var calcuValveNewResult = new HydroCalcuValveResult(calcuValveResult); if (calcuValveResult.CalcuFlow.HasValue) { calcuValveNewResult.CalcuQ = Math.Abs(calcuValveResult.CalcuFlow.Value); var startValveCode = calcuValveResult.CalcuFlow.Value > 0 ? valve.StartCode : valve.EndCode; var calcuStartValveNodeResult = allCalcuResultVisualDict?.GetValue(startValveCode) as HydroCalcuNodeResult; if (calcuStartValveNodeResult != null) { 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 = isHead ? calcuEndValveNodeResult.CalcuHead : calcuEndValveNodeResult.CalcuPress; } } hydroCalcuResult.LinkList.Remove(calcuValveResult); hydroCalcuResult.LinkList.Add(calcuValveNewResult); if (calcuValveNewResult.CalcuMinorLoss.HasValue) { if (allValveMinorLossEvaluationList != null && allValveMinorLossEvaluationList.Count > 0) { foreach (var valveMinorLossEvaluation in allValveMinorLossEvaluationList) { if (valveMinorLossEvaluation.IsMeet(calcuValveNewResult.CalcuMinorLoss.Value)) { hydroCalcuResult.WainingList.Add(new HydroCalcuWarning() { Code = valve.Code, Message = $"[{valve.Name}]{valveMinorLossEvaluation.EvaluateContent}" }); } } } } } } } #endregion #region 换热器 var allExchangerList = hydroInfo.Exchangers; if (allExchangerList != null && allExchangerList.Count > 0) { var allExchangerMinorLossEvaluationList = allMinorLossEvaluationList?.Where(x => x.Catalog == Yw.Hydro.ParterCatalog.Exchanger).ToList(); foreach (var exchanger in allExchangerList) { var calcuExchangerResult = allCalcuResultVisualDict?.GetValue(exchanger.Code) as HydroCalcuLinkResult; if (calcuExchangerResult != null) { var calcuExchangerNewResult = new HydroCalcuExchangerResult(calcuExchangerResult); if (calcuExchangerResult.CalcuFlow.HasValue) { calcuExchangerNewResult.CalcuQ = Math.Abs(calcuExchangerResult.CalcuFlow.Value); var startExchangerCode = calcuExchangerResult.CalcuFlow.Value > 0 ? exchanger.StartCode : exchanger.EndCode; var calcuStartExchangerNodeResult = allCalcuResultVisualDict?.GetValue(startExchangerCode) as HydroCalcuNodeResult; if (calcuStartExchangerNodeResult != null) { 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 = isHead ? calcuEndExchangerNodeResult.CalcuHead : calcuEndExchangerNodeResult.CalcuPress; } } hydroCalcuResult.LinkList.Remove(calcuExchangerResult); hydroCalcuResult.LinkList.Add(calcuExchangerNewResult); if (calcuExchangerNewResult.CalcuMinorLoss.HasValue) { if (allExchangerMinorLossEvaluationList != null && allExchangerMinorLossEvaluationList.Count > 0) { foreach (var exchangerMinorLossEvaluation in allExchangerMinorLossEvaluationList) { if (exchangerMinorLossEvaluation.IsMeet(calcuExchangerNewResult.CalcuMinorLoss.Value)) { hydroCalcuResult.WainingList.Add(new HydroCalcuWarning() { Code = exchanger.Code, Message = $"[{exchanger.Name}]{exchangerMinorLossEvaluation.EvaluateContent}" }); } } } } } } } #endregion #region 压缩机 var allCompressorList = hydroInfo.Compressors; if (allCompressorList != null && allCompressorList.Count > 0) { var allCompressorMinorLossEvaluationList = allMinorLossEvaluationList?.Where(x => x.Catalog == Yw.Hydro.ParterCatalog.Compressor).ToList(); foreach (var compressor in allCompressorList) { var calcuCompressorResult = allCalcuResultVisualDict?.GetValue(compressor.Code) as HydroCalcuLinkResult; if (calcuCompressorResult != null) { var calcuCompressorNewResult = new HydroCalcuCompressorResult(calcuCompressorResult); if (calcuCompressorResult.CalcuFlow.HasValue) { calcuCompressorNewResult.CalcuQ = Math.Abs(calcuCompressorResult.CalcuFlow.Value); var startCompressorCode = calcuCompressorResult.CalcuFlow.Value > 0 ? compressor.StartCode : compressor.EndCode; var calcuStartCompressorNodeResult = allCalcuResultVisualDict?.GetValue(startCompressorCode) as HydroCalcuNodeResult; if (calcuStartCompressorNodeResult != null) { 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 = isHead ? calcuEndCompressorNodeResult.CalcuHead : calcuEndCompressorNodeResult.CalcuPress; } } hydroCalcuResult.LinkList.Remove(calcuCompressorResult); hydroCalcuResult.LinkList.Add(calcuCompressorNewResult); if (calcuCompressorNewResult.CalcuMinorLoss.HasValue) { if (allCompressorMinorLossEvaluationList != null && allCompressorMinorLossEvaluationList.Count > 0) { foreach (var compressorMinorLossEvaluation in allCompressorMinorLossEvaluationList) { if (compressorMinorLossEvaluation.IsMeet(calcuCompressorNewResult.CalcuMinorLoss.Value)) { hydroCalcuResult.WainingList.Add(new HydroCalcuWarning() { Code = compressor.Code, Message = $"[{compressor.Name}]{compressorMinorLossEvaluation.EvaluateContent}" }); } } } } } } } #endregion return hydroCalcuResult; } } }