using MaterialDesignThemes.Wpf; using Prism.Commands; using Prism.Events; using Prism.Ioc; using Prism.Mvvm; using Prism.Regions; using Prism.Services.Dialogs; using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; using System.Threading.Tasks; using System.Windows; using Team.FFFeederService.Interfaces; using TeamAAS_VP.Controls; using TeamAAS_VP.Core; using TeamAAS_VP.Events; using TeamAAS_VP.Interfaces; using TeamAAS_VP.Models; using TeamAAS_VP.Resources.Languages; using TeamAAS_VP.Services; namespace TeamAAS_VP.ViewModels.Product { public class ProductParamsViewModel : BindableBase, IConfirmNavigationRequest { IRegionManager _regionManager; IEventAggregator _eventAggregator; IContainerProvider _container; IDialogService _dialogService; IConfigService _configService; IRobotService _robotService; ICameraService _cameraService; IFeederService _feederService; IPlcService _plcService; IProductService _productService; ISystemDatabaseService _systemDatabaseService; #region 属性 private ProductModel _SelectProduct; /// /// 选中的产品 /// public ProductModel SelectProduct { get { return _SelectProduct; } set { SetProperty(ref _SelectProduct, value); } } private Management _management; public Management management { get { return _management; } set { SetProperty(ref _management, value); } } private ObservableCollection _ProcedureModels; /// /// 流程集合 /// public ObservableCollection ProcedureModels { get { return _ProcedureModels; } set { SetProperty(ref _ProcedureModels, value); } } private ProcedureModel _FixedUpCamera1Procedure; /// /// 固定向上相机1视觉流程 /// public ProcedureModel FixedUpCamera1Procedure { get { return _FixedUpCamera1Procedure; } set { SetProperty(ref _FixedUpCamera1Procedure, value); if (value != null) { SelectProduct.FixedUpCamera1ProcedureId = value.Id; } } } private ProcedureModel _FixedUpCamera2Procedure; /// /// 固定向上相机2视觉流程 /// public ProcedureModel FixedUpCamera2Procedure { get { return _FixedUpCamera2Procedure; } set { SetProperty(ref _FixedUpCamera2Procedure, value); if (value != null) { SelectProduct.FixedUpCamera2ProcedureId = value.Id; } } } private ProcedureModel _FixedDownCameraProcedure; /// /// 固定向下相机取料流程ID /// public ProcedureModel FixedDownCameraProcedure { get { return _FixedDownCameraProcedure; } set { SetProperty(ref _FixedDownCameraProcedure, value); if (value != null) { SelectProduct.FixedDownCameraProcedureId = value.Id; } } } private ProcedureModel _MoveDownCameraLockPhotoProcedure; /// /// 移动向下相机锁付拍照流程ID /// public ProcedureModel MoveDownCameraLockPhotoProcedure { get { return _MoveDownCameraLockPhotoProcedure; } set { SetProperty(ref _MoveDownCameraLockPhotoProcedure, value); if (value != null) { SelectProduct.MoveDownCameraLockPhotoProcedureId = value.Id; } } } private ProcedureModel _QrCodePhotoProcedure; /// /// 移动向下相机锁付拍照流程ID /// public ProcedureModel QrCodePhotoProcedure { get { return _QrCodePhotoProcedure; } set { SetProperty(ref _QrCodePhotoProcedure, value); if (value != null) { SelectProduct.QrCodeProcedureId = value.Id; } } } private ProcedureModel _FzCameraProcedure; /// /// 翻转相机视觉流程 /// public ProcedureModel FzCameraProcedure { get { return _FzCameraProcedure; } set { SetProperty(ref _FzCameraProcedure, value); if (value != null) { SelectProduct.FzCameraProcedureId = value.Id; } } } #endregion #region 命令 private DelegateCommand _NextCommand; public DelegateCommand NextCommand => _NextCommand ?? (_NextCommand = new DelegateCommand(ExecuteNextCommand)); private DelegateCommand _BackCommand; public DelegateCommand BackCommand => _BackCommand ?? (_BackCommand = new DelegateCommand(ExecuteBackCommand)); private DelegateCommand _LoadedCommand; public DelegateCommand LoadedCommand => _LoadedCommand ?? (_LoadedCommand = new DelegateCommand(ExecuteLoadedCommand)); #endregion #region 事件 #endregion public ProductParamsViewModel(IRegionManager regionManager, IEventAggregator ea, IContainerProvider container, IDialogService dialogService, IConfigService configService, IRobotService robotService, ICameraService cameraService, IFeederService feederService, IPlcService plcService, IProductService productService, ISystemDatabaseService systemDatabaseService) { _regionManager = regionManager; _eventAggregator = ea; _container = container; _dialogService = dialogService; _configService = configService; _robotService = robotService; _cameraService = cameraService; _feederService = feederService; _plcService = plcService; _productService = productService; _systemDatabaseService = systemDatabaseService; //订阅权限登录事件 _eventAggregator.GetEvent().Subscribe(LoginChange); management = _container.Resolve(); } #region 方法 /// /// 完成 /// async void ExecuteNextCommand() { ResetId(); if (MessageBox.Show(Lang.是否保存产品.Replace("[{0}]", ""), Lang.保存产品, MessageBoxButton.YesNo, MessageBoxImage.Question) == MessageBoxResult.Yes) { var waiting = new WaitingControl(); //show the dialog var task = DialogHost.Show(waiting, "RootDialog", null, null, null); await _productService.UpdateProductAsync(SelectProduct); var current = _productService.GetCurrentProduct(); if (current != null && current.IsLoad) { await management.WriteParameterToPlcExAsync(); } if (DialogHost.IsDialogOpen("RootDialog")) { DialogHost.Close("RootDialog"); } await task; App.Current.Dispatcher.Invoke(() => { _eventAggregator.GetEvent().Publish(new Models.MessageStruct() { Message = "保存配方参数成功...", level = Enums.MessageLevel.Info }); }); } NavigationParameters param = new NavigationParameters(); param.Add("SelectProduct", SelectProduct); _regionManager.RequestNavigate("ProductRegionContext", "ProductHome", param); } private void ResetId() { if (FixedUpCamera1Procedure == null) { SelectProduct.FixedUpCamera1ProcedureId = Guid.Empty; } if (FixedUpCamera2Procedure == null) { SelectProduct.FixedUpCamera2ProcedureId = Guid.Empty; } if (FixedDownCameraProcedure == null) { SelectProduct.FixedDownCameraProcedureId = Guid.Empty; } if (MoveDownCameraLockPhotoProcedure == null) { SelectProduct.MoveDownCameraLockPhotoProcedureId = Guid.Empty; } } /// /// 上一步 /// void ExecuteBackCommand() { NavigationParameters param = new NavigationParameters(); param.Add("SelectProduct", SelectProduct); _regionManager.RequestNavigate("ProductRegionContext", "PlcPointParams", param); } void ExecuteLoadedCommand() { if (_systemDatabaseService.GetCurrentUser().userPart == Enums.UserPart.Operator) { IsAllowEdit = false; } else { IsAllowEdit = true; } } #endregion #region 继承 /// /// 确认导航请求时调用。此方法允许您在导航之前执行一些操作。 /// /// /// public void ConfirmNavigationRequest(NavigationContext navigationContext, Action continuationCallback) { continuationCallback(true); } /// /// 接收导航请求时调用。传入导航参数,包含有关导航目标的信息。 /// /// /// public async void OnNavigatedTo(NavigationContext navigationContext) { try { SelectProduct = navigationContext.Parameters.GetValue("SelectProduct"); ProcedureModels = new ObservableCollection(); foreach (var item in SelectProduct.CameraProcedures) { foreach (var item1 in item.ProcedureModels) { ProcedureModels.Add(item1); } } if (SelectProduct.FixedUpCamera1ProcedureId!=Guid.Empty) { FixedUpCamera1Procedure = ProcedureModels.FirstOrDefault(p => p.Id == SelectProduct.FixedUpCamera1ProcedureId); } if (SelectProduct.FixedUpCamera2ProcedureId != Guid.Empty) { FixedUpCamera2Procedure = ProcedureModels.FirstOrDefault(p => p.Id == SelectProduct.FixedUpCamera2ProcedureId); } if (SelectProduct.FixedDownCameraProcedureId != Guid.Empty) { FixedDownCameraProcedure = ProcedureModels.FirstOrDefault(p => p.Id == SelectProduct.FixedDownCameraProcedureId); } if (SelectProduct.MoveDownCameraLockPhotoProcedureId != Guid.Empty) { MoveDownCameraLockPhotoProcedure = ProcedureModels.FirstOrDefault(p => p.Id == SelectProduct.MoveDownCameraLockPhotoProcedureId); } if (SelectProduct.QrCodeProcedureId != Guid.Empty) { QrCodePhotoProcedure = ProcedureModels.FirstOrDefault(p => p.Id == SelectProduct.QrCodeProcedureId); } if (SelectProduct.FzCameraProcedureId != Guid.Empty) { FzCameraProcedure = ProcedureModels.FirstOrDefault(p => p.Id == SelectProduct.FzCameraProcedureId); } } catch (Exception ex) { LogHelper.WriteLogError(Lang.机器人点位界面进入时出错, ex); } } /// /// 是否允许导航到此视图模型。 /// /// /// public bool IsNavigationTarget(NavigationContext navigationContext) { return true; } /// /// 导航离开此视图模型时调用。您可以在此处执行清理操作或保存状态。 /// /// public void OnNavigatedFrom(NavigationContext navigationContext) { } #endregion private bool _IsAllowEdit = false; public bool IsAllowEdit { get { return _IsAllowEdit; } set { SetProperty(ref _IsAllowEdit, value); } } private void LoginChange(Models.User user) { if (user.userPart == Enums.UserPart.Operator) { IsAllowEdit = false; } else { IsAllowEdit = true; } } } }