using System;
|
using System.Collections.Generic;
|
using System.Linq;
|
using System.Reflection.Metadata;
|
using System.Text;
|
using System.Threading.Tasks;
|
|
namespace IStation.Model
|
{
|
/// <summary>
|
///
|
/// </summary>
|
public class EtaBasicRealRecord
|
{
|
/// <summary>
|
///
|
/// </summary>
|
public EtaBasicRealRecord() { }
|
|
/// <summary>
|
///
|
/// </summary>
|
public EtaBasicRealRecord(EtaBasicRealRecord rhs)
|
{
|
this.CorpID = rhs.CorpID;
|
this.ObjectType = rhs.ObjectType;
|
this.ObjectID = rhs.ObjectID;
|
this.DataTime = rhs.DataTime;
|
this.Duration = rhs.Duration;
|
this.Qa = rhs.Qa;
|
this.Ha = rhs.Ha;
|
this.Pa = rhs.Pa;
|
this.Ea = rhs.Ea;
|
this.WPa = rhs.WPa;
|
this.UWPa = rhs.UWPa;
|
this.AnalyStatus = rhs.AnalyStatus;
|
this.AnalyInfo = rhs.AnalyInfo;
|
}
|
|
/// <summary>
|
/// 复制分析参数
|
/// </summary>
|
/// <param name="rhs"></param>
|
public void CopyAnaPara(EtaBasicRealRecord rhs)
|
{
|
if (rhs == null)
|
return;
|
this.Qa = rhs.Qa;
|
this.Ha = rhs.Ha;
|
this.Pa = rhs.Pa;
|
this.Ea = rhs.Ea;
|
this.WPa = rhs.WPa;
|
this.UWPa = rhs.UWPa;
|
this.AnalyStatus = rhs.AnalyStatus;
|
this.AnalyInfo = rhs.AnalyInfo;
|
}
|
|
|
/// <summary>
|
/// 客户标识
|
/// </summary>
|
public long CorpID { get; set; }
|
|
/// <summary>
|
/// 对象类型
|
/// </summary>
|
public string ObjectType { get; set; }
|
|
/// <summary>
|
/// 对象标识
|
/// </summary>
|
public long ObjectID { get; set; }
|
|
/// <summary>
|
/// 数据时间
|
/// </summary>
|
public DateTime DataTime { get; set; }
|
|
/// <summary>
|
/// 间隔
|
/// </summary>
|
public int Duration { get; set; }
|
|
/// <summary>
|
/// 分析瞬时流量
|
/// </summary>
|
public double? Qa { get; set; }
|
|
/// <summary>
|
/// 分析扬程
|
/// </summary>
|
public double? Ha { get; set; }
|
|
/// <summary>
|
/// 分析功率
|
/// </summary>
|
public double? Pa { get; set; }
|
|
/// <summary>
|
/// 分析效率
|
/// </summary>
|
public double? Ea { get; set; }
|
|
/// <summary>
|
/// 分析千吨能耗
|
/// </summary>
|
public double? WPa { get; set; }
|
|
/// <summary>
|
/// 分析单位能耗
|
/// </summary>
|
public double? UWPa { get; set; }
|
|
/// <summary>
|
/// 分析状态
|
/// </summary>
|
public Eta.eAnalyStatus AnalyStatus { get; set; }
|
|
/// <summary>
|
/// 分析信息
|
/// </summary>
|
public string AnalyInfo { get; set; }
|
|
#region AnalyInfo
|
|
#region InfoTag
|
|
/// <summary>
|
/// 运行状态发生异常的标识
|
/// </summary>
|
public const string InfoTag_RU = "RU";
|
/// <summary>
|
/// 频率发生异常的标识
|
/// </summary>
|
public const string InfoTag_HZ = "HZ";
|
/// <summary>
|
/// 流量发生异常的标识
|
/// </summary>
|
public const string InfoTag_Qa = "Qa";
|
/// <summary>
|
/// 扬程发生异常的标识
|
/// </summary>
|
public const string InfoTag_Ha = "Ha";
|
/// <summary>
|
/// 进口压力发生异常的标识
|
/// </summary>
|
public const string InfoTag_P1 = "P1";
|
/// <summary>
|
/// 出口压力发生异常的标识
|
/// </summary>
|
public const string InfoTag_P2 = "P2";
|
/// <summary>
|
/// 功率发生异常的标识
|
/// </summary>
|
public const string InfoTag_Pa = "Pa";
|
/// <summary>
|
/// 效率发生异常的标识
|
/// </summary>
|
public const string InfoTag_Ea = "Ea";
|
/// <summary>
|
/// 电流发生异常的标识
|
/// </summary>
|
public const string InfoTag_Ia = "Ia";
|
/// <summary>
|
/// 曲线发生异常的标识
|
/// </summary>
|
public const string InfoTag_Curve = "Cu";
|
|
/// <summary>
|
/// 泵站发生异常的标识
|
/// </summary>
|
public const string InfoTag_Station = "St";
|
#endregion
|
|
#region Basic
|
/// <summary>
|
/// 添加状态
|
/// </summary>
|
/// <param name="tag"></param>
|
public void PutAnalyInfo(string tag)
|
{
|
if (string.IsNullOrEmpty(AnalyInfo))
|
{
|
AnalyInfo = string.Format("V1|{0}:", tag);
|
}
|
else
|
{
|
AnalyInfo = string.Format("{0}|{1}:", AnalyInfo, tag);
|
}
|
}
|
|
/// <summary>
|
/// 添加AnalyInfo标识
|
/// </summary>
|
/// <param name="tag">标识</param>
|
/// <param name="more">更多信息</param>
|
public void PutAnalyInfo(string tag, string more)
|
{
|
if (string.IsNullOrEmpty(AnalyInfo))
|
{
|
if (string.IsNullOrEmpty(more))
|
{
|
AnalyInfo = string.Format("V1|{0}:", tag);
|
}
|
else
|
{
|
AnalyInfo = string.Format("V1|{0}:{1}", tag, more);
|
}
|
}
|
else
|
{
|
if (string.IsNullOrEmpty(more))
|
{
|
AnalyInfo = string.Format("{0}|{1}:", AnalyInfo, tag);
|
}
|
else
|
{
|
AnalyInfo = string.Format("{0}|{1}:{2}", AnalyInfo, tag, more);
|
}
|
}
|
}
|
|
/// <summary>
|
/// 添加AnalyInfo标识
|
/// </summary>
|
/// <param name="tag">标识</param>
|
public void RemoveAnalyInfo(string tag)
|
{
|
if (string.IsNullOrEmpty(AnalyInfo))
|
{
|
return;
|
}
|
var sss = AnalyInfo.Split('|').ToList();
|
for (int i = 0; i < sss.Count(); i++)
|
{
|
if (sss[i].StartsWith(tag))
|
{
|
sss.RemoveAt(i);
|
AnalyInfo = string.Join("|", sss);
|
if (AnalyInfo == "V1")
|
{
|
AnalyInfo = null;
|
}
|
return;
|
}
|
}
|
|
|
}
|
|
/// <summary>
|
/// 有分析异常
|
/// </summary>
|
/// <param name="tag"></param>
|
/// <returns></returns>
|
public bool IsHaveAnaTag(string tag)
|
{
|
if (string.IsNullOrEmpty(AnalyInfo))
|
{
|
return false;
|
}
|
|
return AnalyInfo.Contains("|" + tag);
|
}
|
|
/// <summary>
|
/// 有分析异常
|
/// </summary>
|
/// <param name="stationId"></param>
|
/// <returns></returns>
|
public bool IsHaveStationTag(long stationId)
|
{
|
if (string.IsNullOrEmpty(AnalyInfo))
|
{
|
return false;
|
}
|
return AnalyInfo.Contains($"{InfoTag_Station}:{stationId}");
|
}
|
|
#endregion
|
|
|
/// <summary>
|
/// 添加泵站 AnalyInfo标识
|
/// </summary>
|
/// <param name="ePumpAnalyInfo">机泵错误信息</param>
|
/// <param name="ePumpId">机泵标识</param>
|
public void PutStationAnalyInfo(string ePumpAnalyInfo, long ePumpId)
|
{
|
if (string.IsNullOrEmpty(ePumpAnalyInfo))
|
return;
|
var defaultEdition = "V1";
|
if (string.IsNullOrEmpty(AnalyInfo))
|
{
|
AnalyInfo = defaultEdition;
|
}
|
|
var infoArry = ePumpAnalyInfo.Split('|').ToList();
|
foreach (var item in infoArry)
|
{
|
if (item == defaultEdition)
|
continue;
|
AnalyInfo = $"{AnalyInfo}|{item}:{ePumpId}";
|
}
|
|
if (AnalyInfo == defaultEdition)
|
{
|
AnalyInfo = null;
|
}
|
}
|
|
/// <summary>
|
/// 添加业务 AnalyInfo标识
|
/// </summary>
|
/// <param name="logicAnalyInfo">业务错误信息</param>
|
public void PutLogicAnalyInfo(string logicAnalyInfo)
|
{
|
if (string.IsNullOrEmpty(logicAnalyInfo))
|
return;
|
var defaultEdition = "V1";
|
if (string.IsNullOrEmpty(AnalyInfo))
|
{
|
AnalyInfo = defaultEdition;
|
}
|
|
var infoArry = logicAnalyInfo.Split('|').ToList();
|
foreach (var item in infoArry)
|
{
|
if (item == defaultEdition)
|
continue;
|
if (item.StartsWith(InfoTag_Station))
|
{
|
AnalyInfo = $"{AnalyInfo}|{item}";
|
}
|
}
|
|
if (AnalyInfo == defaultEdition)
|
{
|
AnalyInfo = null;
|
}
|
}
|
|
/// <summary>
|
/// 获取错误信息
|
/// </summary>
|
/// <returns></returns>
|
public List<long> GetStatioinIds()
|
{
|
if (string.IsNullOrEmpty(this.AnalyInfo))
|
return default;
|
var list = new List<long>();
|
var infoArry = AnalyInfo.Split('|').ToList();
|
foreach (var item in infoArry)
|
{
|
if (item.StartsWith(InfoTag_Station))
|
{
|
var valueArr = item.Split(':');
|
if (valueArr != null && valueArr.Count() > 1)
|
{
|
var stationId = valueArr[1];
|
if (long.TryParse(stationId, out long id))
|
{
|
list.Add(id);
|
}
|
}
|
}
|
}
|
|
return list;
|
}
|
|
/// <summary>
|
/// 获取错误信息
|
/// </summary>
|
/// <returns></returns>
|
public List<long> GetPumpIds()
|
{
|
if (string.IsNullOrEmpty(this.AnalyInfo))
|
return default;
|
var list = new List<long>();
|
var infoArry = AnalyInfo.Split('|').ToList();
|
foreach (var item in infoArry)
|
{
|
var valueArr = item.Split(':');
|
if (valueArr != null && valueArr.Count() > 2)
|
{
|
var pumpId = valueArr[2];
|
if (long.TryParse(pumpId, out long id))
|
{
|
list.Add(id);
|
}
|
}
|
}
|
return list;
|
}
|
|
/// <summary>
|
/// 获取错误信息
|
/// </summary>
|
/// <returns></returns>
|
public string GetAnaInfoCN()
|
{
|
var errCN = string.Empty;
|
if (string.IsNullOrEmpty(this.AnalyInfo))
|
return string.Empty;
|
var tagList = new List<string>();
|
var infoArry = AnalyInfo.Split('|').ToList();
|
foreach (var item in infoArry)
|
{
|
if (item == "V1")
|
continue;
|
var valueList = item.Split(':');
|
if (valueList != null && valueList.Count() > 0)
|
{
|
if (valueList.Count() > 2)
|
continue;
|
var tag = valueList[0];
|
tagList.Add(tag);
|
}
|
}
|
|
if (tagList.Count < 1)
|
return default;
|
foreach (var item in tagList)
|
{
|
errCN += GetAnaTagCN(item) + "、";
|
}
|
|
return errCN.Substring(0, errCN.Length - 1) + "异常!";
|
}
|
|
/// <summary>
|
/// 获取分析错误类型
|
/// </summary>
|
public string GetAnaTagCN(string anaTag)
|
{
|
var tagCN = "未知";
|
switch (anaTag)
|
{
|
case InfoTag_RU: tagCN = "运行状态"; break;
|
case InfoTag_HZ: tagCN = "频率"; break;
|
case InfoTag_Qa: tagCN = "流量"; break;
|
case InfoTag_Ha: tagCN = "扬程"; break;
|
case InfoTag_P1: tagCN = "进口压力"; break;
|
case InfoTag_P2: tagCN = "出口压力"; break;
|
case InfoTag_Pa: tagCN = "功率"; break;
|
case InfoTag_Ea: tagCN = "效率"; break;
|
case InfoTag_Ia: tagCN = "电流"; break;
|
case InfoTag_Curve: tagCN = "曲线"; break;
|
}
|
|
return tagCN;
|
}
|
#endregion
|
|
|
|
|
#region 计算
|
|
/// <summary>
|
///
|
/// </summary>
|
/// <param name="mpa"></param>
|
/// <returns></returns>
|
public static double MPa2M(double mpa)
|
{
|
return mpa * 1000 / 9.81;
|
}
|
/// <summary>
|
///
|
/// </summary>
|
/// <param name="Q"></param>
|
/// <param name="H"></param>
|
/// <param name="P"></param>
|
/// <param name="midu"></param>
|
/// <param name="gavity"></param>
|
/// <returns></returns>
|
public static double Calc_Eta(double Q, double H, double P, double midu, double gavity)
|
{
|
P = P * 1000;//此处 1000 是 kw换成w
|
Q = Q / 3600;//此处 3600 是 小时换成秒
|
double E = 0;
|
if (P < 0.1)
|
E = 0;
|
else
|
E = midu * gavity * Q * H / P;
|
return Math.Round(E * 100, 2);//效率用百分数
|
}
|
/// <summary>
|
///
|
/// </summary>
|
/// <param name="Q"></param>
|
/// <param name="H"></param>
|
/// <param name="P"></param>
|
/// <returns></returns>
|
public static double Calc_Eta(double Q, double H, double P)
|
{
|
double midu = 1000;
|
double gavity = 9.81;
|
P = P * 1000;//此处 1000 是 kw换成w
|
Q = Q / 3600;//此处 3600 是 小时换成秒
|
double E = 0;
|
if (P < 0.1)
|
E = 0;
|
else
|
E = midu * gavity * Q * H / P;
|
return Math.Round(E * 100, 2);//效率用百分数
|
}
|
/// <summary>
|
///
|
/// </summary>
|
/// <returns></returns>
|
public bool CalcUnitPower()
|
{
|
Calcu_WP();
|
return Calcu_UWP();
|
}
|
/// <summary>
|
///
|
/// </summary>
|
/// <returns></returns>
|
private bool Calcu_WP()
|
{
|
this.WPa = 0;
|
if (this.Qa == null || this.Qa < 0.1)
|
return false;
|
if (this.Pa == null || this.Pa < 0.1)
|
return false;
|
|
this.WPa = Math.Round(this.Pa.Value / this.Qa.Value * 1000f, 3);
|
return true;
|
}
|
|
/// <summary>
|
/// 单位水耗 千吨水
|
/// </summary>
|
/// <returns></returns>
|
private bool Calcu_UWP()
|
{
|
this.UWPa = 0;
|
if (this.Qa == null || this.Qa < 0.1)
|
return false;
|
if (this.Pa == null || this.Pa < 0.1)
|
return false;
|
if (this.Ha == null || this.Ha < 0.1)
|
return false;
|
this.UWPa = Math.Round(this.Pa.Value / this.Qa.Value / this.Ha.Value * 1000f, 4);
|
return true;
|
}
|
#endregion
|
}
|
}
|