瀏覽代碼

Merge branch 'v1.0' of http://8.140.244.224:10880/zansimple/SimulationServer into v1.0

zansimple 2 天之前
父節點
當前提交
10352684ea

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

@@ -21,6 +21,8 @@ public class AircraftDY : AircraftEntity
     public override void End()
     {
         TotalFuelConsumption = FXJHGenerate.CalculateTotalFuelConsumption(FlightPlanEditor, TurningPoints);
+        
+        base.End();
     }
 
     public override void Reset()

+ 2 - 11
SimulationServer/Entity/Aircrafts/AircraftJJ.cs

@@ -7,23 +7,14 @@ namespace SimulationServer;
 
 public class AircraftJJ : AircraftEntity
 {
-    public string NextMissionId; // 下一个任务ID
     public MissionEndPoint missionEndPoint = new MissionEndPoint();
-
-    public int LandingPersonnel; //personCount
-    public MHRescueMission mhRescueMission;
-
-    public int landingPoint = 0; // 任务文件获取
-
-    public JJJYTask taskContent;
     public TaskParameter taskParameter;
     public RescueDemandInfo rescueDemandInfo;
-    public bool IsOver;
-    public bool Success;
 
     public override void End()
     {
-        TotalFuelConsumption = TurningPoints[0].RemainingFuel - TurningPoints[^1].RemainingFuel;
+        TotalFuelConsumption = FXJHGenerate.CalculateTotalFuelConsumption(FlightPlanEditor, TurningPoints);
+        base.End();
     }
 
     public override void Reset()

+ 1 - 3
SimulationServer/Entity/Aircrafts/AircraftKTKS.cs

@@ -10,9 +10,6 @@ public class AircraftKTKS : AircraftEntity
     public MissionEndPoint missionEndPoint = new MissionEndPoint();
 
     public int LandingPersonnel; //personCount
-    public MHRescueMission mhRescueMission;
-
-    public int landingPoint = 0; // 任务文件获取
 
     public MissionPoint missionpoint = new MissionPoint();
 
@@ -31,6 +28,7 @@ public class AircraftKTKS : AircraftEntity
     public override void End()
     {
         TotalFuelConsumption = FXJHGenerate.CalculateTotalFuelConsumption(FlightPlanEditor, TurningPoints);
+        base.End();
     }
 
     public override void Reset()

+ 1 - 0
SimulationServer/Entity/Aircrafts/AircraftLandSJ.cs

@@ -410,6 +410,7 @@ public class AircraftLandSJ : AircraftEntity
                                TurningPoints[TurningPoints.Count - 1].RemainingFuel;
 
         IsOver = true;
+        base.End();
     }
 }
 

+ 2 - 1
SimulationServer/Entity/Aircrafts/AircraftSHJ.cs

@@ -18,7 +18,8 @@ public class AircraftSHJ : AircraftEntity
     public double resulttime;
     public override void End()
     {
-        TotalFuelConsumption = TurningPoints[0].RemainingFuel - TurningPoints[^1].RemainingFuel;
+        TotalFuelConsumption = FXJHGenerate.CalculateTotalFuelConsumption(FlightPlanEditor, TurningPoints);
+        base.End();
     }
 
     public override void Reset()

+ 1 - 0
SimulationServer/Entity/Aircrafts/AircraftSJ.cs

@@ -519,6 +519,7 @@ public class AircraftSJ : AircraftEntity
         ////getNCData.GetData();
 
         IsOver = true;
+        base.End();
     }
 }
 

+ 1 - 0
SimulationServer/Entity/Aircrafts/AircraftYJTXJS.cs

@@ -106,6 +106,7 @@ public class AircraftYJTXJS : AircraftEntity
         {
             // 输出报告
             YJTX.PostProcessTotal(ResultStartTime, ResultEndTime, TXR,Unit ,GridResult, NetResult, 0, Timestep,Path);
+            End();
             return;
         }
         Console.WriteLine("正在计算Time=" + Time + "通信情况,请稍等");

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

@@ -17,6 +17,7 @@ public class AircraftZS : AircraftEntity
     public override void End()
     {
         TotalFuelConsumption = FXJHGenerate.CalculateTotalFuelConsumption(FlightPlanEditor, TurningPoints);
+        base.End();
     }
 
     public override void Reset()

+ 0 - 68
SimulationServer/Entity/Missions/BaseMissionSystem.cs

