Ver código fonte

解决冲突

zansimple 5 dias atrás
pai
commit
9706f0e129

+ 2 - 26
Models/SimulationCommon/FXJHGenenrate.cs

@@ -99,7 +99,7 @@ namespace Model
             return 2 * GetCruisingFuelConsumptionRate(editor, height,t) - GetClimbFuelConsumptionRate(editor, height,t);
         }
 
-        public static double GetHoverFuelConsumptionRate(FlightPlanEditor editor, double height,  double t)
+        public static double GetHoverFuelConsumptionRate(FlightPlanEditor editor, double height,  double t = 0)
         {
             Fuel fuel = Util.GetFuel(editor.aircraftparameter.AircraftID, editor.aircraftparameter.AircraftSubType,
                 "悬停", t.ToString(), height.ToString(),
@@ -128,7 +128,7 @@ namespace Model
             return fuel.speed;
         }
 
-        public static double GetCruisingVelocity(FlightPlanEditor editor, double height,  double t)
+        public static double GetCruisingVelocity(FlightPlanEditor editor, double height,  double t = 0)
         {
             Fuel fuel = Util.GetFuel(editor.aircraftparameter.AircraftID, editor.aircraftparameter.AircraftSubType,
                 "平飞远航", t.ToString(), height.ToString(), editor.aircraftparameter.MaxTakeoffWeight.ToString());
@@ -819,30 +819,6 @@ namespace Model
         }
 
 
-        public static void CalculateTrueHeading(FlightPlanEditor editor, ref List<TurningPoint> turningPoints)
-        {
-            for (int i = 0; i < turningPoints.Count - 1; i++)
-            {
-                // 转换为弧度
-                double lat1Rad = turningPoints[i].TurningPointLatitude * Math.PI / 180;
-                double lon1Rad = turningPoints[i].TurningPointLongitude * Math.PI / 180;
-                double lat2Rad = turningPoints[i + 1].TurningPointLatitude * Math.PI / 180;
-                double lon2Rad = turningPoints[i + 1].TurningPointLongitude * Math.PI / 180;
-                double deltaLon = lon2Rad - lon1Rad;
-
-                double x = Math.Sin(deltaLon) * Math.Cos(lat2Rad);
-                double y = Math.Cos(lat1Rad) * Math.Sin(lat2Rad) - Math.Sin(lat1Rad) * Math.Cos(lat2Rad) * Math.Cos(deltaLon);
-
-                // 计算航向角
-                double headingRad = Math.Atan2(x, y);
-
-                // 转换为度并标准化
-                double headingDeg = headingRad * 180 / Math.PI;
-                headingDeg = (headingDeg + 360) % 360;
-                turningPoints[i].HeadingAngle = headingDeg;
-            }
-        }
-
 
         /// <summary>
         /// 巡护用

+ 3 - 1
Models/SimulationCommon/TaskConfig.cs

@@ -58,12 +58,14 @@ public class AircraftInfo
     [JsonProperty("应用飞机编号")]
     public string AircraftId;
     [JsonProperty("加油基地")]
-    public string RefuelingBase;
+    public string RefuelingBaseId;
     //[JsonProperty("加油基地编号")]
     //public string RefuelingBaseId;
     [JsonProperty("任务结束返回点")]
     public string TaskEndReturnPoint;
     
+    
+    
     //最大容量(kg)
     [JsonProperty("最大容量(kg)")]
     public double MaxCapacity;

+ 651 - 0
SimulationServer/Component/JYComponent.cs

@@ -0,0 +1,651 @@
+using KYFramework;
+using SimulationServer.Utils;
+
+namespace SimulationServer;
+
+public class JYComponent : Component
+{
+    // 救援任务列表
+    public List<MHRescueMission> MHRescueMissions;
+    public List<XHRescueMission> XHRescueMissions;
+    public List<ZCRescueMission> ZCRescueMissions;
+    public List<SeaSJRescueMission> SeaSJRescueMissions;
+    public List<LandSJRescueMission> LandSJRescueMissions;
+    public List<KZDYMission> KZDYMissions;
+    public List<KTKSMission> KTKSMissions;
+    public List<ZSJYMission> ZSJYMissions;
+    public List<JJJYMission> JJJYMissions;
+    public List<SHJMission> SHJMissions;
+
+    public SJAllTotalTaskPerformanceComponent SSJAllTotalTaskPerformance = new SJAllTotalTaskPerformanceComponent();
+    public Dictionary<string, Dictionary<string, List<string>>> alltotalReportSea = new();
+    public Dictionary<string, Dictionary<string, List<string>>> alltotalReportLand = new();
+    // <sheet,<指标名,值列表>>
+    public Dictionary<string, Dictionary<string, List<string>>> totalReportSea = new();
+    public Dictionary<string, Dictionary<string, List<string>>> totalReportLand = new();
+
+    private int currentSeaExecuteCount = 1;
+    private int currentLandExecuteCount = 1;
+    public int ExecutionContext = 0;
+
+    public int seaSuccessCount = 0;
+    public int landSuccessCount = 0;
+
+    public bool isSea;
+    public bool isLand;
+
+    public string date;
+
+    public int missionCount;
+
+    public void Start()
+    {
+        MHRescueMissions?.ForEach(r => r.Reset());
+        XHRescueMissions?.ForEach(r => r.Reset());
+
+        MHRescueMissions?.ForEach(r => r.Start());
+        XHRescueMissions?.ForEach(r => r.Start());
+        ZCRescueMissions?.ForEach(r => r.Start());
+
+        SeaSJRescueMissions?.ForEach(r => r.Start());
+        LandSJRescueMissions?.ForEach(r => r.Start());
+        KZDYMissions?.ForEach(r => r.Start());
+        KTKSMissions?.ForEach(r => r.Start());
+        ZSJYMissions?.ForEach(r => r.Start());
+        JJJYMissions?.ForEach(r => r.Start());
+        SHJMissions?.ForEach(r => r.Start());
+    }
+
+    public void SaveSeaSJ(Dictionary<string, Dictionary<string, string>> totalReport)
+    {
+        //把totalReport保存到alltotalReport
+        foreach (var kv in totalReport)
+        {
+            if (!alltotalReportSea.ContainsKey(kv.Key)) alltotalReportSea[kv.Key] = new Dictionary<string, List<string>>();
+
+
+            foreach (var kv2 in kv.Value)
+            {
+                if (!alltotalReportSea[kv.Key].ContainsKey(kv2.Key)) alltotalReportSea[kv.Key][kv2.Key] = new List<string>();
+
+                alltotalReportSea[kv.Key][kv2.Key].Add(kv2.Value);
+            }
+        }
+
+        if (currentSeaExecuteCount == ExecutionContext)
+        {
+            // 求一个平均值放到最后一位
+            foreach (var kv in alltotalReportSea)
+            {
+                foreach (var kv2 in kv.Value)
+                {
+                    var sum = 0f;
+                    foreach (var value in kv2.Value)
+                    {
+                        bool isfloat = float.TryParse(value, out float f);
+                        if (isfloat)
+                            sum += float.Parse(value);
+                        else
+                            sum = -1f;
+                    }
+                    if (sum != -1f)
+                        kv2.Value.Add((sum / kv2.Value.Count).ToString());
+                    else
+                        kv2.Value.Add("");
+                }
+            }
+        }
+
+        currentSeaExecuteCount++;
+    }
+
+    public void SaveLandSJ(Dictionary<string, Dictionary<string, string>> totalReport)
+    {
+        //把totalReport保存到alltotalReport
+        foreach (var kv in totalReport)
+        {
+            if (!alltotalReportLand.ContainsKey(kv.Key)) alltotalReportLand[kv.Key] = new Dictionary<string, List<string>>();
+
+
+            foreach (var kv2 in kv.Value)
+            {
+                if (!alltotalReportLand[kv.Key].ContainsKey(kv2.Key)) alltotalReportLand[kv.Key][kv2.Key] = new List<string>();
+
+                alltotalReportLand[kv.Key][kv2.Key].Add(kv2.Value);
+            }
+        }
+
+        if (currentLandExecuteCount == ExecutionContext)
+        {
+            // 求一个平均值放到最后一位
+            foreach (var kv in alltotalReportLand)
+            {
+                foreach (var kv2 in kv.Value)
+                {
+                    var sum = 0f;
+                    foreach (var value in kv2.Value)
+                    {
+                        bool isfloat = float.TryParse(value, out float f);
+                        if (isfloat)
+                            sum += float.Parse(value);
+                        else
+                            sum = -1f;
+                    }
+                    if (sum != -1f)
+                        kv2.Value.Add((sum / kv2.Value.Count).ToString());
+                    else
+                        kv2.Value.Add("");
+                }
+            }
+        }
+
+        currentLandExecuteCount++;
+    }
+
+    public void ReportAllSJSea()
+    {
+        //string data = DateTime.Now.ToString("yyyy-MM-dd");
+        string path = $"Reports/{date}";
+        if (!Directory.Exists(path)) Directory.CreateDirectory(path);
+        string totalPath = "";
+        if (isSea)
+            totalPath = $"{path}/{"海上搜救任务总体指标报告"}.xls";
+        if (isLand)
+            totalPath = $"{path}/{"陆上搜救任务总体指标报告"}.xls";
+        DataTableExtensions.SaveToExcel(totalPath, alltotalReportSea, true, true, (seaSuccessCount * 1f / ExecutionContext).ToString());
+
+
+        //string totalPath1 = $"{path}/{"搜救任务总体指标报告"}.xls";
+        //DataTableExtensions.SaveToExcel(totalPath1, totalReportSea);
+    }
+
+    public void ReportAllSJLand()
+    {
+        string data = DateTime.Now.ToString("yyyy-MM-dd");
+        string path = $"Reports/{date}";
+        if (!Directory.Exists(path)) Directory.CreateDirectory(path);
+
+        string totalPath = $"{path}/{"陆上搜寻任务总体指标报告"}.xls";
+        DataTableExtensions.SaveToExcel(totalPath, alltotalReportLand, true, true, (landSuccessCount * 1f / ExecutionContext).ToString());
+
+
+        //string totalPath1 = $"{path}/{"搜救任务总体指标报告"}.xls";
+        //DataTableExtensions.SaveToExcel(totalPath1, totalReportLand);
+    }
+
+    public void SaveTotalMHSea()
+    {
+        if (!totalReportSea.ContainsKey("总任务表现")) totalReportSea["总任务表现"] = new Dictionary<string, List<string>>();
+        if (!totalReportSea["总任务表现"].ContainsKey("任务成功率")) totalReportSea["总任务表现"]["任务成功率"] = new List<string>();
+        totalReportSea["总任务表现"]["任务成功率"].Add((seaSuccessCount * 1f / ExecutionContext).ToString());
+    }
+
+    public void SaveTotalMHLand()
+    {
+        if (!totalReportLand.ContainsKey("总任务表现")) totalReportLand["总任务表现"] = new Dictionary<string, List<string>>();
+        if (!totalReportLand["总任务表现"].ContainsKey("任务成功率")) totalReportLand["总任务表现"]["任务成功率"] = new List<string>();
+        totalReportLand["总任务表现"]["任务成功率"].Add((landSuccessCount * 1f / ExecutionContext).ToString());
+    }
+}
+
+[ObjectSystem]
+public class JYComponentAwakeSystem : AwakeSystem<JYComponent>
+{
+    public override void Awake(JYComponent self)
+    {
+        self.MHRescueMissions = new List<MHRescueMission>();
+        self.ZCRescueMissions = new List<ZCRescueMission>();
+        self.XHRescueMissions = new List<XHRescueMission>();
+        self.SeaSJRescueMissions = new List<SeaSJRescueMission>();
+        self.LandSJRescueMissions = new List<LandSJRescueMission>();
+        self.KZDYMissions = new List<KZDYMission>();
+        self.KTKSMissions = new List<KTKSMission>();
+        self.ZSJYMissions = new List<ZSJYMission>();
+        self.JJJYMissions = new List<JJJYMission>();
+        self.SHJMissions = new List<SHJMission>();
+    }
+}
+
+[ObjectSystem]
+public class JYComponentUpdateSystem : UpdateSystem<JYComponent>
+{
+    double 任务准备时间 = 0;
+    double 平均搜索时间 = 0;
+    double 总飞行时间 = 0;
+    double 人员存活率 = 0;
+    double 任务是否成功 = 0;
+    float 识别成功率 = 0f;
+    double 平均救助时间 = 0;
+    float 人员数量 = 0;
+    float 识别数量 = 0;
+    double 环境搜索覆盖面积 = 0;
+    double 海上搜索覆盖面积 = 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;
+
+    public override void Update(JYComponent self)
+    {
+        if (self.SeaSJRescueMissions.Count > 0)
+        {
+            if (self.SeaSJRescueMissions.All(m => m.IsOver) && !isSeaSJRescueMissionsOver)
+            {
+                self.missionCount -= self.SeaSJRescueMissions.Count;
+                isSeaSJRescueMissionsOver = true;
+                //for (int i = 0; i < self.ExecutionContext; i++)
+                //{
+                //    self.SSJAllTotalTaskPerformance.FillData(self.SeaSJRescueMissions);
+                //    var report = self.SSJAllTotalTaskPerformance.GetReport();
+                //    if (report["总任务表现"]["任务是否成功"] == "1")
+                //        self.seaSuccessCount++;
+                //    self.SaveSeaSJ(report);
+                //}
+                ////self.SaveTotalMHSea();
+                //self.ReportAllSJSea();
+                //self.SeaSJRescueMissions.Clear();
+            }
+        }
+
+        if (self.LandSJRescueMissions.Count > 0)
+        {
+            if (self.LandSJRescueMissions.All(m => m.IsOver) && !isLandSJRescueMissionsOver)
+            {
+                self.missionCount -= self.LandSJRescueMissions.Count;
+                isLandSJRescueMissionsOver = true;
+                //for (int i = 0; i < self.ExecutionContext; i++)
+                //{
+                //    self.SSJAllTotalTaskPerformance.FillData1(self.LandSJRescueMissions);
+                //    var report = self.SSJAllTotalTaskPerformance.GetReport1();
+                //    if (report["总任务表现"]["任务是否成功"] == "1")
+                //        self.landSuccessCount++;
+                //    self.SaveLandSJ(report);
+                //}
+                ////self.SaveTotalMHLand();
+                //self.ReportAllSJLand();
+                //self.LandSJRescueMissions.Clear();
+            }
+        }
+
+        if (self.KZDYMissions.Count > 0)
+        {
+            if (self.KZDYMissions.All(m => m.IsOver) && !isKZDYMissionsOver)
+            {
+                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++)
+            {
+                任务准备时间 = 0;
+                平均搜索时间 = 0;
+                总飞行时间 = 0;
+                人员存活率 = 0;
+                任务是否成功 = 0;
+                识别成功率 = 0f;
+                平均救助时间 = 0;
+                人员数量 = 0;
+                识别数量 = 0;
+                环境搜索覆盖面积 = 0;
+                海上搜索覆盖面积 = 0;
+
+                aircreftCount = 0;
+                searchCount = 0;
+                jzCount = 0;
+
+                foreach (var item in self.SeaSJRescueMissions)
+                {
+                    foreach (var item1 in item.equipReport)
+                    {
+                        识别成功率 += float.Parse(item1.Value["识别成功率"][i]);
+                        人员数量 += 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]);
+                        海上搜索覆盖面积 += 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("海上搜救" + 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]);
+                        识别数量 += 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]);
+                        环境搜索覆盖面积 += 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("路上搜寻" + item1.Key + "人员数量:" + item1.Value["人员数量"][i]);
+                        Console.WriteLine("路上搜寻" + item1.Key + "环境搜索覆盖面积:" + item1.Value["环境搜索覆盖面积"][i]);
+                        Console.WriteLine("===============================================================");
+                    }
+                }
+
+                foreach (var item in self.KZDYMissions)
+                {
+                    foreach (var item1 in item.aircraftSJDatas)
+                    {
+                        识别成功率 += float.Parse(item1.Value["识别成功率"][i]);
+                        人员数量 += 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("空中吊运" + 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]);
+                        识别数量 += 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("空投空送" + 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]);
+                        识别数量 += 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("着水救援" + 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]);
+                        识别数量 += 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("机降救援" + 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]);
+                        识别数量 += 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("索滑降" + item1.Key + "人员数量:" + item1.Value["人员数量"][i]);
+                        Console.WriteLine("===============================================================");
+                    }
+                }
+
+                SJAllTotalTaskPerformance allTotalTaskPerformance = new SJAllTotalTaskPerformance();
+
+                if (人员存活率 != 0)
+                    任务是否成功 = 1;
+
+                if (任务是否成功 == 1)
+                    self.seaSuccessCount++;
+
+                if (识别数量 != 0)
+                    allTotalTaskPerformance.识别成功率 = (识别成功率 / 识别数量).ToString();
+                else
+                    allTotalTaskPerformance.识别成功率 = "0";
+
+                allTotalTaskPerformance.任务准备时间 = 任务准备时间.ToString();
+
+                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.海上搜索覆盖面积 = 海上搜索覆盖面积.ToString();//"0.6".ToString();//"60%"
+
+                allTotalTaskPerformance.环境搜索覆盖面积 = 环境搜索覆盖面积.ToString();//"0.6".ToString();
+
+                allTotalTaskPerformance.任务是否成功 = 任务是否成功.ToString();
+
+
+                if (人员数量 != 0)
+                    allTotalTaskPerformance.人员存活率 = (人员存活率 / 人员数量).ToString();
+                else
+                    allTotalTaskPerformance.人员存活率 = "0";
+
+                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>>();
+
+                if (self.isSea)
+                {
+                    report["总任务表现"] = new Dictionary<string, string>
+                {
+                    { "识别成功率", allTotalTaskPerformance.识别成功率.ToString() },
+                    { "任务准备时间", allTotalTaskPerformance.任务准备时间.ToString() },
+                    { "平均搜索时间", allTotalTaskPerformance.平均搜索时间.ToString() },
+                    { "平均救助时间", allTotalTaskPerformance.平均救助时间.ToString() },
+                    { "总飞行时间", allTotalTaskPerformance.总飞行时间.ToString() },
+                    { "海上搜索覆盖面积", allTotalTaskPerformance.海上搜索覆盖面积.ToString() },
+                    { "任务是否成功", 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);
+            }
+            self.ReportAllSJSea();
+            isReport = true;
+
+            Console.WriteLine("所有任务执行完成");
+        }
+    }
+}

