diff --git a/DMS.Application/Services/Management/VariableManagementService.cs b/DMS.Application/Services/Management/VariableManagementService.cs
index fdbb25d..7d0dff0 100644
--- a/DMS.Application/Services/Management/VariableManagementService.cs
+++ b/DMS.Application/Services/Management/VariableManagementService.cs
@@ -174,6 +174,7 @@ public class VariableManagementService : IVariableManagementService
{
variable.VariableTable = variableTable;
variableTable.Variables.Add(variable);
+ _appDataService.Variables.TryAdd(variable.Id,variable);
}
}
_eventService.RaiseBatchImportVariables(this, new BatchImportVariablesEventArgs(result));
diff --git a/DMS.WPF/Interfaces/IVariableViewService.cs b/DMS.WPF/Interfaces/IVariableViewService.cs
index 7cb904f..d2eb478 100644
--- a/DMS.WPF/Interfaces/IVariableViewService.cs
+++ b/DMS.WPF/Interfaces/IVariableViewService.cs
@@ -16,29 +16,18 @@ public interface IVariableViewService
///
void LoadAllVariables();
- ///
- /// 添加变量表。
- ///
- Task AddVariableTableToView(VariableTable tableDto);
- ///
- /// 更新变量表。
- ///
- Task UpdateVariableTable(VariableTableItem variableTable);
///
/// 添加变量。
///
void AddVariable(VariableItem variableItem);
- ///
- /// 删除变量。
- ///
- void DeleteVariable(int id);
Task DeleteAsync(List deleteList);
List CheckExistingVariables(List importedVariables, DeviceItem device);
- Task AddAsync(List variableItems,VariableTableItem variableTable);
+
+ Task> AddAsync(List variableItems,VariableTableItem variableTable);
}
\ No newline at end of file
diff --git a/DMS.WPF/ItemViewModel/VariableItem.cs b/DMS.WPF/ItemViewModel/VariableItem.cs
index 06bd39b..b3b6955 100644
--- a/DMS.WPF/ItemViewModel/VariableItem.cs
+++ b/DMS.WPF/ItemViewModel/VariableItem.cs
@@ -99,7 +99,7 @@ public partial class VariableItem : ObservableObject
/// 用于在界面上显示变量表的关联信息。
///
[ObservableProperty]
- private VariableTable _variableTable;
+ private VariableTableItem _variableTable;
///
/// 获取或设置与此变量关联的MQTT别名列表。
diff --git a/DMS.WPF/Services/ViewService/VariableViewService.cs b/DMS.WPF/Services/ViewService/VariableViewService.cs
index 2902267..5158d0a 100644
--- a/DMS.WPF/Services/ViewService/VariableViewService.cs
+++ b/DMS.WPF/Services/ViewService/VariableViewService.cs
@@ -53,45 +53,6 @@ public class VariableViewService : IVariableViewService
}
}
- ///
- /// 添加变量表。
- ///
- public async Task AddVariableTableToView(VariableTable tableDto)
- {
- // 添加null检查
- if (tableDto == null || tableDto.DeviceId == 0)
- return false;
-
- if (_viewDataService.Devices.TryGetValue(tableDto.DeviceId, out var device))
- {
- var variableTableItem = _mapper.Map(tableDto);
- device.VariableTables.Add(variableTableItem);
- _viewDataService.VariableTables.TryAdd(variableTableItem.Id, variableTableItem);
- }
-
-
- return true;
- }
-
- ///
- /// 更新变量表。
- ///
- public async Task UpdateVariableTable(VariableTableItem variableTableItem)
- {
- if (variableTableItem is null)
- {
- return false;
- }
-
- var variableTable = _mapper.Map(variableTableItem);
- if (await _appCenterService.VariableTableManagementService.UpdateAsync(variableTable) > 0)
- {
- // 更新数据库后会自动更新内存,无需额外操作
- return true;
- }
-
- return false;
- }
///
@@ -110,7 +71,7 @@ public class VariableViewService : IVariableViewService
///
/// 添加变量。
///
- public async Task AddAsync(List variableItems, VariableTableItem variableTable)
+ public async Task> AddAsync(List variableItems, VariableTableItem variableTable)
{
foreach (var variableDto in variableItems)
@@ -123,35 +84,17 @@ public class VariableViewService : IVariableViewService
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 true;
+ return resVariableItems;
}
- ///
- /// 删除变量。
- ///
- public void DeleteVariable(int id)
- {
- if (!_viewDataService.Variables.TryGetValue(id, out var variableItem))
- {
- return;
- }
-
- if (_viewDataService.VariableTables.TryGetValue(variableItem.VariableTableId, out var variableTable))
- {
- variableTable.Variables.Remove(variableItem);
- }
-
- _viewDataService.Variables.Remove(variableItem.Id);
- }
public async Task DeleteAsync(List variableItems)
{
@@ -163,8 +106,19 @@ public class VariableViewService : IVariableViewService
deleteList.Add(mVariable);
}
}
+ if (!deleteList.Any()) return false;
- return await _variableManagementService.DeleteAsync(deleteList);
+ 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;
}
@@ -179,8 +133,21 @@ public class VariableViewService : IVariableViewService
{
foreach (var item in importedVariables)
{
- bool slelect = item.Name == variable.Name || item.S7Address == variable.S7Address || item.OpcUaNodeId == variable.OpcUaNodeId;
- if (slelect)
+ 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);
}
diff --git a/DMS.WPF/ViewModels/VariableTableViewModel.cs b/DMS.WPF/ViewModels/VariableTableViewModel.cs
index ca98385..93c61d0 100644
--- a/DMS.WPF/ViewModels/VariableTableViewModel.cs
+++ b/DMS.WPF/ViewModels/VariableTableViewModel.cs
@@ -172,14 +172,6 @@ partial class VariableTableViewModel : ViewModelBase, INavigatable
}
}
- ///
- /// 当视图加载完成时调用。
- /// 初始化协议选择状态,加载变量数据,并创建原始数据的深拷贝备份。
- ///
- public override void OnLoaded()
- {
- _variableItemList.AddRange(CurrentVariableTable.Variables);
- }
///
@@ -188,7 +180,7 @@ partial class VariableTableViewModel : ViewModelBase, INavigatable
///
/// 当前操作的变量表,用于更新其内部的变量数据。
[RelayCommand]
- private async void UpdateVariable()
+ private async Task UpdateVariable()
{
try
{
@@ -247,7 +239,7 @@ partial class VariableTableViewModel : ViewModelBase, INavigatable
/// 此命令通常绑定到UI中的"从TIA导入"按钮。
///
[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 variableItemViewModels = _mapper.Map>(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导入"按钮。
///
[RelayCommand]
- private async void ImportFromOpcUaServer()
+ private async Task ImportFromOpcUaServer()
{
try
{
@@ -320,7 +308,7 @@ partial class VariableTableViewModel : ViewModelBase, INavigatable
= App.Current.Services.GetRequiredService();
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中的"添加"按钮。
/// 当前操作的变量表,用于设置新变量的所属ID。
[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(variableItemViewModel));
- _mapper.Map(addVariable, variableItemViewModel);
+ var resList
+ = await _variableViewService.AddAsync(new List() { 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);
}
}
\ No newline at end of file
diff --git a/DMS.WPF/Views/Dialogs/ImportExcelDialog.xaml b/DMS.WPF/Views/Dialogs/ImportExcelDialog.xaml
index d14e344..8efa9ec 100644
--- a/DMS.WPF/Views/Dialogs/ImportExcelDialog.xaml
+++ b/DMS.WPF/Views/Dialogs/ImportExcelDialog.xaml
@@ -80,7 +80,7 @@
+ Binding="{Binding DataType}" />
diff --git a/DMS.WPF/Views/Dialogs/ImportOpcUaDialog.xaml b/DMS.WPF/Views/Dialogs/ImportOpcUaDialog.xaml
index 7aa8085..f7ce6a2 100644
--- a/DMS.WPF/Views/Dialogs/ImportOpcUaDialog.xaml
+++ b/DMS.WPF/Views/Dialogs/ImportOpcUaDialog.xaml
@@ -124,7 +124,7 @@
-
+
diff --git a/DMS.WPF/Views/Dialogs/VariableDialog.xaml b/DMS.WPF/Views/Dialogs/VariableDialog.xaml
index 685f42f..be79ffc 100644
--- a/DMS.WPF/Views/Dialogs/VariableDialog.xaml
+++ b/DMS.WPF/Views/Dialogs/VariableDialog.xaml
@@ -24,7 +24,7 @@
-
+
@@ -160,8 +160,8 @@
Margin="0,15,0,0"
hc:InfoElement.Title="数据类型:"
IsEnabled="{Binding IsAddModel}"
- ItemsSource="{Binding Source={StaticResource CSharpDataType}}"
- SelectedItem="{Binding Variable.CSharpDataType, UpdateSourceTrigger=PropertyChanged}">
+ ItemsSource="{Binding Source={StaticResource DataType}}"
+ SelectedItem="{Binding Variable.DataType, UpdateSourceTrigger=PropertyChanged}">