using System; using System.Collections.Generic; using System.IO; using System.Text; using System.Threading.Tasks; using ASTM_D7896_Tester.Models; using ASTM_D7896_Tester.ViewModels; namespace ASTM_D7896_Tester.Services; public class ReportService { private readonly string _outputDirectory; public ReportService(string outputDirectory) { _outputDirectory = outputDirectory; if (!Directory.Exists(_outputDirectory)) Directory.CreateDirectory(_outputDirectory); } public async Task GenerateReportAsync( string sampleId, double testTemperature, List measurements, double avgLambda, double avgAlpha, double avgVhc, TestParameters parameters, Dictionary extraParams = null) { var sb = new StringBuilder(); sb.AppendLine("=".PadRight(80, '=')); sb.AppendLine("ASTM D7896-19 瞬态热线法热导率测试报告"); sb.AppendLine("=".PadRight(80, '=')); sb.AppendLine($"样品ID: {sampleId}"); sb.AppendLine($"测试日期: {DateTime.Now:yyyy-MM-dd HH:mm:ss}"); sb.AppendLine($"测试温度: {testTemperature:F2} °C"); sb.AppendLine($"铂丝参数: 长度={parameters.PlatinumWireLength * 1000:F1} mm, 直径={parameters.PlatinumWireDiameter * 1000:F3} mm"); sb.AppendLine($"重复测量次数: {parameters.MeasurementCount}"); sb.AppendLine($"测量间隔: {parameters.IntervalSeconds} 秒"); if (extraParams != null) { sb.AppendLine(); sb.AppendLine("----- 测试条件与合规性确认 (依据ASTM D7896-19) -----"); if (extraParams.ContainsKey("SampleVolume")) sb.AppendLine($"样品体积 (章节7.5): {extraParams["SampleVolume"]} mL"); if (extraParams.ContainsKey("BubbleRemoved")) sb.AppendLine($"气泡清除确认 (章节7.6): {((bool)extraParams["BubbleRemoved"] ? "是" : "否")}"); if (extraParams.ContainsKey("UsePressure") && (bool)extraParams["UsePressure"]) sb.AppendLine($"加压测试 (附录A2): 压力 = {extraParams["PressureValue"]} kPa"); else if (extraParams.ContainsKey("UsePressure")) sb.AppendLine($"加压测试 (附录A2): 未加压(液体蒸气压≤33.8kPa)"); if (extraParams.ContainsKey("IsCleanConfirmed")) { string cleaner = extraParams.ContainsKey("CleanerName") ? extraParams["CleanerName"]?.ToString() ?? "" : ""; sb.AppendLine($"采样池清洁确认 (章节7.1): {((bool)extraParams["IsCleanConfirmed"] ? "是" : "否")},清洁人: {cleaner}"); } if (extraParams.ContainsKey("AmbientCalibrated")) sb.AppendLine($"环境温度校准 (章节8.1): {((bool)extraParams["AmbientCalibrated"] ? $"是,温度 {extraParams["AmbientTemperature"]} °C" : "否")}"); if (extraParams.ContainsKey("PlatinumCompatible")) sb.AppendLine($"铂反应性确认 (章节1.4): {((bool)extraParams["PlatinumCompatible"] ? "液体与铂兼容" : "未确认")}"); if (extraParams.ContainsKey("LiquidReactivityNote") && !string.IsNullOrWhiteSpace(extraParams["LiquidReactivityNote"]?.ToString())) sb.AppendLine($"备注: {extraParams["LiquidReactivityNote"]}"); } sb.AppendLine(); sb.AppendLine("序号\t热导率 (W/m·K)\t热扩散率 (×10⁻⁶ m²/s)\t体积热容 (kJ/m³·K)"); sb.AppendLine("----\t----------------\t------------------------\t-------------------"); foreach (var m in measurements) { sb.AppendLine($"{m.Index}\t{m.ThermalConductivity:F5}\t\t{m.ThermalDiffusivity:F5}\t\t\t{m.VolumetricHeatCapacity:F2}"); } sb.AppendLine(); sb.AppendLine("平均值:"); sb.AppendLine($" 热导率 λ: {avgLambda:F5} W/m·K"); sb.AppendLine($" 热扩散率 α: {avgAlpha:F5} ×10⁻⁶ m²/s"); sb.AppendLine($" 体积热容 VHC: {avgVhc:F2} kJ/m³·K"); // 章节10:精密度声明 sb.AppendLine(); sb.AppendLine("----- 精密度与偏倚声明 (章节10) -----"); sb.AppendLine("本测量结果可参考ASTM D7896-19标准中给出的重复性限值进行评定。"); sb.AppendLine("例如:对于热导率,重复性限值(r)约为平均值的2-5%(依样品而定)。"); sb.AppendLine("本软件不对测量结果的符合性做出直接判定,用户应参考标准原文进行评估。"); sb.AppendLine(); sb.AppendLine("备注:本报告依据ASTM D7896-19标准生成,数据由瞬态热线法测量系统自动采集。"); sb.AppendLine("=".PadRight(80, '=')); string fileName = $"D7896_Report_{sampleId}_{DateTime.Now:yyyyMMdd_HHmmss}.txt"; string fullPath = Path.Combine(_outputDirectory, fileName); await File.WriteAllTextAsync(fullPath, sb.ToString(), Encoding.UTF8); return fullPath; } }