| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313 | using Aitex.Core.Util;using MECF.Framework.Common.OperationCenter;using MECF.Framework.UI.Client.ClientBase;using MECF.Framework.Common.DataCenter;using System.Collections.Generic;using System.Collections.ObjectModel;using System.Linq;using FurnaceUI.Models;using FurnaceUI.Views.Recipes;using System.Windows;using System.Windows.Media;using MECF.Framework.Common.CommonData;namespace FurnaceUI.Views.Operations{    public class BoatWaferViewModel : UiViewModelBase    {        public string ModuleName { get; set; }        public ObservableCollection<ObservableCollection<BoatWaferItem>> ListBoatWafers { get; set; }        private ObservableCollection<BoatWaferItem> _boatWafers;        public ObservableCollection<BoatWaferItem> BoatWafers        {            get { return _boatWafers; }            set            {                _boatWafers = value;                NotifyOfPropertyChange("BoatWafers");            }        }        private SolidColorBrush _DefaultdBk = new SolidColorBrush(Colors.White);        private SolidColorBrush _PBk = new SolidColorBrush(Colors.LightGreen);        private SolidColorBrush _SDBk = new SolidColorBrush(Colors.SkyBlue);        private SolidColorBrush _EDBk = new SolidColorBrush(Colors.LightSeaGreen);        //private SolidColorBrush _MBk = new SolidColorBrush(Colors.LightSeaGreen);        private SolidColorBrush _MBk = new SolidColorBrush(Colors.Orange);        private int _boatSlotCount;        private int _cassetteSlotCount = 25;        private int _boatPWaferCount;        public int BoatPWaferCount        {            get => _boatPWaferCount;            set            {                _boatPWaferCount = value;                NotifyOfPropertyChange(nameof(BoatPWaferCount));            }        }        private int _boatMWaferCount;        public int BoatMWaferCount        {            get => _boatMWaferCount;            set            {                _boatMWaferCount = value;                NotifyOfPropertyChange(nameof(BoatMWaferCount));            }        }        private int _boatSDWaferCount;        public int BoatSDWaferCount        {            get => _boatSDWaferCount;            set            {                _boatSDWaferCount = value;                NotifyOfPropertyChange(nameof(BoatSDWaferCount));            }        }        private int _boatEDWaferCount;        public int BoatEDWaferCount        {            get => _boatEDWaferCount;            set            {                _boatEDWaferCount = value;                NotifyOfPropertyChange(nameof(BoatEDWaferCount));            }        }        private int _boatEmptyWaferCount;        public int BoatEmptyWaferCount        {            get => _boatEmptyWaferCount;            set            {                _boatEmptyWaferCount = value;                NotifyOfPropertyChange(nameof(BoatEmptyWaferCount));            }        }        private string _boatAllWaferCount;        public string BoatAllWaferCount        {            get => _boatAllWaferCount;            set            {                _boatAllWaferCount = value;                NotifyOfPropertyChange(nameof(BoatAllWaferCount));            }        }        [Subscription("Stocker1.LotID")]        public string Stocker1LotID { get; set; }        public BoatWaferViewModel()        {            ModuleName = "PM1";            _boatSlotCount = (int)QueryDataClient.Instance.Service.GetConfig("Boat.SlotCount");            //_cassetteSlotCount = (int)QueryDataClient.Instance.Service.GetConfig("System.CassetteSlotCount");            BoatWafers = new ObservableCollection<BoatWaferItem>();            for (int i = 0; i < _boatSlotCount; i++)            {                BoatWaferItem item = new BoatWaferItem() { Slot = i + 1, Description = "" };                BoatWafers.Add(item);            }            for (int i = 0; i < _boatSlotCount; i++)            {                string waferType = BoatWafers[i].Description;                switch (waferType)                {                    case "P":                        BoatWafers[i].BkColor = _PBk;                        break;                    case "M":                        BoatWafers[i].BkColor = _MBk;                        break;                    case "SD":                        BoatWafers[i].BkColor = _SDBk;                        break;                    case "ED":                        BoatWafers[i].BkColor = _EDBk;                        break;                    default:                        BoatWafers[i].BkColor = _DefaultdBk;                        break;                }            }            ListBoatWafers = SplitBoatWafersByLength(_cassetteSlotCount);        }        private ObservableCollection<ObservableCollection<BoatWaferItem>> SplitBoatWafersByLength(int iLength)        {            ObservableCollection<ObservableCollection<BoatWaferItem>> obsRet = new ObservableCollection<ObservableCollection<BoatWaferItem>>();            int iCount = BoatWafers.Count / iLength;            int iRemain = BoatWafers.Count % iLength;            for (int i = 0; i < iCount; i++)            {                obsRet.Add(new ObservableCollection<BoatWaferItem>(BoatWafers.ToList().GetRange(i * iLength, iLength)));            }            if (iRemain > 0) obsRet.Add(new ObservableCollection<BoatWaferItem>(BoatWafers.ToList().GetRange(iCount * iLength, iRemain)));            return obsRet;        }        protected override void InvokeAfterUpdateProperty(Dictionary<string, object> data)        {            base.InvokeAfterUpdateProperty(data);            RefreshBoatDataTask();            RefreshBoatWafers();        }        private void RefreshBoatDataTask()        {            var wafers = ModuleManager.ModuleInfos[ModuleName].WaferManager.Wafers;            if (wafers != null)            {                int iIndex = wafers.Count - 1;                for (int i = 0; i < wafers.Count; i++)                {                    if (wafers[i].WaferStatus != 0)                    {                        BoatWafers[iIndex].Description = $"{wafers[i].WaferType}-{wafers[i].SourceName}";                        switch (wafers[i].WaferType.ToString())                        {                            case "P":                                BoatWafers[iIndex].BkColor = _PBk;                                break;                            case "M":                                BoatWafers[iIndex].BkColor = _MBk;                                break;                            case "SD":                                BoatWafers[iIndex].BkColor = _SDBk;                                break;                            case "ED":                                BoatWafers[iIndex].BkColor = _EDBk;                                break;                            default:                                BoatWafers[iIndex].BkColor = _DefaultdBk;                                break;                        }                    }                    else                    {                        BoatWafers[iIndex].Description = "";                        BoatWafers[iIndex].BkColor = _DefaultdBk;                    }                    iIndex--;                }            }            ListBoatWafers = SplitBoatWafersByLength(_cassetteSlotCount);        }        private void RefreshBoatWafers()        {            var wafers = ModuleManager.ModuleInfos["PM1"].WaferManager.Wafers.Reverse().ToList();            int NumberP = 0, NumberM = 0, NumberSD = 0, NumberED = 0, NumberT = 0, NumberXD = 0;            for (int i = 0; i < wafers.Count; i++)            {                if (ModuleManager.ModuleInfos["PM1"].WaferManager.Wafers.Count > i)                {                    var wafer = wafers[i];                    if (wafer.WaferStatus != 0)//empty                    {                        switch (wafer.WaferType.ToString())                        {                            case "P":                                NumberP++;                                break;                            case "M":                                NumberM++;                                break;                            case "SD":                                NumberSD++;                                break;                            case "ED":                                NumberED++;                                break;                        }                    }                }            }            BoatPWaferCount = NumberP;            BoatMWaferCount = NumberM;            BoatSDWaferCount = NumberSD;            BoatEDWaferCount = NumberED;            BoatEmptyWaferCount = _boatSlotCount - BoatPWaferCount - BoatMWaferCount - BoatSDWaferCount - BoatEDWaferCount;            BoatAllWaferCount = $"{BoatPWaferCount + BoatMWaferCount + BoatSDWaferCount + BoatEDWaferCount}/{_boatSlotCount}";        }    }    public class BoatWaferItem : NotifiableItem    {        private int _slot;        public int Slot        {            get => _slot;            set            {                _slot = value;                InvokePropertyChanged("Slot");            }        }        private string _description;        public string Description        {            get => _description;            set            {                _description = value;                InvokePropertyChanged("Description");            }        }        private bool _hasWafer;        public bool HasWafer        {            get => _hasWafer;            set            {                _hasWafer = value;                InvokePropertyChanged("HasWafer");            }        }        private bool _noWafer;        public bool NoWafer        {            get => _noWafer;            set            {                _noWafer = value;                InvokePropertyChanged("NoWafer");            }        }        private SolidColorBrush _bkColor;        public SolidColorBrush BkColor        {            get => _bkColor;            set            {                _bkColor = value;                InvokePropertyChanged("BkColor");            }        }    }}
 |