| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891 | 
							- using Aitex.Core.RT.Log;
 
- using Caliburn.Micro.Core;
 
- using MECF.Framework.Common.DataCenter;
 
- using MECF.Framework.Common.ParameterCenter;
 
- using MECF.Framework.Common.RecipeCenter;
 
- using MECF.Framework.UI.Client.CenterViews.Configs.SystemConfig;
 
- using RecipeEditorLib.DGExtension.CustomColumn;
 
- 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 ParameterDataBase : PropertyChangedBase
 
-     {
 
-         public bool IsChanged
 
-         {
 
-             get
 
-             {
 
-                 bool changed = !IsSavedDesc;
 
-                 if (!changed)
 
-                 {
 
-                     //changed = ChkChanged(Steps) || ChkChanged(PopSettingSteps) || ChkChanged(StepTolerances);
 
-                 }
 
-                 if (!changed)
 
-                 {
 
-                     foreach (Param config in this.ConfigItems)
 
-                     {
 
-                         if (!config.IsSaved)
 
-                         {
 
-                             changed = true;
 
-                             break;
 
-                         }
 
-                     }
 
-                 }
 
-                 return changed;
 
-             }
 
-         }
 
-         private bool _isSavedDesc;
 
-         public bool IsSavedDesc
 
-         {
 
-             get { return _isSavedDesc; }
 
-             set
 
-             {
 
-                 this._isSavedDesc = value;
 
-                 this.NotifyOfPropertyChange("IsSavedDesc");
 
-             }
 
-         }
 
-         private string name;
 
-         public string Name
 
-         {
 
-             get { return this.name; }
 
-             set
 
-             {
 
-                 this.name = value;
 
-                 this.NotifyOfPropertyChange("Name");
 
-             }
 
-         }
 
-         private string _chamberType;
 
-         public string ChamberType
 
-         {
 
-             get { return this._chamberType; }
 
-             set
 
-             {
 
-                 this._chamberType = value;
 
-                 this.NotifyOfPropertyChange("ChamberType");
 
-             }
 
-         }
 
-         private string _version;
 
-         public string Version
 
-         {
 
-             get { return this._version; }
 
-             set
 
-             {
 
-                 this._version = value;
 
-                 this.NotifyOfPropertyChange("Version");
 
-             }
 
-         }
 
-         private int _tableNumber;
 
-         public int TableNumber
 
-         {
 
-             get { return this._tableNumber; }
 
-             set
 
-             {
 
-                 this._tableNumber = value;
 
-                 this.NotifyOfPropertyChange("TableNumber");
 
-             }
 
-         }
 
-         private string _permission;
 
-         public string Permission
 
-         {
 
-             get { return this._permission; }
 
-             set
 
-             {
 
-                 this._permission = value;
 
-                 this.NotifyOfPropertyChange("Permission");
 
-             }
 
-         }
 
-         private string _level;
 
-         public string Level
 
-         {
 
-             get { return this._level; }
 
-             set
 
-             {
 
-                 this._level = value;
 
-                 this.NotifyOfPropertyChange("Level");
 
-             }
 
-         }
 
-         private string _prefixPath;
 
-         public string PrefixPath
 
-         {
 
-             get { return _prefixPath; }
 
-             set
 
-             {
 
-                 _prefixPath = value;
 
-                 this.NotifyOfPropertyChange("PrefixPath");
 
-             }
 
-         }
 
-         private string creator;
 
-         public string Creator
 
-         {
 
-             get { return this.creator; }
 
-             set
 
-             {
 
-                 this.creator = value;
 
-                 this.NotifyOfPropertyChange("Creator");
 
-             }
 
-         }
 
-         private DateTime createTime;
 
-         public DateTime CreateTime
 
-         {
 
-             get { return this.createTime; }
 
-             set
 
-             {
 
-                 this.createTime = value;
 
-                 this.NotifyOfPropertyChange("CreateTime");
 
-             }
 
-         }
 
-         private string description;
 
-         public string Description
 
-         {
 
-             get { return this.description; }
 
-             set
 
-             {
 
-                 this.description = value;
 
-                 this.NotifyOfPropertyChange("Description");
 
-             }
 
-         }
 
-         private string devisor;
 
-         public string Revisor
 
-         {
 
-             get { return this.devisor; }
 
-             set
 
-             {
 
-                 this.devisor = value;
 
-                 this.NotifyOfPropertyChange("Revisor");
 
-             }
 
-         }
 
-         private DateTime deviseTime;
 
-         public DateTime ReviseTime
 
-         {
 
-             get { return this.deviseTime; }
 
-             set
 
-             {
 
-                 this.deviseTime = value;
 
-                 this.NotifyOfPropertyChange("ReviseTime");
 
-             }
 
-         }
 
-         public ObservableCollection<ParameterTable> Steps { get; private set; }
 
-         public Dictionary<string, ObservableCollection<ObservableCollection<Param>>> PopSettingSteps { get; private set; }
 
-         public ObservableCollection<ObservableCollection<Param>> StepTolerances { get; private set; }
 
-         public ObservableCollection<Param> ConfigItems { get; private set; }
 
-         public List<int> StepNos = new List<int>();
 
-         protected XmlDocument _doc;
 
-         protected string _module;
 
-         public bool ToleranceEnable { get; set; }
 
-         public Dictionary<string, bool> PopEnable { get; set; }
 
-         public bool IsCompatibleWithCurrentFormat { get; set; }
 
-         public bool ChkChanged(Dictionary<string, ObservableCollection<ObservableCollection<Param>>> PopSteps)
 
-         {
 
-             return false;
 
-         }
 
-         public void CloneStep(ref ParameterTable destinationStep, ParameterTable originalStep)
 
-         {
 
-             //destinationStep.StepNo = originalStep.StepNo;
 
-             destinationStep.Name = originalStep.Name;
 
-          //   destinationStep.UseTemp = originalStep.UseTemp;
 
-         }
 
-         public void CloneStep(ParameterTable destinationStep, ParameterTable originalStep)
 
-         {
 
-             //destinationStep.StepNo = originalStep.StepNo;
 
-             destinationStep.Name = originalStep.Name;
 
-           //  destinationStep.UseTemp = originalStep.UseTemp;
 
-         }
 
-         public ParameterDataBase()
 
-         {
 
-             this.Steps = new ObservableCollection<ParameterTable>();
 
-             StepTolerances = new ObservableCollection<ObservableCollection<Param>>();
 
-             this.PopSettingSteps = new Dictionary<string, ObservableCollection<ObservableCollection<Param>>>();
 
-             this.PopEnable = new Dictionary<string, bool>();
 
-             ConfigItems = new ObservableCollection<Param>();
 
-             IsSavedDesc = true;
 
-             _doc = new XmlDocument();
 
-             XmlElement node = _doc.CreateElement("Aitex");
 
-             _doc.AppendChild(node);
 
-             node.AppendChild(_doc.CreateElement("TableParameterData"));
 
-         }
 
-         public void Clear()
 
-         {
 
-             Steps.Clear();
 
-             PopSettingSteps.Clear();
 
-             StepTolerances.Clear();
 
-             ConfigItems.Clear();
 
-             ChamberType = "";
 
-             Version = "";
 
-             IsSavedDesc = true;
 
-             _module = "";
 
-         }
 
-         public void DataSaved()
 
-         {
 
-             //foreach (Step parameters in Steps)
 
-             //{
 
-             //    parameters.Apply(param => param.IsSaved = true);
 
-             //}
 
-             //foreach (ObservableCollection<ObservableCollection<Param>> popParameters in PopSettingSteps.Values)
 
-             //{
 
-             //    foreach (ObservableCollection<Param> parameters in popParameters)
 
-             //    {
 
-             //        parameters.Apply(param => param.IsSaved = true);
 
-             //    }
 
-             //}
 
-             //foreach (ObservableCollection<Param> parameters in StepTolerances)
 
-             //{
 
-             //    parameters.Apply(param => param.IsSaved = true);
 
-             //}
 
-             //ConfigItems.Apply(config => config.IsSaved = true);
 
-             //IsSavedDesc = true;
 
-         }
 
-         public virtual 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");
 
-                 //   LoadConfigs(configDefine, nodeConfig);
 
-                 IsCompatibleWithCurrentFormat = true;
 
-             }
 
