refactor:完成重构设备的添加,删除,更新。
This commit is contained in:
@@ -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;
|
||||
// 根据变量表的协议类型设置对应的布尔属性
|
||||
|
||||
Reference in New Issue
Block a user