using BPASmartClient.Helper; using System; using System.Collections.Generic; using System.Linq; using System.Collections.ObjectModel; using System.Text; using System.Threading.Tasks; using System.Windows; using BPASmartClient.Model; using System.Windows.Media; using BPASmartClient.CustomResource.Pages.View; namespace BPASmartClient.CustomResource.Pages.Model { public class MessageNotify { private volatile static MessageNotify _Instance; public static MessageNotify GetInstance => _Instance ??= new MessageNotify(); public static readonly object runLock = new object(); public static readonly object userlock = new object(); public static readonly object alarmlock = new object(); public static readonly object recipeLogslock = new object(); private MessageNotify() { } public Action UserLog { get; set; } public Action RunLog { get; set; } public Action AlarmLog { get; set; } public Action RecipeCompleteLogs { get; set; } public ObservableCollection runLogs { get; set; } = new(); public ObservableCollection userLogs { get; set; } = new(); public ObservableCollection alarmLogs { get; set; } = new(); public ObservableCollection recipeLogs { get; set; } = new(); public void LogSave() { Sqlite.GetInstance.Save(); Sqlite.GetInstance.Save(); Sqlite.GetInstance.Save(); Sqlite.GetInstance.Save(); } public void ShowRecipeLog(string info) { lock (recipeLogslock) { try { RecipeCompleteLog runLog = new RecipeCompleteLog() { Date = DateTime.Now.ToString("yyyy-MM-dd"), Time = DateTime.Now.ToString("HH:mm:ss"), RecipeName = info }; Sqlite.GetInstance.Base.Add(runLog); Application.Current.Dispatcher.Invoke(new Action(() => { recipeLogs.Insert(0, runLog); })); RecipeCompleteLogs?.Invoke(info); } catch (Exception) { // throw; } } } public void ShowUserLog(string info) { lock (userlock) { if (!string.IsNullOrEmpty(Global.userInfo.UserName) && !string.IsNullOrEmpty(Global.userInfo.permission.ToString()) && !string.IsNullOrEmpty(info)) { UserLog userLog = new UserLog() { Date = DateTime.Now.ToString("yyyy-MM-dd"), Time = DateTime.Now.ToString("HH:mm:ss"), Permission = Global.userInfo.permission.ToString(), UserName = Global.userInfo.UserName, LogInfo = info }; Sqlite.GetInstance.Base.Add(userLog); Application.Current.Dispatcher.Invoke(new Action(() => { userLogs.Insert(0, userLog); })); UserLog?.Invoke(info); } } } public void ShowRunLog(string info) { lock (runLock) { try { RunLog runLog = new RunLog() { Date = DateTime.Now.ToString("yyyy-MM-dd"), Time = DateTime.Now.ToString("HH:mm:ss"), RunLogInfo = info }; Sqlite.GetInstance.Base.Add(runLog); Application.Current.Dispatcher.Invoke(new Action(() => { runLogs.Insert(0, runLog); })); RunLog?.Invoke(info); } catch (Exception) { // throw; } } } int AlarmID; public void ShowAlarmLog(string info, string AlarmNumber = "_", AlarmLevel level = AlarmLevel.一般报警) { lock (alarmlock) { AlarmID++; Alarm alarmLog = new Alarm() { NumId = AlarmID, Date = DateTime.Now.ToString("yyyy-MM-dd"), Time = DateTime.Now.ToString("HH:mm:ss"), Info = info, Value = AlarmNumber, Grade = (level) + "" }; Sqlite.GetInstance.Base.Add(alarmLog); Application.Current.Dispatcher.Invoke(new Action(() => { alarmLogs.Insert(0, alarmLog); })); AlarmLog?.Invoke(info); } } public bool ShowDialog(string info, DialogType dialogType = DialogType.Information) { bool result = false; Application.Current.Dispatcher.Invoke(() => { PromptView PV = new PromptView(); PV.TextBlockInfo = info; switch (dialogType) { case DialogType.Warning: PV.TextBlockIcon = ""; PV.TextBlockForeground = Brushes.Yellow; PV.infoType.Text = "警告:"; //PV.Cancel.Visibility = Visibility.Collapsed; break; case DialogType.Error: PV.TextBlockIcon = ""; PV.TextBlockForeground = Brushes.Red; PV.infoType.Text = "错误:"; //PV.Cancel.Visibility = Visibility.Collapsed; break; case DialogType.Information: PV.TextBlockIcon = ""; PV.TextBlockForeground = Brushes.DeepSkyBlue; PV.infoType.Text = "提示:"; //PV.Cancel.Visibility = Visibility.Visible; break; default: break; } PV.infoType.Foreground = PV.TextBlockForeground; var res = PV.ShowDialog(); result = res == null ? false : (bool)res; }); return result; } } public enum DialogType { Warning, Error, Information, } }