123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334 |
- using Aitex.Core.RT.DataCenter;
- using Aitex.Core.Util;
- using DocumentFormat.OpenXml.Spreadsheet;
- using MECF.Framework.Common.Equipment;
- using MECF.Framework.Common.WaferHolder;
- using System;
- using System.Collections.Concurrent;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- namespace MECF.Framework.Common.ToolLayout
- {
- public class CellItemManager : Singleton<CellItemManager>
- {
- #region 内部变量
-
-
-
- private LayoutCellItem[] _layoutCellItems = new LayoutCellItem[50];
-
-
-
- private Dictionary<string,int> _layoutCellModuleIdDic= new Dictionary<string,int>();
-
-
-
- private List<LayoutCellItem> _installedLayoutCellItems = new List<LayoutCellItem>();
-
-
-
- private Dictionary<string, string> _cellIdModuleNameDic = new Dictionary<string, string>();
-
-
-
- private ConcurrentDictionary<string, bool> _cellWaferHolderDictionary = new ConcurrentDictionary<string, bool>();
-
-
-
- private Dictionary<string, List<LayoutCellItem>> _metalRinseDictionary = new Dictionary<string, List<LayoutCellItem>>();
-
-
-
- private List<string> _sharedRinseList = new List<string>();
-
-
-
- private Dictionary<string, List<string>> _shardRinseMetals = new Dictionary<string, List<string>>();
-
-
-
- private Dictionary<string, List<string>> _shardRinseReservoirs = new Dictionary<string, List<string>>();
- #endregion
-
-
-
-
- public void InitialLayoutCellItem(LayoutCellItem item)
- {
- if(item.CellID==0||!item.Installed)
- {
- return;
- }
- if(item.CellID<_layoutCellItems.Length)
- {
- _layoutCellItems[item.CellID] = item;
- if (!string.IsNullOrEmpty(item.ModuleName))
- {
- _layoutCellModuleIdDic[item.ModuleName] = item.CellID;
- }
- _cellIdModuleNameDic[$"Cell{item.CellID}"] = item.ModuleName;
- }
- }
-
-
-
-
-
- private List<LayoutCellItem> GetMetalNearbyRinseItems(string metalName)
- {
- List<LayoutCellItem> layoutCellItems = new List<LayoutCellItem>();
- if(_layoutCellModuleIdDic.ContainsKey(metalName))
- {
- int cellId = _layoutCellModuleIdDic[metalName];
- bool checkBackRinse = false;
- for (int i = cellId - 1; i >= 0; i--)
- {
- LayoutCellItem item = _layoutCellItems[i];
- if (item == null)
- {
- continue;
- }
- if (item.ModuleType == ModuleType.Rinse.ToString())
- {
- if (item.Installed)
- {
- layoutCellItems.Add(item);
- checkBackRinse = true;
- break;
- }
- }
- else if (item.ModuleType == ModuleType.Metal.ToString())
- {
- if (!checkBackRinse)
- {
- continue;
- }
- else
- {
- break;
- }
- }
- else
- {
- break;
- }
- }
- bool checkForwardRinse = false;
- for (int i = cellId; i < _layoutCellItems.Length; i++)
- {
- LayoutCellItem item = _layoutCellItems[i];
- if(item==null)
- {
- continue;
- }
- if (item.ModuleType == ModuleType.Rinse.ToString())
- {
- if (item.Installed)
- {
- layoutCellItems.Add(item);
- checkForwardRinse = true;
- break;
- }
- }
- else if (item.ModuleType == ModuleType.Metal.ToString())
- {
- if (!checkForwardRinse)
- {
- continue;
- }
- else
- {
- break;
- }
- }
- else
- {
- break;
- }
- }
-
- }
- return layoutCellItems;
- }
-
-
-
-
- public void InitializeLayoutCellItems()
- {
- foreach (LayoutCellItem item in _layoutCellItems)
- {
- if (item != null&&item.Installed)
- {
- if (WaferHolderManager.Instance.HasWaferHolder(item.ModuleName))
- {
- _cellWaferHolderDictionary[item.ModuleName] = true;
- }
- else
- {
- _cellWaferHolderDictionary[item.ModuleName] = false;
- }
- _installedLayoutCellItems.Add(item);
- }
- }
- AnalyseMetalRinse();
- DATA.Subscribe("System.LayoutCellItems", () => _installedLayoutCellItems.Select(obj => obj.ModuleName).ToList(), SubscriptionAttribute.FLAG.IgnoreSaveDB);
- _cellWaferHolderDictionary[ModuleName.Transporter2.ToString()] = WaferHolderManager.Instance.HasWaferHolder(ModuleName.Transporter2.ToString());
- _cellWaferHolderDictionary[ModuleName.Transporter1.ToString()] = WaferHolderManager.Instance.HasWaferHolder(ModuleName.Transporter1.ToString());
- _cellWaferHolderDictionary["Loader"] = WaferHolderManager.Instance.HasWaferHolder("Loader");
- DATA.Subscribe("System.CellWaferHolderDictionary", () => _cellWaferHolderDictionary,SubscriptionAttribute.FLAG.IgnoreSaveDB);
- }
-
-
-
- private void AnalyseMetalRinse()
- {
- List<string> reservoir = ReservoirItemManager.Instance.InstalledModules;
- List<string> rinseList = new List<string>();
- foreach (var item in reservoir)
- {
- List<string> metals=ReservoirItemManager.Instance.GetMetalsByReservoir(item);
- List<string> reservoirRinse = new List<string>();
- foreach(string metalItem in metals)
- {
- List<LayoutCellItem> cellItems=GetMetalNearbyRinseItems(metalItem);
- _metalRinseDictionary[metalItem] = cellItems;
- foreach(LayoutCellItem cellItem in cellItems)
- {
- if(!reservoirRinse.Contains(cellItem.ModuleName))
- {
- reservoirRinse.Add(cellItem.ModuleName);
- }
- }
- }
-
- foreach (string rinseItem in reservoirRinse)
- {
- if(!rinseList.Contains(rinseItem))
- {
- rinseList.Add(rinseItem);
- }
- else
- {
- _sharedRinseList.Add(rinseItem);
- }
- }
- }
-
- foreach (var item in _sharedRinseList)
- {
- List<string> lst = new List<string>();
- _shardRinseMetals[item]=lst;
- List<string> lstReservoirs = new List<string>();
- _shardRinseReservoirs[item]=lstReservoirs;
- foreach (string metalItem in _metalRinseDictionary.Keys)
- {
- List<LayoutCellItem> rinseItems = _metalRinseDictionary[metalItem];
- if(rinseItems.Find(O=>O.ModuleName== item) != null)
- {
- lst.Add(metalItem);
- string reservoirName = ReservoirItemManager.Instance.GetReservoirByMetal(metalItem);
- if (!lstReservoirs.Contains(reservoirName))
- {
- lstReservoirs.Add(reservoirName);
- }
- }
- }
- }
- }
-
-
-
-
-
- public string GetModuleNameByCellId(string cellId)
- {
- return _cellIdModuleNameDic.ContainsKey(cellId) ? _cellIdModuleNameDic[cellId] : "";
- }
-
-
-
-
-
- public int GetCellIdByModuleName(string moduleName)
- {
- return _layoutCellModuleIdDic.ContainsKey(moduleName) ? _layoutCellModuleIdDic[moduleName] : 0;
- }
-
-
-
-
-
- public void UpdateCellWaferHolder(string cellName, bool hasWaferHolder)
- {
- if (_cellWaferHolderDictionary.ContainsKey(cellName))
- {
- _cellWaferHolderDictionary[cellName] = hasWaferHolder;
- }
- }
-
-
-
-
-
- public List<LayoutCellItem> GetRinseItemsByMetal(string metalName)
- {
- return _metalRinseDictionary.ContainsKey(metalName) ? _metalRinseDictionary[metalName] : null;
- }
-
-
-
-
-
- public bool CheckRinseIsShared(string rinseName)
- {
- return _sharedRinseList.Contains(rinseName);
- }
-
-
-
-
-
- public List<string> GetMetalsBySharedRinse(string sharedRinseName)
- {
- return _shardRinseMetals.ContainsKey(sharedRinseName)?_shardRinseMetals[sharedRinseName] : null;
- }
-
-
-
-
-
- public List<string> GetReservoirsBySharedRinse(string sharedRinseName)
- {
- return _shardRinseReservoirs.ContainsKey(sharedRinseName) ? _shardRinseReservoirs[sharedRinseName] : null;
- }
-
-
-
-
-
- public List<string> GetRinsesByReservoir(string reservoirName)
- {
- List<string> metals = ReservoirItemManager.Instance.GetMetalsByReservoir(reservoirName);
- List<string> rinses= new List<string>();
- foreach (string metal in metals)
- {
- List<LayoutCellItem> metalRinses = _metalRinseDictionary[metal];
- foreach (LayoutCellItem rinseItem in metalRinses)
- {
- if(!rinses.Contains(rinseItem.ModuleName))
- {
- rinses.Add(rinseItem.ModuleName);
- }
- }
- }
- return rinses;
- }
- }
- }
|