TaskComponent.cs 35 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657
  1. using KYFramework;
  2. using Model;
  3. using OpenQA.Selenium.Remote;
  4. using SimulationCommon;
  5. using SimulationServer.Utils;
  6. namespace SimulationServer;
  7. public class TaskComponent : Component
  8. {
  9. public static Weather Weather;
  10. public static int Speed = 100;
  11. // 救援任务列表
  12. public List<MHRescueMission> MHRescueMissions;
  13. public List<XHRescueMission> XHRescueMissions;
  14. public List<ZCRescueMission> ZCRescueMissions;
  15. public List<SeaSJRescueMission> SeaSJRescueMissions;
  16. public List<LandSJRescueMission> LandSJRescueMissions;
  17. public List<KZDYMission> KZDYMissions;
  18. public List<KTKSMission> KTKSMissions;
  19. public List<ZSJYMission> ZSJYMissions;
  20. public List<JJJYMission> JJJYMissions;
  21. public List<SHJMission> SHJMissions;
  22. public SJAllTotalTaskPerformanceComponent SSJAllTotalTaskPerformance = new SJAllTotalTaskPerformanceComponent();
  23. public Dictionary<string, Dictionary<string, List<string>>> alltotalReportSea = new();
  24. public Dictionary<string, Dictionary<string, List<string>>> alltotalReportLand = new();
  25. // <sheet,<指标名,值列表>>
  26. public Dictionary<string, Dictionary<string, List<string>>> totalReportSea = new();
  27. public Dictionary<string, Dictionary<string, List<string>>> totalReportLand = new();
  28. private int currentSeaExecuteCount = 1;
  29. private int currentLandExecuteCount = 1;
  30. public int ExecutionContext = 0;
  31. public int seaSuccessCount = 0;
  32. public int landSuccessCount = 0;
  33. public bool isSea;
  34. public bool isLand;
  35. public string date;
  36. public int missionCount;
  37. public void Start()
  38. {
  39. MHRescueMissions?.ForEach(r => r.Reset());
  40. XHRescueMissions?.ForEach(r => r.Reset());
  41. MHRescueMissions?.ForEach(r => r.Start());
  42. XHRescueMissions?.ForEach(r => r.Start());
  43. ZCRescueMissions?.ForEach(r => r.Start());
  44. SeaSJRescueMissions?.ForEach(r => r.Start());
  45. LandSJRescueMissions?.ForEach(r => r.Start());
  46. KZDYMissions?.ForEach(r => r.Start());
  47. KTKSMissions?.ForEach(r => r.Start());
  48. ZSJYMissions?.ForEach(r => r.Start());
  49. JJJYMissions?.ForEach(r => r.Start());
  50. SHJMissions?.ForEach(r => r.Start());
  51. }
  52. public void SaveSeaSJ(Dictionary<string, Dictionary<string, string>> totalReport)
  53. {
  54. //把totalReport保存到alltotalReport
  55. foreach (var kv in totalReport)
  56. {
  57. if (!alltotalReportSea.ContainsKey(kv.Key)) alltotalReportSea[kv.Key] = new Dictionary<string, List<string>>();
  58. foreach (var kv2 in kv.Value)
  59. {
  60. if (!alltotalReportSea[kv.Key].ContainsKey(kv2.Key)) alltotalReportSea[kv.Key][kv2.Key] = new List<string>();
  61. alltotalReportSea[kv.Key][kv2.Key].Add(kv2.Value);
  62. }
  63. }
  64. if (currentSeaExecuteCount == ExecutionContext)
  65. {
  66. // 求一个平均值放到最后一位
  67. foreach (var kv in alltotalReportSea)
  68. {
  69. foreach (var kv2 in kv.Value)
  70. {
  71. var sum = 0f;
  72. foreach (var value in kv2.Value)
  73. {
  74. bool isfloat = float.TryParse(value, out float f);
  75. if (isfloat)
  76. sum += float.Parse(value);
  77. else
  78. sum = -1f;
  79. }
  80. if (sum != -1f)
  81. kv2.Value.Add((sum / kv2.Value.Count).ToString());
  82. else
  83. kv2.Value.Add("");
  84. }
  85. }
  86. }
  87. currentSeaExecuteCount++;
  88. }
  89. public void SaveLandSJ(Dictionary<string, Dictionary<string, string>> totalReport)
  90. {
  91. //把totalReport保存到alltotalReport
  92. foreach (var kv in totalReport)
  93. {
  94. if (!alltotalReportLand.ContainsKey(kv.Key)) alltotalReportLand[kv.Key] = new Dictionary<string, List<string>>();
  95. foreach (var kv2 in kv.Value)
  96. {
  97. if (!alltotalReportLand[kv.Key].ContainsKey(kv2.Key)) alltotalReportLand[kv.Key][kv2.Key] = new List<string>();
  98. alltotalReportLand[kv.Key][kv2.Key].Add(kv2.Value);
  99. }
  100. }
  101. if (currentLandExecuteCount == ExecutionContext)
  102. {
  103. // 求一个平均值放到最后一位
  104. foreach (var kv in alltotalReportLand)
  105. {
  106. foreach (var kv2 in kv.Value)
  107. {
  108. var sum = 0f;
  109. foreach (var value in kv2.Value)
  110. {
  111. bool isfloat = float.TryParse(value, out float f);
  112. if (isfloat)
  113. sum += float.Parse(value);
  114. else
  115. sum = -1f;
  116. }
  117. if (sum != -1f)
  118. kv2.Value.Add((sum / kv2.Value.Count).ToString());
  119. else
  120. kv2.Value.Add("");
  121. }
  122. }
  123. }
  124. currentLandExecuteCount++;
  125. }
  126. public void ReportAllSJSea()
  127. {
  128. //string data = DateTime.Now.ToString("yyyy-MM-dd");
  129. string path = $"Reports/{date}";
  130. if (!Directory.Exists(path)) Directory.CreateDirectory(path);
  131. string totalPath = "";
  132. if (isSea)
  133. totalPath = $"{path}/{"海上搜救任务总体指标报告"}.xls";
  134. if (isLand)
  135. totalPath = $"{path}/{"陆上搜救任务总体指标报告"}.xls";
  136. DataTableExtensions.SaveToExcel(totalPath, alltotalReportSea, true, true, (seaSuccessCount * 1f / ExecutionContext).ToString());
  137. //string totalPath1 = $"{path}/{"搜救任务总体指标报告"}.xls";
  138. //DataTableExtensions.SaveToExcel(totalPath1, totalReportSea);
  139. }
  140. public void ReportAllSJLand()
  141. {
  142. string data = DateTime.Now.ToString("yyyy-MM-dd");
  143. string path = $"Reports/{date}";
  144. if (!Directory.Exists(path)) Directory.CreateDirectory(path);
  145. string totalPath = $"{path}/{"陆上搜寻任务总体指标报告"}.xls";
  146. DataTableExtensions.SaveToExcel(totalPath, alltotalReportLand, true, true, (landSuccessCount * 1f / ExecutionContext).ToString());
  147. //string totalPath1 = $"{path}/{"搜救任务总体指标报告"}.xls";
  148. //DataTableExtensions.SaveToExcel(totalPath1, totalReportLand);
  149. }
  150. public void SaveTotalMHSea()
  151. {
  152. if (!totalReportSea.ContainsKey("总任务表现")) totalReportSea["总任务表现"] = new Dictionary<string, List<string>>();
  153. if (!totalReportSea["总任务表现"].ContainsKey("任务成功率")) totalReportSea["总任务表现"]["任务成功率"] = new List<string>();
  154. totalReportSea["总任务表现"]["任务成功率"].Add((seaSuccessCount * 1f / ExecutionContext).ToString());
  155. }
  156. public void SaveTotalMHLand()
  157. {
  158. if (!totalReportLand.ContainsKey("总任务表现")) totalReportLand["总任务表现"] = new Dictionary<string, List<string>>();
  159. if (!totalReportLand["总任务表现"].ContainsKey("任务成功率")) totalReportLand["总任务表现"]["任务成功率"] = new List<string>();
  160. totalReportLand["总任务表现"]["任务成功率"].Add((landSuccessCount * 1f / ExecutionContext).ToString());
  161. }
  162. }
  163. [ObjectSystem]
  164. public class TaskComponentAwakeSystem : AwakeSystem<TaskComponent>
  165. {
  166. public override void Awake(TaskComponent self)
  167. {
  168. self.MHRescueMissions = new List<MHRescueMission>();
  169. self.ZCRescueMissions = new List<ZCRescueMission>();
  170. self.XHRescueMissions = new List<XHRescueMission>();
  171. self.SeaSJRescueMissions = new List<SeaSJRescueMission>();
  172. self.LandSJRescueMissions = new List<LandSJRescueMission>();
  173. self.KZDYMissions = new List<KZDYMission>();
  174. self.KTKSMissions = new List<KTKSMission>();
  175. self.ZSJYMissions = new List<ZSJYMission>();
  176. self.JJJYMissions = new List<JJJYMission>();
  177. self.SHJMissions = new List<SHJMission>();
  178. }
  179. }
  180. [ObjectSystem]
  181. public class TaskComponentUpdateSystem : UpdateSystem<TaskComponent>
  182. {
  183. double 任务准备时间 = 0;
  184. double 平均搜索时间 = 0;
  185. double 总飞行时间 = 0;
  186. double 人员存活率 = 0;
  187. double 任务是否成功 = 0;
  188. float 识别成功率 = 0f;
  189. double 平均救助时间 = 0;
  190. float 人员数量 = 0;
  191. float 识别数量 = 0;
  192. double 环境搜索覆盖面积 = 0;
  193. double 海上搜索覆盖面积 = 0;
  194. double aircreftCount = 0;
  195. double searchCount = 0;
  196. double jzCount = 0;
  197. public bool isSeaSJRescueMissionsOver = false;
  198. public bool isLandSJRescueMissionsOver = false;
  199. public bool isKZDYMissionsOver = false;
  200. public bool isKTKSMissionsOver = false;
  201. public bool isZSJYMissionsOver = false;
  202. public bool isJJJYMissionsOver = false;
  203. public bool isSHJMissionsOver = false;
  204. public bool isReport;
  205. public override void Update(TaskComponent self)
  206. {
  207. if (self.SeaSJRescueMissions.Count > 0)
  208. {
  209. if (self.SeaSJRescueMissions.All(m => m.IsOver) && !isSeaSJRescueMissionsOver)
  210. {
  211. self.missionCount -= self.SeaSJRescueMissions.Count;
  212. isSeaSJRescueMissionsOver = true;
  213. //for (int i = 0; i < self.ExecutionContext; i++)
  214. //{
  215. // self.SSJAllTotalTaskPerformance.FillData(self.SeaSJRescueMissions);
  216. // var report = self.SSJAllTotalTaskPerformance.GetReport();
  217. // if (report["总任务表现"]["任务是否成功"] == "1")
  218. // self.seaSuccessCount++;
  219. // self.SaveSeaSJ(report);
  220. //}
  221. ////self.SaveTotalMHSea();
  222. //self.ReportAllSJSea();
  223. //self.SeaSJRescueMissions.Clear();
  224. }
  225. }
  226. if (self.LandSJRescueMissions.Count > 0)
  227. {
  228. if (self.LandSJRescueMissions.All(m => m.IsOver) && !isLandSJRescueMissionsOver)
  229. {
  230. self.missionCount -= self.LandSJRescueMissions.Count;
  231. isLandSJRescueMissionsOver = true;
  232. //for (int i = 0; i < self.ExecutionContext; i++)
  233. //{
  234. // self.SSJAllTotalTaskPerformance.FillData1(self.LandSJRescueMissions);
  235. // var report = self.SSJAllTotalTaskPerformance.GetReport1();
  236. // if (report["总任务表现"]["任务是否成功"] == "1")
  237. // self.landSuccessCount++;
  238. // self.SaveLandSJ(report);
  239. //}
  240. ////self.SaveTotalMHLand();
  241. //self.ReportAllSJLand();
  242. //self.LandSJRescueMissions.Clear();
  243. }
  244. }
  245. if (self.KZDYMissions.Count > 0)
  246. {
  247. if (self.KZDYMissions.All(m => m.IsOver) && !isKZDYMissionsOver)
  248. {
  249. self.missionCount -= self.KZDYMissions.Count;
  250. isKZDYMissionsOver = true;
  251. }
  252. }
  253. if (self.KTKSMissions.Count > 0)
  254. {
  255. if (self.KTKSMissions.All(m => m.IsOver) && !isKTKSMissionsOver)
  256. {
  257. self.missionCount -= self.KTKSMissions.Count;
  258. isKTKSMissionsOver = true;
  259. }
  260. }
  261. if (self.ZSJYMissions.Count > 0)
  262. {
  263. if (self.ZSJYMissions.All(m => m.IsOver) && !isZSJYMissionsOver)
  264. {
  265. self.missionCount -= self.ZSJYMissions.Count;
  266. isZSJYMissionsOver = true;
  267. }
  268. }
  269. if (self.JJJYMissions.Count > 0)
  270. {
  271. if (self.JJJYMissions.All(m => m.IsOver) && !isJJJYMissionsOver)
  272. {
  273. self.missionCount -= self.JJJYMissions.Count;
  274. isJJJYMissionsOver = true;
  275. }
  276. }
  277. if (self.SHJMissions.Count > 0)
  278. {
  279. if (self.SHJMissions.All(m => m.IsOver) && !isSHJMissionsOver)
  280. {
  281. self.missionCount -= self.SHJMissions.Count;
  282. isSHJMissionsOver = true;
  283. }
  284. }
  285. //Console.WriteLine("self.missionCount:" + self.missionCount);
  286. if (self.missionCount == 0 && !isReport)
  287. {
  288. for (int i = 0; i < self.ExecutionContext; i++)
  289. {
  290. 任务准备时间 = 0;
  291. 平均搜索时间 = 0;
  292. 总飞行时间 = 0;
  293. 人员存活率 = 0;
  294. 任务是否成功 = 0;
  295. 识别成功率 = 0f;
  296. 平均救助时间 = 0;
  297. 人员数量 = 0;
  298. 识别数量 = 0;
  299. 环境搜索覆盖面积 = 0;
  300. 海上搜索覆盖面积 = 0;
  301. aircreftCount = 0;
  302. searchCount = 0;
  303. jzCount = 0;
  304. foreach (var item in self.SeaSJRescueMissions)
  305. {
  306. foreach (var item1 in item.aircraftSJDatas)
  307. {
  308. 识别成功率 += float.Parse(item1.Value["识别成功率"][i]);
  309. 人员数量 += float.Parse(item1.Value["人员数量"][i]);
  310. 识别数量 += float.Parse(item1.Value["识别数量"][i]);
  311. if (任务准备时间 < float.Parse(item1.Value["任务准备时间"][i]))
  312. 任务准备时间 = float.Parse(item1.Value["任务准备时间"][i]);
  313. 平均搜索时间 += float.Parse(item1.Value["平均搜索时间"][i]);
  314. 平均救助时间 += float.Parse(item1.Value["平均救助时间"][i]);
  315. 总飞行时间 += float.Parse(item1.Value["总飞行时间"][i]);
  316. 人员存活率 += float.Parse(item1.Value["人员存活率"][i]);
  317. 海上搜索覆盖面积 += float.Parse(item1.Value["海上搜索覆盖面积"][i]);
  318. aircreftCount++;
  319. if (item1.Value["平均搜索时间"][i] != "0")
  320. searchCount++;
  321. if (item1.Value["平均救助时间"][i] != "0")
  322. jzCount++;
  323. Console.WriteLine("海上搜救" + item1.Key + "识别成功数:" + item1.Value["识别成功率"][i]);
  324. Console.WriteLine("海上搜救" + item1.Key + "识别数量:" + item1.Value["识别数量"][i]);
  325. Console.WriteLine("海上搜救" + item1.Key + "任务准备时间:" + item1.Value["任务准备时间"][i]);
  326. Console.WriteLine("海上搜救" + item1.Key + "平均搜索时间:" + item1.Value["平均搜索时间"][i]);
  327. Console.WriteLine("海上搜救" + item1.Key + "平均救助时间:" + item1.Value["平均救助时间"][i]);
  328. Console.WriteLine("海上搜救" + item1.Key + "总飞行时间:" + item1.Value["总飞行时间"][i]);
  329. Console.WriteLine("海上搜救" + item1.Key + "存活人数:" + item1.Value["人员存活率"][i]);
  330. Console.WriteLine("海上搜救" + item1.Key + "人员数量:" + item1.Value["人员数量"][i]);
  331. Console.WriteLine("海上搜救" + item1.Key + "海上搜索覆盖面积:" + item1.Value["海上搜索覆盖面积"][i]);
  332. Console.WriteLine("===============================================================");
  333. }
  334. }
  335. foreach (var item in self.LandSJRescueMissions)
  336. {
  337. foreach (var item1 in item.aircraftSJDatas)
  338. {
  339. 识别成功率 += float.Parse(item1.Value["识别成功率"][i]);
  340. 人员数量 += float.Parse(item1.Value["人员数量"][i]);
  341. 识别数量 += float.Parse(item1.Value["识别数量"][i]);
  342. if (任务准备时间 < float.Parse(item1.Value["任务准备时间"][i]))
  343. 任务准备时间 = float.Parse(item1.Value["任务准备时间"][i]);
  344. 平均搜索时间 += float.Parse(item1.Value["平均搜索时间"][i]);
  345. 平均救助时间 += float.Parse(item1.Value["平均救助时间"][i]);
  346. 总飞行时间 += float.Parse(item1.Value["总飞行时间"][i]);
  347. 人员存活率 += float.Parse(item1.Value["人员存活率"][i]);
  348. 环境搜索覆盖面积 += float.Parse(item1.Value["环境搜索覆盖面积"][i]);
  349. aircreftCount++;
  350. if (item1.Value["平均搜索时间"][i] != "0")
  351. searchCount++;
  352. if (item1.Value["平均救助时间"][i] != "0")
  353. jzCount++;
  354. Console.WriteLine("路上搜寻" + item1.Key + "识别成功数:" + item1.Value["识别成功率"][i]);
  355. Console.WriteLine("路上搜寻" + item1.Key + "识别数量:" + item1.Value["识别数量"][i]);
  356. Console.WriteLine("路上搜寻" + item1.Key + "任务准备时间:" + item1.Value["任务准备时间"][i]);
  357. Console.WriteLine("路上搜寻" + item1.Key + "平均搜索时间:" + item1.Value["平均搜索时间"][i]);
  358. Console.WriteLine("路上搜寻" + item1.Key + "平均救助时间:" + item1.Value["平均救助时间"][i]);
  359. Console.WriteLine("路上搜寻" + item1.Key + "总飞行时间:" + item1.Value["总飞行时间"][i]);
  360. Console.WriteLine("路上搜寻" + item1.Key + "存活人数:" + item1.Value["人员存活率"][i]);
  361. Console.WriteLine("路上搜寻" + item1.Key + "人员数量:" + item1.Value["人员数量"][i]);
  362. Console.WriteLine("路上搜寻" + item1.Key + "环境搜索覆盖面积:" + item1.Value["环境搜索覆盖面积"][i]);
  363. Console.WriteLine("===============================================================");
  364. }
  365. }
  366. foreach (var item in self.KZDYMissions)
  367. {
  368. foreach (var item1 in item.aircraftSJDatas)
  369. {
  370. 识别成功率 += float.Parse(item1.Value["识别成功率"][i]);
  371. 人员数量 += float.Parse(item1.Value["人员数量"][i]);
  372. 识别数量 += float.Parse(item1.Value["识别数量"][i]);
  373. if (任务准备时间 < float.Parse(item1.Value["任务准备时间"][i]))
  374. 任务准备时间 = float.Parse(item1.Value["任务准备时间"][i]);
  375. 平均搜索时间 += float.Parse(item1.Value["平均搜索时间"][i]);
  376. 平均救助时间 += float.Parse(item1.Value["平均救助时间"][i]);
  377. 总飞行时间 += float.Parse(item1.Value["总飞行时间"][i]);
  378. 人员存活率 += float.Parse(item1.Value["人员存活率"][i]);
  379. aircreftCount++;
  380. if (item1.Value["平均搜索时间"][i] != "0")
  381. searchCount++;
  382. if (item1.Value["平均救助时间"][i] != "0")
  383. jzCount++;
  384. Console.WriteLine("空中吊运" + item1.Key + "识别成功数:" + item1.Value["识别成功率"][i]);
  385. Console.WriteLine("空中吊运" + item1.Key + "识别数量:" + item1.Value["识别数量"][i]);
  386. Console.WriteLine("空中吊运" + item1.Key + "任务准备时间:" + item1.Value["任务准备时间"][i]);
  387. Console.WriteLine("空中吊运" + item1.Key + "平均搜索时间:" + item1.Value["平均搜索时间"][i]);
  388. Console.WriteLine("空中吊运" + item1.Key + "平均救助时间:" + item1.Value["平均救助时间"][i]);
  389. Console.WriteLine("空中吊运" + item1.Key + "总飞行时间:" + item1.Value["总飞行时间"][i]);
  390. Console.WriteLine("空中吊运" + item1.Key + "存活人数:" + item1.Value["人员存活率"][i]);
  391. Console.WriteLine("空中吊运" + item1.Key + "人员数量:" + item1.Value["人员数量"][i]);
  392. Console.WriteLine("===============================================================");
  393. }
  394. }
  395. foreach (var item in self.KTKSMissions)
  396. {
  397. foreach (var item1 in item.aircraftSJDatas)
  398. {
  399. 识别成功率 += float.Parse(item1.Value["识别成功率"][i]);
  400. 人员数量 += float.Parse(item1.Value["人员数量"][i]);
  401. 识别数量 += float.Parse(item1.Value["识别数量"][i]);
  402. if (任务准备时间 < float.Parse(item1.Value["任务准备时间"][i]))
  403. 任务准备时间 = float.Parse(item1.Value["任务准备时间"][i]);
  404. 平均搜索时间 += float.Parse(item1.Value["平均搜索时间"][i]);
  405. 平均救助时间 += float.Parse(item1.Value["平均救助时间"][i]);
  406. 总飞行时间 += float.Parse(item1.Value["总飞行时间"][i]);
  407. 人员存活率 += float.Parse(item1.Value["人员存活率"][i]);
  408. aircreftCount++;
  409. if (item1.Value["平均搜索时间"][i] != "0")
  410. searchCount++;
  411. if (item1.Value["平均救助时间"][i] != "0")
  412. jzCount++;
  413. Console.WriteLine("空投空送" + item1.Key + "识别成功数:" + item1.Value["识别成功率"][i]);
  414. Console.WriteLine("空投空送" + item1.Key + "识别数量:" + item1.Value["识别数量"][i]);
  415. Console.WriteLine("空投空送" + item1.Key + "任务准备时间:" + item1.Value["任务准备时间"][i]);
  416. Console.WriteLine("空投空送" + item1.Key + "平均搜索时间:" + item1.Value["平均搜索时间"][i]);
  417. Console.WriteLine("空投空送" + item1.Key + "平均救助时间:" + item1.Value["平均救助时间"][i]);
  418. Console.WriteLine("空投空送" + item1.Key + "总飞行时间:" + item1.Value["总飞行时间"][i]);
  419. Console.WriteLine("空投空送" + item1.Key + "存活人数:" + item1.Value["人员存活率"][i]);
  420. Console.WriteLine("空投空送" + item1.Key + "人员数量:" + item1.Value["人员数量"][i]);
  421. Console.WriteLine("===============================================================");
  422. }
  423. }
  424. foreach (var item in self.ZSJYMissions)
  425. {
  426. foreach (var item1 in item.aircraftSJDatas)
  427. {
  428. 识别成功率 += float.Parse(item1.Value["识别成功率"][i]);
  429. 人员数量 += float.Parse(item1.Value["人员数量"][i]);
  430. 识别数量 += float.Parse(item1.Value["识别数量"][i]);
  431. if (任务准备时间 < float.Parse(item1.Value["任务准备时间"][i]))
  432. 任务准备时间 = float.Parse(item1.Value["任务准备时间"][i]);
  433. 平均搜索时间 += float.Parse(item1.Value["平均搜索时间"][i]);
  434. 平均救助时间 += float.Parse(item1.Value["平均救助时间"][i]);
  435. 总飞行时间 += float.Parse(item1.Value["总飞行时间"][i]);
  436. 人员存活率 += float.Parse(item1.Value["人员存活率"][i]);
  437. aircreftCount++;
  438. if (item1.Value["平均搜索时间"][i] != "0")
  439. searchCount++;
  440. if (item1.Value["平均救助时间"][i] != "0")
  441. jzCount++;
  442. Console.WriteLine("着水救援" + item1.Key + "识别成功数:" + item1.Value["识别成功率"][i]);
  443. Console.WriteLine("着水救援" + item1.Key + "识别数量:" + item1.Value["识别数量"][i]);
  444. Console.WriteLine("着水救援" + item1.Key + "任务准备时间:" + item1.Value["任务准备时间"][i]);
  445. Console.WriteLine("着水救援" + item1.Key + "平均搜索时间:" + item1.Value["平均搜索时间"][i]);
  446. Console.WriteLine("着水救援" + item1.Key + "平均救助时间:" + item1.Value["平均救助时间"][i]);
  447. Console.WriteLine("着水救援" + item1.Key + "总飞行时间:" + item1.Value["总飞行时间"][i]);
  448. Console.WriteLine("着水救援" + item1.Key + "存活人数:" + item1.Value["人员存活率"][i]);
  449. Console.WriteLine("着水救援" + item1.Key + "人员数量:" + item1.Value["人员数量"][i]);
  450. Console.WriteLine("===============================================================");
  451. }
  452. }
  453. foreach (var item in self.JJJYMissions)
  454. {
  455. foreach (var item1 in item.aircraftSJDatas)
  456. {
  457. 识别成功率 += float.Parse(item1.Value["识别成功率"][i]);
  458. 人员数量 += float.Parse(item1.Value["人员数量"][i]);
  459. 识别数量 += float.Parse(item1.Value["识别数量"][i]);
  460. if (任务准备时间 < float.Parse(item1.Value["任务准备时间"][i]))
  461. 任务准备时间 = float.Parse(item1.Value["任务准备时间"][i]);
  462. 平均搜索时间 += float.Parse(item1.Value["平均搜索时间"][i]);
  463. 平均救助时间 += float.Parse(item1.Value["平均救助时间"][i]);
  464. 总飞行时间 += float.Parse(item1.Value["总飞行时间"][i]);
  465. 人员存活率 += float.Parse(item1.Value["人员存活率"][i]);
  466. aircreftCount++;
  467. if (item1.Value["平均搜索时间"][i] != "0")
  468. searchCount++;
  469. if (item1.Value["平均救助时间"][i] != "0")
  470. jzCount++;
  471. Console.WriteLine("机降救援" + item1.Key + "识别成功数:" + item1.Value["识别成功率"][i]);
  472. Console.WriteLine("机降救援" + item1.Key + "识别数量:" + item1.Value["识别数量"][i]);
  473. Console.WriteLine("机降救援" + item1.Key + "任务准备时间:" + item1.Value["任务准备时间"][i]);
  474. Console.WriteLine("机降救援" + item1.Key + "平均搜索时间:" + item1.Value["平均搜索时间"][i]);
  475. Console.WriteLine("机降救援" + item1.Key + "平均救助时间:" + item1.Value["平均救助时间"][i]);
  476. Console.WriteLine("机降救援" + item1.Key + "总飞行时间:" + item1.Value["总飞行时间"][i]);
  477. Console.WriteLine("机降救援" + item1.Key + "存活人数:" + item1.Value["人员存活率"][i]);
  478. Console.WriteLine("机降救援" + item1.Key + "人员数量:" + item1.Value["人员数量"][i]);
  479. Console.WriteLine("===============================================================");
  480. }
  481. }
  482. foreach (var item in self.SHJMissions)
  483. {
  484. foreach (var item1 in item.aircraftSJDatas)
  485. {
  486. 识别成功率 += float.Parse(item1.Value["识别成功率"][i]);
  487. 人员数量 += float.Parse(item1.Value["人员数量"][i]);
  488. 识别数量 += float.Parse(item1.Value["识别数量"][i]);
  489. if (任务准备时间 < float.Parse(item1.Value["任务准备时间"][i]))
  490. 任务准备时间 = float.Parse(item1.Value["任务准备时间"][i]);
  491. 平均搜索时间 += float.Parse(item1.Value["平均搜索时间"][i]);
  492. 平均救助时间 += float.Parse(item1.Value["平均救助时间"][i]);
  493. 总飞行时间 += float.Parse(item1.Value["总飞行时间"][i]);
  494. 人员存活率 += float.Parse(item1.Value["人员存活率"][i]);
  495. aircreftCount++;
  496. if (item1.Value["平均搜索时间"][i] != "0")
  497. searchCount++;
  498. if (item1.Value["平均救助时间"][i] != "0")
  499. jzCount++;
  500. Console.WriteLine("索滑降" + item1.Key + "识别成功数:" + item1.Value["识别成功率"][i]);
  501. Console.WriteLine("索滑降" + item1.Key + "识别数量:" + item1.Value["识别数量"][i]);
  502. Console.WriteLine("索滑降" + item1.Key + "任务准备时间:" + item1.Value["任务准备时间"][i]);
  503. Console.WriteLine("索滑降" + item1.Key + "平均搜索时间:" + item1.Value["平均搜索时间"][i]);
  504. Console.WriteLine("索滑降" + item1.Key + "平均救助时间:" + item1.Value["平均救助时间"][i]);
  505. Console.WriteLine("索滑降" + item1.Key + "总飞行时间:" + item1.Value["总飞行时间"][i]);
  506. Console.WriteLine("索滑降" + item1.Key + "存活人数:" + item1.Value["人员存活率"][i]);
  507. Console.WriteLine("索滑降" + item1.Key + "人员数量:" + item1.Value["人员数量"][i]);
  508. Console.WriteLine("===============================================================");
  509. }
  510. }
  511. SJAllTotalTaskPerformance allTotalTaskPerformance = new SJAllTotalTaskPerformance();
  512. if (人员存活率 != 0)
  513. 任务是否成功 = 1;
  514. if (任务是否成功 == 1)
  515. self.seaSuccessCount++;
  516. if (识别数量 != 0)
  517. allTotalTaskPerformance.识别成功率 = (识别成功率 / 识别数量).ToString();
  518. else
  519. allTotalTaskPerformance.识别成功率 = "0";
  520. allTotalTaskPerformance.任务准备时间 = 任务准备时间.ToString();
  521. if (searchCount != 0)
  522. allTotalTaskPerformance.平均搜索时间 = (平均搜索时间 / searchCount).ToString("f4"); // aircreftCount
  523. else
  524. allTotalTaskPerformance.平均搜索时间 = "0";
  525. if (jzCount != 0)
  526. allTotalTaskPerformance.平均救助时间 = (平均救助时间 / jzCount).ToString("f4"); // aircreftCount
  527. else
  528. allTotalTaskPerformance.平均救助时间 = "0";
  529. allTotalTaskPerformance.总飞行时间 = 总飞行时间.ToString("f4");
  530. allTotalTaskPerformance.海上搜索覆盖面积 = 海上搜索覆盖面积.ToString();//"0.6".ToString();//"60%"
  531. allTotalTaskPerformance.环境搜索覆盖面积 = 环境搜索覆盖面积.ToString();//"0.6".ToString();
  532. allTotalTaskPerformance.任务是否成功 = 任务是否成功.ToString();
  533. if (人员数量 != 0)
  534. allTotalTaskPerformance.人员存活率 = (人员存活率 / 人员数量).ToString();
  535. else
  536. allTotalTaskPerformance.人员存活率 = "0";
  537. Console.WriteLine("单轮次总体指标识别成功率:" + allTotalTaskPerformance.识别成功率);
  538. Console.WriteLine("单轮次总体指标任务准备时间:" + allTotalTaskPerformance.任务准备时间);
  539. Console.WriteLine("单轮次总体指标平均搜索时间:" + allTotalTaskPerformance.平均搜索时间);
  540. Console.WriteLine("单轮次总体指标平均救助时间:" + allTotalTaskPerformance.平均救助时间);
  541. Console.WriteLine("单轮次总体指标总飞行时间:" + allTotalTaskPerformance.总飞行时间);
  542. Console.WriteLine("单轮次总体指标海上搜索覆盖面积:" + allTotalTaskPerformance.海上搜索覆盖面积);
  543. Console.WriteLine("单轮次总体指标环境搜索覆盖面积:" + allTotalTaskPerformance.环境搜索覆盖面积);
  544. Console.WriteLine("单轮次总体指标任务是否成功:" + allTotalTaskPerformance.任务是否成功);
  545. Console.WriteLine("单轮次总体指标人员存活率:" + allTotalTaskPerformance.人员存活率);
  546. Console.WriteLine("===============================================================");
  547. Dictionary<string, Dictionary<string, string>> report = new Dictionary<string, Dictionary<string, string>>();
  548. if (self.isSea)
  549. {
  550. report["总任务表现"] = new Dictionary<string, string>
  551. {
  552. { "识别成功率", allTotalTaskPerformance.识别成功率.ToString() },
  553. { "任务准备时间", allTotalTaskPerformance.任务准备时间.ToString() },
  554. { "平均搜索时间", allTotalTaskPerformance.平均搜索时间.ToString() },
  555. { "平均救助时间", allTotalTaskPerformance.平均救助时间.ToString() },
  556. { "总飞行时间", allTotalTaskPerformance.总飞行时间.ToString() },
  557. { "海上搜索覆盖面积", allTotalTaskPerformance.海上搜索覆盖面积.ToString() },
  558. { "任务是否成功", allTotalTaskPerformance.任务是否成功.ToString() },
  559. { "人员存活率", allTotalTaskPerformance.人员存活率.ToString() }
  560. };
  561. }
  562. else if (self.isLand)
  563. {
  564. report["总任务表现"] = new Dictionary<string, string>
  565. {
  566. { "识别成功率", allTotalTaskPerformance.识别成功率.ToString() },
  567. { "任务准备时间", allTotalTaskPerformance.任务准备时间.ToString() },
  568. { "平均搜索时间", allTotalTaskPerformance.平均搜索时间.ToString() },
  569. { "平均救助时间", allTotalTaskPerformance.平均救助时间.ToString() },
  570. { "总飞行时间", allTotalTaskPerformance.总飞行时间.ToString() },
  571. { "环境搜索覆盖面积", allTotalTaskPerformance.环境搜索覆盖面积.ToString() },
  572. { "任务是否成功", allTotalTaskPerformance.任务是否成功.ToString() },
  573. { "人员存活率", allTotalTaskPerformance.人员存活率.ToString() }
  574. };
  575. }
  576. self.SaveSeaSJ(report);
  577. }
  578. self.ReportAllSJSea();
  579. isReport = true;
  580. Console.WriteLine("所有任务执行完成");
  581. }
  582. }
  583. }