using Microsoft.VisualBasic.FileIO;
|
using System.Text;
|
using Yw;
|
|
namespace IStation
|
{
|
/// <summary>
|
/// 全局辅助类
|
/// </summary>
|
public class HistoryScadaHelper
|
{
|
|
#region 获取历史Scada
|
|
/// <summary>
|
/// 众毅历史数据
|
/// </summary>
|
public class ZyHistoryDataDto
|
{
|
/// <summary>
|
///
|
/// </summary>
|
public string msg { get; set; }
|
|
/// <summary>
|
///
|
/// </summary>
|
public List<ZyDataDto> data { get; set; }
|
|
/// <summary>
|
///
|
/// </summary>
|
public string status { get; set; }
|
}
|
|
/// <summary>
|
/// 众毅历史数据 data
|
/// </summary>
|
public class ZyDataDto
|
{
|
/// <summary>
|
///
|
/// </summary>
|
public string dataMsg { get; set; }
|
|
/// <summary>
|
///
|
/// </summary>
|
public List<string[]> vals { get; set; }
|
|
/// <summary>
|
///
|
/// </summary>
|
public string tagName { get; set; }
|
}
|
|
/// <summary>
|
/// 获取泵累计运行时间(小时)字典
|
/// </summary>
|
/// <param name="station1_flag_cumulative_run_time_dict"></param>
|
/// <param name="station2_flag_cumulative_run_time_dict"></param>
|
/// <param name="date_interval">统计日期间隔(天)</param>
|
/// <param name="frequency">数据步长 1h(s:秒 m:分 h:小时 d:天)</param>
|
/// <param name="type">数据值类型 first:每个间隔的第一个值 mean:每个间隔的平均值</param>
|
/// <returns></returns>
|
public static string GetFlagCumulativeRuntimeDict(int date_interval = 30, string frequency = "1h", string type = "first")
|
{
|
|
var url_prefix = Settings.ParasHelper.ZyDocking.HistoryScadaHttpUrl;
|
if (string.IsNullOrEmpty(url_prefix))
|
{
|
return "HistoryScadaHttpUrl 为空";
|
}
|
|
var enter_time_format = "yyyy-MM-dd HH:mm:ss";
|
var travel_time_format = new System.Globalization.DateTimeFormatInfo()
|
{
|
ShortDatePattern = "yyyy-MM-dd'T'HH:mm:ss.SSS Z"
|
}; ;
|
|
var now_dt = DateTime.Now;
|
var start_dt = now_dt.AddDays(-date_interval);
|
var end_dt = now_dt;
|
|
var start_time = start_dt.ToString(enter_time_format);
|
var end_time = end_dt.ToString(enter_time_format);
|
|
var tag_list = new List<string>();
|
tag_list.AddRange(GlobalHelper.FlagCumulativeRuntimeMappingDict1.Keys);
|
tag_list.AddRange(GlobalHelper.FlagCumulativeRuntimeMappingDict2.Keys);
|
|
var measurement_max_count = 5;
|
var measurements_list = new List<string>();
|
for (int i = 0; i < tag_list.Count; i += measurement_max_count)
|
{
|
var tag_list_temp = tag_list.Skip(i).Take(measurement_max_count).ToList();
|
var measurements = Yw.Untity.StringListHelper.ToString(tag_list_temp);
|
measurements_list.Add(measurements);
|
}
|
|
var log_str_builder = new StringBuilder();
|
var zy_scada_list_dict = new Dictionary<string, List<Model.ZyScada>>();
|
|
foreach (var measurements in measurements_list)
|
{
|
var url = $"{url_prefix}?" +
|
$"startTime={start_time}&" +
|
$"endTime={end_time}&" +
|
$"type={type}&" +
|
$"frequency={frequency}&" +
|
$"measurements={measurements}";
|
|
log_str_builder.AppendLine($"历史数据请求:{url}");
|
var response_text = Yw.Untity.HttpRequestHelper.Get(url);
|
var dto = JsonHelper.Json2Object<ZyHistoryDataDto>(response_text);
|
var zy_dada_dto_list = dto?.data;
|
if (zy_dada_dto_list == null || !zy_dada_dto_list.Any())
|
{
|
log_str_builder.AppendLine("无数据");
|
continue;
|
}
|
|
foreach (var zy_dada_dto in zy_dada_dto_list)
|
{
|
var tag = zy_dada_dto.tagName;
|
var vlus = zy_dada_dto.vals;
|
|
var zy_scada_list = new List<Model.ZyScada>();
|
foreach (var vlu in vlus)
|
{
|
var time_str = vlu[0];
|
var value_str = vlu[1];
|
if (!double.TryParse(value_str, out double value))
|
continue;
|
var time = Convert.ToDateTime(time_str, travel_time_format).AddHours(-8);
|
var zy_scada = new Model.ZyScada();
|
zy_scada.Time = time;
|
zy_scada.Code = tag;
|
zy_scada.Value = value;
|
zy_scada.Tag = tag;
|
zy_scada_list.Add(zy_scada);
|
}
|
zy_scada_list_dict.Add(tag, zy_scada_list);
|
}
|
}
|
|
var json = JsonHelper.Object2Json(zy_scada_list_dict);
|
var folder_path = Path.Combine(Settings.ParasHelper.LocalFile.DataFolderDirectory, "累计时间");
|
if (!Directory.Exists(folder_path))
|
{
|
Directory.CreateDirectory(folder_path);
|
}
|
var file_path = folder_path + "\\" + DateTime.Now.ToString("HH-mm-ss") + ".json";
|
File.WriteAllText(file_path, json);
|
log_str_builder.AppendLine(file_path);
|
return log_str_builder.ToString();
|
}
|
|
#region 获取实时Scada
|
|
/// <summary>
|
/// 众毅实时数据
|
/// </summary>
|
public class ZyRealTimeDataDto
|
{
|
|
/// <summary>
|
///
|
/// </summary>
|
public string msg { get; set; }
|
|
/// <summary>
|
///
|
/// </summary>
|
public Dictionary<string, Dictionary<string, string>> data { get; set; }
|
|
/// <summary>
|
///
|
/// </summary>
|
public int status { get; set; }
|
}
|
|
/// <summary>
|
/// 获取实时众毅Scada数据列表
|
/// </summary>
|
public static string GetRealTimeZyScadaList(out List<Model.ZyScada> zy_scada_list, bool use_debug = false)
|
{
|
zy_scada_list = new List<Model.ZyScada>();
|
if (!Settings.ParasHelper.ZyDocking.Enable)
|
{
|
if (use_debug)
|
{
|
var debug_zy_scada_file = Settings.ParasHelper.LocalFile.DataFolderDirectory + "\\" + "zy_scada_debug.txt";
|
if (File.Exists(debug_zy_scada_file))
|
{
|
var debug_zy_scada_json = File.ReadAllText(debug_zy_scada_file);
|
var dto = JsonHelper.Json2Object<ZyRealTimeDataDto>(debug_zy_scada_json);
|
zy_scada_list = ConvertRealTimeZyScadaList(dto?.data);
|
}
|
}
|
return "ZyDocking 未启用";
|
}
|
|
var url = Settings.ParasHelper.ZyDocking.RealTimeScadaHttpUrl;
|
if (string.IsNullOrEmpty(url))
|
{
|
return "RealTimeScadaHttpUrl 为空";
|
}
|
|
try
|
{
|
var response_text = Yw.Untity.HttpRequestHelper.Get(url);
|
var dto = JsonHelper.Json2Object<ZyRealTimeDataDto>(response_text);
|
var data = dto?.data;
|
if (dto.data == null || !dto.data.Any())
|
{
|
return "response_text 解析失败!";
|
}
|
zy_scada_list = ConvertRealTimeZyScadaList(dto.data);
|
}
|
catch (System.Exception ex)
|
{
|
return ex.Message;
|
}
|
if (!zy_scada_list.Any())
|
{
|
return "zy_scada_list 无数据";
|
}
|
var json = JsonHelper.Object2Json(zy_scada_list);
|
var folder_path = Path.Combine(Settings.ParasHelper.LocalFile.DataFolderDirectory, "实时时间");
|
if (!Directory.Exists(folder_path))
|
{
|
Directory.CreateDirectory(folder_path);
|
}
|
var file_path = folder_path + "\\" + DateTime.Now.ToString("HH-mm-ss") + ".json";
|
File.WriteAllText(file_path, json);
|
return string.Empty;
|
}
|
|
|
/// <summary>
|
/// 转换实时众毅Scada数据列表
|
/// </summary>
|
/// <param name="data"></param>
|
/// <returns></returns>
|
private static List<Model.ZyScada> ConvertRealTimeZyScadaList(Dictionary<string, Dictionary<string, string>> data)
|
{
|
if (data == null || !data.Any())
|
return default;
|
var zy_scada_list = new List<Model.ZyScada>();
|
foreach (var item in data)
|
{
|
var zy_scada = new Model.ZyScada();
|
zy_scada.Code = item.Key;
|
zy_scada.Tag = item.Value["key"];
|
|
if (DateTime.TryParse(item.Value["time"], out DateTime t))
|
zy_scada.Time = t;
|
if (double.TryParse(item.Value["vals"], out double v))
|
zy_scada.Value = v;
|
|
zy_scada_list.Add(zy_scada);
|
}
|
return zy_scada_list;
|
}
|
|
|
#endregion
|
|
#endregion
|
|
|
/// <summary>
|
/// 获取泵累计运行时间(小时)字典
|
/// </summary>
|
/// <param name="station1_flag_cumulative_run_time_dict"></param>
|
/// <param name="station2_flag_cumulative_run_time_dict"></param>
|
/// <param name="date_interval">统计日期间隔(天)</param>
|
/// <param name="frequency">数据步长 1h(s:秒 m:分 h:小时 d:天)</param>
|
/// <param name="type">数据值类型 first:每个间隔的第一个值 mean:每个间隔的平均值</param>
|
/// <returns></returns>
|
public static void GetFlagCumulativeRuntimeDict(out Dictionary<int, double> station1_flag_cumulative_run_time_dict, out Dictionary<int, double> station2_flag_cumulative_run_time_dict, int date_interval = 30, string frequency = "1h", string type = "first")
|
{
|
station1_flag_cumulative_run_time_dict = new Dictionary<int, double>();
|
station2_flag_cumulative_run_time_dict = new Dictionary<int, double>();
|
|
|
var tag_list = new List<string>();
|
tag_list.AddRange(GlobalHelper.FlagCumulativeRuntimeMappingDict1.Keys);
|
tag_list.AddRange(GlobalHelper.FlagCumulativeRuntimeMappingDict2.Keys);
|
|
var filePath = File.ReadAllText(@"C:\Users\Eventech\Desktop\陈行现场\240725\Data\累计数据\12-20-31.json");
|
|
|
var str_build = new StringBuilder();
|
//using (StreamReader reader = new StreamReader(filePath))
|
//{
|
// while (!reader.EndOfStream)
|
// {
|
// string line = reader.ReadLine();
|
|
// // 处理每行
|
// }
|
//}
|
|
using (TextFieldParser parser = new TextFieldParser(filePath))
|
{
|
parser.TextFieldType = FieldType.Delimited;
|
parser.SetDelimiters(",");
|
while (!parser.EndOfData)
|
{
|
string[] fields = parser.ReadFields();
|
for (int i = 0; i < fields.Length; i++)
|
{
|
str_build.Append(fields[i]);
|
// 处理每个字段
|
}
|
}
|
}
|
|
//// 逐行读取JSON文件
|
//using (JsonDocument jsonDocument = JsonDocument.Parse(File.OpenRead(filePath)))
|
//{
|
// foreach (JsonElement element in jsonDocument.RootElement.EnumerateArray())
|
// {
|
// // 进行你的操作,如提取数据等
|
// // 例如:
|
// string name = element.GetProperty("key").GetString();
|
// var age = element.GetProperty("value").GetString();
|
|
// Console.WriteLine($"Name: {name}, Age: {age}");
|
// }
|
//}
|
|
//var zy_scada_list_dict = JsonHelper.Json2Object<Dictionary<string, List<Model.ZyScada>>>(json);
|
//foreach (var item in zy_scada_list_dict)
|
//{
|
// var tag = item.Key;
|
// var zy_scada_list = item.Value;
|
// if (zy_scada_list == null || !zy_scada_list.Any())
|
// {
|
// continue;
|
// }
|
// var min_time = zy_scada_list.Min(x => x.Value);
|
// var max_time = zy_scada_list.Max(x => x.Value);
|
// var run_time = max_time - min_time ?? 0;
|
// if (GlobalHelper.FlagCumulativeRuntimeMappingDict1.ContainsKey(tag))
|
// {
|
// var flag = GlobalHelper.FlagCumulativeRuntimeMappingDict1[tag];
|
// var time = Math.Round(run_time / 60, 1);
|
|
// station1_flag_cumulative_run_time_dict.Add(flag, time);
|
// }
|
// else if (GlobalHelper.FlagCumulativeRuntimeMappingDict2.ContainsKey(tag))
|
// {
|
// var flag = GlobalHelper.FlagCumulativeRuntimeMappingDict2[tag];
|
// var time = Math.Round(run_time, 1);
|
|
|
// station2_flag_cumulative_run_time_dict.Add(flag, time);
|
// }
|
//}
|
|
}
|
|
|
}
|
}
|