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 _FixedDownCamera1Procedure; /// /// 固定向下相机1取料流程ID /// public ProcedureModel FixedDownCamera1Procedure { get { return _FixedDownCamera1Procedure; } set { SetProperty(ref _FixedDownCamera1Procedure, value); if (value != null) { SelectProduct.FixedDownCamera1ProcedureId = value.Id; } } } private ProcedureModel _FixedDownCamera2Procedure; /// /// 固定向下相机2取料流程ID /// public ProcedureModel FixedDownCamera2Procedure { get { return _FixedDownCamera2Procedure; } set { SetProperty(ref _FixedDownCamera2Procedure, value); if (value != null) { SelectProduct.FixedDownCamera2ProcedureId = value.Id; } } } private ProcedureModel _MoveDownCamera1LockPhotoProcedure; /// /// 移动向下相机1锁付拍照流程ID /// public ProcedureModel MoveDownCamera1LockPhotoProcedure { get { return _MoveDownCamera1LockPhotoProcedure; } set { SetProperty(ref _MoveDownCamera1LockPhotoProcedure, value); if (value != null) { SelectProduct.MoveDownCamera1LockPhotoProcedureId = value.Id; } } } private ProcedureModel _MoveDownCamera2LockPhotoProcedure; /// /// 移动向下相机2锁付拍照流程ID /// public ProcedureModel MoveDownCamera2LockPhotoProcedure { get { return _MoveDownCamera2LockPhotoProcedure; } set { SetProperty(ref _MoveDownCamera2LockPhotoProcedure, value); if (value != null) { SelectProduct.MoveDownCamera2LockPhotoProcedureId = value.Id; } } } private ProcedureModel _MoveDownCamer1PickPhotoProcedureId; /// /// 移动向下相机1取料拍照流程ID /// public ProcedureModel MoveDownCamer1PickPhotoProcedureId { get { return _MoveDownCamer1PickPhotoProcedureId; } set { SetProperty(ref _MoveDownCamer1PickPhotoProcedureId, value); if (value != null) { SelectProduct.MoveDownCamer1PickPhotoProcedureId = value.Id; } } } private ProcedureModel _MoveDownCamer2PickPhotoProcedureId; /// /// 移动向下相机2取料拍照流程ID /// public ProcedureModel MoveDownCamer2PickPhotoProcedureId { get { return _MoveDownCamer2PickPhotoProcedureId; } set { SetProperty(ref _MoveDownCamer2PickPhotoProcedureId, value); if (value != null) { SelectProduct.MoveDownCamer2PickPhotoProcedureId = 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() { 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.WritePositionToPlcAsync(); } if (DialogHost.IsDialogOpen("RootDialog")) { DialogHost.Close("RootDialog"); } await task; } NavigationParameters param = new NavigationParameters(); param.Add("SelectProduct", SelectProduct); _regionManager.RequestNavigate("ProductRegionContext", "ProductHome", param); } /// /// 上一步 /// 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.FixedDownCamera1ProcedureId != Guid.Empty) { FixedDownCamera1Procedure = ProcedureModels.FirstOrDefault(p => p.Id == SelectProduct.FixedDownCamera1ProcedureId); } if (SelectProduct.FixedDownCamera2ProcedureId != Guid.Empty) { FixedDownCamera2Procedure = ProcedureModels.FirstOrDefault(p => p.Id == SelectProduct.FixedDownCamera2ProcedureId); } if (SelectProduct.MoveDownCamera1LockPhotoProcedureId != Guid.Empty) { MoveDownCamera1LockPhotoProcedure = ProcedureModels.FirstOrDefault(p => p.Id == SelectProduct.MoveDownCamera1LockPhotoProcedureId); } if (SelectProduct.MoveDownCamera2LockPhotoProcedureId != Guid.Empty) { MoveDownCamera2LockPhotoProcedure = ProcedureModels.FirstOrDefault(p => p.Id == SelectProduct.MoveDownCamera2LockPhotoProcedureId); } if (SelectProduct.MoveDownCamer1PickPhotoProcedureId != Guid.Empty) { MoveDownCamer1PickPhotoProcedureId = ProcedureModels.FirstOrDefault(p => p.Id == SelectProduct.MoveDownCamer1PickPhotoProcedureId); } if (SelectProduct.MoveDownCamer2PickPhotoProcedureId != Guid.Empty) { MoveDownCamer2PickPhotoProcedureId = ProcedureModels.FirstOrDefault(p => p.Id == SelectProduct.MoveDownCamer2PickPhotoProcedureId); } } catch (Exception ex) { LogHelper.WriteLogError("机器人点位界面进入时出错!", 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; } } } }