using System.Collections.Generic; using System.Diagnostics; using System.Threading.Tasks; 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; /// /// Mqtt仓储类,用于操作DbMqtt实体 /// public class MqttRepository { private readonly MenuRepository _menuRepository; public MqttRepository() { _menuRepository = new MenuRepository(); } /// /// 根据ID获取Mqtt配置 /// /// 主键ID /// public async Task GetById(int id) { Stopwatch stopwatch = new Stopwatch(); stopwatch.Start(); using (var _db = DbContext.GetInstance()) { var result = await _db.Queryable() .In(id) .SingleAsync(); stopwatch.Stop(); NlogHelper.Info($"根据ID '{id}' 获取Mqtt配置耗时:{stopwatch.ElapsedMilliseconds}ms"); return result.CopyTo(); } } /// /// 获取所有Mqtt配置 /// /// public async Task> GetAll() { Stopwatch stopwatch = new Stopwatch(); stopwatch.Start(); using (var _db = DbContext.GetInstance()) { var result = await _db.Queryable().Includes(m=>m.VariableDatas) .ToListAsync(); stopwatch.Stop(); NlogHelper.Info($"获取所有Mqtt配置耗时:{stopwatch.ElapsedMilliseconds}ms"); return result.Select(m => m.CopyTo()) .ToList(); } } /// /// 新增Mqtt配置 /// /// Mqtt实体 /// public async Task Add(Mqtt mqtt) { Stopwatch stopwatch = new Stopwatch(); stopwatch.Start(); using var db = DbContext.GetInstance(); await db.BeginTranAsync(); try { 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(); NlogHelper.Info($"新增Mqtt配置 '{mqtt.Name}' 耗时:{stopwatch.ElapsedMilliseconds}ms"); return result; } catch (Exception ex) { await db.RollbackTranAsync(); NlogHelper.Error( $"添加MQTT配置 {{mqtt.Name}} 失败",ex); throw; } } /// /// 更新Mqtt配置 /// /// Mqtt实体 /// public async Task Edit(Mqtt mqtt) { Stopwatch stopwatch = new Stopwatch(); stopwatch.Start(); using (var db = DbContext.GetInstance()) { 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(); NlogHelper.Info($"更新Mqtt配置 '{mqtt.Name}' 耗时:{stopwatch.ElapsedMilliseconds}ms"); return result; } catch (Exception ex) { await db.RollbackTranAsync(); NlogHelper.Error($"更新MQTT配置 {{mqtt.Name}} 失败", ex); throw; } } } /// /// 根据ID删除Mqtt配置 /// /// Mqtt实体 /// public async Task Delete(Mqtt mqtt) { Stopwatch stopwatch = new Stopwatch(); stopwatch.Start(); using (var db = DbContext.GetInstance()) { 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(); NlogHelper.Info($"删除Mqtt配置ID '{mqtt.Id}' 耗时:{stopwatch.ElapsedMilliseconds}ms"); return result; } catch (Exception ex) { await db.RollbackTranAsync(); NlogHelper.Error( $"删除MQTT配置 {{mqtt.Name}} 失败",ex); throw; } } } }