using Aitex.Core.Util; using DocumentFormat.OpenXml.Spreadsheet; 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; } DateTime now = DateTime.Now; if (isAdd) { metalUsage.AnodeABathUsage = 0; metalUsage.AnodeBBathUsage = 0; metalUsage.BathResetTime = now; MetalUsageRecorder.AddMetalUsage(metalUsage); } else { int days = (int)Math.Floor(now.Subtract(metalUsage.BathResetTime).TotalDays); if (days >= metalUsage.AnodeABathUsage) { metalUsage.AnodeABathUsage = days; } if (days >= metalUsage.AnodeBBathUsage) { metalUsage.AnodeBBathUsage = days; } 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; case "Anode A bath Usage(Days)": _metalUsageDictionary[metalName].AnodeABathUsage = int.Parse(NewValue); break; case "Anode B bath Usage(Days)": _metalUsageDictionary[metalName].AnodeBBathUsage = int.Parse(NewValue); break; } MetalUsageRecorder.UpdateMetalUsageData(metalName, _metalUsageDictionary[metalName]); } } /// /// 获取Metal用量 /// /// /// public MetalUsage GetMetalUsage(string metalName) { return _metalUsageDictionary.ContainsKey(metalName) ? _metalUsageDictionary[metalName] : null; } } }