-             catch (Exception ex)
 
-             {
 
-                 LOG.Write(ex);
 
-             }
 
-         }
 
-         public void ChangeChamber(ObservableCollection<EditorDataGridTemplateColumnBase> columnDefine, Dictionary<string, ObservableCollection<Param>> PopSettingColumns
 
-             , ObservableCollection<Param> configDefine, string module)
 
-         {
 
-             _module = module;
 
-             try
 
-             {
 
-                 XmlNodeList nodeSteps = _doc.SelectNodes($"Aitex/TableParameterData/Module[@Name='{module}']/Step");
 
-                 if (nodeSteps == null)
 
-                     nodeSteps = _doc.SelectNodes($"Aitex/TableParameterData/Step");
 
-                 LoadSteps(nodeSteps);
 
-                 XmlNode nodeConfig =
 
-                     _doc.SelectSingleNode($"Aitex/TableParameterData/Module[@Name='{module}']/Config");
 
-                 if (nodeSteps == null)
 
-                     nodeConfig = _doc.SelectSingleNode($"Aitex/TableParameterData/Config");
 
-                 LoadConfigs(configDefine, nodeConfig);
 
-             }
 
-             catch (Exception ex)
 
-             {
 
-                 LOG.Write(ex);
 
-             }
 
-         }
 