+ 1 - 1
SimulationServer/Component/SJAllTotalTaskPerformance.cs

@@ -48,7 +48,7 @@ public class SJAllTotalTaskPerformanceComponent
             //    人员存活率 += aircraft.Success ? 1 : 0;
             //    aircreftCount++;
             //}
-            foreach (var item in mhRescueMission.aircraftSJDatas)
+            foreach (var item in mhRescueMission.equipReport)
             {
                 识别成功率 += float.Parse(item.Value["识别成功率"][sIndex]);
                 人员数量 += float.Parse(item.Value["人员数量"][sIndex]);

+ 7 - 645
SimulationServer/Component/TaskComponent.cs

@@ -1,657 +1,19 @@
 using KYFramework;
-using Model;
-using OpenQA.Selenium.Remote;
-using SimulationCommon;
 using SimulationServer.Utils;
 
 namespace SimulationServer;
 
 public class TaskComponent : Component
 {
-    public static Weather Weather;
-    public static int Speed = 100;
-
-    // 救援任务列表
-    public List<MHRescueMission> MHRescueMissions;
-    public List<XHRescueMission> XHRescueMissions;
-    public List<ZCRescueMission> ZCRescueMissions;
-    public List<SeaSJRescueMission> SeaSJRescueMissions;
-    public List<LandSJRescueMission> LandSJRescueMissions;
-    public List<KZDYMission> KZDYMissions;
-    public List<KTKSMission> KTKSMissions;
-    public List<ZSJYMission> ZSJYMissions;
-    public List<JJJYMission> JJJYMissions;
-    public List<SHJMission> SHJMissions;
-
-    public SJAllTotalTaskPerformanceComponent SSJAllTotalTaskPerformance = new SJAllTotalTaskPerformanceComponent();
-    public Dictionary<string, Dictionary<string, List<string>>> alltotalReportSea = new();
-    public Dictionary<string, Dictionary<string, List<string>>> alltotalReportLand = new();
-    // <sheet,<指标名,值列表>>
-    public Dictionary<string, Dictionary<string, List<string>>> totalReportSea = new();
-    public Dictionary<string, Dictionary<string, List<string>>> totalReportLand = new();
-
-    private int currentSeaExecuteCount = 1;
-    private int currentLandExecuteCount = 1;
-    public int ExecutionContext = 0;
-
-    public int seaSuccessCount = 0;
-    public int landSuccessCount = 0;
-
-    public bool isSea;
-    public bool isLand;
-
-    public string date;
-
-    public int missionCount;
-
-    public void Start()
-    {
-        MHRescueMissions?.ForEach(r => r.Reset());
-        XHRescueMissions?.ForEach(r => r.Reset());
-
-        MHRescueMissions?.ForEach(r => r.Start());
-        XHRescueMissions?.ForEach(r => r.Start());
-        ZCRescueMissions?.ForEach(r => r.Start());
-
-        SeaSJRescueMissions?.ForEach(r => r.Start());
-        LandSJRescueMissions?.ForEach(r => r.Start());
-        KZDYMissions?.ForEach(r => r.Start());
-        KTKSMissions?.ForEach(r => r.Start());
-        ZSJYMissions?.ForEach(r => r.Start());
-        JJJYMissions?.ForEach(r => r.Start());
-        SHJMissions?.ForEach(r => r.Start());
-    }
-
-    public void SaveSeaSJ(Dictionary<string, Dictionary<string, string>> totalReport)
-    {
-        //把totalReport保存到alltotalReport
-        foreach (var kv in totalReport)
-        {
-            if (!alltotalReportSea.ContainsKey(kv.Key)) alltotalReportSea[kv.Key] = new Dictionary<string, List<string>>();
-
-
-            foreach (var kv2 in kv.Value)
-            {
-                if (!alltotalReportSea[kv.Key].ContainsKey(kv2.Key)) alltotalReportSea[kv.Key][kv2.Key] = new List<string>();
-
-                alltotalReportSea[kv.Key][kv2.Key].Add(kv2.Value);
-            }
-        }
-
-        if (currentSeaExecuteCount == ExecutionContext)
-        {
-            // 求一个平均值放到最后一位
-            foreach (var kv in alltotalReportSea)
-            {
-                foreach (var kv2 in kv.Value)
-                {
-                    var sum = 0f;
-                    foreach (var value in kv2.Value)
-                    {
-                        bool isfloat = float.TryParse(value, out float f);
-                        if (isfloat)
-                            sum += float.Parse(value);
-                        else
-                            sum = -1f;
-                    }
-                    if (sum != -1f)
-                        kv2.Value.Add((sum / kv2.Value.Count).ToString());
-                    else
-                        kv2.Value.Add("");
-                }
-            }
-        }
-
-        currentSeaExecuteCount++;
-    }
-
-    public void SaveLandSJ(Dictionary<string, Dictionary<string, string>> totalReport)
-    {
-        //把totalReport保存到alltotalReport
-        foreach (var kv in totalReport)
-        {
-            if (!alltotalReportLand.ContainsKey(kv.Key)) alltotalReportLand[kv.Key] = new Dictionary<string, List<string>>();
-
-
-            foreach (var kv2 in kv.Value)
-            {
-                if (!alltotalReportLand[kv.Key].ContainsKey(kv2.Key)) alltotalReportLand[kv.Key][kv2.Key] = new List<string>();
-
-                alltotalReportLand[kv.Key][kv2.Key].Add(kv2.Value);
-            }
-        }
-
-        if (currentLandExecuteCount == ExecutionContext)
-        {
-            // 求一个平均值放到最后一位
-            foreach (var kv in alltotalReportLand)
-            {
-                foreach (var kv2 in kv.Value)
-                {
-                    var sum = 0f;
-                    foreach (var value in kv2.Value)
-                    {
-                        bool isfloat = float.TryParse(value, out float f);
-                        if (isfloat)
-                            sum += float.Parse(value);
-                        else
-                            sum = -1f;
-                    }
-                    if (sum != -1f)
-                        kv2.Value.Add((sum / kv2.Value.Count).ToString());
-                    else
-                        kv2.Value.Add("");
-                }
-            }
-        }
-
-        currentLandExecuteCount++;
-    }
-
-    public void ReportAllSJSea()
-    {
-        //string data = DateTime.Now.ToString("yyyy-MM-dd");
-        string path = $"Reports/{date}";
-        if (!Directory.Exists(path)) Directory.CreateDirectory(path);
-        string totalPath = "";
-        if (isSea)
-            totalPath = $"{path}/{"海上搜救任务总体指标报告"}.xls";
-        if (isLand)
-            totalPath = $"{path}/{"陆上搜救任务总体指标报告"}.xls";
-        DataTableExtensions.SaveToExcel(totalPath, alltotalReportSea, true, true, (seaSuccessCount * 1f / ExecutionContext).ToString());
-
-
-        //string totalPath1 = $"{path}/{"搜救任务总体指标报告"}.xls";
-        //DataTableExtensions.SaveToExcel(totalPath1, totalReportSea);
-    }
-
-    public void ReportAllSJLand()
-    {
-        string data = DateTime.Now.ToString("yyyy-MM-dd");
-        string path = $"Reports/{date}";
-        if (!Directory.Exists(path)) Directory.CreateDirectory(path);
-
-        string totalPath = $"{path}/{"陆上搜寻任务总体指标报告"}.xls";
-        DataTableExtensions.SaveToExcel(totalPath, alltotalReportLand, true, true, (landSuccessCount * 1f / ExecutionContext).ToString());
-
-
-        //string totalPath1 = $"{path}/{"搜救任务总体指标报告"}.xls";
-        //DataTableExtensions.SaveToExcel(totalPath1, totalReportLand);
-    }
-
-    public void SaveTotalMHSea()
-    {
-        if (!totalReportSea.ContainsKey("总任务表现")) totalReportSea["总任务表现"] = new Dictionary<string, List<string>>();
-        if (!totalReportSea["总任务表现"].ContainsKey("任务成功率")) totalReportSea["总任务表现"]["任务成功率"] = new List<string>();
-        totalReportSea["总任务表现"]["任务成功率"].Add((seaSuccessCount * 1f / ExecutionContext).ToString());
-    }
-
-    public void SaveTotalMHLand()
-    {
-        if (!totalReportLand.ContainsKey("总任务表现")) totalReportLand["总任务表现"] = new Dictionary<string, List<string>>();
-        if (!totalReportLand["总任务表现"].ContainsKey("任务成功率")) totalReportLand["总任务表现"]["任务成功率"] = new List<string>();
-        totalReportLand["总任务表现"]["任务成功率"].Add((landSuccessCount * 1f / ExecutionContext).ToString());
-    }
-}
-
-[ObjectSystem]
-public class TaskComponentAwakeSystem : AwakeSystem<TaskComponent>
-{
-    public override void Awake(TaskComponent self)
-    {
-        self.MHRescueMissions = new List<MHRescueMission>();
-        self.ZCRescueMissions = new List<ZCRescueMission>();
-        self.XHRescueMissions = new List<XHRescueMission>();
-        self.SeaSJRescueMissions = new List<SeaSJRescueMission>();
-        self.LandSJRescueMissions = new List<LandSJRescueMission>();
-        self.KZDYMissions = new List<KZDYMission>();
-        self.KTKSMissions = new List<KTKSMission>();
-        self.ZSJYMissions = new List<ZSJYMission>();
-        self.JJJYMissions = new List<JJJYMission>();
-        self.SHJMissions = new List<SHJMission>();
-    }
-}
-
-[ObjectSystem]
-public class TaskComponentUpdateSystem : UpdateSystem<TaskComponent>
-{
-    double 任务准备时间 = 0;
-    double 平均搜索时间 = 0;
-    double 总飞行时间 = 0;
-    double 人员存活率 = 0;
-    double 任务是否成功 = 0;
-    float 识别成功率 = 0f;
-    double 平均救助时间 = 0;
-    float 人员数量 = 0;
-    float 识别数量 = 0;
-    double 环境搜索覆盖面积 = 0;
-    double 海上搜索覆盖面积 = 0;
-    double aircreftCount = 0;
 
-    double searchCount = 0;
-    double jzCount = 0;
+    public static bool SimulationStart = false;
+    public static DateTime TaskTime;
 
-    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;
+    // 根据任务id 排列任务执行顺序
+    public List<BaseMission> Missions = new List<BaseMission>();
 
-    public bool isReport;
+    public List<List<AircraftEntity>> asyncAircrafts = new List<List<AircraftEntity>>();
 
-    public override void Update(TaskComponent self)
-    {
-        if (self.SeaSJRescueMissions.Count > 0)
-        {
-            if (self.SeaSJRescueMissions.All(m => m.IsOver) && !isSeaSJRescueMissionsOver)
-            {
-                self.missionCount -= self.SeaSJRescueMissions.Count;
-                isSeaSJRescueMissionsOver = true;
-                //for (int i = 0; i < self.ExecutionContext; i++)
-                //{
-                //    self.SSJAllTotalTaskPerformance.FillData(self.SeaSJRescueMissions);
-                //    var report = self.SSJAllTotalTaskPerformance.GetReport();
-                //    if (report["总任务表现"]["任务是否成功"] == "1")
-                //        self.seaSuccessCount++;
-                //    self.SaveSeaSJ(report);
-                //}
-                ////self.SaveTotalMHSea();
-                //self.ReportAllSJSea();
-                //self.SeaSJRescueMissions.Clear();
-            }
-        }
-
-        if (self.LandSJRescueMissions.Count > 0)
-        {
-            if (self.LandSJRescueMissions.All(m => m.IsOver) && !isLandSJRescueMissionsOver)
-            {
-                self.missionCount -= self.LandSJRescueMissions.Count;
-                isLandSJRescueMissionsOver = true;
-                //for (int i = 0; i < self.ExecutionContext; i++)
-                //{
-                //    self.SSJAllTotalTaskPerformance.FillData1(self.LandSJRescueMissions);
-                //    var report = self.SSJAllTotalTaskPerformance.GetReport1();
-                //    if (report["总任务表现"]["任务是否成功"] == "1")
-                //        self.landSuccessCount++;
-                //    self.SaveLandSJ(report);
-                //}
-                ////self.SaveTotalMHLand();
-                //self.ReportAllSJLand();
-                //self.LandSJRescueMissions.Clear();
-            }
-        }
-
-        if (self.KZDYMissions.Count > 0)
-        {
-            if (self.KZDYMissions.All(m => m.IsOver) && !isKZDYMissionsOver)
-            {
-                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++)
-            {
-                任务准备时间 = 0;
-                平均搜索时间 = 0;
-                总飞行时间 = 0;
-                人员存活率 = 0;
-                任务是否成功 = 0;
-                识别成功率 = 0f;
-                平均救助时间 = 0;
-                人员数量 = 0;
-                识别数量 = 0;
-                环境搜索覆盖面积 = 0;
-                海上搜索覆盖面积 = 0;
-
-                aircreftCount = 0;
-                searchCount = 0;
-                jzCount = 0;
-
-                foreach (var item in self.SeaSJRescueMissions)
-                {
-                    foreach (var item1 in item.aircraftSJDatas)
-                    {
-                        识别成功率 += float.Parse(item1.Value["识别成功率"][i]);
-                        人员数量 += 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]);
-                        海上搜索覆盖面积 += 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("海上搜救" + 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]);
-                        识别数量 += 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]);
-                        环境搜索覆盖面积 += 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("路上搜寻" + item1.Key + "人员数量:" + item1.Value["人员数量"][i]);
-                        Console.WriteLine("路上搜寻" + item1.Key + "环境搜索覆盖面积:" + item1.Value["环境搜索覆盖面积"][i]);
-                        Console.WriteLine("===============================================================");
-                    }
-                }
-
-                foreach (var item in self.KZDYMissions)
-                {
-                    foreach (var item1 in item.aircraftSJDatas)
-                    {
-                        识别成功率 += float.Parse(item1.Value["识别成功率"][i]);
-                        人员数量 += 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("空中吊运" + 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]);
-                        识别数量 += 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("空投空送" + 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]);
-                        识别数量 += 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("着水救援" + 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]);
-                        识别数量 += 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("机降救援" + 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]);
-                        识别数量 += 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("索滑降" + item1.Key + "人员数量:" + item1.Value["人员数量"][i]);
-                        Console.WriteLine("===============================================================");
-                    }
-                }
-
-                SJAllTotalTaskPerformance allTotalTaskPerformance = new SJAllTotalTaskPerformance();
-
-                if (人员存活率 != 0)
-                    任务是否成功 = 1;
-
-                if (任务是否成功 == 1)
-                    self.seaSuccessCount++;
-
-                if (识别数量 != 0)
-                    allTotalTaskPerformance.识别成功率 = (识别成功率 / 识别数量).ToString();
-                else
-                    allTotalTaskPerformance.识别成功率 = "0";
-
-                allTotalTaskPerformance.任务准备时间 = 任务准备时间.ToString();
-
-                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.海上搜索覆盖面积 = 海上搜索覆盖面积.ToString();//"0.6".ToString();//"60%"
-
-                allTotalTaskPerformance.环境搜索覆盖面积 = 环境搜索覆盖面积.ToString();//"0.6".ToString();
-
-                allTotalTaskPerformance.任务是否成功 = 任务是否成功.ToString();
-
-
-                if (人员数量 != 0)
-                    allTotalTaskPerformance.人员存活率 = (人员存活率 / 人员数量).ToString();
-                else
-                    allTotalTaskPerformance.人员存活率 = "0";
-
-                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>>();
-
-                if (self.isSea)
-                {
-                    report["总任务表现"] = new Dictionary<string, string>
-                {
-                    { "识别成功率", allTotalTaskPerformance.识别成功率.ToString() },
-                    { "任务准备时间", allTotalTaskPerformance.任务准备时间.ToString() },
-                    { "平均搜索时间", allTotalTaskPerformance.平均搜索时间.ToString() },
-                    { "平均救助时间", allTotalTaskPerformance.平均救助时间.ToString() },
-                    { "总飞行时间", allTotalTaskPerformance.总飞行时间.ToString() },
-                    { "海上搜索覆盖面积", allTotalTaskPerformance.海上搜索覆盖面积.ToString() },
-                    { "任务是否成功", 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);
-            }
-            self.ReportAllSJSea();
-            isReport = true;
-
-            Console.WriteLine("所有任务执行完成");
-        }
-    }
+    public static Weather Weather;
+    public static int Speed = 100;
 }

