using Caliburn.Micro; using Caliburn.Micro.Core; using FurnaceUI.Models; using FurnaceUI.Views.Scheduled; using MECF.Framework.Common.CommonData; using MECF.Framework.Common.DataCenter; using MECF.Framework.Common.OperationCenter; using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Data; using System.Globalization; using System.Linq; using System.Windows.Controls; using System.Windows.Data; namespace FurnaceUI.Views.Editors { /// /// 预定场景数据上下文 /// public class ScheduledMaitViewModel : FurnaceUIViewModelBase { #region 构造函数 /// /// 构造函数 /// public ScheduledMaitViewModel() { } #endregion #region 属性 ScheduleMaintenanceDataItemList /// /// ScheduleMaintenanceDataItemList /// public ObservableCollection ScheduleMaintenanceDataItemList { get { return _scheduleMaintenanceDataItemList; } set { _scheduleMaintenanceDataItemList = value; } } private ObservableCollection _scheduleMaintenanceDataItemList = new ObservableCollection(); #endregion #region 属性 显示视图 /// /// 显示视图 /// public ListCollectionView ScheduleMaintenanceDataItemListSource { get { return _scheduleMaintenanceDataItemListSource; } set { _scheduleMaintenanceDataItemListSource = value; NotifyOfPropertyChange("ScheduleMaintenanceDataItemListSource"); } } private ListCollectionView _scheduleMaintenanceDataItemListSource; #endregion #region 属性 是否保存 /// /// 是否保存 /// public bool IsSave { get; set; } #endregion #region 属性 选择数据类型 /// /// /// public DataItemEnum DataItemType { get { return _dataItemType; } set { _dataItemType = value; NotifyOfPropertyChange("DataItemType"); if (ScheduleMaintenanceDataItemListSource != null) { ScheduleMaintenanceDataItemListSource.Filter = Filter; } } } private DataItemEnum _dataItemType = DataItemEnum.CarrierWafer; #endregion #region 属性 选择DummyType /// /// 选择Dummy /// public DummyEnum DummyType { get { return _dummyType; } set { _dummyType = value; NotifyOfPropertyChange("DummyType"); if (ScheduleMaintenanceDataItemListSource != null) { ScheduleMaintenanceDataItemListSource.Filter = Filter; } } } private DummyEnum _dummyType = DummyEnum.SideDummy; #endregion #region 属性 选择ReactorsType /// /// 选择ReactorsType /// public ReactorsEnum ReactorsType { get { return _reactorsType; } set { _reactorsType = value; NotifyOfPropertyChange("ReactorsType"); if (ScheduleMaintenanceDataItemListSource != null) { ScheduleMaintenanceDataItemListSource.Filter = Filter; } } } private ReactorsEnum _reactorsType = ReactorsEnum.Recipe; #endregion #region 事件处理 选择项改变 /// /// 选择项改变 /// /// /// public void SelectionChangedHandle(object obj, object selectedValue) { if (obj != null && selectedValue != null && obj is ScheduleMaintenanceDataItem node && selectedValue is ScheduleMaintenanceDataItem selectedItem) { if (obj == selectedItem) { IWindowManager wm = IoC.Get(); ScheduledMaintenanceMonitorViewModel scheduledMaintenanceMonitorViewModel = new ScheduledMaintenanceMonitorViewModel(selectedItem); var rtn = (wm as WindowManager)?.ShowDialogWithTitle(scheduledMaintenanceMonitorViewModel, null, "Maintenance Setting"); if (rtn == true) { if (!string.IsNullOrEmpty(scheduledMaintenanceMonitorViewModel.EditModel.AdditionInformationDisplay) && selectedItem.AdditionInformationDisplay != scheduledMaintenanceMonitorViewModel.EditModel.AdditionInformationDisplay) { selectedItem.AdditionInformationDisplay = scheduledMaintenanceMonitorViewModel.EditModel.AdditionInformationDisplay; InvokeClient.Instance.Service.DoOperation("System.ScheduleMaintenance.SetAdditionInformationDisplayName", selectedItem.Item, selectedItem.AdditionInformationDisplay); } if (selectedItem.CurrentValue != scheduledMaintenanceMonitorViewModel.EditModel.CurrentValue) { selectedItem.CurrentValue = scheduledMaintenanceMonitorViewModel.EditModel.CurrentValue; InvokeClient.Instance.Service.DoOperation("System.ScheduleMaintenance.SetCurrentValue", selectedItem.Item, selectedItem.CurrentValue); } if (!string.IsNullOrEmpty(scheduledMaintenanceMonitorViewModel.EditModel.Display) && selectedItem.Display != scheduledMaintenanceMonitorViewModel.EditModel.Display) { selectedItem.Display = scheduledMaintenanceMonitorViewModel.EditModel.Display; InvokeClient.Instance.Service.DoOperation("System.ScheduleMaintenance.SetMaintenanceName", selectedItem.Item, selectedItem.Display); } if (selectedItem.LimitValue != scheduledMaintenanceMonitorViewModel.EditModel.LimitValue) { selectedItem.LimitValue = scheduledMaintenanceMonitorViewModel.EditModel.LimitValue; InvokeClient.Instance.Service.DoOperation("System.ScheduleMaintenance.SetLimitValue", selectedItem.Item, selectedItem.LimitValue); } if (!string.IsNullOrEmpty(scheduledMaintenanceMonitorViewModel.EditModel.MaintenanceProcessing) && selectedItem.MaintenanceProcessing != scheduledMaintenanceMonitorViewModel.EditModel.MaintenanceProcessing) { selectedItem.MaintenanceProcessing = scheduledMaintenanceMonitorViewModel.EditModel.MaintenanceProcessing; InvokeClient.Instance.Service.DoOperation("System.ScheduleMaintenance.SetMaintenanceProcessing", selectedItem.Item, selectedItem.MaintenanceProcessing); selectedItem.AssociationProcessRecipeName = scheduledMaintenanceMonitorViewModel.EditModel.AssociationProcessRecipeName; InvokeClient.Instance.Service.DoOperation("System.ScheduleMaintenance.SetAssociationProcessRecipeName", selectedItem.Item, selectedItem.AssociationProcessRecipeName); } if (!string.IsNullOrEmpty(scheduledMaintenanceMonitorViewModel.EditModel.AssociationProcessRecipeName) && selectedItem.AssociationProcessRecipeName != scheduledMaintenanceMonitorViewModel.EditModel.AssociationProcessRecipeName) { selectedItem.AssociationProcessRecipeName = scheduledMaintenanceMonitorViewModel.EditModel.AssociationProcessRecipeName; InvokeClient.Instance.Service.DoOperation("System.ScheduleMaintenance.SetAssociationProcessRecipeName", selectedItem.Item, selectedItem.AssociationProcessRecipeName); } if (selectedItem.StartValue != scheduledMaintenanceMonitorViewModel.EditModel.StartValue) { selectedItem.StartValue = scheduledMaintenanceMonitorViewModel.EditModel.StartValue; InvokeClient.Instance.Service.DoOperation("System.ScheduleMaintenance.SetStartValue", selectedItem.Item, selectedItem.StartValue); } } } } } #endregion #region 重新方法 窗体加载完成 /// /// 窗体加载完成 /// /// protected override void OnViewLoaded(object view) { base.OnViewLoaded(view); } protected override void OnActivate() { LoadData(); } #endregion #region 私有方法 加载数据 /// /// 加载数据 /// private void LoadData() { string sql = $"select * from \"schedule_maintenance\""; DataTable dt = QueryDataClient.Instance.Service.QueryData(sql); List tempList = new List(); for (int i = 0; i < dt.Rows.Count; i++) { ScheduleMaintenanceDataItem item = new ScheduleMaintenanceDataItem(); item.Item = dt.Rows[i]["maintenance_item"].ToString(); item.Display = dt.Rows[i]["maintenance_display"].ToString(); item.Unit = dt.Rows[i]["unit"].ToString(); item.MaintenanceProcessing = dt.Rows[i]["maintenance_processing"].ToString(); item.Path = dt.Rows[i]["path"].ToString(); item.AdditionInformationName = dt.Rows[i]["addition_information_name"].ToString(); item.AdditionInformationDisplay = dt.Rows[i]["addition_information_display"].ToString(); item.AssociationProcessRecipeName = dt.Rows[i]["association_process_recipeName"].ToString(); if (float.TryParse(dt.Rows[i]["current_value"].ToString(), out float value)) item.CurrentValue = value; if (float.TryParse(dt.Rows[i]["scheduling_start_value"].ToString(), out value)) item.StartValue = value; if (float.TryParse(dt.Rows[i]["maintenance_limit_value"].ToString(), out value)) item.LimitValue = value; //根据Path 分类 if (!string.IsNullOrEmpty(item.Path)) { switch (item.Path) { case "CarrierWafer.SieDummy": item.DataItemType = DataItemEnum.CarrierWafer; item.DummyType = DummyEnum.SideDummy; break; case "CarrierWafer.FillDummy": item.DataItemType = DataItemEnum.CarrierWafer; item.DummyType = DummyEnum.FillDummy; break; case "Boat": item.DataItemType = DataItemEnum.Boat; break; case "Conditioning": item.DataItemType = DataItemEnum.Conditioning; break; case "Reactor.Recipe": item.DataItemType = DataItemEnum.Reactor; item.ReactorsType = ReactorsEnum.Recipe; break; case "Reactor.StepRunFreq": item.DataItemType = DataItemEnum.Reactor; item.ReactorsType = ReactorsEnum.StepRunFreq; break; case "Reactor.StepRunTime": item.DataItemType = DataItemEnum.Reactor; item.ReactorsType = ReactorsEnum.StepRunTime; break; case "Reactor.StepThickness": item.DataItemType = DataItemEnum.Reactor; item.ReactorsType = ReactorsEnum.StepThickness; break; default: break; } tempList.Add(item); } } ScheduleMaintenanceDataItemList = new ObservableCollection(tempList); var groups = ScheduleMaintenanceDataItemList.GroupBy(p => p.DataItemType); foreach (var item in groups) { switch (item.Key) { case DataItemEnum.CarrierWafer: var subGroup = item.GroupBy(p => p.DummyType); foreach (var sunItemGroup in subGroup) { for (int i = 0; i < sunItemGroup.Count(); i++) { sunItemGroup.ElementAt(i).Number = i + 1; } } break; case DataItemEnum.Boat: for (int i = 0; i < item.Count(); i++) { item.ElementAt(i).Number = i + 1; } break; case DataItemEnum.Conditioning: for (int i = 0; i < item.Count(); i++) { item.ElementAt(i).Number = i + 1; } break; case DataItemEnum.Reactor: var subReactorsTypeGroup = item.GroupBy(p => p.ReactorsType); foreach (var sunItemGroup in subReactorsTypeGroup) { for (int i = 0; i < sunItemGroup.Count(); i++) { sunItemGroup.ElementAt(i).Number = i + 1; } } break; default: break; } } ScheduleMaintenanceDataItemListSource = new ListCollectionView(tempList); ScheduleMaintenanceDataItemListSource.Filter = Filter; //ScheduledSC scheduledSC = new ScheduledSC(); //scheduledSC.SetKeys(); // var scValue = CONFIG.IsEnable ? CONFIG.PollConfig(SCBlock.GetKeys()) : QueryDataClient.Instance.Service.PollConfig(SCBlock.GetKeys()); // scheduledSC.Update(scValue); } #endregion #region 私有方法 筛选数据 /// /// 筛选数据 /// /// /// private bool Filter(object obj) { bool isFilter = false;//筛选不通过 if (obj != null && obj is ScheduleMaintenanceDataItem model) { if (model.DataItemType == DataItemType) { switch (DataItemType) { case DataItemEnum.CarrierWafer: isFilter = model.DummyType == DummyType; break; case DataItemEnum.Boat: isFilter = true; break; case DataItemEnum.Conditioning: isFilter = true; break; case DataItemEnum.Reactor: isFilter = model.ReactorsType == ReactorsType; break; default: break; } } } return isFilter; } #endregion #region 方法 保存 /// /// 保存 /// public void SetSave() { IsSave = true; } #endregion #region 方法 取消 /// /// 取消 /// public void SetCancel() { IsSave = false; } #endregion } public enum DummyEnum : byte { None = 0, SideDummy = 1, FillDummy = 2 } public enum ReactorsEnum : byte { None = 0, Recipe = 1, StepRunFreq = 2, StepRunTime = 3, StepThickness = 4 } public enum DataItemEnum { CarrierWafer, Boat, Conditioning, Reactor } public class ScheduleMaintenanceDataItem : NotifiableItem { public int Number { get; set; } public string Unit { get; set; } public string Item { get; set; } public float CurrentValue { get { return _currentValue; } set { _currentValue = value; InvokePropertyChanged("CurrentValue"); } } private float _currentValue; public float StartValue { get { return _startValue; } set { _startValue = value; InvokePropertyChanged("StartValue"); } } private float _startValue; public float LimitValue { get { return _limitValue; } set { _limitValue = value; InvokePropertyChanged("LimitValue"); } } private float _limitValue; public string AssociationProcessRecipeName { get { return _associationProcessRecipeName; } set { _associationProcessRecipeName = value; InvokePropertyChanged("AssociationProcessRecipeName"); } } private string _associationProcessRecipeName; public string MaintenanceProcessing { get { return _maintenanceProcessing; } set { _maintenanceProcessing = value; InvokePropertyChanged("MaintenanceProcessing"); } } private string _maintenanceProcessing; public string Display { get { return _display; } set { _display = value; InvokePropertyChanged("Display"); } } private string _display; public string Path { get; set; } public string AdditionInformationName { get; set; } public string AdditionInformationDisplay { get { return _additionInformationDisplay; } set { _additionInformationDisplay = value; InvokePropertyChanged("AdditionInformationDisplay"); } } private string _additionInformationDisplay; public DataItemEnum DataItemType { get; set; } public ReactorsEnum ReactorsType { get; set; } public DummyEnum DummyType { get; set; } } public class EnumToBoolConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { return value == null ? false : value.Equals(parameter); } public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { var res = value != null && value.Equals(true) ? parameter : Binding.DoNothing; return res; } } }