Browse Source

添加现场急救子任务相关代码

liyang 3 months ago
parent
commit
a7ae4583bf

+ 16 - 18
Models/SimulationCommon/EditorConfig.cs

@@ -135,22 +135,21 @@ public class MedicalSuppliesInfo //医疗物品需求信息
     public TargetType TargetType;
     public TargetType TargetType;
 }
 }
 
 
-//public class MedicalTargetPoint //医疗目标点坐标
-//{
-//    [JsonProperty("目标点ID")]
-//    public int TargetPointId;
-//    [JsonProperty("目标点经度")]
-//    public double TargetPointLongitude;
-//    [JsonProperty("目标点纬度")]
-//    public double TargetPointLatitude;
-//    [JsonProperty("目标点海拔")]
-//    public double TargetPointHeight;
-//    [JsonProperty("目标气象信息")]
-//    public TargetQiXiangInfo[] TargetQiXiangInfos;
-//    [JsonProperty("目标类型")]
-//    public TargetType TargetType;
-//}
-
+public class MedicalTargetPoint //医疗目标点坐标
+{
+    [JsonProperty("目标点ID")]
+    public int TargetPointId;
+    [JsonProperty("目标点经度")]
+    public double TargetPointLongitude;
+    [JsonProperty("目标点纬度")]
+    public double TargetPointLatitude;
+    [JsonProperty("目标点海拔")]
+    public double TargetPointHeight;
+    [JsonProperty("目标气象信息")]
+    public TargetQiXiangInfo[] TargetQiXiangInfos;
+    [JsonProperty("目标类型")]
+    public TargetType TargetType;
+}
 
 
 public class TargetQiXiangInfo
 public class TargetQiXiangInfo
 {
 {
@@ -206,7 +205,6 @@ public class TargetQiXiangInfo
     public string Weather;
     public string Weather;
 }
 }
 
 
-
 public class TargetType
 public class TargetType
 {
 {
     [JsonProperty("类型")]
     [JsonProperty("类型")]
@@ -333,7 +331,7 @@ public class EditorConfig
     [JsonProperty("医疗物品需求信息")]
     [JsonProperty("医疗物品需求信息")]
     public List<MedicalSuppliesInfo> medicalSuppliesInfos = new List<MedicalSuppliesInfo>();
     public List<MedicalSuppliesInfo> medicalSuppliesInfos = new List<MedicalSuppliesInfo>();
     [JsonProperty("医疗目标点坐标")]
     [JsonProperty("医疗目标点坐标")]
-    public List<TargetPoint> medicalTargetPoints = new List<TargetPoint>();
+    public List<MedicalTargetPoint> medicalTargetPoints = new List<MedicalTargetPoint>();
     [JsonProperty("火点")]
     [JsonProperty("火点")]
     public List<FirePoint> firePoints = new List<FirePoint>();
     public List<FirePoint> firePoints = new List<FirePoint>();
     [JsonProperty("天气信息")]
     [JsonProperty("天气信息")]

+ 12 - 0
Models/SimulationCommon/FlightPlanEditor.cs

@@ -20,6 +20,8 @@ public class FlightPlanEditor
     public FirePoint[] firepoint = new FirePoint[1];
     public FirePoint[] firepoint = new FirePoint[1];
     [JsonProperty("搜救目标初始点")]
     [JsonProperty("搜救目标初始点")]
     public TargetPoint[] targetpoint = new TargetPoint[1];
     public TargetPoint[] targetpoint = new TargetPoint[1];
+    [JsonProperty("医疗目标初始点")]
+    public MedicalTargetPoint[] medicalTargetPoint = new MedicalTargetPoint[1];
 
 
     public static FlightPlanEditor Create(AircraftParameter aircraftparameter, CityWeather cityweather, Base originbase, AirRoute[] airroute, MissionPoint missionpoint, FirePoint[] firepoint)
     public static FlightPlanEditor Create(AircraftParameter aircraftparameter, CityWeather cityweather, Base originbase, AirRoute[] airroute, MissionPoint missionpoint, FirePoint[] firepoint)
     {
     {
@@ -52,6 +54,16 @@ public class FlightPlanEditor
         flightPlanEditor.targetpoint = targetPoints;
         flightPlanEditor.targetpoint = targetPoints;
         return flightPlanEditor;
         return flightPlanEditor;
     }
     }
+
+    public static FlightPlanEditor Create(AircraftParameter aircraftparameter, CityWeather cityweather, Base originbase, MedicalTargetPoint[] targetPoints)
+    {
+        FlightPlanEditor flightPlanEditor = new FlightPlanEditor();
+        flightPlanEditor.aircraftparameter = aircraftparameter;
+        flightPlanEditor.cityweather = cityweather;
+        flightPlanEditor.originbase = originbase;
+        flightPlanEditor.medicalTargetPoint = targetPoints;
+        return flightPlanEditor;
+    }
 }
 }
 
 
 
 

