using AutoMapper; using CommunityToolkit.Mvvm.ComponentModel; using DMS.Application.DTOs; using DMS.Application.Interfaces; using DMS.Core.Models; using DMS.WPF.Interfaces; using DMS.WPF.ItemViewModel; using System.Collections.ObjectModel; using DMS.Application.Interfaces.Management; using DMS.Application.Services.Management; namespace DMS.WPF.Services.ViewService; /// /// 变量数据服务类,负责管理变量表和变量相关的数据和操作。 /// public class VariableViewService : IVariableViewService { private readonly IMapper _mapper; private readonly IAppDataService _appDataService; private readonly IVariableManagementService _variableManagementService; private readonly IViewDataService _viewDataService; private readonly IAppCenterService _appCenterService; /// /// VariableDataService类的构造函数。 /// /// AutoMapper 实例。 /// 数据服务中心实例。 public VariableViewService(IMapper mapper, IAppDataService appStorageService, IVariableManagementService variableManagementService, IViewDataService dataStorageService, IAppCenterService appCenterService) { _mapper = mapper; _appDataService = appStorageService; _variableManagementService = variableManagementService; _viewDataService = dataStorageService; _appCenterService = appCenterService; } /// /// 加载所有变量 /// public void LoadAllVariables() { foreach (var variableTable in _viewDataService.VariableTables) { foreach (var variable in variableTable.Value.Variables) { _viewDataService.Variables.Add(variable.Id, variable); } } } /// /// 添加变量。 /// public void AddVariable(VariableItem variableItem) { if (variableItem == null) { return; } _viewDataService.Variables.Add(variableItem.Id, variableItem); } /// /// 添加变量。 /// public async Task> AddAsync(List variableItems, VariableTableItem variableTable) { foreach (var variableDto in variableItems) { variableDto.IsActive = true; variableDto.CreatedAt = DateTime.Now; variableDto.UpdatedAt = DateTime.Now; variableDto.VariableTableId = variableTable.Id; } var resVariables = await _variableManagementService.AddAsync(_mapper.Map>(variableItems)); List resVariableItems = _mapper.Map>(resVariables); foreach (var variableItem in resVariableItems) { _viewDataService.Variables.TryAdd(variableItem.Id, variableItem); variableTable.Variables.Add(variableItem); variableItem.VariableTable = variableTable; } return resVariableItems; } public async Task DeleteAsync(List variableItems) { List deleteList = new List(); foreach (var variable in variableItems) { if (_appDataService.Variables.TryGetValue(variable.Id, out var mVariable)) { deleteList.Add(mVariable); } } if (!deleteList.Any()) return false; var res=await _variableManagementService.DeleteAsync(deleteList); if (res) { foreach (var variable in deleteList) { _viewDataService.Variables.Remove(variable.Id); variable.VariableTable.Variables.Remove(variable); } } return res; } public List CheckExistingVariables(List importedVariables, DeviceItem device) { List? existList = new List(); var allVariable = device.VariableTables.SelectMany(vt => vt.Variables); foreach (var variable in allVariable) { foreach (var item in importedVariables) { var isExist = false; if (variable.Protocol == Core.Enums.ProtocolType.S7) { isExist = item.Name == variable.Name || item.S7Address == variable.S7Address; }else if (variable.Protocol == Core.Enums.ProtocolType.OpcUa) { isExist = item.Name == variable.Name || item.OpcUaNodeId == variable.OpcUaNodeId; } else { isExist = item.Name == variable.Name; } if (isExist) { existList.Add(item); } } } return existList; } }