| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199 |
- using Prism.Commands;
- using Prism.Ioc;
- using Prism.Mvvm;
- using Prism.Services.Dialogs;
- using System;
- using System.Collections.Generic;
- using System.Collections.ObjectModel;
- using System.Linq;
- using TeamAAS_VP.Core;
- using TeamAAS_VP.Interfaces;
- using TeamAAS_VP.Models;
- using TeamAAS_VP.Models.Feeder;
- namespace TeamAAS_VP.ViewModels.Home
- {
- public class AddScrewViewModel : BindableBase, IDialogAware
- {
- private readonly IConfigService _configService;
- private readonly ISystemDatabaseService _systemDatabaseService;
- IContainerProvider _container;
- public AddScrewViewModel(IConfigService configService, ISystemDatabaseService systemDatabaseService, IContainerProvider containerProvider)
- {
- _configService = configService;
- _systemDatabaseService = systemDatabaseService;
- _container = containerProvider;
- ScrewFeeders = new ObservableCollection<ScrewFeederInfo>();
- AddCommand = new DelegateCommand(ExecuteAddCommand, CanExecuteAdd).ObservesProperty(() => SelectedFeeder).ObservesProperty(() => NewBatchNumber);
- ClearCommand = new DelegateCommand(ExecuteClearCommand, () => SelectedFeeder != null).ObservesProperty(() => SelectedFeeder);
- CloseCommand = new DelegateCommand(ExecuteCloseCommand);
- }
- public DelegateCommand AddCommand { get; }
- public DelegateCommand ClearCommand { get; }
- public DelegateCommand CloseCommand { get; }
- private DelegateCommand _FeederSelectedCommand;
- public DelegateCommand FeederSelectedCommand =>
- _FeederSelectedCommand ?? (_FeederSelectedCommand = new DelegateCommand(ExecuteFeederSelectedCommand));
- public ObservableCollection<ScrewFeederInfo> ScrewFeeders { get; }
- private ScrewFeederInfo _selectedFeeder;
- public ScrewFeederInfo SelectedFeeder
- {
- get => _selectedFeeder;
- set
- {
- SetProperty(ref _selectedFeeder, value);
- }
- }
- private string _newBatchNumber;
- public string NewBatchNumber { get => _newBatchNumber; set => SetProperty(ref _newBatchNumber, value); }
- private string _currentBatchNumber;
- public string CurrentBatchNumber { get => _currentBatchNumber; set => SetProperty(ref _currentBatchNumber, value); }
- private int _remainingCount;
- public int RemainingCount { get => _remainingCount; set => SetProperty(ref _remainingCount, value); }
- private string _lastAddTime;
- public string LastAddTime { get => _lastAddTime; set => SetProperty(ref _lastAddTime, value); }
- public string Title => "添加螺丝";
- public event Action<IDialogResult> RequestClose;
- public bool CanCloseDialog()
- {
- return true;
- }
- public void OnDialogClosed()
- {
-
- }
- public void OnDialogOpened(IDialogParameters parameters)
- {
- // load screw feeders
- try
- {
- var list = _configService.GetAllScrewFeeders();
- if (list != null)
- {
- ScrewFeeders.Clear();
- foreach (var s in list)
- {
- ScrewFeeders.Add(s);
- }
- }
- }
- catch { }
- }
- void ExecuteFeederSelectedCommand()
- {
- UpdateSelectedFeederInfo();
- }
- private async void UpdateSelectedFeederInfo()
- {
- if (SelectedFeeder != null)
- {
- CurrentBatchNumber = SelectedFeeder.BatchNumber;
- RemainingCount = SelectedFeeder.RemainingCount;
- //获取最后一次的螺丝添加时间,这里简单设置为未知,实际应用中可从数据库记录中获取
- var latestRecord = await _systemDatabaseService.GetLatestScrewFeederBatchRecordAsync(SelectedFeeder.FeederNumber);
- if (latestRecord != null)
- {
- LastAddTime = latestRecord.ChangeTime.ToString("u");
- }
- else
- LastAddTime = "(unknown)"; // could be enriched from DB records
- }
- else
- {
- CurrentBatchNumber = string.Empty;
- RemainingCount = 0;
- LastAddTime = string.Empty;
- }
- }
- private bool CanExecuteAdd()
- {
- return SelectedFeeder != null && !string.IsNullOrWhiteSpace(NewBatchNumber);
- }
- private async void ExecuteAddCommand()
- {
- if (SelectedFeeder == null) return;
- // set batch and add pack size
- _configService.SetBatchForFeederNumber(SelectedFeeder.FeederNumber, NewBatchNumber);
- // refresh
- var refreshed = _configService.GetScrewFeeder(SelectedFeeder.Id);
- if (refreshed != null)
- {
- SelectedFeeder.RemainingCount = refreshed.RemainingCount;
- SelectedFeeder.BatchNumber = refreshed.BatchNumber;
- CurrentBatchNumber = refreshed.BatchNumber;
- RemainingCount = refreshed.RemainingCount;
- LastAddTime = DateTime.Now.ToString("u");
- }
- Management management = _container.Resolve<Management>();
- if (SelectedFeeder.FeederNumber == 1)
- management.NumStatistics.Feeder1Num = refreshed.RemainingCount;
- else if (SelectedFeeder.FeederNumber == 2)
- management.NumStatistics.Feeder2Num = refreshed.RemainingCount;
- // try to record batch change to system DB asynchronously
- try
- {
- var rec = new ScrewFeederBatchRecord
- {
- BatchNumber = NewBatchNumber,
- PackSize = SelectedFeeder.PackSize,
- ChangeTime = DateTime.Now,
- RemainingCount = SelectedFeeder.RemainingCount,
- FeederNumber = SelectedFeeder.FeederNumber,
- FeederName = SelectedFeeder.Name,
- PreviousCount = SelectedFeeder.RemainingCount - SelectedFeeder.PackSize,
- OperatorName = _systemDatabaseService.GetCurrentUser()?.UserName
- };
- await _systemDatabaseService.RecordScrewFeederBatchAsync(rec);
- }
- catch(Exception ex)
- {
- LogHelper.WriteLogError("Failed to record screw feeder batch change.", ex);
- }
- }
- private void ExecuteClearCommand()
- {
- if (SelectedFeeder == null) return;
- _configService.ClearScrewFeederByNumber(SelectedFeeder.FeederNumber);
- var refreshed = _configService.GetScrewFeeder(SelectedFeeder.Id);
- if (refreshed != null)
- {
- SelectedFeeder.RemainingCount = refreshed.RemainingCount;
- SelectedFeeder.BatchNumber = refreshed.BatchNumber;
- CurrentBatchNumber = refreshed.BatchNumber;
- RemainingCount = refreshed.RemainingCount;
- LastAddTime = DateTime.Now.ToString("u");
- }
- Management management = _container.Resolve<Management>();
- if (SelectedFeeder.FeederNumber==1)
- management.NumStatistics.Feeder1Num = 0;
- else if (SelectedFeeder.FeederNumber == 2)
- management.NumStatistics.Feeder2Num = 0;
- }
- private void ExecuteCloseCommand()
- {
- RequestClose?.Invoke(new DialogResult(ButtonResult.OK));
- }
- }
- }
|