using Cognex.VisionPro; using Cognex.VisionPro.ToolBlock; 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; using TeamAAS_VP.Core; using TeamAAS_VP.Events; using TeamAAS_VP.Interfaces; using TeamAAS_VP.Models; using TeamAAS_VP.Models.Calibration; using TeamAAS_VP.Models.Product; using TeamAAS_VP.Models.Lights; namespace TeamAAS_VP.ViewModels.Product { public class ProcessBasicsViewModel : BindableBase, IConfirmNavigationRequest { IRegionManager _regionManager; IEventAggregator _eventAggregator; IContainerProvider _container; IDialogService _dialogService; IConfigService _configService; ICalibrationService _calibrationService; ISystemDatabaseService _systemDatabaseService; #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 = _configService.GetAllRobots().FirstOrDefault(p => p.Id == value.RobotId); SelectFeeder = _configService.GetAllFeeders().FirstOrDefault(p => p.Id == value.FeederId); SelectCalibration = _calibrationService.GetAllCalibrations().FirstOrDefault(p => p.Id == value.CalibrationId); } } } private ObservableCollection _ProcedureModels; /// /// 流程集合 /// public ObservableCollection ProcedureModels { get { return _ProcedureModels; } set { SetProperty(ref _ProcedureModels,value); } } private RobotInfo _SelectRobot; public RobotInfo SelectRobot { get { if (SelectProcedure != null) { if (SelectProcedure.RobotId == Guid.Empty) { return null; } else { return _configService.GetAllRobots().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 _configService.GetAllFeeders().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 _calibrationService.GetAllCalibrations().FirstOrDefault(p => p.Id == SelectProcedure.CalibrationId); } else { return null; } } set { SetProperty(ref _SelectCalibration, value); if(SelectProcedure==null) return; try { if (value == null) { SelectProcedure.CalibrationId = Guid.Empty; } else { if (SelectProcedure != null) SelectProcedure.CalibrationId = value.Id; } } catch (Exception) { } } } private ObservableCollection _RobotList; public ObservableCollection RobotList { get { return _RobotList; } set { SetProperty(ref _RobotList, value); } } private ObservableCollection _FeederList; public ObservableCollection FeederList { get { return _FeederList; } set { SetProperty(ref _FeederList, value); } } private ObservableCollection _CalibrationList; public ObservableCollection CalibrationList { get { return _CalibrationList; } set { SetProperty(ref _CalibrationList, value); } } private ChannelConfig _SelectedLightChannel; public ChannelConfig SelectedLightChannel { get { return _SelectedLightChannel; } set { SetProperty(ref _SelectedLightChannel, value); // no additional action } } 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)); private DelegateCommand _AddLightChannelCommand; public DelegateCommand AddLightChannelCommand => _AddLightChannelCommand ?? (_AddLightChannelCommand = new DelegateCommand(ExecuteAddLightChannelCommand)); private DelegateCommand _RemoveLightChannelCommand; public DelegateCommand RemoveLightChannelCommand => _RemoveLightChannelCommand ?? (_RemoveLightChannelCommand = new DelegateCommand(ExecuteRemoveLightChannelCommand).ObservesCanExecute(() => SelectedLightChannel != null)); #endregion #region 事件 #endregion public ProcessBasicsViewModel(IRegionManager regionManager, IEventAggregator ea, IContainerProvider container, IDialogService dialogService, IConfigService configService, ICalibrationService calibrationService, ISystemDatabaseService systemDatabaseService) { _regionManager = regionManager; _eventAggregator = ea; _container = container; _dialogService = dialogService; _configService = configService; _calibrationService = calibrationService; _systemDatabaseService = systemDatabaseService; //订阅权限登录事件 _eventAggregator.GetEvent().Subscribe(LoginChange); } #region 方法 /// /// 窗体加载事件 /// void ExecuteLoadedCommand() { if (_systemDatabaseService.GetCurrentUser().userPart == Enums.UserPart.Operator) { IsAllowEdit = false; } else { IsAllowEdit = true; } } /// /// 下一步 /// 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; // } //} NavigationParameters param = new NavigationParameters(); param.Add("SelectProduct", SelectProduct); param.Add("SelectedProcedure", SelectProcedure); _regionManager.RequestNavigate("ProductRegionContext", "CameraParams", param); } catch (Exception ex) { _eventAggregator.GetEvent().Publish(new MessageParameter() { Msg = ex.Message, Duration = 1 }); LogHelper.WriteLogError("产品配置-加载流程时出错",ex); } } /// /// 上一步 /// void ExecuteBackCommand() { NavigationParameters param = new NavigationParameters(); param.Add("SelectProduct", SelectProduct); param.Add("SelectedProcedure", SelectProcedure); _regionManager.RequestNavigate("ProductRegionContext", "ProductProcessManage", param); } /// /// 跳转至点位界面 /// void ExecutePointPageCommand() { NavigationParameters param = new NavigationParameters(); param.Add("SelectProduct", SelectProduct); _regionManager.RequestNavigate("ProductRegionContext", "PlcPointParams", param); } /// /// 添加光源通道 /// void ExecuteAddLightChannelCommand() { if (SelectProcedure == null) return; if (SelectProcedure.LightChannels == null) SelectProcedure.LightChannels = new System.Collections.ObjectModel.ObservableCollection(); var ch = new ChannelConfig { Name = $"Channel {SelectProcedure.LightChannels.Count + 1}", LocalIndex = SelectProcedure.LightChannels.Count, GlobalIndex = SelectProcedure.LightChannels.Count + 1, DefaultBrightness = 100 }; SelectProcedure.LightChannels.Add(ch); } /// /// 移除光源通道 /// void ExecuteRemoveLightChannelCommand() { if (SelectProcedure == null || SelectedLightChannel == null) return; SelectProcedure.LightChannels.Remove(SelectedLightChannel); SelectedLightChannel = null; } /// /// 流程选择 /// /// /// 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 #region 继承 /// /// 确认导航请求时调用。此方法允许您在导航之前执行一些操作。 /// /// /// public void ConfirmNavigationRequest(NavigationContext navigationContext, Action continuationCallback) { continuationCallback(true); } /// /// 接收导航请求时调用。传入导航参数,包含有关导航目标的信息。 /// /// /// public async void OnNavigatedTo(NavigationContext navigationContext) { SelectProduct = navigationContext.Parameters.GetValue("SelectProduct"); ProcedureModels = new ObservableCollection(); foreach (var item in SelectProduct.CameraProcedures) { foreach (var item1 in item.ProcedureModels) { ProcedureModels.Add(item1); } } RobotList= new ObservableCollection(_configService.GetAllRobots()); FeederList= new ObservableCollection(_configService.GetAllFeeders()); CalibrationList= new ObservableCollection(_calibrationService.GetAllCalibrations()); if (navigationContext.Parameters.ContainsKey("SelectedProcedure")) { SelectProcedure = navigationContext.Parameters.GetValue("SelectedProcedure"); } } /// /// 是否允许导航到此视图模型。 /// /// /// 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; } } } }