Jelajahi Sumber

完成总体指标报告输出

liyang 7 bulan lalu
induk
melakukan
09b98a5f42
29 mengubah file dengan 382 tambahan dan 82 penghapusan
  1. TEMPAT SAMPAH
      KYFramework/bin/Debug/net7.0/KYFramework.dll
  2. TEMPAT SAMPAH
      KYFramework/bin/Debug/net7.0/KYFramework.pdb
  3. TEMPAT SAMPAH
      KYFramework/bin/Debug/net7.0/ThirdParty.dll
  4. TEMPAT SAMPAH
      KYFramework/bin/Debug/net7.0/ThirdParty.pdb
  5. 30 12
      Models/SimulationCommon/Rectangular_Area_Search_Function.cs
  6. 262 11
      SimulationServer/Component/TaskComponent.cs
  7. 3 1
      SimulationServer/Entity/AircraftSHJ.cs
  8. 2 1
      SimulationServer/Entity/AircraftSJ.cs
  9. 4 0
      SimulationServer/Entity/AircraftZS.cs
  10. 7 1
      SimulationServer/Entity/JJJYMission.cs
  11. 7 1
      SimulationServer/Entity/KTKSMission.cs
  12. 7 1
      SimulationServer/Entity/SHJMission.cs
  13. 9 3
      SimulationServer/Entity/ZSJYMission.cs
  14. 49 49
      SimulationServer/EventHandler/ServerStartEventHandler.cs
  15. TEMPAT SAMPAH
      SimulationServer/bin/Debug/net7.0/KYFramework.dll
  16. TEMPAT SAMPAH
      SimulationServer/bin/Debug/net7.0/KYFramework.pdb
  17. TEMPAT SAMPAH
      SimulationServer/bin/Debug/net7.0/KYNetwork.dll
  18. TEMPAT SAMPAH
      SimulationServer/bin/Debug/net7.0/KYNetwork.pdb
  19. 1 1
      SimulationServer/bin/Debug/net7.0/Missions/editor_config.json
  20. 1 1
      SimulationServer/bin/Debug/net7.0/Missions/task_config.json
  21. TEMPAT SAMPAH
      SimulationServer/bin/Debug/net7.0/SimulationCommon.dll
  22. TEMPAT SAMPAH
      SimulationServer/bin/Debug/net7.0/SimulationCommon.pdb
  23. TEMPAT SAMPAH
      SimulationServer/bin/Debug/net7.0/SimulationServer.dll
  24. TEMPAT SAMPAH
      SimulationServer/bin/Debug/net7.0/SimulationServer.exe
  25. TEMPAT SAMPAH
      SimulationServer/bin/Debug/net7.0/SimulationServer.pdb
  26. TEMPAT SAMPAH
      SimulationServer/bin/Debug/net7.0/ThirdParty.dll
  27. TEMPAT SAMPAH
      SimulationServer/bin/Debug/net7.0/ThirdParty.pdb
  28. TEMPAT SAMPAH
      ThirdParty/bin/Debug/net7.0/ThirdParty.dll
  29. TEMPAT SAMPAH
      ThirdParty/bin/Debug/net7.0/ThirdParty.pdb

TEMPAT SAMPAH
KYFramework/bin/Debug/net7.0/KYFramework.dll


TEMPAT SAMPAH
KYFramework/bin/Debug/net7.0/KYFramework.pdb


TEMPAT SAMPAH
KYFramework/bin/Debug/net7.0/ThirdParty.dll


TEMPAT SAMPAH
KYFramework/bin/Debug/net7.0/ThirdParty.pdb


+ 30 - 12
Models/SimulationCommon/Rectangular_Area_Search_Function.cs

