From 55dadec09946cb5ee8173d6d9c3a3eb589cc9149 Mon Sep 17 00:00:00 2001 From: "David P.G" Date: Sat, 5 Jul 2025 18:35:40 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0Mqtt=E6=9C=8D=E5=8A=A1?= =?UTF-8?q?=E5=99=A8=E6=97=B6=E7=BB=99=E5=B7=A6=E4=BE=A7=E8=8F=9C=E5=8D=95?= =?UTF-8?q?=E6=A0=8FMqtt=E6=9C=8D=E5=8A=A1=E5=99=A8=E8=8F=9C=E5=8D=95?= =?UTF-8?q?=E5=9C=A8=E6=B7=BB=E5=8A=A0=E8=8F=9C=E5=8D=95(=E6=9C=AA?= =?UTF-8?q?=E5=AE=8C=E6=88=90)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Data/Repositories/MenuRepository.cs | 14 +++++ Data/Repositories/MqttRepository.cs | 95 ++++++++++++++++++++++++----- Enums/MenuType.cs | 1 + 3 files changed, 95 insertions(+), 15 deletions(-) diff --git a/Data/Repositories/MenuRepository.cs b/Data/Repositories/MenuRepository.cs index 1b258cb..bfe3632 100644 --- a/Data/Repositories/MenuRepository.cs +++ b/Data/Repositories/MenuRepository.cs @@ -174,4 +174,18 @@ public class MenuRepository Logger.Info($"编辑菜单 '{menu.Name}' 耗时:{stopwatch.ElapsedMilliseconds}ms"); return result; } + + public async Task GetMenuByDataId(int dataId, MenuType menuType) + { + Stopwatch stopwatch = new Stopwatch(); + stopwatch.Start(); + using (var db = DbContext.GetInstance()) + { + var result = await db.Queryable() + .FirstAsync(m => m.DataId == dataId && m.Type == menuType); + stopwatch.Stop(); + Logger.Info($"根据DataId '{dataId}' 和 MenuType '{menuType}' 获取菜单耗时:{stopwatch.ElapsedMilliseconds}ms"); + return result?.CopyTo(); + } + } } \ No newline at end of file diff --git a/Data/Repositories/MqttRepository.cs b/Data/Repositories/MqttRepository.cs index b2bf113..d7bbd7c 100644 --- a/Data/Repositories/MqttRepository.cs +++ b/Data/Repositories/MqttRepository.cs @@ -5,6 +5,10 @@ using NLog; using PMSWPF.Data.Entities; using PMSWPF.Models; using PMSWPF.Extensions; +using SqlSugar; +using PMSWPF.Helper; +using iNKORE.UI.WPF.Modern.Common.IconKeys; +using PMSWPF.Enums; namespace PMSWPF.Data.Repositories; @@ -13,8 +17,14 @@ namespace PMSWPF.Data.Repositories; /// public class MqttRepository { + private readonly MenuRepository _menuRepository; private static readonly ILogger Logger = LogManager.GetCurrentClassLogger(); + public MqttRepository() + { + _menuRepository = new MenuRepository(); + } + /// /// 根据ID获取Mqtt配置 /// @@ -59,12 +69,32 @@ public class MqttRepository { Stopwatch stopwatch = new Stopwatch(); stopwatch.Start(); - using (var _db = DbContext.GetInstance()) + using (var db = DbContext.GetInstance()) { - var result = await _db.Insertable(mqtt.CopyTo()).ExecuteReturnIdentityAsync(); - stopwatch.Stop(); - Logger.Info($"新增Mqtt配置 '{mqtt.Name}' 耗时:{stopwatch.ElapsedMilliseconds}ms"); - return result; + 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; + } } } @@ -77,12 +107,30 @@ public class MqttRepository { Stopwatch stopwatch = new Stopwatch(); stopwatch.Start(); - using (var _db = DbContext.GetInstance()) + using (var db = DbContext.GetInstance()) { - var result = await _db.Updateable(mqtt.CopyTo()).ExecuteCommandAsync(); - stopwatch.Stop(); - Logger.Info($"更新Mqtt配置 '{mqtt.Name}' 耗时:{stopwatch.ElapsedMilliseconds}ms"); - return result; + await db.BeginTranAsync(); + try + { + var result = await db.Updateable(mqtt.CopyTo()).ExecuteCommandAsync(); + // Update menu entry + var menu = await _menuRepository.GetMenuByDataId(mqtt.Id, MenuType.MqttMenu); + if (menu != null) + { + menu.Name = mqtt.Name; + await _menuRepository.Edit(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; + } } } @@ -95,12 +143,29 @@ public class MqttRepository { Stopwatch stopwatch = new Stopwatch(); stopwatch.Start(); - using (var _db = DbContext.GetInstance()) + using (var db = DbContext.GetInstance()) { - var result = await _db.Deleteable().In(mqtt.Id).ExecuteCommandAsync(); - stopwatch.Stop(); - Logger.Info($"删除Mqtt配置ID '{mqtt.Id}' 耗时:{stopwatch.ElapsedMilliseconds}ms"); - return result; + await db.BeginTranAsync(); + try + { + 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 db.CommitTranAsync(); + stopwatch.Stop(); + Logger.Info($"删除Mqtt配置ID '{mqtt.Id}' 耗时:{stopwatch.ElapsedMilliseconds}ms"); + return result; + } + catch (Exception ex) + { + await db.RollbackTranAsync(); + Logger.Error(ex, $"删除MQTT配置 {{mqtt.Name}} 失败"); + throw; + } } } } \ No newline at end of file diff --git a/Enums/MenuType.cs b/Enums/MenuType.cs index 431a472..c939cee 100644 --- a/Enums/MenuType.cs +++ b/Enums/MenuType.cs @@ -6,4 +6,5 @@ public enum MenuType DeviceMenu, VariableTableMenu, AddVariableTableMenu, + MqttMenu } \ No newline at end of file