From 1519533649b43337d214523f7cd075edf237b3f7 Mon Sep 17 00:00:00 2001 From: ningshuxia <ningshuxia0927@outlook.com> Date: 星期二, 22 四月 2025 13:57:42 +0800 Subject: [PATCH] 代码修改 --- 01-api/_Expand/IStation.Test/Program - 复制.cs | 197 ++++++++++++++++++++++++++++++++++++++---------- 1 files changed, 155 insertions(+), 42 deletions(-) diff --git "a/01-api/_Expand/IStation.Test/Program - \345\244\215\345\210\266.cs" "b/01-api/_Expand/IStation.Test/Program - \345\244\215\345\210\266.cs" index 9d14657..56be8a2 100644 --- "a/01-api/_Expand/IStation.Test/Program - \345\244\215\345\210\266.cs" +++ "b/01-api/_Expand/IStation.Test/Program - \345\244\215\345\210\266.cs" @@ -1,51 +1,164 @@ -锘�// See https://aka.ms/new-console-template for more information +锘縰sing IStation; +using Newtonsoft.Json; +public class InfluxDBHistoryDataFetcher +{ + private readonly HttpClient _httpClient; + private readonly string _baseUri; -using IStation; + public InfluxDBHistoryDataFetcher(string baseUri) + { + _baseUri = baseUri; + _httpClient = new HttpClient(); + } -//var dt_now = DateTime.Now; -//var dt_next = new DateTime(dt_now.Year, dt_now.Month, dt_now.Day, dt_now.Hour, dt_now.Minute + 1, 0); -//var dt_space = dt_next - dt_now; -//Console.WriteLine($"鍒濆鍖�({dt_space.TotalSeconds})..."); -//Thread.Sleep(dt_space); -//IStation.Service.MonitorRecord _service_monitor_record = new(); -//IStation.Settings.ParasHelper.DataBase.SQLite.AnalysisConnectString = "DataSource=" + IStation.Settings.ParasHelper.LocalFile.DataFolderDirectory + "\\analysis.db"; -//IStation.Settings.ParasHelper.DataBase.SQLite.ScheduleConnectString = "DataSource=" + IStation.Settings.ParasHelper.LocalFile.DataFolderDirectory + "\\schedule.db"; -//IStation.Settings.ParasHelper.DataBase.SQLite.HydraulicConnectString = "DataSource=" + IStation.Settings.ParasHelper.LocalFile.DataFolderDirectory + "\\hydraulic.db"; -//IStation.Settings.ParasHelper.DataBase.SQLite.MonitorConnectString = "DataSource=" + IStation.Settings.ParasHelper.LocalFile.DataFolderDirectory + "\\monitor.db"; -//IStation.Settings.ParasHelper.Save(); + public async Task<List<ResponseData>> FetchDataAsync( + List<string> measurements, + DateTime startTime, + DateTime endTime, + string frequency, + string type = "first") + { + // 姣忔鏈�澶氫紶閫� 5 涓� measurements + const int batchSize = 5; + var allData = new List<ResponseData>(); -//Console.WriteLine("鍚姩瀹炴椂鏁版嵁閲囬泦..."); -//var timer = new System.Timers.Timer(); -//timer.Interval = 10 * 1000; -//timer.Elapsed += (s, e) => -//{ -// dt_now = DateTime.Now; -// var dt_now_str = dt_now.ToString("G"); -// var get_msg = GlobalHelper.GetMonitorRecordList(dt_now, out List<IStation.Model.MonitorRecord> monitor_record_list, false); -// if (!string.IsNullOrEmpty(get_msg)) -// { -// Console.WriteLine($"{dt_now_str}:{get_msg}"); -// } -// else -// { -// var bol = _service_monitor_record.Inserts(monitor_record_list); -// if (bol) -// { -// Console.WriteLine($"{dt_now_str}:閲囬泦鎴愬姛!"); -// } -// else -// { -// Console.WriteLine($"{dt_now_str}:閲囬泦澶辫触!"); -// } -// } -//}; -//timer.AutoReset = true; -//timer.Start(); + // 鍒嗗壊 measurements 涓哄涓壒娆� + for (int i = 0; i < measurements.Count; i += batchSize) + { + var batchMeasurements = measurements.Skip(i).Take(batchSize).ToList(); + var batchData = await FetchBatchAsync(batchMeasurements, startTime, endTime, frequency, type); + allData.AddRange(batchData); + } + return allData; + } + private async Task<List<ResponseData>> FetchBatchAsync( + List<string> measurements, + DateTime startTime, + DateTime endTime, + string frequency, + string type) + { + // 鏋勯�� URL 鍙傛暟 + var queryParams = new Dictionary<string, string> + { + { "startTime", startTime.ToString("yyyy-MM-dd") }, + { "endTime", endTime.ToString("yyyy-MM-dd") }, + { "type", type }, + { "frequency", frequency }, + { "measurements", string.Join(",", measurements) } + }; -var request_list= + // 鏋勯�犲畬鏁寸殑 URL + var url = ConstructUrl(queryParams); + try + { + // 鍙戣捣 HTTP GET 璇锋眰 + var response = await _httpClient.GetAsync(url); + response.EnsureSuccessStatusCode(); // 妫�鏌� HTTP 閿欒 -Console.ReadKey(); \ No newline at end of file + // 瑙f瀽杩斿洖鐨� JSON 鏁版嵁 + var content = await response.Content.ReadAsStringAsync(); + var result = JsonConvert.DeserializeObject<ApiResponse>(content); + + if (result != null && result.Status == "200") + { + return result.Data; + } + else + { + Console.WriteLine($"Error fetching data: {result?.Msg}"); + return new List<ResponseData>(); + } + } + catch (Exception ex) + { + Console.WriteLine($"Request failed: {ex.Message}"); + return new List<ResponseData>(); + } + } + + private string ConstructUrl(Dictionary<string, string> queryParams) + { + var queryStrings = queryParams + .Select(kv => $"{kv.Key}={Uri.EscapeDataString(kv.Value)}") + .ToList(); + + return $"{_baseUri}?{string.Join("&", queryStrings)}"; + } + + public List<ResponseData> GetDataByMeasurement(List<ResponseData> allData, string measurementName) + { + return allData.Where(data => data.TagName == measurementName).ToList(); + } +} + +// 鎺ュ彛杩斿洖鐨勬暟鎹ā鍨� +public class ApiResponse +{ + public string Msg { get; set; } + public List<ResponseData> Data { get; set; } + public string Status { get; set; } +} + +public class ResponseData +{ + public string DataMsg { get; set; } + public List<List<string>> Vals { get; set; } + public string TagName { get; set; } +} + +// 浣跨敤绀轰緥 +public class Program +{ + public static async Task Main(string[] args) + { + // 鍒濆鍖栬緟鍔╃被 + var fetcher = new InfluxDBHistoryDataFetcher( + "http://192.168.201.235:8009/dataController/getCommHistoryDataOfInfluxDB"); + + // 绀轰緥 measurements + var measurements = GlobalHelper.HistoryTagList; + + // 鑾峰彇鏁版嵁 + var startTime = new DateTime(2024, 5, 12); + var endTime = new DateTime(2024, 5, 13); + var frequency = "12h"; + var type = "first"; + + var allData = await fetcher.FetchDataAsync( + measurements: measurements, + startTime: startTime, + endTime: endTime, + frequency: frequency, + type: type); + + // 鎵撳嵃缁撴灉 + Console.WriteLine("鎵�鏈夋暟鎹�:"); + foreach (var data in allData) + { + Console.WriteLine($"TagName: {data.TagName}"); + foreach (var val in data.Vals) + { + Console.WriteLine($" {val[0]}: {val[1]}"); + } + } + + // 鎻愬彇鐗瑰畾 measurement 鐨勬暟鎹� + var specificData = fetcher.GetDataByMeasurement(allData, "浜屽彇姘撮珮鍘�1鍙蜂富姘存车.鏈夊姛鍔熺巼"); + Console.WriteLine("\n鐗瑰畾娴嬮噺椤规暟鎹�:"); + foreach (var data in specificData) + { + Console.WriteLine($"TagName: {data.TagName}"); + foreach (var val in data.Vals) + { + Console.WriteLine($" {val[0]}: {val[1]}"); + } + } + Console.WriteLine("缁撴潫"); + Console.ReadKey(); + } +} \ No newline at end of file -- Gitblit v1.9.3