@@ -188,7 +188,7 @@ public class Rectangular_Area_Search_Function
                     if (CheckDirection(m_point, line_inite_Preparatory) <= 0)
                     {
                         distance_left = GetDistance(m_point, line_inite_Preparatory);
-                        if (distance_left > max_Ditance_left)
+                        if (distance_left >= max_Ditance_left)
                         {
                             max_Ditance_left = distance_left;
                             Point_left = m_point;
@@ -198,7 +198,7 @@ public class Rectangular_Area_Search_Function
                     if (CheckDirection(m_point, line_inite_Preparatory) >= 0)
                     {
                         distance_right = GetDistance(m_point, line_inite_Preparatory);
-                        if (distance_right > max_Distance_right)
+                        if (distance_right >= max_Distance_right)
                         {
                             max_Distance_right = distance_right;
                             Point_right = m_point;
@@ -215,18 +215,36 @@ public class Rectangular_Area_Search_Function
             double[] Point2 = GetCrossPoint(line_Parallel_Base, line_Perpendicular_Base_right);
             double[] Point3 = GetCrossPoint(line_Parallel_Base, line_Perpendicular_Base_left);
 
-            double[] temp;
+            List<double> temp0 = new List<double>();
+            List<double> temp1 = new List<double>();
+            List<double> temp2 = new List<double>();
+            List<double> temp3 = new List<double>();
 
-            if (Point0[0] < Point3[0])
-            {
-                temp = Point0;
-                Point0 = Point3;
-                Point3 = temp;
+            double lat0 = Point0[0];
+            double lon0 = Point0[1];
+            double lat1 = Point1[0];
+            double lon1 = Point1[1];
+            double lat2 = Point2[0];
+            double lon2 = Point2[1];
+            double lat3 = Point3[0];
+            double lon3 = Point3[1];
 
-                temp = Point1;
-                Point1 = Point2;
-                Point2 = temp;
-            }
+            temp0.Add(Math.Max(Math.Max(Math.Max(lat0, lat1), lat2), lat3));
+            temp0.Add(Math.Min(Math.Min(Math.Min(lon0, lon1), lon2), lon3));
+
+            temp1.Add(Math.Max(Math.Max(Math.Max(lat0, lat1), lat2), lat3));
+            temp1.Add(Math.Max(Math.Max(Math.Max(lon0, lon1), lon2), lon3));
+
+            temp2.Add(Math.Min(Math.Min(Math.Min(lat0, lat1), lat2), lat3));
+            temp2.Add(Math.Max(Math.Max(Math.Max(lon0, lon1), lon2), lon3));
+
+            temp3.Add(Math.Min(Math.Min(Math.Min(lat0, lat1), lat2), lat3));
+            temp3.Add(Math.Min(Math.Min(Math.Min(lon0, lon1), lon2), lon3));
+
+            Point0 = temp0.ToArray();
+            Point1 = temp1.ToArray();
+            Point2 = temp2.ToArray();
+            Point3 = temp3.ToArray();
 
             double rectangular_area = GetRectangularArea(Point0, Point1, Point2, Point3);
 

+ 262 - 11
SimulationServer/Component/TaskComponent.cs

@@ -152,8 +152,11 @@ public class TaskComponent : Component
         //string data = DateTime.Now.ToString("yyyy-MM-dd");
         string path = $"Reports/{date}";
         if (!Directory.Exists(path)) Directory.CreateDirectory(path);
-
-        string totalPath = $"{path}/{"海上搜救任务总体指标报告"}.xls";
+        string totalPath = "";
+        if (isSea)
+            totalPath = $"{path}/{"海上搜救任务总体指标报告"}.xls";
+        if (isLand)
+            totalPath = $"{path}/{"陆上搜救任务总体指标报告"}.xls";
         DataTableExtensions.SaveToExcel(totalPath, alltotalReportSea, true, true, (seaSuccessCount * 1f / ExecutionContext).ToString());
 
 
@@ -221,9 +224,16 @@ public class TaskComponentUpdateSystem : UpdateSystem<TaskComponent>
     float 人员数量 = 0;
     double aircreftCount = 0;
 
+    double searchCount = 0;
+    double jzCount = 0;
+
     public bool isSeaSJRescueMissionsOver = false;
     public bool isLandSJRescueMissionsOver = false;
     public bool isKZDYMissionsOver = false;
+    public bool isKTKSMissionsOver = false;
+    public bool isZSJYMissionsOver = false;
+    public bool isJJJYMissionsOver = false;
+    public bool isSHJMissionsOver = false;
 
     public bool isReport;
 
@@ -233,7 +243,7 @@ public class TaskComponentUpdateSystem : UpdateSystem<TaskComponent>
         {
             if (self.SeaSJRescueMissions.All(m => m.IsOver) && !isSeaSJRescueMissionsOver)
             {
-                self.missionCount--;
+                self.missionCount -= self.SeaSJRescueMissions.Count;
                 isSeaSJRescueMissionsOver = true;
                 //for (int i = 0; i < self.ExecutionContext; i++)
                 //{
@@ -253,7 +263,7 @@ public class TaskComponentUpdateSystem : UpdateSystem<TaskComponent>
         {
             if (self.LandSJRescueMissions.All(m => m.IsOver) && !isLandSJRescueMissionsOver)
             {
-                self.missionCount--;
+                self.missionCount -= self.LandSJRescueMissions.Count;
                 isLandSJRescueMissionsOver = true;
                 //for (int i = 0; i < self.ExecutionContext; i++)
                 //{
@@ -273,11 +283,48 @@ public class TaskComponentUpdateSystem : UpdateSystem<TaskComponent>
         {
             if (self.KZDYMissions.All(m => m.IsOver) && !isKZDYMissionsOver)
             {
-                self.missionCount--;
+                self.missionCount -= self.KZDYMissions.Count;
                 isKZDYMissionsOver = true;
             }
         }
 
+        if (self.KTKSMissions.Count > 0)
+        {
+            if (self.KTKSMissions.All(m => m.IsOver) && !isKTKSMissionsOver)
+            {
+                self.missionCount -= self.KTKSMissions.Count;
+                isKTKSMissionsOver = true;
+            }
+        }
+
+        if (self.ZSJYMissions.Count > 0)
+        {
+            if (self.ZSJYMissions.All(m => m.IsOver) && !isZSJYMissionsOver)
+            {
+                self.missionCount -= self.ZSJYMissions.Count;
+                isZSJYMissionsOver = true;
+            }
+        }
+
+        if (self.JJJYMissions.Count > 0)
+        {
+            if (self.JJJYMissions.All(m => m.IsOver) && !isJJJYMissionsOver)
+            {
+                self.missionCount -= self.JJJYMissions.Count;
+                isJJJYMissionsOver = true;
+            }
+        }
+
+        if (self.SHJMissions.Count > 0)
+        {
+            if (self.SHJMissions.All(m => m.IsOver) && !isSHJMissionsOver)
+            {
+                self.missionCount -= self.SHJMissions.Count;
+                isSHJMissionsOver = true;
+            }
+        }
+
+        //Console.WriteLine("self.missionCount:" + self.missionCount);
         if (self.missionCount == 0 && !isReport)
         {
             for (int i = 0; i < self.ExecutionContext; i++)
@@ -301,10 +348,49 @@ public class TaskComponentUpdateSystem : UpdateSystem<TaskComponent>
                             任务准备时间 = float.Parse(item1.Value["任务准备时间"][i]);
                         平均搜索时间 += float.Parse(item1.Value["平均搜索时间"][i]);
                         平均救助时间 += float.Parse(item1.Value["平均救助时间"][i]);
-                        Console.WriteLine("平均救助时间1:" + 平均救助时间);
                         总飞行时间 += float.Parse(item1.Value["总飞行时间"][i]);
                         人员存活率 += float.Parse(item1.Value["人员存活率"][i]);
                         aircreftCount++;
+                        if (item1.Value["平均搜索时间"][i] != "0")
+                            searchCount++;
+                        if (item1.Value["平均救助时间"][i] != "0")
+                            jzCount++;
+                        Console.WriteLine("海上搜救" + item1.Key + "识别到人数:" + item1.Value["识别成功率"][i]);
+                        Console.WriteLine("海上搜救" + item1.Key + "人员数量:" + item1.Value["人员数量"][i]);
+                        Console.WriteLine("海上搜救" + item1.Key + "任务准备时间:" + item1.Value["任务准备时间"][i]);
+                        Console.WriteLine("海上搜救" + item1.Key + "平均搜索时间:" + item1.Value["平均搜索时间"][i]);
+                        Console.WriteLine("海上搜救" + item1.Key + "平均救助时间:" + item1.Value["平均救助时间"][i]);
+                        Console.WriteLine("海上搜救" + item1.Key + "总飞行时间:" + item1.Value["总飞行时间"][i]);
+                        Console.WriteLine("海上搜救" + item1.Key + "存活人数:" + item1.Value["人员存活率"][i]);
+                        Console.WriteLine("===============================================================");
+                    }
+                }
+
+                foreach (var item in self.LandSJRescueMissions)
+                {
+                    foreach (var item1 in item.aircraftSJDatas)
+                    {
+                        识别成功率 += float.Parse(item1.Value["识别成功率"][i]);
+                        人员数量 += float.Parse(item1.Value["人员数量"][i]);
+                        if (任务准备时间 < float.Parse(item1.Value["任务准备时间"][i]))
+                            任务准备时间 = float.Parse(item1.Value["任务准备时间"][i]);
+                        平均搜索时间 += float.Parse(item1.Value["平均搜索时间"][i]);
+                        平均救助时间 += float.Parse(item1.Value["平均救助时间"][i]);
+                        总飞行时间 += float.Parse(item1.Value["总飞行时间"][i]);
+                        人员存活率 += float.Parse(item1.Value["人员存活率"][i]);
+                        aircreftCount++;
+                        if (item1.Value["平均搜索时间"][i] != "0")
+                            searchCount++;
+                        if (item1.Value["平均救助时间"][i] != "0")
+                            jzCount++;
+                        Console.WriteLine("路上搜寻" + item1.Key + "识别到人数:" + item1.Value["识别成功率"][i]);
+                        Console.WriteLine("路上搜寻" + item1.Key + "人员数量:" + item1.Value["人员数量"][i]);
+                        Console.WriteLine("路上搜寻" + item1.Key + "任务准备时间:" + item1.Value["任务准备时间"][i]);
+                        Console.WriteLine("路上搜寻" + item1.Key + "平均搜索时间:" + item1.Value["平均搜索时间"][i]);
+                        Console.WriteLine("路上搜寻" + item1.Key + "平均救助时间:" + item1.Value["平均救助时间"][i]);
+                        Console.WriteLine("路上搜寻" + item1.Key + "总飞行时间:" + item1.Value["总飞行时间"][i]);
+                        Console.WriteLine("路上搜寻" + item1.Key + "存活人数:" + item1.Value["人员存活率"][i]);
+                        Console.WriteLine("===============================================================");
                     }
                 }
 
@@ -318,28 +404,178 @@ public class TaskComponentUpdateSystem : UpdateSystem<TaskComponent>
                             任务准备时间 = float.Parse(item1.Value["任务准备时间"][i]);
                         平均搜索时间 += float.Parse(item1.Value["平均搜索时间"][i]);
                         平均救助时间 += float.Parse(item1.Value["平均救助时间"][i]);
-                        Console.WriteLine("平均救助时间2:" + 平均救助时间);
                         总飞行时间 += float.Parse(item1.Value["总飞行时间"][i]);
                         人员存活率 += float.Parse(item1.Value["人员存活率"][i]);
                         aircreftCount++;
+                        if (item1.Value["平均搜索时间"][i] != "0")
+                            searchCount++;
+                        if (item1.Value["平均救助时间"][i] != "0")
+                            jzCount++;
+                        Console.WriteLine("空中吊运" + item1.Key + "识别到人数:" + item1.Value["识别成功率"][i]);
+                        Console.WriteLine("空中吊运" + item1.Key + "人员数量:" + item1.Value["人员数量"][i]);
+                        Console.WriteLine("空中吊运" + item1.Key + "任务准备时间:" + item1.Value["任务准备时间"][i]);
+                        Console.WriteLine("空中吊运" + item1.Key + "平均搜索时间:" + item1.Value["平均搜索时间"][i]);
+                        Console.WriteLine("空中吊运" + item1.Key + "平均救助时间:" + item1.Value["平均救助时间"][i]);
+                        Console.WriteLine("空中吊运" + item1.Key + "总飞行时间:" + item1.Value["总飞行时间"][i]);
+                        Console.WriteLine("空中吊运" + item1.Key + "存活人数:" + item1.Value["人员存活率"][i]);
+                        Console.WriteLine("===============================================================");
+                    }
+                }
+
+                foreach (var item in self.KTKSMissions)
+                {
+                    foreach (var item1 in item.aircraftSJDatas)
+                    {
+                        识别成功率 += float.Parse(item1.Value["识别成功率"][i]);
+                        人员数量 += float.Parse(item1.Value["人员数量"][i]);
+                        if (任务准备时间 < float.Parse(item1.Value["任务准备时间"][i]))
+                            任务准备时间 = float.Parse(item1.Value["任务准备时间"][i]);
+                        平均搜索时间 += float.Parse(item1.Value["平均搜索时间"][i]);
+                        平均救助时间 += float.Parse(item1.Value["平均救助时间"][i]);
+                        总飞行时间 += float.Parse(item1.Value["总飞行时间"][i]);
+                        人员存活率 += float.Parse(item1.Value["人员存活率"][i]);
+                        aircreftCount++;
+                        if (item1.Value["平均搜索时间"][i] != "0")
+                            searchCount++;
+                        if (item1.Value["平均救助时间"][i] != "0")
+                            jzCount++;
+                        Console.WriteLine("空投空送" + item1.Key + "识别到人数:" + item1.Value["识别成功率"][i]);
+                        Console.WriteLine("空投空送" + item1.Key + "人员数量:" + item1.Value["人员数量"][i]);
+                        Console.WriteLine("空投空送" + item1.Key + "任务准备时间:" + item1.Value["任务准备时间"][i]);
+                        Console.WriteLine("空投空送" + item1.Key + "平均搜索时间:" + item1.Value["平均搜索时间"][i]);
+                        Console.WriteLine("空投空送" + item1.Key + "平均救助时间:" + item1.Value["平均救助时间"][i]);
+                        Console.WriteLine("空投空送" + item1.Key + "总飞行时间:" + item1.Value["总飞行时间"][i]);
+                        Console.WriteLine("空投空送" + item1.Key + "存活人数:" + item1.Value["人员存活率"][i]);
+                        Console.WriteLine("===============================================================");
+                    }
+                }
+
+                foreach (var item in self.ZSJYMissions)
+                {
+                    foreach (var item1 in item.aircraftSJDatas)
+                    {
+                        识别成功率 += float.Parse(item1.Value["识别成功率"][i]);
+                        人员数量 += float.Parse(item1.Value["人员数量"][i]);
+                        if (任务准备时间 < float.Parse(item1.Value["任务准备时间"][i]))
+                            任务准备时间 = float.Parse(item1.Value["任务准备时间"][i]);
+                        平均搜索时间 += float.Parse(item1.Value["平均搜索时间"][i]);
+                        平均救助时间 += float.Parse(item1.Value["平均救助时间"][i]);
+                        总飞行时间 += float.Parse(item1.Value["总飞行时间"][i]);
+                        人员存活率 += float.Parse(item1.Value["人员存活率"][i]);
+                        aircreftCount++;
+                        if (item1.Value["平均搜索时间"][i] != "0")
+                            searchCount++;
+                        if (item1.Value["平均救助时间"][i] != "0")
+                            jzCount++;
+                        Console.WriteLine("着水救援" + item1.Key + "识别到人数:" + item1.Value["识别成功率"][i]);
+                        Console.WriteLine("着水救援" + item1.Key + "人员数量:" + item1.Value["人员数量"][i]);
+                        Console.WriteLine("着水救援" + item1.Key + "任务准备时间:" + item1.Value["任务准备时间"][i]);
+                        Console.WriteLine("着水救援" + item1.Key + "平均搜索时间:" + item1.Value["平均搜索时间"][i]);
+                        Console.WriteLine("着水救援" + item1.Key + "平均救助时间:" + item1.Value["平均救助时间"][i]);
+                        Console.WriteLine("着水救援" + item1.Key + "总飞行时间:" + item1.Value["总飞行时间"][i]);
+                        Console.WriteLine("着水救援" + item1.Key + "存活人数:" + item1.Value["人员存活率"][i]);
+                        Console.WriteLine("===============================================================");
+                    }
+                }
+
+
+                foreach (var item in self.JJJYMissions)
+                {
+                    foreach (var item1 in item.aircraftSJDatas)
+                    {
+                        识别成功率 += float.Parse(item1.Value["识别成功率"][i]);
+                        人员数量 += float.Parse(item1.Value["人员数量"][i]);
+                        if (任务准备时间 < float.Parse(item1.Value["任务准备时间"][i]))
+                            任务准备时间 = float.Parse(item1.Value["任务准备时间"][i]);
+                        平均搜索时间 += float.Parse(item1.Value["平均搜索时间"][i]);
+                        平均救助时间 += float.Parse(item1.Value["平均救助时间"][i]);
+                        总飞行时间 += float.Parse(item1.Value["总飞行时间"][i]);
+                        人员存活率 += float.Parse(item1.Value["人员存活率"][i]);
+                        aircreftCount++;
+                        if (item1.Value["平均搜索时间"][i] != "0")
+                            searchCount++;
+                        if (item1.Value["平均救助时间"][i] != "0")
+                            jzCount++;
+                        Console.WriteLine("机降救援" + item1.Key + "识别到人数:" + item1.Value["识别成功率"][i]);
+                        Console.WriteLine("机降救援" + item1.Key + "人员数量:" + item1.Value["人员数量"][i]);
+                        Console.WriteLine("机降救援" + item1.Key + "任务准备时间:" + item1.Value["任务准备时间"][i]);
+                        Console.WriteLine("机降救援" + item1.Key + "平均搜索时间:" + item1.Value["平均搜索时间"][i]);
+                        Console.WriteLine("机降救援" + item1.Key + "平均救助时间:" + item1.Value["平均救助时间"][i]);
+                        Console.WriteLine("机降救援" + item1.Key + "总飞行时间:" + item1.Value["总飞行时间"][i]);
+                        Console.WriteLine("机降救援" + item1.Key + "存活人数:" + item1.Value["人员存活率"][i]);
+                        Console.WriteLine("===============================================================");
+                    }
+                }
+
+
+                foreach (var item in self.SHJMissions)
+                {
+                    foreach (var item1 in item.aircraftSJDatas)
+                    {
+                        识别成功率 += float.Parse(item1.Value["识别成功率"][i]);
+                        人员数量 += float.Parse(item1.Value["人员数量"][i]);
+                        if (任务准备时间 < float.Parse(item1.Value["任务准备时间"][i]))
+                            任务准备时间 = float.Parse(item1.Value["任务准备时间"][i]);
+                        平均搜索时间 += float.Parse(item1.Value["平均搜索时间"][i]);
+                        平均救助时间 += float.Parse(item1.Value["平均救助时间"][i]);
+                        总飞行时间 += float.Parse(item1.Value["总飞行时间"][i]);
+                        人员存活率 += float.Parse(item1.Value["人员存活率"][i]);
+                        aircreftCount++;
+                        if (item1.Value["平均搜索时间"][i] != "0")
+                            searchCount++;
+                        if (item1.Value["平均救助时间"][i] != "0")
+                            jzCount++;
+                        Console.WriteLine("索滑降" + item1.Key + "识别到人数:" + item1.Value["识别成功率"][i]);
+                        Console.WriteLine("索滑降" + item1.Key + "人员数量:" + item1.Value["人员数量"][i]);
+                        Console.WriteLine("索滑降" + item1.Key + "任务准备时间:" + item1.Value["任务准备时间"][i]);
+                        Console.WriteLine("索滑降" + item1.Key + "平均搜索时间:" + item1.Value["平均搜索时间"][i]);
+                        Console.WriteLine("索滑降" + item1.Key + "平均救助时间:" + item1.Value["平均救助时间"][i]);
+                        Console.WriteLine("索滑降" + item1.Key + "总飞行时间:" + item1.Value["总飞行时间"][i]);
+                        Console.WriteLine("索滑降" + item1.Key + "存活人数:" + item1.Value["人员存活率"][i]);
+                        Console.WriteLine("===============================================================");
                     }
                 }
 
                 SJAllTotalTaskPerformance allTotalTaskPerformance = new SJAllTotalTaskPerformance();
+
                 if (人员存活率 != 0)
                     任务是否成功 = 1;
+
+                if (任务是否成功 == 1)
+                    self.seaSuccessCount++;
+
                 allTotalTaskPerformance.识别成功率 = (识别成功率 / 人员数量).ToString();
                 allTotalTaskPerformance.任务准备时间 = 任务准备时间.ToString();
-                allTotalTaskPerformance.平均搜索时间 = (平均搜索时间 / aircreftCount).ToString("f4");
-                allTotalTaskPerformance.平均救助时间 = (平均救助时间 / aircreftCount).ToString("f4");
+                if (searchCount != 0)
+                    allTotalTaskPerformance.平均搜索时间 = (平均搜索时间 / searchCount).ToString("f4"); // aircreftCount
+                else
+                    allTotalTaskPerformance.平均搜索时间 = "0";
+                if (jzCount != 0)
+                    allTotalTaskPerformance.平均救助时间 = (平均救助时间 / jzCount).ToString("f4"); // aircreftCount
+                else
+                    allTotalTaskPerformance.平均救助时间 = "0";
                 allTotalTaskPerformance.总飞行时间 = 总飞行时间.ToString("f4");
                 allTotalTaskPerformance.海情覆盖率 = "0.6".ToString();//"60%"
                 allTotalTaskPerformance.任务是否成功 = 任务是否成功.ToString();
                 allTotalTaskPerformance.人员存活率 = (人员存活率 / 人员数量).ToString();
-
+                allTotalTaskPerformance.环境覆盖率 = "0.6".ToString();
+
+                Console.WriteLine("单轮次总体指标识别成功率:" + allTotalTaskPerformance.识别成功率);
+                Console.WriteLine("单轮次总体指标任务准备时间:" + allTotalTaskPerformance.任务准备时间);
+                Console.WriteLine("单轮次总体指标平均搜索时间:" + allTotalTaskPerformance.平均搜索时间);
+                Console.WriteLine("单轮次总体指标平均救助时间:" + allTotalTaskPerformance.平均救助时间);
+                Console.WriteLine("单轮次总体指标总飞行时间:" + allTotalTaskPerformance.总飞行时间);
+                Console.WriteLine("单轮次总体指标海情覆盖率:" + allTotalTaskPerformance.海情覆盖率);
+                Console.WriteLine("单轮次总体指标环境覆盖率:" + allTotalTaskPerformance.环境覆盖率);
+                Console.WriteLine("单轮次总体指标任务是否成功:" + allTotalTaskPerformance.任务是否成功);
+                Console.WriteLine("单轮次总体指标人员存活率:" + allTotalTaskPerformance.人员存活率);
+                Console.WriteLine("===============================================================");
 
                 Dictionary<string, Dictionary<string, string>> report = new Dictionary<string, Dictionary<string, string>>();
-                report["总任务表现"] = new Dictionary<string, string>
+
+                if (self.isSea)
+                {
+                    report["总任务表现"] = new Dictionary<string, string>
                 {
                     { "识别成功率", allTotalTaskPerformance.识别成功率.ToString() },
                     { "任务准备时间", allTotalTaskPerformance.任务准备时间.ToString() },
@@ -350,6 +586,21 @@ public class TaskComponentUpdateSystem : UpdateSystem<TaskComponent>
                     { "任务是否成功", allTotalTaskPerformance.任务是否成功.ToString() },
                     { "人员存活率", allTotalTaskPerformance.人员存活率.ToString() }
                 };
+                }
+                else if (self.isLand)
+                {
+                    report["总任务表现"] = new Dictionary<string, string>
+                {
+                    { "识别成功率", allTotalTaskPerformance.识别成功率.ToString() },
+                    { "任务准备时间", allTotalTaskPerformance.任务准备时间.ToString() },
+                    { "平均搜索时间", allTotalTaskPerformance.平均搜索时间.ToString() },
+                    { "平均救助时间", allTotalTaskPerformance.平均救助时间.ToString() },
+                    { "总飞行时间", allTotalTaskPerformance.总飞行时间.ToString() },
+                    { "环境覆盖率", allTotalTaskPerformance.环境覆盖率.ToString() },
+                    { "任务是否成功", allTotalTaskPerformance.任务是否成功.ToString() },
+                    { "人员存活率", allTotalTaskPerformance.人员存活率.ToString() }
+                };
+                }
 
                 self.SaveSeaSJ(report);
             }

+ 3 - 1
SimulationServer/Entity/AircraftSHJ.cs

@@ -14,6 +14,8 @@ public class AircraftSHJ : AircraftEntity
 
     public bool IsOver;
     public bool Success;
+
+    public double resulttime;
     public override void End()
     {
         TotalFuelConsumption = TurningPoints[0].RemainingFuel - TurningPoints[^1].RemainingFuel;
@@ -41,7 +43,7 @@ public class AircraftSHJ : AircraftEntity
         //Console.WriteLine("vis:" + vis);
 
         FXJHGenerate.FromStartToMission(FlightPlanEditor, ref TurningPoints);//生成从起点到任务段起点的航路点
-        double resulttime = get_result_time_rope(SHJParameter.H, SHJParameter.person_number, windSpeed, vis, SHJParameter.descendspeed).time;//索滑降模型输出的索滑降时间
+        resulttime = get_result_time_rope(SHJParameter.H, SHJParameter.person_number, windSpeed, vis, SHJParameter.descendspeed).time;//索滑降模型输出的索滑降时间
         Console.WriteLine("resulttime:" + resulttime);
         FXJHGenerate.SuoHuaJiang(resulttime, FlightPlanEditor, ref TurningPoints);
         FXJHGenerate.FromMissionToEnd(FlightPlanEditor, FXJHGenerate.SuoHuaJiangMissionEndPoint(FlightPlanEditor), ref TurningPoints);

+ 2 - 1
SimulationServer/Entity/AircraftSJ.cs

@@ -161,7 +161,7 @@ public class AircraftSJ : AircraftEntity
                 lat = startPoint1.lat / 2 + startPoint2.lat / 2,
                 lon = startPoint1.lon / 2 + startPoint2.lon / 2
             };
-            //Console.WriteLine("centerPoint:" + centerPoint.lat + "-" + centerPoint.lon);
+           //Console.WriteLine("centerPoint:" + centerPoint.lat + "-" + centerPoint.lon);
             // 以 centerPoint 为中心,生成正方形区域
             var lonD = Math.Abs(points[0].lon - points[1].lon);
             var latD1 = Math.Abs(points[1].lat - points[2].lat);
@@ -290,6 +290,7 @@ public class AircraftSJ : AircraftEntity
                 var distance = Utils.Util.GetDistance(currentLocation.CurrentLon, targetPoint.x,
                     currentLocation.CurrentLat,
                     targetPoint.y);
+                //Console.WriteLine("targetPoint:" + targetPoint.x + "-" + targetPoint.y + "-" + targetPoint.z);
                 Log.Info("距离:====================" + distance);
                 if (searchMissionPayload.SearchPayload == "雷达搜索")
                 {

+ 4 - 0
SimulationServer/Entity/AircraftZS.cs

@@ -29,6 +29,10 @@ public class AircraftZS : AircraftEntity
     public override void End()
     {
         TotalFuelConsumption = TurningPoints[0].RemainingFuel - TurningPoints[^1].RemainingFuel;
+        for (int i = 0; i < TurningPoints.Count - 3; i++)
+        {
+            SearchTime += TurningPoints[i].SegmentFlightTime; //搜索时间
+        }
     }
 
     public override void Reset()

+ 7 - 1
SimulationServer/Entity/JJJYMission.cs

@@ -78,18 +78,24 @@ public class JJJYMission : Entity
             if (!aircraftSJDatas[key].ContainsKey("识别成功率"))
                 aircraftSJDatas[key]["识别成功率"] = new List<string>();
             aircraftSJDatas[key]["识别成功率"].Add("0");
+            if (!aircraftSJDatas[key].ContainsKey("人员数量"))
+                aircraftSJDatas[key]["人员数量"] = new List<string>();
+            aircraftSJDatas[key]["人员数量"].Add("0");
             if (!aircraftSJDatas[key].ContainsKey("任务准备时间"))
                 aircraftSJDatas[key]["任务准备时间"] = new List<string>();
             aircraftSJDatas[key]["任务准备时间"].Add(aircraftEntity.TaskReadyTime.ToString());
             if (!aircraftSJDatas[key].ContainsKey("平均搜索时间"))
                 aircraftSJDatas[key]["平均搜索时间"] = new List<string>();
             aircraftSJDatas[key]["平均搜索时间"].Add("0");
+            if (!aircraftSJDatas[key].ContainsKey("平均救助时间"))
+                aircraftSJDatas[key]["平均救助时间"] = new List<string>();
+            aircraftSJDatas[key]["平均救助时间"].Add("0");
             if (!aircraftSJDatas[key].ContainsKey("总飞行时间"))
                 aircraftSJDatas[key]["总飞行时间"] = new List<string>();
             aircraftSJDatas[key]["总飞行时间"].Add(aircraftEntity.TotalTime.ToString());
             if (!aircraftSJDatas[key].ContainsKey("人员存活率"))
                 aircraftSJDatas[key]["人员存活率"] = new List<string>();
-            aircraftSJDatas[key]["人员存活率"].Add(aircraftEntity.Success ? "1" : "0");
+            aircraftSJDatas[key]["人员存活率"].Add("0");
         }
     }
 

+ 7 - 1
SimulationServer/Entity/KTKSMission.cs

@@ -79,18 +79,24 @@ public class KTKSMission : Entity
             if (!aircraftSJDatas[key].ContainsKey("识别成功率"))
                 aircraftSJDatas[key]["识别成功率"] = new List<string>();
             aircraftSJDatas[key]["识别成功率"].Add("0");
+            if (!aircraftSJDatas[key].ContainsKey("人员数量"))
+                aircraftSJDatas[key]["人员数量"] = new List<string>();
+            aircraftSJDatas[key]["人员数量"].Add("0");
             if (!aircraftSJDatas[key].ContainsKey("任务准备时间"))
                 aircraftSJDatas[key]["任务准备时间"] = new List<string>();
             aircraftSJDatas[key]["任务准备时间"].Add(aircraftEntity.TaskReadyTime.ToString());
             if (!aircraftSJDatas[key].ContainsKey("平均搜索时间"))
                 aircraftSJDatas[key]["平均搜索时间"] = new List<string>();
             aircraftSJDatas[key]["平均搜索时间"].Add("0");
+            if (!aircraftSJDatas[key].ContainsKey("平均救助时间"))
+                aircraftSJDatas[key]["平均救助时间"] = new List<string>();
+            aircraftSJDatas[key]["平均救助时间"].Add("0");
             if (!aircraftSJDatas[key].ContainsKey("总飞行时间"))
                 aircraftSJDatas[key]["总飞行时间"] = new List<string>();
             aircraftSJDatas[key]["总飞行时间"].Add(aircraftEntity.TotalTime.ToString());
             if (!aircraftSJDatas[key].ContainsKey("人员存活率"))
                 aircraftSJDatas[key]["人员存活率"] = new List<string>();
-            aircraftSJDatas[key]["人员存活率"].Add(aircraftEntity.Success ? "1" : "0");
+            aircraftSJDatas[key]["人员存活率"].Add("0");
         }
     }
 

+ 7 - 1
SimulationServer/Entity/SHJMission.cs

@@ -78,18 +78,24 @@ public class SHJMission : Entity
             if (!aircraftSJDatas[key].ContainsKey("识别成功率"))
                 aircraftSJDatas[key]["识别成功率"] = new List<string>();
             aircraftSJDatas[key]["识别成功率"].Add("0");
+            if (!aircraftSJDatas[key].ContainsKey("人员数量"))
+                aircraftSJDatas[key]["人员数量"] = new List<string>();
+            aircraftSJDatas[key]["人员数量"].Add("0");
             if (!aircraftSJDatas[key].ContainsKey("任务准备时间"))
                 aircraftSJDatas[key]["任务准备时间"] = new List<string>();
             aircraftSJDatas[key]["任务准备时间"].Add(aircraftEntity.TaskReadyTime.ToString());
             if (!aircraftSJDatas[key].ContainsKey("平均搜索时间"))
                 aircraftSJDatas[key]["平均搜索时间"] = new List<string>();
             aircraftSJDatas[key]["平均搜索时间"].Add("0");
+            if (!aircraftSJDatas[key].ContainsKey("平均救助时间"))
+                aircraftSJDatas[key]["平均救助时间"] = new List<string>();
+            aircraftSJDatas[key]["平均救助时间"].Add("0");
             if (!aircraftSJDatas[key].ContainsKey("总飞行时间"))
                 aircraftSJDatas[key]["总飞行时间"] = new List<string>();
             aircraftSJDatas[key]["总飞行时间"].Add(aircraftEntity.TotalTime.ToString());
             if (!aircraftSJDatas[key].ContainsKey("人员存活率"))
                 aircraftSJDatas[key]["人员存活率"] = new List<string>();
-            aircraftSJDatas[key]["人员存活率"].Add(aircraftEntity.Success ? "1" : "0");
+            aircraftSJDatas[key]["人员存活率"].Add("0");
         }
     }
 

