using Aitex.Core.Util; using MECF.Framework.Common.DBCore; using MECF.Framework.Common.ProcessCell; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace MECF.Framework.Common.ToolLayout { public class MetalUsageManager : Singleton { #region 内部变量 /// /// Metal电量字典 /// private Dictionary _metalUsageDictionary = new Dictionary(); #endregion /// /// 初始化 /// public void Initialize() { List metalUsages = MetalUsageRecorder.GetAllMetalUsages(); foreach(var metalUsage in metalUsages) { _metalUsageDictionary[metalUsage.MetalName] = metalUsage; } } /// /// 更新Metal的用量 /// /// /// public void UpdateMetalUsage(string metalName,string side,double anodeAUsage,double anodeBUsage) { MetalUsage metalUsage = null; bool isAdd = false; if (!_metalUsageDictionary.ContainsKey(metalName)) { metalUsage= new MetalUsage(); metalUsage.MetalName = metalName; _metalUsageDictionary[metalName] = metalUsage; isAdd = true; } else { metalUsage=_metalUsageDictionary[metalName]; } int waferCount = 0; if (string.IsNullOrEmpty(side)) { metalUsage.AnodeAUsage += anodeAUsage; metalUsage.AnodeBUsage += anodeBUsage; metalUsage.MembranceAUsage+= anodeAUsage; metalUsage.MembranceBUsage += anodeBUsage; metalUsage.AnodeAWafers += 1; metalUsage.AnodeBWafers += 1; metalUsage.TotalUsage += anodeAUsage+anodeBUsage; metalUsage.TotalWafers += 2; waferCount = 2; } else if (side == "SideA") { metalUsage.AnodeAUsage += anodeAUsage; metalUsage.MembranceAUsage += anodeAUsage; metalUsage.TotalUsage += anodeAUsage; metalUsage.AnodeAWafers += 1; metalUsage.TotalWafers += 1; waferCount = 1; } else { metalUsage.AnodeBUsage += anodeBUsage; metalUsage.MembranceBUsage += anodeBUsage; metalUsage.TotalUsage += anodeBUsage; metalUsage.AnodeBWafers += 1; metalUsage.TotalWafers += 1; waferCount = 1; } if (isAdd) { MetalUsageRecorder.AddMetalUsage(metalUsage); } else { MetalUsageRecorder.UpdateMetalUsageData(metalName, metalUsage); } string reservoirName= ReservoirItemManager.Instance.GetReservoirByMetal(metalName); ReservoirUsageManager.Instance.UpdateReservoirUsage(reservoirName, anodeAUsage, anodeBUsage, waferCount); } /// /// 在PMCounter页面手动修改值 /// /// public void UpdateMetalUsageByManualOperation(string metalName,string CounterName, string NewValue) { if(_metalUsageDictionary.ContainsKey(metalName)) { switch (CounterName) { case "Total Usage(AHr)": _metalUsageDictionary[metalName].TotalUsage = double.Parse(NewValue); break; case "Anode A Usage(AHr)": _metalUsageDictionary[metalName].AnodeAUsage = double.Parse(NewValue); break; case "Anode B Usage(AHr)": _metalUsageDictionary[metalName].AnodeBUsage = double.Parse(NewValue); break; case "Membrane A Usage(AHr)": _metalUsageDictionary[metalName].MembranceAUsage = double.Parse(NewValue); break; case "Membrane B Usage(AHr)": _metalUsageDictionary[metalName].MembranceBUsage = double.Parse(NewValue); break; case "Metal Total Wafers": _metalUsageDictionary[metalName].TotalWafers = int.Parse(NewValue); break; case "Anode A Total Wafers": _metalUsageDictionary[metalName].AnodeAWafers = int.Parse(NewValue); break; case "Anode B Total Wafers": _metalUsageDictionary[metalName].AnodeBWafers = int.Parse(NewValue); break; } MetalUsageRecorder.UpdateMetalUsageData(metalName, _metalUsageDictionary[metalName]); } } /// /// 获取Metal用量 /// /// /// public MetalUsage GetMetalUsage(string metalName) { return _metalUsageDictionary.ContainsKey(metalName) ? _metalUsageDictionary[metalName] : null; } } }