From 0e0709e63ed50093d09fb88ac1ea4eb9b5a37afc Mon Sep 17 00:00:00 2001
From: lixiaojun <1287241240@qq.com>
Date: 星期二, 13 八月 2024 02:08:46 +0800
Subject: [PATCH] Yw.EPAnet修改

---
 Hydro/Yw.Hydro.Core/ParseHelper.cs |  355 +++++++++++++++++++++++++++++++++++++++++++++++++++-------
 1 files changed, 308 insertions(+), 47 deletions(-)

diff --git a/Hydro/Yw.Hydro.Core/ParseHelper.cs b/Hydro/Yw.Hydro.Core/ParseHelper.cs
index 898975a..e482ceb 100644
--- a/Hydro/Yw.Hydro.Core/ParseHelper.cs
+++ b/Hydro/Yw.Hydro.Core/ParseHelper.cs
@@ -1,6 +1,4 @@
-锘縰sing Yw.EPAnet.Calcu;
-
-namespace Yw.Hydro
+锘縩amespace Yw.Hydro
 {
     /// <summary>
     /// 瑙f瀽杈呭姪绫�
@@ -10,28 +8,186 @@
         /// <summary>
         /// 
         /// </summary>
-        public static NetWork ToNetWork(Yw.Model.HydroModelInfo model)
+        public static Network ToNetwork(Yw.Model.HydroModelInfo model)
         {
             if (model == null)
             {
                 return default;
             }
-            var netWork = new NetWork();
+            var netWork = new Network();
+
+            #region 鑺傜偣
 
             //杩炴帴鑺傜偣
             if (model.Junctions != null && model.Junctions.Count > 0)
             {
                 foreach (var junction in model.Junctions)
                 {
-                    var junctionModel = new JunctionModel();
-                    junctionModel.ID = junction.Code;
+                    var junctionModel = new Junction();
+                    junctionModel.Id = junction.Code;
                     junctionModel.Name = junction.Name;
-                    junctionModel.Elev = (float)junction.Elev;
-                    junctionModel.Demand = junction.Demand.HasValue ? (float)junction.Demand.Value : 0;
-                    junctionModel.PatternID = junction.DemandPattern;
-                    junctionModel.X = (float)junction.Position2d.X;
-                    junctionModel.Y = (float)junction.Position2d.Y;
-                    netWork.Nodes.Add(junctionModel);
+                    junctionModel.Quality = junction.Quality;
+                    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 = nozzle.Quality;
+                    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 = hydrant.Quality;
+                    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 = elbow.Quality;
+                    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 = threelink.Quality;
+                    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 = fourlink.Quality;
+                    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 = meter.Quality;
+                    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 = flowmeter.Quality;
+                    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 = pressmeter.Quality;
+                    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 = blunthead.Quality;
+                    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);
                 }
             }
 
@@ -40,14 +196,15 @@
             {
                 foreach (var reservoir in model.Reservoirs)
                 {
-                    var reservoirModel = new ReservoisModel();
-                    reservoirModel.ID = reservoir.Code;
+                    var reservoirModel = new Reservoir();
+                    reservoirModel.Id = reservoir.Code;
                     reservoirModel.Name = reservoir.Name;
-                    reservoirModel.Head = (float)reservoir.Head;
-                    reservoirModel.PatternID = reservoir.HeadPattern;
-                    reservoirModel.X = (float)reservoir.Position2d.X;
-                    reservoirModel.Y = (float)reservoir.Position2d.Y;
-                    netWork.Nodes.Add(reservoirModel);
+                    reservoirModel.Quality = reservoir.Quality;
+                    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;
+                    netWork.Reservoirs.Add(reservoirModel);
                 }
             }
 
@@ -56,37 +213,103 @@
             {
                 foreach (var tank in model.Tanks)
                 {
-                    var tankModel = new TankModel();
-                    tankModel.ID = tank.Code;
+                    var tankModel = new Tank();
+                    tankModel.Id = tank.Code;
                     tankModel.Name = tank.Name;
-                    tankModel.Elev = (float)tank.PoolElev;
-                    tankModel.InitLevel = (float)tank.InitLevel;
-                    tankModel.MaxLevel = (float)tank.MaxLevel;
-                    tankModel.MinLevel = (float)tank.MinLevel;
-                    tankModel.MinVol = (float)tank.MinVol;
+                    tankModel.Quality = tank.Quality;
+                    tankModel.Position = new Position2d(tank.Position2d.X, tank.Position2d.Y);
+                    tankModel.PoolElev = tank.PoolElev;
+                    tankModel.InitLevel = tank.InitLevel;
+                    tankModel.MaxLevel = tank.MaxLevel;
+                    tankModel.MinLevel = tank.MinLevel;
+                    tankModel.MinVol = tank.MinVol;
                     tankModel.VolCurve = tank.VolCurve;
-                    tankModel.Diameter = (float)tank.Diameter;
-                    tankModel.X = (float)tank.Position2d.X;
-                    tankModel.Y = (float)tank.Position2d.Y;
-                    netWork.Nodes.Add(tankModel);
+                    tankModel.Diameter = tank.Diameter;
+                    netWork.Tanks.Add(tankModel);
                 }
             }
+
+            //姘寸
+            if (model.Waterboxs != null && model.Waterboxs.Count > 0)
+            {
+                foreach (var waterbox in model.Waterboxs)
+                {
+                    var waterboxModel = new Tank();
+                    waterboxModel.Id = waterbox.Code;
+                    waterboxModel.Name = waterbox.Name;
+                    waterboxModel.Quality = waterbox.Quality;
+                    waterboxModel.Position = new Position2d(waterbox.Position2d.X, waterbox.Position2d.Y);
+                    waterboxModel.PoolElev = waterbox.PoolElev;
+                    waterboxModel.InitLevel = waterbox.InitLevel;
+                    waterboxModel.MaxLevel = waterbox.MaxLevel;
+                    waterboxModel.MinLevel = waterbox.MinLevel;
+                    waterboxModel.MinVol = waterbox.MinVol;
+                    waterboxModel.VolCurve = waterbox.VolCurve;
+                    waterboxModel.Diameter = waterbox.Diameter;
+                    netWork.Tanks.Add(waterboxModel);
+                }
+            }
+
+            #endregion
+
+            #region 绠℃
+
+            var allNodes = netWork.GetAllNodes();
 
             //绠¢亾
             if (model.Pipes != null && model.Pipes.Count > 0)
             {
                 foreach (var pipe in model.Pipes)
                 {
-                    var pipeModel = new PipeModel();
-                    pipeModel.ID = pipe.Code;
+                    var pipeModel = new Pipe();
+                    pipeModel.Id = pipe.Code;
                     pipeModel.Name = pipe.Name;
-                    pipeModel.Node1 = pipe.StartCode;
-                    pipeModel.Node2 = pipe.EndCode;
-                    pipeModel.Length = (float)pipe.Length;
-                    pipeModel.Diameter = (float)pipe.Diameter;
-                    pipeModel.Roughness = (float)pipe.Roughness;
-                    pipeModel.MinorLoss = (float)pipe.MinorLoss;
-                    netWork.Links.Add(pipeModel);
+                    pipeModel.StartNode = allNodes.Find(x => x.Id == pipe.StartCode);
+                    pipeModel.EndNode = allNodes.Find(x => x.Id == pipe.EndCode);
+                    //杩樻湁涓�涓姸鎬�
+                    pipeModel.Length = pipe.Length;
+                    pipeModel.Diameter = pipe.Diameter;
+                    pipeModel.Roughness = pipe.Roughness;
+                    pipeModel.MinorLoss = pipe.MinorLoss;
+                    netWork.Pipes.Add(pipeModel);
+                }
+            }
+
+            //杩囨浮浠�
+            if (model.Translations != null && model.Translations.Count > 0)
+            {
+                foreach (var translation in model.Translations)
+                {
+                    var translationModel = new Pipe();
+                    translationModel.Id = translation.Code;
+                    translationModel.Name = translation.Name;
+                    translationModel.StartNode = allNodes.Find(x => x.Id == translation.StartCode);
+                    translationModel.EndNode = allNodes.Find(x => x.Id == translation.EndCode);
+                    //杩樻湁涓�涓姸鎬�
+                    translationModel.Length = translation.Length;
+                    translationModel.Diameter = translation.Diameter;
+                    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 Pipe();
+                    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.Length = exchanger.Length;
+                    exchangerModel.Diameter = exchanger.Diameter;
+                    exchangerModel.Roughness = exchanger.Roughness;
+                    exchangerModel.MinorLoss = exchanger.MinorLoss;
+                    netWork.Pipes.Add(exchangerModel);
                 }
             }
 
@@ -95,18 +318,56 @@
             {
                 foreach (var pump in model.Pumps)
                 {
-                    var pumpModel = new PumpModel();
-                    pumpModel.ID = pump.Code;
+                    var pumpModel = new Pump();
+                    pumpModel.Id = pump.Code;
                     pumpModel.Name = pump.Name;
-                    pumpModel.Node1 = pump.StartCode;
-                    pumpModel.Node2 = pump.EndCode;
+                    pumpModel.StartNode = allNodes.Find(x => x.Id == pump.StartCode);
+                    pumpModel.EndNode = allNodes.Find(x => x.Id == pump.EndCode);
                     pumpModel.RatedPower = pump.RatedPower;
-                    pumpModel.FlowCurveID = pump.CurveQH;
-                    // pumpModel.Status = HyCore.ObjectEnum.StatusType.OPEN;
-                    netWork.Links.Add(pumpModel);
+                    pumpModel.CurveQH = pump.CurveQH;
+                    pumpModel.SpeedRatio = pump.SpeedRatio;
+                    pumpModel.SpeedRatioPattern = pump.SpeedRatioPattern;
+                    pumpModel.Price = pump.Price;
+                    pumpModel.PricePattern = pump.PricePattern;
+                    pumpModel.CurveQE = pump.CurveQE;
+                    netWork.Pumps.Add(pumpModel);
                 }
             }
 
+            //闃�闂�
+            if (model.Valves != null && model.Valves.Count > 0)
+            {
+                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.Diameter = valve.Diameter;
+                    valveModel.MinorLoss = valve.MinorLoss;
+                    valveModel.ValveType = valve.ValveType;
+                    valveModel.ValveSetting = valve.ValveSetting;
+
+                    netWork.Valves.Add(valveModel);
+                }
+            }
+
+
+            #endregion
+
+            #region 鑺傜偣杩炴帴
+
+            var allLinks = netWork.GetAllLinks();
+            foreach (var node in allNodes)
+            {
+                var links = allLinks.Where(x => x.StartNode.Id == node.Id || x.EndNode.Id == node.Id).ToList();
+                node.Links = links;
+            }
+
+            #endregion
+
+
             return netWork;
         }
 

--
Gitblit v1.9.3