+ 9 - 3
SimulationServer/Entity/ZSJYMission.cs

@@ -78,18 +78,24 @@ public class ZSJYMission : Entity
             if (!aircraftSJDatas[key].ContainsKey("识别成功率"))
                 aircraftSJDatas[key]["识别成功率"] = new List<string>();
             aircraftSJDatas[key]["识别成功率"].Add("0");
+            if (!aircraftSJDatas[key].ContainsKey("人员数量"))
+                aircraftSJDatas[key]["人员数量"] = new List<string>();
+            aircraftSJDatas[key]["人员数量"].Add("0");
             if (!aircraftSJDatas[key].ContainsKey("任务准备时间"))
                 aircraftSJDatas[key]["任务准备时间"] = new List<string>();
             aircraftSJDatas[key]["任务准备时间"].Add(aircraftEntity.TaskReadyTime.ToString());
             if (!aircraftSJDatas[key].ContainsKey("平均搜索时间"))
                 aircraftSJDatas[key]["平均搜索时间"] = new List<string>();
-            aircraftSJDatas[key]["平均搜索时间"].Add("0");
+            aircraftSJDatas[key]["平均搜索时间"].Add(aircraftEntity.SearchTime.ToString("f4"));
+            if (!aircraftSJDatas[key].ContainsKey("平均救助时间"))
+                aircraftSJDatas[key]["平均救助时间"] = new List<string>();
+            aircraftSJDatas[key]["平均救助时间"].Add("0");
             if (!aircraftSJDatas[key].ContainsKey("总飞行时间"))
                 aircraftSJDatas[key]["总飞行时间"] = new List<string>();
