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.Lights; using TeamAAS_VP.Models.Product; using TeamAAS_VP.Resources.Languages; using TeamAAS_VP.Services; 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); var camera = _configService.GetCamera(value.CameraId); _isAllowEditDisplay = false; DisplatConfigs.Clear(); foreach (var item in camera.DisplatConfigs) { DisplatConfigs.Add(item.Copy()); } _isAllowEditDisplay = true; SelectedDisplay = DisplatConfigs.FirstOrDefault(p => p.Id == value.DisplayId); } } } 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 bool _isAllowEditDisplay = true; private DisplayConfig _SelectedDisplay; public DisplayConfig SelectedDisplay { get { if (SelectProcedure != null) { return DisplatConfigs.FirstOrDefault(p => p.Id == SelectProcedure.DisplayId); } else { return null; } } set { if (!_isAllowEditDisplay) { return; } SetProperty(ref _SelectedDisplay, value); if (SelectProcedure == null) return; try { if (value == null) { SelectProcedure.DisplayId = Guid.Empty; } else { if (SelectProcedure != null) { SelectProcedure.DisplayId = value.Id; SelectProcedure.DisplayName = value.DisplayName; } } } 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; } } } private ObservableCollection _DisplatConfigs; /// /// 用于显示图像的配置集合 /// public ObservableCollection DisplatConfigs { get { return _DisplatConfigs; } set { SetProperty(ref _DisplatConfigs, value); } } #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 _SelectLightChannelCommand; public DelegateCommand SelectLightChannelCommand => _SelectLightChannelCommand ?? (_SelectLightChannelCommand = new DelegateCommand(ExecuteSelectLightChannelCommand)); #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 ExecuteSelectLightChannelCommand() { if (SelectProcedure == null) return; if (SelectProcedure.LightChannels == null) SelectProcedure.LightChannels = new ObservableCollection(); DialogParameters keyValues = new DialogParameters(); keyValues.Add("Channels", SelectProcedure.LightChannels.ToArray()); _dialogService.ShowDialog("LightChannelList", keyValues, rst => { //对话框关闭之后的回调函数,可以在这解析结果。 ButtonResult result1 = rst.Result; if (result1 == ButtonResult.OK) { ChannelConfig[] channels = rst.Parameters.GetValue("Channels"); SelectProcedure.LightChannels = new ObservableCollection(channels); _eventAggregator.GetEvent().Publish(new MessageParameter() { Msg = $"{Lang.添加完成}", Duration = 1 }); } }); } /// /// 流程选择 /// /// /// 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()); DisplatConfigs = new ObservableCollection(); 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; } } } }