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 { /// /// 查询数据源, /// private List PM1ItemList { get; set; } private List PM2ItemList { get; set; } public ProcessHistoryItemsDefault() { } public void Initialize() { var phi1 = CustomXmlSerializer.Deserialize(new FileInfo($"Config\\PM\\PM1\\ProcessDeviceItemsPM1.xml")); PM1ItemList = phi1.ItemList; DATA.Subscribe($"PM1.ProcessHistoryItemsDefault", () => PM1ItemList, SubscriptionAttribute.FLAG.IgnoreSaveDB); var phi2 = CustomXmlSerializer.Deserialize(new FileInfo($"Config\\PM\\PM2\\ProcessDeviceItemsPM2.xml")); PM2ItemList = phi2.ItemList; DATA.Subscribe($"PM2.ProcessHistoryItemsDefault", () => PM2ItemList, SubscriptionAttribute.FLAG.IgnoreSaveDB); } } /// /// 根据XML配置生成ProcessHistory多个单元的集合对象 /// [XmlType(typeName: "ProcessDeviceItems")] public class ProcessDeviceItems { /// /// ProcessDeviceItems默认对象集合 /// [XmlElement("ProcessDeviceItem")] public List ItemList { get; set; } } /// /// ProcessHistory默认对象集合数据 /// [Serializable] [DataContract] [XmlType(typeName: "ProcessDeviceItem")] public class ProcessDeviceItem { /// /// 客户期望界面显示项 /// [XmlAttribute()] [DataMember] public string Display { get; set; } /// /// 界面显示项,SIC数据库属性名称 /// [XmlAttribute()] [DataMember] public string Property { get; set; } /// /// 单位,显示用 /// [XmlAttribute()] [DataMember] public string Unit { get; set; } /// /// 数据表中是否包含当前属性,不包含的时候,此属性不能作为查询项 /// [DataMember] public bool IsPropertyExists { get; set; } } /// /// Recipe生产历史记录 /// 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" } } /// /// Recipe执行时Process对应的步骤流程 /// 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 DeviceData { get; set; } } /// /// Recipe执行时Process对应的步骤运行期间内,单种数据记录 /// public class ProcessHistoryDeviceData : ObservableCollection { /// /// 列表中展示的名称 /// public string DeviceName { get; set; } /// /// 实际数据注册到数据库的属性名 /// public string DATASubscribeName { get; set; } /// /// 在时间段内,查询到的数据集合 /// public List DeviceValue { get; set; } = new List(); /// /// 在时间段内,查询到的数据当时的时间戳,每次获取数据都会记录时间戳 /// public List TimeStamp { get; set; } = new List(); public string Unit { get; set; } public float Min { get; set; } public float Average { get; set; } public float Max { get; set; } /// /// 数据表中是否含有此属性 /// public bool IsPropertyExists { get; set; } /// /// 根据查询的数据集合计算出对应的数据 /// 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; } } }