-            aircraftSJDatas[key]["总飞行时间"].Add(aircraftEntity.TotalTime.ToString());
+            aircraftSJDatas[key]["总飞行时间"].Add(aircraftEntity.TotalTime.ToString("f4"));
             if (!aircraftSJDatas[key].ContainsKey("人员存活率"))
                 aircraftSJDatas[key]["人员存活率"] = new List<string>();
-            aircraftSJDatas[key]["人员存活率"].Add(aircraftEntity.Success ? "1" : "0");
+            aircraftSJDatas[key]["人员存活率"].Add("0");
         }
     }
 

+ 49 - 49
SimulationServer/EventHandler/ServerStartEventHandler.cs

@@ -115,28 +115,28 @@ public class ServerStartEventHandler : AEvent<ServerStart>
         //}
         //Console.WriteLine("taskConfig.seaSouJiuTasks.Count:" + taskConfig.seaSouJiuTasks.Count);
         //创建搜救
-        foreach (var seaSJTask in taskConfig.seaSouJiuTasks)
-        {
-            taskSys.missionCount++;
-            //Console.WriteLine("seaSJTask.missionInformation.MissionName:" + seaSJTask.missionInformation.MissionName);
-            //Console.WriteLine("TargetPointId:" + seaSJTask.TargetPointId);
-            //Console.WriteLine("SearchPayload:" + seaSJTask.SearchPayload);
-            //Console.WriteLine("SearchMode:" + seaSJTask.SearchMode);
-            //Console.WriteLine("RadarTransmitterPower:" + seaSJTask.RadarTransmitterPower);
-            //Console.WriteLine("仿真次数:" + editorConfig.runCounts);
-            Game.EventSystem.Publish(new CreateSeaSJTask
-            { EditorConfig = editorConfig, SeaSJTask = seaSJTask });
-            break;
-        }
-
-        //foreach (var landSXTask in taskConfig.LandSouXunTasks)
+        //foreach (var seaSJTask in taskConfig.seaSouJiuTasks)
         //{
         //    taskSys.missionCount++;