+ 0 - 75
SimulationServer/Entity/AircraftEntity.cs

@@ -1,75 +0,0 @@
-using KYFramework;
-using Model;
-using SimulationServer.Utils;
-
-namespace SimulationServer;
-
-public class AircraftEntity : Entity
-{
-    public string TaskName { get; set; } // 任务名称
-    public string Name { get; set; } // 飞机名称
-    public string AircraftId { get; set; } // 飞机编号
-    public string AircraftIndex { get; set; } // 飞机索引
-    public string Type { get; set; } // 飞机类型
-    public AircraftDB Db { get; set; } // 飞机数据库参数
-    public FlightPlanEditor? FlightPlanEditor { get; set; } // 飞行计划编辑器
-    public string Airport { get; set; } // 飞机机场
-    public double T { get; set; } // 飞机飞到火场需要的时间
-    public double TotalFuelConsumption { get; set; } // 总燃油消耗
-    public double FirstTime { get; set; } //单机入场时间
-    public double TaskResponseTime { get; set; } = 600; // 任务响应时间
-    public double EffMisTime { get; set; } // 单机有效任务时长
-
-    //搜索时间
-    public double SearchTime { get; set; }
-
-    public double TotalTime { get; set; }
-    public double TaskReadyTime { get; set; } // 任务准备时间
-    public bool SyncOver { get; set; } // 是否同步完成
-
-    public double[] Velocitys = new double[5] { 220, 220, 220, 110, 0 }; // 速度
-
-    public double[] FuelConsumptions = new double[5] { 2800, 2800, 2800, 1000, 132 }; // 燃油消耗
-
-    public List<TurningPoint> TurningPoints = new List<TurningPoint>(); // 航路点
-
-    public void Awake()
-    {
-        Db = Util.GetAircraftDefine(FlightPlanEditor.aircraftparameter.AircraftType, FlightPlanEditor.aircraftparameter.AircraftSubType, FlightPlanEditor.aircraftparameter.AircraftID);
-
-        if (Db.f_zdqfzl != null)
-            FlightPlanEditor.aircraftparameter.MaxTakeoffWeight = double.Parse(Db.f_zdqfzl.ToString());
-        else
-            FlightPlanEditor.aircraftparameter.MaxTakeoffWeight = 8000;
-        if (Db.f_zdzkl != null)
-            FlightPlanEditor.aircraftparameter.MaxPassengerNumber = double.Parse(Db.f_zdzkl.ToString());
-        else
-            FlightPlanEditor.aircraftparameter.MaxPassengerNumber = 20;
-    }
-
-    public virtual void Reset()
-    {
-        T = 0;
-        EffMisTime = 0;
-        FirstTime = 0;
-        TotalFuelConsumption = 0;
-        TaskResponseTime = 0;
-        TurningPoints = new List<TurningPoint>();
-    }
-
-    public virtual void Start()
-    {
-
-    }
-
-
-    public virtual void Update(double time)
-    {
-
-    }
-
-    public virtual void End()
-    {
-
-    }
-}

+ 0 - 0
SimulationServer/Entity/AircraftDY.cs → SimulationServer/Entity/Aircrafts/AircraftDY.cs


+ 0 - 0
SimulationServer/Entity/AircraftJJ.cs → SimulationServer/Entity/Aircrafts/AircraftJJ.cs


+ 0 - 0
SimulationServer/Entity/AircraftKTKS.cs → SimulationServer/Entity/Aircrafts/AircraftKTKS.cs


+ 3 - 2
SimulationServer/Entity/Aircrafts/AircraftLandSJ.cs

