Ver código fonte

添加医疗各子任务飞行相关功能

liyang 1 semana atrás
pai
commit
80309169e0

+ 56 - 0
Models/SimulationCommon/FXJHGenenrate.cs

@@ -210,6 +210,62 @@ namespace Model
             });
         }
 
+        public static void JIJIU(double resulttime, FlightPlanEditor editor,
+   ref List<TurningPoint> turningPoints) //索滑降模型航路点生成
+        {
+            turningPoints.Add(new TurningPoint
+            {
+                TurningPointName = "现场急救",
+                TurningPointLongitude = editor.missionpoint.MissionPointLongitude,
+                TurningPointLatitude = editor.missionpoint.MissionPointLatitude,
+                TurningPointHeight = editor.missionpoint.MissionPointHeight,
+                TurningPointType = "现场急救",
+                SegmentFlightFuelConsumption = 5,
+                SegmentFlightTime = resulttime,
+                RemainingFuel = 0,
+            });
+
+            turningPoints.Add(new TurningPoint
+            {
+                TurningPointName = "现场急救",
+                TurningPointLongitude = editor.missionpoint.MissionPointLongitude,
+                TurningPointLatitude = editor.missionpoint.MissionPointLatitude,
+                TurningPointHeight = editor.missionpoint.MissionPointHeight,
+                TurningPointType = "现场急救",
+                SegmentFlightFuelConsumption = 2,
+                SegmentFlightTime = 0,
+                RemainingFuel = 0,
+            });
+        }
+
+        public static void JIJIU1(double resulttime,MissionEndPoint hospitalPoint,
+ref List<TurningPoint> turningPoints) //索滑降模型航路点生成
+        {
+            turningPoints.Add(new TurningPoint
+            {
+                TurningPointName = "现场急救",
+                TurningPointLongitude = hospitalPoint.MissionEndPointLongitude,
+                TurningPointLatitude = hospitalPoint.MissionEndPointLatitude,
+                TurningPointHeight = hospitalPoint.MissionEndPointHeight,
+                TurningPointType = "现场急救",
+                SegmentFlightFuelConsumption = 0,
+                SegmentFlightTime = resulttime,
+                RemainingFuel = 0,
+            });
+
+            turningPoints.Add(new TurningPoint
+            {
+                TurningPointName = "现场急救",
+                TurningPointLongitude = hospitalPoint.MissionEndPointLongitude,
+                TurningPointLatitude = hospitalPoint.MissionEndPointLatitude,
+                TurningPointHeight = hospitalPoint.MissionEndPointHeight,
+                TurningPointType = "现场急救",
+                SegmentFlightFuelConsumption = 2,
+                SegmentFlightTime = resulttime,
+                RemainingFuel = 0,
+            });
+        }
+
         public static void XunHu(FlightPlanEditor editor,ref List<TurningPoint> turningPoints)
         {
             int i;

+ 38 - 48
SimulationServer/Entity/AircraftXCJJ.cs

@@ -16,6 +16,9 @@ public class AircraftXCJJ : AircraftEntity
     public TaskParameter taskParameter;
     public GetNCData getNCData;
     public double resulttime;
+    public MissionEndPoint hospitalPoint;
+
+    public List<double> jiuzhuTimes = new List<double>();
 
     public bool isReadNC;
 
@@ -36,57 +39,11 @@ public class AircraftXCJJ : AircraftEntity
 
     public override void Start()
     {
-        if (!isReadNC)
-        {
-            getNCData = new GetNCData();
-            getNCData.initlatitudes = FlightPlanEditor.medicalTargetPoint[0].TargetPointLatitude;
-            getNCData.initlongitudes = FlightPlanEditor.medicalTargetPoint[0].TargetPointLongitude;
-            bool isSuccess3 = false;
-            while (!isSuccess3)
-            {
-                isSuccess3 = getNCData.GetData();
-            }
-            text_ReadNC = new Text_readNC();
-            text_ReadNC.initlatitudes = FlightPlanEditor.medicalTargetPoint[0].TargetPointLatitude;
-            text_ReadNC.initlongitudes = FlightPlanEditor.medicalTargetPoint[0].TargetPointLongitude;
-            bool isSuccess = false;
-            while (!isSuccess)
-            {
-                isSuccess = text_ReadNC.GetNCData();
-            }
-            isReadNC = true;
-        }
-
-        int hour = Convert.ToInt32(taskContent.missionInformation.StartTime.Split("时")[0]);
-        int Day = Convert.ToInt32(taskContent.missionInformation.StartDate.Split("年")[1].Split("月")[1].Split("日")[0]);
-        ////Console.WriteLine("hour:" + hour);
-        //double windSpeed = Convert.ToDouble(TargetQiXiangInfoSave("风速", hour));
-        ////Console.WriteLine("windSpeed:" + windSpeed);
-        //double vis = Convert.ToDouble(TargetQiXiangInfoSave("能见度", hour));
-        ////Console.WriteLine("vis:" + vis);
-
         FlightPlanEditor.missionpoint.MissionPointLatitude = FlightPlanEditor.medicalTargetPoint[0].TargetPointLatitude;
         FlightPlanEditor.missionpoint.MissionPointLongitude = FlightPlanEditor.medicalTargetPoint[0].TargetPointLongitude;
         FlightPlanEditor.missionpoint.MissionPointHeight = FlightPlanEditor.medicalTargetPoint[0].TargetPointHeight;
-        Console.WriteLine("Latitude:" + FlightPlanEditor.missionpoint.MissionPointLatitude + "_" + "Longitude:" + FlightPlanEditor.missionpoint.MissionPointLongitude + "_" + "Height:" + FlightPlanEditor.missionpoint.MissionPointHeight);
-
-        FXJHGenerate.FromStartToMission(FlightPlanEditor, ref TurningPoints);//生成从起点到任务段起点的航路点
 
-        //// 吊运上升速度  吊运下降速度 Task文件读取 // Editor里读天气根据时间
-        //resulttime = get_result_time_rope(taskParameter.Height, taskParameter.liftPersonnel, windSpeed, vis, taskParameter.liftUpSpeed, taskParameter.liftDownSpeed).time;//索滑降模型输出的索滑降时间
-        //Console.WriteLine("resulttime:" + resulttime);
-        //FXJHGenerate.SuoHuaJiang(resulttime, FlightPlanEditor, ref TurningPoints);
-
-        FXJHGenerate.FromMissionToEnd(FlightPlanEditor, FXJHGenerate.SuoHuaJiangMissionEndPoint(FlightPlanEditor), ref TurningPoints);
-        FXJHGenerate.FXJHTPDiedai(FlightPlanEditor, ref TurningPoints, Velocitys, FuelConsumptions);
-
-        // 飞到目标点时间与人员存活时间做对比  有一个人活着,整个任务成功
-        double time = 0;
-        for (int i = 0; i < TurningPoints.Count - 1; i++)
-        {
-            time += TurningPoints[i].SegmentFlightTime; // 判断幸存-1
-        }
-        //Console.WriteLine("time:" + time); 
+        Console.WriteLine("Latitude:" + FlightPlanEditor.missionpoint.MissionPointLatitude + "_" + "Longitude:" + FlightPlanEditor.missionpoint.MissionPointLongitude + "_" + "Height:" + FlightPlanEditor.missionpoint.MissionPointHeight);
 
         int patientCount = FlightPlanEditor.medicalTargetPoint[0].TargetType.Count; // 伤患人数
         List<string> diseaseTypes = new List<string>();
@@ -99,7 +56,7 @@ public class AircraftXCJJ : AircraftEntity
         // 交接时间为5分钟  
         double handoverTime = 5;
 
-        // 计算总急救时间  
+        // 计算总急救时间   需要飞机停留时间
         double totalEmergencyTime = CalculateTotalEmergencyTime(diseaseTypes);
 
         // 计算平均急救时间(每个医护人员分担的时间)  
@@ -139,6 +96,39 @@ public class AircraftXCJJ : AircraftEntity
         // 注意:实际项目中,每次转运一名伤员的操作可能涉及更多的逻辑,比如更新数据库中的转运状态等。  
 
 
+        FXJHGenerate.FromStartToMission(FlightPlanEditor, ref TurningPoints);//生成从起点到任务段起点的航路点
+        FXJHGenerate.JIJIU(totalTime, FlightPlanEditor, ref TurningPoints);
+        FXJHGenerate.JIJIU1(5 * 60, hospitalPoint, ref TurningPoints);
+
+        for (int i = 0; i < FlightPlanEditor.medicalTargetPoint[0].TargetType.Count - 1; i++)
+        {
+            FXJHGenerate.JIJIU(5 * 60, FlightPlanEditor, ref TurningPoints);
+            FXJHGenerate.JIJIU1(5 * 60, hospitalPoint, ref TurningPoints);
+        }
+
+        FXJHGenerate.FromMissionToEnd(FlightPlanEditor, hospitalPoint, ref TurningPoints);
+        FXJHGenerate.FXJHTPDiedai(FlightPlanEditor, ref TurningPoints, Velocitys, FuelConsumptions);
+
+        double time = 0;
+        for (int i = 2; i < 5; i++)
+        {
+            time += TurningPoints[i].SegmentFlightTime;
+        }
+        jiuzhuTimes.Add(time);
+
+        int p = 5;
+        int c = 0;
+        for (int i = p; i < FlightPlanEditor.medicalTargetPoint[0].TargetType.Count * 4 + 1; i++)
+        {
+            time += TurningPoints[i].SegmentFlightTime;
+            c++;
+            if(c == 4)
+            {
+                jiuzhuTimes.Add(time);
+                c = 0;
+            }
+        }
+
         for (int i = 0; i < TurningPoints.Count; i++) // 总飞行时间
         {
             TotalTime += TurningPoints[i].SegmentFlightTime; // 总时间   //仿真轮次1 数值1

+ 8 - 42
SimulationServer/Entity/AircraftYLWPYS.cs

@@ -36,35 +36,6 @@ public class AircraftYLWPYS : AircraftEntity
 
     public override void Start()
     {
-        if (!isReadNC)
-        {
-            getNCData = new GetNCData();
-            getNCData.initlatitudes = FlightPlanEditor.medicalSuppliesInfo[0].TargetPointLatitude;
-            getNCData.initlongitudes = FlightPlanEditor.medicalSuppliesInfo[0].TargetPointLongitude;
-            bool isSuccess3 = false;
-            while (!isSuccess3)
-            {
-                isSuccess3 = getNCData.GetData();
-            }
-            text_ReadNC = new Text_readNC();
-            text_ReadNC.initlatitudes = FlightPlanEditor.medicalSuppliesInfo[0].TargetPointLatitude;
-            text_ReadNC.initlongitudes = FlightPlanEditor.medicalSuppliesInfo[0].TargetPointLongitude;
-            bool isSuccess = false;
-            while (!isSuccess)
-            {
-                isSuccess = text_ReadNC.GetNCData();
-            }
-            isReadNC = true;
-        }
-
-        int hour = Convert.ToInt32(taskContent.missionInformation.StartTime.Split("时")[0]);
-        int Day = Convert.ToInt32(taskContent.missionInformation.StartDate.Split("年")[1].Split("月")[1].Split("日")[0]);
-        ////Console.WriteLine("hour:" + hour);
-        //double windSpeed = Convert.ToDouble(TargetQiXiangInfoSave("风速", hour));
-        ////Console.WriteLine("windSpeed:" + windSpeed);
-        //double vis = Convert.ToDouble(TargetQiXiangInfoSave("能见度", hour));
-        ////Console.WriteLine("vis:" + vis);
-
         FlightPlanEditor.missionpoint.MissionPointLatitude = FlightPlanEditor.medicalSuppliesInfo[0].TargetPointLatitude;
         FlightPlanEditor.missionpoint.MissionPointLongitude = FlightPlanEditor.medicalSuppliesInfo[0].TargetPointLongitude;
         FlightPlanEditor.missionpoint.MissionPointHeight = FlightPlanEditor.medicalSuppliesInfo[0].TargetPointHeight;
@@ -72,21 +43,16 @@ public class AircraftYLWPYS : AircraftEntity
 
         FXJHGenerate.FromStartToMission(FlightPlanEditor, ref TurningPoints);//生成从起点到任务段起点的航路点
 
-        //// 吊运上升速度  吊运下降速度 Task文件读取 // Editor里读天气根据时间
-        //resulttime = get_result_time_rope(taskParameter.Height, taskParameter.liftPersonnel, windSpeed, vis, taskParameter.liftUpSpeed, taskParameter.liftDownSpeed).time;//索滑降模型输出的索滑降时间
-        //Console.WriteLine("resulttime:" + resulttime);
-        //FXJHGenerate.SuoHuaJiang(resulttime, FlightPlanEditor, ref TurningPoints);
+        FXJHGenerate.JIJIU(5 * 60, FlightPlanEditor, ref TurningPoints);
 
-        FXJHGenerate.FromMissionToEnd(FlightPlanEditor, FXJHGenerate.SuoHuaJiangMissionEndPoint(FlightPlanEditor), ref TurningPoints);
-        FXJHGenerate.FXJHTPDiedai(FlightPlanEditor, ref TurningPoints, Velocitys, FuelConsumptions);
-
-        // 飞到目标点时间与人员存活时间做对比  有一个人活着,整个任务成功
-        double time = 0;
-        for (int i = 0; i < TurningPoints.Count - 1; i++)
+        MissionEndPoint hospitalPoint = new MissionEndPoint()
         {
-            time += TurningPoints[i].SegmentFlightTime; // 判断幸存-1
-        }
-        //Console.WriteLine("time:" + time); 
+            MissionEndPointLongitude = FlightPlanEditor.missionpoint.MissionPointLongitude,
+            MissionEndPointLatitude = FlightPlanEditor.missionpoint.MissionPointLatitude,
+            MissionEndPointHeight = FlightPlanEditor.missionpoint.MissionPointHeight
+        };
+        FXJHGenerate.FromMissionToEnd(FlightPlanEditor, hospitalPoint, ref TurningPoints);
+        FXJHGenerate.FXJHTPDiedai(FlightPlanEditor, ref TurningPoints, Velocitys, FuelConsumptions);
 
         for (int i = 0; i < TurningPoints.Count; i++) // 总飞行时间
         {

+ 14 - 47
SimulationServer/Entity/AircraftYLZY.cs

@@ -21,6 +21,8 @@ public class AircraftYLZY : AircraftEntity
 
     Text_readNC text_ReadNC;
 
+    public MissionEndPoint hospitalPoint;
+
     public override void End()
     {
         TotalFuelConsumption = TurningPoints[0].RemainingFuel - TurningPoints[^1].RemainingFuel;
@@ -36,58 +38,11 @@ public class AircraftYLZY : AircraftEntity
 
     public override void Start()
     {
-        if (!isReadNC)
-        {
-            getNCData = new GetNCData();
-            getNCData.initlatitudes = FlightPlanEditor.medicalTargetPoint[0].TargetPointLatitude;
-            getNCData.initlongitudes = FlightPlanEditor.medicalTargetPoint[0].TargetPointLongitude;
-            bool isSuccess3 = false;
-            while (!isSuccess3)
-            {
-                isSuccess3 = getNCData.GetData();
-            }
-            text_ReadNC = new Text_readNC();
-            text_ReadNC.initlatitudes = FlightPlanEditor.medicalTargetPoint[0].TargetPointLatitude;
-            text_ReadNC.initlongitudes = FlightPlanEditor.medicalTargetPoint[0].TargetPointLongitude;
-            bool isSuccess = false;
-            while (!isSuccess)
-            {
-                isSuccess = text_ReadNC.GetNCData();
-            }
-            isReadNC = true;
-        }
-
-        int hour = Convert.ToInt32(taskContent.missionInformation.StartTime.Split("时")[0]);
-        int Day = Convert.ToInt32(taskContent.missionInformation.StartDate.Split("年")[1].Split("月")[1].Split("日")[0]);
-        ////Console.WriteLine("hour:" + hour);
-        //double windSpeed = Convert.ToDouble(TargetQiXiangInfoSave("风速", hour));
-        ////Console.WriteLine("windSpeed:" + windSpeed);
-        //double vis = Convert.ToDouble(TargetQiXiangInfoSave("能见度", hour));
-        ////Console.WriteLine("vis:" + vis);
-
         FlightPlanEditor.missionpoint.MissionPointLatitude = FlightPlanEditor.medicalTargetPoint[0].TargetPointLatitude;
         FlightPlanEditor.missionpoint.MissionPointLongitude = FlightPlanEditor.medicalTargetPoint[0].TargetPointLongitude;
         FlightPlanEditor.missionpoint.MissionPointHeight = FlightPlanEditor.medicalTargetPoint[0].TargetPointHeight;
         Console.WriteLine("Latitude:" + FlightPlanEditor.missionpoint.MissionPointLatitude + "_" + "Longitude:" + FlightPlanEditor.missionpoint.MissionPointLongitude + "_" + "Height:" + FlightPlanEditor.missionpoint.MissionPointHeight);
 
-        FXJHGenerate.FromStartToMission(FlightPlanEditor, ref TurningPoints);//生成从起点到任务段起点的航路点
-
-        //// 吊运上升速度  吊运下降速度 Task文件读取 // Editor里读天气根据时间
-        //resulttime = get_result_time_rope(taskParameter.Height, taskParameter.liftPersonnel, windSpeed, vis, taskParameter.liftUpSpeed, taskParameter.liftDownSpeed).time;//索滑降模型输出的索滑降时间
-        //Console.WriteLine("resulttime:" + resulttime);
-        //FXJHGenerate.SuoHuaJiang(resulttime, FlightPlanEditor, ref TurningPoints);
-
-        FXJHGenerate.FromMissionToEnd(FlightPlanEditor, FXJHGenerate.SuoHuaJiangMissionEndPoint(FlightPlanEditor), ref TurningPoints);
-        FXJHGenerate.FXJHTPDiedai(FlightPlanEditor, ref TurningPoints, Velocitys, FuelConsumptions);
-
-        // 飞到目标点时间与人员存活时间做对比  有一个人活着,整个任务成功
-        double time = 0;
-        for (int i = 0; i < TurningPoints.Count - 1; i++)
-        {
-            time += TurningPoints[i].SegmentFlightTime; // 判断幸存-1
-        }
-        //Console.WriteLine("time:" + time); 
-
         int patientCount = FlightPlanEditor.medicalTargetPoint[0].TargetType.Count; // 伤患人数
         List<string> diseaseTypes = new List<string>();
         for (int i = 0; i < FlightPlanEditor.medicalTargetPoint[0].TargetType.diseaseTypes.Length; i++)
@@ -139,6 +94,18 @@ public class AircraftYLZY : AircraftEntity
         // 注意:实际项目中,每次转运一名伤员的操作可能涉及更多的逻辑,比如更新数据库中的转运状态等。  
 
 
+        FXJHGenerate.FromStartToMission(FlightPlanEditor, ref TurningPoints);//生成从起点到任务段起点的航路点
+
+        for (int i = 0; i < FlightPlanEditor.medicalTargetPoint[0].TargetType.Count; i++)
+        {
+            FXJHGenerate.JIJIU(5 * 60, FlightPlanEditor, ref TurningPoints);
+            FXJHGenerate.JIJIU1(5 * 60, hospitalPoint, ref TurningPoints);
+        }
+
+        FXJHGenerate.FromMissionToEnd(FlightPlanEditor, hospitalPoint, ref TurningPoints);
+        FXJHGenerate.FXJHTPDiedai(FlightPlanEditor, ref TurningPoints, Velocitys, FuelConsumptions);
+
+
         for (int i = 0; i < TurningPoints.Count; i++) // 总飞行时间
         {
             TotalTime += TurningPoints[i].SegmentFlightTime; // 总时间   //仿真轮次1 数值1

+ 16 - 0
SimulationServer/EventHandler/CreateTaskEventHandler.cs

@@ -664,6 +664,14 @@ public class CreateLandSJEventHandler : AEvent<CreateLandSXTask>
                 aircraft.taskContent = config.XCJJTask;
                 aircraft.AircraftId = config.XCJJTask.aircraftInfos[i].AircraftId;
 
+                var hospital = config.EditorConfig.hospitals.Find(t => t.BaseName == config.XCJJTask.missionInformation.Hospital);
+                aircraft.hospitalPoint = new MissionEndPoint()
+                {
+                    MissionEndPointLatitude = hospital.BaseLatitude,
+                    MissionEndPointLongitude = hospital.BaseLongitude,
+                    MissionEndPointHeight = hospital.BaseHeight
+                };
+
                 foreach (var item in config.XCJJTask.XCJJParameters)
                 {
                     if (item.AircraftId == aircraft.AircraftId)
@@ -711,6 +719,14 @@ public class CreateLandSJEventHandler : AEvent<CreateLandSXTask>
                 aircraft.taskContent = config.YLZYTask;
                 aircraft.AircraftId = config.YLZYTask.aircraftInfos[i].AircraftId;
 
+                var hospital = config.EditorConfig.hospitals.Find(t => t.BaseName == config.YLZYTask.missionInformation.Hospital);
+                aircraft.hospitalPoint = new MissionEndPoint()
+                {
+                    MissionEndPointLatitude = hospital.BaseLatitude,
+                    MissionEndPointLongitude = hospital.BaseLongitude,
+                    MissionEndPointHeight = hospital.BaseHeight
+                };
+
                 foreach (var item in config.YLZYTask.YLZYParameters)
                 {
                     if (item.AircraftId == aircraft.AircraftId)

+ 1 - 1
SimulationServer/bin/Debug/net7.0/Missions/editor_config.json

@@ -88,7 +88,7 @@
                     "天气": "晴"
                 },
                 {
-                    "时间": "16日17时-17日07时",
+                    "时间": "16日19时-17日07时",
                     "温度": 15.0,
                     "湿度": 78.0,
                     "能见度": 0.0,

+ 2 - 1
SimulationServer/bin/Debug/net7.0/Missions/task_config.json

@@ -9,6 +9,7 @@
                 "任务触发器": "时间触发",
                 "下一个任务ID": "YLZY1",
                 "目标点ID": 1,
+                "转运医院": "中日友好医院",
                 "起飞准备时间": 2700.0,
                 "开始日期": "2024年9月11日",
                 "开始时间": "00时00分00秒",
@@ -47,7 +48,7 @@
                 "任务类型": "医疗转运",
                 "任务触发器": "任务触发",
                 "下一个任务ID": "",
-                "目标点ID": 1,
+                "目标点ID": 2,
                 "转运医院": "中日友好医院",
                 "开始日期": "2023年9月11日",
                 "开始时间": "00时00分00秒",

BIN
SimulationServer/bin/Debug/net7.0/SimulationCommon.dll


BIN
SimulationServer/bin/Debug/net7.0/SimulationCommon.pdb


BIN
SimulationServer/bin/Debug/net7.0/SimulationServer.dll


BIN
SimulationServer/bin/Debug/net7.0/SimulationServer.exe


BIN
SimulationServer/bin/Debug/net7.0/SimulationServer.pdb