using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; using Aitex.Core.RT.Log; using Aitex.Core.RT.SCCore; using MECF.Framework.Common.DataCenter; using MECF.Framework.UI.Client.ClientBase.Tree; using OpenSEMI.ClientBase.ServiceProvider; namespace MECF.Framework.UI.Client.CenterViews.DataLogs.ProcessHistory { public class ProcessHistoryProvider : IProvider { private static ProcessHistoryProvider _Instance = null; public static ProcessHistoryProvider Instance { get { if (_Instance == null) _Instance = new ProcessHistoryProvider(); return _Instance; } } ObservableCollection _rootNode = new ObservableCollection(); Dictionary _indexer = new Dictionary(); public void Clear() { _indexer.Clear(); _rootNode.Clear(); } /// /// 使用字符串队列创建树结构的分支。 /// /// /// private static TreeNode CreateTreeBranch(Queue branchString, TreeNode node) { var rootNode = node; while (true) { if (branchString.Count <= 0) return rootNode; var name = branchString.Dequeue(); if (node == null) { // 根节点 node = new TreeNode(name); rootNode = node; } else { if (node.Name == name) continue; // 向ChildNode插入 var subNode = node.ChildNodes.FirstOrDefault(x => x.Name == name); if (subNode == null) { subNode = new TreeNode(name); node.ChildNodes.Add(subNode); } node = subNode; } } } public void Create() { } public ObservableCollection SearchRecipe() { ObservableCollection result = new ObservableCollection(); for (int i = 0; i < 5; i++) { RecipeItem r = new RecipeItem() { Chamber = "c " + i.ToString(), Recipe = "recipe " + i.ToString(), Selected = false, Status = "s " + i.ToString(), EndTime = "", StartTime = "" }; result.Add(r); } return result; } public ObservableCollection GetUserDefineParameters() { var typedContents = ((string)QueryDataClient.Instance.Service.GetTypedConfigContent("UserDefine", "")); ObservableCollection dataList = new ObservableCollection(); if (typedContents != null) { var contentList = typedContents.Split(',').ToList(); contentList.ForEach(x => { if (!string.IsNullOrEmpty(x)) dataList.Add($"{x}"); }); } return dataList; } public List GetTreeNodeParameters() { var root = new List(); try { List dataList = (List)QueryDataClient.Instance.Service.GetConfig("System.NumericDataList"); List setUplist = null; if (QueryDataClient.Instance.Service.GetConfigItemList().Where(x => x.Path == "System.SetUp") != null) setUplist = QueryDataClient.Instance.Service.GetConfigItemList() .Where(x => x.Path == "System.SetUp").ToList(); var typedContents = ((string)QueryDataClient.Instance.Service.GetTypedConfigContent("UserDefine", "")); if (string.IsNullOrEmpty(typedContents)) { dataList.Add($"UserDefine"); } else { var contentList = typedContents.Split(',').ToList(); contentList.ForEach(x => { if (!string.IsNullOrEmpty(x)) dataList.Add($"UserDefine.{x}"); }); } dataList.Sort(); foreach (var dataName in dataList) { var nodeName = new Queue(dataName.Split('.')); if (nodeName.Count <= 0) continue; // 开始创建Tree分支 var rootNode = root.FirstOrDefault(x => x.Name == nodeName.Peek()); var node = CreateTreeBranch(nodeName, rootNode); if (rootNode == null) root.Add(node); } } catch (Exception ex) { LOG.Write(ex); } return root; } public ObservableCollection GetParameters() { try { List dataList = (List)QueryDataClient.Instance.Service.GetConfig("System.NumericDataList"); dataList.Sort(); ObservableCollection rootNode = new ObservableCollection(); Dictionary indexer = new Dictionary(); foreach (string dataName in dataList) { if (!dataName.StartsWith("PM1.") && !dataName.StartsWith("PM2.") && !dataName.StartsWith("PM3.") && !dataName.StartsWith("PM4.")) { continue; } string[] nodeName = dataName.Split('.'); ParameterNode parentNode = null; string pathName = ""; for (int i = 0; i < nodeName.Length; i++) { pathName = (i == 0) ? nodeName[i] : (pathName + "." + nodeName[i]); if (!indexer.ContainsKey(pathName)) { indexer[pathName] = new ParameterNode() { Name = pathName, ChildNodes = new ObservableCollection() }; if (parentNode == null) rootNode.Add(indexer[pathName]); else { parentNode.ChildNodes.Add(indexer[pathName]); } } parentNode = indexer[pathName]; } } return rootNode; } catch (Exception ex) { LOG.Write(ex); } #region Test code ObservableCollection result = new ObservableCollection(); ParameterNode node1 = new ParameterNode() { Name = "Para Node 1", Selected = false, ChildNodes = new ObservableCollection() }; ParameterNode node2 = new ParameterNode() { Name = "Para Node 2", Selected = false, ChildNodes = new ObservableCollection() }; ParameterNode node3 = new ParameterNode() { Name = "Para Node 3", Selected = false, ChildNodes = new ObservableCollection() }; for (int i = 0; i < 5; i++) { ParameterNode node = new ParameterNode() { Name = node1.Name + "_" + i.ToString(), Selected = false, ChildNodes = new ObservableCollection() }; node1.ChildNodes.Add(node); } for (int i = 0; i < 3; i++) { ParameterNode node = new ParameterNode() { Name = node2.Name + "_" + i.ToString(), Selected = false, ChildNodes = new ObservableCollection() }; node2.ChildNodes.Add(node); } for (int i = 0; i < 4; i++) { ParameterNode node = new ParameterNode() { Name = node3.Name + "_" + i.ToString(), Selected = false, ChildNodes = new ObservableCollection() }; node3.ChildNodes.Add(node); } result.Add(node1); result.Add(node2); result.Add(node3); return result; #endregion } } }