-         public void SaveTo(string[] moduleList)
 
-         {
 
-             GetXmlString();
 
-             XmlNode nodeModule = _doc.SelectSingleNode($"Aitex/TableParameterData/Module[@Name='{_module}']");
 
-             if (nodeModule == null)
 
-             {
 
-                 LOG.Write("Parameter not find modules," + Name);
 
-                 return;
 
-             }
 
-             XmlNode nodeData = nodeModule.ParentNode;
 
-             foreach (var module in moduleList)
 
-             {
 
-                 if (module == _module)
 
-                 {
 
-                     continue;
 
-                 }
 
-                 var child = _doc.SelectSingleNode($"Aitex/TableParameterData/Module[@Name='{module}']");
 
-                 if (child != null)
 
-                     nodeData.RemoveChild(child);
 
-                 XmlElement node = nodeModule.Clone() as XmlElement;
 
-                 node.SetAttribute("Name", module);
 
-                 nodeData.AppendChild(node);
 
-             }
 
-         }
 
-        protected int StepNo = 1;
 
-         public Dictionary<string, string> StepTimeToDictionary(string stepTime)
 
-         {
 
-             Dictionary<string, string> steptimes = new Dictionary<string, string>();
 
-             string[] tempTimes = stepTime.Split(';');
 
-             foreach (var item in tempTimes)
 
-             {
 
-                 string[] subTimes = item.Split(',');
 
-                 steptimes.Add(subTimes[0], subTimes[1]);
 
-             }
 
-             return steptimes;
 
-         }
 
-         public virtual ParameterTable CreateStep(XmlNode stepNode = null)
 
-         {
 
-             ParameterTable step = new ParameterTable();
 
-             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++;
 
-             }
 
-             return step;
 
-         }
 
-         protected bool LoadHeader(XmlNode nodeHeader)
 