-        //    Game.EventSystem.Publish(new CreateLandSXTask
-        //    { EditorConfig = editorConfig, LandSXTask = landSXTask });
+        //    //Console.WriteLine("seaSJTask.missionInformation.MissionName:" + seaSJTask.missionInformation.MissionName);
+        //    //Console.WriteLine("TargetPointId:" + seaSJTask.TargetPointId);
+        //    //Console.WriteLine("SearchPayload:" + seaSJTask.SearchPayload);
+        //    //Console.WriteLine("SearchMode:" + seaSJTask.SearchMode);
+        //    //Console.WriteLine("RadarTransmitterPower:" + seaSJTask.RadarTransmitterPower);
+        //    //Console.WriteLine("仿真次数:" + editorConfig.runCounts);
+        //    Game.EventSystem.Publish(new CreateSeaSJTask
+        //    { EditorConfig = editorConfig, SeaSJTask = seaSJTask });
         //    //break;
         //}
 
+        foreach (var landSXTask in taskConfig.LandSouXunTasks)
+        {
+            taskSys.missionCount++;
+            Game.EventSystem.Publish(new CreateLandSXTask
+            { EditorConfig = editorConfig, LandSXTask = landSXTask });
+            //break;
+        }
+
         //创建空中吊运救援任务
         foreach (var KZDYTask in taskConfig.KZDYTasks)
         {
@@ -146,41 +146,41 @@ public class ServerStartEventHandler : AEvent<ServerStart>
             //break;
         }
 
