using CommunityToolkit.Mvvm.ComponentModel; using CommunityToolkit.Mvvm.Messaging; using Microsoft.Extensions.Logging; using PMSWPF.Data.Repositories; using PMSWPF.Enums; using PMSWPF.Extensions; using PMSWPF.Helper; using PMSWPF.Message; using PMSWPF.Models; namespace PMSWPF.Services; public partial class DataServices : ObservableRecipient, IRecipient { private readonly ILogger _logger; [ObservableProperty] private List _devices = new List(); [ObservableProperty] private List _variableTables = new (); [ObservableProperty] private List menuBeans = new List(); private readonly DeviceRepository _deviceRepository; private readonly MenuRepository _menuRepository; public event Action> OnDeviceListChanged; public event Action> OnMenuListChanged; partial void OnDevicesChanged(List devices) { OnDeviceListChanged?.Invoke(devices); FillMenuData(MenuBeans); } partial void OnMenuBeansChanged(List menuBeans) { OnMenuListChanged?.Invoke(menuBeans); } public DataServices(ILogger logger) { _logger = logger; IsActive = true; _deviceRepository = new DeviceRepository(); _menuRepository = new MenuRepository(); } /// /// 给Menu菜单的Data填充数据 /// /// private void FillMenuData(List menuBeans) { if (menuBeans == null || menuBeans.Count == 0) return; foreach (MenuBean menuBean in menuBeans) { switch (menuBean.Type) { case MenuType.MainMenu: break; case MenuType.DeviceMenu: menuBean.Data= Devices.FirstOrDefault(d => d.Id == menuBean.DataId); break; case MenuType.VariableTableMenu: menuBean.Data= FindVarTableForDevice(menuBean.DataId); // menuBean.Data= Devices.FirstOrDefault(d => d.Id == menuBean.DataId); break; case MenuType.AddVariableTableMenu: break; } if (menuBean.Items!=null && menuBean.Items.Count>0) { FillMenuData(menuBean.Items); } } } private VariableTable FindVarTableForDevice(int vtableId) { VariableTable varTable = null; foreach (var device in _devices) { varTable= device.VariableTables.FirstOrDefault(v => v.Id == vtableId); return varTable; } return varTable; } public async void Receive(LoadMessage message) { if (!(message.Value is LoadTypes)) throw new ArgumentException($"接受到的加载类型错误:{message.Value}"); try { switch ((LoadTypes)message.Value) { case LoadTypes.All: Devices = await _deviceRepository.GetAll(); MenuBeans = await _menuRepository.GetMenu(); break; case LoadTypes.Devices: Devices = await _deviceRepository.GetAll(); break; case LoadTypes.Menu: MenuBeans = await _menuRepository.GetMenu(); break; } } catch (Exception e) { NotificationHelper.ShowMessage($"加载数据出现了错误:{e.Message}"); _logger.LogError($"加载数据出现了错误:{e.Message}"); } } }