+ 4 - 4
Models/SimulationCommon/TaskConfig.cs

@@ -314,7 +314,7 @@ public class XCJJTask //现场急救
     [JsonProperty("应用航空器")]
     [JsonProperty("应用航空器")]
     public AircraftInfo[] aircraftInfos;
     public AircraftInfo[] aircraftInfos;
     [JsonProperty("任务参数")]
     [JsonProperty("任务参数")]
-    public TaskParameter[] KZDYParameters;
+    public TaskParameter[] XCJJParameters;
 }
 }
 
 
 public class YLZYTask //医疗转运任务
 public class YLZYTask //医疗转运任务
@@ -324,7 +324,7 @@ public class YLZYTask //医疗转运任务
     [JsonProperty("应用航空器")]
     [JsonProperty("应用航空器")]
     public AircraftInfo[] aircraftInfos;
     public AircraftInfo[] aircraftInfos;
     [JsonProperty("任务参数")]
     [JsonProperty("任务参数")]
-    public TaskParameter[] KZDYParameters;
+    public TaskParameter[] YLZYParameters;
 }
 }
 
 
 public class YLWPYSTask //医疗物品运送
 public class YLWPYSTask //医疗物品运送
@@ -334,7 +334,7 @@ public class YLWPYSTask //医疗物品运送
     [JsonProperty("应用航空器")]
     [JsonProperty("应用航空器")]
     public AircraftInfo[] aircraftInfos;
     public AircraftInfo[] aircraftInfos;
     [JsonProperty("任务参数")]
     [JsonProperty("任务参数")]
-    public TaskParameter[] KZDYParameters;
+    public TaskParameter[] YLWPYSParameters;
 }
 }
 
 
 
 
@@ -345,7 +345,7 @@ public class JCDZZYTask //绞车吊载转运任务
     [JsonProperty("应用航空器")]
     [JsonProperty("应用航空器")]
     public AircraftInfo[] aircraftInfos;
     public AircraftInfo[] aircraftInfos;
     [JsonProperty("任务参数")]
     [JsonProperty("任务参数")]
-    public TaskParameter[] KZDYParameters;
+    public TaskParameter[] JCDZZYParameters;
 }
 }
 
 
 public class DMMHTask
 public class DMMHTask

+ 358 - 0
SimulationServer/Entity/AircraftXCJJ.cs

