using System.Collections.Generic; using System.Diagnostics; using System.Threading.Tasks; 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; /// /// Mqtt仓储类,用于操作DbMqtt实体 /// public class MqttRepository { private readonly MenuRepository _menuRepository; private static readonly ILogger Logger = LogManager.GetCurrentClassLogger(); 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(); Logger.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().ToListAsync(); stopwatch.Stop(); Logger.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(); // 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; } } } /// /// 更新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(); Logger.Info($"更新Mqtt配置 '{mqtt.Name}' 耗时:{stopwatch.ElapsedMilliseconds}ms"); return result; } catch (Exception ex) { await db.RollbackTranAsync(); Logger.Error(ex, $"更新MQTT配置 {{mqtt.Name}} 失败"); 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(); Logger.Info($"删除Mqtt配置ID '{mqtt.Id}' 耗时:{stopwatch.ElapsedMilliseconds}ms"); return result; } catch (Exception ex) { await db.RollbackTranAsync(); Logger.Error(ex, $"删除MQTT配置 {{mqtt.Name}} 失败"); throw; } } } }