diff --git a/App.xaml.cs b/App.xaml.cs index dff7dcd..57b332f 100644 --- a/App.xaml.cs +++ b/App.xaml.cs @@ -72,7 +72,7 @@ public partial class App : Application services.AddSingleton(); services.AddSingleton(); services.AddHostedService(); // Register as HostedService - services.AddHostedService(); + // services.AddHostedService(); services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); diff --git a/Data/Repositories/MenuRepository.cs b/Data/Repositories/MenuRepository.cs index bfe3632..b94167a 100644 --- a/Data/Repositories/MenuRepository.cs +++ b/Data/Repositories/MenuRepository.cs @@ -188,4 +188,11 @@ public class MenuRepository return result?.CopyTo(); } } + + public async Task GetMainMenuByName(string name) + { + using var db = DbContext.GetInstance(); + var dbMenu= await db.Queryable().FirstAsync(m => m.Name == name && m.Type == MenuType.MainMenu); + return dbMenu.CopyTo(); + } } \ No newline at end of file diff --git a/Data/Repositories/MqttRepository.cs b/Data/Repositories/MqttRepository.cs index d7bbd7c..af357ff 100644 --- a/Data/Repositories/MqttRepository.cs +++ b/Data/Repositories/MqttRepository.cs @@ -36,7 +36,9 @@ public class MqttRepository stopwatch.Start(); using (var _db = DbContext.GetInstance()) { - var result = await _db.Queryable().In(id).SingleAsync(); + var result = await _db.Queryable() + .In(id) + .SingleAsync(); stopwatch.Stop(); Logger.Info($"根据ID '{id}' 获取Mqtt配置耗时:{stopwatch.ElapsedMilliseconds}ms"); return result.CopyTo(); @@ -53,10 +55,12 @@ public class MqttRepository stopwatch.Start(); using (var _db = DbContext.GetInstance()) { - var result = await _db.Queryable().ToListAsync(); + var result = await _db.Queryable() + .ToListAsync(); stopwatch.Stop(); Logger.Info($"获取所有Mqtt配置耗时:{stopwatch.ElapsedMilliseconds}ms"); - return result.Select(m=>m.CopyTo()).ToList(); + return result.Select(m => m.CopyTo()) + .ToList(); } } @@ -69,32 +73,33 @@ public class MqttRepository { Stopwatch stopwatch = new Stopwatch(); stopwatch.Start(); - using (var db = DbContext.GetInstance()) + using var db = DbContext.GetInstance(); + await db.BeginTranAsync(); + try { - await db.BeginTranAsync(); - try - { - var result = await db.Insertable(mqtt.CopyTo()).ExecuteReturnIdentityAsync(); - // Add menu entry - var menu = new MenuBean() - { - Name = mqtt.Name, - Icon = SegoeFluentIcons.Wifi.Glyph, - Type = MenuType.MqttMenu, - DataId = result - }; - await _menuRepository.Add(menu, db); - await db.CommitTranAsync(); - stopwatch.Stop(); - Logger.Info($"新增Mqtt配置 '{mqtt.Name}' 耗时:{stopwatch.ElapsedMilliseconds}ms"); - return result; - } - catch (Exception ex) - { - await db.RollbackTranAsync(); - Logger.Error(ex, $"添加MQTT配置 {{mqtt.Name}} 失败"); - throw; - } + var result = await db.Insertable(mqtt.CopyTo()) + .ExecuteReturnIdentityAsync(); + var mqttMenu = await _menuRepository.GetMainMenuByName("Mqtt服务器"); + // Add menu entry + var menu = new MenuBean() + { + Name = mqtt.Name, + Icon = SegoeFluentIcons.Wifi.Glyph, + Type = MenuType.MqttMenu, + DataId = result, + ParentId = mqttMenu.Id, + }; + await _menuRepository.Add(menu, db); + await db.CommitTranAsync(); + stopwatch.Stop(); + Logger.Info($"新增Mqtt配置 '{mqtt.Name}' 耗时:{stopwatch.ElapsedMilliseconds}ms"); + return result; + } + catch (Exception ex) + { + await db.RollbackTranAsync(); + Logger.Error(ex, $"添加MQTT配置 {{mqtt.Name}} 失败"); + throw; } } @@ -112,7 +117,8 @@ public class MqttRepository await db.BeginTranAsync(); try { - var result = await db.Updateable(mqtt.CopyTo()).ExecuteCommandAsync(); + var result = await db.Updateable(mqtt.CopyTo()) + .ExecuteCommandAsync(); // Update menu entry var menu = await _menuRepository.GetMenuByDataId(mqtt.Id, MenuType.MqttMenu); if (menu != null) @@ -120,6 +126,7 @@ public class MqttRepository menu.Name = mqtt.Name; await _menuRepository.Edit(menu, db); } + await db.CommitTranAsync(); stopwatch.Stop(); Logger.Info($"更新Mqtt配置 '{mqtt.Name}' 耗时:{stopwatch.ElapsedMilliseconds}ms"); @@ -148,13 +155,12 @@ public class MqttRepository await db.BeginTranAsync(); try { - var result = await db.Deleteable().In(mqtt.Id).ExecuteCommandAsync(); + var result = await db.Deleteable() + .In(mqtt.Id) + .ExecuteCommandAsync(); // Delete menu entry var menu = await _menuRepository.GetMenuByDataId(mqtt.Id, MenuType.MqttMenu); - if (menu != null) - { - await _menuRepository.DeleteMenu(menu, db); - } + await _menuRepository.DeleteMenu(menu, db); await db.CommitTranAsync(); stopwatch.Stop(); Logger.Info($"删除Mqtt配置ID '{mqtt.Id}' 耗时:{stopwatch.ElapsedMilliseconds}ms"); diff --git a/ViewModels/MainViewModel.cs b/ViewModels/MainViewModel.cs index ae91bfc..428010f 100644 --- a/ViewModels/MainViewModel.cs +++ b/ViewModels/MainViewModel.cs @@ -150,13 +150,16 @@ public partial class MainViewModel : ViewModelBase { switch (menu.Type) { + // 导航到一级菜单 case MenuType.MainMenu: menu.ViewModel = DataServicesHelper.GetMainViewModel(menu.Name); break; + // 导航到设备下面的菜单 case MenuType.DeviceMenu: menu.ViewModel = App.Current.Services.GetRequiredService(); menu.Data = _dataServices.Devices.FirstOrDefault(d => d.Id == menu.DataId); break; + // 导航到变量表菜单 case MenuType.VariableTableMenu: VariableTableViewModel varTableVM = App.Current.Services.GetRequiredService(); @@ -166,16 +169,15 @@ public partial class MainViewModel : ViewModelBase varTableVM.IsLoadCompletion = false; menu.ViewModel = varTableVM; menu.Data = varTableVM.VariableTable; - break; + // 导航到添加变量表的菜单 case MenuType.AddVariableTableMenu: - await AddVariableTable(menu); + return; break; + } - if (menu.Type == MenuType.AddVariableTableMenu) - return; if (menu.ViewModel != null) { diff --git a/ViewModels/MqttsViewModel.cs b/ViewModels/MqttsViewModel.cs index 0a44896..b39eb51 100644 --- a/ViewModels/MqttsViewModel.cs +++ b/ViewModels/MqttsViewModel.cs @@ -63,6 +63,7 @@ public partial class MqttsViewModel : ViewModelBase await _mqttRepository.Add(mqtt); MessageHelper.SendLoadMessage(LoadTypes.Mqtts); + MessageHelper.SendLoadMessage(LoadTypes.Menu); } catch (Exception e) { @@ -87,8 +88,8 @@ public partial class MqttsViewModel : ViewModelBase if (isDel) { await _mqttRepository.Delete(SelectedMqtt); - MessageHelper.SendLoadMessage(LoadTypes.Mqtts); + MessageHelper.SendLoadMessage(LoadTypes.Menu); NotificationHelper.ShowMessage($"删除MQTT成功,MQTT名:{SelectedMqtt.Name}", NotificationType.Success); } }