| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152 | 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<MetalUsageManager>    {        #region 内部变量        /// <summary>        /// Metal电量字典        /// </summary>        private Dictionary<string, MetalUsage> _metalUsageDictionary = new Dictionary<string, MetalUsage>();        #endregion        /// <summary>        /// 初始化        /// </summary>        public void Initialize()        {            List<MetalUsage> metalUsages = MetalUsageRecorder.GetAllMetalUsages();            foreach (var metalUsage in metalUsages)            {                _metalUsageDictionary[metalUsage.MetalName] = metalUsage;            }        }        /// <summary>        /// 更新Metal的用量        /// </summary>        /// <param name="metalName"></param>        /// <param name="usage"></param>        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);        }        /// <summary>        /// 在PMCounter页面手动修改值        /// </summary>        /// <param name="metalName"></param>        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]);            }        }        /// <summary>        /// 获取Metal用量        /// </summary>        /// <param name="metalName"></param>        /// <returns></returns>        public MetalUsage GetMetalUsage(string metalName)        {            return _metalUsageDictionary.ContainsKey(metalName) ? _metalUsageDictionary[metalName] : null;        }    }}
 |