using Aitex.Core.RT.Log; using Aitex.Core.RT.ParameterCenter; using Caliburn.Micro.Core; using MECF.Framework.Common.ParameterCenter; using MECF.Framework.UI.Client.CenterViews.Editors.Recipe; using RecipeEditorLib.RecipeModel.Params; using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Xml; namespace MECF.Framework.UI.Client.CenterViews.Parameter { public class TempPIDParameterData : ParameterDataBase { private ParameterProvider _parameterProvider = new ParameterProvider(); private ParameterFormatBuilder _columnBuilder = new ParameterFormatBuilder(); private Dictionary> ParameterTemplate; public TempPIDParameterData() : base() { string vars = _parameterProvider.GetParameterFormatXml($"Parameter\\TempPID"); _columnBuilder.Build($"Parameter\\TempPID"); ParameterTemplate = _parameterProvider.GetGroupParameterTemplate(); TableNumber = _columnBuilder.TableNumber; Version = _columnBuilder.Version; for (int i = 1; i < TableNumber+1; i++) { Steps.Add(CreateStep()); } } public override ParameterTable CreateStep(XmlNode stepNode = null) { ParameterTable step = new TempPIDTable(); if (stepNode != null) { if (stepNode.Attributes["StepNo"] != null) step.StepNo = int.Parse(stepNode.Attributes["StepNo"].Value); if (stepNode.Attributes["Name"] != null) step.Name = stepNode.Attributes["Name"].Value; if (stepNode.Attributes["UseTemp"] != null) step.UseTemp = stepNode.Attributes["UseTemp"].Value; } else { step.StepNo = StepNo; step.Name = "Name" + StepNo.ToString(); step.UseTemp = "0"; StepNo++; } int pIDIndex = 1; foreach (var item in ParameterTemplate) { if (item.Key != "Parameter Information") { var _pidData = new PIDData() { Name = item.Key, Index = pIDIndex }; var pcom = item.Value.Where(x => x.ControlName == "P").FirstOrDefault(); if (pcom != null) { DoubleParam pParam = new DoubleParam() { Name = pcom.ControlName, Value = pcom.Value.ToString(), DisplayName = pcom.DisplayName, Minimun = pcom.Minimun, Maximun = pcom.Maximun, Resolution = 0 }; _pidData.P = pParam; } var icom = item.Value.Where(x => x.ControlName == "I").FirstOrDefault(); if (icom != null) { DoubleParam iParam = new DoubleParam() { Name = icom.ControlName, Value = icom.Value.ToString(), DisplayName = icom.DisplayName, Minimun = icom.Minimun, Maximun = icom.Maximun, Resolution = 0 }; _pidData.I = iParam; } var dcom = item.Value.Where(x => x.ControlName == "D").FirstOrDefault(); if (dcom != null) { DoubleParam dParam = new DoubleParam() { Name = dcom.ControlName, Value = dcom.Value.ToString(), DisplayName = dcom.DisplayName, Minimun = dcom.Minimun, Maximun = dcom.Maximun, Resolution = 0 }; _pidData.D = dParam; } ((TempPIDTable)step).PIDDataList.Add(_pidData); pIDIndex++; } } if (stepNode != null) { foreach (var item in ((TempPIDTable)step).PIDDataList) { if (stepNode.Attributes["PIDData"] != null) { ((TempPIDTable)step).SetTempPIDData(stepNode.Attributes["PIDData"].Value.ToString()); } } } return step; } public override string GetXmlString() { XmlElement nodeData = _doc.SelectSingleNode($"Aitex/TableParameterData") as XmlElement; nodeData.SetAttribute("CreatedBy", Creator); nodeData.SetAttribute("CreationTime", CreateTime.ToString("yyyy-MM-dd HH:mm:ss")); nodeData.SetAttribute("LastRevisedBy", Revisor); nodeData.SetAttribute("LastRevisionTime", ReviseTime.ToString("yyyy-MM-dd HH:mm:ss")); nodeData.SetAttribute("Description", Description); nodeData.SetAttribute("ParameterChamberType", ChamberType); nodeData.SetAttribute("Version", Version); nodeData.SetAttribute("TableNumber", TableNumber.ToString()); nodeData.SetAttribute("Permission", Permission); nodeData.SetAttribute("ParameterLevel", Level); XmlNode nodeModule = _doc.SelectSingleNode($"Aitex/TableParameterData/Module[@Name='{_module}']"); if (nodeModule == null) { nodeModule = _doc.CreateElement("Module"); nodeData.AppendChild(nodeModule); } nodeModule.RemoveAll(); (nodeModule as XmlElement).SetAttribute("Name", _module); int i = 0; foreach (ParameterTable parameters in Steps) { XmlElement nodeStep = _doc.CreateElement("Step"); nodeStep.SetAttribute("StepNo", parameters.StepNo.ToString()); nodeStep.SetAttribute("Name", parameters.Name); nodeStep.SetAttribute("UseTemp", parameters.UseTemp); var pidDatas = ((TempPIDTable)parameters).PIDDataList.Select(x => x.ToString()).ToArray(); nodeStep.SetAttribute($"PIDData",string.Join("|" ,pidDatas)); nodeModule.AppendChild(nodeStep); i++; } return _doc.OuterXml; } public override void InitData(string prefixPath, string recipeName, string recipeContent, string module) { IsCompatibleWithCurrentFormat = false; _module = module; Name = recipeName; PrefixPath = prefixPath; try { _doc = new XmlDocument(); _doc.LoadXml(recipeContent); if (!LoadHeader(_doc.SelectSingleNode("Aitex/TableParameterData"))) return; XmlNodeList nodeSteps = _doc.SelectNodes($"Aitex/TableParameterData/Module[@Name='{module}']/Step"); if (nodeSteps == null) nodeSteps = _doc.SelectNodes($"Aitex/TableParameterData/Step"); LoadSteps(nodeSteps); var index = 1; foreach (ParameterTable parameters in Steps) { parameters.Value = index.ToString(); index++; } // ValidLoopData(); XmlNode nodeConfig = _doc.SelectSingleNode($"Aitex/TableParameterData/Module[@Name='{module}']/Config"); if (nodeSteps == null) nodeConfig = _doc.SelectSingleNode($"Aitex/TableParameterData/Config"); IsCompatibleWithCurrentFormat = true; } catch (Exception ex) { LOG.Write(ex); } } public override void LoadSteps(XmlNodeList steps) { Steps.Clear(); PopSettingSteps.Clear(); StepTolerances.Clear(); StepNos.Clear(); int index = 1; foreach (XmlNode nodeStep in steps) { ParameterTable stepTable = this.CreateStep(nodeStep); StepNos.Add(stepTable.StepNo); Steps.Add(stepTable); index++; } } } }