From 04e02c43eb781c7a313efa0d34752cd5a340d87e Mon Sep 17 00:00:00 2001 From: tian <11429339@qq.com> Date: Fri, 12 Jun 2026 12:21:02 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8A=A5=E5=91=8A=E9=87=8D=E6=9E=84:=20?= =?UTF-8?q?=E4=BB=BF=E7=9C=9F=E7=BB=93=E6=9E=9C=E6=8F=90=E5=89=8D=E5=88=B0?= =?UTF-8?q?=E7=AC=AC=E4=B8=80=E7=AB=A0,=20=E7=BB=9F=E4=B8=80=E4=B8=83?= =?UTF-8?q?=E7=AB=A0=E7=BB=93=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Services/ReportGenerator.cs | 79 +++++++++---------- 1 file changed, 36 insertions(+), 43 deletions(-) diff --git a/src/CounterDrone.Core/Services/ReportGenerator.cs b/src/CounterDrone.Core/Services/ReportGenerator.cs index 86b99e4..c28f747 100644 --- a/src/CounterDrone.Core/Services/ReportGenerator.cs +++ b/src/CounterDrone.Core/Services/ReportGenerator.cs @@ -14,11 +14,14 @@ namespace CounterDrone.Core.Services { var sb = new StringBuilder(); var platforms = config.Equipment.Where(e => e.EquipmentRole == (int)EquipmentRole.LaunchPlatform).ToList(); - var detections = config.Equipment.Where(e => e.EquipmentRole == (int)EquipmentRole.Detection).ToList(); var target = config.Targets.FirstOrDefault(); var scene = config.Scene; + var destroyed = events.Count(e => e.Type == SimEventType.DroneDestroyed); + var reached = events.Count(e => e.Type == SimEventType.DroneReachedTarget); + var intruded = events.Count(e => e.Type == SimEventType.ZoneIntruded); + var totalDrones = config.Targets.Sum(t => t.Quantity); + var result = DetermineInterceptResult(destroyed, reached + intruded, totalDrones); - // === 头部 === sb.AppendLine("# 仿真评估报告"); sb.AppendLine(); sb.AppendLine($"| 项目 | 值 |"); @@ -29,8 +32,23 @@ namespace CounterDrone.Core.Services sb.AppendLine($"| 气溶胶类型 | {TranslateAerosol((AerosolType)config.Cloud.AerosolType)} |"); sb.AppendLine(); - // === 一、环境 === - sb.AppendLine("## 一、作战环境"); + // === 一、仿真结果 === + sb.AppendLine("## 一、仿真结果"); + sb.AppendLine(); + sb.AppendLine($"| 统计项 | 值 |"); + sb.AppendLine($"|--------|-----|"); + sb.AppendLine($"| 无人机总数 | {totalDrones} |"); + sb.AppendLine($"| 被摧毁 | {destroyed} |"); + sb.AppendLine($"| 到达目标 | {reached} |"); + sb.AppendLine($"| 侵入管控区 | {intruded} |"); + sb.AppendLine($"| 弹药发射 | {events.Count(e => e.Type == SimEventType.MunitionLaunched)} |"); + sb.AppendLine($"| 云团生成 | {events.Count(e => e.Type == SimEventType.CloudGenerated)} |"); + sb.AppendLine(); + sb.AppendLine($"**对抗结果**:{TranslateResult(result)}"); + sb.AppendLine(); + + // === 二、作战环境 === + sb.AppendLine("## 二、作战环境"); sb.AppendLine(); sb.AppendLine($"| 参数 | 值 |"); sb.AppendLine($"|------|-----|"); @@ -41,47 +59,45 @@ namespace CounterDrone.Core.Services sb.AppendLine($"| 能见度 | {scene.Visibility} m |"); sb.AppendLine(); - // === 二、目标 === - sb.AppendLine("## 二、威胁目标"); + // === 三、威胁目标 === + sb.AppendLine("## 三、威胁目标"); sb.AppendLine(); sb.AppendLine($"| 参数 | 值 |"); sb.AppendLine($"|------|-----|"); sb.AppendLine($"| 类型 | {TranslateTarget((TargetType)(target?.TargetType ?? 0))} |"); - sb.AppendLine($"| 数量 | {config.Targets.Sum(t => t.Quantity)} 架 |"); + sb.AppendLine($"| 数量 | {totalDrones} 架 |"); sb.AppendLine($"| 速度 | {target?.TypicalSpeed ?? 0} km/h |"); sb.AppendLine($"| 高度 | {target?.TypicalAltitude ?? 0} m |"); sb.AppendLine($"| 动力 | {TranslatePower((PowerType)(target?.PowerType ?? 0))} |"); sb.AppendLine(); - // === 三、推荐方案 === + // === 四、推荐方案 === if (config.Cloud.Source == "Algorithm" && config.Cloud.EstimatedProbability.HasValue) { - sb.AppendLine("## 三、推荐方案"); + sb.AppendLine("## 四、推荐方案"); sb.AppendLine(); sb.AppendLine($"| 参数 | 值 |"); sb.AppendLine($"|------|-----|"); - sb.AppendLine($"| 气溶胶类型 | {TranslateAerosol((AerosolType)config.Cloud.AerosolType)} |"); sb.AppendLine($"| 发射方式 | {TranslateRelease((ReleaseMode)config.Cloud.ReleaseMode)} |"); sb.AppendLine($"| 弹药数 | {config.Cloud.SalvoRounds} 发 |"); sb.AppendLine($"| 云团间距 | {config.Cloud.SalvoSpacing:F0} m |"); - sb.AppendLine($"| 拦截概率(算法估计) | {config.Cloud.EstimatedProbability.Value:P0} |"); + sb.AppendLine($"| 拦截概率 | {config.Cloud.EstimatedProbability.Value:P0} |"); sb.AppendLine($"| 抛撒时机 | {config.Cloud.RecommendedTiming:F0}s |"); sb.AppendLine(); } - // === 四、我方部署 === - sb.AppendLine("## 四、我方部署"); + // === 五、我方部署 === + sb.AppendLine("## 五、我方部署"); sb.AppendLine(); sb.AppendLine($"| 装备 | 数量 |"); sb.AppendLine($"|------|------|"); sb.AppendLine($"| 发射平台 | {platforms.Sum(p => p.Quantity)} 台 |"); - sb.AppendLine($"| 探测设备 | {detections.Sum(d => d.Quantity)} 台 |"); sb.AppendLine($"| 云团位置 | ({config.Cloud.PositionX:F0}, {config.Cloud.PositionY:F0}, {config.Cloud.PositionZ:F0}) |"); sb.AppendLine($"| 释放高度 | {config.Cloud.DisperseHeight:F0} m |"); sb.AppendLine(); - // === 三、事件时序 === - sb.AppendLine("## 五、事件时序"); + // === 六、事件时序 === + sb.AppendLine("## 六、事件时序"); sb.AppendLine(); sb.AppendLine("| 时间(s) | 事件 | 详情 |"); sb.AppendLine("|---------|------|------|"); @@ -102,11 +118,11 @@ namespace CounterDrone.Core.Services } sb.AppendLine(); - // === 四、时间线分析 === + // === 七、时间线 === var launchTime = events.Where(e => e.Type == SimEventType.MunitionLaunched).Select(e => e.OccurredAt).DefaultIfEmpty(0).Min(); var cloudTime = events.Where(e => e.Type == SimEventType.CloudGenerated).Select(e => e.OccurredAt).DefaultIfEmpty(0).Min(); var destroyTime = events.Where(e => e.Type == SimEventType.DroneDestroyed).Select(e => e.OccurredAt).DefaultIfEmpty(0).Min(); - sb.AppendLine("## 六、时间线"); + sb.AppendLine("## 七、时间线"); sb.AppendLine(); sb.AppendLine($"| 阶段 | 时间 | 耗时 |"); sb.AppendLine($"|------|------|------|"); @@ -117,27 +133,6 @@ namespace CounterDrone.Core.Services sb.AppendLine($"| 总耗时 | 0 → {simulationDuration:F1}s | {simulationDuration:F1}s |"); sb.AppendLine(); - // === 五、统计 === - var destroyed = events.Count(e => e.Type == SimEventType.DroneDestroyed); - var reached = events.Count(e => e.Type == SimEventType.DroneReachedTarget); - var intruded = events.Count(e => e.Type == SimEventType.ZoneIntruded); - var totalDrones = config.Targets.Sum(t => t.Quantity); - var result = DetermineInterceptResult(destroyed, reached + intruded, totalDrones); - - sb.AppendLine("## 七、结果统计"); - sb.AppendLine(); - sb.AppendLine($"| 统计项 | 值 |"); - sb.AppendLine($"|--------|-----|"); - sb.AppendLine($"| 无人机总数 | {totalDrones} |"); - sb.AppendLine($"| 被摧毁 | {destroyed} |"); - sb.AppendLine($"| 到达目标 | {reached} |"); - sb.AppendLine($"| 侵入管控区 | {intruded} |"); - sb.AppendLine($"| 弹药发射 | {events.Count(e => e.Type == SimEventType.MunitionLaunched)} |"); - sb.AppendLine($"| 云团生成 | {events.Count(e => e.Type == SimEventType.CloudGenerated)} |"); - sb.AppendLine(); - sb.AppendLine($"**对抗结果**:{TranslateResult(result)}"); - sb.AppendLine(); - return sb.ToString(); } @@ -187,10 +182,8 @@ namespace CounterDrone.Core.Services private static string TranslateRelease(ReleaseMode r) => r switch { - ReleaseMode.Single => "单次齐射", - ReleaseMode.Continuous => "连续释放", - ReleaseMode.Pulse => "脉冲释放", - _ => r.ToString(), + ReleaseMode.Single => "单次齐射", ReleaseMode.Continuous => "连续释放", + ReleaseMode.Pulse => "脉冲释放", _ => r.ToString(), }; private static string TranslateEvent(SimEventType t) => t switch