|
@@ -1,4 +1,5 @@
|
|
|
using KYFramework;
|
|
|
+using Model;
|
|
|
using OpenQA.Selenium.Remote;
|
|
|
using SimulationServer.Utils;
|
|
|
|
|
@@ -40,6 +41,8 @@ public class TaskComponent : Component
|
|
|
|
|
|
public string date;
|
|
|
|
|
|
+ public int missionCount;
|
|
|
+
|
|
|
public void Start()
|
|
|
{
|
|
|
MHRescueMissions?.ForEach(r => r.Reset());
|
|
@@ -48,6 +51,7 @@ public class TaskComponent : Component
|
|
|
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());
|
|
@@ -207,43 +211,152 @@ public class TaskComponentAwakeSystem : AwakeSystem<TaskComponent>
|
|
|
[ObjectSystem]
|
|
|
public class TaskComponentUpdateSystem : UpdateSystem<TaskComponent>
|
|
|
{
|
|
|
+ double 任务准备时间 = 0;
|
|
|
+ double 平均搜索时间 = 0;
|
|
|
+ double 总飞行时间 = 0;
|
|
|
+ double 人员存活率 = 0;
|
|
|
+ double 任务是否成功 = 0;
|
|
|
+ float 识别成功率 = 0f;
|
|
|
+ double 平均救助时间 = 0;
|
|
|
+ float 人员数量 = 0;
|
|
|
+ double aircreftCount = 0;
|
|
|
+
|
|
|
+ public bool isSeaSJRescueMissionsOver = false;
|
|
|
+ public bool isLandSJRescueMissionsOver = false;
|
|
|
+ public bool isKZDYMissionsOver = false;
|
|
|
+
|
|
|
+ public bool isReport;
|
|
|
+
|
|
|
public override void Update(TaskComponent self)
|
|
|
{
|
|
|
if (self.SeaSJRescueMissions.Count > 0)
|
|
|
{
|
|
|
- if (self.SeaSJRescueMissions.All(m => m.IsOver))
|
|
|
+ if (self.SeaSJRescueMissions.All(m => m.IsOver) && !isSeaSJRescueMissionsOver)
|
|
|
{
|
|
|
- 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();
|
|
|
+ self.missionCount--;
|
|
|
+ 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))
|
|
|
+ if (self.LandSJRescueMissions.All(m => m.IsOver) && !isLandSJRescueMissionsOver)
|
|
|
+ {
|
|
|
+ self.missionCount--;
|
|
|
+ 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--;
|
|
|
+ isKZDYMissionsOver = true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if (self.missionCount == 0 && !isReport)
|
|
|
+ {
|
|
|
+ for (int i = 0; i < self.ExecutionContext; i++)
|
|
|
{
|
|
|
- for (int i = 0; i < self.ExecutionContext; i++)
|
|
|
+ 任务准备时间 = 0;
|
|
|
+ 平均搜索时间 = 0;
|
|
|
+ 总飞行时间 = 0;
|
|
|
+ 人员存活率 = 0;
|
|
|
+ 任务是否成功 = 0;
|
|
|
+ 识别成功率 = 0f;
|
|
|
+ 平均救助时间 = 0;
|
|
|
+ 人员数量 = 0;
|
|
|
+ double aircreftCount = 0;
|
|
|
+ foreach (var item in self.SeaSJRescueMissions)
|
|
|
{
|
|
|
- self.SSJAllTotalTaskPerformance.FillData1(self.LandSJRescueMissions);
|
|
|
- var report = self.SSJAllTotalTaskPerformance.GetReport1();
|
|
|
- if (report["总任务表现"]["任务是否成功"] == "1")
|
|
|
- self.landSuccessCount++;
|
|
|
- self.SaveLandSJ(report);
|
|
|
+ foreach (var item1 in item.aircraftSJDatas)
|
|
|
+ {
|
|
|
+ 识别成功率 += float.Parse(item1.Value["识别成功率"][i]);
|
|
|
+ 人员数量 += float.Parse(item1.Value["人员数量"][i]);
|
|
|
+ if (任务准备时间 < float.Parse(item1.Value["任务准备时间"][i]))
|
|
|
+ 任务准备时间 = float.Parse(item1.Value["任务准备时间"][i]);
|
|
|
+ 平均搜索时间 += float.Parse(item1.Value["平均搜索时间"][i]);
|
|
|
+ 平均救助时间 += float.Parse(item1.Value["平均救助时间"][i]);
|
|
|
+ Console.WriteLine("平均救助时间1:" + 平均救助时间);
|
|
|
+ 总飞行时间 += float.Parse(item1.Value["总飞行时间"][i]);
|
|
|
+ 人员存活率 += float.Parse(item1.Value["人员存活率"][i]);
|
|
|
+ aircreftCount++;
|
|
|
+ }
|
|
|
}
|
|
|
- //self.SaveTotalMHLand();
|
|
|
- self.ReportAllSJLand();
|
|
|
- self.LandSJRescueMissions.Clear();
|
|
|
+
|
|
|
+ foreach (var item in self.KZDYMissions)
|
|
|
+ {
|
|
|
+ foreach (var item1 in item.aircraftSJDatas)
|
|
|
+ {
|
|
|
+ 识别成功率 += float.Parse(item1.Value["识别成功率"][i]);
|
|
|
+ 人员数量 += float.Parse(item1.Value["人员数量"][i]);
|
|
|
+ if (任务准备时间 < float.Parse(item1.Value["任务准备时间"][i]))
|
|
|
+ 任务准备时间 = float.Parse(item1.Value["任务准备时间"][i]);
|
|
|
+ 平均搜索时间 += float.Parse(item1.Value["平均搜索时间"][i]);
|
|
|
+ 平均救助时间 += float.Parse(item1.Value["平均救助时间"][i]);
|
|
|
+ Console.WriteLine("平均救助时间2:" + 平均救助时间);
|
|
|
+ 总飞行时间 += float.Parse(item1.Value["总飞行时间"][i]);
|
|
|
+ 人员存活率 += float.Parse(item1.Value["人员存活率"][i]);
|
|
|
+ aircreftCount++;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ SJAllTotalTaskPerformance allTotalTaskPerformance = new SJAllTotalTaskPerformance();
|
|
|
+ if (人员存活率 != 0)
|
|
|
+ 任务是否成功 = 1;
|
|
|
+ allTotalTaskPerformance.识别成功率 = (识别成功率 / 人员数量).ToString();
|
|
|
+ allTotalTaskPerformance.任务准备时间 = 任务准备时间.ToString();
|
|
|
+ allTotalTaskPerformance.平均搜索时间 = (平均搜索时间 / aircreftCount).ToString("f4");
|
|
|
+ allTotalTaskPerformance.平均救助时间 = (平均救助时间 / aircreftCount).ToString("f4");
|
|
|
+ allTotalTaskPerformance.总飞行时间 = 总飞行时间.ToString("f4");
|
|
|
+ allTotalTaskPerformance.海情覆盖率 = "0.6".ToString();//"60%"
|
|
|
+ allTotalTaskPerformance.任务是否成功 = 任务是否成功.ToString();
|
|
|
+ allTotalTaskPerformance.人员存活率 = (人员存活率 / 人员数量).ToString();
|
|
|
+
|
|
|
+
|
|
|
+ Dictionary<string, Dictionary<string, string>> report = new Dictionary<string, Dictionary<string, string>>();
|
|
|
+ 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("所有任务执行完成");
|
|
|
}
|
|
|
}
|
|
|
}
|