using LocalhostMES.Core; using LocalhostMES.DataBase; using LocalhostMES.Models; using LocalhostMES.ViewModels.Tabs; using Prism.Mvvm; using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; using System.Threading.Tasks; using System.Windows; using System.Windows.Media; namespace LocalhostMES.ViewModels.Services { public sealed class MesWorkspace : BindableBase, IMesWorkspace { private LogHelper.LogChangHandler _logHandler; private bool _initialized; private string _statusLine; private Brush _statusForeground = Brushes.Green; private int _selectedTabIndex = 0; private string _crossPageSn; public Management MesManagement => Management.GetManagement(); public ObservableCollection WorkOrders { get; } = new ObservableCollection(); public ObservableCollection Logs { get; } = new ObservableCollection(); public string StatusLine { get => _statusLine; private set => SetProperty(ref _statusLine, value); } public Brush StatusForeground { get => _statusForeground; private set => SetProperty(ref _statusForeground, value); } public int SelectedTabIndex { get => _selectedTabIndex; set => SetProperty(ref _selectedTabIndex, value); } public string CrossPageSn { get => _crossPageSn; set => SetProperty(ref _crossPageSn, value); } public void Initialize() { if (_initialized) { return; } _initialized = true; DatabaseHelper.CreataDataTable(); ReloadWorkOrders(); _logHandler = msg => { Application.Current?.Dispatcher.Invoke(() => { Logs.Add($"[{DateTime.Now:HH:mm:ss}] {msg}\n"); }); }; LogHelper.logChangHandler += _logHandler; } public void Shutdown() { if (_logHandler != null) { LogHelper.logChangHandler -= _logHandler; _logHandler = null; } } public void ReloadWorkOrders() { WorkOrders.Clear(); foreach (var w in DatabaseHelper.SelectWorkOrderInfo(null)) { WorkOrders.Add(w); } } public void ShowStatus(string message, bool isError) { Application.Current?.Dispatcher.Invoke(() => { StatusLine = message; StatusForeground = isError ? Brushes.Red : Brushes.Green; }); } private void OnOrderNotifyLog(string message) { Application.Current?.Dispatcher.Invoke(() => { Logs.Add($"[{DateTime.Now:HH:mm:ss}] {message}\n"); }); } } }