| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924 | using Aitex.Core.Common;using Aitex.Core.RT.DataCenter;using Aitex.Core.RT.Routine;using Aitex.Core.UI.MVVM;using Aitex.Core.Utilities;using MECF.Framework.Common.CommonData;using MECF.Framework.Common.DataCenter;using MECF.Framework.Common.DBCore;using MECF.Framework.Common.Equipment;using MECF.Framework.Common.OperationCenter;using MECF.Framework.Common.SubstrateTrackings;using MECF.Framework.Common.WaferHolder;using OpenSEMI.ClientBase;using CyberX8_MainPages.Model;using Prism.Common;using Prism.Mvvm;using System;using System.Collections.Generic;using System.Collections.ObjectModel;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Windows;using System.Windows.Input;using Unity;using WPF.Themes.UserControls;using MECF.Framework.Common.Layout;using MECF.Framework.Common.Utilities;using Aitex.Core.UI.ControlDataContext;using System.Reflection;using System.Windows.Threading;using Aitex.Core.Util;using Aitex.Core.RT.Log;namespace CyberX8_MainPages.ViewModels{    public class WaferHolderViewModel : BindableBase    {        #region 局部变量        /// <summary>        /// buffer数据        /// </summary>        private ObservableCollection<WaferHolderBufferData> _bufferDatas = null;        /// <summary>        /// 未使用的载具        /// </summary>        private ObservableCollection<WaferHolderInfo> _unusedWaferHoders = null;        /// <summary>        /// 选择数据        /// </summary>        private WaferHolderBufferData _selectedBufferData = null;        /// <summary>        /// 选择未使用数据        /// </summary>        private WaferHolderInfo _selectedUnusedWaferHolderInfo = null;        /// <summary>        /// csr 类型集合        /// </summary>        private List<string> _crsTypeLst = null;        /// <summary>        /// Wafer尺寸集合        /// </summary>        private List<string> _waferSizeLst = null;        /// <summary>        /// 临时数据        /// </summary>        private WaferHolderBufferData _tmpWaferHolderBufferData = null;        /// <summary>        /// 化学液集合        /// </summary>        private List<string> _chemistryLst = null;        /// <summary>        /// Location位置集合        /// </summary>        private List<string> _locationLst = new List<string>();        /// <summary>        /// Reservoir集合        /// </summary>        private List<string> _reservoirLst = new List<string>();        /// <summary>        /// 是否编辑        /// </summary>        private bool _isEdit = false;        /// <summary>        /// 是否编辑Current Location        /// </summary>        private bool _isLocationEdit = false;        /// <summary>        /// 是否启用SaveandCancel按钮        /// </summary>        private bool _isSaveandCancelEdit = false;        /// <summary>        /// 操作        /// </summary>        /// <summary>        /// 操作        /// </summary>        private string operation = "";        /// <summary>        /// 是否编辑载具Id        /// </summary>        private bool _isEditWaferHolderId = false;        /// <summary>        /// 定时器        /// </summary>        DispatcherTimer _timer;        /// <summary>        /// 查询后台数据集合        /// </summary>        private List<string> _rtDataKeys = new List<string>();        /// <summary>        /// rt查询key数值字典        /// </summary>        private Dictionary<string, object> _rtDataValueDic = new Dictionary<string, object>();        /// <summary>        /// ProcessTransporter是否Busy        /// </summary>        private bool _isProcessTransBusy;        /// <summary>        /// LoaderTransporter是否Busy        /// </summary>        private bool _isLoaderTransBusy;        /// <summary>        /// 是否在Auto模式下        /// </summary>        private bool _isAutoMode;        #endregion        #region 属性        public List<string> CrsTypeLst        {            get { return _crsTypeLst; }            set { SetProperty(ref _crsTypeLst, value); }        }        public List<string> WaferSizeLst        {            get { return _waferSizeLst; }            set { SetProperty(ref _waferSizeLst, value); }        }        public List<string> ChemistryLst        {            get { return _chemistryLst; }            set { SetProperty(ref _chemistryLst, value); }        }        /// <summary>        /// Location位置集合        /// </summary>        public List<string> LocationLst        {            get { return _locationLst; }            set { SetProperty(ref _locationLst, value); }        }        public ObservableCollection<WaferHolderBufferData> BufferDatas        {            get { return _bufferDatas; }            set             {                 SetProperty(ref _bufferDatas, value);            }        }        /// <summary>        /// 未使用载具        /// </summary>        public ObservableCollection<WaferHolderInfo> UnusedWaferHolders        {            get { return _unusedWaferHoders; }            set            {                SetProperty(ref _unusedWaferHoders, value);            }        }        /// <summary数据>        /// 选择        /// </summary>        public WaferHolderBufferData SelectedBufferData        {            get { return _selectedBufferData; }            set             {                 if(_selectedBufferData==null||(value!=null&&value.Id!=_selectedBufferData.Id))                {                    BufferDataSelectedChanged(value);                }                SetProperty(ref _selectedBufferData, value);             }        }        /// <summary数据>        /// 选择未使用的载具        /// </summary>        public WaferHolderInfo SelectedUnusedWaferHolderInfo        {            get { return _selectedUnusedWaferHolderInfo; }            set            {                SetProperty(ref _selectedUnusedWaferHolderInfo, value);            }        }        /// <summary>        /// 临时数据        /// </summary>        public WaferHolderBufferData TmpBufferData        {            get { return _tmpWaferHolderBufferData; }            set { SetProperty(ref _tmpWaferHolderBufferData, value); }        }        /// <summary>        /// 是否编辑        /// </summary>        public bool IsEdit        {            get { return _isEdit; }            set             {                if(!value)                {                    IsEditWaferHolderId = false;                }                SetProperty(ref _isEdit, value);            }        }        /// <summary>        /// 是否编辑Current Location        /// </summary>        public bool IsLocationEdit        {            get { return _isLocationEdit; }            set            {                SetProperty(ref _isLocationEdit, value);            }        }        /// <summary>        /// 是否启用Save和Cancel        /// </summary>        public bool IsSaveandCancelEdit        {            get { return _isSaveandCancelEdit; }            set            {                               SetProperty(ref _isSaveandCancelEdit, value);            }        }        /// <summary>        /// 是否编辑载具Id        /// </summary>        public bool IsEditWaferHolderId        {            get { return _isEditWaferHolderId; }            set { SetProperty(ref _isEditWaferHolderId, value); }        }                       #endregion        #region 按钮事件        [IgnorePropertyChange]        public ICommand EnableCommand        {            get;            private set;        }        [IgnorePropertyChange]        public ICommand DisableCommand        {            get;            private set;        }        /// <summary>        /// 增加        /// </summary>        public ICommand AddCommand        { get; private set; }        /// <summary>        /// 编辑        /// </summary>        public ICommand EditCommand        { get; private set; }                 /// <summary>        /// 保存        /// </summary>        public ICommand SaveCommand { get; private set; }        /// <summary>        /// 取消        /// </summary>        public ICommand CancelCommand { get; private set; }        /// <summary>        /// 移至Loader        /// </summary>        public ICommand MoveToLoaderCommand { get; private set; }        /// <summary>        /// 移出Loader        /// </summary>        public ICommand MoveFromLoaderCommand {  get; private set; }        /// <summary>        /// 移除        /// </summary>        public ICommand RemoveCommand { get; private set; }        /// <summary>        /// MoveLocation        /// </summary>        public ICommand MoveLocationCommand { get; private set; }        #endregion        /// <summary>        /// 构造函数        /// </summary>        public WaferHolderViewModel()         {            EnableCommand = new DelegateCommand<object>(EnableAction);            DisableCommand=new DelegateCommand<object>(DisableAction);            AddCommand=new DelegateCommand<object>(AddAction);            EditCommand = new DelegateCommand<object>(EditAction);            SaveCommand=new DelegateCommand<object>(SaveAction);            CancelCommand=new DelegateCommand<object>(CancelAction);            MoveToLoaderCommand = new DelegateCommand<object>(MoveToLoaderAction);            MoveFromLoaderCommand = new DelegateCommand<object>(MoveFromLoaderAction);            RemoveCommand = new DelegateCommand<object>(RemoveAction);            MoveLocationCommand = new DelegateCommand<object>(MoveLocationAction);            //Wafer尺寸集合            WaferSizeLst = new List<string>();            WaferSizeLst.Add("100");            WaferSizeLst.Add("150");            WaferSizeLst.Add("200");            //化学液集合            string chemistryContent = QueryDataClient.Instance.Service.GetConfig($"System.ChemistryList").ToString();            if (!string.IsNullOrEmpty(chemistryContent))            {                ChemistryLst = chemistryContent.Split(',').ToList();            }            //CrsType集合            string crstypeContent = QueryDataClient.Instance.Service.GetConfig($"System.LSType").ToString();            if(!string.IsNullOrEmpty(crstypeContent))            {                _crsTypeLst = crstypeContent.Split(',').ToList();            }            //Location集合            List<string> _rtDataKeys = new List<string>();            _rtDataKeys.Add("System.LayoutCellItems");            var _rtDataValueDic = QueryDataClient.Instance.Service.PollData(_rtDataKeys);            if (_rtDataValueDic != null)            {                //获取ProcessCell列表                LocationLst= CommonFunction.GetValue<List<string>>(_rtDataValueDic, "System.LayoutCellItems");                            }                                      }        /// <summary>        /// 加载数据        /// </summary>        public void LoadData(string systemName)        {            if (_timer == null)            {                _timer = new DispatcherTimer();                _timer.Interval = TimeSpan.FromMilliseconds(200);                _timer.Tick += Timer_Tick;            }            _timer.Start();            _rtDataKeys.Clear();            _rtDataKeys.Add($"Transporter1.IsBusy");            _rtDataKeys.Add($"Transporter2.IsBusy");            _rtDataKeys.Add("System.IsAutoMode");        }        /// <summary>        /// 定时器执行        /// </summary>        /// <param name="sender"></param>        /// <param name="e"></param>        private void Timer_Tick(object sender, EventArgs e)        {            if (_rtDataKeys.Count != 0)            {                _rtDataValueDic = QueryDataClient.Instance.Service.PollData(_rtDataKeys);                if (_rtDataValueDic != null)                {                    _isProcessTransBusy = CommonFunction.GetValue<bool>(_rtDataValueDic, $"Transporter1.IsBusy");                    _isLoaderTransBusy = CommonFunction.GetValue<bool>(_rtDataValueDic, $"Transporter2.IsBusy");                    _isAutoMode = CommonFunction.GetValue<bool>(_rtDataValueDic, $"System.IsAutoMode");                }            }        }        /// <summary>        /// 加载载具数据        /// </summary>        public void LoadWaferHolderDatas()        {            BufferDatas = new ObservableCollection<WaferHolderBufferData>();            for (int i = 1; i <= 16; i++)            {                BufferDatas.Add(new WaferHolderBufferData() { Id = i });            }            List<WaferHolderInfo> waferHolderInfos = WaferHolderDataClient.Instance.Service.GetAllWaferHolderDatas();            UpdateWaferHolderBufferDatas(waferHolderInfos);            GetUnusedWaferHolderData(waferHolderInfos);            IsEdit = false;            IsSaveandCancelEdit = false;            IsLocationEdit = false;        }        /// <summary>        /// 更新buffer数据        /// </summary>        /// <param name="waferHolderInfos"></param>        private void UpdateWaferHolderBufferDatas(List<WaferHolderInfo> waferHolderInfos)        {            for (int i=0;i< BufferDatas.Count;i++)            {                WaferHolderInfo holderInfo= waferHolderInfos.Find(O => O.BufferId == BufferDatas[i].Id && !string.IsNullOrEmpty(O.CurrentLocation));                if(holderInfo != null)                {                    SwitchWaferInfoToWaferHolderBufferData(holderInfo, BufferDatas[i]);                }            }        }        /// <summary>        /// 获取未使用载具数据        /// </summary>        /// <param name="waferHolderInfos"></param>        private void GetUnusedWaferHolderData(List<WaferHolderInfo> waferHolderInfos)        {            UnusedWaferHolders = new ObservableCollection<WaferHolderInfo>();            UnusedWaferHolders.AddRange(waferHolderInfos.FindAll(O => string.IsNullOrEmpty(O.CurrentLocation)));        }        /// <summary>        /// 检验选择        /// </summary>        /// <returns></returns>        private bool CheckSelection()        {            if (_selectedBufferData == null)            {                MessageBox.Show("please select one data", "Check", MessageBoxButton.OK, MessageBoxImage.Error);                return false;            }            if (string.IsNullOrEmpty(SelectedBufferData.WaferHolderId))            {                MessageBox.Show("empty data", "Check", MessageBoxButton.OK, MessageBoxImage.Error);                return false;            }            return true;        }        /// <summary>        /// 启用事件        /// </summary>        /// <param name="param"></param>        private void EnableAction(object param)        {            if(!CheckSelection())            {                return;            }            int result= WaferHolderDataClient.Instance.Service.UpdateWaferHolderEnable(SelectedBufferData.WaferHolderId, true);            if(result!=0)            {                SelectedBufferData.Enabled = "True";            }        }        /// <summary>        /// 启用事件        /// </summary>        /// <param name="param"></param>        private void DisableAction(object param)        {            if (!CheckSelection())            {                return;            }            int result= WaferHolderDataClient.Instance.Service.UpdateWaferHolderEnable(SelectedBufferData.WaferHolderId, false);            if(result!=0)            {                SelectedBufferData.Enabled = "False";            }        }        /// <summary>        /// 新增        /// </summary>        /// <param name="param"></param>        private void AddAction(object param)        {            if (_selectedBufferData == null)            {                MessageBox.Show("please select one data", "Add", MessageBoxButton.OK, MessageBoxImage.Error);                return;            }            if (!string.IsNullOrEmpty(SelectedBufferData.WaferHolderId))            {                MessageBox.Show("data exist,can not add operation", "Add", MessageBoxButton.OK, MessageBoxImage.Error);                return;            }            IsEditWaferHolderId = true;            operation = "Add";            InitialWaferHolderBuffer();            IsEdit = true;            IsSaveandCancelEdit = true;        }        /// <summary>        /// 初始数据        /// </summary>        private void InitialWaferHolderBuffer()        {            if(SelectedBufferData==null)            {                return;            }            TmpBufferData = new WaferHolderBufferData();            TmpBufferData.Enabled = "True";            TmpBufferData.Id = SelectedBufferData.Id;            TmpBufferData.CrsATotalUses = "0";            TmpBufferData.CrsAUsesSincePadClean = "0";            TmpBufferData.CrsAUsesSinceSealClean = "0";            TmpBufferData.CrsBTotalUses = "0";            TmpBufferData.CrsBUsesSincePadClean = "0";            TmpBufferData.CrsBUsesSinceSealClean = "0";            TmpBufferData.TotalDummyWafers = "0";            TmpBufferData.TotalProductWafers = "0";            TmpBufferData.TotalUses = "0";        }        /// <summary>        /// 编辑        /// </summary>        /// <param name="param"></param>        private void EditAction(object param)        {            if (!CheckSelection())            {                return;            }            if(string.IsNullOrEmpty(SelectedBufferData.WaferHolderId))            {                MessageBox.Show("empty data","Edit",MessageBoxButton.OK,MessageBoxImage.Error);                return;            }            operation= "edit";            IsEdit = true;            IsSaveandCancelEdit = true;        }        /// <summary>        /// 检验        /// </summary>        /// <returns></returns>        private bool Validation(out string reason)        {            reason = "";            if (string.IsNullOrEmpty(TmpBufferData.WaferHolderId))            {                reason = "WS Id is Empty";                return false;            }            if(string.IsNullOrEmpty(TmpBufferData.CrsType))            {                reason = "LS Type is Empty";                return false;            }            if (string.IsNullOrEmpty(TmpBufferData.WaferSize))            {                reason = "Wafer Size is empty";                return false;            }            if (string.IsNullOrEmpty(TmpBufferData.CrsAId))            {                reason = "LS-A Id is empty";                return false;            }            if (string.IsNullOrEmpty(TmpBufferData.CrsBId))            {                reason = "LS-B Id is empty";                return false;            }            if (TmpBufferData.CrsAId == TmpBufferData.CrsBId)            {                reason = "The LS Id of A and B can not be the same";                return false;            }            if (string.IsNullOrEmpty(TmpBufferData.Chemistry))            {                reason = "Chemistry is empty";                return false;            }            for (int i = 0; i < BufferDatas.Count; i++)            {                if ( BufferDatas[i].Id != TmpBufferData.Id && (TmpBufferData.CrsAId == BufferDatas[i].CrsAId || TmpBufferData.CrsAId == BufferDatas[i].CrsBId))                {                    reason = "LS-A Id is already exist";                    return false;                }                if ( BufferDatas[i].Id != TmpBufferData.Id && (TmpBufferData.CrsBId == BufferDatas[i].CrsBId || TmpBufferData.CrsBId == BufferDatas[i].CrsAId) )                {                    reason = "LS-B Id is already exist";                    return false;                }            }            TmpBufferData.TotalDummyWafers = string.IsNullOrEmpty(TmpBufferData.TotalDummyWafers) ? "0" : TmpBufferData.TotalDummyWafers;            TmpBufferData.TotalUses = string.IsNullOrEmpty(TmpBufferData.TotalUses) ? "0" : TmpBufferData.TotalUses;            TmpBufferData.TotalProductWafers = string.IsNullOrEmpty(TmpBufferData.TotalProductWafers) ? "0" : TmpBufferData.TotalProductWafers;            TmpBufferData.CrsATotalUses = string.IsNullOrEmpty(TmpBufferData.CrsATotalUses) ? "0" : TmpBufferData.CrsATotalUses;            TmpBufferData.CrsAUsesSincePadClean = string.IsNullOrEmpty(TmpBufferData.CrsAUsesSincePadClean) ? "0" : TmpBufferData.CrsAUsesSincePadClean;            TmpBufferData.CrsAUsesSinceSealClean = string.IsNullOrEmpty(TmpBufferData.CrsAUsesSinceSealClean) ? "0" : TmpBufferData.CrsAUsesSinceSealClean;            TmpBufferData.CrsBTotalUses = string.IsNullOrEmpty(TmpBufferData.CrsBTotalUses) ? "0" : TmpBufferData.CrsBTotalUses;            TmpBufferData.CrsBUsesSincePadClean = string.IsNullOrEmpty(TmpBufferData.CrsBUsesSincePadClean) ? "0" : TmpBufferData.CrsBUsesSincePadClean;            TmpBufferData.CrsBUsesSinceSealClean = string.IsNullOrEmpty(TmpBufferData.CrsBUsesSinceSealClean) ? "0" : TmpBufferData.CrsBUsesSinceSealClean;                        if(!CheckWaferHolderId())            {                reason = "WS Id exist";                return false;            }            return true;        }        /// <summary>        /// 检验载具唯 一性        /// </summary>        /// <returns></returns>        private bool CheckWaferHolderId()        {            string waferHolderId = TmpBufferData.WaferHolderId;            for(int i=0;i<BufferDatas.Count;i++)            {                if (waferHolderId == BufferDatas[i].WaferHolderId)                {                    if (BufferDatas[i].Id != TmpBufferData.Id)                    {                        return false;                    }                }            }            for(int i=0;i<UnusedWaferHolders.Count;i++)            {                if (waferHolderId == UnusedWaferHolders[i].Id)                {                    return false;                }            }            return true;        }        /// <summary>        /// 保存        /// </summary>        /// <param name="param"></param>        public void SaveAction(object  param)        {            bool validation = Validation(out var reason);            if(!validation)            {                WPFMessageBox.ShowError(reason);                return;            }            WaferHolderInfo info = WaferHolderBuferDataConvertToWaferHolderInfo();            int result = 0;            if(operation=="Add")            {                info.BufferId = SelectedBufferData.Id;                if(info.CurrentLocation == null)                {                    info.CurrentLocation = $"Buffer{info.BufferId}";                }                                  info.WaferAId = $"{info.Id}.01";                info.WaferBId = $"{info.Id}.02";                info.WaferAType = (int)WaferType.Assit;                info.WaferBType = (int)WaferType.Assit;                TmpBufferData.CurrentLocation = info.CurrentLocation;                result= WaferHolderDataClient.Instance.Service.AddWaferHolderData(SelectedBufferData.Id, info);            }else if(operation == "MoveLocation")            {                //判断能否更新位置                if (!string.IsNullOrEmpty(SelectedBufferData.CurrentLocation) && !string.IsNullOrEmpty(info.CurrentLocation))                {                    if (!_isLoaderTransBusy && !_isProcessTransBusy && !_isAutoMode)                    {                        info.WaferAId = $"{info.Id}.01";                        info.WaferBId = $"{info.Id}.02";                        info.WaferAType = (int)WaferType.Assit;                        info.WaferBType = (int)WaferType.Assit;                        result = WaferHolderDataClient.Instance.Service.UpdateWaferHolderData(SelectedBufferData.WaferHolderId, info,true);                        InvokeClient.Instance.Service.DoOperation($"WaferHolder.TransferWaferHolder", $"{SelectedBufferData.CurrentLocation}", $"{info.CurrentLocation}");                    }                    else if (_isAutoMode)                    {                        SelectedBufferData.SwitchData(TmpBufferData);                        MessageBox.Show("Auto mode can't do this operation", "Save", MessageBoxButton.OK, MessageBoxImage.Error);                    }                    else                    {                        SelectedBufferData.SwitchData(TmpBufferData);                        MessageBox.Show("Loader or Process Transporter is in Busy state", "Save", MessageBoxButton.OK, MessageBoxImage.Error);                    }                }                           }            else            {                //todo edit                info.BufferId = SelectedBufferData.Id;                info.WaferAId = $"{info.Id}.01";                info.WaferBId = $"{info.Id}.02";                info.WaferAType = (int)WaferType.Assit;                info.WaferBType = (int)WaferType.Assit;                result = WaferHolderDataClient.Instance.Service.UpdateWaferHolderData(SelectedBufferData.WaferHolderId, info, true);                            }            if (result > 0)            {                SetSelectedWaferHolderData();                            }            IsEdit = false;            IsLocationEdit = false;            IsSaveandCancelEdit = false;            operation = "";        }        /// <summary>        /// 取消        /// </summary>        /// <param name="param"></param>        public void CancelAction(object param)        {            if(operation=="Add")            {                TmpBufferData = new WaferHolderBufferData();            }            else            {                TmpBufferData = SelectedBufferData.Clone();            }            IsEdit = false;            IsSaveandCancelEdit = false;            IsLocationEdit= false;        }               /// <summary>        /// 移入        /// </summary>        /// <param name="param"></param>        public void MoveToLoaderAction(object param)        {            if(SelectedUnusedWaferHolderInfo==null)            {                MessageBox.Show("please select one unused data", "Move To Buffer", MessageBoxButton.OK, MessageBoxImage.Error);                return;            }            if(SelectedBufferData==null)            {                MessageBox.Show("please select one data", "Edit", MessageBoxButton.OK, MessageBoxImage.Error);                return;            }            if (!string.IsNullOrEmpty(SelectedBufferData.WaferHolderId))            {                MessageBox.Show("data exist,can not move operation", "Edit", MessageBoxButton.OK, MessageBoxImage.Error);                return;            }            if (MessageBox.Show("do you want to move selected wafer shuttle to buffer", "Move To Buffer", MessageBoxButton.YesNoCancel, MessageBoxImage.Question) == MessageBoxResult.Yes)            {                SelectedUnusedWaferHolderInfo.CurrentLocation = $"Buffer{SelectedBufferData.Id}";                SelectedUnusedWaferHolderInfo.BufferId = SelectedBufferData.Id;                int result = WaferHolderDataClient.Instance.Service.UpdateWaferHolderData(SelectedUnusedWaferHolderInfo.Id, SelectedUnusedWaferHolderInfo,true);                if (result != 0)                {                    SwitchWaferInfoToWaferHolderBufferData(SelectedUnusedWaferHolderInfo, SelectedBufferData);                    BufferDataSelectedChanged(SelectedBufferData);                    UnusedWaferHolders.Remove(SelectedUnusedWaferHolderInfo);                    SelectedUnusedWaferHolderInfo = null;                }            }        }        /// <summary>        /// 移出        /// </summary>        /// <param name="param"></param>        public void MoveFromLoaderAction(object  param)        {            if(!CheckSelection())            {                               return;            }            if (MessageBox.Show("do you want to move out selected wafer shuttle from buffer", "Move From Buffer", MessageBoxButton.YesNoCancel, MessageBoxImage.Question) == MessageBoxResult.Yes)            {                WaferHolderInfo info = WaferHolderBuferDataConvertToWaferHolderInfo();                string preLocation = info.CurrentLocation;                info.CurrentLocation = "";                int result = WaferHolderDataClient.Instance.Service.UpdateWaferHolderData(SelectedBufferData.WaferHolderId, info, true);                if (result != 0)                {                    TmpBufferData = new WaferHolderBufferData();                    TmpBufferData.Id = SelectedBufferData.Id;                    TmpBufferData.SwitchData(SelectedBufferData);                    UnusedWaferHolders.Add(info);                }            }        }        /// <summary>        /// 移除        /// </summary>        /// <param name="param"></param>        public void RemoveAction(object param)        {            if (SelectedUnusedWaferHolderInfo == null)            {                MessageBox.Show("please select one unused data", "Edit", MessageBoxButton.OK, MessageBoxImage.Error);                return;            }            if (MessageBox.Show("do you want to remove selected unused wafer shuttle","remove",MessageBoxButton.YesNoCancel,MessageBoxImage.Question)==MessageBoxResult.Yes)            {                int result = WaferHolderDataClient.Instance.Service.DeleteWaferHolderData(SelectedUnusedWaferHolderInfo.Id);                if (result != 0)                {                    UnusedWaferHolders.Remove(SelectedUnusedWaferHolderInfo);                    SelectedUnusedWaferHolderInfo = null;                }            }        }        /// <summary>        /// 编辑CurrentLocation        /// </summary>        /// <param name="param"></param>        private void MoveLocationAction(object param)        {            if (!CheckSelection())            {                return;            }            if (string.IsNullOrEmpty(SelectedBufferData.WaferHolderId))            {                MessageBox.Show("empty data", "Move Location", MessageBoxButton.OK, MessageBoxImage.Error);                return;            }            operation = "MoveLocation";            IsLocationEdit = true;            IsSaveandCancelEdit = true;        }        /// <summary>        /// 数据切换        /// </summary>        /// <param name="waferHolderBufferData"></param>        public void BufferDataSelectedChanged(WaferHolderBufferData waferHolderBufferData)        {            TmpBufferData=waferHolderBufferData.Clone();            IsEdit = false;            IsLocationEdit = false;            IsSaveandCancelEdit = false;        }        /// <summary>        /// 数据转换        /// </summary>        /// <returns></returns>        private WaferHolderInfo WaferHolderBuferDataConvertToWaferHolderInfo()        {            WaferHolderInfo info = new WaferHolderInfo();            info.Id = TmpBufferData.WaferHolderId;            info.CrsType = TmpBufferData.CrsType;            info.WaferSize = int.Parse(TmpBufferData.WaferSize);            info.Chemistry = TmpBufferData.Chemistry;            info.TotalUses = int.Parse(TmpBufferData.TotalUses);            info.TotalDummyWafers = int.Parse(TmpBufferData.TotalDummyWafers);            info.TotalProductWafers = int.Parse(TmpBufferData.TotalProductWafers);            info.CrsAId = TmpBufferData.CrsAId;            info.CrsATotalUses =int.Parse(TmpBufferData.CrsATotalUses);            info.CrsAUsesSincePadClean = int.Parse(TmpBufferData.CrsAUsesSincePadClean);            info.CrsAUsesSinceSealClean = int.Parse(TmpBufferData.CrsAUsesSinceSealClean);            info.CrsBId = TmpBufferData.CrsBId;            info.CrsBTotalUses = int.Parse(TmpBufferData.CrsBTotalUses);            info.CrsBUsesSincePadClean = int.Parse(TmpBufferData.CrsBUsesSincePadClean);            info.CrsBUsesSinceSealClean = int.Parse(TmpBufferData.CrsBUsesSinceSealClean);            info.Enabled =bool.Parse(TmpBufferData.Enabled);            info.CurrentLocation = TmpBufferData.CurrentLocation;            info.Status = info.Enabled ? WaferHolderStatus.Normal : WaferHolderStatus.Disabled;            return info;        }        /// <summary>        /// 交换载具数据至载具Buffer数据        /// </summary>        /// <param name="info"></param>        /// <param name="data"></param>        private void SwitchWaferInfoToWaferHolderBufferData(WaferHolderInfo info,WaferHolderBufferData data)        {            data.CrsType = info.CrsType;            data.WaferHolderId = info.Id;            data.CrsType = info.CrsType;            data.Chemistry = info.Chemistry;            data.WaferSize = info.WaferSize.ToString();            data.Enabled = info.Enabled.ToString();            data.TotalUses = info.TotalUses.ToString();            data.CrsAId = info.CrsAId;            data.CrsATotalUses = info.CrsATotalUses.ToString();            data.CrsAUsesSincePadClean = info.CrsAUsesSincePadClean.ToString();            data.CrsAUsesSinceSealClean = info.CrsAUsesSinceSealClean.ToString();            data.CrsBId = info.CrsBId;            data.CrsBTotalUses = info.CrsBTotalUses.ToString();            data.CrsBUsesSincePadClean = info.CrsBUsesSincePadClean.ToString();            data.CrsBUsesSinceSealClean = info.CrsBUsesSinceSealClean.ToString();            data.TotalDummyWafers = info.TotalDummyWafers.ToString();            data.TotalProductWafers = info.TotalProductWafers.ToString();            data.CurrentLocation = info.CurrentLocation;        }        /// <summary>        /// 将临时变量赋值        /// </summary>        private void SetSelectedWaferHolderData()        {            SelectedBufferData.Id = TmpBufferData.Id;            SelectedBufferData.WaferHolderId = TmpBufferData.WaferHolderId;            SelectedBufferData.Chemistry = TmpBufferData.Chemistry;            SelectedBufferData.CrsType = TmpBufferData.CrsType;            SelectedBufferData.WaferSize = TmpBufferData.WaferSize;            SelectedBufferData.TotalUses = TmpBufferData.TotalUses;            SelectedBufferData.TotalProductWafers = TmpBufferData.TotalProductWafers;            SelectedBufferData.TotalDummyWafers = TmpBufferData.TotalDummyWafers;            SelectedBufferData.CrsAId = TmpBufferData.CrsAId;            SelectedBufferData.CrsATotalUses = TmpBufferData.CrsATotalUses;            SelectedBufferData.CrsAUsesSincePadClean = TmpBufferData.CrsBUsesSincePadClean;            SelectedBufferData.CrsAUsesSinceSealClean = TmpBufferData.CrsAUsesSinceSealClean;            SelectedBufferData.CrsBId = TmpBufferData.CrsBId;            SelectedBufferData.CrsBTotalUses = TmpBufferData.CrsBTotalUses;            SelectedBufferData.CrsBUsesSincePadClean = TmpBufferData.CrsBUsesSincePadClean;            SelectedBufferData.CrsBUsesSinceSealClean = TmpBufferData.CrsBUsesSinceSealClean;            SelectedBufferData.Enabled = TmpBufferData.Enabled;            SelectedBufferData.CurrentLocation = TmpBufferData.CurrentLocation;        }    }}
 |