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.ComponentModel; using System.Diagnostics.Eventing.Reader; using System.IO; using System.Linq; using TeamAAS_VP.Events; using TeamAAS_VP.Core; using TeamAAS_VP.Models; using TeamAAS_VP; using Cognex.VisionPro.ToolBlock; using Cognex.VisionPro; namespace TeamAAS_VP.ViewModels.Product { public class ProcessBasicsViewModel : BindableBase { IRegionManager _regionManager; IEventAggregator _eventAggregator; IContainerProvider _container; IDialogService _dialogService; ProductsViewModel productsViewModel; #region 属性 private ProductModel _SelectProduct; /// /// 选中的产品 /// public ProductModel SelectProduct { get { return _SelectProduct; } set { SetProperty(ref _SelectProduct, value); } } private ProcedureModel _SelectProcedure; /// /// 选中的流程 /// public ProcedureModel SelectProcedure { get { return _SelectProcedure; } set { SetProperty(ref _SelectProcedure, value); if (value == null) { SelectRobot = null; SelectFeeder = null; SelectCalibration = null; } else { SelectRobot = management.DeviceConfig.Robots.FirstOrDefault(p => p.Id == value.RobotId); SelectFeeder = management.DeviceConfig.Feeders.FirstOrDefault(p => p.Id == value.FeederId); SelectCalibration = management.DeviceConfig.Calibrations.FirstOrDefault(p => p.Id == value.CalibrationId); } } } private ObservableCollection _ProcedureModels; /// /// 流程集合 /// public ObservableCollection ProcedureModels { get { return _ProcedureModels; } set { SetProperty(ref _ProcedureModels,value); } } private Management _management; public Management management { get { return _management; } set { SetProperty(ref _management,value); } } private RobotInfo _SelectRobot; public RobotInfo SelectRobot { get { if (SelectProcedure != null) { if (SelectProcedure.RobotId == Guid.Empty) { return null; } else { return management.DeviceConfig.Robots.FirstOrDefault(p => p.Id == SelectProcedure.RobotId); } } else { return null; } } set { SetProperty(ref _SelectRobot, value); if (value == null) { if (SelectProcedure!=null) { SelectProcedure.RobotId = Guid.Empty; } return; } if (SelectProcedure != null) SelectProcedure.RobotId = value.Id; } } private FeederInfo _SelectFeeder; public FeederInfo SelectFeeder { get { if (SelectProcedure != null) { if (SelectProcedure.FeederId==Guid.Empty) { return null; } else { return management.DeviceConfig.Feeders.FirstOrDefault(p => p.Id == SelectProcedure.FeederId); } } else { return null; } } set { SetProperty(ref _SelectFeeder, value); if (value == null) { if (SelectProcedure != null) { SelectProcedure.FeederId = Guid.Empty; } return; } if (SelectProcedure != null) SelectProcedure.FeederId = value.Id; } } private CalibrationInfo _SelectCalibration; public CalibrationInfo SelectCalibration { get { if (SelectProcedure != null) { return management.DeviceConfig.Calibrations.FirstOrDefault(p => p.Id == SelectProcedure.CalibrationId); } else { return null; } } set { SetProperty(ref _SelectCalibration, value); if (value == null) return; if (SelectProcedure != null) SelectProcedure.CalibrationId = value.Id; } } private bool CanNext { get { if (SelectProcedure!=null && !string.IsNullOrEmpty(SelectProcedure.TriggerCommand)) { return true; } else { return false; } } } #endregion #region 命令 private DelegateCommand _NextCommand; public DelegateCommand NextCommand => _NextCommand ?? (_NextCommand = new DelegateCommand(ExecuteNextCommand).ObservesCanExecute(()=> CanNext).ObservesProperty(()=> SelectProcedure).ObservesProperty(() => SelectProcedure.TriggerCommand)); private DelegateCommand _BackCommand; public DelegateCommand BackCommand => _BackCommand ?? (_BackCommand = new DelegateCommand(ExecuteBackCommand)); private DelegateCommand _PointPageCommand; public DelegateCommand PointPageCommand => _PointPageCommand ?? (_PointPageCommand = new DelegateCommand(ExecutePointPageCommand)); private DelegateCommand _LoadedCommand; public DelegateCommand LoadedCommand => _LoadedCommand ?? (_LoadedCommand = new DelegateCommand(ExecuteLoadedCommand)); #endregion #region 事件 #endregion public ProcessBasicsViewModel(IRegionManager regionManager, IEventAggregator ea, IContainerProvider container, IDialogService dialogService) { _regionManager = regionManager; _eventAggregator = ea; _container = container; _dialogService = dialogService; //订阅权限登录事件 _eventAggregator.GetEvent().Subscribe(LoginChange); productsViewModel = _container.Resolve(); SelectProduct = productsViewModel.SelectProduct; ProcedureModels=new ObservableCollection(); foreach (var item in SelectProduct.CameraProcedures) { foreach (var item1 in item.ProcedureModels) { ProcedureModels.Add(item1); } } management= _container.Resolve(); } #region 方法 /// /// 窗体加载事件 /// void ExecuteLoadedCommand() { if (_container.Resolve().CurrentUser.userPart == Enums.UserPart.Operator) { IsAllowEdit = false; } else { IsAllowEdit = true; } try { productsViewModel = _container.Resolve(); SelectProduct = productsViewModel.SelectProduct; ProcedureModels = new ObservableCollection(); foreach (var item in SelectProduct.CameraProcedures) { foreach (var item1 in item.ProcedureModels) { ProcedureModels.Add(item1); } } management = _container.Resolve(); } catch (Exception ex) { LogHelper.WriteLogError("流程基础界面-加载时出错", ex); } } /// /// 下一步 /// void ExecuteNextCommand() { try { if(SelectProcedure==null) return; if (SelectProduct.IsCreate && SelectProcedure.ToolBlock == null) { SelectProcedure.ToolBlock = CogSerializer.LoadObjectFromFile(FilePath.SimpleProcedurePath) as CogToolBlock; } else if (SelectProcedure.ToolBlock == null) { string prcPath = FilePath.ProductsPath + "//" + SelectProduct.Name + "//" + SelectProcedure.CameraName + "//" + SelectProcedure.Name + ".vpp"; if (File.Exists(prcPath)) { SelectProcedure.ToolBlock = CogSerializer.LoadObjectFromFile(prcPath) as CogToolBlock; } else { SelectProcedure.ToolBlock = CogSerializer.LoadObjectFromFile(FilePath.SimpleProcedurePath) as CogToolBlock; } } _regionManager.RequestNavigate("ProductRegionContext", "CameraParams"); } catch (Exception ex) { _eventAggregator.GetEvent().Publish(new MessageParameter() { Msg = ex.Message, Duration = 1 }); LogHelper.WriteLogError("产品配置-加载流程时出错",ex); } } /// /// 上一步 /// void ExecuteBackCommand() { _regionManager.RequestNavigate("ProductRegionContext", "ProductProcessManage"); } /// /// 跳转至点位界面 /// void ExecutePointPageCommand() { _regionManager.RequestNavigate("ProductRegionContext", "RobotPointParams"); } /// /// 流程选择 /// /// /// public void ComboBox_MouseDown(object sender, System.Windows.Input.MouseButtonEventArgs e) { //ProcedureModels.Clear(); //foreach (var item in SelectProduct.CameraProcedures) //{ // foreach (var item1 in item.ProcedureModels) // { // ProcedureModels.Add(item1); // } //} } #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; } } } }