-         {
 
-             if (nodeHeader == null)
 
-                 return false;
 
-             if (nodeHeader.Attributes["CreatedBy"] != null)
 
-                 this.Creator = nodeHeader.Attributes["CreatedBy"].Value;
 
-             if (nodeHeader.Attributes["CreationTime"] != null)
 
-                 this.CreateTime = DateTime.Parse(nodeHeader.Attributes["CreationTime"].Value);
 
-             if (nodeHeader.Attributes["LastRevisedBy"] != null)
 
-                 this.Revisor = nodeHeader.Attributes["LastRevisedBy"].Value;
 
-             if (nodeHeader.Attributes["LastRevisionTime"] != null)
 
-                 this.ReviseTime = DateTime.Parse(nodeHeader.Attributes["LastRevisionTime"].Value);
 
-             if (nodeHeader.Attributes["Description"] != null)
 
-                 this.Description = nodeHeader.Attributes["Description"].Value;
 
-             string chamberType = string.Empty;
 
-             if (nodeHeader.Attributes["ChamberType"] != null)
 
-                 chamberType = nodeHeader.Attributes["ChamberType"].Value;
 
-             if (!string.IsNullOrEmpty(chamberType) && chamberType != ChamberType)
 
-             {
 
-                 LOG.Write($"{chamberType} is not accordance with {ChamberType}");
 
-                 return false;
 
-             }
 
-             if (nodeHeader.Attributes["Version"] != null)
 
-                 Version = nodeHeader.Attributes["Version"].Value;
 
-             if (nodeHeader.Attributes["TableNumber"] != null)
 
-                 TableNumber = Convert.ToInt32(nodeHeader.Attributes["TableNumber"].Value);
 
-             if (nodeHeader.Attributes["Permission"] != null)
 
-                 this.Permission = nodeHeader.Attributes["Permission"].Value;
 
-             LoadHeaderExtend(nodeHeader);
 
-             return true;
 
-         }
 
-         public virtual void LoadHeaderExtend(XmlNode nodeHeader)
 
-         { 
 
-         
 
-         }
 
-         public virtual void LoadSteps(XmlNodeList steps)
 
-         {
 
-             Steps.Clear();
 
-             PopSettingSteps.Clear();
 
-             StepTolerances.Clear();
 
-             StepNos.Clear();
 
-             int index = 1;
 
-             foreach (XmlNode nodeStep in steps)
 
-             {
 
-                 ParameterTable step = this.CreateStep(nodeStep);
 
-                 StepNos.Add(step.StepNo);
 
-                 //(rows[1] as StepParam).Value = index.ToString();
 
-                 //CreateStepTolerance(columns, popSettingColumns, nodeStep, out ObservableCollection<Param> step, out ObservableCollection<Param> warning,
 
-                 //    out ObservableCollection<Param> alarm, out Dictionary<string, ObservableCollection<Param>> popSettingStep
 
-                 //    );
 
-                 //StepTolerances.Add(step);
 
-                 //(step[1] as DoubleParam).Value = index.ToString();
 
-                 //StepTolerances.Add(warning);
 
-                 //(warning[1] as DoubleParam).Value = "Warn(%)";
 
-                 //StepTolerances.Add(alarm);
 
-                 //(alarm[1] as DoubleParam).Value = "Alarm(%)";
 
-                 Steps.Add(step);
 
-                 //foreach (string key in popSettingStep.Keys)
 
-                 //{
 
-                 //    if (!PopSettingSteps.ContainsKey(key))
 
-                 //    {
 
-                 //        PopSettingSteps.Add(key, new ObservableCollection<ObservableCollection<Param>>());
 
-                 //    }
 
-                 //    PopSettingSteps[key].Add(popSettingStep[key]);
 
-                 //}
 
-                 index++;
 
-             }
 
-             if (StepNos == null || StepNos.Count == 0)
 
-             {
 
-                 StepNo = 1;
 
-             }
 
-             else
 
-             {
 
-                 StepNo = StepNos.Max() + 1;
 
-             }
 
-         }
 
-         private void LoadConfigs(ObservableCollection<Param> configDefine, XmlNode configNode)
 
