using Prism.Commands; using Prism.Ioc; using Prism.Mvvm; using Prism.Services.Dialogs; using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using System.Windows; using TeamAAS_VP.Core; using TeamAAS_VP.Interfaces; using TeamAAS_VP.Models; namespace TeamAAS_VP.ViewModels.Home { public class ChangeNozzleViewModel : BindableBase, IDialogAware { ISystemDatabaseService _systemDatabaseService; IContainerProvider _container; private string _currentNozzleBatchNumber; private int _currentLockCount; private string _lastChangeTime; private string _newNozzleBatchNumber; public ChangeNozzleViewModel(ISystemDatabaseService systemDatabaseService, IContainerProvider containerProvider) { _systemDatabaseService = systemDatabaseService; _container = containerProvider; ReplaceCommand = new DelegateCommand(ExecuteReplaceCommand, () => string.IsNullOrEmpty(NewNozzleBatchNumber)).ObservesProperty(() => NewNozzleBatchNumber); CloseCommand = new DelegateCommand(ExecuteCloseCommand); } public string Title => "更换吸嘴"; public event Action RequestClose; public bool CanCloseDialog() { return true; } public void OnDialogClosed() { } public async void OnDialogOpened(IDialogParameters parameters) { var latestRecord = await _systemDatabaseService.GetLatestNozzleChangeRecordAsync(); if (latestRecord != null) { CurrentNozzleBatchNumber = latestRecord.NozzleBatchNumber; CurrentLockCount = latestRecord.CurrentLockCount; LastChangeTime = latestRecord.ChangeTime.ToString("yyyy-MM-dd HH:mm:ss"); } } public DelegateCommand ReplaceCommand { get; } public DelegateCommand CloseCommand { get; } public string CurrentNozzleBatchNumber { get => _currentNozzleBatchNumber; set => SetProperty(ref _currentNozzleBatchNumber, value); } public int CurrentLockCount { get => _currentLockCount; set => SetProperty(ref _currentLockCount, value); } public string LastChangeTime { get => _lastChangeTime; set => SetProperty(ref _lastChangeTime, value); } public string NewNozzleBatchNumber { get => _newNozzleBatchNumber; set => SetProperty(ref _newNozzleBatchNumber, value); } private async void ExecuteReplaceCommand() { try { //当前用户 var currentUser = await _systemDatabaseService.GetCurrentUserAsync(); //当前用户名 string operatorName = currentUser != null ? currentUser.UserName : "未知用户"; await _systemDatabaseService.RecordNozzleChangeAsync(new NozzleChangeRecord() { NozzleBatchNumber = NewNozzleBatchNumber, ChangeTime = DateTime.Now, CurrentLockCount = 0, OperatorName = operatorName }); Management management = _container.Resolve(); management.NumStatistics.NozzleNum = 0; RequestClose?.Invoke(new DialogResult(ButtonResult.OK, null)); } catch (Exception ex) { LogHelper.WriteLogError("更换吸嘴时出错!", ex); MessageBox.Show("更换吸嘴时出错!" + ex.Message, "AAS", MessageBoxButton.OK, MessageBoxImage.Error); } } private void ExecuteCloseCommand() { RequestClose?.Invoke(new DialogResult(ButtonResult.Cancel, null)); } } }