@@ -1,68 +0,0 @@
-using KYFramework;
-using KYFramework.Network;
-using Model;
-using Point = KYFramework.Network.Point;
-
-namespace SimulationServer;
-
-public static class BaseMissionSystem
-{
-    /// <summary>
-    /// 开始同步信息到客户端
-    /// </summary>
-    /// <param name="self"></param>
-    public static void StartAsync(this BaseMission self)
-    {
-        foreach (var aircraft in self.Aircrafts)
-        {
-            var location = FXJHGenerate.GetAllCurrentLocation(aircraft.TurningPoints, self.SimulationTime);
-
-            // 同步信息到客户端
-            self.SyncLocation(location.Item1, aircraft, location.Item3);
-
-            if (location.Item2) // 判断飞机飞到终点
-            {
-                aircraft.SyncOver = true;
-            }
-        }
-
-        // 如果 aircraft.SyncOver 为 true ,从列表一处当前aircraft
-        self.Aircrafts.RemoveAll(a => a.SyncOver);
-
-        if (self.Aircrafts.Count == 0)
-        {
-            Game.EventSystem.Publish(new SimulationOver { Mission = self });
-            self.IsOver = true;
-            Game.Scene.GetComponent<TaskComponent>().Over();
-            return;
-        }
-
-        self.SimulationTime += Init.SimulationSpeed;
-        Task.Delay(TimeSpan.FromSeconds(1f)).ContinueWith(t => self.StartAsync());
-    }
-
-    public static void SyncLocation(this BaseMission self, CurrentLocation location, AircraftEntity aircraft, int index)
-    {
-        // 同步信息到客户端
-        if (location != null)
-        {
-            // 同步信息到客户端
-            S2C_TurningPoint s2CTurningPointOutput = new S2C_TurningPoint();
-            s2CTurningPointOutput.AircraftID = aircraft.AircraftId;
-            //s2CTurningPointOutput.TurningPointName = fly.TurningPointName;
-
-            s2CTurningPointOutput.PresentMission = location.PresentMission;
-
-            s2CTurningPointOutput.PresentLocation = new Point()
-            {
-                Altitude = location.CurrentHei,
-                Latitude = location.CurrentLat,
-                Longitude = location.CurrentLon
-            };
-            s2CTurningPointOutput.TaskId = self.MissionId;
-            s2CTurningPointOutput.NextTurningPointIndex = index;
-            s2CTurningPointOutput.PresentVelocity = location.Currentvelo;
-            SessionComponent.Instance.Session.Send(s2CTurningPointOutput);
-        }
-    }
-}

+ 1 - 3
SimulationServer/Entity/Missions/JJJYMission.cs