-        ////创建空投空送任务
-        //foreach (var KTKSTask in taskConfig.KTKSTasks)
-        //{
-        //    taskSys.missionCount++;
-        //    Game.EventSystem.Publish(new CreateKTKSTask
-        //    { EditorConfig = editorConfig, KTKSTask = KTKSTask });
-        //    //break;
-        //}
+        //创建空投空送任务
+        foreach (var KTKSTask in taskConfig.KTKSTasks)
+        {
+            taskSys.missionCount++;
+            Game.EventSystem.Publish(new CreateKTKSTask
+            { EditorConfig = editorConfig, KTKSTask = KTKSTask });
+            //break;
+        }
 
-        ////创建着水救援任务
-        //foreach (var ZSJYTask in taskConfig.ZSJYTasks)
-        //{
-        //    taskSys.missionCount++;
-        //    Game.EventSystem.Publish(new CreateZSJYTask
-        //    { EditorConfig = editorConfig, ZSJYTask = ZSJYTask });
-        //    //break;
-        //}
+        //创建着水救援任务
+        foreach (var ZSJYTask in taskConfig.ZSJYTasks)
+        {
+            taskSys.missionCount++;
+            Game.EventSystem.Publish(new CreateZSJYTask
+            { EditorConfig = editorConfig, ZSJYTask = ZSJYTask });
+            //break;
+        }
 
