211 lines
6.1 KiB
C#
211 lines
6.1 KiB
C#
using Aitex.Common.Util;
|
||
using Aitex.Core.RT.DataCenter;
|
||
using Aitex.Core.RT.Device;
|
||
using Aitex.Core.Util;
|
||
using DocumentFormat.OpenXml.Wordprocessing;
|
||
using SciChart.Charting.Visuals.RenderableSeries;
|
||
using System;
|
||
using System.Collections.Generic;
|
||
using System.Collections.ObjectModel;
|
||
using System.IO;
|
||
using System.Linq;
|
||
using System.Runtime.Serialization;
|
||
using System.Xml.Serialization;
|
||
|
||
namespace MECF.Framework.Common.Aitex.Core.Common.DeviceData
|
||
{
|
||
public class ProcessHistoryItemsDefault : Singleton<ProcessHistoryItemsDefault>
|
||
{
|
||
/// <summary>
|
||
/// 查询数据源,
|
||
/// </summary>
|
||
private List<ProcessDeviceItem> PM1ItemList { get; set; }
|
||
|
||
private List<ProcessDeviceItem> PM2ItemList { get; set; }
|
||
|
||
public ProcessHistoryItemsDefault()
|
||
{
|
||
|
||
}
|
||
|
||
public void Initialize()
|
||
{
|
||
var phi1 = CustomXmlSerializer.Deserialize<ProcessDeviceItems>(new FileInfo($"Config\\PM\\PM1\\ProcessDeviceItemsPM1.xml"));
|
||
PM1ItemList = phi1.ItemList;
|
||
DATA.Subscribe($"PM1.ProcessHistoryItemsDefault", () => PM1ItemList, SubscriptionAttribute.FLAG.IgnoreSaveDB);
|
||
|
||
var phi2 = CustomXmlSerializer.Deserialize<ProcessDeviceItems>(new FileInfo($"Config\\PM\\PM2\\ProcessDeviceItemsPM2.xml"));
|
||
PM2ItemList = phi2.ItemList;
|
||
DATA.Subscribe($"PM2.ProcessHistoryItemsDefault", () => PM2ItemList, SubscriptionAttribute.FLAG.IgnoreSaveDB);
|
||
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// 根据XML配置生成ProcessHistory多个单元的集合对象
|
||
/// </summary>
|
||
[XmlType(typeName: "ProcessDeviceItems")]
|
||
public class ProcessDeviceItems
|
||
{
|
||
/// <summary>
|
||
/// ProcessDeviceItems默认对象集合
|
||
/// </summary>
|
||
[XmlElement("ProcessDeviceItem")]
|
||
public List<ProcessDeviceItem> ItemList { get; set; }
|
||
|
||
|
||
}
|
||
|
||
/// <summary>
|
||
/// ProcessHistory默认对象集合数据
|
||
/// </summary>
|
||
[Serializable]
|
||
[DataContract]
|
||
[XmlType(typeName: "ProcessDeviceItem")]
|
||
public class ProcessDeviceItem
|
||
{
|
||
/// <summary>
|
||
/// 客户期望界面显示项
|
||
/// </summary>
|
||
[XmlAttribute()]
|
||
[DataMember]
|
||
public string Display { get; set; }
|
||
|
||
/// <summary>
|
||
/// 界面显示项,SIC数据库属性名称
|
||
/// </summary>
|
||
[XmlAttribute()]
|
||
[DataMember]
|
||
public string Property { get; set; }
|
||
|
||
/// <summary>
|
||
/// 单位,显示用
|
||
/// </summary>
|
||
[XmlAttribute()]
|
||
[DataMember]
|
||
public string Unit { get; set; }
|
||
|
||
/// <summary>
|
||
/// 数据表中是否包含当前属性,不包含的时候,此属性不能作为查询项
|
||
/// </summary>
|
||
[DataMember]
|
||
public bool IsPropertyExists { get; set; }
|
||
}
|
||
/// <summary>
|
||
/// Recipe生产历史记录
|
||
/// </summary>
|
||
public class RecipeProcessHistoryData
|
||
{
|
||
public string PmModel { get; set; }
|
||
|
||
private string xPath;
|
||
|
||
public string XPath
|
||
{
|
||
get => xPath;
|
||
set
|
||
{
|
||
xPath = value;
|
||
Name = value == null || value == "" ? "" : System.IO.Path.GetFileName(value);//数据库保存的是路加带文件名
|
||
}
|
||
}
|
||
|
||
public string Name { get; set; }
|
||
|
||
public string Status { get; set; }
|
||
|
||
public string ProcessGuid { get; set; }
|
||
|
||
public string BeginTime { get; set; }
|
||
|
||
private string endTime;
|
||
|
||
public string EndTime
|
||
{
|
||
get => endTime;
|
||
set => endTime = value == null || value == "" ? "" : Convert.ToDateTime(value).ToString("T"); //数据库时间格式 "2023-11-21 17:13:40.292"
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// Recipe执行时Process对应的步骤流程
|
||
/// </summary>
|
||
public class ProcessHistoryData
|
||
{
|
||
public string StepBeginTime { get; set; }
|
||
|
||
private string stepEndTime;
|
||
|
||
public string StepEndTime
|
||
{
|
||
get => stepEndTime;
|
||
set
|
||
{
|
||
stepEndTime = value;
|
||
StepEndTimeDisp = value == null || value == "" ? "" : Convert.ToDateTime(value).ToString("T"); //数据库时间格式 "2023-11-21 17:13:40.292"
|
||
}
|
||
}
|
||
|
||
public string StepEndTimeDisp { get; set; }
|
||
|
||
public string RecipeName { get; set; }
|
||
|
||
public string StepName { get; set; }
|
||
|
||
public string StepTime { get; set; }
|
||
|
||
public string StepNumber { get; set; }
|
||
|
||
public List<ProcessHistoryDeviceData> DeviceData { get; set; }
|
||
}
|
||
|
||
/// <summary>
|
||
/// Recipe执行时Process对应的步骤运行期间内,单种数据记录
|
||
/// </summary>
|
||
public class ProcessHistoryDeviceData : ObservableCollection<IRenderableSeries>
|
||
{
|
||
/// <summary>
|
||
/// 列表中展示的名称
|
||
/// </summary>
|
||
public string DeviceName { get; set; }
|
||
|
||
/// <summary>
|
||
/// 实际数据注册到数据库的属性名
|
||
/// </summary>
|
||
public string DATASubscribeName { get; set; }
|
||
|
||
/// <summary>
|
||
/// 在时间段内,查询到的数据集合
|
||
/// </summary>
|
||
public List<float> DeviceValue { get; set; } = new List<float>();
|
||
|
||
/// <summary>
|
||
/// 在时间段内,查询到的数据当时的时间戳,每次获取数据都会记录时间戳
|
||
/// </summary>
|
||
public List<string> TimeStamp { get; set; } = new List<string>();
|
||
|
||
public string Unit { get; set; }
|
||
|
||
public float Min { get; set; }
|
||
|
||
public float Average { get; set; }
|
||
|
||
public float Max { get; set; }
|
||
|
||
/// <summary>
|
||
/// 数据表中是否含有此属性
|
||
/// </summary>
|
||
public bool IsPropertyExists { get; set; }
|
||
|
||
/// <summary>
|
||
/// 根据查询的数据集合计算出对应的数据
|
||
/// </summary>
|
||
public void CalculateData()
|
||
{
|
||
Min = DeviceValue.Count > 0 ? DeviceValue.Min(t => t) : 0;
|
||
Average = DeviceValue.Count > 0 ? DeviceValue.Average(t => t) : 0;
|
||
Max = DeviceValue.Count > 0 ? DeviceValue.Max(t => t) : 0;
|
||
}
|
||
}
|
||
}
|