using IStation.Model; using System.Data; using System.Text; namespace IStation.Test { internal class Program { // 过滤无效数据 // 1输模型修正 // 2输数据修正 // 修正组合偏差 static void Main(string[] args) { //Station1Helper.Start(); //1 数据修正 //Station2Helper.Start(); //2 模型修正 // 3 python修正 //Completion(); //4 修正后相似换算修正 //StationCombineHelper.Start(1);// 5 组合偏差修正 //StationCombineHelper.Start(2);// 5 组合偏差修正 StationCombineHelper.Start(3);// 6 分析泵频谱系数 Console.WriteLine(); Console.WriteLine("ok"); Console.ReadKey(); } public static void Completion() { var fullPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "pumpcsv"); var fileNameList = Directory.GetFiles(fullPath).Select(x => Path.GetFileNameWithoutExtension(x)).ToList(); fileNameList = fileNameList.Where(x => x.Contains("update_curve")).ToList(); if (fileNameList == null || fileNameList.Count() < 1) return; var deleteList = fileNameList.Where(x => x.Contains("similar") || x.Contains("def")).ToList(); deleteList?.ForEach(x => File.Delete(x)); var flagCurveDict = GetFlagCurveDict(); fileNameList.RemoveAll(x => x.Contains("similar") ||x.Contains("def")); var group = fileNameList.Where(x => x.Contains("update_curve")).GroupBy(x => x.Substring(0, 2)); foreach (var flagItem in group) { if (!int.TryParse(flagItem.Key, out int flag)) continue; var files = flagItem.OrderBy(x => x).ToList(); var fileInfoList = new List<(int Hz, string FileName)>(); foreach (var fileName in files) { var hz = fileName.Substring(3, 2); if (!int.TryParse(hz, out int hzInt)) continue; if (hzInt > 50) { continue; } fileInfoList.Add((hzInt, fileName)); } if (fileInfoList.Count == 1 && fileInfoList[0].Hz==50) { continue; } for (int i = 25; i <= 50; i++) { var maxHz = fileInfoList.Max(x => x.Hz); var curvePointList = new List(); var fileName = string.Empty; var currentHz = i; var newFileName = ""; if (fileInfoList.Exists(x => x.Hz == i)) { continue; } else if (currentHz == 50) { var curve = flagCurveDict[flag]; curvePointList = curve.GetFitPoints(100).ToList(); newFileName = $"{flagItem.Key}_{50}_update_curve_def.csv"; } else if (currentHz > maxHz) { var curve = flagCurveDict[flag]; var similar_qh = Model.CurveCalcuHelper.CalculateSimilarQH(curve, 50, currentHz); if (similar_qh == null) { continue; } curvePointList = similar_qh.GetFitPoints(100).ToList(); newFileName = $"{flagItem.Key}_{currentHz}_update_curve_similar_def.csv"; } else { var (Hz, FileName) = fileInfoList.FirstOrDefault(x => x.Hz > i); if (Hz < 1) continue; var updateCurvePtList = new List(); var updateCurveFile = Path.Combine(fullPath, $"{flagItem.Key}_{Hz}_update_curve.csv"); using (var fs = new FileStream(updateCurveFile, FileMode.Open, FileAccess.Read)) using (var sr = new StreamReader(fs, Encoding.UTF8)) { var strLine = string.Empty; sr.ReadLine(); while (!string.IsNullOrEmpty(strLine = sr.ReadLine())) { var strList = strLine.Split(','); var x = double.Parse(strList[0]); var y = double.Parse(strList[1]); updateCurvePtList.Add(new CurvePoint(x, y)); } } var similar_qh = Model.CurveCalcuHelper.CalculateSimilarQH(new CurveExpress(updateCurvePtList), Hz, currentHz); if (similar_qh == null) { continue; } curvePointList = similar_qh.GetFitPoints(100).ToList(); newFileName = $"{flagItem.Key}_{currentHz}_update_curve_similar_{Hz}.csv"; } if (!curvePointList.Any()) { continue; } var currentCurveFile = Path.Combine(fullPath, newFileName); CsvHelper.ExportToCsv(curvePointList, currentCurveFile); Console.WriteLine(newFileName); } } } //static void Main(string[] args) //{ // var splineList = new List(); // var measuredList = new List(); // var path = AppDomain.CurrentDomain.BaseDirectory; // var lienPaht = path + @"\pumpcsv\23_44_old_curve.csv"; // var measuredPath = path + @"\pumpcsv\23_44.csv"; // using (var fs = new FileStream(lienPaht, FileMode.Open, FileAccess.Read)) // using (var sr = new StreamReader(fs, Encoding.UTF8)) // { // var strLine = string.Empty; // sr.ReadLine(); // while (!string.IsNullOrEmpty(strLine = sr.ReadLine())) // { // var strList = strLine.Split(','); // var x = double.Parse(strList[0]); // var y = double.Parse(strList[1]); // splineList.Add(new CurvePoint(x, y)); // } // } // using (var fs = new FileStream(measuredPath, FileMode.Open, FileAccess.Read)) // using (var sr = new StreamReader(fs, Encoding.UTF8)) // { // var strLine = string.Empty; // sr.ReadLine(); // while (!string.IsNullOrEmpty(strLine = sr.ReadLine())) // { // var strList = strLine.Split(','); // var x = double.Parse(strList[4]); // var y = double.Parse(strList[5]); // measuredList.Add(new CurvePoint(x, y)); // } // } // // 样条曲线处理 // double[] splineX = splineList.Select(x => x.X).ToArray(); // double[] splineY = splineList.Select(x => x.Y).ToArray(); // // 实测数据处理 // double[] measuredXAll = measuredList.Select(x => x.X).ToArray(); // double[] measuredYAll = measuredList.Select(x => x.Y).ToArray(); // var helper = new PumpCurveDataFusionCorrectorHelper(); // (double[] mergedX, double[] mergedY, double[] optimizedX, double[] optimizedY) = helper.Corrent(splineX, splineY, measuredXAll, measuredYAll); // var pt_list = new List(); // for (int i = 0; i < optimizedX.Length; i++) // { // var x = optimizedX[i]; // var y = optimizedY[i]; // pt_list.Add(new CurvePoint(x, y)); // } // var fullPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "pumpcsv"); // CsvHelper.ExportToCsv(pt_list, Path.Combine(fullPath, $"23_44_update_curve.csv")); // Console.WriteLine("ok"); // Console.ReadKey(); //} private static Dictionary GetFlagCurveDict() { var dict = new Dictionary(); var bll_curve = new IStation.BLL.PumpCurve(); var station_list = new IStation.BLL.Station().GetAll(); foreach (var station in station_list) { var eq_list = new IStation.BLL.Equipment().GetPumpListByBelongTypeAndBelongID(IStation.ObjectType.Station, station.ID); if (eq_list == null || !eq_list.Any()) { continue; } foreach (var eq in eq_list) { IStation.Model.CurveExpress qh = null; var curve_info = bll_curve.GetDefaultWorkingByPumpID(eq.ID)?.CurveInfo; if (curve_info != null) { qh = curve_info.CurveQH; } dict.Add(eq.SortCode, qh); } } return dict; } } }