using Caliburn.Micro; using Caliburn.Micro.Core; using Aitex.Core.Common.DeviceData; using Aitex.Core.UI.ControlDataContext; using Aitex.Core.Util; using MECF.Framework.Common.DataCenter; using MECF.Framework.Common.OperationCenter; using FurnaceUI.Models; using FurnaceUI.Views.Editors; using System.Collections.ObjectModel; using System.Collections.Generic; using System.Threading.Tasks; using System.Reflection; using System; using Aitex.Core.RT.Log; using System.Linq; using System.Windows; using MECF.Framework.UI.Client.CenterViews.Configs.SystemConfig; using OpenSEMI.ClientBase; namespace FurnaceUI.Views.Maintenances { public class FIMSSensorViewModel : FurnaceUIViewModelBase { public bool IsPermission { get => this.Permission == 3; } private bool _fIMS1CycleVisibility = false; public bool FIMS1CycleVisibility { get => _fIMS1CycleVisibility; set => SetField(ref _fIMS1CycleVisibility, value, nameof(FIMS1CycleVisibility)); } private bool _fIMS2CycleVisibility = false; public bool FIMS2CycleVisibility { get => _fIMS2CycleVisibility; set => SetField(ref _fIMS2CycleVisibility, value, nameof(FIMS2CycleVisibility)); } [Subscription("FIMS1.FIMSCycledCount")] public int FIMS1CycledCount { get; set; } [Subscription("FIMS2.FIMSCycledCount")] public int FIMS2CycledCount { get; set; } public string FIMS1CycleInfo => $"{FIMS1CycledCount} / {_fims1CycleCount}"; public string FIMS2CycleInfo => $"{FIMS2CycledCount} / {_fims2CycleCount}"; private int _fims1CycleCount; private int _fims2CycleCount; public bool IsSystemStaus => (RtStatus != "AutoRunning"); [Subscription("FIMS1.Status")] public string FIMS1Status { get; set; } [Subscription("FIMS2.Status")] public string FIMS2Status { get; set; } [Subscription("Rt.Status")] public string RtStatus { get; set; } [Subscription("FIMS1.IsOnline")] public bool FIMS1IsOnline { get; set; } [Subscription("FIMS2.IsOnline")] public bool FIMS2IsOnline { get; set; } public bool IsFIMS1OnlineButtonEnable => !FIMS1IsOnline; public bool IsFIMS2OnlineButtonEnable => !FIMS2IsOnline; public bool IsFIMS1OfflineButtonEnable => FIMS1IsOnline && RtStatus != "AutoRunning"; public bool IsFIMS2OfflineButtonEnable => FIMS2IsOnline && RtStatus != "AutoRunning"; public FIMSSensorViewModel() { } public void Home(object target) { if (DialogBox.Confirm($"Are you sure you want to {target} Home?")) InvokeClient.Instance.Service.DoOperation($"{target}.Home"); } public void Load(object target) { if (DialogBox.Confirm($"Are you sure you want to {target} Load?")) { var valueConfig = SystemConfigProvider.Instance.GetValueByName("PM1.N2Purge.WaferCharge.FOUPN2PurgeEnable"); InvokeClient.Instance.Service.DoOperation($"{target}.Load", new object[] { valueConfig }); } } public void Unload(object target) { if (DialogBox.Confirm($"Are you sure you want to {target} Unload?")) InvokeClient.Instance.Service.DoOperation($"{target}.Unload"); } public void SetAlarmReset(object target) { if (DialogBox.Confirm($"Are you sure you want to {target} Reset?")) InvokeClient.Instance.Service.DoOperation($"{target?.ToString().Split('.').ToList().LastOrDefault()}.Reset"); } public void SetOnline(object target) { if (!DialogBox.Confirm($"Are you sure want to {target} Online?")) return; InvokeClient.Instance.Service.DoOperation($"{target}.SetOnline"); } public void SetOffline(object target) { if (!DialogBox.Confirm($"Are you sure want to {target} Offline?")) return; InvokeClient.Instance.Service.DoOperation($"{target}.SetOffline"); } public void ClosedCmd() { (GetView() as Window).Close(); } protected override void OnViewLoaded(object view) { base.OnViewLoaded(view); _fims1CycleCount = (int)QueryDataClient.Instance.Service.GetConfig("FIMS.FIMS1.CycleCount"); _fims2CycleCount = (int)QueryDataClient.Instance.Service.GetConfig("FIMS.FIMS2.CycleCount"); } public void SetDockUndock(object target, bool value) { InvokeClient.Instance.Service.DoOperation($"{target}.SetDockUndock", value); } protected override void InvokeAfterUpdateProperty(Dictionary data) { base.InvokeAfterUpdateProperty(data); FIMS1CycleVisibility = FIMS1Status == "Cycle"; FIMS2CycleVisibility = FIMS2Status == "Cycle"; } public void SetFIMSCycle(object target) { if (!DialogBox.Confirm($"Are you sure want to {target} Cycle Start?")) return; InvokeClient.Instance.Service.DoOperation($"{target}.Cycle"); } public void SetFIMSAbort(object target) { if (!DialogBox.Confirm($"Are you sure want to {target} Cycle Stop?")) return; InvokeClient.Instance.Service.DoOperation($"{target}.Abort"); } } }