Files
DMS/DMS.WPF/Services/ViewService/VariableTableViewService.cs

167 lines
6.5 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using AutoMapper;
using DMS.Application.DTOs;
using DMS.Application.Interfaces;
using DMS.Application.Interfaces.Management;
using DMS.Application.Services;
using DMS.Core.Enums;
using DMS.Core.Models;
using DMS.WPF.Interfaces;
using DMS.WPF.ItemViewModel;
using DMS.WPF.ViewModels;
using iNKORE.UI.WPF.Modern.Common.IconKeys;
using System.Collections.ObjectModel;
namespace DMS.WPF.Services.ViewService;
public class VariableTableViewService : IVariableTableViewService
{
private readonly IMapper _mapper;
private readonly IViewDataService _viewDataService;
private readonly IAppDataService _appDataService;
private readonly IVariableTableManagementService _variableTableManagementService;
private readonly IMenuViewService _menuDataService;
public VariableTableViewService(IMapper mapper, IViewDataService viewDataService, IAppDataService appDataService, IVariableTableManagementService variableTableManagementService,
IMenuViewService menuDataService)
{
_mapper = mapper;
_viewDataService = viewDataService;
_appDataService = appDataService;
_variableTableManagementService = variableTableManagementService;
_menuDataService = menuDataService;
}
public void LoadAllVariableTables()
{
foreach (var device in _viewDataService.Devices)
{
foreach (var variableTable in device.Value.VariableTables)
{
_viewDataService.VariableTables.Add(variableTable.Id, variableTable);
}
}
}
/// <summary>
/// 异步添加变量表
/// 此方法创建一个新的变量表项,包括创建对应的菜单项,并将其添加到数据库和视图数据服务中
/// </summary>
/// <param name="variableTableItem">要添加的变量表项</param>
/// <returns>如果添加成功返回true否则返回false</returns>
public async Task<bool> AddAsync(VariableTableItem variableTableItem)
{
// 检查传入的参数是否为空如果为空则直接返回false
if (variableTableItem is null) return false;
// 创建包含变量表和菜单的DTO对象
CreateVariableTableWithMenuDto createDto = new CreateVariableTableWithMenuDto();
createDto.VariableTable = _mapper.Map<VariableTable>(variableTableItem); // 将VariableTableItem映射为VariableTable对象
// 创建与变量表关联的菜单项
var deviceMenu = _viewDataService.Menus.FirstOrDefault(m => m.MenuType == MenuType.DeviceMenu && m.TargetId == variableTableItem.DeviceId);
if (deviceMenu is not null)
{
createDto.Menu = new MenuBean()
{
Header = variableTableItem.Name, // 菜单标题为变量表名称
ParentId = deviceMenu.Id,
MenuType = MenuType.VariableTableMenu,
Icon = SegoeFluentIcons.DataSense.Glyph, // 设置菜单图标
TargetViewKey = nameof(VariableTableViewModel) // 设置目标视图
};
}
// 调用应用中心服务异步添加变量表
var resDto = await _variableTableManagementService.AddAsync(createDto);
// 检查返回结果是否为空如果为空则表示添加失败返回false
if (resDto is null) return false;
// 设置变量表项的ID为服务器返回的ID
variableTableItem.Id = resDto.VariableTable.Id;
// 如果变量表项有关联的设备,则将该变量表添加到设备的变量表集合中
variableTableItem.Device?.VariableTables.Add(variableTableItem);
_viewDataService.VariableTables.TryAdd(variableTableItem.Id, variableTableItem);
// 将新创建的菜单项添加到菜单视图服务中
_menuDataService.AddMenuToView(_mapper.Map<MenuItem>(resDto.Menu));
// 成功添加返回true
return true;
}
public async Task<bool> UpdateAsync(VariableTableItem variableTable)
{
// 检查变量表是否存在于应用数据存储中
if (!_appDataService.VariableTables.TryGetValue(variableTable.Id, out var variableTableInApp))
{
return false;
}
_mapper.Map(variableTable, variableTableInApp);
if (await _variableTableManagementService.UpdateAsync(variableTableInApp) > 0)
{
// 更新数据库后会自动更新内存,无需额外操作
var menu = _viewDataService.Menus.FirstOrDefault(m =>
m.MenuType == MenuType.VariableTableMenu &&
m.TargetId == variableTable.Id);
if (menu is not null && menu.Header != variableTable.Name)
{
menu.Header = variableTable.Name;
}
return true;
}
return false;
}
/// <summary>
/// 异步删除变量表
/// 此方法用于删除指定的变量表项,包括从数据库中删除、移除关联的变量和菜单项
/// </summary>
/// <param name="variableTable">要删除的变量表项</param>
/// <returns>如果删除成功返回true否则返回false</returns>
public async Task<bool> DeleteAsync(VariableTableItem variableTable)
{
// 检查变量表是否存在于应用数据存储中
if (!_appDataService.VariableTables.TryGetValue(variableTable.Id, out var variableTableInApp))
{
return false;
}
// 从数据库和内存中删除变量表相关数据
if (!await _variableTableManagementService.DeleteAsync(variableTableInApp))
{
return false;
}
// 从界面删除变量表相关数据集
foreach (var variable in variableTable.Variables)
{
_viewDataService.Variables.Remove(variable.Id);
}
// 删除变量表相关的菜单
var variableTableMenu
= _viewDataService.Menus.FirstOrDefault(m => m.MenuType == MenuType.VariableTableMenu &&
m.TargetId == variableTable.Id);
if (variableTableMenu != null)
{
_menuDataService.DeleteMenuToView(variableTableMenu);
}
// 从视图数据服务中删除变量表
_viewDataService.VariableTables.Remove(variableTable.Id);
// 从设备的变量表集合中移除该变量表
variableTable.Device?.VariableTables.Remove(variableTable);
return true;
}
}