using System.Collections.ObjectModel; using AutoMapper; using CommunityToolkit.Mvvm.ComponentModel; using DMS.Application.DTOs; using DMS.Application.Interfaces; using DMS.WPF.Interfaces; using DMS.WPF.ViewModels.Items; namespace DMS.WPF.Services; /// /// 变量数据服务类,负责管理变量表和变量相关的数据和操作。 /// public class VariableDataService : IVariableDataService { private readonly IMapper _mapper; private readonly IDataStorageService _dataStorageService; private readonly IAppDataCenterService _appDataCenterService; /// /// VariableDataService类的构造函数。 /// /// AutoMapper 实例。 /// 数据服务中心实例。 public VariableDataService(IMapper mapper,IDataStorageService dataStorageService, IAppDataCenterService appDataCenterService) { _mapper = mapper; _dataStorageService = dataStorageService; _appDataCenterService = appDataCenterService; } /// /// 加载所有变量 /// public void LoadAllVariables() { foreach (var variableTable in _dataStorageService.VariableTables) { foreach (var variable in variableTable.Variables) { _dataStorageService.Variables.Add(variable); } } } /// /// 添加变量表。 /// public async Task AddVariableTable(VariableTableDto variableTableDto, MenuBeanDto menuDto = null, bool isAddDb = false) { // 添加null检查 if (variableTableDto == null) return false; // 添加_appDataCenterService和_variableTableManagementService的null检查 if (_appDataCenterService == null || _appDataCenterService.VariableTableManagementService == null) return false; if (isAddDb && menuDto != null) { // 添加null检查 if (_appDataCenterService.VariableTableManagementService == null) return false; CreateVariableTableWithMenuDto createDto = new CreateVariableTableWithMenuDto(); createDto.VariableTable = variableTableDto; createDto.DeviceId = variableTableDto.DeviceId; createDto.Menu = menuDto; // 添加null检查 if (_appDataCenterService.VariableTableManagementService == null) return false; var resDto = await _appDataCenterService.VariableTableManagementService.CreateVariableTableAsync(createDto); // 添加null检查 if (resDto != null && resDto.VariableTable != null && variableTableDto != null) _mapper.Map(resDto.VariableTable, variableTableDto); } // 添加null检查 if (_appDataCenterService.VariableTableManagementService != null && variableTableDto != null) _appDataCenterService.VariableTableManagementService.AddVariableTableToMemory(variableTableDto); return true; } /// /// 更新变量表。 /// public async Task UpdateVariableTable(VariableTableItemViewModel variableTable) { if (variableTable == null) { return false; } var variableTableDto = _mapper.Map(variableTable); if (await _appDataCenterService.VariableTableManagementService.UpdateVariableTableAsync(variableTableDto) > 0) { _appDataCenterService.VariableTableManagementService.UpdateVariableTableInMemory(variableTableDto); return true; } return false; } /// /// 删除变量表。 /// public async Task DeleteVariableTable(VariableTableItemViewModel variableTable, bool isDeleteDb = false) { if (variableTable == null) { return false; } if (isDeleteDb) { if (!await _appDataCenterService.VariableTableManagementService.DeleteVariableTableAsync(variableTable.Id)) { return false; } } // 删除与当前变量表关联的所有变量 foreach (var variable in variableTable.Variables) { _dataStorageService.Variables.Remove(variable); } _appDataCenterService.VariableTableManagementService.RemoveVariableTableFromMemory(variableTable.Id); // 删除变量表 _dataStorageService.VariableTables.Remove(variableTable); variableTable.Device.VariableTables.Remove(variableTable); return true; } /// /// 添加变量。 /// public void AddVariable(VariableItemViewModel variableItem) { if (variableItem == null) { return; } _dataStorageService.Variables.Add(variableItem); } /// /// 删除变量。 /// public void DeleteVariable(int id) { var variableItem = _dataStorageService.Variables.FirstOrDefault(v => v.Id == id); if (variableItem == null) { return; } var variableTable = _dataStorageService.VariableTables.FirstOrDefault(vt => vt.Id == variableItem.VariableTableId); variableTable.Variables.Remove(variableItem); _dataStorageService.Variables.Remove(variableItem); } }