-         {
 
-             ConfigItems.Clear();
 
-             foreach (var param in configDefine)
 
-             {
 
-                 if (param is DoubleParam param1)
 
-                 {
 
-                     var config = new DoubleParam()
 
-                     {
 
-                         Name = param.Name,
 
-                         Value = param1.Value,
 
-                         DisplayName = param.DisplayName,
 
-                         Minimun = param1.Minimun,
 
-                         Maximun = param1.Maximun,
 
-                         Resolution = param1.Resolution
 
-                     };
 
-                     if (configNode != null && configNode.Attributes[param1.Name] != null)
 
-                         config.Value = configNode.Attributes[param1.Name].Value;
 
-                     ConfigItems.Add(config);
 
-                 }
 
-                 if (param is StringParam paramString)
 
-                 {
 
-                     var config = new StringParam()
 
-                     {
 
-                         Name = param.Name,
 
-                         Value = paramString.Value,
 
-                         DisplayName = param.DisplayName,
 
-                     };
 
-                     if (configNode != null && configNode.Attributes[paramString.Name] != null)
 
-                         config.Value = configNode.Attributes[paramString.Name].Value;
 
-                     ConfigItems.Add(config);
 
-                 }
 
-             }
 
-         }
 
-         //public ObservableCollection<Param> CloneStep(ObservableCollection<EditorDataGridTemplateColumnBase> _columns, ObservableCollection<Param> _sourceParams)
 
-         //{
 
-         //    ObservableCollection<Param> targetParams = this.CreateStep(_columns);
 
-         //    for (var index = 0; index < _sourceParams.Count; index++)
 
-         //    {
 
-         //        if (_sourceParams[index] is StringParam)
 
-         //        {
 
-         //            ((StringParam)targetParams[index]).Value = ((StringParam)_sourceParams[index]).Value;
 
-         //        }
 
-         //        else if (_sourceParams[index] is IntParam)
 
-         //        {
 
-         //            ((IntParam)targetParams[index]).Value = ((IntParam)_sourceParams[index]).Value;
 
-         //        }
 
-         //        else if (_sourceParams[index] is ComboxParam)
 
-         //        {
 
-         //            ((ComboxParam)targetParams[index]).Value = ((ComboxParam)_sourceParams[index]).Value;
 
-         //        }
 
-         //        else if (_sourceParams[index] is LoopComboxParam)
 
-         //        {
 
-         //            ((LoopComboxParam)targetParams[index]).Value = ((LoopComboxParam)_sourceParams[index]).Value;
 
-         //        }
 
-         //        else if (_sourceParams[index] is BoolParam)
 
-         //        {
 
-         //            ((BoolParam)targetParams[index]).Value = ((BoolParam)_sourceParams[index]).Value;
 
-         //        }
 
-         //        else if (_sourceParams[index] is IntParam)
 
-         //        {
 
-         //            ((IntParam)targetParams[index]).Value = ((IntParam)_sourceParams[index]).Value;
 
-         //        }
 
-         //        else if (_sourceParams[index] is DoubleParam)
 
-         //        {
 
-         //            ((DoubleParam)targetParams[index]).Value = ((DoubleParam)_sourceParams[index]).Value;
 
-         //        }
 
-         //        targetParams[index].Parent = targetParams;
 
-         //    }
 
-         //    return targetParams;
 
-         //}
 
-         private string GetConditionCheckXmlString(ParameterTable parameters)
 
-         {
 
-             StringBuilder conditionCheckStr = new StringBuilder();
 
-             string externalSensor = "";
 
-             conditionCheckStr.Append($"{externalSensor};");
 
-             //conditionCheckStr.Append($"TempUpper:{parameters.TempUpper.ToString()};");
 
-             //conditionCheckStr.Append($"TempLower:{parameters.TempLower.ToString()};");
 
-             return conditionCheckStr.ToString();
 
-         }
 
-         public virtual 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 nodeWarning = _doc.CreateElement("Warning");
 
-                 XmlElement nodeAlarm = _doc.CreateElement("Alarm");
 
