| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341 | using Aitex.Core.Common;using Aitex.Core.RT.Log;using Aitex.Core.RT.SCCore;using Aitex.Core.Util;using MECF.Framework.Common.DataCenter;using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Windows.Media;using System.Xml;namespace FurnaceUI.DataModule{    public class GlobalDataManager : Singleton<GlobalDataManager>    {        private int _lpCount = 0;        public int LPCount        {            get            {                if (_lpCount == 0)                {                    string key = "LoadPort.LPCount";                    if (QueryDataClient.Instance.Service.GetConfig(key) == null)                    {                        LOG.Error($"GlobalDataManager.LPCount QueryDataClient.Instance.Service.GetConfig({key}=null)");                        _lpCount = 4;                    }                    else                    {                        int t = (int)QueryDataClient.Instance.Service.GetConfig(key);                        if (t > 0 && t <= 10) _lpCount = t;                        else                        {                            LOG.Error($"GlobalDataManager.LPCount QueryDataClient.Instance.Service.GetConfig({key})={t} out of [1,10]");                            _lpCount = 4;                        }                    }                }                return _lpCount;            }        }        private int _stockerCount = 0;        public int StockerCount        {            get            {                if (_stockerCount == 0)                {                    string key = "System.Stocker.StockerCount";                    if (QueryDataClient.Instance.Service.GetConfig(key) == null)                    {                        LOG.Error($"GlobalDataManager.LPCount QueryDataClient.Instance.Service.GetConfig({key}=null)");                        _stockerCount = 18;                    }                    else                    {                        int t = (int)QueryDataClient.Instance.Service.GetConfig(key);                        if (t > 0 && t <= 22) _stockerCount = t;                        else                        {                            LOG.Error($"GlobalDataManager.LPCount QueryDataClient.Instance.Service.GetConfig({key})={t} out of [1,22]");                            _stockerCount = 18;                        }                    }                }                return _stockerCount;            }        }        private int _stockerCountByLayer = 0;        public int StockerCountByLayer        {            get            {                if (_stockerCountByLayer == 0)                {                    string key = "System.Stocker.StockerCountByLayer";                    if (QueryDataClient.Instance.Service.GetConfig(key) == null)                    {                        LOG.Error($"GlobalDataManager.LPCount QueryDataClient.Instance.Service.GetConfig({key}=null)");                        _stockerCountByLayer = 4;                    }                    else                    {                        int t = (int)QueryDataClient.Instance.Service.GetConfig(key);                        if (t > 0 && t < 6) _stockerCountByLayer = t;                        else                        {                            LOG.Error($"GlobalDataManager.LPCount QueryDataClient.Instance.Service.GetConfig({key})={t}");                            _stockerCountByLayer = 4;                        }                    }                }                return _stockerCountByLayer;            }        }        private int _stockerLayers = 0;        public int StockerLayers        {            get            {                if (_stockerLayers == 0)                {                    string key = "System.Stocker.StockerLayers";                    if (QueryDataClient.Instance.Service.GetConfig(key) == null)                    {                        LOG.Error($"GlobalDataManager.LPCount QueryDataClient.Instance.Service.GetConfig({key}=null)");                        _stockerLayers = 4;                    }                    else                    {                        int t = (int)QueryDataClient.Instance.Service.GetConfig(key);                        if (t > 0 && t < 5) _stockerLayers = t;                        else                        {                            LOG.Error($"GlobalDataManager.LPCount QueryDataClient.Instance.Service.GetConfig({key})={t}");                            _stockerLayers = 4;                        }                    }                }                return _stockerLayers;            }        }        private int _stockerFoupCount;        /// <summary>        ///正常情况应该是StockerCountByLayer*StockerLayers        ///需考虑排除特殊情况        /// </summary>        public int StockerFoupCount        {            get            {                if (_stockerFoupCount == 0)                {                    string key = "System.Stocker.FoupStockerCount";                    if (QueryDataClient.Instance.Service.GetConfig(key) == null)                    {                        LOG.Error($"GlobalDataManager.LPCount QueryDataClient.Instance.Service.GetConfig({key}=null)");                        _stockerFoupCount = 16;                    }                    else                    {                        int t = (int)QueryDataClient.Instance.Service.GetConfig(key);                        if (t > 0 && t < 22)                        {                            _stockerFoupCount = t;                        }                        else                        {                            LOG.Error($"GlobalDataManager.LPCount QueryDataClient.Instance.Service.GetConfig({key})={t}");                            _stockerFoupCount = 16;                        }                    }                }                return _stockerFoupCount;            }        }        private Dictionary<string, WaferTypeInfo> _waferTypes;        public Dictionary<string, WaferTypeInfo> WaferTypes        {            get            {                if (_waferTypes == null || _waferTypes.Count == 0)                {                    List<WaferTypeInfo> types = QueryDataClient.Instance.Service.GetConfigWaferTypes();                    _waferTypes = new Dictionary<string, WaferTypeInfo>();                    if (types == null || types.Count == 0)                    {                        LOG.Error("GlobalDataManager.WaferTypes: QueryDataClient.Instance.Service.GetWaferTypes not find avalible");                    }                    else                    {                        foreach (var type in types)                        {                            _waferTypes[type.Name] = type;                        }                    }                    //_waferTypes = new Dictionary<string, WaferTypeInfo>();                    //var config = QueryDataClient.Instance.Service.GetConfigFileContent();                    //string key = "System.WaferType";                    //var t = GetWaferInfo(key, config);                    //if (t == null || t.Count == 0)                    //{                    //    LOG.Error($"GlobalDataManager.WaferTypes: QueryDataClient.Instance.Service.GetConfigFileContent not find avalible [{key}]");                                             //}                    //else                    //{                    //    foreach (var type in t)                    //    {                    //        _waferTypes[type.Name] = type;                    //    }                    //}                }                return _waferTypes;            }        }        private List<WaferTypeInfo> GetWaferInfo(string key, string content)        {            XmlDocument xml = new XmlDocument();            xml.LoadXml(content);            XmlElement root = xml.DocumentElement;            XmlNodeList xmlNodeList = xml.SelectNodes("root/configs");            string[] keys = key.Split('.');            foreach (XmlElement item in xmlNodeList)            {                if (item.GetAttribute("name") == keys[0])                {                    foreach (XmlElement element in item.ChildNodes)                    {                        if (element.GetAttribute("name") == keys[1])                        {                            foreach (XmlElement ele in element.ChildNodes)                            {                                BuildPathConfigs(ele.GetAttribute("name"), ele);                            }                            break;                        }                    }                    break;                }            }            List<WaferTypeInfo> wafers = new List<WaferTypeInfo>();            BrushConverter converter = new BrushConverter();            foreach (var item in dic)            {                if (string.IsNullOrWhiteSpace(item.Key) || item.Key == "None" || item.Key == "V" || wafers.Find(r => r.Name == item.Key) != null) continue;                WaferTypeInfo typeInfo = new WaferTypeInfo() { Name = item.Key };                foreach (var r in item.Value)                {                    switch (r.Name)                    {                        case "FullName":                            typeInfo.FullName = string.IsNullOrWhiteSpace(r.Default) ? string.Empty : r.Default.Trim();                            break;                        case "AccFilmThick":                            typeInfo.AccFilmThick = bool.Parse(r.Default);                            break;                        case "AlternativeWaferType":                            typeInfo.AlternativeWaferType = string.IsNullOrWhiteSpace(r.Default) ? string.Empty : r.Default.Trim();                            break;                        case "IsReturnWafer":                            typeInfo.IsReturnWafer = bool.Parse(r.Default);                            break;                        case "ReturnWaferType":                            typeInfo.ReturnWaferType = string.IsNullOrWhiteSpace(r.Default) ? string.Empty : r.Default.Trim();                            break;                        case "READY":                            {                                if (string.IsNullOrWhiteSpace(r.Default) || converter.IsValid(r.Default)) typeInfo.ShowColor = r.Default ?? "".Trim();                                else typeInfo.ShowColor = "LightGray";//保证颜色有效                            }                            break;                        case "CanProcessContinuously":                            typeInfo.CanProcessContinuously = bool.Parse(r.Default);                            break;                        case "IsDummy":                            typeInfo.IsDummy = bool.Parse(r.Default);                            break;                    }                }                wafers.Add(typeInfo);            }            return wafers;        }        private Dictionary<string, List<SCConfigItem>> dic = new Dictionary<string, List<SCConfigItem>>();        private void BuildPathConfigs(string parentPath, XmlElement configElement)        {            //先处理config节点            XmlNodeList nodeConfigs = configElement.SelectNodes("config");            List<SCConfigItem> items = new List<SCConfigItem>();            foreach (XmlElement nodeConfig in nodeConfigs)            {                SCConfigItem item = new SCConfigItem()                {                    Default = nodeConfig.GetAttribute("default"),                    Name = nodeConfig.GetAttribute("name"),                    Description = nodeConfig.GetAttribute("description"),                    Max = nodeConfig.GetAttribute("max"),                    Min = nodeConfig.GetAttribute("min"),                    Parameter = nodeConfig.GetAttribute("paramter"),                    Path = parentPath,                    Tag = nodeConfig.GetAttribute("tag"),                    Type = nodeConfig.GetAttribute("type"),                    Unit = nodeConfig.GetAttribute("unit"),                };                items.Add(item);            }            if (!dic.ContainsKey(parentPath)) dic[parentPath] = items;            //再处理configs            XmlNodeList nodeConfigsList = configElement.SelectNodes("configs");            foreach (XmlElement nodeConfig in nodeConfigsList)            {                BuildPathConfigs(nodeConfig.GetAttribute("name"), nodeConfig);            }        }        /// <summary>        /// 是否需要pick、place过程主界面动画        /// 应用:手动拖动时,不需要此动画        /// </summary>        public bool IsNeedAnimationDisplay { get; set; } = true;        #region 未找到合理的界面更改配置后如何更新此配置的方式,暂时不用        private Dictionary<string, string> _stockersType;        /// <summary>        /// 存放每个Stocker的配置的WaferType        /// </summary>        public Dictionary<string, string> StockersConfigType        {            get            {                if (_stockersType == null)                {                    _stockersType = new Dictionary<string, string>();                    for (Int32 i = 1; i <= StockerCount; i++)                    {                        string key = $"System.Stocker.Stocker{i}WaferType";                        if (QueryDataClient.Instance.Service.GetConfig(key) == null)                        {                            LOG.Error($"GlobalDataManager.StockersConfigType QueryDataClient.Instance.Service.GetConfig({key}=null)");                            _stockersType[$"Stocker{i}"] = "";                        }                        else                        {                            _stockersType[$"Stocker{i}"] = ((string)QueryDataClient.Instance.Service.GetConfig(key)).Trim();                        }                    }                }                return _stockersType;            }            set            {                _stockersType = value;            }        }        #endregion    }}
 |