using IStation.Model; namespace IStation.Test { public class StationTotalFlowPressureHelper { /// /// 绑定数据 /// public static void Start(int stationIndex = 1) { var projectId = 661070185922629; IStation.SettingsD.Project.ID = projectId; var monitorDataSourcesId = 663976941449285; // 2024 - 202504 var stationId = 462958406303813; if (stationIndex > 1) { stationIndex = 2; stationId = 462958422204485; } var bll = new BLL.StationSignalRecordPacket(); var ptFilterList = new List(); var packets = bll.Get(monitorDataSourcesId, stationId); var ptList = new List(); var records = packets.SelectMany(x => x.StationSignalRecords).ToList(); foreach (var x in records) { if (x.TotalPressure > 0 && x.TotalFlow > 0) { ptList.Add(new CurvePtViewModel(x.TotalFlow, x.TotalPressure)); } } ptFilterList = Filter(ptList); var fullPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "stationcsv"); if (!Directory.Exists(fullPath)) { Directory.CreateDirectory(fullPath); } string filePath = Path.Combine(fullPath, $"{stationIndex}_flow_pressure.csv"); CsvHelper.ExportToCsv(ptFilterList, filePath); Console.WriteLine("ok"); Console.ReadKey(); } public static List Filter(List ptList) { var pressures = ptList.Select(p => p.Y).ToList(); // 计算统计量 var (mean, stdDev) = DynamicThresholdProcessorHelper.CalculateStats(pressures); double skewness = DynamicThresholdProcessorHelper.CalculateSkewness(pressures); // 动态调整σ倍数 double sigmaMultiplier = DynamicThresholdProcessorHelper.CalculateSigmaMultiplier(skewness); sigmaMultiplier = 3;//目前默认 标准差 // 计算边界 double lower = mean - sigmaMultiplier * stdDev; double upper = mean + sigmaMultiplier * stdDev; return ptList.Where(p => p.Y >= lower && p.Y <= upper).ToList(); } } }