using IStation.Untity;
|
using IStation.ZyDto;
|
using IStation.ZyModel;
|
using System;
|
using System.Collections.Generic;
|
using System.Globalization;
|
using System.IO;
|
using System.Linq;
|
using System.Text;
|
using System.Threading;
|
using System.Threading.Tasks;
|
|
namespace IStation
|
{
|
/// <summary>
|
/// 调度方案(众毅)
|
/// </summary>
|
internal class ZyConnectHelper
|
{
|
public static bool isDebug = Convert.ToBoolean(System.Configuration.ConfigurationManager.AppSettings["isDebug"]);
|
|
/// <summary>
|
///
|
/// </summary>
|
//static string _url_root = "ws://localhost:40001";
|
//static string _url_prj = "ws://localhost:8001";
|
//public static string _url_root = "ws://192.168.201.17:40001";
|
|
//public static string _GetUrl = "http://192.168.201.235:8009/";
|
public static string ZyApiUrl = System.Configuration.ConfigurationManager.AppSettings["ZYAPiUrl"];
|
|
/// <summary>
|
/// 取水总量
|
/// </summary>
|
/// <param name="startTime">开始时间</param>
|
/// <param name="endTime">结束时间</param>
|
/// <param name="resolution">时间步长,默认300秒</param>
|
/// <returns></returns>
|
public static async Task<double> GetTotalWaterByTimeRange_In(DateTime startTime, DateTime endTime, string resolution = "300s")
|
{
|
if (isDebug)
|
return 0;
|
var tagDict = new Dictionary<string, string>
|
{
|
{ "1#", "二取水1号主水泵.累计流量" },
|
{ "2#", "二取水2号主水泵.累计流量" },
|
{ "3#", "二取水3号主水泵.累计流量" },
|
{ "4#", "二取水4号主水泵.累计流量" },
|
{ "5#", "二取水5号主水泵.累计流量" },
|
};
|
string joinedValues = string.Join(",", tagDict.Values);
|
var result = HttpClientHelper.Get<List<DataPoint>>(ZyApiUrl, startTime.ToString("yyyy-MM-dd"), endTime.ToString("yyyy-MM-dd"), "first", resolution, joinedValues);
|
var realScadaDataList = GetScadaData(result);
|
double totalWaterSupply = 0;
|
if (realScadaDataList != null && realScadaDataList.Any())
|
{
|
foreach (var r in realScadaDataList)
|
{
|
if (r.MonitorRecords == null || !r.MonitorRecords.Any())
|
continue;
|
var rrr = r.MonitorRecords.Where(x => x.Value != null).Select(x => x.Value.Value).ToList();
|
if (rrr == null || !rrr.Any())
|
continue;
|
|
totalWaterSupply += (rrr.Last() - rrr.First());
|
}
|
}
|
return totalWaterSupply;
|
}
|
|
/// <summary>
|
///
|
/// </summary>
|
/// <param name="result"></param>
|
/// <returns></returns>
|
public static List<RealScadaData> GetScadaData(List<DataPoint> result)
|
{
|
var realScadaDataList = new List<RealScadaData>();
|
DateTimeFormatInfo dtFormat = new DateTimeFormatInfo();
|
dtFormat.ShortDatePattern = "yyyy-MM-dd'T'HH:mm:ss.SSS Z";
|
|
foreach (var item in result)
|
{
|
var tagName = item.TagName.ToString();
|
var monitorRecords = new List<ZyModel.MonitorRecord>();
|
|
foreach (var val in item.Vals)
|
{
|
var mr = new ZyModel.MonitorRecord();
|
var d = Convert.ToDateTime(val[0], dtFormat).AddHours(-8);
|
mr.Time = d;
|
if (double.TryParse(val[1], out double value))
|
{
|
mr.Value = value;
|
}
|
|
monitorRecords.Add(mr);
|
}
|
realScadaDataList.Add(new RealScadaData
|
{
|
TagName = tagName,
|
MonitorRecords = monitorRecords
|
});
|
}
|
return realScadaDataList;
|
}
|
|
/// <summary>
|
/// 取水总量
|
/// </summary>
|
/// <param name="day">开始时间</param>
|
/// <param name="resolution">时间步长,默认300秒</param>
|
/// <returns></returns>
|
public static async Task<double> GetTotalWaterByDay_In(DateTime day, string resolution = "300s")
|
{
|
if (isDebug)
|
return 125 + new Random().Next(1, 10);
|
|
var tagDict = new Dictionary<string, string>
|
{
|
{ "1#", "二取水1号主水泵.累计流量" },
|
{ "2#", "二取水2号主水泵.累计流量" },
|
{ "3#", "二取水3号主水泵.累计流量" },
|
{ "4#", "二取水4号主水泵.累计流量" },
|
{ "5#", "二取水5号主水泵.累计流量" },
|
};
|
/* var input = new ScadaDispatchInput
|
{
|
search = "history",
|
starttime = new DateTime(day.Year, day.Month, day.Day, 0, 0, 0).ToString("yyyy-MM-dd"),
|
endtime = new DateTime(day.Year, day.Month, day.Day, 23, 59, 59).ToString("yyyy-MM-dd"),
|
Resolution = resolution,
|
taglist = tagDict.Select(x => x.Key).ToArray()
|
};*/
|
var starttime = new DateTime(day.Year, day.Month, day.Day, 0, 0, 0).ToString("yyyy-MM-dd");
|
var endtime = new DateTime(day.Year, day.Month, day.Day, 23, 59, 59).ToString("yyyy-MM-dd");
|
string joinedValues = string.Join(",", tagDict.Values);
|
var result = HttpClientHelper.Get<List<DataPoint>>(ZyApiUrl, starttime, endtime, "first", resolution, joinedValues);
|
var realScadaDataList = GetScadaData(result);
|
double totalWaterSupply = 0;
|
if (realScadaDataList != null && realScadaDataList.Any())
|
{
|
foreach (var r in realScadaDataList)
|
{
|
if (r.MonitorRecords == null || !r.MonitorRecords.Any())
|
continue;
|
var rrr = r.MonitorRecords.Where(x => x.Value != null).Select(x => x.Value.Value).ToList();
|
if (rrr == null || !rrr.Any())
|
continue;
|
|
totalWaterSupply += (rrr.Last() - rrr.First());
|
}
|
}
|
|
return totalWaterSupply;
|
}
|
|
/// <summary>
|
/// 取水总量
|
/// </summary>
|
/// <param name="startTime">开始时间</param>
|
/// <param name="endTime">结束时间</param>
|
/// <param name="resolution">时间步长,默认300秒</param>
|
/// <returns></returns>
|
public static async Task<List<RealScadaData>> GetTotalWaterByDayTimeRange_In(DateTime startTime, DateTime endTime, string resolution = "300s")
|
{
|
var tagDict = new Dictionary<string, string>
|
{
|
{ "1#", "二取水1号主水泵.累计流量" },
|
{ "2#", "二取水2号主水泵.累计流量" },
|
{ "3#", "二取水3号主水泵.累计流量" },
|
{ "4#", "二取水4号主水泵.累计流量" },
|
{ "5#", "二取水5号主水泵.累计流量" },
|
};
|
/* var input = new ScadaDispatchInput
|
{
|
search = "history",
|
starttime = new DateTime(startTime.Year, startTime.Month, startTime.Day, 0, 0, 0).ToString("yyyy-MM-dd"),
|
endtime = new DateTime(endTime.Year, endTime.Month, endTime.Day, 23, 59, 59).ToString("yyyy-MM-dd"),
|
Resolution = resolution,
|
taglist = tagDict.Select(x => x.Key).ToArray()
|
};*/
|
string joinedValues = string.Join(",", tagDict.Values);
|
var result = HttpClientHelper.Get<List<DataPoint>>(ZyApiUrl, startTime.ToString("yyyy-MM-dd"), endTime.ToString("yyyy-MM-dd"), "first", resolution, joinedValues);
|
var realScadaDataList = GetScadaData(result);
|
|
return realScadaDataList;
|
}
|
|
/// <summary>
|
/// 取水总量
|
/// </summary>
|
/// <param name="startTime">开始时间</param>
|
/// <param name="endTime">结束时间</param>
|
/// <param name="resolution">时间步长,默认300秒</param>
|
/// <returns></returns>
|
public static async Task<double> GetTotalWaterByDayRange_In(DateTime startTime, DateTime endTime, string resolution = "300s")
|
{
|
var tagDict = new Dictionary<string, string>
|
{
|
{ "1#", "二取水1号主水泵.累计流量" },
|
{ "2#", "二取水2号主水泵.累计流量" },
|
{ "3#", "二取水3号主水泵.累计流量" },
|
{ "4#", "二取水4号主水泵.累计流量" },
|
{ "5#", "二取水5号主水泵.累计流量" },
|
};
|
/* var input = new ScadaDispatchInput
|
{
|
search = "history",
|
starttime = new DateTime(startTime.Year, startTime.Month, startTime.Day, 0, 0, 0).ToString("yyyy-MM-dd"),
|
endtime = new DateTime(endTime.Year, endTime.Month, endTime.Day, 23, 59, 59).ToString("yyyy-MM-dd"),
|
Resolution = resolution,
|
taglist = tagDict.Select(x => x.Key).ToArray()
|
};*/
|
string joinedValues = string.Join(",", tagDict.Values);
|
var result = HttpClientHelper.Get<List<DataPoint>>(ZyApiUrl, startTime.ToString("yyyy-MM-dd"), endTime.ToString("yyyy-MM-dd"), "first", resolution, joinedValues);
|
var realScadaDataList = GetScadaData(result);
|
|
double totalWaterSupply = 0;
|
if (realScadaDataList != null && realScadaDataList.Any())
|
{
|
foreach (var r in realScadaDataList)
|
{
|
if (r.MonitorRecords == null || !r.MonitorRecords.Any())
|
continue;
|
var rrr = r.MonitorRecords.Where(x => x.Value != null).Select(x => x.Value.Value).ToList();
|
if (rrr == null || !rrr.Any())
|
continue;
|
|
totalWaterSupply += (rrr.Last() - rrr.First());
|
}
|
}
|
|
return totalWaterSupply;
|
}
|
|
/// <summary>
|
/// 供水总量
|
/// </summary>
|
/// <param name="startTime">开始时间</param>
|
/// <param name="endTime">结束时间</param>
|
/// <param name="resolution">时间步长,默认300秒</param>
|
/// <returns></returns>
|
public static async Task<double> GetTotalWaterByDay_Out(DateTime dayD, string resolution = "300s")
|
{
|
if (isDebug)
|
return 135 + new Random().Next(10);
|
var tagDict = new Dictionary<string, string>
|
{
|
{ "一输1", "嘉定数据.1线表头累计" },
|
{ "一输2", "嘉定数据.2线表头累计" },
|
{ "一输3", "嘉定数据.3线表头累计" },
|
{ "二输1", "长江管网图.2400总管.瞬时流量" },
|
{ "二输2", "长江管网图.2600总管.瞬时流量" },
|
};
|
/* var input = new ZyDto.ScadaDispatchInput
|
{
|
search = "history",
|
starttime = new DateTime(dayD.Year, dayD.Month, dayD.Day, 0, 0, 0).ToString("yyyy-MM-dd"),
|
endtime = new DateTime(dayD.Year, dayD.Month, dayD.Day, 23, 59, 59).ToString("yyyy-MM-dd"),
|
Resolution = resolution,
|
taglist = tagDict.Select(x => x.Key).ToArray()
|
};*/
|
var starttime = new DateTime(dayD.Year, dayD.Month, dayD.Day, 0, 0, 0).ToString("yyyy-MM-dd");
|
var endtime = new DateTime(dayD.Year, dayD.Month, dayD.Day, 23, 59, 59).ToString("yyyy-MM-dd");
|
if (dayD == DateTime.Today)
|
{
|
endtime = DateTime.Now.AddMinutes(-5).ToString("yyyy-MM-dd");
|
}
|
string joinedValues = string.Join(",", tagDict.Values);
|
var result = HttpClientHelper.Get<List<DataPoint>>(ZyApiUrl, starttime, endtime, "first", resolution, joinedValues);
|
var realScadaDataList = GetScadaData(result);
|
double totalWaterSupply = 0;
|
if (realScadaDataList != null && realScadaDataList.Any())
|
{
|
foreach (var r in realScadaDataList)
|
{
|
if (r.MonitorRecords == null || !r.MonitorRecords.Any())
|
continue;
|
var rrr = r.MonitorRecords.Where(x => x.Value != null).Select(x => x.Value.Value).ToList();
|
if (rrr == null || !rrr.Any())
|
continue;
|
if (double.IsNaN(rrr.Last()) || double.IsNaN(rrr.First()))
|
{
|
throw new Exception("获取监控数据失败");
|
}
|
|
totalWaterSupply += (rrr.Last() - rrr.First());
|
}
|
}
|
|
return totalWaterSupply;
|
}
|
|
/// <summary>
|
/// 供水总量
|
/// </summary>
|
/// <param name="startTime">开始时间</param>
|
/// <param name="endTime">结束时间</param>
|
/// <param name="resolution">时间步长,默认300秒</param>
|
/// <returns></returns>
|
public static async Task<List<RealScadaData>> GetTotalWaterByTimeRange_Out(DateTime startTime, DateTime endTime, string resolution = "300s")
|
{
|
var tagDict = new Dictionary<string, string>
|
{
|
{ "一输1", "嘉定数据.1线表头累计" },
|
{ "一输2", "嘉定数据.2线表头累计" },
|
{ "一输3", "嘉定数据.3线表头累计" },
|
{ "二输1", "长江管网图.2400总管.累计流量" },
|
{ "二输2", "长江管网图.2600总管.累计流量" },
|
};
|
/* var input = new ZyDto.ScadaDispatchInput
|
{
|
search = "history",
|
starttime = startTime.ToString("yyyy-MM-dd"),
|
endtime = endTime.ToString("yyyy-MM-dd"),
|
Resolution = resolution,
|
taglist = tagDict.Select(x => x.Key).ToArray()
|
};*/
|
string joinedValues = string.Join(",", tagDict.Values);
|
var result = HttpClientHelper.Get<List<DataPoint>>(ZyApiUrl, startTime.ToString("yyyy-MM-dd"), endTime.ToString("yyyy-MM-dd"), "first", resolution, joinedValues);
|
var realScadaDataList = GetScadaData(result);
|
// LogHelper.Info(JsonHelper.Object2Json(realScadaDataList));
|
return realScadaDataList;
|
/* double totalWaterSupply = 0;
|
if (realScadaDataList != null && realScadaDataList.Any())
|
{
|
foreach (var r in realScadaDataList)
|
{
|
if (r.MonitorRecords == null || !r.MonitorRecords.Any())
|
continue;
|
var rrr = r.MonitorRecords.Where(x => x.Value != null).Select(x => x.Value.Value).ToList();
|
if (rrr == null || !rrr.Any())
|
continue;
|
|
totalWaterSupply += (rrr.Last() - rrr.First());
|
}
|
}
|
|
return totalWaterSupply;*/
|
}
|
|
/* /// <summary>
|
/// 判断供水总量是否有误
|
/// </summary>
|
/// <param name="startTime">开始时间</param>
|
/// <param name="endTime">结束时间</param>
|
/// <param name="resolution">时间步长,默认300秒</param>
|
/// <returns></returns>
|
public static async Task<string> GetPumpOutWaterIsTrue(DateTime startTime,int sort, string resolution = "300s")
|
{
|
var tagDict = new Dictionary<string, string>
|
{
|
{ "一输1", "嘉定数据.1线表头累计" },
|
{ "一输2", "嘉定数据.2线表头累计" },
|
{ "一输3", "嘉定数据.3线表头累计" },
|
{ "二输1", "长江管网图.2400总管.累计流量" },
|
{ "二输2", "长江管网图.2600总管.累计流量" },
|
};
|
string joinedValues = string.Join(",", tagDict.Values);
|
switch (sort)
|
{
|
case 1:
|
var data = HttpClientHelper.Get<List<DataPoint>>(ZyApiUrl, startTime.ToString("yyyy-MM-dd"), startTime.AddDays(1).ToString("yyyy-MM-dd"), "first", resolution, joinedValues);
|
var realScadaDataList = GetScadaData(data);
|
foreach (var item in realScadaDataList)
|
{
|
}
|
break;
|
}
|
return realScadaDataList;
|
}*/
|
|
/// <summary>
|
/// 获取陈行水库 实时水位
|
/// </summary>
|
/// <returns></returns>
|
public static double GetRealReservoirWaterLevel()
|
{
|
if (isDebug)
|
return 6.1;//debug
|
double err = -1;
|
string tag_water_level = "10001";
|
string url = $"{ZyApiUrl}dataController/getCurrentJsonDataOfRedis/义维模型";
|
var data = HttpClientHelper.Get(url);
|
if (data == null)
|
return err;
|
if (!data.ContainsKey(tag_water_level))
|
return err;
|
var scada = data[tag_water_level];
|
if (!scada.ContainsKey("vals"))
|
return err;
|
var vals = scada["vals"];
|
if (double.TryParse(vals, out double value))
|
{
|
return value;
|
}
|
return err;
|
}
|
|
/// <summary>
|
/// 获取长江水位
|
/// </summary>
|
/// <param name="startTime">开始时间</param>
|
/// <param name="endTime">结束时间</param>
|
/// <param name="resolution">时间步长,默认300秒</param>
|
/// <returns></returns>
|
public static async Task<List<IStation.ZyModel.MonitorRecord>> GetRealRiverWaterLevel(DateTime startTime, DateTime endTime, string resolution = "300s")
|
{
|
var tag = "长江管网图.长江液位";
|
/* var input = new ScadaDispatchInput
|
{
|
search = "history",
|
starttime = startTime.ToString("yyyy-MM-dd"),
|
endtime = endTime.ToString("yyyy-MM-dd"),
|
Resolution = resolution,
|
taglist = new string[] { tag }
|
};*/
|
var result = HttpClientHelper.Get<List<DataPoint>>(ZyApiUrl, startTime.ToString("yyyy-MM-dd"), endTime.ToString("yyyy-MM-dd"), "first", resolution, tag);
|
var realScadaDataList = GetScadaData(result);
|
var monitorRecords = realScadaDataList?.Find(x => x.TagName == tag)?.MonitorRecords;
|
return monitorRecords;
|
}
|
|
/// <summary>
|
/// 获取泵的开机情况
|
/// </summary>
|
/// <param name="startTime">开始时间</param>
|
/// <param name="endTime">结束时间</param>
|
/// <param name="resolution">时间步长,默认300秒</param>
|
/// <returns></returns>
|
public static async Task<List<ZyModel.RealScadaData>> GetPumpOpenStatusBySingleDay(DateTime StartTime, string resolution = "300s")
|
{
|
if (isDebug)
|
{
|
return null;
|
}
|
var tagDict = new Dictionary<string, string>
|
{
|
{ "1#", "二取水1号主水泵.水泵运行状态" },
|
{ "2#", "二取水2号主水泵.水泵运行状态" },
|
{ "3#", "二取水3号主水泵.水泵运行状态" },
|
{ "4#", "二取水4号主水泵.水泵运行状态" },
|
{ "5#", "二取水5号主水泵.水泵运行状态" },
|
};
|
/* var input = new ScadaDispatchInput
|
{
|
search = "history",
|
starttime = new DateTime(StartTime.Year, StartTime.Month, StartTime.Day, 0, 0, 0).ToString("yyyy-MM-dd"),
|
endtime = new DateTime(StartTime.Year, StartTime.Month, StartTime.Day, 23, 59, 59).ToString("yyyy-MM-dd"),
|
Resolution = resolution,
|
taglist = tagDict.Select(x => x.Key).ToArray()
|
};*/
|
var starttime = new DateTime(StartTime.Year, StartTime.Month, StartTime.Day - 1, 0, 0, 0).ToString("yyyy-MM-dd");
|
var endtime = new DateTime(StartTime.Year, StartTime.Month, StartTime.Day, 23, 59, 59).ToString("yyyy-MM-dd");
|
string joinedValues = string.Join(",", tagDict.Values);
|
var result = HttpClientHelper.Get<List<DataPoint>>(ZyApiUrl, starttime, endtime, "first", resolution, joinedValues);
|
var realScadaDataList = GetScadaData(result);
|
|
return realScadaDataList;
|
}
|
|
/// <summary>
|
/// 获取供水的开机情况
|
/// </summary>
|
/// <param name="startTime">开始时间</param>
|
/// <param name="endTime">结束时间</param>
|
/// <param name="resolution">时间步长,默认300秒</param>
|
/// <returns></returns>
|
public static async Task<List<ZyModel.RealScadaData>> GetPumpOpenStatusDay(DateTime StartTime, DateTime EndTime, string resolution = "300s")
|
{
|
if (isDebug)
|
{
|
return null;
|
}
|
var tagDict = new Dictionary<string, string>
|
{
|
{ "21#", "二输水21号水泵视图.泵运行" },
|
{ "22#", "二输水22号水泵视图.泵运行" },
|
{ "23#", "二输水23号水泵软启动.运行" },
|
{ "24#", "二输水24号水泵视图.泵运行" },
|
{ "25#", "二输水25号水泵视图.泵运行" },
|
{ "26#", "二输水26号水泵视图.泵运行" },
|
{ "27#", "二输水27号水泵变频器.运行状态" },
|
{ "11#", "一输水泵11号变频单泵.变频器运行" },
|
{ "12#", "一输水泵12号变频单泵.变频器运行" },
|
{ "13#", "一输水泵13号变频单泵.变频器运行" },
|
{ "14#", "一输水泵14号变频单泵.变频器运行" },
|
{ "15#", "HF一输水16号工频控制图.16#水泵运行" },
|
{ "16#", "一输水泵17号变频单泵.变频器运行" },
|
{ "17#", "一输水泵18号变频单泵.变频器运行" },
|
{ "18#", "HF长江原水厂ABPLC.6KV配电一输水.0402010201011501003一输水15号泵运行" },
|
};
|
List<RealScadaData> AllrealScadaDatasList = new List<RealScadaData>();
|
var joinedValues = (tagDict.Values).ToList();
|
foreach (var item in joinedValues)
|
{
|
var result = HttpClientHelper.Get<List<DataPoint>>(ZyApiUrl, StartTime.ToString("yyyy-MM-dd"), EndTime.ToString("yyyy-MM-dd"), "first", resolution, item.ToString());
|
if (result != null)
|
{
|
var realScadaDataList = GetScadaData(result);
|
AllrealScadaDatasList.AddRange(realScadaDataList);
|
}
|
}
|
LogHelper.Info(JsonHelper.Object2Json(AllrealScadaDatasList));
|
// return realScadaDataList;
|
return AllrealScadaDatasList;
|
}
|
|
/// <summary>
|
/// 获取某段时间的用电量
|
/// </summary>
|
/// <param name="StartTime"></param>
|
/// <param name="EndTime"></param>
|
/// <param name="resolution"></param>
|
/// <returns></returns>
|
public static async Task<List<ZyModel.RealScadaData>> GetPumpTotalElectricity(DateTime StartTime, DateTime EndTime, string resolution = "300s")
|
{
|
var tagDict = new Dictionary<string, string>
|
{
|
{ "1#", "二取水高压1号主水泵.有功电能" },
|
{ "2#", "二取水高压2号主水泵.有功电能" },
|
{ "3#", "二取水高压3号主水泵.有功电能" },
|
{ "4#", "二取水高压4号主水泵.有功电能" },
|
{ "5#", "二取水高压5号主水泵.有功电能" },
|
};
|
/* var input = new ScadaDispatchInput
|
{
|
search = "history",
|
starttime = new DateTime(StartTime.Year, StartTime.Month, StartTime.Day, 0, 0, 0).ToString("yyyy-MM-dd"),
|
endtime = new DateTime(EndTime.Year, EndTime.Month, EndTime.Day, 23, 59, 59).ToString("yyyy-MM-dd"),
|
Resolution = resolution,
|
taglist = tagDict.Select(x => x.Key).ToArray(),
|
};*/
|
var starttime = new DateTime(StartTime.Year, StartTime.Month, StartTime.Day - 1, 0, 0, 0).ToString("yyyy-MM-dd");
|
var endtime = new DateTime(StartTime.Year, StartTime.Month, StartTime.Day, 23, 59, 59).ToString("yyyy-MM-dd");
|
string joinedValues = string.Join(",", tagDict.Values);
|
var result = HttpClientHelper.Get<List<DataPoint>>(ZyApiUrl, starttime, endtime, "first", resolution, joinedValues);
|
var realScadaDataList = GetScadaData(result);
|
return realScadaDataList;
|
}
|
|
/// <summary>
|
/// 获取实时数据字典
|
/// </summary>
|
/// <returns></returns>
|
/* public static async Task<List<ZyModel.RealScadaRecord>> GetRealScadaResultAsync(List<string> tags, object input)
|
{
|
if (tags == null || !tags.Any())
|
return default;
|
if (input == null)
|
return default;
|
var ws = new ClientWebSocket();
|
await ws.ConnectAsync(new Uri(_url_root), CancellationToken.None);
|
if (ws.State != WebSocketState.Open)
|
{
|
return default;
|
}
|
|
var realScadaRecordList = new List<ZyModel.RealScadaRecord>();
|
var inputJson = JsonHelper.Object2Json(input);
|
var inputBytes = Encoding.UTF8.GetBytes(inputJson);
|
await ws.SendAsync(new ArraySegment<byte>(inputBytes), WebSocketMessageType.Text, true, CancellationToken.None);
|
try
|
{
|
List<byte> outputBytes = new List<byte>();//全部消息容器
|
var buffer = new byte[1024 * 4];//缓冲区
|
var data = await ws.ReceiveAsync(new ArraySegment<byte>(buffer), CancellationToken.None); //监听Socket信息
|
while (!data.CloseStatus.HasValue) //是否关闭
|
{
|
if (data.MessageType == WebSocketMessageType.Text)//文本消息
|
{
|
outputBytes.AddRange(buffer.Take(data.Count));
|
if (data.EndOfMessage)//消息是否已接收完全
|
{
|
//发送过来的消息
|
string outputJson = Encoding.UTF8.GetString(outputBytes.ToArray(), 0, outputBytes.Count);
|
var scadaDict = JsonHelper.Json2Object<Dictionary<string, KeyValue>>(outputJson);
|
if (scadaDict != null && scadaDict.Any())
|
{
|
foreach (var dict in scadaDict)
|
{
|
var tag = dict.Value.keys.Trim();
|
if (tags.Contains(tag))
|
{
|
var data = new ZyModel.RealScadaRecord();
|
data.TagName = tag;
|
|
if (double.TryParse(dict.Value.vals, out double value))
|
data.Value = value;
|
realScadaRecordList.Add(data);
|
}
|
}
|
}
|
break;
|
}
|
}
|
data = await ws.ReceiveAsync(new ArraySegment<byte>(buffer), CancellationToken.None);//继续监听Socket信息
|
}
|
}
|
catch (Exception ex)
|
{
|
throw ex;
|
}
|
finally
|
{
|
try
|
{
|
//关闭WebSocket
|
await ws.CloseOutputAsync(WebSocketCloseStatus.NormalClosure, "AcknowledgeCloseframe", CancellationToken.None);
|
}
|
catch (Exception ex)
|
{
|
throw ex;
|
}
|
ws.Abort();
|
ws.Dispose();
|
}
|
|
return realScadaRecordList;
|
}*/
|
|
/// <summary>
|
/// 获取实时数据字典
|
/// </summary>
|
/// <returns></returns>
|
/* public static async Task<List<ZyModel.RealScadaData>> GetRealScadaResult(ScadaDispatchInput input)
|
{
|
if (input == null)
|
return default;
|
var ws = new ClientWebSocket();
|
await ws.ConnectAsync(new Uri(_url_root), CancellationToken.None);
|
if (ws.State != WebSocketState.Open)
|
{
|
return default;
|
}
|
var realScadaDataList = new List<ZyModel.RealScadaData>();
|
var inputJson = JsonHelper.Object2Json(input);
|
var inputBytes = Encoding.UTF8.GetBytes(inputJson);
|
await ws.SendAsync(new ArraySegment<byte>(inputBytes), WebSocketMessageType.Text, true, CancellationToken.None);
|
try
|
{
|
List<byte> outputBytes = new List<byte>();//全部消息容器
|
var buffer = new byte[1024 * 4];//缓冲区
|
var data = await ws.ReceiveAsync(new ArraySegment<byte>(buffer), CancellationToken.None); //监听Socket信息
|
while (!data.CloseStatus.HasValue) //是否关闭
|
{
|
if (data.MessageType == WebSocketMessageType.Text)//文本消息
|
{
|
outputBytes.AddRange(buffer.Take(data.Count));
|
if (data.EndOfMessage)//消息是否已接收完全
|
{
|
//发送过来的消息
|
string outputJson = Encoding.UTF8.GetString(outputBytes.ToArray(), 0, outputBytes.Count);
|
var scadaDict = JsonHelper.Json2Object<Dictionary<string, Dictionary<DateTime, string>>>(outputJson);
|
if (scadaDict != null && scadaDict.Any())
|
{
|
foreach (var dict in scadaDict)
|
{
|
var data = new ZyModel.RealScadaData();
|
data.TagName = dict.Key;
|
data.MonitorRecords = new List<IStation.ZyModel.MonitorRecord>();
|
foreach (var item in dict.Value)
|
{
|
var record = new IStation.ZyModel.MonitorRecord();
|
record.Time = item.Key;
|
if (double.TryParse(item.Value, out double value))
|
{
|
record.Value = value;
|
}
|
data.MonitorRecords.Add(record);
|
}
|
realScadaDataList.Add(data);
|
}
|
}
|
break;
|
}
|
}
|
data = await ws.ReceiveAsync(new ArraySegment<byte>(buffer), CancellationToken.None);//继续监听Socket信息
|
}
|
}
|
catch (Exception ex)
|
{
|
throw ex;
|
}
|
finally
|
{
|
try
|
{
|
//关闭WebSocket
|
await ws.CloseOutputAsync(WebSocketCloseStatus.NormalClosure, "AcknowledgeCloseframe", CancellationToken.None);
|
}
|
catch (Exception ex)
|
{
|
throw ex;
|
}
|
ws.Abort();
|
ws.Dispose();
|
}
|
|
return realScadaDataList;
|
}*/
|
|
/// <summary>
|
/// bak
|
/// </summary>
|
/// <param name="startTime"></param>
|
/// <param name="endTime"></param>
|
/// <param name="resolution"></param>
|
/// <returns></returns>
|
public static ScadaDispatchInput GetScadaDispatchInput_bak(DateTime startTime, DateTime endTime, double resolution = 300)
|
{
|
var tagDict = new Dictionary<string, string>
|
{
|
//{ "_0402010204089903001", "长江水位" },
|
//{ "_0402010204089904009", "二取水前池液位" },
|
//{ "_0402010201030103006", "陈行水库水位" },
|
//{ "_0402010204012101001", "二取水1号泵状态" },
|
//{ "_0402010204012201001", "二取水2号泵状态" },
|
//{ "_0402010204012301001", "二取水3号泵状态" },
|
//{ "_0402010204012401001", "二取水4号泵状态" },
|
//{ "_0402010204012501001", "二取水5号泵状态" },
|
//{ "_0402010204012103002", "二取水1号泵累计流量" },
|
//{ "_0402010204012203002", "二取水2号泵累计流量" },
|
//{ "_0402010204012303002", "二取水3号泵累计流量" },
|
//{ "_0402010204012403002", "二取水4号泵累计流量" },
|
//{ "_0402010204012503002", "二取水5号泵累计流量" },
|
//{ "_0402010204040193046", "二取水1号泵有功电能" },
|
//{ "_0402010204040193047", "二取水2号泵有功电能" },
|
//{ "_0402010204012308007", "二取水3号泵有功电能" },
|
//{ "_0402010204012408007", "二取水4号泵有功电能" },
|
//{ "_0402010204012508007", "二取水5号泵有功电能" },
|
{ "_0402010201090105774", "一输水11号出口压力" },
|
{ "_0402010201040502031", "一输水11号有功功率" },
|
{ "_0402010201040502044", "一输水11号有功电度" },
|
{ "_0402010201011195062", "一输水11号泵转速" },
|
{ "_0402010201011101001", "一输水11号泵运行状态" },
|
{ "_0402010201011194012", "一输水11号泵频率" },
|
{ "_0402010201090105005", "一输水12号出口压力" },
|
{ "_0402010201041402031", "一输水12号有功功率" },
|
{ "_0402010201041402044", "一输水12号有功电度" },
|
{ "_0402010201011295062", "一输水12号泵转速" },
|
{ "_0402010201011201001", "一输水12号泵运行状态" },
|
{ "_0402010201011294012", "一输水12号泵频率" },
|
{ "_0402010201090105776", "一输水13号出口压力" },
|
{ "_0402010201040602031", "一输水13号有功功率" },
|
{ "_0402010201040602044", "一输水13号有功电度" },
|
{ "_0402010201011395062", "一输水13号泵转速" },
|
{ "_0402010201011301001", "一输水13号泵运行状态" },
|
{ "_0402010201011394012", "一输水13号泵频率" },
|
{ "_0402010201090105007", "一输水14号出口压力" },
|
{ "_0402010201041302031", "一输水14号有功功率" },
|
{ "_0402010201041302044", "一输水14号有功电度" },
|
{ "_0402010201011495062", "一输水14号泵转速" },
|
{ "_0402010201011401001", "一输水14号泵运行状态" },
|
{ "_0402010201011494012", "一输水14号泵频率" },
|
{ "_0402010201090105008", "一输水15号出口压力" },
|
{ "_0402010201040702031", "一输水15号有功功率" },
|
{ "_0402010201040702044", "一输水15号有功电度" },
|
{ "_0402010201011595062", "一输水15号泵转速" },
|
{ "_0402010201011501003", "一输水15号泵运行状态" },
|
{ "_0402010201090105016", "一输水16号出口压力" },
|
{ "_0402010201041202031", "一输水16号有功功率" },
|
{ "_0402010201041202044", "一输水16号有功电度" },
|
{ "_0402010201011695062", "一输水16号泵转速" },
|
{ "_0402010201011601003", "一输水16号泵运行状态" },
|
{ "_0402010201090105017", "一输水17号出口压力" },
|
{ "_0402010201040802031", "一输水17号有功功率" },
|
{ "_0402010201040802044", "一输水17号有功电度" },
|
{ "_0402010201011795062", "一输水17号泵转速" },
|
{ "_0402010201011795056", "一输水17号泵运行状态" },
|
{ "_0402010201090105018", "一输水18号出口压力" },
|
{ "_0402010201041102031", "一输水18号有功功率" },
|
{ "_0402010201041102044", "一输水18号有功电度" },
|
{ "_0402010201011895062", "一输水18号泵转速" },
|
{ "_0402010201011895056", "一输水18号泵运行状态" },
|
{ "_0402010201090104011", "一输水前池液位1" },
|
{ "_0402010201091104123", "一输水前池液位2" },
|
{ "_0402010201091104122", "一输水前池液位3" },
|
{ "_0402010201090105002", "一输水嘉定1线压力" },
|
{ "_0402010201030191001", "一输水嘉定1线瞬时流量" },
|
{ "_0402010201030191002", "一输水嘉定1线累计流量" },
|
{ "_0402010201090105011", "一输水嘉定2线压力" },
|
{ "_0402010201090199011", "一输水嘉定2线瞬时流量" },
|
{ "_0402010201090199012", "一输水嘉定2线累计流量" },
|
{ "_0402010201090105784", "一输水嘉定3线压力" },
|
{ "_0402010201090199311", "一输水嘉定3线瞬时流量" },
|
{ "_0402010201090199312", "一输水嘉定3线累计流量" },
|
{ "_0402010204012105001", "二取水一号机泵出口压力" },
|
{ "_0402010204012101001", "二取水一号机泵开停状态" },
|
{ "_0402010204040193004", "二取水一号机泵有功功率" },
|
{ "_0402010204040193046", "二取水一号机泵有功电度" },
|
{ "_0402010204012103001", "二取水一号机泵瞬时流量" },
|
{ "_0402010204012103002", "二取水一号机泵累计流量" },
|
{ "_0402010204012305001", "二取水三号机泵出口压力" },
|
{ "_0402010204012301001", "二取水三号机泵开停状态" },
|
{ "_0402010204012308008", "二取水三号机泵有功功率" },
|
{ "_0402010204012308007", "二取水三号机泵有功电度" },
|
{ "_0402010204012303001", "二取水三号机泵瞬时流量" },
|
{ "_0402010204012303002", "二取水三号机泵累计流量" },
|
{ "_0402010204012205001", "二取水二号机泵出口压力" },
|
{ "_0402010204012201001", "二取水二号机泵开停状态" },
|
{ "_0402010204040193005", "二取水二号机泵有功功率" },
|
{ "_0402010204040193047", "二取水二号机泵有功电度" },
|
{ "_0402010204012203001", "二取水二号机泵瞬时流量" },
|
{ "_0402010204012203002", "二取水二号机泵累计流量" },
|
{ "_0402010204012505001", "二取水五号机泵出口压力" },
|
{ "_0402010204012501001", "二取水五号机泵开停状态" },
|
{ "_0402010204012508008", "二取水五号机泵有功功率" },
|
{ "_0402010204012508007", "二取水五号机泵有功电度" },
|
{ "_0402010204012503001", "二取水五号机泵瞬时流量" },
|
{ "_0402010204012503002", "二取水五号机泵累计流量" },
|
{ "_0402010204089904009", "二取水前池液位" },
|
{ "_0402010204012405001", "二取水四号机泵出口压力" },
|
{ "_0402010204012401001", "二取水四号机泵开停状态" },
|
{ "_0402010204012408008", "二取水四号机泵有功功率" },
|
{ "_0402010204012408007", "二取水四号机泵有功电度" },
|
{ "_0402010204012403001", "二取水四号机泵瞬时流量" },
|
{ "_0402010204012403002", "二取水四号机泵累计流量" },
|
{ "_0402010201012105001", "二输水21号泵出口压力" },
|
{ "_0402010201040102049", "二输水21号泵有功功率" },
|
{ "_0402010201040102187", "二输水21号泵有功电度" },
|
{ "_0402010201090103901", "二输水21号泵瞬时流量" },
|
{ "_0402010201010294045", "二输水21号泵累计流量" },
|
{ "_0402010201012199001", "二输水21号泵转速" },
|
{ "_0402010201012193021", "二输水21号泵运行状态" },
|
{ "_0402010201040102178", "二输水21号泵频率" },
|
{ "_0402010201012205001", "二输水22号泵出口压力" },
|
{ "_0402010201040102053", "二输水22号泵有功功率" },
|
{ "_0402010201040102213", "二输水22号泵有功电度" },
|
{ "_0402010201090103001", "二输水22号泵瞬时流量" },
|
{ "_0402010201090103002", "二输水22号泵累计流量" },
|
{ "_0402010201012299001", "二输水22号泵转速" },
|
{ "_0402010201012201001", "二输水22号泵运行状态" },
|
{ "_0402010201040102204", "二输水22号泵频率" },
|
{ "_0402010201012305001", "二输水23号泵出口压力" },
|
{ "_0402010201040102055", "二输水23号泵有功功率" },
|
{ "_0402010201040102136", "二输水23号泵有功电度" },
|
{ "_0402010201040102054", "二输水23号泵电流" },
|
{ "_0402010201090103003", "二输水23号泵瞬时流量" },
|
{ "_0402010201090103004", "二输水23号泵累计流量" },
|
{ "_0402010201012399001", "二输水23号泵转速" },
|
{ "_0402010201010194135", "二输水23号泵运行状态" },
|
{ "_0402010201040102217", "二输水23号泵频率" },
|
{ "_0402010201090105003", "二输水2400管压力" },
|
{ "_0402010201090103017", "二输水2400管瞬时流量" },
|
{ "_0402010201090103018", "二输水2400管累计流量" },
|
{ "_0402010201012405001", "二输水24号泵出口压力" },
|
{ "_0402010201040102057", "二输水24号泵有功功率" },
|
{ "_0402010201040102149", "二输水24号泵有功电度" },
|
{ "_0402010201090103005", "二输水24号泵瞬时流量" },
|
{ "_0402010201090103006", "二输水24号泵累计流量" },
|
{ "_0402010201012499001", "二输水24号泵转速" },
|
{ "_0402010201012401001", "二输水24号泵运行状态" },
|
{ "_0402010201040102140", "二输水24号泵频率" },
|
{ "_0402010201012505001", "二输水25号泵出口压力" },
|
{ "_0402010201040202004", "二输水25号泵有功功率" },
|
{ "_0402010201040202141", "二输水25号泵有功电度" },
|
{ "_0402010201090103007", "二输水25号泵瞬时流量" },
|
{ "_0402010201090103008", "二输水25号泵累计流量" },
|
{ "_0402010201012599001", "二输水25号泵转速" },
|
{ "_0402010201012501001", "二输水25号泵运行状态" },
|
{ "_0402010201040202132", "二输水25号泵频率" },
|
{ "_0402010201012605001", "二输水26号泵出口压力" },
|
{ "_0402010201040202006", "二输水26号泵有功功率" },
|
{ "_0402010201040202028", "二输水26号泵有功电度" },
|
{ "_0402010201090103009", "二输水26号泵瞬时流量" },
|
{ "_0402010201090103010", "二输水26号泵累计流量" },
|
{ "_0402010201012699001", "二输水26号泵转速" },
|
{ "_0402010201010194152", "二输水26号泵运行状态" },
|
{ "_0402010201040202145", "二输水26号泵频率" },
|
{ "_0402010201090105004", "二输水2700管压力" },
|
{ "_0402010201090194002", "二输水2700管瞬时流量" },
|
{ "_0402010201090194444", "二输水2700管累计流量" },
|
{ "_0402010201012705001", "二输水27号泵出口压力" },
|
{ "_0402010201040202012", "二输水27号泵有功功率" },
|
{ "_0402010201040202193", "二输水27号泵有功电度" },
|
{ "_0402010201090103903", "二输水27号泵瞬时流量" },
|
{ "_0402010201090194001", "二输水27号泵累计流量" },
|
{ "_0402010201012799001", "二输水27号泵转速" },
|
{ "_0402010201012793021", "二输水27号泵运行状态" },
|
{ "_0402010201040202184", "二输水27号泵频率" },
|
{ "_0402010204089903001", "陈行取水口长江液位" },
|
{ "_0402010201030103006", "陈行水库液位" },
|
};
|
|
var input = new ScadaDispatchInput();
|
input.search = "history";
|
input.starttime = startTime.ToString("yyyy-MM-dd");
|
input.endtime = endTime.ToString("yyyy-MM-dd");
|
input.Resolution = resolution.ToString();
|
//input.taglist = tagDict.Select(x => x.Key).ToArray();
|
input.taglist = new string[] { "_0402010201030103006" };
|
return input;
|
}
|
|
/// <summary>
|
/// 获取机泵检修状态
|
/// </summary>
|
/// <param name="result"></param>
|
/// <returns> 检修泵的角标, 0 表示1号泵 1 表示二号泵 为空,表示没有检修</returns>
|
public static List<int> GetOverhaulStatus()
|
{
|
if (isDebug)
|
return null; //debug
|
var statuslist = new List<int>();
|
string url = $"{ZyApiUrl}dataController/getCurrentJsonDataOfRedis/义维模型";
|
var data = HttpClientHelper.Get(url);
|
var first = GetValsValue(data, "10191", 0); //二取水一号泵检修
|
if (first != null)
|
{
|
statuslist.AddRange(first);
|
}
|
var second = GetValsValue(data, "10192", 1); //二取水二号泵检修
|
if (second != null)
|
{
|
statuslist.AddRange(second);
|
}
|
var thirdly = GetValsValue(data, "10193", 2); //二取水三号泵检修
|
if (thirdly != null)
|
{
|
statuslist.AddRange(thirdly);
|
}
|
var fourthly = GetValsValue(data, "10194", 3); //二取水四号泵检修
|
if (fourthly != null)
|
{
|
statuslist.AddRange(fourthly);
|
}
|
var fifth = GetValsValue(data, "10195", 4); //二取水五号泵检修
|
if (fifth != null)
|
{
|
statuslist.AddRange(fifth);
|
}
|
if (statuslist.Count < 0)
|
{
|
return null;
|
}
|
return statuslist;
|
}
|
|
//获取机泵检修状态
|
private static List<int> GetValsValue(Dictionary<string, Dictionary<string, string>> data, string pumptag, int sign)
|
{
|
if (data == null)
|
return null;
|
if (!data.ContainsKey(pumptag))
|
return null;
|
var valuelist = new List<int>();
|
var scada = data[pumptag];
|
if (!scada.ContainsKey("vals"))
|
return null;
|
var vals = scada["vals"];
|
if (int.TryParse(vals, out int value))
|
{
|
LogHelper.Info("当前泵角标为:" + sign + "-----状态为:" + value);
|
if (value == 1)
|
{
|
valuelist.Add(sign);
|
return valuelist;
|
}
|
else
|
{
|
return null;
|
}
|
}
|
return null;
|
}
|
|
/// <summary>
|
/// Test1
|
/// </summary>
|
/// <returns></returns>
|
public static async Task<double> async_debug()
|
{
|
//var ws = new ClientWebSocket();
|
// await ws.ConnectAsync(new Uri(_url_root), CancellationToken.None);
|
await Task.Run(() =>
|
{
|
Thread.Sleep(1000);
|
});
|
|
return 1;
|
}
|
|
/// <summary>
|
///
|
/// </summary>
|
private class KeyValue
|
{
|
public string keys { get; set; }
|
public string vals { get; set; }
|
}
|
}
|
}
|