@@ -187,6 +187,7 @@ public class AircraftLandSJ : AircraftEntity
             double finalProbability = 1.0;
             Random random = new Random();
             int fireIndex = -1; // 记录发现火点的位置
+            int pointIndex = -1; // 记录发现目标点的位置
             //IsOver = true;
             do
             {
@@ -204,7 +205,7 @@ public class AircraftLandSJ : AircraftEntity
                     Log.Info($"+++++++++++搜寻结束 TurningPoints Count: {TurningPoints.Count} 下次结束的时间  {time}++++++++++++++++");
                 }
 
-                (currentLocation, _) =
+                (currentLocation, _, pointIndex) =
                     FXJHGenerate.GetAllCurrentLocation(TurningPoints, temptime); // 获取飞机当前位置
                 double3 aricraftPoint = new double3(currentLocation.CurrentLon, currentLocation.CurrentLat,
                     currentLocation.CurrentHei);
@@ -267,7 +268,7 @@ public class AircraftLandSJ : AircraftEntity
                 }
 
                 temptime += 10;
-                if (temptime >= taskContent.missionInformation.TaskEndConditions.TaskTime)
+                if (temptime >= double.Parse(taskContent.missionInformation.TaskEndConditions.EndValue))
                 {
                     //IsOver = true;
                     isEndWhile = true;

+ 3 - 2
SimulationServer/Entity/Aircrafts/AircraftSJ.cs

@@ -302,6 +302,7 @@ public class AircraftSJ : AircraftEntity
             double finalProbability = 1.0;
             Random random = new Random();
             int fireIndex = -1; // 记录发现火点的位置
+            int pointIndex = -1; // 记录发现目标点的位置
             double windSpeed = 0;
             do
             {
@@ -319,7 +320,7 @@ public class AircraftSJ : AircraftEntity
                 }
 
 
-                (currentLocation, _) =
+                (currentLocation, _,pointIndex) =
                     FXJHGenerate.GetAllCurrentLocation(TurningPoints, temptime); // 获取飞机当前位置
                 double3 aricraftPoint = new double3(currentLocation.CurrentLon, currentLocation.CurrentLat,
                     currentLocation.CurrentHei);
@@ -384,7 +385,7 @@ public class AircraftSJ : AircraftEntity
                 {
                     isseePerson = false;
                 }
-                if (temptime >= taskContent.missionInformation.TaskEndConditions.TaskTime)
+                if (temptime >= double.Parse(taskContent.missionInformation.TaskEndConditions.EndValue))
                 {
                     //IsOver = true;
                     isEndWhile = true;

+ 0 - 0
SimulationServer/Entity/AircraftZS.cs → SimulationServer/Entity/Aircrafts/AircraftZS.cs


+ 34 - 47
SimulationServer/Entity/KZDYMission.cs

@@ -5,37 +5,24 @@ using static System.Runtime.InteropServices.JavaScript.JSType;
 
 namespace SimulationServer;
 
-public class KZDYMission : Entity
+public class KZDYMission : BaseMission
 {
-    public string MissionId; // 任务ID
-    public bool Success; // 任务是否成功
-    public List<AircraftDY> aircrafts = new List<AircraftDY>();
-
-    public bool IsRunning;
     public double SimulationTime;
-
-    public Dictionary<string, Dictionary<string, Dictionary<string, List<string>>>> singleReport = new();
-
-    public Dictionary<string, Dictionary<string, List<string>>> aircraftSJDatas = new();
-
-    public bool IsOver = false;
-
     private int currentExecuteCount = 1;
     public int ExecutionContext = 0;
 
-    public string date;
 
     public void Start()
     {
         IsRunning = true;
-        aircrafts.ForEach(a => a.Start());
+        Aircrafts.ForEach(a => a.Start());
         Log.Info($"{MissionId} 任务开始!");
     }
 
     public void Reset()
     {
         SimulationTime = 0;
-        aircrafts?.ForEach(a => a.Reset());
+        Aircrafts?.ForEach(a => a.Reset());
     }
 
     public void EndMission()
@@ -70,43 +57,43 @@ public class KZDYMission : Entity
 
     public void SaveAircraftSJDatas()
     {
-        foreach (AircraftDY aircraftEntity in aircrafts)
+        foreach (AircraftDY aircraftEntity in Aircrafts)
         {
             string key = aircraftEntity.AircraftId;
-            if (!aircraftSJDatas.ContainsKey(key))
+            if (!totalReport.ContainsKey(key))
             {
-                aircraftSJDatas[key] = new Dictionary<string, List<string>>();
+                totalReport[key] = new Dictionary<string, List<string>>();
             }
-            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.targetCount.ToString());
-            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(aircraftEntity.resulttime.ToString());
-            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 ? aircraftEntity.targetCount.ToString() : "0");
+            if (!totalReport[key].ContainsKey("识别成功率"))
+                totalReport[key]["识别成功率"] = new List<string>();
+            totalReport[key]["识别成功率"].Add("0");
+            if (!totalReport[key].ContainsKey("识别数量"))
+                totalReport[key]["识别数量"] = new List<string>();
+            totalReport[key]["识别数量"].Add("0");
+            if (!totalReport[key].ContainsKey("人员数量"))
+                totalReport[key]["人员数量"] = new List<string>();
+            totalReport[key]["人员数量"].Add(aircraftEntity.targetCount.ToString());
+            if (!totalReport[key].ContainsKey("任务准备时间"))
+                totalReport[key]["任务准备时间"] = new List<string>();
+            totalReport[key]["任务准备时间"].Add(aircraftEntity.TaskReadyTime.ToString());
+            if (!totalReport[key].ContainsKey("平均搜索时间"))
+                totalReport[key]["平均搜索时间"] = new List<string>();
+            totalReport[key]["平均搜索时间"].Add("0");
+            if (!totalReport[key].ContainsKey("平均救助时间"))
+                totalReport[key]["平均救助时间"] = new List<string>();
+            totalReport[key]["平均救助时间"].Add(aircraftEntity.resulttime.ToString());
+            if (!totalReport[key].ContainsKey("总飞行时间"))
+                totalReport[key]["总飞行时间"] = new List<string>();
+            totalReport[key]["总飞行时间"].Add(aircraftEntity.TotalTime.ToString());
+            if (!totalReport[key].ContainsKey("人员存活率"))
+                totalReport[key]["人员存活率"] = new List<string>();
+            totalReport[key]["人员存活率"].Add(aircraftEntity.Success ? aircraftEntity.targetCount.ToString() : "0");
         }
     }
 
     public void SaveSJ()
     {
-        foreach (AircraftDY aircraftEntity in aircrafts)
+        foreach (AircraftDY aircraftEntity in Aircrafts)
         {
             var staticCapacity = aircraftEntity.GetComponent<SJStaticCapacityComponent>();
 
@@ -161,7 +148,7 @@ public class KZDYMission : Entity
 
     public void ReportSJ()
     {
-        //string data = DateTime.Now.ToString("yyyy-MM-dd");
+        string date = DateTime.Now.ToString("yyyy-MM-dd");
         string path = $"Reports/{date}/{MissionId}";
         if (!Directory.Exists(path)) Directory.CreateDirectory(path);
         foreach (var kv in singleReport)
@@ -180,9 +167,9 @@ public class KZDYMissionUpdateSystem : UpdateSystem<KZDYMission>
     {
         if (!self.IsRunning) return;
 
-        self.aircrafts?.ForEach(a => a.Update(self.SimulationTime));
+        self.Aircrafts?.ForEach(a => a.Update(self.SimulationTime));
 
-        if (self.aircrafts.All(a => a.IsOver))
+        if (self.Aircrafts.All(a => a.IsOver))
         {
             self.EndMission();
         }

+ 34 - 44
SimulationServer/Entity/JJJYMission.cs → SimulationServer/Entity/Missions/JJJYMission.cs

@@ -4,21 +4,11 @@ using SimulationServer.Utils;
 
 namespace SimulationServer;
 
-public class JJJYMission : Entity
+public class JJJYMission : BaseMission
 {
-    public string MissionId; // 任务ID
-    public bool Success; // 任务是否成功
-    public List<AircraftJJ> aircrafts = new List<AircraftJJ>();
-
-    public bool IsRunning;
+  
     public double SimulationTime;
 
-    public Dictionary<string, Dictionary<string, Dictionary<string, List<string>>>> singleReport = new();
-
-    public Dictionary<string, Dictionary<string, List<string>>> aircraftSJDatas = new();
-
-    public bool IsOver = false;
-
     private int currentExecuteCount = 1;
     public int ExecutionContext = 0;
 
@@ -26,14 +16,14 @@ public class JJJYMission : Entity
     public void Start()
     {
         IsRunning = true;
-        aircrafts.ForEach(a => a.Start());
+        Aircrafts.ForEach(a => a.Start());
         Log.Info($"{MissionId} 任务开始!");
     }
 
     public void Reset()
     {
         SimulationTime = 0;
-        aircrafts?.ForEach(a => a.Reset());
+        Aircrafts?.ForEach(a => a.Reset());
     }
 
     public void EndMission()
@@ -68,43 +58,43 @@ public class JJJYMission : Entity
 
     public void SaveAircraftSJDatas()
     {
-        foreach (AircraftJJ aircraftEntity in aircrafts)
+        foreach (AircraftJJ aircraftEntity in Aircrafts)
         {
             string key = aircraftEntity.AircraftId;
-            if (!aircraftSJDatas.ContainsKey(key))
+            if (!totalReport.ContainsKey(key))
             {
-                aircraftSJDatas[key] = new Dictionary<string, List<string>>();
+                totalReport[key] = new Dictionary<string, List<string>>();
             }
-            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("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("0");
+            if (!totalReport[key].ContainsKey("识别成功率"))
+                totalReport[key]["识别成功率"] = new List<string>();
+            totalReport[key]["识别成功率"].Add("0");
+            if (!totalReport[key].ContainsKey("识别数量"))
+                totalReport[key]["识别数量"] = new List<string>();
+            totalReport[key]["识别数量"].Add("0");
+            if (!totalReport[key].ContainsKey("人员数量"))
+                totalReport[key]["人员数量"] = new List<string>();
+            totalReport[key]["人员数量"].Add("0");
+            if (!totalReport[key].ContainsKey("任务准备时间"))
+                totalReport[key]["任务准备时间"] = new List<string>();
+            totalReport[key]["任务准备时间"].Add(aircraftEntity.TaskReadyTime.ToString());
+            if (!totalReport[key].ContainsKey("平均搜索时间"))
+                totalReport[key]["平均搜索时间"] = new List<string>();
+            totalReport[key]["平均搜索时间"].Add("0");
+            if (!totalReport[key].ContainsKey("平均救助时间"))
+                totalReport[key]["平均救助时间"] = new List<string>();
+            totalReport[key]["平均救助时间"].Add("0");
+            if (!totalReport[key].ContainsKey("总飞行时间"))
+                totalReport[key]["总飞行时间"] = new List<string>();
+            totalReport[key]["总飞行时间"].Add(aircraftEntity.TotalTime.ToString());
+            if (!totalReport[key].ContainsKey("人员存活率"))
+                totalReport[key]["人员存活率"] = new List<string>();
+            totalReport[key]["人员存活率"].Add("0");
         }
     }
 
     public void SaveSJ()
     {
-        foreach (AircraftJJ aircraftEntity in aircrafts)
+        foreach (AircraftJJ aircraftEntity in Aircrafts)
         {
             var staticCapacity = aircraftEntity.GetComponent<SJStaticCapacityComponent>();
 
@@ -177,9 +167,9 @@ public class JJJYMissionUpdateSystem : UpdateSystem<JJJYMission>
     {
         if (!self.IsRunning) return;
 
-        self.aircrafts?.ForEach(a => a.Update(self.SimulationTime));
+        self.Aircrafts?.ForEach(a => a.Update(self.SimulationTime));
 
-        if (self.aircrafts.All(a => a.IsOver))
+        if (self.Aircrafts.All(a => a.IsOver))
         {
             self.EndMission();
         }

+ 33 - 44
SimulationServer/Entity/KTKSMission.cs → SimulationServer/Entity/Missions/KTKSMission.cs

@@ -5,21 +5,10 @@ using static System.Runtime.InteropServices.JavaScript.JSType;
 
 namespace SimulationServer;
 
-public class KTKSMission : Entity
+public class KTKSMission : BaseMission
 {
-    public string MissionId; // 任务ID
-    public bool Success; // 任务是否成功
-    public List<AircraftKTKS> aircrafts = new List<AircraftKTKS>();
-
-    public bool IsRunning;
     public double SimulationTime;
 
-    public Dictionary<string, Dictionary<string, Dictionary<string, List<string>>>> singleReport = new();
-
-    public Dictionary<string, Dictionary<string, List<string>>> aircraftSJDatas = new();
-
-    public bool IsOver = false;
-
     private int currentExecuteCount = 1;
     public int ExecutionContext = 0;
 
@@ -27,14 +16,14 @@ public class KTKSMission : Entity
     public void Start()
     {
         IsRunning = true;
-        aircrafts.ForEach(a => a.Start());
+        Aircrafts.ForEach(a => a.Start());
         Log.Info($"{MissionId} 任务开始!");
     }
 
     public void Reset()
     {
         SimulationTime = 0;
-        aircrafts?.ForEach(a => a.Reset());
+        Aircrafts?.ForEach(a => a.Reset());
     }
 
     public void EndMission()
@@ -69,43 +58,43 @@ public class KTKSMission : Entity
 
     public void SaveAircraftSJDatas()
     {
-        foreach (AircraftKTKS aircraftEntity in aircrafts)
+        foreach (AircraftKTKS aircraftEntity in Aircrafts)
         {
             string key = aircraftEntity.AircraftId;
-            if (!aircraftSJDatas.ContainsKey(key))
+            if (!totalReport.ContainsKey(key))
             {
-                aircraftSJDatas[key] = new Dictionary<string, List<string>>();
+                totalReport[key] = new Dictionary<string, List<string>>();
             }
-            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("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("0");
+            if (!totalReport[key].ContainsKey("识别成功率"))
+                totalReport[key]["识别成功率"] = new List<string>();
+            totalReport[key]["识别成功率"].Add("0");
+            if (!totalReport[key].ContainsKey("识别数量"))
+                totalReport[key]["识别数量"] = new List<string>();
+            totalReport[key]["识别数量"].Add("0");
+            if (!totalReport[key].ContainsKey("人员数量"))
+                totalReport[key]["人员数量"] = new List<string>();
+            totalReport[key]["人员数量"].Add("0");
+            if (!totalReport[key].ContainsKey("任务准备时间"))
+                totalReport[key]["任务准备时间"] = new List<string>();
+            totalReport[key]["任务准备时间"].Add(aircraftEntity.TaskReadyTime.ToString());
+            if (!totalReport[key].ContainsKey("平均搜索时间"))
+                totalReport[key]["平均搜索时间"] = new List<string>();
+            totalReport[key]["平均搜索时间"].Add("0");
+            if (!totalReport[key].ContainsKey("平均救助时间"))
+                totalReport[key]["平均救助时间"] = new List<string>();
+            totalReport[key]["平均救助时间"].Add("0");
+            if (!totalReport[key].ContainsKey("总飞行时间"))
+                totalReport[key]["总飞行时间"] = new List<string>();
+            totalReport[key]["总飞行时间"].Add(aircraftEntity.TotalTime.ToString());
+            if (!totalReport[key].ContainsKey("人员存活率"))
+                totalReport[key]["人员存活率"] = new List<string>();
+            totalReport[key]["人员存活率"].Add("0");
         }
     }
 
     public void SaveSJ()
     {
-        foreach (AircraftKTKS aircraftEntity in aircrafts)
+        foreach (AircraftKTKS aircraftEntity in Aircrafts)
         {
             var staticCapacity = aircraftEntity.GetComponent<SJStaticCapacityComponent>();
 
@@ -179,9 +168,9 @@ public class KTKSMissionUpdateSystem : UpdateSystem<KTKSMission>
     {
         if (!self.IsRunning) return;
 
-        self.aircrafts?.ForEach(a => a.Update(self.SimulationTime));
+        self.Aircrafts?.ForEach(a => a.Update(self.SimulationTime));
 
-        if (self.aircrafts.All(a => a.IsOver))
+        if (self.Aircrafts.All(a => a.IsOver))
         {
             self.EndMission();
         }

+ 37 - 52
SimulationServer/Entity/Missions/LandSJRescueMission.cs

@@ -4,23 +4,11 @@ using SimulationServer.Utils;
 
 namespace SimulationServer;
 
-public class LandSJRescueMission : Entity
+public class LandSJRescueMission : BaseMission
 {
-    public string MissionId; // 任务ID
-    public bool Success; // 任务是否成功
-    public List<AircraftLandSJ> aircrafts = new List<AircraftLandSJ>();
-
-    public bool IsRunning;
+  
     public double SimulationTime;
 
-    public Dictionary<string, Dictionary<string, Dictionary<string, List<string>>>> singleReport = new();
-    // 灭火的 整体能力
-    // <sheet,<指标名,值列表>>
-    public Dictionary<string, Dictionary<string, List<string>>> totalReport = new();
-
-    public Dictionary<string, Dictionary<string, List<string>>> aircraftSJDatas = new();
-
-    public bool IsOver = false;
 
     private int currentExecuteCount = 1;
     public int ExecutionContext = 0;
@@ -29,14 +17,14 @@ public class LandSJRescueMission : Entity
     public void Start()
     {
         IsRunning = true;
-        aircrafts.ForEach(a => a.Start());
+        Aircrafts.ForEach(a => a.Start());
         Log.Info($"{MissionId} 任务开始!");
     }
 
     public void Reset()
     {
         SimulationTime = 0;
-        aircrafts?.ForEach(a => a.Reset());
+        Aircrafts?.ForEach(a => a.Reset());
     }
 
     public void EndMission()
@@ -56,7 +44,6 @@ public class LandSJRescueMission : Entity
         if (currentExecuteCount < ExecutionContext)
         {
             SaveSJ();
-            //SaveTotalMH();
             SaveAircraftSJDatas();
         }
 
@@ -64,9 +51,7 @@ public class LandSJRescueMission : Entity
         {
             SaveSJ();
             SaveAircraftSJDatas();
-            //SaveTotalMH();
             ReportSJ();
-            //this.StartAsyncMH();
             IsOver = true;
             return;
         }
@@ -83,46 +68,46 @@ public class LandSJRescueMission : Entity
 
     public void SaveAircraftSJDatas()
     {
-        foreach (AircraftLandSJ aircraftEntity in aircrafts)
+        foreach (AircraftLandSJ aircraftEntity in Aircrafts)
         {
             string key = aircraftEntity.AircraftId;
-            if (!aircraftSJDatas.ContainsKey(key))
+            if (!totalReport.ContainsKey(key))
             {
-                aircraftSJDatas[key] = new Dictionary<string, List<string>>();
+                totalReport[key] = new Dictionary<string, List<string>>();
             }
-            if (!aircraftSJDatas[key].ContainsKey("识别成功率"))
-                aircraftSJDatas[key]["识别成功率"] = new List<string>();
-            aircraftSJDatas[key]["识别成功率"].Add(aircraftEntity.isseePerson ? aircraftEntity.sbCount.ToString() : "0");
-            if (!aircraftSJDatas[key].ContainsKey("识别数量"))
-                aircraftSJDatas[key]["识别数量"] = new List<string>();
-            aircraftSJDatas[key]["识别数量"].Add(aircraftEntity.sbCount.ToString());
-            if (!aircraftSJDatas[key].ContainsKey("人员数量"))
-                aircraftSJDatas[key]["人员数量"] = new List<string>();
-            aircraftSJDatas[key]["人员数量"].Add(aircraftEntity.targetCount.ToString());
-            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(aircraftEntity.SearchTime.ToString());
-            if (!aircraftSJDatas[key].ContainsKey("平均救助时间"))
-                aircraftSJDatas[key]["平均救助时间"] = new List<string>();
-            aircraftSJDatas[key]["平均救助时间"].Add(aircraftEntity.resulttime.ToString());
-            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 ? aircraftEntity.targetCount.ToString() : "0");
-            if (!aircraftSJDatas[key].ContainsKey("环境搜索覆盖面积"))
-                aircraftSJDatas[key]["环境搜索覆盖面积"] = new List<string>();
-            aircraftSJDatas[key]["环境搜索覆盖面积"].Add(aircraftEntity.landArea.ToString());
+            if (!totalReport[key].ContainsKey("识别成功率"))
+                totalReport[key]["识别成功率"] = new List<string>();
+            totalReport[key]["识别成功率"].Add(aircraftEntity.isseePerson ? aircraftEntity.sbCount.ToString() : "0");
+            if (!totalReport[key].ContainsKey("识别数量"))
+                totalReport[key]["识别数量"] = new List<string>();
+            totalReport[key]["识别数量"].Add(aircraftEntity.sbCount.ToString());
+            if (!totalReport[key].ContainsKey("人员数量"))
+                totalReport[key]["人员数量"] = new List<string>();
+            totalReport[key]["人员数量"].Add(aircraftEntity.targetCount.ToString());
+            if (!totalReport[key].ContainsKey("任务准备时间"))
+                totalReport[key]["任务准备时间"] = new List<string>();
+            totalReport[key]["任务准备时间"].Add(aircraftEntity.TaskReadyTime.ToString());
+            if (!totalReport[key].ContainsKey("平均搜索时间"))
+                totalReport[key]["平均搜索时间"] = new List<string>();
+            totalReport[key]["平均搜索时间"].Add(aircraftEntity.SearchTime.ToString());
+            if (!totalReport[key].ContainsKey("平均救助时间"))
+                totalReport[key]["平均救助时间"] = new List<string>();
+            totalReport[key]["平均救助时间"].Add(aircraftEntity.resulttime.ToString());
+            if (!totalReport[key].ContainsKey("总飞行时间"))
+                totalReport[key]["总飞行时间"] = new List<string>();
+            totalReport[key]["总飞行时间"].Add(aircraftEntity.TotalTime.ToString());
+            if (!totalReport[key].ContainsKey("人员存活率"))
+                totalReport[key]["人员存活率"] = new List<string>();
+            totalReport[key]["人员存活率"].Add(aircraftEntity.Success ? aircraftEntity.targetCount.ToString() : "0");
+            if (!totalReport[key].ContainsKey("环境搜索覆盖面积"))
+                totalReport[key]["环境搜索覆盖面积"] = new List<string>();
+            totalReport[key]["环境搜索覆盖面积"].Add(aircraftEntity.landArea.ToString());
         }
     }
 
     public void SaveSJ()
     {
-        foreach (AircraftLandSJ aircraftEntity in aircrafts)
+        foreach (AircraftLandSJ aircraftEntity in Aircrafts)
         {
             var staticCapacity = aircraftEntity.GetComponent<SJStaticCapacityComponent>();
 
@@ -233,9 +218,9 @@ public class LandSJRescueMissionUpdateSystem : UpdateSystem<LandSJRescueMission>
     {
         if (!self.IsRunning) return;
 
-        self.aircrafts?.ForEach(a => a.Update(self.SimulationTime));
+        self.Aircrafts?.ForEach(a => a.Update(self.SimulationTime));
 
-        if (self.aircrafts.All(a => a.IsOver))
+        if (self.Aircrafts.All(a => a.IsOver))
         {
             self.EndMission();
         }

+ 37 - 93
SimulationServer/Entity/Missions/SeaSJRescueMission.cs

@@ -4,39 +4,25 @@ using SimulationServer.Utils;
 
 namespace SimulationServer;
 
-public class SeaSJRescueMission : Entity
+public class SeaSJRescueMission : BaseMission
 {
-    public string MissionId; // 任务ID
-    public bool Success; // 任务是否成功
-    public List<AircraftSJ> aircrafts = new List<AircraftSJ>();
 
-    public bool IsRunning;
     public double SimulationTime;
 
-    public Dictionary<string, Dictionary<string, Dictionary<string, List<string>>>> singleReport = new();
-    // 灭火的 整体能力
-    // <sheet,<指标名,值列表>>
-    public Dictionary<string, Dictionary<string, List<string>>> totalReport = new();
-
-    public Dictionary<string, Dictionary<string, List<string>>> aircraftSJDatas = new();
-
-    public bool IsOver = false;
-
     private int currentExecuteCount = 1;
     public int ExecutionContext = 0;
 
-    public string date;
     public void Start()
     {
         IsRunning = true;
-        aircrafts.ForEach(a => a.Start());
+        Aircrafts.ForEach(a => a.Start());
         Log.Info($"{MissionId} 任务开始!");
     }
 
     public void Reset()
     {
         SimulationTime = 0;
-        aircrafts?.ForEach(a => a.Reset());
+        Aircrafts?.ForEach(a => a.Reset());
     }
 
     public void EndMission()
@@ -44,10 +30,6 @@ public class SeaSJRescueMission : Entity
         IsRunning = false;
         Log.Info($"{MissionId} 任务结束!");
 
-        //SaveSJ();
-        //SaveTotalMH();
-        //ReportSJ();
-
         if (currentExecuteCount > ExecutionContext)
         {
             return;
@@ -56,7 +38,6 @@ public class SeaSJRescueMission : Entity
         if (currentExecuteCount < ExecutionContext)
         {
             SaveSJ();
-            //SaveTotalMH();
             SaveAircraftSJDatas();
         }
 
@@ -64,9 +45,7 @@ public class SeaSJRescueMission : Entity
         {
             SaveSJ();
             SaveAircraftSJDatas();
-            //SaveTotalMH();
             ReportSJ();
-            //this.StartAsyncMH();
             IsOver = true;
             return;
         }
@@ -83,46 +62,46 @@ public class SeaSJRescueMission : Entity
 
     public void SaveAircraftSJDatas()
     {
-        foreach (AircraftSJ aircraftEntity in aircrafts)
+        foreach (AircraftSJ aircraftEntity in Aircrafts)
         {
             string key = aircraftEntity.AircraftId;
-            if (!aircraftSJDatas.ContainsKey(key))
+            if (!totalReport.ContainsKey(key))
             {
-                aircraftSJDatas[key] = new Dictionary<string, List<string>>();
+                totalReport[key] = new Dictionary<string, List<string>>();
             }
-            if (!aircraftSJDatas[key].ContainsKey("识别成功率"))
-                aircraftSJDatas[key]["识别成功率"] = new List<string>();
-            aircraftSJDatas[key]["识别成功率"].Add(aircraftEntity.isseePerson ? aircraftEntity.sbCount.ToString() : "0");
-            if (!aircraftSJDatas[key].ContainsKey("识别数量"))
-                aircraftSJDatas[key]["识别数量"] = new List<string>();
-            aircraftSJDatas[key]["识别数量"].Add(aircraftEntity.sbCount.ToString());
-            if (!aircraftSJDatas[key].ContainsKey("人员数量"))
-                aircraftSJDatas[key]["人员数量"] = new List<string>();
-            aircraftSJDatas[key]["人员数量"].Add(aircraftEntity.targetCount.ToString());
-            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(aircraftEntity.SearchTime.ToString("f4"));
-            if (!aircraftSJDatas[key].ContainsKey("平均救助时间"))
-                aircraftSJDatas[key]["平均救助时间"] = new List<string>();
-            aircraftSJDatas[key]["平均救助时间"].Add(aircraftEntity.resulttime.ToString());
-            if (!aircraftSJDatas[key].ContainsKey("总飞行时间"))
-                aircraftSJDatas[key]["总飞行时间"] = new List<string>();
-            aircraftSJDatas[key]["总飞行时间"].Add(aircraftEntity.TotalTime.ToString("f4"));
-            if (!aircraftSJDatas[key].ContainsKey("人员存活率"))
-                aircraftSJDatas[key]["人员存活率"] = new List<string>();
-            aircraftSJDatas[key]["人员存活率"].Add(aircraftEntity.Success ? aircraftEntity.targetCount.ToString() : "0");
-            if (!aircraftSJDatas[key].ContainsKey("海上搜索覆盖面积"))
-                aircraftSJDatas[key]["海上搜索覆盖面积"] = new List<string>();
-            aircraftSJDatas[key]["海上搜索覆盖面积"].Add(aircraftEntity.seaArea.ToString());
+            if (!totalReport[key].ContainsKey("识别成功率"))
+                totalReport[key]["识别成功率"] = new List<string>();
+            totalReport[key]["识别成功率"].Add(aircraftEntity.isseePerson ? aircraftEntity.sbCount.ToString() : "0");
+            if (!totalReport[key].ContainsKey("识别数量"))
+                totalReport[key]["识别数量"] = new List<string>();
+            totalReport[key]["识别数量"].Add(aircraftEntity.sbCount.ToString());
+            if (!totalReport[key].ContainsKey("人员数量"))
+                totalReport[key]["人员数量"] = new List<string>();
+            totalReport[key]["人员数量"].Add(aircraftEntity.targetCount.ToString());
+            if (!totalReport[key].ContainsKey("任务准备时间"))
+                totalReport[key]["任务准备时间"] = new List<string>();
+            totalReport[key]["任务准备时间"].Add(aircraftEntity.TaskReadyTime.ToString());
+            if (!totalReport[key].ContainsKey("平均搜索时间"))
+                totalReport[key]["平均搜索时间"] = new List<string>();
+            totalReport[key]["平均搜索时间"].Add(aircraftEntity.SearchTime.ToString("f4"));
+            if (!totalReport[key].ContainsKey("平均救助时间"))
+                totalReport[key]["平均救助时间"] = new List<string>();
+            totalReport[key]["平均救助时间"].Add(aircraftEntity.resulttime.ToString());
+            if (!totalReport[key].ContainsKey("总飞行时间"))
+                totalReport[key]["总飞行时间"] = new List<string>();
+            totalReport[key]["总飞行时间"].Add(aircraftEntity.TotalTime.ToString("f4"));
+            if (!totalReport[key].ContainsKey("人员存活率"))
+                totalReport[key]["人员存活率"] = new List<string>();
+            totalReport[key]["人员存活率"].Add(aircraftEntity.Success ? aircraftEntity.targetCount.ToString() : "0");
+            if (!totalReport[key].ContainsKey("海上搜索覆盖面积"))
+                totalReport[key]["海上搜索覆盖面积"] = new List<string>();
+            totalReport[key]["海上搜索覆盖面积"].Add(aircraftEntity.seaArea.ToString());
         }
     }
 
     public void SaveSJ()
     {
-        foreach (AircraftSJ aircraftEntity in aircrafts)
+        foreach (AircraftSJ aircraftEntity in Aircrafts)
         {
             var staticCapacity = aircraftEntity.GetComponent<SJStaticCapacityComponent>();
 
@@ -175,26 +154,10 @@ public class SeaSJRescueMission : Entity
         }
     }
 
-    public void SaveTotalMH()
-    {
-        var totalPerformance = GetComponent<SJTotalTaskPerformanceComponent>();
-        totalPerformance.FillData();
-        var totalPerformanceReport = totalPerformance.GetReport();
-        foreach (var kv in totalPerformanceReport)
-        {
-            if (!totalReport.ContainsKey(kv.Key)) totalReport[kv.Key] = new Dictionary<string, List<string>>();
-
-            foreach (var kv2 in kv.Value)
-            {
-                if (!totalReport[kv.Key].ContainsKey(kv2.Key)) totalReport[kv.Key][kv2.Key] = new List<string>();
-                totalReport[kv.Key][kv2.Key].Add(kv2.Value);
-            }
-        }
-    }
 
     public void ReportSJ()
     {
-        //string data = DateTime.Now.ToString("yyyy-MM-dd");
+        string date = DateTime.Now.ToString("yyyy-MM-dd");
         string path = $"Reports/{date}/{MissionId}";
         if (!Directory.Exists(path)) Directory.CreateDirectory(path);
         foreach (var kv in singleReport)
@@ -203,25 +166,6 @@ public class SeaSJRescueMission : Entity
             DataTableExtensions.SaveToExcel(filePath, kv.Value, true);
         }
 
-        //foreach (KeyValuePair<string, Dictionary<string, List<string>>> keyValuePair in totalReport)
-        //{
-        //    foreach (KeyValuePair<string, List<string>> kv in keyValuePair.Value)
-        //    {
-        //        List<string> values = kv.Value;
-        //        double sum = 0;
-        //        foreach (string value in values)
-        //        {
-        //            if (double.TryParse(value, out double num))
-        //            {
-        //                sum += num;
-        //            }
-        //        }
-        //        double average = sum / values.Count;
-        //        values.Add(average.ToString("#0.00"));
-        //    }
-        //}
-        //string totalPath = $"{path}/{"搜救任务总体指标报告"}.xls";
-        //DataTableExtensions.SaveToExcel(totalPath, totalReport, true);
     }
 }
 
@@ -233,9 +177,9 @@ public class SeaSJRescueMissionUpdateSystem : UpdateSystem<SeaSJRescueMission>
     {
         if (!self.IsRunning) return;
 
-        self.aircrafts?.ForEach(a => a.Update(self.SimulationTime));
+        self.Aircrafts?.ForEach(a => a.Update(self.SimulationTime));
 
-        if (self.aircrafts.All(a => a.IsOver))
+        if (self.Aircrafts.All(a => a.IsOver))
         {
             self.EndMission();
         }

+ 34 - 44
SimulationServer/Entity/ZSJYMission.cs

@@ -4,21 +4,11 @@ using SimulationServer.Utils;
 
 namespace SimulationServer;
 
-public class ZSJYMission : Entity
+public class ZSJYMission : BaseMission
 {
-    public string MissionId; // 任务ID
-    public bool Success; // 任务是否成功
-    public List<AircraftZS> aircrafts = new List<AircraftZS>();
-
-    public bool IsRunning;
+  
     public double SimulationTime;
 
-    public Dictionary<string, Dictionary<string, Dictionary<string, List<string>>>> singleReport = new();
-
-    public Dictionary<string, Dictionary<string, List<string>>> aircraftSJDatas = new();
-
-    public bool IsOver = false;
-
     private int currentExecuteCount = 1;
     public int ExecutionContext = 0;
 
@@ -26,14 +16,14 @@ public class ZSJYMission : Entity
     public void Start()
     {
         IsRunning = true;
-        aircrafts.ForEach(a => a.Start());
+        Aircrafts.ForEach(a => a.Start());
         Log.Info($"{MissionId} 任务开始!");
     }
 
     public void Reset()
     {
         SimulationTime = 0;
-        aircrafts?.ForEach(a => a.Reset());
+        Aircrafts?.ForEach(a => a.Reset());
     }
 
     public void EndMission()
@@ -68,43 +58,43 @@ public class ZSJYMission : Entity
 
     public void SaveAircraftSJDatas()
     {
-        foreach (AircraftZS aircraftEntity in aircrafts)
+        foreach (AircraftZS aircraftEntity in Aircrafts)
         {
             string key = aircraftEntity.AircraftId;
-            if (!aircraftSJDatas.ContainsKey(key))
+            if (!totalReport.ContainsKey(key))
             {
-                aircraftSJDatas[key] = new Dictionary<string, List<string>>();
+                totalReport[key] = new Dictionary<string, List<string>>();
             }
-            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("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("f4"));
-            if (!aircraftSJDatas[key].ContainsKey("人员存活率"))
-                aircraftSJDatas[key]["人员存活率"] = new List<string>();
-            aircraftSJDatas[key]["人员存活率"].Add("0");
+            if (!totalReport[key].ContainsKey("识别成功率"))
+                totalReport[key]["识别成功率"] = new List<string>();
+            totalReport[key]["识别成功率"].Add("0");
+            if (!totalReport[key].ContainsKey("识别数量"))
+                totalReport[key]["识别数量"] = new List<string>();
+            totalReport[key]["识别数量"].Add("0");
+            if (!totalReport[key].ContainsKey("人员数量"))
+                totalReport[key]["人员数量"] = new List<string>();
+            totalReport[key]["人员数量"].Add("0");
+            if (!totalReport[key].ContainsKey("任务准备时间"))
+                totalReport[key]["任务准备时间"] = new List<string>();
+            totalReport[key]["任务准备时间"].Add(aircraftEntity.TaskReadyTime.ToString());
+            if (!totalReport[key].ContainsKey("平均搜索时间"))
+                totalReport[key]["平均搜索时间"] = new List<string>();
+            totalReport[key]["平均搜索时间"].Add("0");
+            if (!totalReport[key].ContainsKey("平均救助时间"))
+                totalReport[key]["平均救助时间"] = new List<string>();
+            totalReport[key]["平均救助时间"].Add("0");
+            if (!totalReport[key].ContainsKey("总飞行时间"))
+                totalReport[key]["总飞行时间"] = new List<string>();
+            totalReport[key]["总飞行时间"].Add(aircraftEntity.TotalTime.ToString("f4"));
+            if (!totalReport[key].ContainsKey("人员存活率"))
+                totalReport[key]["人员存活率"] = new List<string>();
+            totalReport[key]["人员存活率"].Add("0");
         }
     }
 
     public void SaveSJ()
     {
-        foreach (AircraftZS aircraftEntity in aircrafts)
+        foreach (AircraftZS aircraftEntity in Aircrafts)
         {
             var staticCapacity = aircraftEntity.GetComponent<SJStaticCapacityComponent>();
 
@@ -178,9 +168,9 @@ public class ZSJYMissionUpdateSystem : UpdateSystem<ZSJYMission>
     {
         if (!self.IsRunning) return;
 
-        self.aircrafts?.ForEach(a => a.Update(self.SimulationTime));
+        self.Aircrafts?.ForEach(a => a.Update(self.SimulationTime));
 
-        if (self.aircrafts.All(a => a.IsOver))
+        if (self.Aircrafts.All(a => a.IsOver))
         {
             self.EndMission();
         }

+ 13 - 13
SimulationServer/EventHandler/CreateSHJTaskEventHandler.cs

@@ -16,13 +16,13 @@ public class CreateSHJTaskEventHandler : AEvent<CreateSHJTask>
         mission.AddComponent<TotalEconomicalComponent>();
         mission.AddComponent<TotalTaskPerformanceComponent>();
         mission.AddComponent<EquipmentComponent>();
-        mission.MissionId = a.ShjTaskConfig.missionInformation.MissionId;
+        mission.MissionId = a.SHJTask.missionInformation.MissionId;
         taskSys.AddMission(mission);
-        mission.MissionInformation = a.ShjTaskConfig.missionInformation;
-        Log.Info("创建任务:" + a.ShjTaskConfig.missionInformation.MissionName);
+        mission.MissionInformation = a.SHJTask.missionInformation;
+        Log.Info("创建任务:" + a.SHJTask.missionInformation.MissionName);
        
         
-        foreach (AircraftInfo aircraftInfo in a.ShjTaskConfig.aircraftInfos)
+        foreach (AircraftInfo aircraftInfo in a.SHJTask.aircraftInfos)
         {
             var aircraftParameter = a.EditorConfig.aircraftParameters.Find(
                 a => a.AircraftID == aircraftInfo.AircraftType);
@@ -31,33 +31,33 @@ public class CreateSHJTaskEventHandler : AEvent<CreateSHJTask>
             var fuelBase = a.EditorConfig.bases.Find(b => b.BaseName == aircraftInfo.RefuelingBaseId);
             var endBase = a.EditorConfig.bases.Find(b => b.BaseName == aircraftInfo.TaskEndReturnPoint);
             MissionPoint missionPoint = null;
-            foreach (var item in a.ShjTaskConfig.SHJParameters)
+            foreach (var item in a.SHJTask.SHJParameters)
             {
                 if (aircraftParameter.Id == item.AircraftId)
-                    missionPoint = item.MissionPoints[0];
+                    missionPoint = item.MissionPoints_SHJ[0];
             }
-            var date = DateTime.Parse(a.ShjTaskConfig.missionInformation.StartDate + " " + a.ShjTaskConfig.missionInformation.StartTime).ToString("yyyy-MM-dd HH");
+            var date = DateTime.Parse(a.SHJTask.missionInformation.StartDate + " " + a.SHJTask.missionInformation.StartTime).ToString("yyyy-MM-dd HH");
             var temp = Util.GetTemperature(missionPoint.MissionPointLongitude, missionPoint.MissionPointLatitude, date);
             
             
             //创建飞行计划编辑器
             var flightPlanEditor = FlightPlanEditor.Create(aircraftParameter, a.EditorConfig.cityWeather, originBase,fuelBase, endBase,missionPoint, null);
         
-            AircraftSHJ aircraftSHJ = ComponentFactory.Create<AircraftSHJ, FlightPlanEditor, SHJTask>(flightPlanEditor, a.ShjTaskConfig);
+            AircraftSHJ aircraftSHJ = ComponentFactory.Create<AircraftSHJ, FlightPlanEditor, SHJTask>(flightPlanEditor, a.SHJTask);
             aircraftSHJ.AircraftId = aircraftInfo.AircraftId;
             aircraftSHJ.mission = mission;
             aircraftSHJ.Temperature = temp;
-            aircraftSHJ.startTime = a.ShjTaskConfig.missionInformation.StartDate + " " + a.ShjTaskConfig.missionInformation.StartTime;
-            aircraftSHJ.TaskName = a.ShjTaskConfig.missionInformation.MissionName;
-            aircraftSHJ.TaskReadyTime =  a.ShjTaskConfig.missionInformation.TakeoffPreparationTime;
-            foreach (var item in a.ShjTaskConfig.SHJParameters)
+            aircraftSHJ.startTime = a.SHJTask.missionInformation.StartDate + " " + a.SHJTask.missionInformation.StartTime;
+            aircraftSHJ.TaskName = a.SHJTask.missionInformation.MissionName;
+            aircraftSHJ.TaskReadyTime =  a.SHJTask.missionInformation.TakeoffPreparationTime;
+            foreach (var item in a.SHJTask.SHJParameters)
             {
                 if (aircraftSHJ.AircraftId == item.AircraftId)
                 {
                     aircraftSHJ.SHJParameter = item;
                 }
             }
-            aircraftSHJ.Mission = mission;
+            //aircraftSHJ.Mission = mission;
             mission.Aircrafts.Add(aircraftSHJ);
             Log.Info($"创建机型 : {flightPlanEditor.aircraftparameter.AircraftID}");
         }

+ 79 - 76
SimulationServer/EventHandler/CreateTaskEventHandler.cs

@@ -155,8 +155,7 @@ public class CreateSeaSJEventHandler : AEvent<CreateSeaSJTask>
     {
         var taskSys = Game.Scene.GetComponent<TaskComponent>();
         SeaSJRescueMission mission = ComponentFactory.Create<SeaSJRescueMission>();
-        mission.date = taskSys.date;
-        taskSys.SeaSJRescueMissions.Add(mission);
+        taskSys.Missions.Add(mission);
         mission.MissionId = $"海上搜索救援任务 {config.SeaSJTask.missionInformation.MissionName}";
         mission.ExecutionContext = config.EditorConfig.runCounts;
         mission.AddComponent<SJTotalTaskPerformanceComponent>();
@@ -209,8 +208,7 @@ public class CreateLandSJEventHandler : AEvent<CreateLandSXTask>
     {
         var taskSys = Game.Scene.GetComponent<TaskComponent>();
         LandSJRescueMission mission = ComponentFactory.Create<LandSJRescueMission>();
-        mission.date = taskSys.date;
-        taskSys.LandSJRescueMissions.Add(mission);
+        taskSys.Missions.Add(mission);
         mission.MissionId = $"陆上搜寻救援任务 {config.LandSXTask.missionInformation.MissionName}";
         mission.ExecutionContext = config.EditorConfig.runCounts;
         //mission.AddComponent<SJTotalTaskPerformanceComponent>();
@@ -267,8 +265,7 @@ public class CreateLandSJEventHandler : AEvent<CreateLandSXTask>
         {
             var taskSys = Game.Scene.GetComponent<TaskComponent>();
             KZDYMission mission = ComponentFactory.Create<KZDYMission>();
-            mission.date = taskSys.date;
-            taskSys.KZDYMissions.Add(mission);
+            taskSys.Missions.Add(mission);
             mission.MissionId = $"空中吊运救援任务 {config.KZDYTask.missionInformation.MissionName}";
             mission.ExecutionContext = config.EditorConfig.runCounts;
             //mission.AddComponent<SJTotalTaskPerformanceComponent>();
@@ -279,15 +276,17 @@ public class CreateLandSJEventHandler : AEvent<CreateLandSXTask>
                     a => a.AircraftID == config.KZDYTask.aircraftInfos[i].AircraftType);
                 //基地
                 var originBase = config.EditorConfig.bases.Find(b => b.BaseId == aircraftParameter.AirportId);
-
+                var fuelBase = config.EditorConfig.bases.Find(b => b.BaseName == config.KZDYTask.aircraftInfos[i].RefuelingBaseId);
+                var endBase = config.EditorConfig.bases.Find(b => b.BaseName == config.KZDYTask.aircraftInfos[i].TaskEndReturnPoint);
+                
                 TargetPoint targetPoint = config.EditorConfig.targetPoints.Find(t => t.TargetPointId == config.KZDYTask.missionInformation.TargetPointId);
                 //创建飞行计划编辑器
-                var flightPlanEditor = FlightPlanEditor.Create(aircraftParameter, config.EditorConfig.cityWeather, originBase, new TargetPoint[] { targetPoint });
+                var flightPlanEditor = FlightPlanEditor.Create(aircraftParameter, config.EditorConfig.cityWeather, originBase,fuelBase, endBase, new TargetPoint[] { targetPoint });
 
                 AircraftDY aircraft = ComponentFactory.Create<AircraftDY, FlightPlanEditor>(flightPlanEditor);
                 aircraft.Name = config.KZDYTask.aircraftInfos[i].AircraftType;
                 aircraft.TaskReadyTime = config.KZDYTask.missionInformation.TakeoffPreparationTime;
-                mission.aircrafts.Add(aircraft);
+                mission.Aircrafts.Add(aircraft);
                 aircraft.taskContent = config.KZDYTask;
                 aircraft.AircraftId = config.KZDYTask.aircraftInfos[i].AircraftId;
                 aircraft.MissionEndPoint = new MissionEndPoint
@@ -320,8 +319,7 @@ public class CreateLandSJEventHandler : AEvent<CreateLandSXTask>
         {
             var taskSys = Game.Scene.GetComponent<TaskComponent>();
             KTKSMission mission = ComponentFactory.Create<KTKSMission>();
-            mission.date = taskSys.date;
-            taskSys.KTKSMissions.Add(mission);
+            taskSys.Missions.Add(mission);
             mission.MissionId = $"空投空送任务 {config.KTKSTask.missionInformation.MissionName}";
             mission.ExecutionContext = config.EditorConfig.runCounts;
             //mission.AddComponent<SJTotalTaskPerformanceComponent>();
@@ -332,15 +330,17 @@ public class CreateLandSJEventHandler : AEvent<CreateLandSXTask>
                     a => a.AircraftID == config.KTKSTask.aircraftInfos[i].AircraftType);
                 //基地
                 var originBase = config.EditorConfig.bases.Find(b => b.BaseId == aircraftParameter.AirportId);
-
+                var fuelBase = config.EditorConfig.bases.Find(b => b.BaseName == config.KTKSTask.aircraftInfos[i].RefuelingBaseId);
+                var endBase = config.EditorConfig.bases.Find(b => b.BaseName == config.KTKSTask.aircraftInfos[i].TaskEndReturnPoint);
+                
                 TargetPoint targetPoint = config.EditorConfig.targetPoints.Find(t => t.TargetPointId == config.KTKSTask.missionInformation.TargetPointId);
                 //创建飞行计划编辑器
-                var flightPlanEditor = FlightPlanEditor.Create(aircraftParameter, config.EditorConfig.cityWeather, originBase, new TargetPoint[] { targetPoint });
+                var flightPlanEditor = FlightPlanEditor.Create(aircraftParameter, config.EditorConfig.cityWeather, originBase,fuelBase,endBase, new TargetPoint[] { targetPoint });
 
                 AircraftKTKS aircraft = ComponentFactory.Create<AircraftKTKS, FlightPlanEditor>(flightPlanEditor);
                 aircraft.Name = config.KTKSTask.aircraftInfos[i].AircraftType;
                 aircraft.TaskReadyTime = config.KTKSTask.missionInformation.TakeoffPreparationTime;
-                mission.aircrafts.Add(aircraft);
+                mission.Aircrafts.Add(aircraft);
                 aircraft.taskContent = config.KTKSTask;
                 aircraft.AircraftId = config.KTKSTask.aircraftInfos[i].AircraftId;
                 aircraft.rescueDemandInfo = config.EditorConfig.rescueDemandInfos.Find(t => t.DemandPointName == config.KTKSTask.missionInformation.TargetPoint);
@@ -374,8 +374,7 @@ public class CreateLandSJEventHandler : AEvent<CreateLandSXTask>
         {
             var taskSys = Game.Scene.GetComponent<TaskComponent>();
             ZSJYMission mission = ComponentFactory.Create<ZSJYMission>();
-            mission.date = taskSys.date;
-            taskSys.ZSJYMissions.Add(mission);
+            taskSys.Missions.Add(mission);
             mission.MissionId = $"着水救援任务 {config.ZSJYTask.missionInformation.MissionName}";
             mission.ExecutionContext = config.EditorConfig.runCounts;
             //mission.AddComponent<SJTotalTaskPerformanceComponent>();
@@ -386,15 +385,17 @@ public class CreateLandSJEventHandler : AEvent<CreateLandSXTask>
                     a => a.AircraftID == config.ZSJYTask.aircraftInfos[i].AircraftType);
                 //基地
                 var originBase = config.EditorConfig.bases.Find(b => b.BaseId == aircraftParameter.AirportId);
-
+                var fuelBase = config.EditorConfig.bases.Find(b => b.BaseName == config.ZSJYTask.aircraftInfos[i].RefuelingBaseId);
+                var endBase = config.EditorConfig.bases.Find(b => b.BaseName == config.ZSJYTask.aircraftInfos[i].TaskEndReturnPoint);
+                
                 TargetPoint targetPoint = config.EditorConfig.targetPoints.Find(t => t.TargetPointId == config.ZSJYTask.missionInformation.TargetPointId);
                 //创建飞行计划编辑器
-                var flightPlanEditor = FlightPlanEditor.Create(aircraftParameter, config.EditorConfig.cityWeather, originBase, new TargetPoint[] { targetPoint });
+                var flightPlanEditor = FlightPlanEditor.Create(aircraftParameter, config.EditorConfig.cityWeather, originBase,fuelBase,endBase, new TargetPoint[] { targetPoint });
 
                 AircraftZS aircraft = ComponentFactory.Create<AircraftZS, FlightPlanEditor>(flightPlanEditor);
                 aircraft.Name = config.ZSJYTask.aircraftInfos[i].AircraftType;
                 aircraft.TaskReadyTime = config.ZSJYTask.missionInformation.TakeoffPreparationTime;
-                mission.aircrafts.Add(aircraft);
+                mission.Aircrafts.Add(aircraft);
                 aircraft.taskContent = config.ZSJYTask;
                 aircraft.AircraftId = config.ZSJYTask.aircraftInfos[i].AircraftId;
                 //aircraft.MissionEndPoint = new MissionEndPoint
@@ -427,8 +428,7 @@ public class CreateLandSJEventHandler : AEvent<CreateLandSXTask>
         {
             var taskSys = Game.Scene.GetComponent<TaskComponent>();
             JJJYMission mission = ComponentFactory.Create<JJJYMission>();
-            mission.date = taskSys.date;
-            taskSys.JJJYMissions.Add(mission);
+            taskSys.Missions.Add(mission);
             mission.MissionId = $"机降救援任务 {config.JJJYTask.missionInformation.MissionName}";
             mission.ExecutionContext = config.EditorConfig.runCounts;
             //mission.AddComponent<SJTotalTaskPerformanceComponent>();
@@ -439,16 +439,18 @@ public class CreateLandSJEventHandler : AEvent<CreateLandSXTask>
                     a => a.AircraftID == config.JJJYTask.aircraftInfos[i].AircraftType);
                 //基地
                 var originBase = config.EditorConfig.bases.Find(b => b.BaseId == aircraftParameter.AirportId);
-
+                var fuelBase = config.EditorConfig.bases.Find(b => b.BaseName == config.JJJYTask.aircraftInfos[i].RefuelingBaseId);
+                var endBase = config.EditorConfig.bases.Find(b => b.BaseName == config.JJJYTask.aircraftInfos[i].TaskEndReturnPoint);
+                
                 TargetPoint targetPoint = config.EditorConfig.targetPoints.Find(t => t.TargetPointId == config.JJJYTask.missionInformation.TargetPointId);
 
                 //创建飞行计划编辑器
-                var flightPlanEditor = FlightPlanEditor.Create(aircraftParameter, config.EditorConfig.cityWeather, originBase, new TargetPoint[] { targetPoint });
+                var flightPlanEditor = FlightPlanEditor.Create(aircraftParameter, config.EditorConfig.cityWeather, originBase,fuelBase,endBase, new TargetPoint[] { targetPoint });
 
                 AircraftJJ aircraft = ComponentFactory.Create<AircraftJJ, FlightPlanEditor>(flightPlanEditor);
                 aircraft.Name = config.JJJYTask.aircraftInfos[i].AircraftType;
                 aircraft.TaskReadyTime = config.JJJYTask.missionInformation.TakeoffPreparationTime;
-                mission.aircrafts.Add(aircraft);
+                mission.Aircrafts.Add(aircraft);
                 aircraft.taskContent = config.JJJYTask;
                 aircraft.AircraftId = config.JJJYTask.aircraftInfos[i].AircraftId;
                 aircraft.rescueDemandInfo = config.EditorConfig.rescueDemandInfos.Find(t => t.DemandPointName == config.JJJYTask.missionInformation.TargetPoint);
@@ -475,56 +477,57 @@ public class CreateLandSJEventHandler : AEvent<CreateLandSXTask>
         }
     }
 
-    [Event]
-    public class CreateSHJEventHandler : AEvent<CreateSHJTask>
-    {
-        protected override UniTask Run(CreateSHJTask config)
-        {
-            var taskSys = Game.Scene.GetComponent<TaskComponent>();
-            SHJMission mission = ComponentFactory.Create<SHJMission>();
-            mission.date = taskSys.date;
-            taskSys.SHJMissions.Add(mission);
-            mission.MissionId = $"索滑降救援任务 {config.SHJTask.missionInformation.MissionName}";
-            mission.ExecutionContext = config.EditorConfig.runCounts;
-            //mission.AddComponent<SJTotalTaskPerformanceComponent>();
-            for (int i = 0; i < config.SHJTask.aircraftInfos.Length; i++)
-            {
-                //飞机参数
-                var aircraftParameter = config.EditorConfig.aircraftParameters.Find(
-                    a => a.AircraftID == config.SHJTask.aircraftInfos[i].AircraftType);
-                //基地
-                var originBase = config.EditorConfig.bases.Find(b => b.BaseId == aircraftParameter.AirportId);
-
-                TargetPoint targetPoint = config.EditorConfig.targetPoints.Find(t => t.TargetPointId == config.SHJTask.missionInformation.TargetPointId);
-
-                //创建飞行计划编辑器
-                var flightPlanEditor = FlightPlanEditor.Create(aircraftParameter, config.EditorConfig.cityWeather, originBase, new TargetPoint[] { targetPoint });
-                AircraftSHJ aircraft = ComponentFactory.Create<AircraftSHJ, FlightPlanEditor>(flightPlanEditor);
-                aircraft.Name = config.SHJTask.aircraftInfos[i].AircraftType;
-                aircraft.TaskReadyTime = config.SHJTask.missionInformation.TakeoffPreparationTime;
-                mission.aircrafts.Add(aircraft);
-                aircraft.content = config.SHJTask;
-                aircraft.AircraftId = config.SHJTask.aircraftInfos[i].AircraftId;
-                aircraft.missionEndPoint = new MissionEndPoint
-                {
-                    MissionEndPointLongitude = targetPoint.TargetPointLongitude,
-                    MissionEndPointLatitude = targetPoint.TargetPointLatitude,
-                    MissionEndPointHeight = targetPoint.TargetPointHeight
-                };
-
-                foreach (var item in config.SHJTask.SHJParameters)
-                {
-                    if (item.AircraftId == aircraft.AircraftId)
-                    {
-                        aircraft.SHJParameter = item;
-                    }
-                }
-
-                aircraft.AddComponent<SJStaticCapacityComponent>();
-                Log.Info($"创建机型 : {flightPlanEditor.aircraftparameter.AircraftID}");
-            }
-
-            return UniTask.CompletedTask;
-        }
-    }
+    // [Event]
+    // public class CreateSHJEventHandler : AEvent<CreateSHJTask>
+    // {
+    //     protected override UniTask Run(CreateSHJTask config)
+    //     {
+    //         var taskSys = Game.Scene.GetComponent<TaskComponent>();
+    //         SHJMission mission = ComponentFactory.Create<SHJMission>();
+    //         mission.date = taskSys.date;
+    //         taskSys.SHJMissions.Add(mission);
+    //         mission.MissionId = $"索滑降救援任务 {config.SHJTask.missionInformation.MissionName}";
+    //         mission.ExecutionContext = config.EditorConfig.runCounts;
+    //         //mission.AddComponent<SJTotalTaskPerformanceComponent>();
+    //         for (int i = 0; i < config.SHJTask.aircraftInfos.Length; i++)
+    //         {
+    //             //飞机参数
+    //             var aircraftParameter = config.EditorConfig.aircraftParameters.Find(
+    //                 a => a.AircraftID == config.SHJTask.aircraftInfos[i].AircraftType);
+    //             //基地
+    //             var originBase = config.EditorConfig.bases.Find(b => b.BaseId == aircraftParameter.AirportId);
+    //             var fuelBase = config.EditorConfig.bases.Find(b => b.BaseName == config.SHJTask.aircraftInfos[i].RefuelingBaseId);
+    //             var endBase = config.EditorConfig.bases.Find(b => b.BaseName == config.SHJTask.aircraftInfos[i].TaskEndReturnPoint);
+    //             TargetPoint targetPoint = config.EditorConfig.targetPoints.Find(t => t.TargetPointId == config.SHJTask.missionInformation.TargetPointId);
+    //
+    //             //创建飞行计划编辑器
+    //             var flightPlanEditor = FlightPlanEditor.Create(aircraftParameter, config.EditorConfig.cityWeather, originBase,fuelBase,endBase, new TargetPoint[] { targetPoint });
+    //             AircraftSHJ aircraft = ComponentFactory.Create<AircraftSHJ, FlightPlanEditor>(flightPlanEditor);
+    //             aircraft.Name = config.SHJTask.aircraftInfos[i].AircraftType;
+    //             aircraft.TaskReadyTime = config.SHJTask.missionInformation.TakeoffPreparationTime;
+    //             mission.aircrafts.Add(aircraft);
+    //             aircraft.content = config.SHJTask;
+    //             aircraft.AircraftId = config.SHJTask.aircraftInfos[i].AircraftId;
+    //             aircraft.missionEndPoint = new MissionEndPoint
+    //             {
+    //                 MissionEndPointLongitude = targetPoint.TargetPointLongitude,
+    //                 MissionEndPointLatitude = targetPoint.TargetPointLatitude,
+    //                 MissionEndPointHeight = targetPoint.TargetPointHeight
+    //             };
+    //
+    //             foreach (var item in config.SHJTask.SHJParameters)
+    //             {
+    //                 if (item.AircraftId == aircraft.AircraftId)
+    //                 {
+    //                     aircraft.SHJParameter = item;
+    //                 }
+    //             }
+    //
+    //             aircraft.AddComponent<SJStaticCapacityComponent>();
+    //             Log.Info($"创建机型 : {flightPlanEditor.aircraftparameter.AircraftID}");
+    //         }
+    //
+    //         return UniTask.CompletedTask;
+    //     }
+    // }
 }

+ 1 - 6
SimulationServer/EventHandler/EventStruct.cs

@@ -27,7 +27,7 @@ public struct CreateJJTask
 public struct CreateSHJTask
 {
     public EditorConfig EditorConfig;
-    public SHJTask ShjTaskConfig;
+    public SHJTask SHJTask;
 }
 
 
@@ -73,11 +73,6 @@ public struct CreateJJJYTask
     public JJJYTask JJJYTask;
 }
 
-public struct CreateSHJTask
-{
-    public EditorConfig EditorConfig;
-    public SHJTask SHJTask;
-}
 
 public struct CreateXHTask
 {

+ 4 - 4
SimulationServer/EventHandler/ServerStartEventHandler.cs

@@ -17,7 +17,7 @@ public class ServerStartEventHandler : AEvent<ServerStart>
     {
         Log.Info("读取配置文件!");
         var taskSys = Game.Scene.GetComponent<TaskComponent>();
-        taskSys.date = DateTime.Now.ToString().Replace("/","-").Replace(":","-").Replace(" ","-");
+        var jyTaskSys = Game.Scene.GetComponent<JYComponent>();
         //Console.WriteLine("date:" + taskSys.date);
         HttpInterface.serverIp = File.ReadAllText("dbIp.txt");
         SimulationCommon.Util.serverIp = HttpInterface.serverIp;
@@ -52,11 +52,11 @@ public class ServerStartEventHandler : AEvent<ServerStart>
         {
             if (item.TargetType.Type == "遇险人员" || item.TargetType.Type == "车辆" || item.TargetType.Type == "航空器")
             {
-                taskSys.isLand = true;
+                jyTaskSys.isLand = true;
             }
             else if (item.TargetType.Type == "落水人员" || item.TargetType.Type == "救生筏" || item.TargetType.Type == "船舶" || item.TargetType.Type == "大规模落水人群")
             {
-                taskSys.isSea = true;
+                jyTaskSys.isSea = true;
             }
             //Console.WriteLine("taskSys.isLand:" + taskSys.isLand + "_" + "taskSys.isSea:" + taskSys.isSea);
             break;
@@ -100,7 +100,7 @@ public class ServerStartEventHandler : AEvent<ServerStart>
         foreach (SHJTask shjTask in taskConfig.sHJTasks)
         {
             Game.EventSystem.Publish(new CreateSHJTask()
-            { EditorConfig = editorConfig, ShjTaskConfig = shjTask });
+            { EditorConfig = editorConfig, SHJTask = shjTask });
         }
 
         //// 创建侦察

+ 2 - 0
SimulationServer/Init.cs

@@ -37,6 +37,8 @@ public static class Init
             // 任务
             Game.Scene.AddComponent<TaskComponent>();
 
+            Game.Scene.AddComponent<JYComponent>();
+
             Log.Info("服务器启动完成!");
             Game.EventSystem.Publish(new ServerStart());
         }

+ 2 - 0
SimulationServer/SimulationServer.csproj

@@ -35,4 +35,6 @@
       <PackageReference Include="NPOIHelper" Version="2.0.13" />
     </ItemGroup>
 
+
+
 </Project>

+ 2 - 6
SimulationServer/SimulationServer.csproj.user

@@ -1,8 +1,4 @@
 <?xml version="1.0" encoding="utf-8"?>
 <Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-    <ItemGroup>
-        <Compile Update="Form1.cs">
-            <SubType>Form</SubType>
-        </Compile>
-    </ItemGroup>
-</Project>
+  <ItemGroup />
+</Project>