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