@@ -6,9 +6,6 @@ namespace SimulationServer;
 
 public class JJJYMission : BaseMission
 {
-  
-    public double SimulationTime;
-
     private int currentExecuteCount = 1;
     public int ExecutionContext = 0;
 
@@ -150,6 +147,7 @@ public class JJJYMission : BaseMission
 
     public void ReportSJ()
     {
+        date = DateTime.Now.ToString("yyyy-MM-dd");
         string path = $"Reports/{date}/{MissionId}";
         if (!Directory.Exists(path)) Directory.CreateDirectory(path);
         foreach (var kv in singleReport)

+ 1 - 3
SimulationServer/Entity/Missions/KTKSMission.cs

@@ -7,8 +7,6 @@ namespace SimulationServer;
 
 public class KTKSMission : BaseMission
 {
-    public double SimulationTime;
-
     private int currentExecuteCount = 1;
     public int ExecutionContext = 0;
 
@@ -150,7 +148,7 @@ public class KTKSMission : BaseMission
 
     public void ReportSJ()
     {
-        //string data = DateTime.Now.ToString("yyyy-MM-dd");
+        date = DateTime.Now.ToString("yyyy-MM-dd");
         string path = $"Reports/{date}/{MissionId}";
         if (!Directory.Exists(path)) Directory.CreateDirectory(path);
         foreach (var kv in singleReport)

+ 0 - 3
SimulationServer/Entity/Missions/LandSJRescueMission.cs

@@ -28,9 +28,6 @@ public class LandSJRescueMission : BaseMission
         IsRunning = false;
         Log.Info($"{MissionId} 任务结束!");
 
-        //SaveSJ();
-        //SaveTotalMH();
-        //ReportSJ();
 
         if (currentExecuteCount > ExecutionContext)
         {

+ 0 - 263
SimulationServer/Entity/Missions/MHRescueMission.cs

@@ -1,263 +0,0 @@
-using KYFramework;
-using SimulationServer.Utils;
-
-namespace SimulationServer;
-
-public class MHRescueMission : BaseMission
-{
-    #region 仿真程序
-    public int SimulationTime = 1;
-    public Action End;
-    #endregion
-    
-    #region 任务信息
-    public double SimTime;
-    public double InitArea;
-    // 火场点
-    public FireGround FireGround;
-    public double slope;
-    public double area;
-    public double tn;
-    public List<string> successes = new List<string>();
-    #endregion
-
-    public override void Reset()
-    {
-        SimTime = 0;
-        area = 0;
-        tn = 0;
-        FireGround.countArea.burnarea = InitArea;
-        Aircrafts?.ForEach(a => a.Reset());
-    }
-    
-    public override void Start()
-    {
-        Log.Info($"{MissionId} 任务开始!");
-        Aircrafts?.ForEach(a => a.Start());
-        //IsRunning = true;
-    }
-    
-    public override void EndMission()
-    {
-        base.EndMission();
-        
-        IsRunning = false;
-        Log.Info($"{MissionId} 任务结束!");
-        // 灭火完成 任务结束
-        End?.Invoke();
-        
-        SaveMH();
-        
-        SaveTotalMH();
-        
-        ReportMH();
-
-        var readyTime = Aircrafts.First().TaskReadyTime;
-        Task.Delay(TimeSpan.FromSeconds(readyTime)).ContinueWith(t => this.StartAsyncMH());
-    }
-
-    
-    /// <summary>
-    /// 任务结束一次指标报告
-    /// </summary>
-    public void SaveMH()
-    {
-        foreach (AircraftEntity aircraftEntity in Aircrafts)
-        {
-            // 输出 area
-            var staticCapacity = aircraftEntity.GetComponent<StaticCapacityComponent>();
-            var taskPerformance = aircraftEntity.GetComponent<TaskPerformanceComponent>();
-            var economical = aircraftEntity.GetComponent<EconomicalComponent>();
-
-            if(staticCapacity == null || taskPerformance == null || economical == null) continue;
-            
-            staticCapacity.FillData(aircraftEntity.Db);
-            taskPerformance.FillData(aircraftEntity.Db);
-            economical.FillData();
-
-            string key = aircraftEntity.AircraftId;
-            
-            if (!singleReport.ContainsKey(key))
-            {
-                singleReport[key] = new Dictionary<string, Dictionary<string, List<string>>>();
-            }
-           
-            Dictionary<string, Dictionary<string, string>> staticReport = staticCapacity.GetReport();
-            foreach (var kv in staticReport)
-            {
-                if(!singleReport[key].ContainsKey(kv.Key)) singleReport[key][kv.Key] = new Dictionary<string, List<string>>();
-                foreach (var kv2 in kv.Value)
-                {
-                    if (!singleReport[key][kv.Key].ContainsKey(kv2.Key)) singleReport[key][kv.Key][kv2.Key] = new List<string>();
-                    singleReport[key][kv.Key][kv2.Key].Add(kv2.Value);
-                }
-            }
-           
-            Dictionary<string, Dictionary<string, string>> taskReport = taskPerformance.GetReport();
-            foreach (var kv in taskReport)
-            {
-                if(!singleReport[key].ContainsKey(kv.Key)) singleReport[key][kv.Key] = new Dictionary<string, List<string>>();
-                foreach (var kv2 in kv.Value)
-                {
-                    if (!singleReport[key][kv.Key].ContainsKey(kv2.Key)) singleReport[key][kv.Key][kv2.Key] = new List<string>();
-                    singleReport[key][kv.Key][kv2.Key].Add(kv2.Value);
-                }
-            }
-
-            Dictionary<string, Dictionary<string, string>> economicalReport = economical.GetReport();
-            
-            foreach (var kv in economicalReport)
-            {
-                if(!singleReport[key].ContainsKey(kv.Key)) singleReport[key][kv.Key] = new Dictionary<string, List<string>>();
-                foreach (var kv2 in kv.Value)
-                {
-                    if (!singleReport[key][kv.Key].ContainsKey(kv2.Key)) singleReport[key][kv.Key][kv2.Key] = new List<string>();
-                    singleReport[key][kv.Key][kv2.Key].Add(kv2.Value);
-                }
-            }
-        }
-    }
-
-    public void SaveTotalMH()
-    {
-        var totalPerformance = GetComponent<TotalTaskPerformanceComponent>();
-        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>();
-                
-                if(kv2.Key == "任务成功率/-")
-                {
-                    successes.Add(kv2.Value);
-                } 
-                totalReport[kv.Key][kv2.Key].Add(kv2.Value);
-            }
-        }
-        
-        var TotalEconomical = GetComponent<TotalEconomicalComponent>();
-        TotalEconomical.FillData();
-        var totalEconomicalReport = TotalEconomical.GetReport();
-        foreach (var kv in totalEconomicalReport)
-        {
-            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);
-            }
-        }
-        
-        var TotalEquipment = GetComponent<EquipmentComponent>();
-        TotalEquipment.FillData();
-        var totalEquipmentReport = TotalEquipment.GetReport();
-        foreach (var kv in totalEquipmentReport)
-        {
-            if(!equipReport.ContainsKey(kv.Key)) equipReport[kv.Key] = new Dictionary<string, List<string>>();
-            foreach (var kv2 in kv.Value)
-            {
-                if (!equipReport[kv.Key].ContainsKey(kv2.Key)) equipReport[kv.Key][kv2.Key] = new List<string>();
-                equipReport[kv.Key][kv2.Key].Add(kv2.Value);
-            }
-        }
-    }
-    
-    public float getSuccessRate()
-    {
-        int count = 0;
-        foreach (string success in successes)
-        {
-            if(success == "成功")
-            {
-                count++;
-            }
-        }
-
-        return count / successes.Count;
-    }
-
-    public void ReportMH()
-    {
-        string data = DateTime.Now.ToString("yyyy-MM-dd");
-        string path = $"Reports/MH/{data}/{MissionId}";
-        if(!Directory.Exists(path)) Directory.CreateDirectory(path);
-        foreach (var kv in singleReport)
-        {
-            string filePath = $"{path}/{kv.Key}灭火任务单机指标报告.xls";
-            DataTableExtensions.SaveToExcel(filePath, kv.Value);
-        }
-
-        foreach (KeyValuePair<string,Dictionary<string,List<string>>> keyValuePair in totalReport)
-        {
-            foreach (KeyValuePair<string,List<string>> kv in keyValuePair.Value)
-            {
-                if(kv.Key == "任务成功率/-")
-                {
-                    double successRate = getSuccessRate();
-                    kv.Value.Add((successRate * 100) + "%");
-                }
-                else
-                {
-                    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);
-        
-        string equicPath = $"{path}/{"装备体系评估报告"}.xls";
-        DataTableExtensions.SaveToExcel(equicPath, equipReport);
-    }
-}
-
-[ObjectSystem]
-public class MhRescueMissionAwakeSystem : AwakeSystem<MHRescueMission,FireGround,double>
-{
-    public override void Awake(MHRescueMission self, FireGround fire, double initArea)
-    {
-        self.FireGround = fire;
-        self.InitArea = initArea;
-    }
-}
-
-[ObjectSystem]
-public class RescueMissionUpdateSystem : UpdateSystem<MHRescueMission>
-{
-    public override void Update(MHRescueMission self)
-    {
-        if(!self.IsRunning) return;
-        if (self.FireGround.countArea.burnarea <= 0)
-        {
-            self.Success = true;
-            self.EndMission();
-            return;
-        }
-
-        if(self.tn >= 10 * 60 * 60)
-        {
-            self.Success = false;
-            self.EndMission();
-            return;
-        }
-        
-        self.Aircrafts.Sort((a, b) => a.T.CompareTo(b.T));
-        self.Aircrafts.ForEach(a => a.Update(self.SimTime));
-        self.SimTime += 1 * TaskComponent.Speed;
-    }
-}

+ 0 - 97
SimulationServer/Entity/Missions/MHRescueMissionSystem.cs

@@ -1,97 +0,0 @@
-using KYFramework;
-using KYFramework.Network;
-using Model;
-using MongoDB.Bson;
-using Point = KYFramework.Network.Point;
-
-namespace SimulationServer;
-
-public static class MHRescueMissionSystem
-{
-    /// <summary>
-    /// 开始同步信息到客户端
-    /// </summary>
-    /// <param name="self"></param>
-    public static void StartAsyncMH(this MHRescueMission self)
-    {
-        for (int i = 0; i < self.Aircrafts.Count; i++)
-        {
-            if(self.Aircrafts[i].SyncOver) continue;
-            
-            var location = FXJHGenerate.GetAllCurrentLocation(self.Aircrafts[i].TurningPoints, self.SimulationTime);
-            
-            if (self.Aircrafts[i] is AircraftMH aircraftMh && aircraftMh.FireGrids.Count > 0 )
-            {
-                Fire.FireGrid fireGrid = aircraftMh.FireGrids.First();
-                // 发送火焰数据
-                if (self.SimulationTime > fireGrid.Time)
-                {
-                    //洒水了
-                    S2C_FireSpread fireSpread = new S2C_FireSpread();
-                    fireSpread.AircraftId = aircraftMh.AircraftId;
-                    fireSpread.FirePointId = self.FireGround.FirePointName;
-                    fireSpread.FireGrids = fireGrid.FireGrids;
-                    fireSpread.FiredGrids = fireGrid.FiredGrids;
-                    SessionComponent.Instance.Session.Send(fireSpread);
-                    aircraftMh.FireGrids.RemoveAt(0);
-                }
-            }
-            
-            // 同步信息到客户端
-            self.SyncLocation(location.Item1, self.Aircrafts[i],location.Item3);
-            
-            if (location.Item2) // 判断飞机飞到终点
-            {
-                self.Aircrafts[i].SyncOver = true;
-                Log.Info(self.Aircrafts[i].AircraftId + "飞机到终点");
-            }
-            
-        }
-        
-        // 如果 aircraft.SyncOver 为 true ,从列表一处当前aircraft
-        //self.aircrafts.RemoveAll(a => a.SyncOver);
-
-        bool over = true;
-        
-        foreach (var aircraft in self.Aircrafts)
-        {
-            if (aircraft.SyncOver == false)
-                over = false;
-        }
-        
-        if (over)
-        {
-            // 任务结束
-            //Game.EventSystem.Publish(new MHSimulationOver {Mission = self});
-            return;
-        }
-        
-        self.SimulationTime += Init.SimulationSpeed;
-        Task.Delay(TimeSpan.FromSeconds(1f)).ContinueWith(t => self.StartAsyncMH());
-    }
-    
-    public static void SyncLocation(this MHRescueMission self,CurrentLocation location,AircraftEntity aircraft,int index)
-    {
-        // 同步信息到客户端
-        if (location != null && aircraft != null)
-        {
-            // 同步信息到客户端
-            S2C_TurningPoint s2CTurningPointOutput = new S2C_TurningPoint();
-            s2CTurningPointOutput.AircraftID = aircraft.AircraftId;
-            //s2CTurningPointOutput.TurningPointName = fly.TurningPointName;
-
-            s2CTurningPointOutput.PresentMission = location.PresentMission;
-            
-            s2CTurningPointOutput.PresentLocation = new Point()
-            {
-                Altitude = location.CurrentHei,
-                Latitude = location.CurrentLat,
-                Longitude = location.CurrentLon
-            };
-            s2CTurningPointOutput.NextTurningPointIndex = index;
-            s2CTurningPointOutput.PresentVelocity = location.Currentvelo;
-            SessionComponent.Instance.Session.Send(s2CTurningPointOutput); 
-            //Log.Info($"飞机{aircraft.Name} 当前位置: {location.ToJson()}");
-        }
-    }
-}

+ 0 - 3
SimulationServer/Entity/SHJMission.cs

@@ -6,9 +6,6 @@ namespace SimulationServer;
 
 public class SHJMission : BaseMission
 {
-    public double SimulationTime;
-
-
     private int currentExecuteCount = 1;
     public int ExecutionContext = 0;
 

+ 0 - 1
SimulationServer/EventHandler/CreateTaskEventHandler.cs

@@ -487,7 +487,6 @@ public class CreateLandSJEventHandler : AEvent<CreateLandSXTask>
                 aircraft.Name = config.JJJYTask.aircraftInfos[i].AircraftType;
                 aircraft.TaskReadyTime = config.JJJYTask.missionInformation.TakeoffPreparationTime;
                 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);
                 //aircraft.MissionEndPoint = new MissionEndPoint