@@ -0,0 +1,358 @@
+using KYFramework;
+using MathNet.Numerics.Distributions;
+using Model;
+using MongoDB.Bson;
+using SimulationCommon;
+using static SimulationServer.AircraftXCJJ;
+
+namespace SimulationServer;
+
+public class AircraftXCJJ : AircraftEntity
+{
+    public XCJJTask taskContent;
+    public MissionEndPoint MissionEndPoint;
+    public bool IsOver;
+    public bool Success;
+    public TaskParameter taskParameter;
+    public GetNCData getNCData;
+    public double resulttime;
+
+    public bool isReadNC;
+
+    Text_readNC text_ReadNC;
+    public override void End()
+    {
+        TotalFuelConsumption = TurningPoints[0].RemainingFuel - TurningPoints[^1].RemainingFuel;
+    }
+
+    public override void Reset()
+    {
+        base.Reset();
+        IsOver = false;
+        Success = false;
+        TotalTime = 0;
+    }
+
+    public override void Start()
+    {
+        if (!isReadNC)
+        {
+            getNCData = new GetNCData();
+            getNCData.initlatitudes = FlightPlanEditor.medicalTargetPoint[0].TargetPointLatitude;
+            getNCData.initlongitudes = FlightPlanEditor.medicalTargetPoint[0].TargetPointLongitude;
+            bool isSuccess3 = false;
+            while (!isSuccess3)
+            {
+                isSuccess3 = getNCData.GetData();
+            }
+            text_ReadNC = new Text_readNC();
+            text_ReadNC.initlatitudes = FlightPlanEditor.medicalTargetPoint[0].TargetPointLatitude;
+            text_ReadNC.initlongitudes = FlightPlanEditor.medicalTargetPoint[0].TargetPointLongitude;
+            //text_ReadNC = new Text_readNC();
+            bool isSuccess = false;
+            while (!isSuccess)
+            {
+                isSuccess = text_ReadNC.GetNCData();
+            }
+            isReadNC = true;
+        }
+
+        int hour = Convert.ToInt32(taskContent.missionInformation.StartTime.Split("时")[0]);
+        int Day = Convert.ToInt32(taskContent.missionInformation.StartDate.Split("年")[1].Split("月")[1].Split("日")[0]);
+        ////Console.WriteLine("hour:" + hour);
+        //double windSpeed = Convert.ToDouble(TargetQiXiangInfoSave("风速", hour));
+        ////Console.WriteLine("windSpeed:" + windSpeed);
+        //double vis = Convert.ToDouble(TargetQiXiangInfoSave("能见度", hour));
+        ////Console.WriteLine("vis:" + vis);
+
+        FlightPlanEditor.missionpoint.MissionPointLatitude = FlightPlanEditor.medicalTargetPoint[0].TargetPointLatitude;
+        FlightPlanEditor.missionpoint.MissionPointLongitude = FlightPlanEditor.medicalTargetPoint[0].TargetPointLongitude;
+        FlightPlanEditor.missionpoint.MissionPointHeight = FlightPlanEditor.medicalTargetPoint[0].TargetPointHeight;
+        Console.WriteLine("Latitude:" + FlightPlanEditor.missionpoint.MissionPointLatitude + "_" + "Longitude:" + FlightPlanEditor.missionpoint.MissionPointLongitude + "_" + "Height:" + FlightPlanEditor.missionpoint.MissionPointHeight);
+
+        FXJHGenerate.FromStartToMission(FlightPlanEditor, ref TurningPoints);//生成从起点到任务段起点的航路点
+        //// 吊运上升速度  吊运下降速度 Task文件读取 // Editor里读天气根据时间
+        //resulttime = get_result_time_rope(taskParameter.Height, taskParameter.liftPersonnel, windSpeed, vis, taskParameter.liftUpSpeed, taskParameter.liftDownSpeed).time;//索滑降模型输出的索滑降时间
+        //Console.WriteLine("resulttime:" + resulttime);
+        //FXJHGenerate.SuoHuaJiang(resulttime, FlightPlanEditor, ref TurningPoints);
+
+        FXJHGenerate.FromMissionToEnd(FlightPlanEditor, FXJHGenerate.SuoHuaJiangMissionEndPoint(FlightPlanEditor), ref TurningPoints);
+        FXJHGenerate.FXJHTPDiedai(FlightPlanEditor, ref TurningPoints, Velocitys, FuelConsumptions);
+
+        // 飞到目标点时间与人员存活时间做对比  有一个人活着,整个任务成功
+        double time = 0;
+        for (int i = 0; i < TurningPoints.Count - 1; i++)
+        {
+            time += TurningPoints[i].SegmentFlightTime; // 判断幸存-1
+        }
+        //Console.WriteLine("time:" + time); 
+
+        // 假设前端输入  
+        int patientCount = FlightPlanEditor.medicalTargetPoint[0].TargetType.Count; // 伤患人数
+        List<string> diseaseTypes = new List<string>();
+        for (int i = 0; i < FlightPlanEditor.medicalTargetPoint[0].TargetType.diseaseTypes.Length; i++)
+        {
+            diseaseTypes.Add(FlightPlanEditor.medicalTargetPoint[0].TargetType.diseaseTypes[i]);
+        }
+        int medicCount = taskParameter.MedicalStaffCount; // 医护人员数量  
+
+        // 交接时间为5分钟  
+        double handoverTime = 5;
+
+        // 计算总急救时间  
+        double totalEmergencyTime = CalculateTotalEmergencyTime(diseaseTypes);
+
+        // 计算平均急救时间(每个医护人员分担的时间)  
+        double averageEmergencyTimePerMedic = totalEmergencyTime / medicCount;
+
+        // 计算总时间(平均急救时间 + 交接时间)  
+        double totalTime = averageEmergencyTimePerMedic + handoverTime;
+
+        Console.WriteLine($"总急救时间(平均每个医护人员): {averageEmergencyTimePerMedic} 分钟");
+        Console.WriteLine($"总时间(包括交接时间): {totalTime} 分钟");
+
+        Random rand = new Random();
+        List<Patient> patients = new List<Patient>();
+        for (int i = 0; i < patientCount; i++)
+        {
+            patients.Add(new Patient()
+            {
+                Id = i + 1,
+                DiseaseType = diseaseTypes[i],
+                GoldenHour = 0
+            });
+        }
+
+        patients = MedicalRescue.ProcessPatients(patients, rand);
+
+        // 对患者进行排序  
+        var sortedPatients = patients.OrderBy(p => DiseasePriorityService.GetPriority(p.DiseaseType))
+                                    .ThenBy(p => p.GoldenHour)
+                                    .ToList();
+
+        // 输出排序后的患者列表    // 从是事故点到医院的飞行时间 + 5分钟的交接时间 < 黄金时间 ? 成功:失败
+        foreach (var patient in sortedPatients)
+        {
+            Console.WriteLine($"sortedPatients ID: {patient.Id}, Disease: {patient.DiseaseType}, Golden Hour: {patient.GoldenHour:F2}");
+        }
+
+        // 注意:实际项目中,每次转运一名伤员的操作可能涉及更多的逻辑,比如更新数据库中的转运状态等。  
+
+
+        for (int i = 0; i < TurningPoints.Count; i++) // 总飞行时间
+        {
+            TotalTime += TurningPoints[i].SegmentFlightTime; // 总时间   //仿真轮次1 数值1
+        }
+        Console.WriteLine("TotalTime:" + TotalTime);
+
+        IsOver = true;
+        End();
+    }
+
+    static double CalculateTotalEmergencyTime(List<string> diseaseTypes)
+    {
+        double totalTime = 0;
+
+        // 这里假设有一个方法GetEmergencyTimeFromDatabase,它根据疾病类型从数据库获取急救时间,此处应为从数据库中读取
+        foreach (var diseaseType in diseaseTypes)
+        {
+            double emergencyTime = GetEmergencyTimeFromDatabase(diseaseType);
+            totalTime += emergencyTime;
+        }
+
+        return totalTime;
+    }
+
+    // 模拟从数据库获取急救时间的方法  
+    static double GetEmergencyTimeFromDatabase(string diseaseType)
+    {
+        // 这里应该是实际的数据库查询逻辑  
+        // 但为了示例,我们直接返回一个模拟值  
+        switch (diseaseType)
+        {
+            case "aa": //HeartAttack
+                return 2; // 心脏病急救时间为2分钟  
+            case "bb": //Stroke
+                return 5; // 中风急救时间为5分钟  
+            case "cc": //Trauma
+                return 10; // 创伤急救时间为10分钟  
+            case "dd":
+                return 15;
+            case "ee":
+                return 20;
+            default:
+                return 0;
+        }
+    }
+
+    // 假设从前端接收到的数据结构  
+    public class Patient
+    {
+        public int Id { get; set; }
+        public string DiseaseType { get; set; }
+        public double GoldenHour { get; set; } // 患者的黄金救援时间应由黄金救援时间程序获得
+    }
+
+    public class DiseaseInfo
+    {
+        public string DiseaseType { get; set; }
+        public double MinGoldenHour { get; set; }
+        public double MaxGoldenHour { get; set; }
+    }
+
+    public class MedicalRescue
+    {
+        private static Dictionary<string, DiseaseInfo> diseaseDatabase = new Dictionary<string, DiseaseInfo>
+        {
+            { "aa", new DiseaseInfo { DiseaseType = "aa", MinGoldenHour = 1, MaxGoldenHour = 3 } },
+            { "bb", new DiseaseInfo { DiseaseType = "bb", MinGoldenHour = 2, MaxGoldenHour = 4 } },
+            { "cc", new DiseaseInfo { DiseaseType = "cc", MinGoldenHour = 3, MaxGoldenHour = 5 } },
+            { "dd", new DiseaseInfo { DiseaseType = "dd", MinGoldenHour = 4, MaxGoldenHour = 6 } },
+            { "ee", new DiseaseInfo { DiseaseType = "ee", MinGoldenHour = 5, MaxGoldenHour = 7 } },  
+        // 添加更多疾病类型
+        };
+
+        public static List<Patient> ProcessPatients(List<Patient> patients, Random rand)
+        {
+            foreach (var patient in patients)
+            {
+                var diseaseInfo = GetDiseaseInfo(patient.DiseaseType); // MinGoldenHour MaxGoldenHour 数据库读取
+                double goldenHour = GenerateRandomGoldenHour(rand, diseaseInfo.MinGoldenHour, diseaseInfo.MaxGoldenHour);
+                Console.WriteLine($"Patient ID: {patient.Id}, Disease: {patient.DiseaseType}, Golden Hour: {goldenHour:F2}");
+                patient.GoldenHour = goldenHour;
+            }
+            return patients;
+        }
+
+        public static DiseaseInfo GetDiseaseInfo(string diseaseType)
+        {
+            if (diseaseDatabase.ContainsKey(diseaseType))
+            {
+                return diseaseDatabase[diseaseType];
+            }
+            throw new ArgumentException("Unknown disease type.");
+        }
+
+        public static double GenerateRandomGoldenHour(Random rand, double min, double max)
+        {
+            double mu = (max + min) / 2;
+            double sigma = (max - min) / 6;
+            var normal = new Normal(mu, sigma);
+            return normal.Sample();
+        }
+    }
+
+    // 假设数据库中的疾病优先级信息  
+    public class DiseasePriority
+    {
+        public string DiseaseType { get; set; }
+        public int Priority { get; set; } // 优先级,数字越小优先级越高  
+    }
+
+    // 静态类,包含与疾病优先级相关的静态方法  
+    public static class DiseasePriorityService
+    {
+        // 数据库查询(实际项目中应该是从数据库读取)  
+        public static List<DiseasePriority> GetDiseasePriorities()
+        {
+            return new List<DiseasePriority>
+            {
+                new DiseasePriority { DiseaseType = "aa", Priority = 5 },
+                new DiseasePriority { DiseaseType = "bb", Priority = 4 },
+                new DiseasePriority { DiseaseType = "cc", Priority = 3 },
+                new DiseasePriority { DiseaseType = "dd", Priority = 2 },
+                new DiseasePriority { DiseaseType = "ee", Priority = 5 },
+            };
+        }
+
+        // 根据疾病类型获取优先级  
+        public static int GetPriority(string diseaseType)
+        {
+            var priorities = GetDiseasePriorities().ToDictionary(dp => dp.DiseaseType, dp => dp.Priority);
+            if (priorities.TryGetValue(diseaseType, out int priority))
+            {
+                return priority;
+            }
+            return int.MaxValue; // 如果没有找到,返回一个很大的数作为默认优先级  
+        }
+    }
+
+    // 吊运函数
+    public static handling_result get_result_time_rope(double H, int person_number, double windspeed, double vis, double upspeed, double downspeed)
+    {
+
+        handling_result result = new handling_result();
+
+        if (windspeed < 8 && vis > 3)
+        {
+            result.time = (person_number * H) / downspeed + (person_number * H) / upspeed;
+            result.success = true;
+        }
+        else
+        {
+            result.success = false;
+        }
+        return result;
+    }
+
+    public string TargetQiXiangInfoSave(string s, int hour)
+    {
+        string result = hour.ToString() + "-" + s;
+        for (int i = 0; i < FlightPlanEditor.medicalTargetPoint[0].TargetQiXiangInfos.Length; i++)
+        {
+
+        }
+        switch (s)
+        {
+            case "温度":
+
+                break;
+            case "湿度":
+
+                break;
+            case "能见度":
+
+                break;
+            case "风速":
+
+                break;
+            case "风向":
+
+                break;
+            case "天气":
+
+                break;
+        }
+        return result;
+    }
+
+    public static int GetDaysInYear(int year, int month, int day)
+    {
+        int[] daysInMonths = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
+        if (IsLeapYear(year))
+        {
+            daysInMonths[1] = 29;
+        }
+        int days = day;
+        for (int i = 0; i < month - 1; i++)
+        {
+            days += daysInMonths[i];
+        }
+        return days;
+    }
+
+    public static bool IsLeapYear(int year)
+    {
+        return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
+    }
+}
+
+[ObjectSystem]
+public class AircraftXCJJAwakeSystem : AwakeSystem<AircraftXCJJ, FlightPlanEditor>
+{
+    public override void Awake(AircraftXCJJ self, FlightPlanEditor flightPlanEditor)
+    {
+        self.FlightPlanEditor = flightPlanEditor;
+        self.Awake();
+    }
+}