-        ////创建机降救援任务
-        //foreach (var JJJYTask in taskConfig.JJJYTasks)
-        //{
-        //    taskSys.missionCount++;
-        //    Game.EventSystem.Publish(new CreateJJJYTask
-        //    { EditorConfig = editorConfig, JJJYTask = JJJYTask });
-        //    //break;
-        //}
+        //创建机降救援任务
+        foreach (var JJJYTask in taskConfig.JJJYTasks)
+        {
+            taskSys.missionCount++;
+            Game.EventSystem.Publish(new CreateJJJYTask
+            { EditorConfig = editorConfig, JJJYTask = JJJYTask });
+            //break;
+        }
 
-        ////创建索滑降救援任务
-        //foreach (var SHJTask in taskConfig.SHJTasks)
-        //{
-        //    taskSys.missionCount++;
-        //    Game.EventSystem.Publish(new CreateSHJTask
-        //    { EditorConfig = editorConfig, SHJTask = SHJTask });
-        //    //break;
-        //}
+        //创建索滑降救援任务
+        foreach (var SHJTask in taskConfig.SHJTasks)
+        {
+            taskSys.missionCount++;
+            Game.EventSystem.Publish(new CreateSHJTask
+            { EditorConfig = editorConfig, SHJTask = SHJTask });
+            //break;
+        }
 
         taskSys.ExecutionContext = editorConfig.runCounts;
         taskSys.Start();