-                 Dictionary<string, XmlElement> nodePop = new Dictionary<string, XmlElement>();
 
-                 foreach (string key in PopEnable.Keys)
 
-                 {
 
-                     nodePop.Add(key, _doc.CreateElement(key));
 
-                 }
 
-                 XmlElement nodeStep = _doc.CreateElement("Step");
 
-                 if (ToleranceEnable)
 
-                 {
 
-                     nodeStep.AppendChild(nodeWarning);
 
-                     nodeStep.AppendChild(nodeAlarm);
 
-                 }
 
-                 nodeStep.SetAttribute("StepNo", parameters.StepNo.ToString());
 
-                 nodeStep.SetAttribute("Name", parameters.Name);
 
-            //     nodeStep.SetAttribute("UseTemp", parameters.UseTemp);
 
-                 nodeModule.AppendChild(nodeStep);
 
-                 i++;
 
-             }
 
-             XmlElement nodeConfig = _doc.CreateElement("Config");
 
-             foreach (Param parameter in ConfigItems)
 
-             {
 
-                 if (parameter.Visible == System.Windows.Visibility.Visible)
 
-                 {
 
-                     if (parameter is IntParam)
 
-                         nodeConfig.SetAttribute(parameter.Name, ((IntParam)parameter).Value.ToString());
 
-                     else if (parameter is DoubleParam)
 
-                     {
 
-                         string strValue = ((DoubleParam)parameter).Value;
 
-                         bool succed = double.TryParse(strValue, out double dValue);
 
-                         if (!succed)
 
-                         {
 
-                             MessageBox.Show($"The set value of {parameter.DisplayName} is {strValue}, not a valid value");
 
-                             return null;
 
-                         }
 
-                         var config = ConfigItems.Where(m => m.Name == parameter.Name).FirstOrDefault();
 
-                         if (config is DoubleParam param1)
 
-                         {
 
-                             if (param1.Minimun == 0 && param1.Maximun == 0)
 
-                             {
 
-                                 //没有设定范围
 
-                             }
 
-                             else if (dValue > param1.Maximun || dValue < param1.Minimun)
 
-                             {
 
-                                 MessageBox.Show($"The set value of {parameter.DisplayName} is {dValue}, out of the range {param1.Minimun}~{param1.Maximun}");
 
-                                 return null;
 
-                             }
 
-                         }
 
-                         nodeConfig.SetAttribute(parameter.Name, ((DoubleParam)parameter).Value.ToString());
 
-                     }
 
-                     else if (parameter is StringParam)
 
-                         nodeConfig.SetAttribute(parameter.Name, ((StringParam)parameter).Value.ToString());
 
-                     else if (parameter is ComboxParam)
 
-                         nodeConfig.SetAttribute(parameter.Name, ((ComboxParam)parameter).Value.ToString());
 
-                     else if (parameter is LoopComboxParam)
 
-                         nodeConfig.SetAttribute(parameter.Name, ((LoopComboxParam)parameter).Value.ToString());
 
-                     else if (parameter is PositionParam)
 
-                         nodeConfig.SetAttribute(parameter.Name, ((PositionParam)parameter).Value.ToString());
 
-                     else if (parameter is BoolParam)
 
-                         nodeConfig.SetAttribute(parameter.Name, ((BoolParam)parameter).Value.ToString());
 
-                     else if (parameter is StepParam)
 
-                         nodeConfig.SetAttribute(parameter.Name, ((StepParam)parameter).Value.ToString());
 
-                     else if (parameter is MultipleSelectParam)
 
-                     {
 
-                         List<string> selected = new List<string>();
 
-                         ((MultipleSelectParam)parameter).Options.Apply(
 
-                              opt =>
 
-                              {
 
-                                  if (opt.IsChecked)
 
-                                      selected.Add(opt.ControlName);
 
-                              }
 
-                                                     );
 
-                         nodeConfig.SetAttribute(parameter.Name, string.Join(",", selected));
 
-                     }
 
-                 }
 
-             }
 
