ningshuxia
8 天以前 1519533649b43337d214523f7cd075edf237b3f7
01-api/_Expand/IStation.Test/Program - ¸´ÖÆ.cs
@@ -1,51 +1,164 @@
// See https://aka.ms/new-console-template for more information
using 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();
            // è§£æžè¿”回的 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();
    }
}