using Aitex.Core.Util; using MECF.Framework.Common.DataCenter; using MECF.Framework.Common.OperationCenter; using MECF.Framework.UI.Client.ClientBase; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; using System.Windows; using FurnaceUI.Models; using FurnaceUI.Views.Recipes; namespace FurnaceUI.Views.Operations { public class BoatWaferNoActionViewModel : FurnaceUIViewModelBase { private ObservableCollection _boatWafers; public ObservableCollection BoatWafers { get { return _boatWafers; } set { _boatWafers = value; NotifyOfPropertyChange("BoatWafers"); } } private string _waferNumberP; public string WaferNumberP { get => _waferNumberP; set { _waferNumberP = value; NotifyOfPropertyChange(nameof(WaferNumberP)); } } private string _waferNumberM; public string WaferNumberM { get => _waferNumberM; set { _waferNumberM = value; NotifyOfPropertyChange(nameof(WaferNumberM)); } } private string _waferNumberSD; public string WaferNumberSD { get => _waferNumberSD; set { _waferNumberSD = value; NotifyOfPropertyChange(nameof(WaferNumberSD)); } } private string _waferNumberED; public string WaferNumberED { get => _waferNumberED; set { _waferNumberED = value; NotifyOfPropertyChange(nameof(WaferNumberED)); } } private string _waferNumberT; public string WaferNumberT { get => _waferNumberT; set { _waferNumberT = value; NotifyOfPropertyChange(nameof(WaferNumberT)); } } private string _waferNumberXD; public string WaferNumberXD { get => _waferNumberXD; set { _waferNumberXD = value; NotifyOfPropertyChange(nameof(WaferNumberXD)); } } public ObservableCollection> ListBoatWafers { get; set; } //private PeriodicJob RefreshBoatWafers; [Subscription("PM1.Status")] public string Status { get; set; } public BoatWaferNoActionViewModel() { BoatWafers = new ObservableCollection(); for (int i = 0; i < (int)QueryDataClient.Instance.Service.GetConfig("Boat.SlotCount"); i++) { BoatWaferItem item = new BoatWaferItem() { Slot = i + 1, Description = "" }; BoatWafers.Add(item); } //RefreshBoatWafers = new PeriodicJob(300, RefreshBoatWafersTask, "RefreshAlarmTask", true); } protected override void OnInitialize() { base.OnInitialize(); } protected override void OnActivate() { base.OnActivate(); RefreshBoatWafersTask(); } protected override void InvokeAfterUpdateProperty(Dictionary data) { base.InvokeAfterUpdateProperty(data); RefreshBoatWafersTask(); } private bool RefreshBoatWafersTask() { 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 < BoatWafers.Count; i++) { if (ModuleManager.ModuleInfos["PM1"].WaferManager.Wafers.Count > i) { var wafer = wafers[i]; if (wafer.WaferStatus == 0)//empty { BoatWafers[i].Description = $""; BoatWafers[i].HasWafer = false; BoatWafers[i].NoWafer = true; } else { BoatWafers[i].Description = $"{wafer.SourceName}--{wafer.WaferType }"; BoatWafers[i].HasWafer = true; BoatWafers[i].NoWafer = false; switch (wafer.WaferType.ToString()) { case "P": NumberP++; break; case "M": NumberM++; break; case "SD": NumberSD++; break; case "ED": NumberED++; break; case "T": NumberT++; break; case "XD": NumberXD++; break; } } } } WaferNumberP = NumberP.ToString(); WaferNumberM = NumberM.ToString(); WaferNumberSD = NumberSD.ToString(); WaferNumberED = NumberED.ToString(); WaferNumberT = NumberT.ToString(); WaferNumberXD = NumberXD.ToString(); ListBoatWafers=SplitBoatWafersByLength(25); return true; } private ObservableCollection> SplitBoatWafersByLength(int iLength) { ObservableCollection> obsRet = new ObservableCollection>(); int iCount = BoatWafers.Count / iLength; int iRemain = BoatWafers.Count % iLength; for (int i=0; i < iCount; i++) { obsRet.Add(new ObservableCollection(BoatWafers.ToList().GetRange(i * iLength, iLength))); } if(iRemain>0) obsRet.Add(new ObservableCollection(BoatWafers.ToList().GetRange(iCount * iLength, iRemain))); return obsRet; } public void BoatWaferNoActionClose() { ((Window)GetView()).DialogResult = false; } } }