ParameterDataBase.cs 34 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891
  1. using Aitex.Core.RT.Log;
  2. using Caliburn.Micro.Core;
  3. using MECF.Framework.Common.DataCenter;
  4. using MECF.Framework.Common.ParameterCenter;
  5. using MECF.Framework.Common.RecipeCenter;
  6. using MECF.Framework.UI.Client.CenterViews.Configs.SystemConfig;
  7. using RecipeEditorLib.DGExtension.CustomColumn;
  8. using RecipeEditorLib.RecipeModel.Params;
  9. using System;
  10. using System.Collections.Generic;
  11. using System.Collections.ObjectModel;
  12. using System.Linq;
  13. using System.Text;
  14. using System.Threading.Tasks;
  15. using System.Windows;
  16. using System.Xml;
  17. namespace MECF.Framework.UI.Client.CenterViews.Parameter
  18. {
  19. public class ParameterDataBase : PropertyChangedBase
  20. {
  21. public bool IsChanged
  22. {
  23. get
  24. {
  25. bool changed = !IsSavedDesc;
  26. if (!changed)
  27. {
  28. //changed = ChkChanged(Steps) || ChkChanged(PopSettingSteps) || ChkChanged(StepTolerances);
  29. }
  30. if (!changed)
  31. {
  32. foreach (Param config in this.ConfigItems)
  33. {
  34. if (!config.IsSaved)
  35. {
  36. changed = true;
  37. break;
  38. }
  39. }
  40. }
  41. return changed;
  42. }
  43. }
  44. private bool _isSavedDesc;
  45. public bool IsSavedDesc
  46. {
  47. get { return _isSavedDesc; }
  48. set
  49. {
  50. this._isSavedDesc = value;
  51. this.NotifyOfPropertyChange("IsSavedDesc");
  52. }
  53. }
  54. private string name;
  55. public string Name
  56. {
  57. get { return this.name; }
  58. set
  59. {
  60. this.name = value;
  61. this.NotifyOfPropertyChange("Name");
  62. }
  63. }
  64. private string _chamberType;
  65. public string ChamberType
  66. {
  67. get { return this._chamberType; }
  68. set
  69. {
  70. this._chamberType = value;
  71. this.NotifyOfPropertyChange("ChamberType");
  72. }
  73. }
  74. private string _version;
  75. public string Version
  76. {
  77. get { return this._version; }
  78. set
  79. {
  80. this._version = value;
  81. this.NotifyOfPropertyChange("Version");
  82. }
  83. }
  84. private int _tableNumber;
  85. public int TableNumber
  86. {
  87. get { return this._tableNumber; }
  88. set
  89. {
  90. this._tableNumber = value;
  91. this.NotifyOfPropertyChange("TableNumber");
  92. }
  93. }
  94. private string _permission;
  95. public string Permission
  96. {
  97. get { return this._permission; }
  98. set
  99. {
  100. this._permission = value;
  101. this.NotifyOfPropertyChange("Permission");
  102. }
  103. }
  104. private string _level;
  105. public string Level
  106. {
  107. get { return this._level; }
  108. set
  109. {
  110. this._level = value;
  111. this.NotifyOfPropertyChange("Level");
  112. }
  113. }
  114. private string _prefixPath;
  115. public string PrefixPath
  116. {
  117. get { return _prefixPath; }
  118. set
  119. {
  120. _prefixPath = value;
  121. this.NotifyOfPropertyChange("PrefixPath");
  122. }
  123. }
  124. private string creator;
  125. public string Creator
  126. {
  127. get { return this.creator; }
  128. set
  129. {
  130. this.creator = value;
  131. this.NotifyOfPropertyChange("Creator");
  132. }
  133. }
  134. private DateTime createTime;
  135. public DateTime CreateTime
  136. {
  137. get { return this.createTime; }
  138. set
  139. {
  140. this.createTime = value;
  141. this.NotifyOfPropertyChange("CreateTime");
  142. }
  143. }
  144. private string description;
  145. public string Description
  146. {
  147. get { return this.description; }
  148. set
  149. {
  150. this.description = value;
  151. this.NotifyOfPropertyChange("Description");
  152. }
  153. }
  154. private string devisor;
  155. public string Revisor
  156. {
  157. get { return this.devisor; }
  158. set
  159. {
  160. this.devisor = value;
  161. this.NotifyOfPropertyChange("Revisor");
  162. }
  163. }
  164. private DateTime deviseTime;
  165. public DateTime ReviseTime
  166. {
  167. get { return this.deviseTime; }
  168. set
  169. {
  170. this.deviseTime = value;
  171. this.NotifyOfPropertyChange("ReviseTime");
  172. }
  173. }
  174. public ObservableCollection<ParameterTable> Steps { get; private set; }
  175. public Dictionary<string, ObservableCollection<ObservableCollection<Param>>> PopSettingSteps { get; private set; }
  176. public ObservableCollection<ObservableCollection<Param>> StepTolerances { get; private set; }
  177. public ObservableCollection<Param> ConfigItems { get; private set; }
  178. public List<int> StepNos = new List<int>();
  179. protected XmlDocument _doc;
  180. protected string _module;
  181. public bool ToleranceEnable { get; set; }
  182. public Dictionary<string, bool> PopEnable { get; set; }
  183. public bool IsCompatibleWithCurrentFormat { get; set; }
  184. public bool ChkChanged(Dictionary<string, ObservableCollection<ObservableCollection<Param>>> PopSteps)
  185. {
  186. return false;
  187. }
  188. public void CloneStep(ref ParameterTable destinationStep, ParameterTable originalStep)
  189. {
  190. //destinationStep.StepNo = originalStep.StepNo;
  191. destinationStep.Name = originalStep.Name;
  192. // destinationStep.UseTemp = originalStep.UseTemp;
  193. }
  194. public void CloneStep(ParameterTable destinationStep, ParameterTable originalStep)
  195. {
  196. //destinationStep.StepNo = originalStep.StepNo;
  197. destinationStep.Name = originalStep.Name;
  198. // destinationStep.UseTemp = originalStep.UseTemp;
  199. }
  200. public ParameterDataBase()
  201. {
  202. this.Steps = new ObservableCollection<ParameterTable>();
  203. StepTolerances = new ObservableCollection<ObservableCollection<Param>>();
  204. this.PopSettingSteps = new Dictionary<string, ObservableCollection<ObservableCollection<Param>>>();
  205. this.PopEnable = new Dictionary<string, bool>();
  206. ConfigItems = new ObservableCollection<Param>();
  207. IsSavedDesc = true;
  208. _doc = new XmlDocument();
  209. XmlElement node = _doc.CreateElement("Aitex");
  210. _doc.AppendChild(node);
  211. node.AppendChild(_doc.CreateElement("TableParameterData"));
  212. }
  213. public void Clear()
  214. {
  215. Steps.Clear();
  216. PopSettingSteps.Clear();
  217. StepTolerances.Clear();
  218. ConfigItems.Clear();
  219. ChamberType = "";
  220. Version = "";
  221. IsSavedDesc = true;
  222. _module = "";
  223. }
  224. public void DataSaved()
  225. {
  226. //foreach (Step parameters in Steps)
  227. //{
  228. // parameters.Apply(param => param.IsSaved = true);
  229. //}
  230. //foreach (ObservableCollection<ObservableCollection<Param>> popParameters in PopSettingSteps.Values)
  231. //{
  232. // foreach (ObservableCollection<Param> parameters in popParameters)
  233. // {
  234. // parameters.Apply(param => param.IsSaved = true);
  235. // }
  236. //}
  237. //foreach (ObservableCollection<Param> parameters in StepTolerances)
  238. //{
  239. // parameters.Apply(param => param.IsSaved = true);
  240. //}
  241. //ConfigItems.Apply(config => config.IsSaved = true);
  242. //IsSavedDesc = true;
  243. }
  244. public virtual void InitData(string prefixPath, string recipeName, string recipeContent, string module)
  245. {
  246. IsCompatibleWithCurrentFormat = false;
  247. _module = module;
  248. Name = recipeName;
  249. PrefixPath = prefixPath;
  250. try
  251. {
  252. _doc = new XmlDocument();
  253. _doc.LoadXml(recipeContent);
  254. if (!LoadHeader(_doc.SelectSingleNode("Aitex/TableParameterData")))
  255. return;
  256. XmlNodeList nodeSteps = _doc.SelectNodes($"Aitex/TableParameterData/Module[@Name='{module}']/Step");
  257. if (nodeSteps == null)
  258. nodeSteps = _doc.SelectNodes($"Aitex/TableParameterData/Step");
  259. LoadSteps(nodeSteps);
  260. var index = 1;
  261. foreach (ParameterTable parameters in Steps)
  262. {
  263. parameters.Value = index.ToString();
  264. index++;
  265. }
  266. // ValidLoopData();
  267. XmlNode nodeConfig =
  268. _doc.SelectSingleNode($"Aitex/TableParameterData/Module[@Name='{module}']/Config");
  269. if (nodeSteps == null)
  270. nodeConfig = _doc.SelectSingleNode($"Aitex/TableParameterData/Config");
  271. // LoadConfigs(configDefine, nodeConfig);
  272. IsCompatibleWithCurrentFormat = true;
  273. }
  274. catch (Exception ex)
  275. {
  276. LOG.Write(ex);
  277. }
  278. }
  279. public void ChangeChamber(ObservableCollection<EditorDataGridTemplateColumnBase> columnDefine, Dictionary<string, ObservableCollection<Param>> PopSettingColumns
  280. , ObservableCollection<Param> configDefine, string module)
  281. {
  282. _module = module;
  283. try
  284. {
  285. XmlNodeList nodeSteps = _doc.SelectNodes($"Aitex/TableParameterData/Module[@Name='{module}']/Step");
  286. if (nodeSteps == null)
  287. nodeSteps = _doc.SelectNodes($"Aitex/TableParameterData/Step");
  288. LoadSteps(nodeSteps);
  289. XmlNode nodeConfig =
  290. _doc.SelectSingleNode($"Aitex/TableParameterData/Module[@Name='{module}']/Config");
  291. if (nodeSteps == null)
  292. nodeConfig = _doc.SelectSingleNode($"Aitex/TableParameterData/Config");
  293. LoadConfigs(configDefine, nodeConfig);
  294. }
  295. catch (Exception ex)
  296. {
  297. LOG.Write(ex);
  298. }
  299. }
  300. public void SaveTo(string[] moduleList)
  301. {
  302. GetXmlString();
  303. XmlNode nodeModule = _doc.SelectSingleNode($"Aitex/TableParameterData/Module[@Name='{_module}']");
  304. if (nodeModule == null)
  305. {
  306. LOG.Write("Parameter not find modules," + Name);
  307. return;
  308. }
  309. XmlNode nodeData = nodeModule.ParentNode;
  310. foreach (var module in moduleList)
  311. {
  312. if (module == _module)
  313. {
  314. continue;
  315. }
  316. var child = _doc.SelectSingleNode($"Aitex/TableParameterData/Module[@Name='{module}']");
  317. if (child != null)
  318. nodeData.RemoveChild(child);
  319. XmlElement node = nodeModule.Clone() as XmlElement;
  320. node.SetAttribute("Name", module);
  321. nodeData.AppendChild(node);
  322. }
  323. }
  324. protected int StepNo = 1;
  325. public Dictionary<string, string> StepTimeToDictionary(string stepTime)
  326. {
  327. Dictionary<string, string> steptimes = new Dictionary<string, string>();
  328. string[] tempTimes = stepTime.Split(';');
  329. foreach (var item in tempTimes)
  330. {
  331. string[] subTimes = item.Split(',');
  332. steptimes.Add(subTimes[0], subTimes[1]);
  333. }
  334. return steptimes;
  335. }
  336. public virtual ParameterTable CreateStep(XmlNode stepNode = null)
  337. {
  338. ParameterTable step = new ParameterTable();
  339. if (stepNode != null)
  340. {
  341. if (stepNode.Attributes["StepNo"] != null)
  342. step.StepNo = int.Parse(stepNode.Attributes["StepNo"].Value);
  343. if (stepNode.Attributes["Name"] != null)
  344. step.Name = stepNode.Attributes["Name"].Value;
  345. //if (stepNode.Attributes["UseTemp"] != null)
  346. // step.UseTemp = stepNode.Attributes["UseTemp"].Value;
  347. }
  348. else
  349. {
  350. step.StepNo = StepNo;
  351. step.Name = "Name" + StepNo.ToString();
  352. // step.UseTemp = "0";
  353. StepNo++;
  354. }
  355. return step;
  356. }
  357. protected bool LoadHeader(XmlNode nodeHeader)
  358. {
  359. if (nodeHeader == null)
  360. return false;
  361. if (nodeHeader.Attributes["CreatedBy"] != null)
  362. this.Creator = nodeHeader.Attributes["CreatedBy"].Value;
  363. if (nodeHeader.Attributes["CreationTime"] != null)
  364. this.CreateTime = DateTime.Parse(nodeHeader.Attributes["CreationTime"].Value);
  365. if (nodeHeader.Attributes["LastRevisedBy"] != null)
  366. this.Revisor = nodeHeader.Attributes["LastRevisedBy"].Value;
  367. if (nodeHeader.Attributes["LastRevisionTime"] != null)
  368. this.ReviseTime = DateTime.Parse(nodeHeader.Attributes["LastRevisionTime"].Value);
  369. if (nodeHeader.Attributes["Description"] != null)
  370. this.Description = nodeHeader.Attributes["Description"].Value;
  371. string chamberType = string.Empty;
  372. if (nodeHeader.Attributes["ChamberType"] != null)
  373. chamberType = nodeHeader.Attributes["ChamberType"].Value;
  374. if (!string.IsNullOrEmpty(chamberType) && chamberType != ChamberType)
  375. {
  376. LOG.Write($"{chamberType} is not accordance with {ChamberType}");
  377. return false;
  378. }
  379. if (nodeHeader.Attributes["Version"] != null)
  380. Version = nodeHeader.Attributes["Version"].Value;
  381. if (nodeHeader.Attributes["TableNumber"] != null)
  382. TableNumber = Convert.ToInt32(nodeHeader.Attributes["TableNumber"].Value);
  383. if (nodeHeader.Attributes["Permission"] != null)
  384. this.Permission = nodeHeader.Attributes["Permission"].Value;
  385. LoadHeaderExtend(nodeHeader);
  386. return true;
  387. }
  388. public virtual void LoadHeaderExtend(XmlNode nodeHeader)
  389. {
  390. }
  391. public virtual void LoadSteps(XmlNodeList steps)
  392. {
  393. Steps.Clear();
  394. PopSettingSteps.Clear();
  395. StepTolerances.Clear();
  396. StepNos.Clear();
  397. int index = 1;
  398. foreach (XmlNode nodeStep in steps)
  399. {
  400. ParameterTable step = this.CreateStep(nodeStep);
  401. StepNos.Add(step.StepNo);
  402. //(rows[1] as StepParam).Value = index.ToString();
  403. //CreateStepTolerance(columns, popSettingColumns, nodeStep, out ObservableCollection<Param> step, out ObservableCollection<Param> warning,
  404. // out ObservableCollection<Param> alarm, out Dictionary<string, ObservableCollection<Param>> popSettingStep
  405. // );
  406. //StepTolerances.Add(step);
  407. //(step[1] as DoubleParam).Value = index.ToString();
  408. //StepTolerances.Add(warning);
  409. //(warning[1] as DoubleParam).Value = "Warn(%)";
  410. //StepTolerances.Add(alarm);
  411. //(alarm[1] as DoubleParam).Value = "Alarm(%)";
  412. Steps.Add(step);
  413. //foreach (string key in popSettingStep.Keys)
  414. //{
  415. // if (!PopSettingSteps.ContainsKey(key))
  416. // {
  417. // PopSettingSteps.Add(key, new ObservableCollection<ObservableCollection<Param>>());
  418. // }
  419. // PopSettingSteps[key].Add(popSettingStep[key]);
  420. //}
  421. index++;
  422. }
  423. if (StepNos == null || StepNos.Count == 0)
  424. {
  425. StepNo = 1;
  426. }
  427. else
  428. {
  429. StepNo = StepNos.Max() + 1;
  430. }
  431. }
  432. private void LoadConfigs(ObservableCollection<Param> configDefine, XmlNode configNode)
  433. {
  434. ConfigItems.Clear();
  435. foreach (var param in configDefine)
  436. {
  437. if (param is DoubleParam param1)
  438. {
  439. var config = new DoubleParam()
  440. {
  441. Name = param.Name,
  442. Value = param1.Value,
  443. DisplayName = param.DisplayName,
  444. Minimun = param1.Minimun,
  445. Maximun = param1.Maximun,
  446. Resolution = param1.Resolution
  447. };
  448. if (configNode != null && configNode.Attributes[param1.Name] != null)
  449. config.Value = configNode.Attributes[param1.Name].Value;
  450. ConfigItems.Add(config);
  451. }
  452. if (param is StringParam paramString)
  453. {
  454. var config = new StringParam()
  455. {
  456. Name = param.Name,
  457. Value = paramString.Value,
  458. DisplayName = param.DisplayName,
  459. };
  460. if (configNode != null && configNode.Attributes[paramString.Name] != null)
  461. config.Value = configNode.Attributes[paramString.Name].Value;
  462. ConfigItems.Add(config);
  463. }
  464. }
  465. }
  466. //public ObservableCollection<Param> CloneStep(ObservableCollection<EditorDataGridTemplateColumnBase> _columns, ObservableCollection<Param> _sourceParams)
  467. //{
  468. // ObservableCollection<Param> targetParams = this.CreateStep(_columns);
  469. // for (var index = 0; index < _sourceParams.Count; index++)
  470. // {
  471. // if (_sourceParams[index] is StringParam)
  472. // {
  473. // ((StringParam)targetParams[index]).Value = ((StringParam)_sourceParams[index]).Value;
  474. // }
  475. // else if (_sourceParams[index] is IntParam)
  476. // {
  477. // ((IntParam)targetParams[index]).Value = ((IntParam)_sourceParams[index]).Value;
  478. // }
  479. // else if (_sourceParams[index] is ComboxParam)
  480. // {
  481. // ((ComboxParam)targetParams[index]).Value = ((ComboxParam)_sourceParams[index]).Value;
  482. // }
  483. // else if (_sourceParams[index] is LoopComboxParam)
  484. // {
  485. // ((LoopComboxParam)targetParams[index]).Value = ((LoopComboxParam)_sourceParams[index]).Value;
  486. // }
  487. // else if (_sourceParams[index] is BoolParam)
  488. // {
  489. // ((BoolParam)targetParams[index]).Value = ((BoolParam)_sourceParams[index]).Value;
  490. // }
  491. // else if (_sourceParams[index] is IntParam)
  492. // {
  493. // ((IntParam)targetParams[index]).Value = ((IntParam)_sourceParams[index]).Value;
  494. // }
  495. // else if (_sourceParams[index] is DoubleParam)
  496. // {
  497. // ((DoubleParam)targetParams[index]).Value = ((DoubleParam)_sourceParams[index]).Value;
  498. // }
  499. // targetParams[index].Parent = targetParams;
  500. // }
  501. // return targetParams;
  502. //}
  503. private string GetConditionCheckXmlString(ParameterTable parameters)
  504. {
  505. StringBuilder conditionCheckStr = new StringBuilder();
  506. string externalSensor = "";
  507. conditionCheckStr.Append($"{externalSensor};");
  508. //conditionCheckStr.Append($"TempUpper:{parameters.TempUpper.ToString()};");
  509. //conditionCheckStr.Append($"TempLower:{parameters.TempLower.ToString()};");
  510. return conditionCheckStr.ToString();
  511. }
  512. public virtual string GetXmlString()
  513. {
  514. XmlElement nodeData = _doc.SelectSingleNode($"Aitex/TableParameterData") as XmlElement;
  515. nodeData.SetAttribute("CreatedBy", Creator);
  516. nodeData.SetAttribute("CreationTime", CreateTime.ToString("yyyy-MM-dd HH:mm:ss"));
  517. nodeData.SetAttribute("LastRevisedBy", Revisor);
  518. nodeData.SetAttribute("LastRevisionTime", ReviseTime.ToString("yyyy-MM-dd HH:mm:ss"));
  519. nodeData.SetAttribute("Description", Description);
  520. nodeData.SetAttribute("ParameterChamberType", ChamberType);
  521. nodeData.SetAttribute("Version", Version);
  522. nodeData.SetAttribute("TableNumber", TableNumber.ToString());
  523. nodeData.SetAttribute("Permission", Permission);
  524. nodeData.SetAttribute("ParameterLevel", Level);
  525. XmlNode nodeModule = _doc.SelectSingleNode($"Aitex/TableParameterData/Module[@Name='{_module}']");
  526. if (nodeModule == null)
  527. {
  528. nodeModule = _doc.CreateElement("Module");
  529. nodeData.AppendChild(nodeModule);
  530. }
  531. nodeModule.RemoveAll();
  532. (nodeModule as XmlElement).SetAttribute("Name", _module);
  533. int i = 0;
  534. foreach (ParameterTable parameters in Steps)
  535. {
  536. XmlElement nodeWarning = _doc.CreateElement("Warning");
  537. XmlElement nodeAlarm = _doc.CreateElement("Alarm");
  538. Dictionary<string, XmlElement> nodePop = new Dictionary<string, XmlElement>();
  539. foreach (string key in PopEnable.Keys)
  540. {
  541. nodePop.Add(key, _doc.CreateElement(key));
  542. }
  543. XmlElement nodeStep = _doc.CreateElement("Step");
  544. if (ToleranceEnable)
  545. {
  546. nodeStep.AppendChild(nodeWarning);
  547. nodeStep.AppendChild(nodeAlarm);
  548. }
  549. nodeStep.SetAttribute("StepNo", parameters.StepNo.ToString());
  550. nodeStep.SetAttribute("Name", parameters.Name);
  551. // nodeStep.SetAttribute("UseTemp", parameters.UseTemp);
  552. nodeModule.AppendChild(nodeStep);
  553. i++;
  554. }
  555. XmlElement nodeConfig = _doc.CreateElement("Config");
  556. foreach (Param parameter in ConfigItems)
  557. {
  558. if (parameter.Visible == System.Windows.Visibility.Visible)
  559. {
  560. if (parameter is IntParam)
  561. nodeConfig.SetAttribute(parameter.Name, ((IntParam)parameter).Value.ToString());
  562. else if (parameter is DoubleParam)
  563. {
  564. string strValue = ((DoubleParam)parameter).Value;
  565. bool succed = double.TryParse(strValue, out double dValue);
  566. if (!succed)
  567. {
  568. MessageBox.Show($"The set value of {parameter.DisplayName} is {strValue}, not a valid value");
  569. return null;
  570. }
  571. var config = ConfigItems.Where(m => m.Name == parameter.Name).FirstOrDefault();
  572. if (config is DoubleParam param1)
  573. {
  574. if (param1.Minimun == 0 && param1.Maximun == 0)
  575. {
  576. //没有设定范围
  577. }
  578. else if (dValue > param1.Maximun || dValue < param1.Minimun)
  579. {
  580. MessageBox.Show($"The set value of {parameter.DisplayName} is {dValue}, out of the range {param1.Minimun}~{param1.Maximun}");
  581. return null;
  582. }
  583. }
  584. nodeConfig.SetAttribute(parameter.Name, ((DoubleParam)parameter).Value.ToString());
  585. }
  586. else if (parameter is StringParam)
  587. nodeConfig.SetAttribute(parameter.Name, ((StringParam)parameter).Value.ToString());
  588. else if (parameter is ComboxParam)
  589. nodeConfig.SetAttribute(parameter.Name, ((ComboxParam)parameter).Value.ToString());
  590. else if (parameter is LoopComboxParam)
  591. nodeConfig.SetAttribute(parameter.Name, ((LoopComboxParam)parameter).Value.ToString());
  592. else if (parameter is PositionParam)
  593. nodeConfig.SetAttribute(parameter.Name, ((PositionParam)parameter).Value.ToString());
  594. else if (parameter is BoolParam)
  595. nodeConfig.SetAttribute(parameter.Name, ((BoolParam)parameter).Value.ToString());
  596. else if (parameter is StepParam)
  597. nodeConfig.SetAttribute(parameter.Name, ((StepParam)parameter).Value.ToString());
  598. else if (parameter is MultipleSelectParam)
  599. {
  600. List<string> selected = new List<string>();
  601. ((MultipleSelectParam)parameter).Options.Apply(
  602. opt =>
  603. {
  604. if (opt.IsChecked)
  605. selected.Add(opt.ControlName);
  606. }
  607. );
  608. nodeConfig.SetAttribute(parameter.Name, string.Join(",", selected));
  609. }
  610. }
  611. }
  612. nodeModule.AppendChild(nodeConfig);
  613. return _doc.OuterXml;
  614. }
  615. private void SetAttribute(ObservableCollection<Param> Parameters, XmlElement PopSettingStep)
  616. {
  617. if (Parameters != null)
  618. foreach (Param parameter1 in Parameters)
  619. {
  620. if (parameter1.Visible != System.Windows.Visibility.Visible)
  621. continue;
  622. if (parameter1 is IntParam)
  623. PopSettingStep.SetAttribute(parameter1.Name, ((IntParam)parameter1).Value.ToString());
  624. else if (parameter1 is DoubleParam)
  625. PopSettingStep.SetAttribute(parameter1.Name, ((DoubleParam)parameter1).Value.ToString());
  626. else if (parameter1 is StringParam)
  627. PopSettingStep.SetAttribute(parameter1.Name, ((StringParam)parameter1).Value.ToString());
  628. else if (parameter1 is ComboxParam)
  629. PopSettingStep.SetAttribute(parameter1.Name, ((ComboxParam)parameter1).Value.ToString());
  630. else if (parameter1 is LoopComboxParam)
  631. PopSettingStep.SetAttribute(parameter1.Name, ((LoopComboxParam)parameter1).Value.ToString());
  632. else if (parameter1 is PositionParam)
  633. PopSettingStep.SetAttribute(parameter1.Name, ((PositionParam)parameter1).Value.ToString());
  634. else if (parameter1 is BoolParam)
  635. PopSettingStep.SetAttribute(parameter1.Name, ((BoolParam)parameter1).Value.ToString());
  636. else if (parameter1 is StepParam)
  637. PopSettingStep.SetAttribute(parameter1.Name, ((StepParam)parameter1).Value.ToString());
  638. else if (parameter1 is MultipleSelectParam)
  639. {
  640. List<string> selected1 = new List<string>();
  641. ((MultipleSelectParam)parameter1).Options.Apply(
  642. opt =>
  643. {
  644. if (opt.IsChecked)
  645. selected1.Add(opt.ControlName);
  646. }
  647. );
  648. PopSettingStep.SetAttribute(parameter1.Name, string.Join(",", selected1));
  649. }
  650. }
  651. }
  652. public string ToXmlString()
  653. {
  654. StringBuilder builder = new StringBuilder();
  655. builder.Append("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
  656. 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));
  657. foreach (ParameterTable parameters in Steps)
  658. {
  659. builder.Append("<Step ");
  660. builder.Append("Name=\"" + parameters.Name + "\" ");
  661. builder.Append("/>");
  662. }
  663. //builder.Append("<Config ");
  664. //foreach (Param parameter in ConfigItems)
  665. //{
  666. // if (parameter.Visible == System.Windows.Visibility.Visible)
  667. // {
  668. // if (parameter is IntParam)
  669. // builder.Append(parameter.Name + "=\"" + ((IntParam)parameter).Value + "\" ");
  670. // else if (parameter is DoubleParam)
  671. // builder.Append(parameter.Name + "=\"" + ((DoubleParam)parameter).Value + "\" ");
  672. // else if (parameter is StringParam)
  673. // builder.Append(parameter.Name + "=\"" + ((StringParam)parameter).Value + "\" ");
  674. // else if (parameter is ComboxParam)
  675. // builder.Append(parameter.Name + "=\"" + ((ComboxParam)parameter).Value + "\" ");
  676. // else if (parameter is LoopComboxParam)
  677. // builder.Append(parameter.Name + "=\"" + ((LoopComboxParam)parameter).Value + "\" ");
  678. // else if (parameter is PositionParam)
  679. // builder.Append(parameter.Name + "=\"" + ((PositionParam)parameter).Value + "\" ");
  680. // else if (parameter is BoolParam)
  681. // builder.Append(parameter.Name + "=\"" + ((BoolParam)parameter).Value + "\" ");
  682. // else if (parameter is StepParam)
  683. // builder.Append(parameter.Name + "=\"" + ((StepParam)parameter).Value + "\" ");
  684. // else if (parameter is MultipleSelectParam)
  685. // {
  686. // List<string> selected = new List<string>();
  687. // ((MultipleSelectParam)parameter).Options.Apply(
  688. // opt =>
  689. // {
  690. // if (opt.IsChecked)
  691. // selected.Add(opt.ControlName);
  692. // }
  693. // );
  694. // builder.Append(parameter.Name + "=\"" + string.Join(",", selected) + "\" ");
  695. // }
  696. // }
  697. //}
  698. builder.Append("/>");
  699. builder.Append("</TableRecipeData></Aitex>");
  700. return builder.ToString();
  701. }
  702. }
  703. public class ParameterTable : PropertyChangedBase
  704. {
  705. public string Value { get; set; }
  706. private int _stepNo;
  707. public int StepNo
  708. {
  709. get => _stepNo; set
  710. {
  711. _stepNo = value;
  712. NotifyOfPropertyChange("StepNo");
  713. }
  714. }
  715. private string _name;
  716. public string Name
  717. {
  718. get => _name; set
  719. {
  720. _name = value;
  721. NotifyOfPropertyChange("Name");
  722. }
  723. }
  724. private string _useTemp;
  725. public string UseTemp
  726. {
  727. get => _useTemp;
  728. set
  729. {
  730. _useTemp = value;
  731. NotifyOfPropertyChange("UseTemp");
  732. }
  733. }
  734. private bool _isChecked;
  735. public bool IsChecked {
  736. get=> _isChecked;
  737. set
  738. {
  739. _isChecked = value;
  740. NotifyOfPropertyChange("IsChecked");
  741. } }
  742. public Visibility IsVisibility { get; set; } = Visibility.Visible;
  743. public ParameterTable() { }
  744. public ParameterTable Clone()//深拷贝
  745. {
  746. return this.MemberwiseClone() as ParameterTable;
  747. }
  748. public ParameterTable(ParameterDataBase recipeData)
  749. {
  750. if (recipeData.Steps.Count <= 0) return;
  751. SetCurrentRecipeStep(recipeData, recipeData.Steps[0]);
  752. }
  753. public ParameterTable(ParameterDataBase recipeData, int selectedStepNo)
  754. {
  755. ParameterTable step = recipeData.Steps.Where(x => x.StepNo == selectedStepNo).FirstOrDefault();
  756. SetCurrentRecipeStep(recipeData, step);
  757. }
  758. public virtual void SetCurrentRecipeStep(ParameterDataBase recipeData, ParameterTable step)
  759. {
  760. }
  761. }
  762. }