From 12cb6576fe7810f252f572b9e0e74659fbd3b69f Mon Sep 17 00:00:00 2001 From: tian <11429339@qq.com> Date: Fri, 12 Jun 2026 15:33:37 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A4=9A=E6=89=B9=E6=AC=A1Phase1:=20RoutePlan?= =?UTF-8?q?=E6=94=B9Id=E4=B8=BB=E9=94=AE+Waypoint=E5=8A=A0GroupId+Scenario?= =?UTF-8?q?Service/Engine/=E6=89=80=E6=9C=89=E6=B5=8B=E8=AF=95=E9=80=82?= =?UTF-8?q?=E9=85=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/CounterDrone.Core/DatabaseManager.cs | 1 + src/CounterDrone.Core/Models/RoutePlan.cs | 7 +++++- .../Models/TaskFullConfig.cs | 6 +++-- src/CounterDrone.Core/Models/Waypoint.cs | 3 +++ .../Repository/RoutePlanRepository.cs | 13 ++++++++++ .../Repository/WaypointRepository.cs | 8 ++++++ .../Services/IScenarioService.cs | 2 +- .../Services/ScenarioService.cs | 22 ++++++++++++----- .../Simulation/SimulationEngine.cs | 9 ++++--- .../CounterDrone.Core/CounterDrone.Core.dll | Bin 97792 -> 100864 bytes .../Scripts/Managers/GroupManager.cs.meta | 11 +++++++++ .../Scripts/Managers/ManagerVerification.cs | 2 +- .../Scripts/Managers/ScenarioManager.cs | 2 +- .../Scripts/Managers/SimulationBootstrap.cs | 2 +- .../CounterDrone.Core.Tests/EdgeCaseTests.cs | 9 ++++--- .../FullPipelineTests.cs | 16 +++++++----- .../ScenarioServiceTests.cs | 23 ++++++++++-------- .../SimulationEngineTests.cs | 3 ++- 18 files changed, 103 insertions(+), 36 deletions(-) create mode 100644 src/Unity/Assets/Scripts/Managers/GroupManager.cs.meta diff --git a/src/CounterDrone.Core/DatabaseManager.cs b/src/CounterDrone.Core/DatabaseManager.cs index d277d9a..c03decb 100644 --- a/src/CounterDrone.Core/DatabaseManager.cs +++ b/src/CounterDrone.Core/DatabaseManager.cs @@ -68,6 +68,7 @@ namespace CounterDrone.Core db.CreateTable(); db.CreateTable(); db.CreateTable(); + db.CreateIndex("RoutePlan", new[] { "TaskId", "GroupId" }, true); db.CreateTable(); db.CreateTable(); db.CreateTable(); diff --git a/src/CounterDrone.Core/Models/RoutePlan.cs b/src/CounterDrone.Core/Models/RoutePlan.cs index cf04618..b457dd0 100644 --- a/src/CounterDrone.Core/Models/RoutePlan.cs +++ b/src/CounterDrone.Core/Models/RoutePlan.cs @@ -1,14 +1,19 @@ +using System; using SQLite; namespace CounterDrone.Core.Models { - /// 步骤5:航路规划 + /// 步骤5:航路规划 — 多编队支持:每个(任务,编队)一条航路 [Table("RoutePlan")] public class RoutePlan { [PrimaryKey] + public string Id { get; set; } = Guid.NewGuid().ToString(); + + [Indexed] public string TaskId { get; set; } = string.Empty; + [Indexed] public string GroupId { get; set; } = string.Empty; public int FormationMode { get; set; } = (int)Models.FormationMode.Single; diff --git a/src/CounterDrone.Core/Models/TaskFullConfig.cs b/src/CounterDrone.Core/Models/TaskFullConfig.cs index 7b7d9ec..d4ef3e8 100644 --- a/src/CounterDrone.Core/Models/TaskFullConfig.cs +++ b/src/CounterDrone.Core/Models/TaskFullConfig.cs @@ -11,8 +11,10 @@ namespace CounterDrone.Core.Models public List Targets { get; set; } = new(); public List Equipment { get; set; } = new(); public CloudDispersal Cloud { get; set; } = new(); - public RoutePlan Route { get; set; } = new(); - public List Waypoints { get; set; } = new(); + /// 多编队航路(多批次支持) + public List Routes { get; set; } = new(); + /// 按 GroupId 分组的航路点 + public Dictionary> WaypointGroups { get; set; } = new(); } /// 分页结果 diff --git a/src/CounterDrone.Core/Models/Waypoint.cs b/src/CounterDrone.Core/Models/Waypoint.cs index bcef32d..67ac110 100644 --- a/src/CounterDrone.Core/Models/Waypoint.cs +++ b/src/CounterDrone.Core/Models/Waypoint.cs @@ -13,6 +13,9 @@ namespace CounterDrone.Core.Models [Indexed] public string TaskId { get; set; } = string.Empty; + /// 关联的编队 ID(多编队支持) + public string GroupId { get; set; } = string.Empty; + [NotNull] public int OrderIndex { get; set; } diff --git a/src/CounterDrone.Core/Repository/RoutePlanRepository.cs b/src/CounterDrone.Core/Repository/RoutePlanRepository.cs index a09cf2d..0cf5d1d 100644 --- a/src/CounterDrone.Core/Repository/RoutePlanRepository.cs +++ b/src/CounterDrone.Core/Repository/RoutePlanRepository.cs @@ -1,3 +1,5 @@ +using System.Collections.Generic; +using System.Linq; using CounterDrone.Core.Models; using SQLite; @@ -6,5 +8,16 @@ namespace CounterDrone.Core.Repository public class RoutePlanRepository : BaseRepository { public RoutePlanRepository(SQLiteConnection db) : base(db) { } + + public List GetByTaskId(string taskId) + { + return Db.Table().Where(r => r.TaskId == taskId).ToList(); + } + + public RoutePlan GetByTaskAndGroup(string taskId, string groupId) + { + return Db.Table() + .FirstOrDefault(r => r.TaskId == taskId && r.GroupId == groupId); + } } } diff --git a/src/CounterDrone.Core/Repository/WaypointRepository.cs b/src/CounterDrone.Core/Repository/WaypointRepository.cs index 7ca00cf..81d917e 100644 --- a/src/CounterDrone.Core/Repository/WaypointRepository.cs +++ b/src/CounterDrone.Core/Repository/WaypointRepository.cs @@ -17,6 +17,14 @@ namespace CounterDrone.Core.Repository .ToList(); } + public List GetByTaskAndGroup(string taskId, string groupId) + { + return Db.Table() + .Where(w => w.TaskId == taskId && w.GroupId == groupId) + .OrderBy(w => w.OrderIndex) + .ToList(); + } + public void DeleteByTaskId(string taskId) { var wps = GetByTaskId(taskId); diff --git a/src/CounterDrone.Core/Services/IScenarioService.cs b/src/CounterDrone.Core/Services/IScenarioService.cs index 8257c01..f57b9e5 100644 --- a/src/CounterDrone.Core/Services/IScenarioService.cs +++ b/src/CounterDrone.Core/Services/IScenarioService.cs @@ -16,7 +16,7 @@ namespace CounterDrone.Core.Services void SaveTarget(string taskId, TargetConfig target); void SaveDeployment(string taskId, List equips); void SaveCloudDispersal(string taskId, CloudDispersal cloud); - void SaveRoute(string taskId, RoutePlan route, List waypoints); + void SaveRoute(string taskId, string groupId, RoutePlan route, List waypoints); void UpdateStep(string taskId, int step); } } diff --git a/src/CounterDrone.Core/Services/ScenarioService.cs b/src/CounterDrone.Core/Services/ScenarioService.cs index aaf289b..5a1af41 100644 --- a/src/CounterDrone.Core/Services/ScenarioService.cs +++ b/src/CounterDrone.Core/Services/ScenarioService.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Linq; using System.Threading; using CounterDrone.Core.Models; using CounterDrone.Core.Repository; @@ -98,8 +99,10 @@ namespace CounterDrone.Core.Services Targets = _targetRepo.GetByTaskId(id), Equipment = _equipRepo.GetByTaskId(id), Cloud = _cloudRepo.GetById(id) ?? new CloudDispersal { TaskId = id }, - Route = _routeRepo.GetById(id) ?? new RoutePlan { TaskId = id }, - Waypoints = _waypointRepo.GetByTaskId(id), + Routes = _routeRepo.GetByTaskId(id), + WaypointGroups = _waypointRepo.GetByTaskId(id) + .GroupBy(w => w.GroupId) + .ToDictionary(g => g.Key, g => g.OrderBy(w => w.OrderIndex).ToList()), }; } @@ -166,19 +169,26 @@ namespace CounterDrone.Core.Services TouchTask(taskId); } - public void SaveRoute(string taskId, RoutePlan route, List waypoints) + public void SaveRoute(string taskId, string groupId, RoutePlan route, List waypoints) { route.TaskId = taskId; - var existingRoute = _routeRepo.GetById(taskId); - if (existingRoute != null) + route.GroupId = groupId; + var existing = _routeRepo.GetByTaskAndGroup(taskId, groupId); + if (existing != null) + { + route.Id = existing.Id; _routeRepo.Update(route); + } else _routeRepo.Insert(route); - _waypointRepo.DeleteByTaskId(taskId); + // 删除该编队的旧航路点,插入新的 + var oldWps = _waypointRepo.GetByTaskAndGroup(taskId, groupId); + foreach (var w in oldWps) _waypointRepo.Delete(w.Id); for (int i = 0; i < waypoints.Count; i++) { waypoints[i].TaskId = taskId; + waypoints[i].GroupId = groupId; waypoints[i].OrderIndex = i; if (string.IsNullOrEmpty(waypoints[i].Id)) waypoints[i].Id = Guid.NewGuid().ToString(); diff --git a/src/CounterDrone.Core/Simulation/SimulationEngine.cs b/src/CounterDrone.Core/Simulation/SimulationEngine.cs index 9ea4baf..3c882c2 100644 --- a/src/CounterDrone.Core/Simulation/SimulationEngine.cs +++ b/src/CounterDrone.Core/Simulation/SimulationEngine.cs @@ -86,11 +86,14 @@ namespace CounterDrone.Core.Simulation _drones.Clear(); foreach (var target in config.Targets) { - var mode = (FormationMode)config.Route.FormationMode; - var spacing = (float)config.Route.FormationSpacing; + var route = config.Routes.FirstOrDefault(r => r.GroupId == target.GroupId); + var wps = config.WaypointGroups.GetValueOrDefault(target.GroupId, new List()); + if (route == null || wps.Count == 0) continue; + var mode = (FormationMode)route.FormationMode; + var spacing = (float)route.FormationSpacing; for (int i = 0; i < target.Quantity; i++) _drones.Add(new DroneEntity($"drone_{++_entityCounter}", target.GroupId, - target, config.Waypoints, i, spacing, mode)); + target, wps, i, spacing, mode)); } _platforms.Clear(); diff --git a/src/Unity/Assets/Plugins/CounterDrone.Core/CounterDrone.Core.dll b/src/Unity/Assets/Plugins/CounterDrone.Core/CounterDrone.Core.dll index 419da72312407f2fdf2e64bc8804959842e62c51..fef60979894b1099341d4558cfa85f400530e0c5 100644 GIT binary patch literal 100864 zcmcG%2Ygi3);_%VnVB;sbuz;w5K2f$7&0jk2niu1p@RifS`tJ71yRbu8Brik3>Iu4 z_JR$uUkhrmmutnY*uD1lTJF8Jt6tQr@I7noeP$*hc>TTK`_B*dUeB}JT5H#H=FFJ` zThA2^A%qkE_v{hkKE(9b#Ni(Y9Z1d`@Ia>6?tO9Kee!@82hLn_bgW=y)H*71GI*xNox%TbxpKE!n-) zzHxt}EmsI%DdIeeXB*+(hz&=aXu}z2R*1k*hZu`$(2n1+3LTX1Gt7z+W?5yp4`t+9 zOb)Gl5M{aHzRXj3lk2wnK`afG=9a!%Fv@#KUBQr9v#xJVDQ@*ghGtDCOIrhoE+rk@ zVj+24Bt_woLLC?B7?XhcVv5gCc#5*YQ5OwG_S>=0*};D6g*M1< zN1A1aYs0Cq$t@|rP1b&++RQcz*>CW3302%i)tekzgCWAtVdkkhvyDP)2mh_u8DwHTQ&G2xB**Qjd6r>D?*MfI_CBUN*mw)j=W{$Btgo&ST z)q{8sE)fz-jUgtAehWn=AnY)O4|da^BV=KiMM@CEWgNpij-f8c=ogORe2#rOPSY`# zU+~dNsGqm7n+L~(+?uOAh$gVoa1~I4<18IRL8@W~az~Fq5VFRQRgUNyVyHV3%z1k; zx9r8dwiok1dojDZF{Q^O)*=|_G}5=GLbe!LyCC@A~LZuE}@khwhc9#^+7H2BcNsP~xN^K`9t+>@RTbteP*5+m5Mz~|C z&hjbh+3g7JmShS#l1)HIa_rY}j*hW`I7`1tc$l)o8p=&(P%b0W6{lQ=D;P%UNO8GY z5^F+xajq*c)FtAu34_oNy)paEDldcz2qR$~FDj-r76mq93(WV0(jv8{ThVT79C$2q z;a{M1ckXv^vGK@o9TjxvHmB)gTwB!x4wo68faLJc$VkRwmt!Nb6LB2UG1ef)Sduu# ztmYUC7ROjDoTY_07O;SdFijP~0toExieLc*G*Sc$Ah4q-f&~x-Ho*djfi}Sc2rQqf z2n!%Ez7)X%tp`r=Dtt?S1~PRt#;Nv1Z;`#|Ei%_|S!3XZIGGH2EXiaxR)m|rqjYshDEO)Ovsu9*;-DyXyG!G9M(s0nEol;vCLucfpcY=neOoZBpYF@ zedtcqWj3p7j4)O`P*a$qT1wUay%@G(4*MNgRh^Edtv*+7h0B#!;Vs4HF_rQ;3eH5H z*4SiZOf%dTs_?-<^!HI?%Ti}6Jk!+F8b-SL2gzKQ^65sbv6#1*gX2)946A*(1_Jv5 zY8YWGme4i9<+fCLjJz<0qN%g0EV<3>E}ucWfmyhC@#3brCOc1gU|Gx3G}9u-Df5BT zO^cjn&}w7?XJGz%Jgv=MZ(#-+3dpk7iv z;4}Qb+-BN|G}F}>w`~m7JvU%?nA?x_B(=LdOmLSgg}qErLoR3d8`x3Y2DkbG?&7xn zDE73W|9t_k9sz#0qicnJ4-qL9`n^O@g{2=Pd&3AffpN5iv1-5o0&s>9)j2c^giw60 z>X1UCw-PXciZPyfBD1jADA(gN7VnD^GH7C?bE0m zyMaH`WgP&Y_-d~Nkt4zf0;D-&IpjR2^&g4IW&KW3rgNFKhXl8E0W`5BWpP^d{;4hx$|WG5!45r)5g zQLI2K!v~QU+&h1Tx#5E$ABW*1!-qgJcVdTBS;I4ccT%0D1Zxm?w!B=iGrj> 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 T2dSm|M({q>>j9bng#&*BX&8%- literal 97792 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 NI?(HS5&k<3{08Gar2PN@ diff --git a/src/Unity/Assets/Scripts/Managers/GroupManager.cs.meta b/src/Unity/Assets/Scripts/Managers/GroupManager.cs.meta new file mode 100644 index 0000000..499ff8c --- /dev/null +++ b/src/Unity/Assets/Scripts/Managers/GroupManager.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 24c080ea3d6cbcf45aa804fd10269e4a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/Unity/Assets/Scripts/Managers/ManagerVerification.cs b/src/Unity/Assets/Scripts/Managers/ManagerVerification.cs index c93342d..bd31ba1 100644 --- a/src/Unity/Assets/Scripts/Managers/ManagerVerification.cs +++ b/src/Unity/Assets/Scripts/Managers/ManagerVerification.cs @@ -36,7 +36,7 @@ namespace CounterDrone.Unity TargetType = (int)TargetType.Piston, PowerType = (int)PowerType.Piston, Quantity = 1, TypicalSpeed = 200, TypicalAltitude = 500, }); - scenarioMgr.SaveRoute(taskId, new RoutePlan { FormationMode = (int)FormationMode.Single }, + scenarioMgr.SaveRoute(taskId, "default", new RoutePlan { FormationMode = (int)FormationMode.Single }, new List { new Waypoint { PosX = 0, PosY = 500, PosZ = 0 }, diff --git a/src/Unity/Assets/Scripts/Managers/ScenarioManager.cs b/src/Unity/Assets/Scripts/Managers/ScenarioManager.cs index 1f2dba0..8231910 100644 --- a/src/Unity/Assets/Scripts/Managers/ScenarioManager.cs +++ b/src/Unity/Assets/Scripts/Managers/ScenarioManager.cs @@ -35,7 +35,7 @@ namespace CounterDrone.Unity public void SaveTarget(string taskId, TargetConfig t) => _service.SaveTarget(taskId, t); public void SaveDeployment(string taskId, List e) => _service.SaveDeployment(taskId, e); public void SaveCloud(string taskId, CloudDispersal c) => _service.SaveCloudDispersal(taskId, c); - public void SaveRoute(string taskId, RoutePlan r, List w) => _service.SaveRoute(taskId, r, w); + public void SaveRoute(string taskId, string groupId, RoutePlan r, List w) => _service.SaveRoute(taskId, groupId, r, w); public void UpdateStep(string taskId, int step) => _service.UpdateStep(taskId, step); [ContextMenu("Verify")] diff --git a/src/Unity/Assets/Scripts/Managers/SimulationBootstrap.cs b/src/Unity/Assets/Scripts/Managers/SimulationBootstrap.cs index 8e32ab0..5a2a2b8 100644 --- a/src/Unity/Assets/Scripts/Managers/SimulationBootstrap.cs +++ b/src/Unity/Assets/Scripts/Managers/SimulationBootstrap.cs @@ -54,7 +54,7 @@ namespace CounterDrone.Unity TargetType = (int)TargetType.Piston, PowerType = (int)PowerType.Piston, Quantity = 1, TypicalSpeed = _droneSpeed, TypicalAltitude = 500, }); - scenario.SaveRoute(taskId, new RoutePlan { FormationMode = (int)FormationMode.Single }, + scenario.SaveRoute(taskId, "default", new RoutePlan { FormationMode = (int)FormationMode.Single }, new List { new Waypoint { PosX = 0, PosY = 500, PosZ = 0, Speed = _droneSpeed }, diff --git a/test/unit/CounterDrone.Core.Tests/EdgeCaseTests.cs b/test/unit/CounterDrone.Core.Tests/EdgeCaseTests.cs index 7482d10..78ba518 100644 --- a/test/unit/CounterDrone.Core.Tests/EdgeCaseTests.cs +++ b/test/unit/CounterDrone.Core.Tests/EdgeCaseTests.cs @@ -49,6 +49,7 @@ namespace CounterDrone.Core.Tests _scenario.SaveScene(_taskId, new CombatScene { WindSpeed = 0 }); _scenario.SaveTarget(_taskId, new TargetConfig { + GroupId = "default", TargetType = (int)TargetType.Piston, Quantity = 1, TypicalSpeed = 100, @@ -56,7 +57,7 @@ namespace CounterDrone.Core.Tests }); _scenario.SaveDeployment(_taskId, new List()); _scenario.SaveCloudDispersal(_taskId, new CloudDispersal()); - _scenario.SaveRoute(_taskId, new RoutePlan { FormationMode = (int)FormationMode.Single }, + _scenario.SaveRoute(_taskId, "default", new RoutePlan { FormationMode = (int)FormationMode.Single }, new List { new Waypoint { PosX = 0, PosY = 300, PosZ = 0 }, @@ -91,13 +92,14 @@ namespace CounterDrone.Core.Tests }); _scenario.SaveTarget(_taskId, new TargetConfig { + GroupId = "default", TargetType = (int)TargetType.Piston, Quantity = 1, TypicalSpeed = 600, // 高速对抗强风 }); _scenario.SaveDeployment(_taskId, new List()); _scenario.SaveCloudDispersal(_taskId, new CloudDispersal()); - _scenario.SaveRoute(_taskId, new RoutePlan { FormationMode = (int)FormationMode.Single }, + _scenario.SaveRoute(_taskId, "default", new RoutePlan { FormationMode = (int)FormationMode.Single }, new List { new Waypoint { PosX = 0, PosY = 300, PosZ = 0 }, @@ -129,6 +131,7 @@ namespace CounterDrone.Core.Tests _scenario.SaveScene(_taskId, new CombatScene { WindSpeed = 0 }); _scenario.SaveTarget(_taskId, new TargetConfig { + GroupId = "default", TargetType = (int)TargetType.HighSpeed, Quantity = 1, TypicalSpeed = 500, @@ -137,7 +140,7 @@ namespace CounterDrone.Core.Tests _scenario.SaveCloudDispersal(_taskId, new CloudDispersal()); // 500 km/h, 100km 航程 - _scenario.SaveRoute(_taskId, new RoutePlan { FormationMode = (int)FormationMode.Single }, + _scenario.SaveRoute(_taskId, "default", new RoutePlan { FormationMode = (int)FormationMode.Single }, new List { new Waypoint { PosX = 0, PosY = 500, PosZ = 0 }, diff --git a/test/unit/CounterDrone.Core.Tests/FullPipelineTests.cs b/test/unit/CounterDrone.Core.Tests/FullPipelineTests.cs index c4a0b7f..c8129a3 100644 --- a/test/unit/CounterDrone.Core.Tests/FullPipelineTests.cs +++ b/test/unit/CounterDrone.Core.Tests/FullPipelineTests.cs @@ -85,8 +85,8 @@ namespace CounterDrone.Core.Tests { Environment = detail.Scene, Targets = detail.Targets, - Route = detail.Route, - Waypoints = detail.Waypoints, + Route = detail.Routes[0], + Waypoints = detail.WaypointGroups["default"], }; var rec = new DefaultDefenseAdvisor(_ammoCatalog).Recommend(threat); @@ -151,13 +151,14 @@ namespace CounterDrone.Core.Tests _scenario.SaveScene(_taskId, new CombatScene { WindSpeed = 0 }); _scenario.SaveTarget(_taskId, new TargetConfig { + GroupId = "default", TargetType = (int)TargetType.FixedWing, PowerType = (int)PowerType.Jet, Quantity = 1, TypicalSpeed = 600, TypicalAltitude = 400, }); - _scenario.SaveRoute(_taskId, new RoutePlan { FormationMode = (int)FormationMode.Single }, + _scenario.SaveRoute(_taskId, "default", new RoutePlan { FormationMode = (int)FormationMode.Single }, new List { new Waypoint { PosX = 0, PosY = 400, PosZ = 0, Speed = 600 }, @@ -183,13 +184,14 @@ namespace CounterDrone.Core.Tests _scenario.SaveScene(_taskId, new CombatScene { WindSpeed = 0 }); _scenario.SaveTarget(_taskId, new TargetConfig { + GroupId = "default", TargetType = (int)TargetType.Electric, PowerType = (int)PowerType.Electric, Quantity = 1, TypicalSpeed = 300, TypicalAltitude = 300, }); - _scenario.SaveRoute(_taskId, new RoutePlan { FormationMode = (int)FormationMode.Single }, + _scenario.SaveRoute(_taskId, "default", new RoutePlan { FormationMode = (int)FormationMode.Single }, new List { new Waypoint { PosX = 0, PosY = 300, PosZ = 0, Speed = 300 }, @@ -228,13 +230,14 @@ namespace CounterDrone.Core.Tests }); _scenario.SaveTarget(_taskId, new TargetConfig { + GroupId = "default", TargetType = (int)TargetType.Piston, PowerType = (int)PowerType.Piston, Quantity = 1, TypicalSpeed = 200, TypicalAltitude = 500, }); - _scenario.SaveRoute(_taskId, new RoutePlan { FormationMode = (int)FormationMode.Single }, + _scenario.SaveRoute(_taskId, "default", new RoutePlan { FormationMode = (int)FormationMode.Single }, new List { new Waypoint { PosX = 0, PosY = 500, PosZ = 0, Speed = 200 }, @@ -294,13 +297,14 @@ namespace CounterDrone.Core.Tests _scenario.SaveScene(_taskId, new CombatScene { WindSpeed = 0 }); _scenario.SaveTarget(_taskId, new TargetConfig { + GroupId = "default", TargetType = (int)TargetType.HighSpeed, PowerType = (int)PowerType.Jet, Quantity = 1, TypicalSpeed = 500, TypicalAltitude = 800, }); - _scenario.SaveRoute(_taskId, new RoutePlan { FormationMode = (int)FormationMode.Single }, + _scenario.SaveRoute(_taskId, "default", new RoutePlan { FormationMode = (int)FormationMode.Single }, new List { new Waypoint { PosX = 0, PosY = 800, PosZ = 0, Speed = 500 }, diff --git a/test/unit/CounterDrone.Core.Tests/ScenarioServiceTests.cs b/test/unit/CounterDrone.Core.Tests/ScenarioServiceTests.cs index 3becff0..b183481 100644 --- a/test/unit/CounterDrone.Core.Tests/ScenarioServiceTests.cs +++ b/test/unit/CounterDrone.Core.Tests/ScenarioServiceTests.cs @@ -103,6 +103,7 @@ namespace CounterDrone.Core.Tests _service.SaveTarget(task.Id, new TargetConfig { + GroupId = "default", TargetType = (int)TargetType.FixedWing, Quantity = 3, }); @@ -200,6 +201,7 @@ namespace CounterDrone.Core.Tests var task = _service.CreateTask("Target Test", ""); _service.SaveTarget(task.Id, new TargetConfig { + GroupId = "default", TargetType = (int)TargetType.Piston, Quantity = 5, PowerType = (int)PowerType.Piston, @@ -265,14 +267,14 @@ namespace CounterDrone.Core.Tests new Waypoint { PosX = 10000, PosY = 0, PosZ = 100, Altitude = 300, Speed = 80 }, }; - _service.SaveRoute(task.Id, route, waypoints); + _service.SaveRoute(task.Id, "default", route, waypoints); var detail = _service.GetTaskDetail(task.Id); - Assert.Equal((int)FormationMode.Formation, detail.Route.FormationMode); - Assert.Equal(3, detail.Waypoints.Count); - Assert.Equal(0, detail.Waypoints[0].OrderIndex); - Assert.Equal(2, detail.Waypoints[2].OrderIndex); - Assert.Equal(5000.0, detail.Waypoints[1].PosX); + Assert.Equal((int)FormationMode.Formation, detail.Routes[0].FormationMode); + Assert.Equal(3, detail.WaypointGroups["default"].Count); + Assert.Equal(0, detail.WaypointGroups["default"][0].OrderIndex); + Assert.Equal(2, detail.WaypointGroups["default"][2].OrderIndex); + Assert.Equal(5000.0, detail.WaypointGroups["default"][1].PosX); } // ========== Search & Pagination ========== @@ -392,6 +394,7 @@ namespace CounterDrone.Core.Tests // 4. 步骤2:目标配置 _service.SaveTarget(task.Id, new TargetConfig { + GroupId = "default", TargetType = (int)TargetType.HighSpeed, Quantity = 2, PowerType = (int)PowerType.Jet, @@ -433,7 +436,7 @@ namespace CounterDrone.Core.Tests _service.UpdateStep(task.Id, 4); // 7. 步骤5:航路规划 - _service.SaveRoute(task.Id, new RoutePlan + _service.SaveRoute(task.Id, "default", new RoutePlan { FormationMode = (int)FormationMode.Swarm, FormationSpacing = 30.0, @@ -473,9 +476,9 @@ namespace CounterDrone.Core.Tests Assert.Equal(50.0, detail.Cloud.Duration); // 航路 - Assert.Equal((int)FormationMode.Swarm, detail.Route.FormationMode); - Assert.Equal(2, detail.Waypoints.Count); - Assert.Equal(250.0, detail.Waypoints[0].Speed); + Assert.Equal((int)FormationMode.Swarm, detail.Routes[0].FormationMode); + Assert.Equal(2, detail.WaypointGroups["default"].Count); + Assert.Equal(250.0, detail.WaypointGroups["default"][0].Speed); // 9. 搜索验证 var searchResult = _service.SearchTasks("完整流程", null, null, 1, 10); diff --git a/test/unit/CounterDrone.Core.Tests/SimulationEngineTests.cs b/test/unit/CounterDrone.Core.Tests/SimulationEngineTests.cs index 741636b..3a734e6 100644 --- a/test/unit/CounterDrone.Core.Tests/SimulationEngineTests.cs +++ b/test/unit/CounterDrone.Core.Tests/SimulationEngineTests.cs @@ -53,6 +53,7 @@ namespace CounterDrone.Core.Tests _scenarioService.SaveScene(_taskId, new CombatScene { WindSpeed = 0 }); _scenarioService.SaveTarget(_taskId, new TargetConfig { + GroupId = "default", TargetType = (int)TargetType.Piston, Quantity = 1, PowerType = (int)PowerType.Piston, @@ -79,7 +80,7 @@ namespace CounterDrone.Core.Tests PositionZ = 0, PositionMode = (int)PositionMode.AlgorithmRecommended, }); - _scenarioService.SaveRoute(_taskId, new RoutePlan { FormationMode = (int)FormationMode.Single }, + _scenarioService.SaveRoute(_taskId, "default", new RoutePlan { FormationMode = (int)FormationMode.Single }, new List { new Waypoint { PosX = 0, PosY = 300, PosZ = 0, Altitude = 300, Speed = 60 },