-             nodeModule.AppendChild(nodeConfig);
 
-             return _doc.OuterXml;
 
-         }
 
-         private void SetAttribute(ObservableCollection<Param> Parameters, XmlElement PopSettingStep)
 
-         {
 
-             if (Parameters != null)
 
-                 foreach (Param parameter1 in Parameters)
 
-                 {
 
-                     if (parameter1.Visible != System.Windows.Visibility.Visible)
 
-                         continue;
 
-                     if (parameter1 is IntParam)
 
-                         PopSettingStep.SetAttribute(parameter1.Name, ((IntParam)parameter1).Value.ToString());
 
-                     else if (parameter1 is DoubleParam)
 
-                         PopSettingStep.SetAttribute(parameter1.Name, ((DoubleParam)parameter1).Value.ToString());
 
-                     else if (parameter1 is StringParam)
 
-                         PopSettingStep.SetAttribute(parameter1.Name, ((StringParam)parameter1).Value.ToString());
 
-                     else if (parameter1 is ComboxParam)
 
-                         PopSettingStep.SetAttribute(parameter1.Name, ((ComboxParam)parameter1).Value.ToString());
 
-                     else if (parameter1 is LoopComboxParam)
 
-                         PopSettingStep.SetAttribute(parameter1.Name, ((LoopComboxParam)parameter1).Value.ToString());
 
-                     else if (parameter1 is PositionParam)
 
-                         PopSettingStep.SetAttribute(parameter1.Name, ((PositionParam)parameter1).Value.ToString());
 
-                     else if (parameter1 is BoolParam)
 
-                         PopSettingStep.SetAttribute(parameter1.Name, ((BoolParam)parameter1).Value.ToString());
 
-                     else if (parameter1 is StepParam)
 
-                         PopSettingStep.SetAttribute(parameter1.Name, ((StepParam)parameter1).Value.ToString());
 
-                     else if (parameter1 is MultipleSelectParam)
 
-                     {
 
-                         List<string> selected1 = new List<string>();
 
-                         ((MultipleSelectParam)parameter1).Options.Apply(
 
-                             opt =>
 
-                             {
 
-                                 if (opt.IsChecked)
 
-                                     selected1.Add(opt.ControlName);
 
-                             }
 
-                             );
 
-                         PopSettingStep.SetAttribute(parameter1.Name, string.Join(",", selected1));
 
-                     }
 
-                 }
 
-         }
 
-         public string ToXmlString()
 
