refactor:重构了变量的导入和删除

This commit is contained in:
2025-10-25 20:56:23 +08:00
parent 125348486a
commit b59d3d38a7
8 changed files with 111 additions and 176 deletions

View File

@@ -172,14 +172,6 @@ partial class VariableTableViewModel : ViewModelBase, INavigatable
}
}
/// <summary>
/// 当视图加载完成时调用。
/// 初始化协议选择状态,加载变量数据,并创建原始数据的深拷贝备份。
/// </summary>
public override void OnLoaded()
{
_variableItemList.AddRange(CurrentVariableTable.Variables);
}
/// <summary>
@@ -188,7 +180,7 @@ partial class VariableTableViewModel : ViewModelBase, INavigatable
/// </summary>
/// <param name="variableTable">当前操作的变量表,用于更新其内部的变量数据。</param>
[RelayCommand]
private async void UpdateVariable()
private async Task UpdateVariable()
{
try
{
@@ -247,7 +239,7 @@ partial class VariableTableViewModel : ViewModelBase, INavigatable
/// 此命令通常绑定到UI中的"从TIA导入"按钮。
/// </summary>
[RelayCommand]
private async void ImprotFromTiaVarTable()
private async Task ImprotFromTiaVarTable()
{
try
{
@@ -258,33 +250,29 @@ partial class VariableTableViewModel : ViewModelBase, INavigatable
if (improtVariableItems == null || improtVariableItems.Count == 0) return;
//bool flowControl = await CheckExist(improtVariableItems);
//if (!flowControl)
//{
// return;
//}
bool flowControl = await CheckExist(improtVariableItems);
if (!flowControl)
{
return;
}
// 如果还有变量需要导入,则执行导入操作
if (!improtVariableItems.Any())
{
_notificationService.ShowSuccess("列表中没有要添加的变量了。");
return;
}
var resList = await _variableViewService.AddAsync(improtVariableItems, CurrentVariableTable);
if (resList is null || !resList.Any())
{
_notificationService.ShowError("从OPC UA服务器导入变量失败");
return;
}
_variableItemList.AddRange(resList);
_notificationService.ShowSuccess($"从TIA变量表导入变量成功共导入变量{improtVariableItems.Count}个");
//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);
// }
// _notificationService.ShowSuccess($"从Excel导入变量成功共导入变量{improtVariableDtos.Count}个");
// }
//}
//else
//{
// _notificationService.ShowSuccess($"列表中没有要添加的变量了。 ");
//}
}
catch (Exception e)
{
@@ -297,7 +285,7 @@ partial class VariableTableViewModel : ViewModelBase, INavigatable
/// 此命令通常绑定到UI中的"从OPC UA导入"按钮。
/// </summary>
[RelayCommand]
private async void ImportFromOpcUaServer()
private async Task ImportFromOpcUaServer()
{
try
{
@@ -320,7 +308,7 @@ partial class VariableTableViewModel : ViewModelBase, INavigatable
= App.Current.Services.GetRequiredService<ImportOpcUaDialogViewModel>();
importOpcUaDialogViewModel.EndpointUrl = opcUaEndpointUrl; // 设置Endpoint URL
var importedVariableItems = await _dialogService.ShowDialogAsync(importOpcUaDialogViewModel);
if (importedVariableItems == null || !importedVariableItems.Any()) return; // 用户取消或没有选择任何变量
if (importedVariableItems == null || !importedVariableItems.Any()) return; // 用户取消或没有选择任何变量
//检查重复变量并询问是否继续
bool flowControl = await CheckExist(importedVariableItems);
@@ -330,23 +318,22 @@ partial class VariableTableViewModel : ViewModelBase, INavigatable
}
// 如果还有变量需要导入,则执行导入操作
if (importedVariableItems.Any())
{
var res = await _variableViewService.AddAsync(importedVariableItems, CurrentVariableTable);
if (res)
{
_notificationService.ShowSuccess($"从OPC UA服务器导入变量成功共导入变量{importedVariableItems.Count}个");
}
else
{
_notificationService.ShowError("从OPC UA服务器导入变量失败");
}
}
else
if (!importedVariableItems.Any())
{
_notificationService.ShowSuccess("列表中没有要添加的变量了。");
return;
}
var resList = await _variableViewService.AddAsync(importedVariableItems, CurrentVariableTable);
if (resList is null || !resList.Any())
{
_notificationService.ShowError("从OPC UA服务器导入变量失败");
return;
}
_variableItemList.AddRange(resList);
_notificationService.ShowSuccess($"从OPC UA服务器导入变量成功共导入变量{importedVariableItems.Count}个");
}
catch (Exception e)
{
@@ -381,7 +368,7 @@ partial class VariableTableViewModel : ViewModelBase, INavigatable
/// 此命令通常绑定到UI中的"添加"按钮。
/// <param name="variableTable">当前操作的变量表用于设置新变量的所属ID。</param>
[RelayCommand]
private async void AddVariable()
private async Task AddVariable()
{
try
{
@@ -394,28 +381,28 @@ partial class VariableTableViewModel : ViewModelBase, INavigatable
variableDialogViewModel.PrimaryButText = "添加变量";
variableDialogViewModel.Variable = variableItem;
var variableItemViewModel = await _dialogService.ShowDialogAsync(variableDialogViewModel);
var conVariableItem = await _dialogService.ShowDialogAsync(variableDialogViewModel);
// 如果用户取消或对话框未返回数据,则直接返回
if (variableItemViewModel == null)
if (conVariableItem == null)
return;
// // 设置新变量的所属变量表ID
variableItemViewModel.VariableTableId = CurrentVariableTable.Id;
variableItemViewModel.CreatedAt = DateTime.Now;
variableItemViewModel.UpdatedAt = DateTime.Now;
// // 添加变量数据到数据库
var addVariable
= await _variableManagementService.CreateVariableAsync(_mapper.Map<Variable>(variableItemViewModel));
_mapper.Map(addVariable, variableItemViewModel);
var resList
= await _variableViewService.AddAsync(new List<VariableItem>() { conVariableItem }, CurrentVariableTable);
if (resList is null || !resList.Any())
{
_notificationService.ShowError("添加变量失败");
return;
}
// // 更新当前页面显示的数据:将新变量添加到集合中
_variableItemList.Add(variableItemViewModel);
_viewCenterService.VariableDataService.AddVariable(variableItemViewModel);
_variableItemList.Add(variableItem);
_viewCenterService.VariableDataService.AddVariable(variableItem);
//
// // 显示成功通知
_notificationService.ShowSuccess($"添加变量成功:{variableItemViewModel.Name}");
_notificationService.ShowSuccess($"添加变量成功:{variableItem.Name}");
}
catch (Exception e)
{
@@ -447,25 +434,22 @@ partial class VariableTableViewModel : ViewModelBase, INavigatable
var names = string.Join("、", variablesToDelete.Select(v => v.Name));
// 显示确认删除对话框
ConfirmDialogViewModel confirmDialogViewModel
= new ConfirmDialogViewModel("删除变量", $"确认要删除变量:{names},删除后不可恢复,确认要删除吗?", "删除变量");
var isDel = await _dialogService.ShowDialogAsync(confirmDialogViewModel);
string message = $"确认要删除变量:{names},删除后不可恢复,确认要删除吗?";
var viewModel
= new ConfirmDialogViewModel("删除变量", message, "删除变量");
// 如果用户取消删除,则返回
if (!await _dialogService.ShowDialogAsync(viewModel)) return;
if (!isDel)
return; // 如果用户取消删除,则返回
// 从数据库中删除变量数据
var result = await _viewCenterService.VariableDataService.DeleteAsync(variablesToDelete);
var result = await _variableViewService.DeleteAsync(variablesToDelete);
if (result)
{
foreach (var variable in variablesToDelete)
foreach (VariableItem item in variablesToDelete)
{
_variableItemList.Remove(variable);
_viewCenterService.VariableDataService.DeleteVariable(variable.Id);
_variableItemList.Remove(item);
}
// 显示成功通知
_notificationService.ShowSuccess($"成功删除 {variablesToDelete.Count} 个变量");
}
@@ -615,7 +599,7 @@ partial class VariableTableViewModel : ViewModelBase, INavigatable
// 为每个变量分配MQTT别名
foreach (var editedVariableMqtt in editedVariableMqtts)
{
var mqttAliasItem = await _viewCenterService.MqttAliasDataService.AssignAliasAsync(editedVariableMqtt);
var mqttAliasItem = await _viewCenterService.MqttAliasDataService.AssignAliasAsync(editedVariableMqtt);
if (mqttAliasItem is not null)
{
totalAffectedCount++;
@@ -909,21 +893,15 @@ partial class VariableTableViewModel : ViewModelBase, INavigatable
public override async Task OnNavigatedToAsync(NavigationParameter parameter)
{
if (_viewDataService.VariableTables.TryGetValue(parameter.TargetId, out var varTable))
{
CurrentVariableTable = varTable;
// 根据变量表的协议类型设置对应的布尔属性
if (!_viewDataService.VariableTables.TryGetValue(parameter.TargetId, out var varTable))
return;
if (CurrentVariableTable.Protocol == ProtocolType.S7)
{
IsS7ProtocolSelected = true;
}
else if (CurrentVariableTable.Protocol == ProtocolType.OpcUa)
{
IsOpcUaProtocolSelected = true;
}
OnLoaded();
}
CurrentVariableTable = varTable;
// 根据变量表的协议类型设置对应的布尔属性
IsS7ProtocolSelected = CurrentVariableTable.Protocol == ProtocolType.S7 ? true : false;
IsOpcUaProtocolSelected = CurrentVariableTable.Protocol == ProtocolType.OpcUa ? true : false;
//添加变量
_variableItemList.Clear();
_variableItemList.AddRange(CurrentVariableTable.Variables);
}
}