ningshuxia
2025-04-16 8c68ab4be4bff7981e745cc2b41c7bba5257a2d3
02-desktop/Desktop/IStation.Test/Program.cs
@@ -1,6 +1,7 @@
using IStation.Model;
using System.Data;
using System.Text;
namespace IStation.Test
{
    internal class Program
@@ -11,11 +12,130 @@
        // 修正组合偏差
        static void Main(string[] args)
        {
            Station2Helper.Start();
            Console.WriteLine();
            //Station1Helper.Start();  //1 数据修正
            //Station2Helper.Start();  //2 模型修正
            // 3  python修正 ,目前有些数据问题还需要解决
            //Completion();            //4 修正后相似换算修正
            //StationCombineHelper.Start(1);// 5 组合偏差修正
            //StationCombineHelper.Start(2);// 5 组合偏差修正
            // 6 分析泵频谱系数
            // 7
           // Station2TotalFlowDiffHelper.Start();// 8 补全流量偏差 + python
            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<CurvePoint>();
                    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<CurvePoint>();
                        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);
                }
            }
        }
@@ -84,7 +204,33 @@
        //    Console.ReadKey();
        //}
        private static Dictionary<int, IStation.Model.CurveExpress> GetFlagCurveDict()
        {
            var dict = new Dictionary<int, IStation.Model.CurveExpress>();
            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;
        }
    }