diff --git a/DMS.Application/DTOs/CreateVariableTableWithMenuDto.cs b/DMS.Application/DTOs/CreateVariableTableWithMenuDto.cs new file mode 100644 index 0000000..78bc00c --- /dev/null +++ b/DMS.Application/DTOs/CreateVariableTableWithMenuDto.cs @@ -0,0 +1,12 @@ + +using DMS.Core.Models; + +namespace DMS.Application.DTOs +{ + public class CreateVariableTableWithMenuDto + { + public VariableTableDto VariableTable { get; set; } + public int DeviceId { get; set; } + public MenuBeanDto Menu { get; set; } + } +} diff --git a/DMS.Application/Interfaces/IVariableTableAppService.cs b/DMS.Application/Interfaces/IVariableTableAppService.cs new file mode 100644 index 0000000..e1879e7 --- /dev/null +++ b/DMS.Application/Interfaces/IVariableTableAppService.cs @@ -0,0 +1,16 @@ + +using DMS.Application.DTOs; +using System.Collections.Generic; +using System.Threading.Tasks; + +namespace DMS.Application.Interfaces +{ + public interface IVariableTableAppService + { + Task GetVariableTableByIdAsync(int id); + Task> GetAllVariableTablesAsync(); + Task CreateVariableTableAsync(CreateVariableTableWithMenuDto createDto); + Task UpdateVariableTableAsync(VariableTableDto variableTableDto); + Task DeleteVariableTableAsync(int id); + } +} diff --git a/DMS.Application/Services/DeviceService.cs b/DMS.Application/Services/DeviceAppService.cs similarity index 98% rename from DMS.Application/Services/DeviceService.cs rename to DMS.Application/Services/DeviceAppService.cs index 7db0ccb..e5759dc 100644 --- a/DMS.Application/Services/DeviceService.cs +++ b/DMS.Application/Services/DeviceAppService.cs @@ -10,7 +10,7 @@ namespace DMS.Application.Services; /// /// 实现设备管理的应用服务。 /// -public class DeviceService : IDeviceAppService +public class DeviceAppService : IDeviceAppService { private readonly IRepositoryManager _repoManager; private readonly IMapper _mapper; @@ -18,7 +18,7 @@ public class DeviceService : IDeviceAppService /// /// 构造函数,通过依赖注入获取仓储管理器和AutoMapper实例。 /// - public DeviceService(IRepositoryManager repoManager, IMapper mapper) + public DeviceAppService(IRepositoryManager repoManager, IMapper mapper) { _repoManager = repoManager; _mapper = mapper; diff --git a/DMS.Application/Services/VariableTableAppService.cs b/DMS.Application/Services/VariableTableAppService.cs new file mode 100644 index 0000000..97af599 --- /dev/null +++ b/DMS.Application/Services/VariableTableAppService.cs @@ -0,0 +1,90 @@ +using AutoMapper; +using DMS.Application.DTOs; +using DMS.Application.Interfaces; +using DMS.Core.Interfaces; +using DMS.Core.Models; +using System.Collections.Generic; +using System.Threading.Tasks; +using DMS.Core.Enums; + +namespace DMS.Application.Services +{ + public class VariableTableAppService : IVariableTableAppService + { + private readonly IRepositoryManager _repositoryManager; + private readonly IMapper _mapper; + + public VariableTableAppService(IRepositoryManager repositoryManager, IMapper mapper) + { + _repositoryManager = repositoryManager; + _mapper = mapper; + } + + public async Task GetVariableTableByIdAsync(int id) + { + var variableTable = await _repositoryManager.VariableTables.GetByIdAsync(id); + return _mapper.Map(variableTable); + } + + public async Task> GetAllVariableTablesAsync() + { + var variableTables = await _repositoryManager.VariableTables.GetAllAsync(); + return _mapper.Map>(variableTables); + } + + public async Task CreateVariableTableAsync(CreateVariableTableWithMenuDto createDto) + { + await _repositoryManager.BeginTranAsync(); + try + { + var variableTable = _mapper.Map(createDto.VariableTable); + variableTable.DeviceId = createDto.DeviceId; + + var createdVariableTable = await _repositoryManager.VariableTables.AddAsync(variableTable); + if (createdVariableTable.Id == 0) + { + throw new ApplicationException($"添加变量表失败,设备ID:{createDto.DeviceId},请检查。"); + } + + if (createDto.Menu!=null) + { + var deviceMenu + = await _repositoryManager.Menus.GetMenuByTargetIdAsync( + MenuType.DeviceMenu, createDto.DeviceId); + if (deviceMenu == null) + { + throw new ApplicationException($"添加变量表菜单时,找不到设备ID:{createDto.DeviceId},请检查。"); + } + + var menu = _mapper.Map(createDto.Menu); + menu.ParentId = deviceMenu.Id; + menu.TargetId = createdVariableTable.Id; + menu.MenuType = MenuType.VariableTableMenu; + await _repositoryManager.Menus.AddAsync(menu); + } + + + + await _repositoryManager.CommitAsync(); + + return _mapper.Map(createdVariableTable); + } + catch + { + await _repositoryManager.RollbackAsync(); + throw; + } + } + + public async Task UpdateVariableTableAsync(VariableTableDto variableTableDto) + { + var variableTable = _mapper.Map(variableTableDto); + await _repositoryManager.VariableTables.UpdateAsync(variableTable); + } + + public async Task DeleteVariableTableAsync(int id) + { + await _repositoryManager.VariableTables.DeleteByIdAsync(id); + } + } +} \ No newline at end of file diff --git a/DMS.Core/Interfaces/Repositories/IMenuRepository.cs b/DMS.Core/Interfaces/Repositories/IMenuRepository.cs index 98ce90f..0cf8332 100644 --- a/DMS.Core/Interfaces/Repositories/IMenuRepository.cs +++ b/DMS.Core/Interfaces/Repositories/IMenuRepository.cs @@ -8,5 +8,6 @@ namespace DMS.Core.Interfaces.Repositories { Task DeleteMenuTreeByIdAsync(int id); Task DeleteMenuTreeByTargetIdAsync(MenuType menuType, int targetId); + Task GetMenuByTargetIdAsync(MenuType menuType, int targetId); } } \ No newline at end of file diff --git a/DMS.Infrastructure.UnitTests/Services/BaseServiceTest.cs b/DMS.Infrastructure.UnitTests/Services/BaseServiceTest.cs index e1e2b46..15abe4f 100644 --- a/DMS.Infrastructure.UnitTests/Services/BaseServiceTest.cs +++ b/DMS.Infrastructure.UnitTests/Services/BaseServiceTest.cs @@ -49,7 +49,8 @@ public class BaseServiceTest services.AddTransient(); // 注册应用服务 - services.AddTransient(); + services.AddTransient(); + services.AddTransient(); // services.AddTransient(); // 如果需要测试 VariableService,取消此行注释 // ... 在这里注册所有其他的应用服务 ... diff --git a/DMS.Infrastructure.UnitTests/Services/DeviceServiceTest.cs b/DMS.Infrastructure.UnitTests/Services/DeviceAppServiceTest.cs similarity index 92% rename from DMS.Infrastructure.UnitTests/Services/DeviceServiceTest.cs rename to DMS.Infrastructure.UnitTests/Services/DeviceAppServiceTest.cs index edcf429..4d74919 100644 --- a/DMS.Infrastructure.UnitTests/Services/DeviceServiceTest.cs +++ b/DMS.Infrastructure.UnitTests/Services/DeviceAppServiceTest.cs @@ -6,12 +6,12 @@ using Microsoft.Extensions.DependencyInjection; namespace DMS.Infrastructure.UnitTests.Services; -[TestSubject(typeof(DeviceService))] -public class DeviceServiceTest : BaseServiceTest // 继承基类 +[TestSubject(typeof(DeviceAppService))] +public class DeviceAppServiceTest : BaseServiceTest // 继承基类 { private readonly IDeviceAppService _deviceService; - public DeviceServiceTest() : base() + public DeviceAppServiceTest() : base() { // 从 IoC 容器中解析出需要测试的服务 // 使用 GetRequiredService 可以确保如果服务未注册,测试会立即失败,这通常是我们想要的。 diff --git a/DMS.Infrastructure.UnitTests/Services/VariableTableAppServiceTest.cs b/DMS.Infrastructure.UnitTests/Services/VariableTableAppServiceTest.cs new file mode 100644 index 0000000..261ff1f --- /dev/null +++ b/DMS.Infrastructure.UnitTests/Services/VariableTableAppServiceTest.cs @@ -0,0 +1,31 @@ +using DMS.Application.DTOs; +using DMS.Application.Interfaces; +using DMS.Application.Services; +using JetBrains.Annotations; +using Microsoft.Extensions.DependencyInjection; + +namespace DMS.Infrastructure.UnitTests.Services; + +[TestSubject(typeof(VariableTableAppService))] +public class VariableTableAppServiceTest : BaseServiceTest +{ + private readonly IVariableTableAppService _variableTableAppService; + + public VariableTableAppServiceTest() + { + _variableTableAppService = ServiceProvider.GetRequiredService(); + } + + [Fact] + public async Task CreateVariableTableAsyncTest() + { + var dto = new CreateVariableTableWithMenuDto() + { + VariableTable = FakerHelper.FakeVariableTableDto(), + Menu = FakerHelper.FakeCreateMenuDto(), + DeviceId = 5 + }; + var addVarTable= await _variableTableAppService.CreateVariableTableAsync(dto); + Assert.NotEqual(addVarTable.Id, 0); + } +} \ No newline at end of file diff --git a/DMS.Infrastructure/Repositories/MenuRepository.cs b/DMS.Infrastructure/Repositories/MenuRepository.cs index c44da85..a878834 100644 --- a/DMS.Infrastructure/Repositories/MenuRepository.cs +++ b/DMS.Infrastructure/Repositories/MenuRepository.cs @@ -101,6 +101,12 @@ public class MenuRepository : BaseRepository, IMenuRepository return delConut; } + public async Task GetMenuByTargetIdAsync(MenuType menuType, int targetId) + { + var dbMenu = await Db.Queryable().FirstAsync(m => m.MenuType == menuType && m.TargetId == targetId); + return _mapper.Map(dbMenu); + } + public new async Task> TakeAsync(int number) { var dbList = await base.TakeAsync(number);