TEMPAT SAMPAH
SimulationServer/bin/Debug/net7.0/KYFramework.dll


TEMPAT SAMPAH
SimulationServer/bin/Debug/net7.0/KYFramework.pdb


TEMPAT SAMPAH
SimulationServer/bin/Debug/net7.0/KYNetwork.dll


TEMPAT SAMPAH
SimulationServer/bin/Debug/net7.0/KYNetwork.pdb


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

@@ -1,5 +1,5 @@
 {
-    "仿真次数": 2,
+    "仿真次数":2,
     "想定信息": {
         "想定日期": "2024年6月4日",
         "想定时间": "00时00分00秒"

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

@@ -308,7 +308,7 @@
             ],
             "搜索方式": [
                 {
-                    "搜索方式": "扩展矩形搜索",
+                    "搜索方式": "扇形搜索", //扩展矩形搜索
                     "应用飞机编号": "3-2",
                     "搜索扫视宽度": 0.02
                 }

TEMPAT SAMPAH
SimulationServer/bin/Debug/net7.0/SimulationCommon.dll


TEMPAT SAMPAH
SimulationServer/bin/Debug/net7.0/SimulationCommon.pdb


TEMPAT SAMPAH
SimulationServer/bin/Debug/net7.0/SimulationServer.dll


TEMPAT SAMPAH
SimulationServer/bin/Debug/net7.0/SimulationServer.exe


TEMPAT SAMPAH
SimulationServer/bin/Debug/net7.0/SimulationServer.pdb


TEMPAT SAMPAH
SimulationServer/bin/Debug/net7.0/ThirdParty.dll


TEMPAT SAMPAH
SimulationServer/bin/Debug/net7.0/ThirdParty.pdb


TEMPAT SAMPAH
ThirdParty/bin/Debug/net7.0/ThirdParty.dll


TEMPAT SAMPAH
ThirdParty/bin/Debug/net7.0/ThirdParty.pdb