From fcea4c63a7d70a3eeee3e3a00c1bd7f2125dd4f9 Mon Sep 17 00:00:00 2001 From: chenchun Date: Thu, 27 Jun 2024 18:37:49 +0800 Subject: [PATCH 1/2] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9E=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=E7=AE=A1=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Yi.Abp.Net8/Yi.Abp.sln | 21 +++++++++----- .../Entities/SettingAggregateRoot.cs | 18 ------------ .../Managers/AccountManager.cs | 2 +- .../SettingManagementAppServiceBase.cs | 12 ++++++++ ...ework.SettingManagement.Application.csproj | 17 +++++++++++ ...eworkSettingManagementApplicationModule.cs | 15 ++++++++++ .../ISettingRepository.cs | 8 +++--- ...ttingEntity.cs => SettingAggregateRoot.cs} | 9 ++++-- .../SettingCacheItemInvalidator.cs | 4 +-- .../SettingManagementStore.cs | 2 +- ....Framework.SettingManagement.Domain.csproj | 4 +++ .../SqlSugarCoreSettingRepository.cs | 8 +++--- .../Yi.Abp.Application.Contracts.csproj | 4 ++- .../YiAbpApplicationContractsModule.cs | 4 ++- .../Services/TestService.cs | 27 ++++++++++++++++-- .../Yi.Abp.Application.csproj | 3 +- .../YiAbpApplicationModule.cs | 5 +++- .../Yi.Abp.Domain.Shared.csproj | 3 ++ .../YiAbpDomainSharedModule.cs | 2 ++ .../src/Yi.Abp.Domain/Yi.Abp.Domain.csproj | 4 ++- .../src/Yi.Abp.Domain/YiAbpDomainModule.cs | 4 ++- .../Yi.Abp.SqlSugarCore.csproj | 2 ++ .../YiAbpSqlSugarCoreModule.cs | 2 ++ Yi.Abp.Net8/src/Yi.Abp.Web/yi-abp-dev.db | Bin 0 -> 487424 bytes 24 files changed, 132 insertions(+), 48 deletions(-) delete mode 100644 Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Domain/Entities/SettingAggregateRoot.cs create mode 100644 Yi.Abp.Net8/module/setting-management/Yi.Framework.SettingManagement.Application/SettingManagementAppServiceBase.cs create mode 100644 Yi.Abp.Net8/module/setting-management/Yi.Framework.SettingManagement.Application/Yi.Framework.SettingManagement.Application.csproj create mode 100644 Yi.Abp.Net8/module/setting-management/Yi.Framework.SettingManagement.Application/YiFrameworkSettingManagementApplicationModule.cs rename Yi.Abp.Net8/module/setting-management/Yi.Framework.SettingManagement.Domain/{SettingEntity.cs => SettingAggregateRoot.cs} (83%) create mode 100644 Yi.Abp.Net8/src/Yi.Abp.Web/yi-abp-dev.db diff --git a/Yi.Abp.Net8/Yi.Abp.sln b/Yi.Abp.Net8/Yi.Abp.sln index fef906fa..0a1bd352 100644 --- a/Yi.Abp.Net8/Yi.Abp.sln +++ b/Yi.Abp.Net8/Yi.Abp.sln @@ -152,19 +152,21 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Yi.Framework.Rbac.Test", "t EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tool", "tool", "{084CBEEC-5D37-4716-B9C7-D80D6960DFF4}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Yi.Abp.Tool", "tool\Yi.Abp.Tool\Yi.Abp.Tool.csproj", "{4FEBBDD9-E4F4-4BAF-8599-E2D57C08A74F}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Yi.Abp.Tool", "tool\Yi.Abp.Tool\Yi.Abp.Tool.csproj", "{4FEBBDD9-E4F4-4BAF-8599-E2D57C08A74F}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Yi.Abp.Tool.Web", "tool\Yi.Abp.Tool.Web\Yi.Abp.Tool.Web.csproj", "{2CE51D4C-1EF9-462B-BA14-7EA01A7E4AF1}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Yi.Abp.Tool.Web", "tool\Yi.Abp.Tool.Web\Yi.Abp.Tool.Web.csproj", "{2CE51D4C-1EF9-462B-BA14-7EA01A7E4AF1}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Yi.Abp.Tool.Application", "tool\Yi.Abp.Tool.Application\Yi.Abp.Tool.Application.csproj", "{776590BA-B900-4C8B-986A-5B721FA4B306}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Yi.Abp.Tool.Application", "tool\Yi.Abp.Tool.Application\Yi.Abp.Tool.Application.csproj", "{776590BA-B900-4C8B-986A-5B721FA4B306}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Yi.Abp.Tool.Application.Contracts", "tool\Yi.Abp.Tool.Application.Contracts\Yi.Abp.Tool.Application.Contracts.csproj", "{3A3AF1ED-FC7F-48CF-8ACE-9D50426B4675}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Yi.Abp.Tool.Application.Contracts", "tool\Yi.Abp.Tool.Application.Contracts\Yi.Abp.Tool.Application.Contracts.csproj", "{3A3AF1ED-FC7F-48CF-8ACE-9D50426B4675}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Yi.Abp.Tool.Domain", "tool\Yi.Abp.Tool.Domain\Yi.Abp.Tool.Domain.csproj", "{68F73B7B-0F8A-41C1-8092-6D6FFAED32F8}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Yi.Abp.Tool.Domain", "tool\Yi.Abp.Tool.Domain\Yi.Abp.Tool.Domain.csproj", "{68F73B7B-0F8A-41C1-8092-6D6FFAED32F8}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Yi.Abp.Tool.Domain.Shared", "tool\Yi.Abp.Tool.Domain.Shared\Yi.Abp.Tool.Domain.Shared.csproj", "{4AE84CDE-2A47-4D68-8E93-86193F72E4E8}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Yi.Abp.Tool.Domain.Shared", "tool\Yi.Abp.Tool.Domain.Shared\Yi.Abp.Tool.Domain.Shared.csproj", "{4AE84CDE-2A47-4D68-8E93-86193F72E4E8}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Yi.Abp.Tool.HttpApi.Client", "tool\Yi.Abp.Tool.HttpApi.Client\Yi.Abp.Tool.HttpApi.Client.csproj", "{C8F97775-D903-4365-A4FF-3DA97E318CD2}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Yi.Abp.Tool.HttpApi.Client", "tool\Yi.Abp.Tool.HttpApi.Client\Yi.Abp.Tool.HttpApi.Client.csproj", "{C8F97775-D903-4365-A4FF-3DA97E318CD2}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Yi.Framework.SettingManagement.Application", "module\setting-management\Yi.Framework.SettingManagement.Application\Yi.Framework.SettingManagement.Application.csproj", "{2A31D7CB-BDCC-4253-BA73-273B6B5E1956}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -420,6 +422,10 @@ Global {C8F97775-D903-4365-A4FF-3DA97E318CD2}.Debug|Any CPU.Build.0 = Debug|Any CPU {C8F97775-D903-4365-A4FF-3DA97E318CD2}.Release|Any CPU.ActiveCfg = Release|Any CPU {C8F97775-D903-4365-A4FF-3DA97E318CD2}.Release|Any CPU.Build.0 = Release|Any CPU + {2A31D7CB-BDCC-4253-BA73-273B6B5E1956}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2A31D7CB-BDCC-4253-BA73-273B6B5E1956}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2A31D7CB-BDCC-4253-BA73-273B6B5E1956}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2A31D7CB-BDCC-4253-BA73-273B6B5E1956}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -494,6 +500,7 @@ Global {68F73B7B-0F8A-41C1-8092-6D6FFAED32F8} = {084CBEEC-5D37-4716-B9C7-D80D6960DFF4} {4AE84CDE-2A47-4D68-8E93-86193F72E4E8} = {084CBEEC-5D37-4716-B9C7-D80D6960DFF4} {C8F97775-D903-4365-A4FF-3DA97E318CD2} = {084CBEEC-5D37-4716-B9C7-D80D6960DFF4} + {2A31D7CB-BDCC-4253-BA73-273B6B5E1956} = {8C68059E-F3B1-4D28-A1C9-A5830F53E5D3} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {23D6FBC9-C970-4641-BC1E-2AEA59F51C18} diff --git a/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Domain/Entities/SettingAggregateRoot.cs b/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Domain/Entities/SettingAggregateRoot.cs deleted file mode 100644 index a4881e0e..00000000 --- a/Yi.Abp.Net8/module/bbs/Yi.Framework.Bbs.Domain/Entities/SettingAggregateRoot.cs +++ /dev/null @@ -1,18 +0,0 @@ -using SqlSugar; -using Volo.Abp.Domain.Entities; - -namespace Yi.Framework.Bbs.Domain.Entities -{ - [SugarTable("Setting")] - public class SettingAggregateRoot : AggregateRoot - { - - [SugarColumn(ColumnName = "Id", IsPrimaryKey = true)] - public override Guid Id { get; protected set; } - public int CommentPage { get; set; } - public int DiscussPage { get; set; } - public int CommentExperience { get; set; } - public int DiscussExperience { get; set; } - public string Title { get; set; } - } -} diff --git a/Yi.Abp.Net8/module/rbac/Yi.Framework.Rbac.Domain/Managers/AccountManager.cs b/Yi.Abp.Net8/module/rbac/Yi.Framework.Rbac.Domain/Managers/AccountManager.cs index 4e2ba7ff..b7a58206 100644 --- a/Yi.Abp.Net8/module/rbac/Yi.Framework.Rbac.Domain/Managers/AccountManager.cs +++ b/Yi.Abp.Net8/module/rbac/Yi.Framework.Rbac.Domain/Managers/AccountManager.cs @@ -83,7 +83,7 @@ namespace Yi.Framework.Rbac.Domain.Managers { throw new UserFriendlyException(UserConst.No_Permission); } - //这里抛出一个登录的事件 + //这里抛出一个登录的事件,也可以在全部流程走完,在应用层组装 if (_httpContextAccessor.HttpContext is not null) { var loginEntity = new LoginLogAggregateRoot().GetInfoByHttpContext(_httpContextAccessor.HttpContext); diff --git a/Yi.Abp.Net8/module/setting-management/Yi.Framework.SettingManagement.Application/SettingManagementAppServiceBase.cs b/Yi.Abp.Net8/module/setting-management/Yi.Framework.SettingManagement.Application/SettingManagementAppServiceBase.cs new file mode 100644 index 00000000..03ba0bc2 --- /dev/null +++ b/Yi.Abp.Net8/module/setting-management/Yi.Framework.SettingManagement.Application/SettingManagementAppServiceBase.cs @@ -0,0 +1,12 @@ +using Volo.Abp.Application.Services; +using Volo.Abp.SettingManagement.Localization; + +namespace Yi.Framework.SettingManagement.Application; + +public abstract class SettingManagementAppServiceBase : ApplicationService +{ + protected SettingManagementAppServiceBase() + { + LocalizationResource = typeof(AbpSettingManagementResource); + } +} diff --git a/Yi.Abp.Net8/module/setting-management/Yi.Framework.SettingManagement.Application/Yi.Framework.SettingManagement.Application.csproj b/Yi.Abp.Net8/module/setting-management/Yi.Framework.SettingManagement.Application/Yi.Framework.SettingManagement.Application.csproj new file mode 100644 index 00000000..b009a768 --- /dev/null +++ b/Yi.Abp.Net8/module/setting-management/Yi.Framework.SettingManagement.Application/Yi.Framework.SettingManagement.Application.csproj @@ -0,0 +1,17 @@ + + + + net8.0 + enable + enable + + + + + + + + + + + diff --git a/Yi.Abp.Net8/module/setting-management/Yi.Framework.SettingManagement.Application/YiFrameworkSettingManagementApplicationModule.cs b/Yi.Abp.Net8/module/setting-management/Yi.Framework.SettingManagement.Application/YiFrameworkSettingManagementApplicationModule.cs new file mode 100644 index 00000000..6bb5d69a --- /dev/null +++ b/Yi.Abp.Net8/module/setting-management/Yi.Framework.SettingManagement.Application/YiFrameworkSettingManagementApplicationModule.cs @@ -0,0 +1,15 @@ +using Volo.Abp.Application; +using Volo.Abp.Modularity; +using Volo.Abp.SettingManagement; +using Volo.Abp.Timing; + +namespace Yi.Framework.SettingManagement.Application; + +[DependsOn( + typeof(AbpDddApplicationModule), + typeof(AbpSettingManagementApplicationContractsModule), + typeof(AbpTimingModule) +)] +public class YiFrameworkSettingManagementApplicationModule : AbpModule +{ +} diff --git a/Yi.Abp.Net8/module/setting-management/Yi.Framework.SettingManagement.Domain/ISettingRepository.cs b/Yi.Abp.Net8/module/setting-management/Yi.Framework.SettingManagement.Domain/ISettingRepository.cs index b45823db..404804e2 100644 --- a/Yi.Abp.Net8/module/setting-management/Yi.Framework.SettingManagement.Domain/ISettingRepository.cs +++ b/Yi.Abp.Net8/module/setting-management/Yi.Framework.SettingManagement.Domain/ISettingRepository.cs @@ -6,20 +6,20 @@ using Volo.Abp.Domain.Repositories; namespace Yi.Framework.SettingManagement.Domain; -public interface ISettingRepository : IBasicRepository +public interface ISettingRepository : IBasicRepository { - Task FindAsync( + Task FindAsync( string name, string providerName, string providerKey, CancellationToken cancellationToken = default); - Task> GetListAsync( + Task> GetListAsync( string providerName, string providerKey, CancellationToken cancellationToken = default); - Task> GetListAsync( + Task> GetListAsync( string[] names, string providerName, string providerKey, diff --git a/Yi.Abp.Net8/module/setting-management/Yi.Framework.SettingManagement.Domain/SettingEntity.cs b/Yi.Abp.Net8/module/setting-management/Yi.Framework.SettingManagement.Domain/SettingAggregateRoot.cs similarity index 83% rename from Yi.Abp.Net8/module/setting-management/Yi.Framework.SettingManagement.Domain/SettingEntity.cs rename to Yi.Abp.Net8/module/setting-management/Yi.Framework.SettingManagement.Domain/SettingAggregateRoot.cs index 619dc64c..7276fa90 100644 --- a/Yi.Abp.Net8/module/setting-management/Yi.Framework.SettingManagement.Domain/SettingEntity.cs +++ b/Yi.Abp.Net8/module/setting-management/Yi.Framework.SettingManagement.Domain/SettingAggregateRoot.cs @@ -1,10 +1,13 @@ using JetBrains.Annotations; +using SqlSugar; using Volo.Abp; using Volo.Abp.Domain.Entities; +using Check = Volo.Abp.Check; namespace Yi.Framework.SettingManagement.Domain; -public class SettingEntity : Entity, IAggregateRoot +[SugarTable("Setting")] +public class SettingAggregateRoot : Entity, IAggregateRoot { [NotNull] public virtual string Name { get; protected set; } @@ -18,12 +21,12 @@ public class SettingEntity : Entity, IAggregateRoot [CanBeNull] public virtual string ProviderKey { get; protected set; } - public SettingEntity() + public SettingAggregateRoot() { } - public SettingEntity( + public SettingAggregateRoot( Guid id, [NotNull] string name, [NotNull] string value, diff --git a/Yi.Abp.Net8/module/setting-management/Yi.Framework.SettingManagement.Domain/SettingCacheItemInvalidator.cs b/Yi.Abp.Net8/module/setting-management/Yi.Framework.SettingManagement.Domain/SettingCacheItemInvalidator.cs index c8c5278a..7d55ac13 100644 --- a/Yi.Abp.Net8/module/setting-management/Yi.Framework.SettingManagement.Domain/SettingCacheItemInvalidator.cs +++ b/Yi.Abp.Net8/module/setting-management/Yi.Framework.SettingManagement.Domain/SettingCacheItemInvalidator.cs @@ -6,7 +6,7 @@ using Volo.Abp.EventBus; namespace Yi.Framework.SettingManagement.Domain; -public class SettingCacheItemInvalidator : ILocalEventHandler>, ITransientDependency +public class SettingCacheItemInvalidator : ILocalEventHandler>, ITransientDependency { protected IDistributedCache Cache { get; } @@ -15,7 +15,7 @@ public class SettingCacheItemInvalidator : ILocalEventHandler eventData) + public virtual async Task HandleEventAsync(EntityChangedEventData eventData) { var cacheKey = CalculateCacheKey( eventData.Entity.Name, diff --git a/Yi.Abp.Net8/module/setting-management/Yi.Framework.SettingManagement.Domain/SettingManagementStore.cs b/Yi.Abp.Net8/module/setting-management/Yi.Framework.SettingManagement.Domain/SettingManagementStore.cs index 86a52d45..bbb1607c 100644 --- a/Yi.Abp.Net8/module/setting-management/Yi.Framework.SettingManagement.Domain/SettingManagementStore.cs +++ b/Yi.Abp.Net8/module/setting-management/Yi.Framework.SettingManagement.Domain/SettingManagementStore.cs @@ -41,7 +41,7 @@ public class SettingManagementStore : ISettingManagementStore, ITransientDepende var setting = await SettingRepository.FindAsync(name, providerName, providerKey); if (setting == null) { - setting = new SettingEntity(GuidGenerator.Create(), name, value, providerName, providerKey); + setting = new SettingAggregateRoot(GuidGenerator.Create(), name, value, providerName, providerKey); await SettingRepository.InsertAsync(setting); } else diff --git a/Yi.Abp.Net8/module/setting-management/Yi.Framework.SettingManagement.Domain/Yi.Framework.SettingManagement.Domain.csproj b/Yi.Abp.Net8/module/setting-management/Yi.Framework.SettingManagement.Domain/Yi.Framework.SettingManagement.Domain.csproj index 4f307300..b1890f7c 100644 --- a/Yi.Abp.Net8/module/setting-management/Yi.Framework.SettingManagement.Domain/Yi.Framework.SettingManagement.Domain.csproj +++ b/Yi.Abp.Net8/module/setting-management/Yi.Framework.SettingManagement.Domain/Yi.Framework.SettingManagement.Domain.csproj @@ -11,4 +11,8 @@ + + + + diff --git a/Yi.Abp.Net8/module/setting-management/Yi.Framework.SettingManagement.SqlSugarCore/SqlSugarCoreSettingRepository.cs b/Yi.Abp.Net8/module/setting-management/Yi.Framework.SettingManagement.SqlSugarCore/SqlSugarCoreSettingRepository.cs index f4972cc4..db565913 100644 --- a/Yi.Abp.Net8/module/setting-management/Yi.Framework.SettingManagement.SqlSugarCore/SqlSugarCoreSettingRepository.cs +++ b/Yi.Abp.Net8/module/setting-management/Yi.Framework.SettingManagement.SqlSugarCore/SqlSugarCoreSettingRepository.cs @@ -4,14 +4,14 @@ using Yi.Framework.SqlSugarCore.Repositories; namespace Volo.Abp.SettingManagement.EntityFrameworkCore; -public class SqlSugarCoreSettingRepository : SqlSugarRepository, +public class SqlSugarCoreSettingRepository : SqlSugarRepository, ISettingRepository { public SqlSugarCoreSettingRepository(ISugarDbContextProvider sugarDbContextProvider) : base(sugarDbContextProvider) { } - public virtual async Task FindAsync( + public virtual async Task FindAsync( string name, string providerName, string providerKey, @@ -23,7 +23,7 @@ public class SqlSugarCoreSettingRepository : SqlSugarRepository> GetListAsync( + public virtual async Task> GetListAsync( string providerName, string providerKey, CancellationToken cancellationToken = default) @@ -34,7 +34,7 @@ public class SqlSugarCoreSettingRepository : SqlSugarRepository> GetListAsync( + public virtual async Task> GetListAsync( string[] names, string providerName, string providerKey, diff --git a/Yi.Abp.Net8/src/Yi.Abp.Application.Contracts/Yi.Abp.Application.Contracts.csproj b/Yi.Abp.Net8/src/Yi.Abp.Application.Contracts/Yi.Abp.Application.Contracts.csproj index 2f90eaa3..0c0cd33e 100644 --- a/Yi.Abp.Net8/src/Yi.Abp.Application.Contracts/Yi.Abp.Application.Contracts.csproj +++ b/Yi.Abp.Net8/src/Yi.Abp.Application.Contracts/Yi.Abp.Application.Contracts.csproj @@ -9,7 +9,9 @@ - + + + diff --git a/Yi.Abp.Net8/src/Yi.Abp.Application.Contracts/YiAbpApplicationContractsModule.cs b/Yi.Abp.Net8/src/Yi.Abp.Application.Contracts/YiAbpApplicationContractsModule.cs index ccc77746..42fc4229 100644 --- a/Yi.Abp.Net8/src/Yi.Abp.Application.Contracts/YiAbpApplicationContractsModule.cs +++ b/Yi.Abp.Net8/src/Yi.Abp.Application.Contracts/YiAbpApplicationContractsModule.cs @@ -1,4 +1,5 @@ -using Yi.Abp.Domain.Shared; +using Volo.Abp.SettingManagement; +using Yi.Abp.Domain.Shared; using Yi.Framework.Bbs.Application.Contracts; using Yi.Framework.ChatHub.Application.Contracts; using Yi.Framework.Ddd.Application.Contracts; @@ -13,6 +14,7 @@ namespace Yi.Abp.Application.Contracts typeof(YiFrameworkRbacApplicationContractsModule), typeof(YiFrameworkBbsApplicationContractsModule), typeof(YiFrameworkChatHubApplicationContractsModule), + typeof(AbpSettingManagementApplicationContractsModule), typeof(YiFrameworkTenantManagementApplicationContractsModule), typeof(YiFrameworkDddApplicationContractsModule))] diff --git a/Yi.Abp.Net8/src/Yi.Abp.Application/Services/TestService.cs b/Yi.Abp.Net8/src/Yi.Abp.Application/Services/TestService.cs index e8c6bcb2..53e2af71 100644 --- a/Yi.Abp.Net8/src/Yi.Abp.Application/Services/TestService.cs +++ b/Yi.Abp.Net8/src/Yi.Abp.Application/Services/TestService.cs @@ -2,11 +2,13 @@ using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.RateLimiting; using Volo.Abp.Application.Services; +using Volo.Abp.Settings; using Volo.Abp.Uow; using Yi.Framework.Bbs.Application.Contracts.Dtos.Banner; using Yi.Framework.Bbs.Domain.Entities.Forum; using Yi.Framework.Rbac.Domain.Authorization; using Yi.Framework.Rbac.Domain.Extensions; +using Yi.Framework.SettingManagement.Domain; using Yi.Framework.SqlSugarCore.Abstractions; namespace Yi.Abp.Application.Services @@ -120,7 +122,7 @@ namespace Yi.Abp.Application.Services var dto = entity.Adapt(); } - + private static int RequestNumber { get; set; } = 0; /// /// 速率限制 /// @@ -132,6 +134,27 @@ namespace Yi.Abp.Application.Services RequestNumber++; return RequestNumber; } - private static int RequestNumber { get; set; } = 0; + + + public ISettingProvider _settingProvider { get; set; } + + public ISettingManager _settingManager { get; set; } + /// + /// 系统配置模块 + /// + /// + public async Task GetSettingAsync() + { + //默认来说,不提供修改操作,配置应该独立 + var enableOrNull = await _settingProvider.GetOrNullAsync("abp.ddd.enable"); + + //如果要进行修改,可使用yi.framework下的ISettingManager + await _settingManager.SetAsync("abp.ddd.enable", "false", "系统", "admin"); + + var enableOrNull2 = await _settingProvider.GetOrNullAsync("abp.ddd.enable"); + + return enableOrNull2 ?? string.Empty; + } + } } diff --git a/Yi.Abp.Net8/src/Yi.Abp.Application/Yi.Abp.Application.csproj b/Yi.Abp.Net8/src/Yi.Abp.Application/Yi.Abp.Application.csproj index c25d7387..0fba17dc 100644 --- a/Yi.Abp.Net8/src/Yi.Abp.Application/Yi.Abp.Application.csproj +++ b/Yi.Abp.Net8/src/Yi.Abp.Application/Yi.Abp.Application.csproj @@ -8,10 +8,11 @@ + - + diff --git a/Yi.Abp.Net8/src/Yi.Abp.Application/YiAbpApplicationModule.cs b/Yi.Abp.Net8/src/Yi.Abp.Application/YiAbpApplicationModule.cs index 939e5440..87cafe95 100644 --- a/Yi.Abp.Net8/src/Yi.Abp.Application/YiAbpApplicationModule.cs +++ b/Yi.Abp.Net8/src/Yi.Abp.Application/YiAbpApplicationModule.cs @@ -1,10 +1,12 @@ -using Yi.Abp.Application.Contracts; +using Volo.Abp.SettingManagement; +using Yi.Abp.Application.Contracts; using Yi.Abp.Domain; using Yi.Framework.Bbs.Application; using Yi.Framework.ChatHub.Application; using Yi.Framework.CodeGen.Application; using Yi.Framework.Ddd.Application; using Yi.Framework.Rbac.Application; +using Yi.Framework.SettingManagement.Application; using Yi.Framework.TenantManagement.Application; namespace Yi.Abp.Application @@ -19,6 +21,7 @@ namespace Yi.Abp.Application typeof(YiFrameworkChatHubApplicationModule), typeof(YiFrameworkTenantManagementApplicationModule), typeof(YiFrameworkCodeGenApplicationModule), + typeof (YiFrameworkSettingManagementApplicationModule), typeof(YiFrameworkDddApplicationModule) )] diff --git a/Yi.Abp.Net8/src/Yi.Abp.Domain.Shared/Yi.Abp.Domain.Shared.csproj b/Yi.Abp.Net8/src/Yi.Abp.Domain.Shared/Yi.Abp.Domain.Shared.csproj index 3b9750f9..a282e13a 100644 --- a/Yi.Abp.Net8/src/Yi.Abp.Domain.Shared/Yi.Abp.Domain.Shared.csproj +++ b/Yi.Abp.Net8/src/Yi.Abp.Domain.Shared/Yi.Abp.Domain.Shared.csproj @@ -12,6 +12,9 @@ + + + diff --git a/Yi.Abp.Net8/src/Yi.Abp.Domain.Shared/YiAbpDomainSharedModule.cs b/Yi.Abp.Net8/src/Yi.Abp.Domain.Shared/YiAbpDomainSharedModule.cs index d6728103..bab6b8ef 100644 --- a/Yi.Abp.Net8/src/Yi.Abp.Domain.Shared/YiAbpDomainSharedModule.cs +++ b/Yi.Abp.Net8/src/Yi.Abp.Domain.Shared/YiAbpDomainSharedModule.cs @@ -1,4 +1,5 @@ using Volo.Abp.Domain; +using Volo.Abp.SettingManagement; using Yi.Framework.AuditLogging.Domain.Shared; using Yi.Framework.Bbs.Domain.Shared; using Yi.Framework.ChatHub.Domain.Shared; @@ -12,6 +13,7 @@ namespace Yi.Abp.Domain.Shared typeof(YiFrameworkChatHubDomainSharedModule), typeof(YiFrameworkAuditLoggingDomainSharedModule), + typeof(AbpSettingManagementDomainSharedModule), typeof(AbpDddDomainSharedModule))] public class YiAbpDomainSharedModule : AbpModule { diff --git a/Yi.Abp.Net8/src/Yi.Abp.Domain/Yi.Abp.Domain.csproj b/Yi.Abp.Net8/src/Yi.Abp.Domain/Yi.Abp.Domain.csproj index 186560ef..a7e6fbff 100644 --- a/Yi.Abp.Net8/src/Yi.Abp.Domain/Yi.Abp.Domain.csproj +++ b/Yi.Abp.Net8/src/Yi.Abp.Domain/Yi.Abp.Domain.csproj @@ -13,11 +13,13 @@ + - + + diff --git a/Yi.Abp.Net8/src/Yi.Abp.Domain/YiAbpDomainModule.cs b/Yi.Abp.Net8/src/Yi.Abp.Domain/YiAbpDomainModule.cs index f405f28a..d49c75ba 100644 --- a/Yi.Abp.Net8/src/Yi.Abp.Domain/YiAbpDomainModule.cs +++ b/Yi.Abp.Net8/src/Yi.Abp.Domain/YiAbpDomainModule.cs @@ -7,18 +7,20 @@ using Yi.Framework.Bbs.Domain; using Yi.Framework.ChatHub.Domain; using Yi.Framework.Mapster; using Yi.Framework.Rbac.Domain; +using Yi.Framework.SettingManagement.Domain; using Yi.Framework.TenantManagement.Domain; namespace Yi.Abp.Domain { [DependsOn( typeof(YiAbpDomainSharedModule), - + typeof(YiFrameworkTenantManagementDomainModule), typeof(YiFrameworkRbacDomainModule), typeof(YiFrameworkBbsDomainModule), typeof(YiFrameworkChatHubDomainModule), typeof(YiFrameworkAuditLoggingDomainModule), + typeof(YiFrameworkSettingManagementDomainModule), typeof(YiFrameworkMapsterModule), typeof(AbpDddDomainModule), diff --git a/Yi.Abp.Net8/src/Yi.Abp.SqlSugarCore/Yi.Abp.SqlSugarCore.csproj b/Yi.Abp.Net8/src/Yi.Abp.SqlSugarCore/Yi.Abp.SqlSugarCore.csproj index f943ca62..49a97826 100644 --- a/Yi.Abp.Net8/src/Yi.Abp.SqlSugarCore/Yi.Abp.SqlSugarCore.csproj +++ b/Yi.Abp.Net8/src/Yi.Abp.SqlSugarCore/Yi.Abp.SqlSugarCore.csproj @@ -9,10 +9,12 @@ + + diff --git a/Yi.Abp.Net8/src/Yi.Abp.SqlSugarCore/YiAbpSqlSugarCoreModule.cs b/Yi.Abp.Net8/src/Yi.Abp.SqlSugarCore/YiAbpSqlSugarCoreModule.cs index 71c54e4e..b3e27036 100644 --- a/Yi.Abp.Net8/src/Yi.Abp.SqlSugarCore/YiAbpSqlSugarCoreModule.cs +++ b/Yi.Abp.Net8/src/Yi.Abp.SqlSugarCore/YiAbpSqlSugarCoreModule.cs @@ -8,6 +8,7 @@ using Yi.Framework.ChatHub.SqlSugarCore; using Yi.Framework.CodeGen.SqlSugarCore; using Yi.Framework.Mapster; using Yi.Framework.Rbac.SqlSugarCore; +using Yi.Framework.SettingManagement.SqlSugarCore; using Yi.Framework.SqlSugarCore; using Yi.Framework.SqlSugarCore.Abstractions; using Yi.Framework.TenantManagement.SqlSugarCore; @@ -22,6 +23,7 @@ namespace Yi.Abp.SqlsugarCore typeof(YiFrameworkCodeGenSqlSugarCoreModule), typeof(YiFrameworkChatHubSqlSugarCoreModule), + typeof(YiFrameworkSettingManagementSqlSugarCoreModule), typeof(YiFrameworkAuditLoggingSqlSugarCoreModule), typeof(YiFrameworkTenantManagementSqlSugarCoreModule), typeof(YiFrameworkMapsterModule), diff --git a/Yi.Abp.Net8/src/Yi.Abp.Web/yi-abp-dev.db b/Yi.Abp.Net8/src/Yi.Abp.Web/yi-abp-dev.db new file mode 100644 index 0000000000000000000000000000000000000000..929b55f1430dd47d7ec17503ab52ca3bb9e4f76d GIT binary patch literal 487424 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 literal 0 HcmV?d00001 From 1843b9c44fd31d3e0734fff14d924911bd7006f4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=A9=99=E5=AD=90?= <454313500@qq.com> Date: Thu, 27 Jun 2024 22:39:09 +0800 Subject: [PATCH 2/2] =?UTF-8?q?feat:=20=E5=AE=8C=E5=96=84=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SettingAggregateRoot.cs | 4 ++-- .../Services/TestService.cs | 11 +++++---- .../Settings/TestSettingProvider.cs | 22 ++++++++++++++++++ Yi.Abp.Net8/src/Yi.Abp.Web/appsettings.json | 5 +++- Yi.Abp.Net8/src/Yi.Abp.Web/yi-abp-dev.db | Bin 487424 -> 487424 bytes 5 files changed, 35 insertions(+), 7 deletions(-) create mode 100644 Yi.Abp.Net8/src/Yi.Abp.Domain.Shared/Settings/TestSettingProvider.cs diff --git a/Yi.Abp.Net8/module/setting-management/Yi.Framework.SettingManagement.Domain/SettingAggregateRoot.cs b/Yi.Abp.Net8/module/setting-management/Yi.Framework.SettingManagement.Domain/SettingAggregateRoot.cs index 7276fa90..cdf7b508 100644 --- a/Yi.Abp.Net8/module/setting-management/Yi.Framework.SettingManagement.Domain/SettingAggregateRoot.cs +++ b/Yi.Abp.Net8/module/setting-management/Yi.Framework.SettingManagement.Domain/SettingAggregateRoot.cs @@ -16,10 +16,10 @@ public class SettingAggregateRoot : Entity, IAggregateRoot public virtual string Value { get; internal set; } [CanBeNull] - public virtual string ProviderName { get; protected set; } + public virtual string? ProviderName { get; protected set; } [CanBeNull] - public virtual string ProviderKey { get; protected set; } + public virtual string? ProviderKey { get; protected set; } public SettingAggregateRoot() { diff --git a/Yi.Abp.Net8/src/Yi.Abp.Application/Services/TestService.cs b/Yi.Abp.Net8/src/Yi.Abp.Application/Services/TestService.cs index 53e2af71..7c2c0cc4 100644 --- a/Yi.Abp.Net8/src/Yi.Abp.Application/Services/TestService.cs +++ b/Yi.Abp.Net8/src/Yi.Abp.Application/Services/TestService.cs @@ -145,15 +145,18 @@ namespace Yi.Abp.Application.Services /// public async Task GetSettingAsync() { + //DDD需要提前定义 //默认来说,不提供修改操作,配置应该独立 - var enableOrNull = await _settingProvider.GetOrNullAsync("abp.ddd.enable"); + var enableOrNull = await _settingProvider.GetOrNullAsync("DDD"); //如果要进行修改,可使用yi.framework下的ISettingManager - await _settingManager.SetAsync("abp.ddd.enable", "false", "系统", "admin"); + await _settingManager.SetGlobalAsync("DDD", "false"); - var enableOrNull2 = await _settingProvider.GetOrNullAsync("abp.ddd.enable"); + var enableOrNull2 = await _settingManager.GetOrNullGlobalAsync("DDD"); - return enableOrNull2 ?? string.Empty; + //当然,他的独特地方,是支持来自多个模块,例如配置文件? + var result= await _settingManager.GetOrNullConfigurationAsync("Test"); + return result ?? string.Empty; } } diff --git a/Yi.Abp.Net8/src/Yi.Abp.Domain.Shared/Settings/TestSettingProvider.cs b/Yi.Abp.Net8/src/Yi.Abp.Domain.Shared/Settings/TestSettingProvider.cs new file mode 100644 index 00000000..7a4363e8 --- /dev/null +++ b/Yi.Abp.Net8/src/Yi.Abp.Domain.Shared/Settings/TestSettingProvider.cs @@ -0,0 +1,22 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Volo.Abp.Settings; + +namespace Yi.Abp.Domain.Shared.Settings +{ + internal class TestSettingProvider : SettingDefinitionProvider + { + public override void Define(ISettingDefinitionContext context) + { + context.Add( + new SettingDefinition("DDD","127.0.0.1"), + new SettingDefinition("TTT", "127.0.0.1") + ); + + + } + } +} diff --git a/Yi.Abp.Net8/src/Yi.Abp.Web/appsettings.json b/Yi.Abp.Net8/src/Yi.Abp.Web/appsettings.json index 05bb666b..e4228458 100644 --- a/Yi.Abp.Net8/src/Yi.Abp.Web/appsettings.json +++ b/Yi.Abp.Net8/src/Yi.Abp.Web/appsettings.json @@ -11,7 +11,10 @@ "SelfUrl": "http://*:19001", "CorsOrigins": "http://localhost:19001;http://localhost:18000" }, - + //配置 + "Settings": { + "Test": "hello" + }, //数据库类型列表 "DbList": [ "Sqlite", "Mysql", "Sqlserver", "Oracle" ], diff --git a/Yi.Abp.Net8/src/Yi.Abp.Web/yi-abp-dev.db b/Yi.Abp.Net8/src/Yi.Abp.Web/yi-abp-dev.db index 929b55f1430dd47d7ec17503ab52ca3bb9e4f76d..6c2ef117dfc9790cb1d48040a5d9cafced4ba500 100644 GIT binary patch literal 487424 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

C7RBEUdF1e7oh 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 literal 487424 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