From bef933e7e166b085ba7e46e38ea62d9ae0129ec6 Mon Sep 17 00:00:00 2001
From: lixiaojun <1287241240@qq.com>
Date: 星期一, 20 一月 2025 10:47:23 +0800
Subject: [PATCH] 远程API模式阶段性提交

---
 Hydro/Yw.Hydro.Core/ParseHelper.cs |  600 ++++++++++++++++++++++++++++++++++++------------------------
 1 files changed, 360 insertions(+), 240 deletions(-)

diff --git a/Hydro/Yw.Hydro.Core/ParseHelper.cs b/Hydro/Yw.Hydro.Core/ParseHelper.cs
index f60be6f..98b1e20 100644
--- a/Hydro/Yw.Hydro.Core/ParseHelper.cs
+++ b/Hydro/Yw.Hydro.Core/ParseHelper.cs
@@ -1,14 +1,16 @@
-锘縩amespace Yw.Hydro
+锘縰sing Microsoft.Extensions.Logging.Abstractions;
+
+namespace Yw.Hydro
 {
     /// <summary>
     /// 瑙f瀽杈呭姪绫�
     /// </summary>
-    public class ParseHelper
+    public static class ParseHelper
     {
         /// <summary>
         /// 
         /// </summary>
-        public static Network ToNetwork(Yw.Model.HydroModelInfo model)
+        public static Network ToNetwork(this Yw.Model.HydroModelInfo model)
         {
             if (model == null)
             {
@@ -18,179 +20,6 @@
 
             #region 鑺傜偣
 
-            //杩炴帴鑺傜偣
-            if (model.Junctions != null && model.Junctions.Count > 0)
-            {
-                foreach (var junction in model.Junctions)
-                {
-                    var junctionModel = new Junction();
-                    junctionModel.Id = junction.Code;
-                    junctionModel.Name = junction.Name;
-                    junctionModel.Quality = 0;
-                    junctionModel.Position = new Position2d(junction.Position2d.X, junction.Position2d.Y);
-                    junctionModel.Elev = junction.Elev;
-                    junctionModel.Demand = junction.Demand;
-                    junctionModel.DemandPattern = junction.DemandPattern;
-                    
-                    netWork.Junctions.Add(junctionModel);
-                }
-            }
-
-            //鍠峰槾
-            if (model.Nozzles != null && model.Nozzles.Count > 0)
-            {
-                foreach (var nozzle in model.Nozzles)
-                {
-                    var nozzleModel = new Nozzle();
-                    nozzleModel.Id = nozzle.Code;
-                    nozzleModel.Name = nozzle.Name;
-                    nozzleModel.Quality = 0;
-                    nozzleModel.Position = new Position2d(nozzle.Position2d.X, nozzle.Position2d.Y);
-                    nozzleModel.Elev = nozzle.Elev;
-                    nozzleModel.Demand = nozzle.Demand;
-                    nozzleModel.DemandPattern = nozzle.DemandPattern;
-                    nozzleModel.Coefficient = nozzle.Coefficient;
-                    netWork.Nozzles.Add(nozzleModel);
-                }
-            }
-
-            //娑堢伀鏍�
-            if (model.Hydrants != null && model.Hydrants.Count > 0)
-            {
-                foreach (var hydrant in model.Hydrants)
-                {
-                    var hydrantModel = new Hydrant();
-                    hydrantModel.Id = hydrant.Code;
-                    hydrantModel.Name = hydrant.Name;
-                    hydrantModel.Quality = 0;
-                    hydrantModel.Position = new Position2d(hydrant.Position2d.X, hydrant.Position2d.Y);
-                    hydrantModel.Elev = hydrant.Elev;
-                    hydrantModel.Demand = hydrant.Demand;
-                    hydrantModel.DemandPattern = hydrant.DemandPattern;
-                    hydrantModel.Coefficient = hydrant.Coefficient;
-                    netWork.Hydrants.Add(hydrantModel);
-                }
-            }
-
-            //寮ご
-            if (model.Elbows != null && model.Elbows.Count > 0)
-            {
-                foreach (var elbow in model.Elbows)
-                {
-                    var elbowModel = new Junction();
-                    elbowModel.Id = elbow.Code;
-                    elbowModel.Name = elbow.Name;
-                    elbowModel.Quality = 0;
-                    elbowModel.Position = new Position2d(elbow.Position2d.X, elbow.Position2d.Y);
-                    elbowModel.Elev = elbow.Elev;
-                    elbowModel.Demand = elbow.Demand;
-                    elbowModel.DemandPattern = elbow.DemandPattern;
-                    netWork.Junctions.Add(elbowModel);
-                }
-            }
-
-            //涓夐��
-            if (model.Threelinks != null && model.Threelinks.Count > 0)
-            {
-                foreach (var threelink in model.Threelinks)
-                {
-                    var threelinkModel = new Junction();
-                    threelinkModel.Id = threelink.Code;
-                    threelinkModel.Name = threelink.Name;
-                    threelinkModel.Quality = 0;
-                    threelinkModel.Position = new Position2d(threelink.Position2d.X, threelink.Position2d.Y);
-                    threelinkModel.Elev = threelink.Elev;
-                    threelinkModel.Demand = threelink.Demand;
-                    threelinkModel.DemandPattern = threelink.DemandPattern;
-                    netWork.Junctions.Add(threelinkModel);
-                }
-            }
-
-            //鍥涢��
-            if (model.Fourlinks != null && model.Fourlinks.Count > 0)
-            {
-                foreach (var fourlink in model.Fourlinks)
-                {
-                    var fourlinkModel = new Junction();
-                    fourlinkModel.Id = fourlink.Code;
-                    fourlinkModel.Name = fourlink.Name;
-                    fourlinkModel.Quality = 0;
-                    fourlinkModel.Position = new Position2d(fourlink.Position2d.X, fourlink.Position2d.Y);
-                    fourlinkModel.Elev = fourlink.Elev;
-                    fourlinkModel.Demand = fourlink.Demand;
-                    fourlinkModel.DemandPattern = fourlink.DemandPattern;
-                    netWork.Junctions.Add(fourlinkModel);
-                }
-            }
-
-            //姘磋〃
-            if (model.Meters != null && model.Meters.Count > 0)
-            {
-                foreach (var meter in model.Meters)
-                {
-                    var meterModel = new Meter();
-                    meterModel.Id = meter.Code;
-                    meterModel.Name = meter.Name;
-                    meterModel.Quality = 0;
-                    meterModel.Position = new Position2d(meter.Position2d.X, meter.Position2d.Y);
-                    meterModel.Elev = meter.Elev;
-                    meterModel.Demand = meter.Demand;
-                    meterModel.DemandPattern = meter.DemandPattern;
-                    netWork.Meters.Add(meterModel);
-                }
-            }
-
-            //娴侀噺璁�
-            if (model.Flowmeters != null && model.Flowmeters.Count > 0)
-            {
-                foreach (var flowmeter in model.Flowmeters)
-                {
-                    var flowmeterModel = new Junction();
-                    flowmeterModel.Id = flowmeter.Code;
-                    flowmeterModel.Name = flowmeter.Name;
-                    flowmeterModel.Quality = 0;
-                    flowmeterModel.Position = new Position2d(flowmeter.Position2d.X, flowmeter.Position2d.Y);
-                    flowmeterModel.Elev = flowmeter.Elev;
-                    flowmeterModel.Demand = flowmeter.Demand;
-                    flowmeterModel.DemandPattern = flowmeter.DemandPattern;
-                    netWork.Junctions.Add(flowmeterModel);
-                }
-            }
-
-            //鍘嬪姏琛�
-            if (model.Pressmeters != null && model.Pressmeters.Count > 0)
-            {
-                foreach (var pressmeter in model.Pressmeters)
-                {
-                    var pressmeterModel = new Junction();
-                    pressmeterModel.Id = pressmeter.Code;
-                    pressmeterModel.Name = pressmeter.Name;
-                    pressmeterModel.Quality = 0;
-                    pressmeterModel.Position = new Position2d(pressmeter.Position2d.X, pressmeter.Position2d.Y);
-                    pressmeterModel.Elev = pressmeter.Elev;
-                    pressmeterModel.Demand = pressmeter.Demand;
-                    pressmeterModel.DemandPattern = pressmeter.DemandPattern;
-                    netWork.Junctions.Add(pressmeterModel);
-                }
-            }
-
-            //闂峰ご
-            if (model.Bluntheads != null && model.Bluntheads.Count > 0)
-            {
-                foreach (var blunthead in model.Bluntheads)
-                {
-                    var bluntheadModel = new Junction();
-                    bluntheadModel.Id = blunthead.Code;
-                    bluntheadModel.Name = blunthead.Name;
-                    bluntheadModel.Quality = 0;
-                    bluntheadModel.Position = new Position2d(blunthead.Position2d.X, blunthead.Position2d.Y);
-                    bluntheadModel.Elev = blunthead.Elev;
-                    bluntheadModel.Demand = blunthead.Demand;
-                    bluntheadModel.DemandPattern = blunthead.DemandPattern;
-                    netWork.Junctions.Add(bluntheadModel);
-                }
-            }
-
             //姘村簱
             if (model.Reservoirs != null && model.Reservoirs.Count > 0)
             {
@@ -198,12 +27,12 @@
                 {
                     var reservoirModel = new Reservoir();
                     reservoirModel.Id = reservoir.Code;
+                    reservoirModel.Catalog = Yw.EPAnet.Catalog.Reservoir;
                     reservoirModel.Name = reservoir.Name;
                     reservoirModel.Quality = 0;
                     reservoirModel.Position = new Position2d(reservoir.Position2d.X, reservoir.Position2d.Y);
-                    reservoirModel.PoolElev = reservoir.PoolElev.HasValue ? reservoir.PoolElev.Value : 0;
                     reservoirModel.Head = reservoir.Head;
-                    reservoirModel.HeadPattern = reservoir.HeadPattern;
+                    reservoirModel.HeadPattern = string.Empty;
                     netWork.Reservoirs.Add(reservoirModel);
                 }
             }
@@ -215,6 +44,7 @@
                 {
                     var tankModel = new Tank();
                     tankModel.Id = tank.Code;
+                    tankModel.Catalog = Yw.EPAnet.Catalog.Tank;
                     tankModel.Name = tank.Name;
                     tankModel.Quality = 0;
                     tankModel.Position = new Position2d(tank.Position2d.X, tank.Position2d.Y);
@@ -222,9 +52,10 @@
                     tankModel.InitLevel = tank.InitLevel;
                     tankModel.MaxLevel = tank.MaxLevel;
                     tankModel.MinLevel = tank.MinLevel;
+                    tankModel.Diameter = tank.DN;
                     tankModel.MinVol = tank.MinVol;
                     tankModel.VolCurve = tank.VolCurve;
-                    tankModel.Diameter = tank.DN;
+                    tankModel.Overflow = tank.OverFlow;
                     netWork.Tanks.Add(tankModel);
                 }
             }
@@ -234,8 +65,9 @@
             {
                 foreach (var waterbox in model.Waterboxs)
                 {
-                    var waterboxModel = new Tank();
+                    var waterboxModel = new Waterbox();
                     waterboxModel.Id = waterbox.Code;
+                    waterboxModel.Catalog = Yw.EPAnet.Catalog.Waterbox;
                     waterboxModel.Name = waterbox.Name;
                     waterboxModel.Quality = 0;
                     waterboxModel.Position = new Position2d(waterbox.Position2d.X, waterbox.Position2d.Y);
@@ -243,11 +75,228 @@
                     waterboxModel.InitLevel = waterbox.InitLevel;
                     waterboxModel.MaxLevel = waterbox.MaxLevel;
                     waterboxModel.MinLevel = waterbox.MinLevel;
+                    waterboxModel.Diameter = waterbox.DN;
                     waterboxModel.MinVol = waterbox.MinVol;
                     waterboxModel.VolCurve = waterbox.VolCurve;
-                    waterboxModel.Diameter = waterbox.DN;
                     waterboxModel.Overflow = waterbox.OverFlow;
-                    netWork.Tanks.Add(waterboxModel);
+                    netWork.Waterboxs.Add(waterboxModel);
+                }
+            }
+
+            //杩炴帴鑺傜偣
+            if (model.Junctions != null && model.Junctions.Count > 0)
+            {
+                foreach (var junction in model.Junctions)
+                {
+                    var junctionModel = new Junction();
+                    junctionModel.Id = junction.Code;
+                    junctionModel.Catalog = Yw.EPAnet.Catalog.Junction;
+                    junctionModel.Name = junction.Name;
+                    junctionModel.Quality = 0;
+                    junctionModel.Position = new Position2d(junction.Position2d.X, junction.Position2d.Y);
+                    junctionModel.Elev = junction.Elev;
+                    junctionModel.MinorLoss = junction.MinorLoss;
+                    junctionModel.Demand = 0;
+                    junctionModel.DemandPattern = null;
+
+                    netWork.Junctions.Add(junctionModel);
+                }
+            }
+
+            //鍠峰槾
+            if (model.Nozzles != null && model.Nozzles.Count > 0)
+            {
+                foreach (var nozzle in model.Nozzles)
+                {
+                    var nozzleModel = new Nozzle();
+                    nozzleModel.Id = nozzle.Code;
+                    nozzleModel.Catalog = Yw.EPAnet.Catalog.Nozzle;
+                    nozzleModel.Name = nozzle.Name;
+                    nozzleModel.Quality = 0;
+                    nozzleModel.Position = new Position2d(nozzle.Position2d.X, nozzle.Position2d.Y);
+                    nozzleModel.Elev = nozzle.Elev;
+                    nozzleModel.MinorLoss = nozzle.MinorLoss;
+                    nozzleModel.Demand = 0;
+                    nozzleModel.DemandPattern = null;
+                    nozzleModel.Coefficient = nozzle.Coefficient;
+                    netWork.Nozzles.Add(nozzleModel);
+                }
+            }
+
+            //鍐峰嵈濉�
+            if (model.Coolings != null && model.Coolings.Count > 0)
+            {
+                foreach (var cooling in model.Coolings)
+                {
+                    var coolingModel = new Nozzle();
+                    coolingModel.Id = cooling.Code;
+                    coolingModel.Catalog = Yw.EPAnet.Catalog.Nozzle;
+                    coolingModel.Name = cooling.Name;
+                    coolingModel.Quality = 0;
+                    coolingModel.Position = new Position2d(cooling.Position2d.X, cooling.Position2d.Y);
+                    coolingModel.Elev = cooling.Elev;
+                    coolingModel.MinorLoss = cooling.MinorLoss;
+                    coolingModel.Demand = 0;
+                    coolingModel.DemandPattern = null;
+                    coolingModel.Coefficient = cooling.Coefficient;
+                    netWork.Nozzles.Add(coolingModel);
+                }
+            }
+
+            //娑堢伀鏍�
+            if (model.Hydrants != null && model.Hydrants.Count > 0)
+            {
+                foreach (var hydrant in model.Hydrants)
+                {
+                    var hydrantModel = new Hydrant();
+                    hydrantModel.Id = hydrant.Code;
+                    hydrantModel.Catalog = Yw.EPAnet.Catalog.Hydrant;
+                    hydrantModel.Name = hydrant.Name;
+                    hydrantModel.Quality = 0;
+                    hydrantModel.Position = new Position2d(hydrant.Position2d.X, hydrant.Position2d.Y);
+                    hydrantModel.Elev = hydrant.Elev;
+                    hydrantModel.MinorLoss = hydrant.MinorLoss;
+                    hydrantModel.Demand = 0;
+                    hydrantModel.DemandPattern = null;
+                    hydrantModel.Coefficient = hydrant.Coefficient;
+                    netWork.Hydrants.Add(hydrantModel);
+                }
+            }
+
+            //闂峰ご
+            if (model.Bluntheads != null && model.Bluntheads.Count > 0)
+            {
+                foreach (var blunthead in model.Bluntheads)
+                {
+                    var bluntheadModel = new Blunthead();
+                    bluntheadModel.Id = blunthead.Code;
+                    bluntheadModel.Catalog = Yw.EPAnet.Catalog.Blunthead;
+                    bluntheadModel.Name = blunthead.Name;
+                    bluntheadModel.Quality = 0;
+                    bluntheadModel.Position = new Position2d(blunthead.Position2d.X, blunthead.Position2d.Y);
+                    bluntheadModel.Elev = blunthead.Elev;
+                    bluntheadModel.MinorLoss = blunthead.MinorLoss;
+                    bluntheadModel.Demand = 0;
+                    bluntheadModel.DemandPattern = null;
+                    netWork.Bluntheads.Add(bluntheadModel);
+                }
+            }
+
+            //寮ご
+            if (model.Elbows != null && model.Elbows.Count > 0)
+            {
+                foreach (var elbow in model.Elbows)
+                {
+                    var elbowModel = new Elbow();
+                    elbowModel.Id = elbow.Code;
+                    elbowModel.Catalog = Yw.EPAnet.Catalog.Elbow;
+                    elbowModel.Name = elbow.Name;
+                    elbowModel.Quality = 0;
+                    elbowModel.Position = new Position2d(elbow.Position2d.X, elbow.Position2d.Y);
+                    elbowModel.Elev = elbow.Elev;
+                    elbowModel.MinorLoss = elbow.MinorLoss;
+                    elbowModel.Demand = 0;
+                    elbowModel.DemandPattern = null;
+                    elbowModel.ElbowType = elbow.ElbowType;
+                    elbowModel.BendingAngle = elbow.BendingAngle;
+                    netWork.Elbows.Add(elbowModel);
+                }
+            }
+
+            //涓夐��
+            if (model.Threelinks != null && model.Threelinks.Count > 0)
+            {
+                foreach (var threelink in model.Threelinks)
+                {
+                    var threelinkModel = new Threelink();
+                    threelinkModel.Id = threelink.Code;
+                    threelinkModel.Catalog = Yw.EPAnet.Catalog.Threelink;
+                    threelinkModel.Name = threelink.Name;
+                    threelinkModel.Quality = 0;
+                    threelinkModel.Position = new Position2d(threelink.Position2d.X, threelink.Position2d.Y);
+                    threelinkModel.Elev = threelink.Elev;
+                    threelinkModel.MinorLoss = threelink.MinorLoss;
+                    threelinkModel.Demand = 0;
+                    threelinkModel.DemandPattern = null;
+                    threelinkModel.RunningThroughLoss = threelink.RunningThroughLoss;
+                    threelinkModel.BranchThroughLoss = threelink.BranchThroughLoss;
+                    netWork.Threelinks.Add(threelinkModel);
+                }
+            }
+
+            //鍥涢��
+            if (model.Fourlinks != null && model.Fourlinks.Count > 0)
+            {
+                foreach (var fourlink in model.Fourlinks)
+                {
+                    var fourlinkModel = new Fourlink();
+                    fourlinkModel.Id = fourlink.Code;
+                    fourlinkModel.Catalog = Yw.EPAnet.Catalog.Fourlink;
+                    fourlinkModel.Name = fourlink.Name;
+                    fourlinkModel.Quality = 0;
+                    fourlinkModel.Position = new Position2d(fourlink.Position2d.X, fourlink.Position2d.Y);
+                    fourlinkModel.Elev = fourlink.Elev;
+                    fourlinkModel.MinorLoss = fourlink.MinorLoss;
+                    fourlinkModel.Demand = fourlink.Demand;
+                    fourlinkModel.DemandPattern = fourlink.DemandPattern;
+                    netWork.Fourlinks.Add(fourlinkModel);
+                }
+            }
+
+            //姘磋〃
+            if (model.Meters != null && model.Meters.Count > 0)
+            {
+                foreach (var meter in model.Meters)
+                {
+                    var meterModel = new Meter();
+                    meterModel.Id = meter.Code;
+                    meterModel.Catalog = Yw.EPAnet.Catalog.Meter;
+                    meterModel.Name = meter.Name;
+                    meterModel.Quality = 0;
+                    meterModel.Position = new Position2d(meter.Position2d.X, meter.Position2d.Y);
+                    meterModel.Elev = meter.Elev;
+                    meterModel.MinorLoss = meter.MinorLoss;
+                    meterModel.Demand = meter.Demand;
+                    meterModel.DemandPattern = meter.DemandPattern;
+                    netWork.Meters.Add(meterModel);
+                }
+            }
+
+            //娴侀噺璁�
+            if (model.Flowmeters != null && model.Flowmeters.Count > 0)
+            {
+                foreach (var flowmeter in model.Flowmeters)
+                {
+                    var flowmeterModel = new Flowmeter();
+                    flowmeterModel.Id = flowmeter.Code;
+                    flowmeterModel.Catalog = Yw.EPAnet.Catalog.Flowmeter;
+                    flowmeterModel.Name = flowmeter.Name;
+                    flowmeterModel.Quality = 0;
+                    flowmeterModel.Position = new Position2d(flowmeter.Position2d.X, flowmeter.Position2d.Y);
+                    flowmeterModel.Elev = flowmeter.Elev;
+                    flowmeterModel.MinorLoss = flowmeter.MinorLoss;
+                    flowmeterModel.Demand = flowmeter.Demand;
+                    flowmeterModel.DemandPattern = flowmeter.DemandPattern;
+                    netWork.Flowmeters.Add(flowmeterModel);
+                }
+            }
+
+            //鍘嬪姏琛�
+            if (model.Pressmeters != null && model.Pressmeters.Count > 0)
+            {
+                foreach (var pressmeter in model.Pressmeters)
+                {
+                    var pressmeterModel = new Pressmeter();
+                    pressmeterModel.Id = pressmeter.Code;
+                    pressmeterModel.Catalog = Yw.EPAnet.Catalog.Pressmeter;
+                    pressmeterModel.Name = pressmeter.Name;
+                    pressmeterModel.Quality = 0;
+                    pressmeterModel.Position = new Position2d(pressmeter.Position2d.X, pressmeter.Position2d.Y);
+                    pressmeterModel.Elev = pressmeter.Elev;
+                    pressmeterModel.MinorLoss = pressmeter.MinorLoss;
+                    pressmeterModel.Demand = pressmeter.Demand;
+                    pressmeterModel.DemandPattern = pressmeter.DemandPattern;
+                    netWork.Pressmeters.Add(pressmeterModel);
                 }
             }
 
@@ -264,14 +313,15 @@
                 {
                     var pipeModel = new Pipe();
                     pipeModel.Id = pipe.Code;
+                    pipeModel.Catalog = Yw.EPAnet.Catalog.Pipe;
                     pipeModel.Name = pipe.Name;
                     pipeModel.StartNode = allNodes.Find(x => x.Id == pipe.StartCode);
                     pipeModel.EndNode = allNodes.Find(x => x.Id == pipe.EndCode);
-                    pipeModel.LinkStatus = pipe.LinkStatus;
+                    pipeModel.LinkStatus = Yw.Hydro.PipeStatus.Open;
                     pipeModel.Length = pipe.Length;
                     pipeModel.Diameter = pipe.Diameter;
                     pipeModel.Roughness = pipe.Roughness;
-                    pipeModel.MinorLoss = pipe.MinorLoss;
+                    pipeModel.MinorLossCoeff = 0;
                     netWork.Pipes.Add(pipeModel);
                 }
             }
@@ -281,53 +331,18 @@
             {
                 foreach (var translation in model.Translations)
                 {
-                    var translationModel = new Pipe();
+                    var translationModel = new Translation();
                     translationModel.Id = translation.Code;
+                    translationModel.Catalog = Yw.EPAnet.Catalog.Translation;
                     translationModel.Name = translation.Name;
                     translationModel.StartNode = allNodes.Find(x => x.Id == translation.StartCode);
                     translationModel.EndNode = allNodes.Find(x => x.Id == translation.EndCode);
-                    translationModel.LinkStatus = translation.LinkStatus;
+                    translationModel.LinkStatus = Yw.Hydro.LinkStatus.Open;
                     translationModel.Length = translation.Length;
-                    translationModel.Diameter = translation.Diameter;
+                    translationModel.Diameter = (translation.StartDiameter + translation.EndDiameter) / 2f;
                     translationModel.Roughness = translation.Roughness;
-                    translationModel.MinorLoss = translation.MinorLoss;
-                    netWork.Pipes.Add(translationModel);
-                }
-            }
-
-            //鎹㈢儹鍣�
-            if (model.Exchangers != null && model.Exchangers.Count > 0)
-            {
-                foreach (var exchanger in model.Exchangers)
-                {
-                    var exchangerModel = new HeatExchanger();
-                    exchangerModel.Id = exchanger.Code;
-                    exchangerModel.Name = exchanger.Name;
-                    exchangerModel.StartNode = allNodes.Find(x => x.Id == exchanger.StartCode);
-                    exchangerModel.EndNode = allNodes.Find(x => x.Id == exchanger.EndCode);
-                    exchangerModel.LinkStatus = exchanger.LinkStatus;
-                    exchangerModel.Diameter = exchanger.Diameter;
-                    exchangerModel.MinorLoss = exchanger.MinorLoss;
-                    exchangerModel.FlowHeadLossCurve = "GPVDefault";
-                    netWork.HeatExchangers.Add(exchangerModel);
-                }
-            }
-
-            //鍘嬬缉鏈�
-            if (model.Compressors != null && model.Compressors.Count > 0)
-            {
-                foreach (var compressor in model.Compressors)
-                {
-                    var compressModel = new AirCompressor();
-                    compressModel.Id = compressor.Code;
-                    compressModel.Name = compressor.Name;
-                    compressModel.StartNode = allNodes.Find(x => x.Id == compressor.StartCode);
-                    compressModel.EndNode = allNodes.Find(x => x.Id == compressor.EndCode);
-                    compressModel.LinkStatus = compressor.LinkStatus;
-                    compressModel.Diameter = compressor.Diameter;
-                    compressModel.MinorLoss = compressor.MinorLoss;
-                    compressModel.FlowHeadLossCurve = "GPVDefault";
-                    netWork.AirCompressors.Add(compressModel);
+                    translationModel.MinorLossCoeff = translation.MinorLoss;
+                    netWork.Translations.Add(translationModel);
                 }
             }
 
@@ -338,20 +353,19 @@
                 {
                     var pumpModel = new Pump();
                     pumpModel.Id = pump.Code;
+                    pumpModel.Catalog = Yw.EPAnet.Catalog.Pump;
                     pumpModel.Name = pump.Name;
                     pumpModel.StartNode = allNodes.Find(x => x.Id == pump.StartCode);
                     pumpModel.EndNode = allNodes.Find(x => x.Id == pump.EndCode);
                     pumpModel.LinkStatus = pump.LinkStatus;
-                    pumpModel.RatedPower = pump.RatedP;
+                    pumpModel.RatedP = pump.RatedP;
                     pumpModel.CurveQH = pump.CurveQH;
                     if (string.IsNullOrEmpty(pumpModel.CurveQH))
                     {
                         pumpModel.CurveQH = "PumpDefault";//浣跨敤network榛樿娉垫洸绾�
                     }
-
                     pumpModel.SpeedRatio = pump.SpeedRatio;
                     pumpModel.SpeedRatioPattern = pump.SpeedRatioPattern;
-                    pumpModel.CurveQE = pump.CurveQE;
                     netWork.Pumps.Add(pumpModel);
                 }
             }
@@ -361,18 +375,124 @@
             {
                 foreach (var valve in model.Valves)
                 {
-                    var valveModel = new Yw.EPAnet.Valve();
-                    valveModel.Id = valve.Code;
-                    valveModel.Name = valve.Name;
-                    valveModel.StartNode = allNodes.Find(x => x.Id == valve.StartCode);
-                    valveModel.EndNode = allNodes.Find(x => x.Id == valve.EndCode);
-                    valveModel.LinkStatus = valve.LinkStatus;
-                    valveModel.Diameter = valve.Diameter;
-                    valveModel.MinorLoss = valve.MinorLoss;
-                    valveModel.ValveType = valve.ValveType;
-                    valveModel.ValveSetting = valve.ValveSetting;
+                    //姝㈠洖闃�琚綋鎴愮閬撳鐞�
+                    if (valve.ValveType == Yw.Hydro.ValveType.CV)
+                    {
+                        var pipeModel = new Pipe();
+                        pipeModel.Id = valve.Code;
+                        pipeModel.Catalog = Yw.EPAnet.Catalog.Pipe;
+                        pipeModel.Name = valve.Name;
+                        pipeModel.StartNode = allNodes.Find(x => x.Id == valve.StartCode);
+                        pipeModel.EndNode = allNodes.Find(x => x.Id == valve.EndCode);
+                        pipeModel.LinkStatus = valve.LinkStatus;
+                        pipeModel.Length = 0.01;
+                        pipeModel.Diameter = valve.Diameter;
+                        pipeModel.Roughness = 110;
+                        pipeModel.MinorLossCoeff = valve.MinorLoss;
+                        netWork.Pipes.Add(pipeModel);
+                    }
+                    else
+                    {
+                        var valveModel = new Yw.EPAnet.Valve();
+                        valveModel.Id = valve.Code;
+                        valveModel.Catalog = Yw.EPAnet.Catalog.Valve;
+                        valveModel.Name = valve.Name;
+                        valveModel.StartNode = allNodes.Find(x => x.Id == valve.StartCode);
+                        valveModel.EndNode = allNodes.Find(x => x.Id == valve.EndCode);
+                        valveModel.LinkStatus = valve.LinkStatus;
+                        valveModel.Diameter = valve.Diameter;
+                        valveModel.MinorLoss = valve.MinorLoss;
+                        valveModel.ValveType = valve.ValveType;
+                        //valveModel.ValveSetting = valve.ValveSetting;
+                        switch (valve.ValveType)
+                        {
+                            case Yw.Hydro.ValveType.PRV://鍑忓帇闃�
+                                {
 
-                    netWork.Valves.Add(valveModel);
+                                }
+                                break;
+                            case Yw.Hydro.ValveType.PSV://绋冲帇闃�
+                                {
+
+                                }
+                                break;
+                            case Yw.Hydro.ValveType.PBV://鍘嬪姏鍒跺姩闃�
+                                {
+
+                                }
+                                break;
+                            case Yw.Hydro.ValveType.FCV://娴侀噺鎺у埗闃�
+                                {
+
+                                }
+                                break;
+                            case Yw.Hydro.ValveType.TCV://鑺傛祦鎺у埗闃�
+                                {
+                                    valveModel.ValveSetting = "0";
+                                    // var curveol = model.Curves?.Find(x => x.Code == valve.ValveSetting);
+                                    //if (curveol != null)
+                                    //{
+                                    //    var point2dList = curveol.CurveData.Select(x => new Yw.Geometry.Point2d(x.X, x.Y)).ToList();
+                                    //    var ptCurveOL = new Yw.Geometry.CubicSpline2d(point2dList);
+                                    //    valveModel.ValveSetting = ptCurveOL.GetPointY(valve.OpeningDegree).ToString();
+                                    //    if (valve.LinkStatus == Yw.Hydro.LinkStatus.Open)
+                                    //    {
+                                    //        if (valve.OpeningDegree > 0)
+                                    //        {
+                                    //            valveModel.LinkStatus = Yw.EPAnet.ValveStatus.None;
+                                    //        }
+                                    //    }
+                                    //}
+
+                                }
+                                break;
+                            case Yw.Hydro.ValveType.GPV://甯歌闃�闂�
+                                {
+
+                                }
+                                break;
+                            default: break;
+                        }
+                        netWork.Valves.Add(valveModel);
+                    }
+                }
+            }
+
+            //鎹㈢儹鍣�
+            if (model.Exchangers != null && model.Exchangers.Count > 0)
+            {
+                foreach (var exchanger in model.Exchangers)
+                {
+                    var exchangerModel = new Exchanger();
+                    exchangerModel.Id = exchanger.Code;
+                    exchangerModel.Catalog = Yw.EPAnet.Catalog.Exchanger;
+                    exchangerModel.Name = exchanger.Name;
+                    exchangerModel.StartNode = allNodes.Find(x => x.Id == exchanger.StartCode);
+                    exchangerModel.EndNode = allNodes.Find(x => x.Id == exchanger.EndCode);
+                    exchangerModel.LinkStatus = exchanger.LinkStatus;
+                    exchangerModel.Diameter = exchanger.Diameter;
+                    exchangerModel.MinorLoss = exchanger.MinorLoss;
+                    exchangerModel.CurveQL = exchanger.CurveQL;
+                    netWork.Exchangers.Add(exchangerModel);
+                }
+            }
+
+            //鍘嬬缉鏈�
+            if (model.Compressors != null && model.Compressors.Count > 0)
+            {
+                foreach (var compressor in model.Compressors)
+                {
+                    var compressModel = new Compressor();
+                    compressModel.Id = compressor.Code;
+                    compressModel.Catalog = Yw.EPAnet.Catalog.Compressor;
+                    compressModel.Name = compressor.Name;
+                    compressModel.StartNode = allNodes.Find(x => x.Id == compressor.StartCode);
+                    compressModel.EndNode = allNodes.Find(x => x.Id == compressor.EndCode);
+                    compressModel.LinkStatus = compressor.LinkStatus;
+                    compressModel.Diameter = compressor.Diameter;
+                    compressModel.MinorLoss = compressor.MinorLoss;
+                    compressModel.CurveQL = compressor.CurveQL;
+                    netWork.Compressors.Add(compressModel);
                 }
             }
 
@@ -383,6 +503,7 @@
                 {
                     var curveModel = new Yw.EPAnet.Curve();
                     curveModel.Id = curve.Code;
+                    curveModel.Catalog = Yw.EPAnet.Catalog.Curve;
                     curveModel.Name = curve.Name;
                     curveModel.CurveType = curve.CurveType;
                     curveModel.CurveData = curve.CurveData?.Select(x => new CurvePoint(x.X, x.Y)).ToList();
@@ -404,7 +525,6 @@
             }
 
             #endregion
-
 
             return netWork;
         }

--
Gitblit v1.9.3