| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534 | using Caliburn.Micro;using Caliburn.Micro.Core;using FurnaceUI.Models;using FurnaceUI.Views.Scheduled;using MECF.Framework.Common.CommonData;using MECF.Framework.Common.CommonData.EnumData;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{    /// <summary>    /// 预定场景数据上下文    /// </summary>    public class ScheduledMaitViewModel : FurnaceUIViewModelBase    {        #region 构造函数        /// <summary>        /// 构造函数        /// </summary>        public ScheduledMaitViewModel()        {        }        #endregion        #region 属性 ScheduleMaintenanceDataItemList        /// <summary>        /// ScheduleMaintenanceDataItemList        /// </summary>        public ObservableCollection<ScheduleMaintenanceDataItem> ScheduleMaintenanceDataItemList        {            get { return _scheduleMaintenanceDataItemList; }            set            {                _scheduleMaintenanceDataItemList = value;            }        }        private ObservableCollection<ScheduleMaintenanceDataItem> _scheduleMaintenanceDataItemList = new ObservableCollection<ScheduleMaintenanceDataItem>();        #endregion        #region 属性 显示视图        /// <summary>        /// 显示视图        /// </summary>        public ListCollectionView ScheduleMaintenanceDataItemListSource        {            get { return _scheduleMaintenanceDataItemListSource; }            set            {                _scheduleMaintenanceDataItemListSource = value;                NotifyOfPropertyChange("ScheduleMaintenanceDataItemListSource");            }        }        private ListCollectionView _scheduleMaintenanceDataItemListSource;        #endregion        #region 属性 是否保存        /// <summary>        /// 是否保存        /// </summary>        public bool IsSave { get; set; }        #endregion        #region 属性 选择数据类型        /// <summary>        ///         /// </summary>        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        /// <summary>        /// 选择Dummy        /// </summary>        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        /// <summary>        /// 选择ReactorsType        /// </summary>        public ReactorsEnum ReactorsType        {            get { return _reactorsType; }            set            {                _reactorsType = value;                NotifyOfPropertyChange("ReactorsType");                if (ScheduleMaintenanceDataItemListSource != null)                {                    ScheduleMaintenanceDataItemListSource.Filter = Filter;                }            }        }        private ReactorsEnum _reactorsType = ReactorsEnum.Recipe;        #endregion        #region 事件处理 选择项改变        /// <summary>        /// 选择项改变        /// </summary>        /// <param name="sender"></param>        /// <param name="e"></param>        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<IWindowManager>();                    ScheduledMaintenanceMonitorViewModel scheduledMaintenanceMonitorViewModel = new ScheduledMaintenanceMonitorViewModel(selectedItem);                    var rtn = (wm as WindowManager)?.ShowDialogWithTitle(scheduledMaintenanceMonitorViewModel, this, null, "Maintenance Setting");                    if (rtn == true)                    {                        var isModifyAdditionInformationDisplay = !string.IsNullOrEmpty(scheduledMaintenanceMonitorViewModel.EditModel.AdditionInformationDisplay) && selectedItem.AdditionInformationDisplay != scheduledMaintenanceMonitorViewModel.EditModel.AdditionInformationDisplay;                        var isModifyAdditionInformationDisplaySupplement = selectedItem.AdditionInformationDisplaySupplement != scheduledMaintenanceMonitorViewModel.EditModel.AdditionInformationDisplaySupplement;                        if (isModifyAdditionInformationDisplay || isModifyAdditionInformationDisplaySupplement)                        {                            selectedItem.AdditionInformationDisplay = scheduledMaintenanceMonitorViewModel.EditModel.AdditionInformationDisplay;                            selectedItem.AdditionInformationDisplaySupplement = scheduledMaintenanceMonitorViewModel.EditModel.AdditionInformationDisplaySupplement;                            InvokeClient.Instance.Service.DoOperation("System.ScheduleMaintenance.SetAdditionInformationDisplayName", selectedItem.Item, selectedItem.AdditionInformationDisplay, selectedItem.AdditionInformationDisplaySupplement);                        }                        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 重新方法 窗体加载完成        /// <summary>        /// 窗体加载完成        /// </summary>        /// <param name="view"></param>        protected override void OnViewLoaded(object view)        {            base.OnViewLoaded(view);        }        protected override void OnActivate()        {            LoadData();        }        #endregion        #region 私有方法 加载数据        /// <summary>        /// 加载数据        /// </summary>        private void LoadData()        {            string sql = $"select * from \"schedule_maintenance\" ORDER BY  \"maintenance_item\"";            DataTable dt = QueryDataClient.Instance.Service.QueryData(sql);            List<ScheduleMaintenanceDataItem> tempList = new List<ScheduleMaintenanceDataItem>();            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();                item.AdditionInformationDisplaySupplement = dt.Rows[i]["addition_information_display_supplement"].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;                            if (item.Item != MaintenanceItemEnum.BoatRecipeThickness1.ToString())                            {                                continue;                            }                            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<ScheduleMaintenanceDataItem>(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 私有方法 筛选数据        /// <summary>        /// 筛选数据        /// </summary>        /// <param name="obj"></param>        /// <returns></returns>        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 方法 保存        /// <summary>        /// 保存        /// </summary>        public void SetSave()        {            IsSave = true;        }        #endregion        #region 方法 取消        /// <summary>        /// 取消        /// </summary>        public void SetCancel()        {            IsSave = false;        }        #endregion    }    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 AdditionInformationDisplaySupplement        {            get { return _additionInformationDisplaySupplement; }            set            {                _additionInformationDisplaySupplement = value;                InvokePropertyChanged("AdditionInformationDisplaySupplement");            }        }        private string _additionInformationDisplaySupplement = "";        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;        }    }}
 |