+ 1 - 1
SimulationServer/Entity/JCDZZYMission.cs

@@ -176,7 +176,7 @@ public class JCDZZYMission : Entity
 [ObjectSystem]
 [ObjectSystem]
 public class JCDZZYMissionUpdateSystem : UpdateSystem<JCDZZYMission>
 public class JCDZZYMissionUpdateSystem : UpdateSystem<JCDZZYMission>
 {
 {
-    public override void Update(YLWPYSMission self)
+    public override void Update(JCDZZYMission self)
     {
     {
         if (!self.IsRunning) return;
         if (!self.IsRunning) return;
 
 

+ 3 - 3
SimulationServer/Entity/XCJJMission.cs

@@ -9,7 +9,7 @@ public class XCJJMission : Entity
 {
 {
     public string MissionId; // 任务ID
     public string MissionId; // 任务ID
     public bool Success; // 任务是否成功
     public bool Success; // 任务是否成功
-    public List<AircraftDY> aircrafts = new List<AircraftDY>();
+    public List<AircraftXCJJ> aircrafts = new List<AircraftXCJJ>();
 
 
     public bool IsRunning;
     public bool IsRunning;
     public double SimulationTime;
     public double SimulationTime;
@@ -70,7 +70,7 @@ public class XCJJMission : Entity
 
 
     public void SaveAircraftSJDatas()
     public void SaveAircraftSJDatas()
     {
     {
-        foreach (AircraftDY aircraftEntity in aircrafts)
+        foreach (AircraftXCJJ aircraftEntity in aircrafts)
         {
         {
             string key = aircraftEntity.AircraftId;
             string key = aircraftEntity.AircraftId;
             if (!aircraftSJDatas.ContainsKey(key))
             if (!aircraftSJDatas.ContainsKey(key))
@@ -106,7 +106,7 @@ public class XCJJMission : Entity
 
 
     public void SaveSJ()
     public void SaveSJ()
     {
     {
-        foreach (AircraftDY aircraftEntity in aircrafts)
+        foreach (AircraftXCJJ aircraftEntity in aircrafts)
         {
         {
             var staticCapacity = aircraftEntity.GetComponent<SJStaticCapacityComponent>();
             var staticCapacity = aircraftEntity.GetComponent<SJStaticCapacityComponent>();
 
 

+ 15 - 21
SimulationServer/EventHandler/CreateTaskEventHandler.cs

@@ -653,30 +653,24 @@ public class CreateLandSJEventHandler : AEvent<CreateLandSXTask>
                 //基地
                 //基地
                 var originBase = config.EditorConfig.bases.Find(b => b.BaseId == aircraftParameter.AirportId);
                 var originBase = config.EditorConfig.bases.Find(b => b.BaseId == aircraftParameter.AirportId);
 
 
-                TargetPoint targetPoint = config.EditorConfig.medicalTargetPoints.Find(t => t.TargetPointId == config.XCJJTask.missionInformation.TargetPointId);
+                MedicalTargetPoint targetPoint = config.EditorConfig.medicalTargetPoints.Find(t => t.TargetPointId == config.XCJJTask.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
-                //};
+                var flightPlanEditor = FlightPlanEditor.Create(aircraftParameter, config.EditorConfig.cityWeather, originBase, new MedicalTargetPoint[] { targetPoint });
+                AircraftXCJJ aircraft = ComponentFactory.Create<AircraftXCJJ, FlightPlanEditor>(flightPlanEditor);
+                aircraft.Name = config.XCJJTask.aircraftInfos[i].AircraftType;
+                aircraft.TaskReadyTime = config.XCJJTask.missionInformation.TakeoffPreparationTime;
+                mission.aircrafts.Add(aircraft);
+                aircraft.taskContent = config.XCJJTask;
+                aircraft.AircraftId = config.XCJJTask.aircraftInfos[i].AircraftId;
 
 
-                //foreach (var item in config.SHJTask.SHJParameters)
-                //{
-                //    if (item.AircraftId == aircraft.AircraftId)
-                //    {
-                //        aircraft.SHJParameter = item;
-                //    }
-                //}
+                foreach (var item in config.XCJJTask.XCJJParameters)
+                {
+                    if (item.AircraftId == aircraft.AircraftId)
+                    {
+                        aircraft.taskParameter = item;
+                    }
+                }
 
 
                 //aircraft.AddComponent<SJStaticCapacityComponent>();
                 //aircraft.AddComponent<SJStaticCapacityComponent>();
                 Log.Info($"创建机型 : {flightPlanEditor.aircraftparameter.AircraftID}");
                 Log.Info($"创建机型 : {flightPlanEditor.aircraftparameter.AircraftID}");

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

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

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

@@ -29,7 +29,7 @@
             ],
             ],
             "任务参数": [
             "任务参数": [
                 {
                 {
-
+                    "应用飞机编号": "1-1",
                     "携带医护人员数量": 2,
                     "携带医护人员数量": 2,
                     "?后续转运方式": "注释: 地面转运时间用户自定义/空中转运时间默认0,由医疗转运子任务计算",
                     "?后续转运方式": "注释: 地面转运时间用户自定义/空中转运时间默认0,由医疗转运子任务计算",
                     "后续转运方式": "空中",
                     "后续转运方式": "空中",
@@ -70,6 +70,7 @@
             ],
             ],
             "任务参数": [
             "任务参数": [
                 {
                 {
+                    "应用飞机编号": "1-1",
                     "交接时间": 300.0,
                     "交接时间": 300.0,
                     "单次转运人数": 2
                     "单次转运人数": 2
                 }
                 }
@@ -105,6 +106,7 @@
             ],
             ],
             "任务参数": [
             "任务参数": [
                 {
                 {
+                    "应用飞机编号": "3-1",
                     "交接时间": 300.0
                     "交接时间": 300.0
                 }
                 }
             ]
             ]

BIN
SimulationServer/bin/Debug/net7.0/SimulationCommon.dll


BIN
SimulationServer/bin/Debug/net7.0/SimulationCommon.pdb


BIN
SimulationServer/bin/Debug/net7.0/SimulationServer.dll


BIN
SimulationServer/bin/Debug/net7.0/SimulationServer.exe


BIN
SimulationServer/bin/Debug/net7.0/SimulationServer.pdb