refactor:完成重构设备的添加,删除,更新。

This commit is contained in:
2025-10-22 14:06:16 +08:00
parent e995ec7207
commit 54d040b45f
76 changed files with 1028 additions and 1161 deletions

View File

@@ -27,6 +27,8 @@ partial class VariableTableViewModel : ViewModelBase, INavigatable
private readonly IDialogService _dialogService;
private readonly IVariableManagementService _variableManagementService;
private readonly IAppDataService _appDataService;
private readonly IVariableViewService _variableViewService;
private readonly IEventService _eventService;
private readonly IMqttAliasAppService _mqttAliasAppService;
private readonly IMqttAppService _mqttAppService;
@@ -83,9 +85,9 @@ partial class VariableTableViewModel : ViewModelBase, INavigatable
/// 初始化服务、数据仓库和变量数据集合视图。
/// </summary>
/// <param name="dialogService">对话服务接口的实例。</param>
private readonly IWPFDataService _wpfDataService;
private readonly IViewCenterService _viewCenterService;
private readonly IWpfDataService _dataStorageService;
private readonly IViewDataService _viewDataService;
private readonly ObservableList<VariableItem> _variableItemList;
private readonly ISynchronizedView<VariableItem, VariableItem> _synchronizedView;
@@ -97,20 +99,24 @@ partial class VariableTableViewModel : ViewModelBase, INavigatable
private readonly ITriggerVariableAppService _triggerVariableAppService;
public VariableTableViewModel(IMapper mapper, IDialogService dialogService, IVariableManagementService variableManagementService,
IAppDataService appDataService,
IVariableViewService variableViewService,
IEventService eventService,
IMqttAliasAppService mqttAliasAppService, IMqttAppService mqttAppService,
IWPFDataService wpfDataService, IWpfDataService dataStorageService,
IViewCenterService wpfDataService, IViewDataService dataStorageService,
INotificationService notificationService, ITriggerAppService triggerAppService,
ITriggerVariableAppService triggerVariableAppService)
{
_mapper = mapper;
_dialogService = dialogService;
_variableManagementService = variableManagementService;
_appDataService = appDataService;
_variableViewService = variableViewService;
_eventService = eventService;
_mqttAliasAppService = mqttAliasAppService;
_mqttAppService = mqttAppService;
_wpfDataService = wpfDataService;
_dataStorageService = dataStorageService;
_viewCenterService = wpfDataService;
_viewDataService = dataStorageService;
_notificationService = notificationService;
_triggerAppService = triggerAppService;
_triggerVariableAppService = triggerVariableAppService;
@@ -247,53 +253,38 @@ partial class VariableTableViewModel : ViewModelBase, INavigatable
{
ImportExcelDialogViewModel
viewModel = App.Current.Services.GetRequiredService<ImportExcelDialogViewModel>();
List<Variable> improtVariable = await _dialogService.ShowDialogAsync(viewModel);
var improtVariableItems = await _dialogService.ShowDialogAsync(viewModel);
if (improtVariable == null || improtVariable.Count == 0) return;
if (improtVariableItems == null || improtVariableItems.Count == 0) return;
var improtVariableDtos = _mapper.Map<List<Variable>>(improtVariable);
foreach (var variableDto in improtVariableDtos)
{
variableDto.IsActive = true;
variableDto.CreatedAt = DateTime.Now;
variableDto.UpdatedAt = DateTime.Now;
variableDto.VariableTableId = CurrentVariableTable.Id;
}
var existList = await _variableManagementService.FindExistingVariablesAsync(improtVariableDtos);
if (existList.Count > 0)
{
// // 拼接要删除的变量名称,用于确认提示
var existNames = string.Join("、", existList.Select(v => v.Name));
var confrimDialogViewModel
= new ConfirmDialogViewModel("存在已经添加的变量", $"变量名称:{existNames},已经存在,是否跳过继续添加其他的变量。取消则不添加任何变量", "继续");
var res = await _dialogService.ShowDialogAsync(confrimDialogViewModel);
if (!res) return;
// 从导入列表中删除已经存在的变量
improtVariableDtos.RemoveAll(variableDto => existList.Contains(variableDto));
}
//bool flowControl = await CheckExist(improtVariableItems);
//if (!flowControl)
//{
// return;
//}
if (improtVariableDtos.Count != 0)
{
var addVariableDtos = await _variableManagementService.BatchImportVariablesAsync(improtVariableDtos);
if (addVariableDtos is { Count: > 0 })
{
List<VariableItem> variableItemViewModels = _mapper.Map<List<VariableItem>>(addVariableDtos);
//if (improtVariableDtos.Count != 0)
//{
// var addVariableDtos = await _variableManagementService.AddAsync(improtVariableDtos);
// if (addVariableDtos is { Count: > 0 })
// {
// List<VariableItem> variableItemViewModels = _mapper.Map<List<VariableItem>>(addVariableDtos);
_variableItemList.AddRange(variableItemViewModels);
//更新数据中心
foreach (var variableItemViewModel in variableItemViewModels)
{
CurrentVariableTable.Variables.Add(variableItemViewModel);
}
// _variableItemList.AddRange(variableItemViewModels);
// //更新数据中心
// foreach (var variableItemViewModel in variableItemViewModels)
// {
// CurrentVariableTable.Variables.Add(variableItemViewModel);
// }
_notificationService.ShowSuccess($"从Excel导入变量成功共导入变量{improtVariableDtos.Count}个");
}
}
else
{
_notificationService.ShowSuccess($"列表中没有要添加的变量了。 ");
}
// _notificationService.ShowSuccess($"从Excel导入变量成功共导入变量{improtVariableDtos.Count}个");
// }
//}
//else
//{
// _notificationService.ShowSuccess($"列表中没有要添加的变量了。 ");
//}
}
catch (Exception e)
{
@@ -328,52 +319,24 @@ partial class VariableTableViewModel : ViewModelBase, INavigatable
ImportOpcUaDialogViewModel importOpcUaDialogViewModel
= App.Current.Services.GetRequiredService<ImportOpcUaDialogViewModel>();
importOpcUaDialogViewModel.EndpointUrl = opcUaEndpointUrl; // 设置Endpoint URL
var importedVariables = await _dialogService.ShowDialogAsync(importOpcUaDialogViewModel);
if (importedVariables == null || !importedVariables.Any())
var importedVariableItems = await _dialogService.ShowDialogAsync(importOpcUaDialogViewModel);
if (importedVariableItems == null || !importedVariableItems.Any()) return; // 用户取消或没有选择任何变量
//检查重复变量并询问是否继续
bool flowControl = await CheckExist(importedVariableItems);
if (!flowControl)
{
return; // 用户取消或没有选择任何变量
}
// 将导入的变量转换为DTO并设置必要的属性
var importedVariableDtos = _mapper.Map<List<Variable>>(importedVariables);
foreach (var variableDto in importedVariableDtos)
{
variableDto.CreatedAt = DateTime.Now;
variableDto.UpdatedAt = DateTime.Now;
variableDto.VariableTableId = CurrentVariableTable.Id;
}
// 检查是否存在同名变量
var existList = await _variableManagementService.FindExistingVariablesAsync(importedVariableDtos);
if (existList.Count > 0)
{
// 拼接要删除的变量名称,用于确认提示
var existNames = string.Join("、", existList.Select(v => v.Name));
var confirmDialogViewModel
= new ConfirmDialogViewModel("存在已经添加的变量", $"变量名称:{existNames},已经存在,是否跳过继续添加其他的变量。取消则不添加任何变量", "继续");
var res = await _dialogService.ShowDialogAsync(confirmDialogViewModel);
if (!res) return;
// 从导入列表中删除已经存在的变量
importedVariableDtos.RemoveAll(variableDto => existList.Contains(variableDto));
return;
}
// 如果还有变量需要导入,则执行导入操作
if (importedVariableDtos.Count != 0)
if (importedVariableItems.Any())
{
var addVariableDtos = await _variableManagementService.BatchImportVariablesAsync(importedVariableDtos);
if (addVariableDtos is { Count: > 0 })
var res = await _variableViewService.AddAsync(importedVariableItems, CurrentVariableTable);
if (res)
{
List<VariableItem> variableItemViewModels = _mapper.Map<List<VariableItem>>(addVariableDtos);
_variableItemList.AddRange(variableItemViewModels);
foreach (var variableItemViewModel in variableItemViewModels)
{
_dataStorageService.Variables.TryAdd(variableItemViewModel.Id, variableItemViewModel);
CurrentVariableTable.Variables.Add(variableItemViewModel);
}
_notificationService.ShowSuccess($"从OPC UA服务器导入变量成功共导入变量{importedVariableDtos.Count}个");
_notificationService.ShowSuccess($"从OPC UA服务器导入变量成功共导入变量{importedVariableItems.Count}个");
}
else
{
@@ -391,6 +354,25 @@ partial class VariableTableViewModel : ViewModelBase, INavigatable
}
}
private async Task<bool> CheckExist(List<VariableItem> importedVariableItems)
{
// 检查是否存在同名变量
List<VariableItem> existList = _variableViewService.CheckExistingVariables(importedVariableItems, CurrentVariableTable.Device);
if (existList.Count > 0)
{
// 拼接要删除的变量名称,用于确认提示
var existNames = string.Join("、", existList.Select(v => v.Name));
var confirmDialogViewModel
= new ConfirmDialogViewModel("存在已经添加的变量", $"变量名称:{existNames},已经存在,是否跳过继续添加其他的变量。取消则不添加任何变量", "继续");
var res = await _dialogService.ShowDialogAsync(confirmDialogViewModel);
if (!res) return false;
// 从导入列表中删除已经存在的变量
importedVariableItems.RemoveAll(variableDto => existList.Contains(variableDto));
}
return true;
}
//
/// <summary>
@@ -430,7 +412,7 @@ partial class VariableTableViewModel : ViewModelBase, INavigatable
_mapper.Map(addVariable, variableItemViewModel);
// // 更新当前页面显示的数据:将新变量添加到集合中
_variableItemList.Add(variableItemViewModel);
_wpfDataService.VariableDataService.AddVariable(variableItemViewModel);
_viewCenterService.VariableDataService.AddVariable(variableItemViewModel);
//
// // 显示成功通知
_notificationService.ShowSuccess($"添加变量成功:{variableItemViewModel.Name}");
@@ -471,16 +453,17 @@ partial class VariableTableViewModel : ViewModelBase, INavigatable
if (!isDel)
return; // 如果用户取消删除,则返回
// 从数据库中删除变量数据
var result = await _variableManagementService.DeleteVariablesAsync(variablesToDelete.Select(v => v.Id)
.ToList());
var result = await _viewCenterService.VariableDataService.DeleteAsync(variablesToDelete);
if (result)
{
foreach (var variable in variablesToDelete)
{
_variableItemList.Remove(variable);
_wpfDataService.VariableDataService.DeleteVariable(variable.Id);
_viewCenterService.VariableDataService.DeleteVariable(variable.Id);
}
// 显示成功通知
@@ -632,7 +615,7 @@ partial class VariableTableViewModel : ViewModelBase, INavigatable
// 为每个变量分配MQTT别名
foreach (var editedVariableMqtt in editedVariableMqtts)
{
var mqttAliasItem = await _wpfDataService.MqttAliasDataService.AssignAliasAsync(editedVariableMqtt);
var mqttAliasItem = await _viewCenterService.MqttAliasDataService.AssignAliasAsync(editedVariableMqtt);
if (mqttAliasItem is not null)
{
totalAffectedCount++;
@@ -926,7 +909,7 @@ partial class VariableTableViewModel : ViewModelBase, INavigatable
public override async Task OnNavigatedToAsync(NavigationParameter parameter)
{
if (_dataStorageService.VariableTables.TryGetValue(parameter.TargetId, out var varTable))
if (_viewDataService.VariableTables.TryGetValue(parameter.TargetId, out var varTable))
{
CurrentVariableTable = varTable;
// 根据变量表的协议类型设置对应的布尔属性