-         {
 
-             StringBuilder builder = new StringBuilder();
 
-             builder.Append("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
 
-             builder.Append(string.Format("<Aitex><TableRecipeData CreatedBy=\"{0}\" CreationTime=\"{1}\" LastRevisedBy=\"{2}\" LastRevisionTime=\"{3}\" Description=\"{4}\"  RecipeChamberType=\"{5}\" RecipeVersion=\"{6}\" TableNumber=\"{7}\">", this.Creator, this.CreateTime.ToString("yyyy-MM-dd HH:mm:ss"), this.Revisor, this.ReviseTime.ToString("yyyy-MM-dd HH:mm:ss"), this.Description, ChamberType, Version, TableNumber));
 
-             foreach (ParameterTable parameters in Steps)
 
-             {
 
-                 builder.Append("<Step ");
 
-                 builder.Append("Name=\"" + parameters.Name + "\" ");
 
-                 builder.Append("/>");
 
-             }
 
-             //builder.Append("<Config ");
 
-             //foreach (Param parameter in ConfigItems)
 
-             //{
 
-             //    if (parameter.Visible == System.Windows.Visibility.Visible)
 
-             //    {
 
-             //        if (parameter is IntParam)
 
-             //            builder.Append(parameter.Name + "=\"" + ((IntParam)parameter).Value + "\" ");
 
-             //        else if (parameter is DoubleParam)
 
-             //            builder.Append(parameter.Name + "=\"" + ((DoubleParam)parameter).Value + "\" ");
 
-             //        else if (parameter is StringParam)
 
-             //            builder.Append(parameter.Name + "=\"" + ((StringParam)parameter).Value + "\" ");
 
-             //        else if (parameter is ComboxParam)
 
-             //            builder.Append(parameter.Name + "=\"" + ((ComboxParam)parameter).Value + "\" ");
 
-             //        else if (parameter is LoopComboxParam)
 
-             //            builder.Append(parameter.Name + "=\"" + ((LoopComboxParam)parameter).Value + "\" ");
 
-             //        else if (parameter is PositionParam)
 
-             //            builder.Append(parameter.Name + "=\"" + ((PositionParam)parameter).Value + "\" ");
 
-             //        else if (parameter is BoolParam)
 
-             //            builder.Append(parameter.Name + "=\"" + ((BoolParam)parameter).Value + "\" ");
 
-             //        else if (parameter is StepParam)
 
-             //            builder.Append(parameter.Name + "=\"" + ((StepParam)parameter).Value + "\" ");
 
-             //        else if (parameter is MultipleSelectParam)
 
-             //        {
 
-             //            List<string> selected = new List<string>();
 
-             //            ((MultipleSelectParam)parameter).Options.Apply(
 
-             //                opt =>
 
-             //                {
 
-             //                    if (opt.IsChecked)
 
-             //                        selected.Add(opt.ControlName);
 
-             //                }
 
-             //                );
 
-             //            builder.Append(parameter.Name + "=\"" + string.Join(",", selected) + "\" ");
 
-             //        }
 
-             //    }
 
-             //}
 
-             builder.Append("/>");
 
-             builder.Append("</TableRecipeData></Aitex>");
 
-             return builder.ToString();
 
-         }
 
-     }
 
-     public class ParameterTable : PropertyChangedBase
 
-     {
 
-         public string Value { get; set; }
 
-         private int _stepNo;
 
-         public int StepNo
 
-         {
 
-             get => _stepNo; set
 
-             {
 
-                 _stepNo = value;
 
-                 NotifyOfPropertyChange("StepNo");
 
-             }
 
-         }
 
-         private string _name;
 
-         public string Name
 
-         {
 
-             get => _name; set
 
-             {
 
-                 _name = value;
 
-                 NotifyOfPropertyChange("Name");
 
-             }
 
-         }
 
-         private string _useTemp;
 
-         public string UseTemp
 
-         {
 
-             get => _useTemp;
 
-             set
 
-             {
 
-                 _useTemp = value;
 
-                 NotifyOfPropertyChange("UseTemp");
 
-             }
 
-         }
 
-         private bool _isChecked;
 
-         public bool IsChecked {
 
-             get=> _isChecked;
 
-             set
 
-             {
 
-                 _isChecked = value;
 
-                 NotifyOfPropertyChange("IsChecked");
 
-             } }
 
-         public Visibility IsVisibility { get; set; } = Visibility.Visible;
 
-        
 
-         public ParameterTable() { }
 
-         public ParameterTable Clone()//深拷贝
 
-         {
 
-             return this.MemberwiseClone() as ParameterTable;
 
-         }
 
-         public ParameterTable(ParameterDataBase recipeData)
 
-         {
 
-             if (recipeData.Steps.Count <= 0) return;
 
-             SetCurrentRecipeStep(recipeData, recipeData.Steps[0]);
 
-         }
 
-         public ParameterTable(ParameterDataBase recipeData, int selectedStepNo)
 
-         {
 
-             ParameterTable step = recipeData.Steps.Where(x => x.StepNo == selectedStepNo).FirstOrDefault();
 
-             SetCurrentRecipeStep(recipeData, step);
 
-         }
 
-         public virtual void SetCurrentRecipeStep(ParameterDataBase recipeData, ParameterTable step)
 
-         {
 
-         }
 
-     }
 
-     
 
- }
 
 
  |